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