<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          2021 面試心得

          共 8979字,需瀏覽 18分鐘

           ·

          2022-01-11 11:34

          提筆已經是 2022 年 1 月 1 號。想了想還是準備寫一遍文章記錄一下,因為疫情的影響,可能很多小伙伴已經在自己公司待了至少 2 年以上吧,然后就是今年的一個跳槽高峰。從身邊朋友或者獵頭就能看出,除了金三銀四,金九銀十,感覺找工作的是從年頭到年尾,招聘的也是從年頭到年尾,Everyday~

          今非昔比

          還記得 3 年前跳槽,出去面試,基本上當天就有結果,要么過,要么不過。而現在真是各種拖延,也可能和跳槽的時間有關系。我是9月份開始面試的,可能有些公司招人已經不是很著急了,所以建議看機會的大佬們,可以換個時間,我是深有體會??

          面試時間變長,對于看機會的你來說,這將是一個很大的心理考驗,面試過的應該有同感吧!

          此外還有一個比較重要的就是技術了。從 BOSS 上能看到,現在薪資很高,但是要求也很高,所以,想要入坑一個比較滿意的公司,那你的技術也要讓別人滿意,總結一句話:就是問的很深。比如,我面阿里的螞蟻財富,因為我簡歷上寫了網絡協議相關的內容,面試管就問,HTTP 1.0、HTTP2.0/HTTP3.0,一個接一個的問??赡苡行┕局粫柕?HTTP1.0 和 HTTP2.0,然后就 over 了,后面再說具體面試題。

          準備

          這次的跳槽我準備的時間確實很長,也與我自身平時的工作有關系吧。平時開發(fā)只做業(yè)務代碼開發(fā),沒有深入研究底層邏輯,具體準備的就是 OC 的底層原理、runtime、runLoop、多線程、鎖、性能優(yōu)化、離屏渲染等等。這些你可以看下小碼哥的課程,確實不錯,還有邏輯教育,不過邏輯教育的課程沒有接觸過深,只是試聽過幾節(jié),感覺還是有點東西,不過就是有的老師講課的方式,不好接受。除此之外,我還把Swift 重新溫習了一遍,這個還是必備的。因為 Swift 是一個趨勢,一些公司慢慢從 OC 轉到 Swift,你可以從 BOSS 上看出來,比如得物就是純 Swift,還有小紅書,最后也還是最重要的一部分就是算法。如果你想進大廠,那算法是必備的,我看的算法也是小碼哥的課程,講的確實很全面。

          努力奮斗的五個月

          如果自己有一個很強烈的想法你想實現,那么對于平凡的我們來說只有努力奮斗,沒有第二條路。除非,馬云爸爸是你家親戚(??)。準備的幾個月基本上是每天早上做地鐵就是看自己準備的一些文檔,白天工作,中午休息的一個半小時,我會抽出來刷抖音的半小時,看視頻學習。然后晚上下班,那就是 9 點到 11 點,差不多每天晚上要花 3 小時學習。想想那一段時間,雖然很辛苦,但是確實也學習到了很多東西,也感謝媳婦對我的支持!

          看視頻學習,其實這種高強度的大腦輸入,說真的你可能很快就忘記了,那么怎么辦:

          • 看第二遍
          • 寫代碼,自己根據老師所講,進行源碼跟讀
          • 自己總結,做筆記

          很多東西,只是聽聽是不行的,一定要自己去寫代碼,還有應用。要想想在平時開發(fā)的過程中,能不能把這些底層知識也運用到。舉個栗子:在使用 NSTimer 的時候,持有 self 會出現循環(huán)應用的情況,那么解決這個問題,可以使用 NSTimer + block 的形式做,還有另外一種方式是使用 NSProxy。我在目前的項目中去搜索發(fā)現很多三方庫也是使用的 NSProxy。

          對于 Swift,有些公司除了問你 OC 的問題,也會問一些 Swift 的問題,所以 Swift 你也是必須掌握的。比如:訪問權限,面向協議,閉包,函數式編程,結構體和類的區(qū)別這些,當然不會問這么簡單,還有可選型的本質、lazy 是怎么實現的、泛型的本質等等。

          對于算法,只是看視頻聽課是不夠的。我面試下來,B 站、阿里、百度,其實問的算法沒有我們想象的那么難,問的比較多的就是二叉樹、鏈表、排序。對于大廠的面試,就是給你一個和 leetCode 一樣的編輯文本,直接敲出來,另外還要說出時間復雜度和空間復雜度。

          對于網絡,確實面試過程中問的比較多,也是一些常見的問題,HTTP/HTTPS 的原理、為什么進行3次握手、TCP/UDP的區(qū)別及使用場景,后面再詳細說。

          下面我把自己要準備的一些清單,分享一下,希望可以幫到你,當然這只是一部分。

          遇到的問題

          對于面試,不同面試官由于個人喜好不同,所以問問題也不同。有的會問的很細,有的可能只要你答出來思路就可以了,下面我列舉一些比較有代表性的問題。上面說的面試問的很深,怎么理解呢?比如得物,當時面試官問我一個關于 RunLoop 的問題:使用 RunLoop 如何監(jiān)測頁面發(fā)生卡頓?這個面試題的答案就是新創(chuàng)建一個線程,并將這個線程加到 RunLoop 中,然后在這個創(chuàng)建的線程中加一個 Timer,每隔 1 秒進行監(jiān)測,設置一個變量隨著定時器遞增,同時在 RunLoop 的kCFRunLoopBeforeWaitingkCFRunLoopAfterWaiting之間設置一個變量,然后將兩個變量進行比較,如果兩值的差值大于 2 秒,則說明有卡頓發(fā)生,具體代碼編寫,可以參考 簡單監(jiān)測iOS卡頓[1]。

          那么問題來了,你回答這些面試官感覺還可以,然后會繼續(xù)問,如果監(jiān)聽到卡頓,怎么知道哪些地方有卡頓?堆棧信息怎么獲取呢?所有堆棧信息都可以獲取嗎?有沒有更好的獲取堆棧的方案?一連三問,童靴們,你該有何感想??。這就是我所說的面試深度,這個問題的答案可以參考下獲取任意線程調用棧的那些事[2],其實就是使用系統的backTrace_symbols。

          作為iOS開發(fā),對于鎖,應該都知道,包括互斥鎖、自旋鎖、遞歸鎖,問的比較多的就是他們的區(qū)別,以及在開發(fā)中使用到的鎖都是那些,NSLock 是比較常用的,也是面試問的最多的,它是互斥鎖,是對mutex普通鎖的封裝。那么問題來了,這些你都知道,是不是感覺準備的OK了,我想說的是我也這么覺得哈哈~。然而現實就會打臉,在我面試餓了嗎的時候,面試官對于鎖的最后一個問題就是,如果出現了死鎖,我們如何檢測,如果去解決呢?~苦笑過~

          在面試京東的時候,有一個問題是這樣的:iOS 的內存是有不同區(qū)域組成的,那么對于一個全局變量,初始化和未初始化的時候所在的是同一塊區(qū)域嗎?

          分析下這個問題,在 iOS 中內存主要是分為五大區(qū)域的:棧區(qū)、堆區(qū)、靜態(tài)區(qū)、常量區(qū)、代碼段,然而你不知道的是:

          • 未初始化的全局變量和靜態(tài)變量在 BSS 區(qū),即未初始化區(qū):.bss(Block Started by Symbol segment)
          • 已初始化的全局變量和靜態(tài)變量在數據區(qū),,即初始化區(qū):.data

          其他詳細的介紹,可以看下 iOS內存管理-內存五大區(qū)[3] 。

          MultiThreading 多線程

          我把多線程單獨拿出來說,那么它的重要性就不言而喻了,不管是移動端或者后臺,面試是必問的。因為在面試之前,我準備的其實時間挺長的,對于多線程的各種使用以及面試問題,我都是寫代碼實踐過的,感覺只要是多線程的面試問題,我絕對OK,信心滿滿,然后現實很骨感~

          有一個經典的多線程的總結,我在這放一下:

          中通快遞面試官的一個問題:如何中斷一個線程?其實這個問題在平時開發(fā)中遇到的可能性不大,但可能業(yè)務需求,所有面試官才會問。那么如何作答呢?在 OC 中是沒有直接中斷線程的方法可以調用的,如果用 Swift,可以使用DispatchWorkItem。但是如果是使用 URLSession 進行的網絡請求,每個 task 都有cancel 方法,直接 cancel 掉就可以。如果是耗時的計算類線程,需要在合適的地方加上 flag,在 cancel 時把 flag 置為 false,線程就能及時終止,你學廢了嗎??????

          還有一個我印象比較深刻的就是小紅書的面試官問的問題:對于全局隊列

          dispatch_queue_global_t dispatch_get_global_queue(intptr_t identifier, uintptr_t flags);

          這個全局隊列使用的時候,可以根據傳入的參數不同來讓線程按照一個優(yōu)先級來執(zhí)行,面試官的問題是,如何使用全局隊列來創(chuàng)建一個有序的任務隊?

          dispatch_get_global_queue(intptr_t identifier, uintptr_t flags)使用時,第一個參數是可以傳入不同的值,官方提供的幾個如下:

          #define DISPATCH_QUEUE_PRIORITY_HIGH 2
          #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
          #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
          #define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN

          傳入不同的值所得到的線程執(zhí)行的順序是不同的,代碼如下:

          - (void)test {
              dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                  NSLog(@"start task 1");
                  [NSThread sleepForTimeInterval:3];
                  NSLog(@"end task 1");
              });
              dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
                  NSLog(@"start task 2");
                  [NSThread sleepForTimeInterval:3];
                  NSLog(@"end task 2");
              });
              dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                  NSLog(@"start task 3");
                  [NSThread sleepForTimeInterval:3];
                  NSLog(@"end task 3");
              });
              NSLog(@">>>>>>>>>");
          }

          打印結果如下:

          2022-01-02 11:51:11.734788+0800 Interview03-RunLoop[14921:446533] >>>>>>>>>
          2022-01-02 11:51:11.734831+0800 Interview03-RunLoop[14921:446730] start task 1
          2022-01-02 11:51:11.734852+0800 Interview03-RunLoop[14921:446729] start task 2
          2022-01-02 11:51:11.734876+0800 Interview03-RunLoop[14921:446735] start task 3
          2022-01-02 11:51:14.737209+0800 Interview03-RunLoop[14921:446729] end task 2
          2022-01-02 11:51:14.737209+0800 Interview03-RunLoop[14921:446730] end task 1
          2022-01-02 11:51:14.737220+0800 Interview03-RunLoop[14921:446735] end task 3

          PS:一定是有耗時的任務存在的,一定要 3 個任務都在同一個線程里面,否則就會有問題,路過的大佬,可以試試~

          算法

          今天最流行的詞就是"卷",算法的面試也是一樣。童鞋們,稍微有點規(guī)模的公司,多多少少都會問一些,大廠基本上是要求你手寫算法,或者給你一個編輯工具直接寫,對于一些小型公司,可能會問一些思路。我分享一下遇到的算法題:

          B站

          手寫算法,一共 4 面,寫了 3 個算法:

          • 兩數之和 - LeetCode 1[4]

          • 合并兩個有序鏈表 - LeetCode 21[5]

          • 二叉樹翻轉 - LeetCode 226[6]

          小紅書

          手寫算法,因為我是現場面試的,如果是視頻,應該是遠程編輯。

          • 判斷有效數字 - LeetCode 65[7]

          百度

          手寫算法:

          • 復原 IP 地址 - LeetCode 93[8]

          阿里本地生活

          視頻面試,提供編輯代碼工具,自己寫代碼。具體我記不清楚了,大致的意思是:

          • 把數組排成最小的數 - 劍指Offer 45[9]

          其他

          上面是我印象比較深刻的,還有一些小公司會問一些排序的就不多說了。

          那么如何應對,我分享一下我的經驗,之前在沒有學習算法的時候感覺應該挺難的。其實如果你去研究學習,花時間投入,一些面試常問的二叉樹、鏈表、排序,并沒有那么難,除非一些動態(tài)規(guī)劃的,如果你是年薪 60W+ 的,可能會問。還有算法的難度還和你面試的部門有關系,看面試部門的要求,你是高級還是專家或者架構師,要求都是不一樣的,考察的難度也是不一樣的,具體的情況要具體分析。

          如果你刷題多了,會發(fā)現很多題目是有套路的,比如排序的或者鏈表,很大部分題可以使用雙指針或者多指針去做,還有一些"基本功"就是一些基本的要求,你一定要在沒有參考的情況下,達到手寫代碼,比如反轉二叉樹、前序遍歷、后序遍歷、層序遍歷、計算二叉樹的高度和寬度、求一個鏈表的倒數第k個節(jié)點等,這些東西你一定要胸有成竹,然后再去刷題,效果會更好~

          還有一個最大的好處就是,你可能在面試的時候,會遇到原題或者比較類似的題目,那豈不是一舉兩得~

          在這推薦一個大佬的公眾號:labuladong,里面文章不錯。希望對你有所幫助~

          如何面試

          準備算法的時候,需要刷題,面試也是一樣,需要刷。但刷面試,是有套路的,那就是你要先面試小公司。我有一個朋友感覺面試小公司沒有意義,其實我感覺并不是,比如我,因為我之前準備的時候是看了很多視頻,很多東西對于你的大腦來說都是輸入的過程,而面試對于大腦來說是輸出的過程,也是一個痛苦的過程,面試過的童鞋應該都深有體會!我記得我面試第一家是追書神器,一個小公司,他們那邊 iOS 團隊就 3 個人,但是那個面試官問的就很全面,基本上把我準備的都問了一遍。面試了1個小時,面試后的感覺是,我頭痛???♂?,把所有的輸入轉化為輸入,這種感覺,你懂的~

          一定要把你最想要的公司放在最后去面試,這樣你整個的面試狀態(tài)以及面試的心情是不一樣的,Good Luck To You!

          大廠的要求

          越是比較有名氣的公司要求越高,高在哪里呢?有可能簡歷都不過,如果簡歷過了,面試的每一輪,都有可能不過。我這次面試,機會也不少,讓我感觸最深的就是,越是大公司,面試官就越低調,而且人都很隨和,沒有一點架子。讓我印象最深的就是現場面試小紅書,當我等在面試會議室的時候,面試官進來,先給我握手,然后再讓我坐,還有 B站的面試,面試官都很 nice,會讓你感覺很好!

          上面說好的一面,下面說不好的一面,那就是技術要求很高,在給你出的面試問題中,特別是一些死的東西,你一定要百分百的答對,如果能舉一反三最好,特別是一些大廠,比如阿里、京東,如果問你 10 個問題,你答對 9 個,那么不好意思,你這次面試還是失敗的,這就是大廠的要求。還有就是手寫代碼的能力,如果讓你手寫一段代碼,然后你可能不會寫,或者激動等其他原因,你給面試官說,可以說下思路嗎?基本面試官會答應,但是就算你說的再好,這次面試還是失敗的,因為面試官不知道你手寫代碼的能力,現實就是這樣殘酷!

          一個人的運氣

          不知道是不是 10 月之后,企業(yè)是不是只做人才儲備,還是不著急,所有的面試安排,給人的感覺就是拖拉。再加上一些假期,時間就更長,然后還有中途停招的???♂?。不光是我遇到過,我朋友也遇到多,面試都三輪了,說崗位沒有了。我遇到的是平安的,一面過了,然后 HR 給我打電話說,職位停招了。還有百度的,二面的郵件都發(fā)了,等到快面試的時候,給我說職位停招了,想哭的心都有。所以,在你沒有收到offer 之前,一切都是未知,這次對我來說還有一個最大的遺憾就是被 B 站給拒了。去B站現場面試,從下午 1 點一直面試到晚上 6 點多,出去的時候,外面天都黑了。等我走的時候,第四個面試官還加我微信,讓我準備薪資證明,有圖為證:

          B 站的面試,最終還是沒有給 offer??,當時我的心情是如此的奔潰~

          現在我雖然沒有去B站,還是在一個我感覺不錯的公司,這就是傳說中的上帝給你關了一扇門,然后給你開了一扇窗吧!

          我說這些并不是讓你感覺到灰心,恰恰相反,希望路過的大佬,把握每一次機會,珍惜珍惜再珍惜。有些大廠沒有給offer,并不是你不優(yōu)秀,技術不行,心態(tài)要調整好~ 你是最棒滴~

          本次面試對自己的影響和后期計劃

          這次面試,其實對我影響挺大的,告訴了我,切莫要揮霍青春了。如果我早在一年前就開始做知識的儲備積累,早一些去學習研究各種算法,這次面試也不必花費這么長時間去準備,還有就是在開發(fā)中就要思考,實現業(yè)務功能或者遇到問題時,這個代碼的實現方式,底層是怎么實現的,原理是什么,有沒有更好的解法,其他的大佬遇到這個問題是怎么解決的。就如上面我說的多線程,如果你不自己去寫 Demo,你永遠不知道還能這么玩,而且里面還有坑。大廠的大佬,也就是在日常開發(fā)中,比我們多做了一些研究、總結、踩坑、思考~

          只是幾個月的努力,其實遠遠不夠的,貴在平時吧~ 一起加油!

          這次面試花費的時間挺長的,也感謝之前努力的自己。在此面試了阿里、B 站、京東、得物、聲網、百度、合合(掃描全能王)、哈羅出行、小紅書等。在文章末尾,我將自己的一些面試遇到的問題,整理了一份放在 Github[10] 上,有需要的請自??!寫作不易,還望各位大佬,點贊支持,哈哈~

          引用資料

          [1]

          簡單監(jiān)測iOS卡頓: https://www.jianshu.com/p/71cfbcb15842

          [2]

          獲取任意線程調用棧的那些事: https://toutiao.io/posts/aveig6/preview

          [3]

          iOS內存管理-內存五大區(qū): https://www.jianshu.com/p/2d4acf4a53f9

          [4]

          兩數之和 - LeetCode 1: https://leetcode-cn.com/problems/two-sum/

          [5]

          合并兩個有序鏈表 - LeetCode 21: https://leetcode-cn.com/problems/merge-two-sorted-lists/

          [6]

          二叉樹翻轉 - LeetCode 226: https://leetcode-cn.com/problems/invert-binary-tree/

          [7]

          判斷有效數字 - LeetCode 65: https://leetcode-cn.com/problems/valid-number/

          [8]

          復原 IP 地址 - LeetCode 93: https://leetcode-cn.com/problems/restore-ip-addresses/

          [9]

          把數組排成最小的數 - 劍指Offer 45: https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/

          [10]

          面試題整理: https://github.com/cuilinhao/2021_Interview


          瀏覽 92
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩伊人 | 神马午夜福利视频 | 白丝暴肛在线观看91 | 天天艹天天日天天干 | 久久夜色精品国产亚洲AV |