進字節(jié)了
基本情況
先來說一下我的基本情況,我是西安某211高校電子科學與技術專業(yè)的研究生(非科班)。本科學過計算機相關的一些課程,如計算機網絡,操作系統(tǒng)。編程語言方面本科除了學過開設的 C 語言外,自學了 Python 和 C 。研一抽空才開始對數據結構和算法進行了學習,所以我覺得自己一開始就是個小白,一點點成長起來的。另外,因為顧及到女朋友,找工作比較考慮地域,可能有一些小伙伴與我有相同的經歷。我在秋招的時候簽了深圳的 Shopee,但是當時為了和女朋友在一個地方,春招又開始找工作,最后經歷了一個月的努力,杭州字節(jié)上岸。有小伙伴可能會問我,為什么秋招沒有直接找杭州的。其實,我在秋招的時候也找了杭州的,但是當時杭州比較好的公司我都沒過。。。這里我來說一下為什么我秋招如此的失利(菜是原罪/(ㄒoㄒ)/~~)。在秋招一開始,也陸陸續(xù)續(xù)投了一些公司,有大廠提前批,也有二線廠。但是,當時怪自己復習不充分,有時候因為代碼問題沒過,有時候因為基礎答得不好導致與后續(xù)面試無緣。后來經過多次得復盤,在基礎和代碼題下了很多功夫,但是還是面試失利。后來在復盤時,我發(fā)現我與面試官交流比較少,比如當面試官問我一個比較偏實際業(yè)務的問題時,我基本都是在那思考好久,中途也很少和面試官交流。這就會顯得很尷尬,就好像你和一個人在聊天,另一個人突然掉線一樣。即使你最后回答出來了,但是給面試官的體驗不太好。畢竟如果有幸進了公司,就成了一起共事的同事,肯定會一起交流業(yè)務, 技術問題。如果面試官覺得你在面試中與他交流甚少,那么會給他一個暗示,就是你不想和他交流(也許這不是你的本意),最終 pass 你。?你要找什么工作?
可能這一點上你會考慮很多,比如崗位,地域,平臺,收入等。這些都是秋招前可能就要考慮的問題,特別是崗位,更是決定了備戰(zhàn)復習的方向。作為過來人,我會給一些自己的看法,但是最終靠你自己決定。崗位是我最先想聊的。一般大部分人都會選擇找的崗位是算法、后端開發(fā)、測試開發(fā)崗位。而像前端、客戶端開發(fā)(IOS/Android)也有一些人會去做。個人感受每年這兩種崗位投遞的人數不如上述三個崗位多,尤其是今年的算法崗位和后端開發(fā)可以說是一片紅海。這些崗位在校招過程中的難度系數是:算法 > 開發(fā) > 測試開發(fā) > 前端 = 客戶端開發(fā)。其中算法主要分三個方向,難度如下:計算機視覺 > 推薦系統(tǒng)(機器學習、大數據)> 自然語言處理。以上提到的難度不是指技術難度,而是獲得心儀 offer 的難度。大廠的 cv 崗神仙打架,算法今年諸神黃昏,更加上疫情影響,許多海歸學子也加入其中,可以說今年是找工作最難的一年。所以,在這里我的建議就是,心中要先有一個目標崗位,然后去針對目標崗位的一些技術棧進行準備。如果要找開發(fā)崗位的,扎實的學習完計算機基礎、數據庫、算法和數據結構、設計模式以及 C 或 Java 等編程語言相關的知識,準備一兩個項目,并且熟悉項目中所用技術的原理細節(jié)。如果有小伙伴要找算法崗位的話,那么要把自己研究的領域吃透,并且在其他領域也要有所涉及一些。簡歷篇
作為一名在校生,在進入校園的那一刻起就要想著怎么充實自己的簡歷,因為大家不可能用半年的時間來填滿自己的簡歷。簡歷上的各項榮譽都是你在校期間的積累。簡歷里內容主要有:個人基本信息、聯(lián)系方式、教育經歷、成績、 掌握的技術棧、 科研項目經歷、比賽經歷、獲獎經歷、發(fā)表論文、其它等。一般簡歷上可手寫意向崗位,因為不同公司對崗位的叫法差距蠻大,不能每一個都打印意向崗位。此外簡歷打印最好是彩印,讓面試官看著舒服。對于在校生,簡歷內容最好在兩頁以內(也即雙面彩印時,一張紙可完成)。紙質版簡歷一般在現場面試要攜帶,但在網上投遞公司時,通常是按照公司要求填寫個人簡歷,這個過程會十分繁瑣,一個公司可能要填半小時,著實費心。在這里推薦大家使用??秃啔v助手插件,可以幫助你快速填寫電子簡歷。下面主要說簡歷里的技術體現。面試官看重簡歷里的什么?這個問題你可以換位一下,如果你是面試官,你覺得哪些內容能體現一個人的水平?emmm 據個人面試經驗,簡歷上的閃光點排名及說明如下表:希望上述表格對大家有導向作用,另外說一下簡歷上的一下注意點:第一點,每個閃光點的描述上要包含:這個項目或比賽是什么、你負責了什么、用了什么技術棧、最終排名如何。項目、比賽、論文每個里面要有至少有一個自己非常熟悉。據個人經驗,面試官通常會這樣提問“你挑一個印象最深的項目/比賽講一下吧”。所以你們自己要提前預演怎么回答這個問題,一定要預演一遍。第二點,簡歷上寫的任何技術,你都要會。不會的千萬千萬不要寫,被問到就死翹翹了。拿捏好用詞,比如「熟悉 C 」和「熟練掌握 C 」 程度上是不一樣的,只是剛入門的技術,我建議就不要寫了。簡歷上你寫的任何技術棧,只要面試官熟悉,他基本上都會問你。比如,你寫你懂 Docker,恰巧面試官會,那他不出意外肯定會問一些相關問題。項目篇
各位找工作的小伙伴一定很在意找工作時面試官是不是特別看重項目經驗,這里請小伙伴聽我娓娓道來。以我個人的面試經歷,我其實簡歷上是沒有什么和研發(fā)類崗位相關的一些項目的,我簡歷上的項目基本都是在校期間做的科研項目以及一些比賽(計算機視覺相關比賽)。我在一開始面試的時候屢次失利,以為我是沒有相關的項目經歷。但是后來通過聽自己的面試錄音(因為我們由于疫情是線上面試)進行復盤,發(fā)現自己在回答一些技術問題時回答的也不是很好(這里的不好指的不是回答有誤,而是對于某一個問題,基本上都是兩三句話就講完了,個人感覺給面試官的感覺就是你懂得很淺)。那么這里的項目經驗到底重不重要呢?其實對于國內的一些互聯(lián)網大廠來講,像阿里、字節(jié),這些公司其實對于項目經驗看的不是很重,更看重的是你的基礎(對于大廠來講一個基礎扎實的應屆生可塑性是很強的)和代碼能力。但是不看重,不代表不用準備項目,如果你像我一樣是后期轉崗,沒有時間準備,那么就把自己簡歷上的項目都搞明白,給面試官講清楚,面試官可能不懂你做的是什么,但是多年的工作經驗,他們對于你做的東西,一聽就能洞察其中的要點,可能還會深挖一下細節(jié)。反之,如果你講的不好(不是你不懂,而是表達交流能力的問題),面試官可能聽的云里霧里,會大大減分的,畢竟以后你進了公司都是同事,交流肯定很多,他們更喜歡和交流起來舒服的人一起共事。但是如果一開始就打算找研發(fā)類崗位的小伙伴,時間充裕的話,還是準備一下相關的項目,這里準備的時候一定要吃透,具體分為以下幾個部分:- 項目整體的實現流程(最好自己畫一個圖出來,方便自己理解,以及面試過程中可以展示給面試官,清楚明了);
- 你在做這個項目的時候遇到了哪些難點,是怎么解決的(重點,面試官肯定會問的);
- 在這個項目中用到的一些知識點,技術棧一定要清楚細節(jié),搞明白為什么這么用,有沒有可以替代的,有的話為什么不用替代的,用了效果怎么樣(凡事要多考慮一下,畢竟你不知道面試官會不會問,準備全面一點不會有壞處)。
技術篇
由于我在校招過程中找的大都是測試開發(fā)崗位,客戶端和算法崗位也找過一些,因此主要說一下對于測試開發(fā)崗位考察的技術。對于測試開發(fā)崗位,據我個人面試經驗總結如下幾個部分:數據結構,計算機基礎(包括操作系統(tǒng),計算機網絡等),數據庫,設計模式、測試用例設計,測試的方法,代碼。另外,對于算法,我這里也可以給小伙伴一些建議,因為本人在校期間是做計算機視覺算法的,算法崗位需要掌握的總結為 4 個部分:通用知識理論(不管什么崗位都要會的)、深度學習、機器學習、代碼。對于客戶端每個公司具體考察什么我也不好說,據我個人面試經驗,字節(jié)客戶端崗位會招 0 經驗,但是你的基礎和代碼要過關(二者不可缺一才能過關斬將)。數據結構
筆試必考內容。對于數據結構,我是通過看《大話數據結構》這本書進行學習的,并自己通過代碼去實現一些常用的數據結構,如二叉樹,鏈表等。筆試時很多編程題都與數據結構有關,比如堆棧隊列二叉樹等知識頻繁出現在筆試中,還有各種排序的變異程序題。而面試時,面試官也喜歡提問相關知識,比如他們很熱衷提問快排和歸并排序,還喜歡提問 Top k、海量數據排序等。編程語言
一般 Python 都要會,鑒于經歷有限,C 或 Java 二選一。如果你偏向找?Java 開發(fā),機器學習和大數據的話選?Java 更好。算法筆試時使用的語言一般就是上述三者之一。不過這里講的掌握一門編程語言,不是簡單的用它寫代碼,需要更深層的掌握底層原理。比如我在面試百度的時候,一個小時的面試,有 30 分鐘再問 C 的知識,在面試字節(jié)等其他公司的時候,經常被問到 Python 的內存管理機制。如果你想快速概覽一門語言的知識點,推薦看菜鳥教程,總結的短小精悍,適合學習和查閱。由于我主攻C ,這里我說一下我主要在準備秋招時看了哪些資料吧。首先對于C 的基礎學習,我看了《C Primer Plus》這本書,看完基本就入門了,看完之后看了《Effective C 》以及侯捷的《STL源碼剖析》(由于時間關系沒有看完)。看完書之后就是對語言的熟悉了,后期刷題基本上都用 C 去刷。其他常考的 C 知識,我可能沒有總結資料,需要你們自己搜,比如:
- char a[3], char a[], char*a 的區(qū)別;
- 模板template、const和define定義常數用誰更好;
- 宏定義和內聯(lián)函數的區(qū)別;
- 虛函數(常考);
- 虛表(??迹?;
- sizeof;
- 多態(tài);
- C 內存管理;
- C 11 特性;
- C 編譯的 4 個階段;
- 動態(tài)庫與靜態(tài)庫;
- C 結構體和類的內存對齊問題;
- 智能指針;
- ….
- Python 多線程;
- 全局解釋鎖;
- Python?數據結構的底層,如索引、元素增刪、字典、元組、集合等是怎么實現的;
- 內存管理方式;
- 深拷貝淺拷貝;
- 三元表達式;
- *args 和 **kwargs;
- join 用法、split 用法;
- 類、類中 self;
- 運算符 and,or,not;
- is 和“==”的區(qū)別;
- 位運算和C 的不同;
- …
計算機基礎與數據庫
計算機基礎包括計算機網絡和操作系統(tǒng).這里首先推薦的就是小林的圖解操作系統(tǒng)和圖解計算機網絡了,講解通俗易懂,對于有一點基礎的人來說很快就能構建起知識網絡,對于 0 基礎的人來說可以突擊一下面試。但是建議如果時間充足還是建議先系統(tǒng)學習一下,這里我推薦可以看《計算機網絡(第七版)》,看完基本上整體入門,然后再去看小林的圖解系列,把整個知識串起來形成知識網絡。數據庫,我學習的是 MySQL,是在 b 站找的尚硅谷的視頻一整套(包括基礎和進階)學習下來的。包括操作系統(tǒng),我也是先在b站系統(tǒng)的學習了(看的是王道考研的操作系統(tǒng)),才去看小林的圖解系統(tǒng)對一些常考的問題以及怎么與實際問題結合進行了學習和查漏補缺。另外,在公司大多都是在 linux 環(huán)境下進行開發(fā)工作,面試官多多少少會問一些 linux 指令,大家可以熟悉一些常用的指令。這里我根據我個人的面試經歷總結一下上述幾個方面??嫉囊恍╊}。計算機網絡:- TCP、UDP的區(qū)別;
- HTTP 與 HTTPS 的區(qū)別;
- 三次握手與四次揮手;
- HTTPS 加密方式與過程;
- 輸入一個網址中間發(fā)生了哪些過程(如果面試官問道這個問題,那么肯定會連帶 DNS 解析過程及三次握手四次揮手一起問);
- 什么是 Cookie,如果 cookie 禁用怎么辦;
- Cookie 與 Session 的區(qū)別;
- TCP 的長連接怎么實現;
- HTTP 1.x,2.x的特性;
- TCP 的可靠性傳輸怎么保證(會被問到重傳機制,滑動窗口,流量控制);
- Get 和 Post請求方式的區(qū)別
- …
- 內存管理;
- 進程與線程(每次都考);
- 進程通信的方式;
- 死鎖相關知識;
- 頁面調度算法等;
- 給幾個表,寫 SQL 語句;
- SQL 語句如何優(yōu)化;
- SQL 索引;
- 根據給定的表,讓你說一下如何創(chuàng)建索引比較好。
- chmod 指令;
- 查找文件中符合條件的字符串指令 grep;
- sed 指令;
- 查看進程使用情況的指令 top(其實也可以說htop)。這個指令不同面試官不一定考察什么。建議可以看看文件管理類指令和文檔編輯指令。
筆試和面試的代碼題
由于這個十分重要,所以我放到這部分最后單獨說明。在我看來,筆試能力在秋招中要占據 60% 的重要程度。首先筆試不過,你根本沒有面試的展示機會。其次面試中也會反復讓你手寫代碼,以字節(jié)為例,每一輪面試都是 1-2 道編程題,有時候不怎么聊簡歷;百度每一輪面試有一道編程題。現在公司的面試模式就是這樣,如果代碼沒搞出來,大概率會被淘汰。并且最窒息的是這些代碼題都不簡單,一般都是 leetcode 中等到 hard難度。刷題主要可從以下三個渠道。第一個,劍指offer:https://www.nowcoder.com/ta/coding-interviews第二個,leetcode:?https://leetcode-cn.com/problemset/algorithms/第三個,近期面試中??碱}:https://www.nowcoder.com/activity/oj劍指 offer 作為大經典,是一定要刷兩遍以上的,很多題都是面試時的原題,里面包含了很多筆試常用的思想方法,反復看,反復研。我一開始每天 10 題,過兩遍以后,要求自己每天快速過劍指一遍。leetcode 由于題目十分之多,刷完是不可能的。我的意見是 leetcode 作為你弱項的專項練習。leetcode 右側有標簽分類,如下圖:另外在鞏固完弱項的情況下,建議將 leetcode 前 300 題刷熟練,據我個人面試經歷,國內大廠面試出的代碼題 80% 都是這個范圍內的。另外,我在刷題的時候看了 labuladong 總結的算法小抄,對算法的理解很有幫助。最后根據我的面試經歷,根據個人感覺,公司??碱}有:- 鏈表類(鏈表反轉類題目)
- 二叉樹類(二叉樹的遍歷類型題,最大公祖先類題目)
- 字符串操作題目
- dfs/bfs
- 動態(tài)規(guī)劃(這個考的基本都是 leetcode 上的或者是背包問題,對于動態(tài)規(guī)劃問題其實有很多種類,比較見到的就是一維動態(tài)和二維動態(tài)),另外還有區(qū)間調度類型的題目(貪心算法,也屬于動態(tài)規(guī)劃的一種特殊情況。
心理篇
校招期間要時刻關注自己心理狀態(tài), 這可能會起到最重要的作用。焦慮、彷徨、孤獨、自我懷疑,校招期間會時常發(fā)生,相當折磨一個人。像我后期找字節(jié),就被字節(jié)撈了六七次(這里提一下,想被撈的話,你的面試評價一定要好),真的很搞人心態(tài),但是我堅持下來了,希望小伙伴在找工作的時候不管發(fā)生什么堅持下去。希望你放下比較,不要因為別人先拿到了 offer 就開始焦慮,有人可以早早結束校招,那他也在后面付出了我們看不到的東西,也可能焦慮彷徨過。你要做的是掌控自己的節(jié)奏,知識打磨的夠硬,簡歷夠充實,準備充分就不用擔心沒有心儀 offer。另外面試完不要深究面試結果如何,整個校招面試會很多,如果每一場結束后都不能釋懷,會很影響你接下來的狀態(tài)。面試結束后,會不會被錄取不是我們焦慮就能決定的,你可以從面試中總結,但不要從面試中懊悔。如果你有一起奮戰(zhàn)的戀人、朋友,這個過程中互相鼓勵和幫助,體驗會好很多。及早準備,如果你有幸在提前批就拿到心儀 offer,那么你后面會過的很稱心。早早準備總不會差,加油~再說你已經拿到本寶典,還!怕!啥!