勵(lì)志!一個(gè)非科班生的逆襲之路
前不久收到一位讀者的 offer 咨詢,我一看好家伙,拿到了好幾個(gè)大廠的 offer,薪資都很給力

更為難能可貴的是這位朋友是非科班出身的,讀碩期間才轉(zhuǎn)的計(jì)算機(jī),我覺(jué)得他的學(xué)習(xí)經(jīng)驗(yàn)對(duì)一些讀者應(yīng)該會(huì)有幫助,所以邀請(qǐng)他給大家做了一次分享。
另外我想說(shuō)的是近期雖然一些大廠裁員力度比較大,但我依然覺(jué)得互聯(lián)網(wǎng)行業(yè)依然是個(gè)值得投入的行業(yè),無(wú)論是薪資(畢竟一年頂其他行好幾年)還是競(jìng)爭(zhēng)環(huán)境(無(wú)需復(fù)雜的人際關(guān)系,基本只憑技術(shù)說(shuō)話)對(duì)普通人都非常友好,踏踏實(shí)實(shí)練好內(nèi)功,不愁下家。一只站在樹上的鳥兒,從來(lái)不會(huì)害怕樹枝斷裂,因?yàn)樗嘈诺牟皇菢渲?,而是它自己的翅膀,希望這篇文章能幫助一些朋友順利卷入互聯(lián)網(wǎng)
2021秋招總結(jié)
1.寫在前
本人非科班,雙非本/211碩,雖然不是生化環(huán)材,但是就業(yè)前景也不是很樂(lè)觀。我身邊很多轉(zhuǎn)碼的同學(xué),而且很多碩士,研究生現(xiàn)在真的越來(lái)越多了,可能大部分人讀研只是為了混個(gè)學(xué)歷,包括我。如果說(shuō)你還是本科或者???,如果沒(méi)有好的機(jī)遇,繼續(xù)深造還是對(duì)的,真正找一個(gè)自己喜歡的事并堅(jiān)持做下去,難能可貴。我可能恰恰相反,也許有很多像我一樣的,讀研之后方向也不明確,被導(dǎo)師壓榨。
其實(shí),我轉(zhuǎn)碼是受實(shí)驗(yàn)室?guī)熜钟绊懀鳛橐粋€(gè)非科班的,從來(lái)沒(méi)想過(guò)自己以后會(huì)搞編程。轉(zhuǎn)碼的學(xué)習(xí)經(jīng)歷也和很多同學(xué)相似,當(dāng)時(shí)是和舍友一起,在秋招的時(shí)候才發(fā)現(xiàn)學(xué)院也有好幾個(gè)轉(zhuǎn)碼的。讀研期間最開(kāi)始接觸的就是python了,好像研究生最開(kāi)始學(xué)的大都是python,也有matlab,學(xué)習(xí)了半年多,然后就去學(xué)Java了。說(shuō)真的,語(yǔ)言本身其實(shí)沒(méi)有那么重要,在學(xué)習(xí)初段可能只是接觸了常見(jiàn)語(yǔ)法和基本使用,好多東西往往是觸類旁通的,但是非要選擇一門語(yǔ)言,經(jīng)過(guò)很多人的推薦,最終還是選擇了Java,原因還是Java生態(tài)強(qiáng)大,招聘的崗位也相對(duì)更多一些。也會(huì)出現(xiàn)入職后被要求使用另一種語(yǔ)言,比如遇到有些公司入職后要轉(zhuǎn)Go或者C語(yǔ)言,只要你能接受,大部分公司還是愿意的??傊?,選擇一門語(yǔ)言就好,其他的有需要再去學(xué),不在多,在精。
至于如何去學(xué)習(xí),感覺(jué)自己做的并不好。其實(shí),無(wú)非就是理論+實(shí)踐。理論最好是看一些比較權(quán)威的書籍,這樣會(huì)更加系統(tǒng)和全面,我大部分是看的技術(shù)博客和視頻,有利有弊,好處就是有些牛人的講解能夠深入淺出,但是我覺(jué)得忘得太快,可能是方法不對(duì),而且有的地方?jīng)]有聯(lián)系起來(lái);實(shí)踐是很重要的,小到一個(gè)排序算法、多線程demo,再到一個(gè)后臺(tái)系統(tǒng),都需要你去實(shí)踐。包括我在內(nèi),許多非科班同學(xué)的實(shí)踐能力可能比較弱,大佬除外,有時(shí)可能知道大體思路,但是總是"提筆忘字",總歸還是訓(xùn)練的太少了,對(duì)于系統(tǒng)級(jí)的項(xiàng)目可以跟視頻或者幾個(gè)人一起做就好了。所以,理論和思考固然重要,多去練習(xí)更加重要,眼高手低是不對(duì)的。
2.時(shí)間線
2020.1-2021.3
這個(gè)階段正是寒假階段,比較重要,為什么呢?因?yàn)榇赫泻蛯?shí)習(xí)一般在三月份就已經(jīng)啟動(dòng)了,如果早有準(zhǔn)備,可以找找實(shí)習(xí)或者用春招鍛煉一下自己,以八股和算法,有項(xiàng)目更好了。如果你一點(diǎn)沒(méi)準(zhǔn)備,一般是炮灰,大佬除外,很后悔當(dāng)時(shí)沒(méi)有意識(shí)到這點(diǎn)。其實(shí)自己當(dāng)時(shí)也在準(zhǔn)備,但是還沒(méi)有進(jìn)入“備戰(zhàn)”狀態(tài),只是慢悠悠的刷個(gè)算法題,效率比較低。所以,規(guī)劃好這個(gè)寒假。
2021.4-2021.6
這時(shí)候春招已經(jīng)接近尾聲了,實(shí)習(xí)是可以找找的。但是自己太菜了,準(zhǔn)備的太晚了,八股沒(méi)怎么看,算法也一般,基本上是一輪游,當(dāng)時(shí)就面了兩三家,感覺(jué)自己啥也不會(huì)就繼續(xù)復(fù)習(xí)了。如果早做準(zhǔn)備,多投幾家,情況會(huì)截然不同,因?yàn)閷?shí)習(xí)難度會(huì)比秋招小很多,同時(shí),作為非科班的同學(xué),有一份實(shí)習(xí)經(jīng)歷是非常重要的,你可以走實(shí)習(xí)轉(zhuǎn)正,也可以把實(shí)習(xí)作為跳板進(jìn)入大廠。總之,找一份實(shí)習(xí)很重要,尤其是對(duì)非科班的同學(xué)。
2021.7-2021.10
這段時(shí)間一般就是秋招了,現(xiàn)在公司一般會(huì)把時(shí)間提前,不是過(guò)去的金九銀十了,應(yīng)該是金八銀九。很多公司在七月份就放出提前批,可以多去嘗試,這不和秋招沖突,也就是你有兩次機(jī)會(huì)。比如,我當(dāng)時(shí)投了美團(tuán)提前批,但是只有客戶端崗位,然后栽在終面,面試官還是很厲害的,一針見(jiàn)血。后邊我又投了美團(tuán)的正式批崗位,并拿到了正式批 offer,也可能是不同的部門,面試官?zèng)]有過(guò)問(wèn)之前的面試。
之后又面試了字節(jié)提前批-客戶端,是內(nèi)部實(shí)習(xí)的群友內(nèi)推的,找一個(gè)能實(shí)時(shí)聯(lián)系的內(nèi)推人還是挺好的。至于為什么是客戶端,當(dāng)時(shí)也是隨便投了一下,周圍很多非科班的朋友也投了客戶端或者測(cè)開(kāi)。這里說(shuō)一下,客戶端比較難招到人,如果你想去大廠,會(huì)相對(duì)簡(jiǎn)單點(diǎn)。后端投遞的人太多,但還是供不應(yīng)求,選擇哪個(gè)方向要想清楚。
后邊我基本投遞的是后端的崗位,進(jìn)入了海投階段,但是很多可能因?yàn)楹?jiǎn)歷不符合都石沉大海了。結(jié)果就是之后的一個(gè)半月里從機(jī)試到 hr 面掛了一遍,差不多進(jìn)入面試的有二三十個(gè),包括百度、滴滴、阿里、榮耀、華為等等,但還是太菜了,整個(gè)秋招就是大碗掛面,有個(gè)公司流程很快(半天面完),比如百度系,有的公司能拖一個(gè)多月,比如小米、榮耀等,最后面試的是華為,是十一之后了。其實(shí),到最后就已經(jīng)很疲憊了,拒了好多公司的面試和筆試。所以,爭(zhēng)取在前期發(fā)力,不排除公司補(bǔ)錄,但是只能等集郵大佬拒絕 offer 之后才可以,主動(dòng)權(quán)要掌握在自己手中??傊镎性皆鐪?zhǔn)備越好,公司 hc 比較多,精力也會(huì)相對(duì)更加充足,拿到 offer 的幾率就會(huì)比較大。
2021.11-2021.12
一般通過(guò) hr 面之后,不出意外你會(huì)很快收到公司的意向書。之后就是開(kāi)獎(jiǎng)了,hr 會(huì)和你談薪,發(fā)正式 offer,這段時(shí)間往往是比較煎熬的,也是一場(chǎng)博弈,有些人單車變摩托,前提是你要有Argue的籌碼,比如你拿到了薪資更高或是大廠offer,亦或是你在大廠有實(shí)習(xí)經(jīng)歷。一般很少有A沒(méi)的,有時(shí)會(huì)比較難,但還是要盡力嘗試一下。
注意,接收郵件offer,有的也叫兩方,這是不用賠違約金的,身邊很多朋友簽了兩方違約也沒(méi)賠錢。但是,還是謹(jǐn)慎考慮,一般會(huì)有截止時(shí)間,需要考慮清楚,企業(yè)招人成本也是很大的。三方就要更加慎重考慮了,如果沒(méi)想好,一定不要著急簽,如果被催,那就好好和hr說(shuō)一下,就是盡量拖。也可以以逼簽為由催其他公司給你開(kāi)獎(jiǎng),不是特別著急還是不建議。
當(dāng)時(shí)也拿到了幾個(gè)Offer,比如字節(jié)、美團(tuán)、百度、滴滴、轉(zhuǎn)轉(zhuǎn)、58、用友,大華,也有一些通訊公司,榮耀、華為、小米、中興。因?yàn)樽止?jié)出來(lái)的比較早而且薪資還可以,所以拒了一些公司,簽了字節(jié),不久也被華為后端撈了,其實(shí)后期也一直在糾結(jié)后端和客戶端的崗位,也發(fā)現(xiàn)了很多和我相同困惑的朋友,有的堅(jiān)持后端,有的去了客戶端,一般來(lái)說(shuō)就是大廠和中廠,薪資差距這兩個(gè)因素吧。如何選擇,看看你當(dāng)前最關(guān)注的兩個(gè)因素是什么了,魚與熊掌不可兼得,如果你知道你簽這家公司會(huì)有很好的發(fā)展,那你一定會(huì)簽,但是你不知道。
3.面經(jīng)總結(jié)
下面主要總結(jié)了一些秋招過(guò)程中自己和周圍朋友遇到的面試高頻題,主要面試崗位還是后端和客戶端,網(wǎng)上也有很多面經(jīng),這里僅供參考。
基礎(chǔ)知識(shí)
(1)語(yǔ)言基礎(chǔ)(Java)
本人是Java選手,而且周圍朋友也是用的Java語(yǔ)言,這里只涉及秋招中遇到的Java高頻面試題。
Java虛擬機(jī)(JVM)很重要啦,高頻八股,比如JVM內(nèi)存結(jié)構(gòu)(各個(gè)部分的功能)、類加載機(jī)制(類的生命周期、雙親委派模型)、垃圾回收機(jī)制(可達(dá)性分析算法、Full GC、垃圾回收算法優(yōu)劣和適用場(chǎng)景、常見(jiàn)的垃圾回收器CMS和G1)、強(qiáng)軟弱虛四引用;
Java語(yǔ)言本身,比如包裝類與基本類型(緩存機(jī)制)、泛型的理解、String(不可變性,看看源碼是怎么重寫的)與StringBuffer/StringBuilder 區(qū)別、static關(guān)鍵字(修飾變量和方法)、final關(guān)鍵字(不能被重寫和繼承)、Java異常、Object 類有哪些方法;
面向?qū)ο蟮娜筇匦裕ㄗ詈媒Y(jié)合場(chǎng)景理解)、重載與重寫、接口與抽象類、equals與==、hashcode 之間的區(qū)別、Java 內(nèi)部類、Java是值傳遞(創(chuàng)建副本)、淺拷貝與深拷貝、反射機(jī)制(原理、優(yōu)缺點(diǎn)啥的,動(dòng)態(tài)代理的實(shí)現(xiàn)方式之一,但是實(shí)際環(huán)境中用的 cglib,也要知道)、注解的基本原理。
(2)集合
Java的集合體系(Collection 和 Map 兩大接口)、集合存儲(chǔ)(是否能存儲(chǔ)null、是否有序/安全);
List(ArrayLis,LinkedList的區(qū)別、應(yīng)用場(chǎng)景、擴(kuò)容機(jī)制)、線程安全的List;
Map(HashMap和ConcurrentHashMap結(jié)構(gòu)、jdk1.7和1.8的區(qū)別、get和put方法的流程、如何擴(kuò)容、解決hash沖突的方法、線程安全性)。
(3)并發(fā)
創(chuàng)建線程的幾種方式(別忘了線程池)、啟動(dòng)線程用 start 方法(區(qū)別 run 方法)、wait 與 sleep 方法的區(qū)別(最重要一點(diǎn)為是否釋放同步鎖)、線程的6種狀態(tài);
為什么用線程池、線程池的核心參數(shù)、線程池工作流程(核心線程數(shù) -> 阻塞隊(duì)列* -> 最大線程數(shù) -> 拒絕策略*)、線程池的 5 種狀態(tài);
說(shuō)說(shuō)多線程(或并發(fā))編程、并發(fā)編程的三大特性、JMM 模型(實(shí)現(xiàn)原理、內(nèi)存屏障、happen-before原則)、ThreadLocal線程本地變量、死鎖的四個(gè)必要條件(缺一不可);
AQS關(guān)鍵字、Volatile關(guān)鍵字(弱同步機(jī)制,不能把保證線程安全)、synchronized 關(guān)鍵字(用法、底層實(shí)現(xiàn)、特性、鎖優(yōu)化)、ReentrantLock(特性,與 synchronized 區(qū)別)、樂(lè)觀鎖 CAS(如何實(shí)現(xiàn),存在的問(wèn)題以及如何去解決)、公平鎖與非公平鎖、鎖可重入性。
計(jì)算機(jī)基礎(chǔ)
(1)操作系統(tǒng)
說(shuō)說(shuō)進(jìn)程與線程、進(jìn)程的狀態(tài)與切換(就緒、運(yùn)行與阻塞之間的轉(zhuǎn)換)、進(jìn)程調(diào)度算法、進(jìn)程之間的通信方式、進(jìn)程同步、線程的通信方式(共享內(nèi)存和消息傳遞)、fork 函數(shù)、銀行家算法;
內(nèi)存的管理方式、邏輯地址與物理地址、頁(yè)面置換算法、什么是虛擬內(nèi)存、生產(chǎn)者-消費(fèi)者模型。
(2)計(jì)算機(jī)網(wǎng)絡(luò)
ISO 七層模型、HTTP各個(gè)版本之間的特性和區(qū)別、常用的 HTTP 方法(get 和 post 的區(qū)別)、HTTP的報(bào)文格式、常見(jiàn)的HTTP狀態(tài)碼、數(shù)字簽名、HTTPS(原理、與HTTP之間的聯(lián)系);
TCP三次握手與四次揮手(高頻問(wèn)題、有很多細(xì)節(jié),比如狀態(tài)變化等)、TCP與UDP的區(qū)別、TCP怎么保證可靠傳輸、流量控制(滑動(dòng)窗口機(jī)制)、擁塞控制、TCP粘包的解決方案;
DNS協(xié)議、輸入url到顯示的內(nèi)部過(guò)程、Cookie 與 Session 的區(qū)別。
數(shù)據(jù)庫(kù)
(1)MySQL
內(nèi)連接和(左/右外)連接、數(shù)據(jù)庫(kù)操作的基本命令(CRUD)、MySQL結(jié)構(gòu)(Server層和存儲(chǔ)引擎層)、日志模塊(Redo log和Bin log)、SQL執(zhí)行很慢的原因、InnoDB和MyISAM的區(qū)別;
對(duì) MySQL索引的理解、索引劃分(B+樹/哈希、聚簇/非聚簇區(qū)別)、主鍵索引與唯一索引的區(qū)別、回表查詢、創(chuàng)建索引需要注意什么、最左前綴原則;
事務(wù)(ACID特性)、事務(wù)的隔離級(jí)別(如何解決并發(fā)事務(wù)帶來(lái)的問(wèn)題)、MVCC多版本控制原理;
MySQL 中有哪幾種鎖(按對(duì)數(shù)據(jù)的操作類型和粒度)、InnoDB 3種行鎖算法、MySQL死鎖。
(2)Redis
Redis基本特性、5 種基本數(shù)據(jù)類型(底層實(shí)現(xiàn))、Redis 持久化機(jī)制(RDB/AOF)、緩存一致性、緩存雪崩/擊穿/穿透及對(duì)應(yīng)的解決方案、為什么Redis是單線程,為什么Redis快?
數(shù)據(jù)結(jié)構(gòu)與算法
(1)數(shù)據(jù)結(jié)構(gòu)
數(shù)組:1. 兩數(shù)之和、15. 三數(shù)之和、53. 最大子序和、88. 合并兩個(gè)有序數(shù)組、33. 搜索旋轉(zhuǎn)排序數(shù)組、54. 螺旋矩陣、42. 接雨水、64. 最小路徑和、4. 尋找兩個(gè)正序數(shù)組的中位數(shù)、41. 缺失的第一個(gè)正數(shù)
、287. 尋找重復(fù)數(shù)、189. 旋轉(zhuǎn)數(shù)組、283. 移動(dòng)零、128. 最長(zhǎng)連續(xù)序列、162. 尋找峰值;
鏈表:206. 反轉(zhuǎn)鏈表、92. 反轉(zhuǎn)鏈表 II、143. 重排鏈表、19. 刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)、21. 合并兩個(gè)有序鏈表、141. 環(huán)形鏈表、160. 相交鏈表、24. 兩兩交換鏈表中的節(jié)點(diǎn)、328. 奇偶鏈表、148. 排序鏈表、83. 刪除排序鏈表中的重復(fù)元素、82. 刪除排序鏈表中的重復(fù)元素II;
二叉樹:236. 二叉樹的最近公共祖先、102. 二叉樹的層序遍歷、103. 二叉樹的鋸齒形層次遍歷、199. 二叉樹的右視圖、94. 二叉樹的中序遍歷、104. 二叉樹的最大深度、110. 平衡二叉樹、129. 求根到葉子節(jié)點(diǎn)數(shù)字之和、662. 二叉樹最大寬度、112. 路徑總和;
哈希表:3. 無(wú)重復(fù)字符的最長(zhǎng)子串、76. 最小覆蓋子串、136. 只出現(xiàn)一次的數(shù)字、349. 兩個(gè)數(shù)組的交集、242. 有效的字母異位詞、718. 最長(zhǎng)重復(fù)子數(shù)組、560. 和為K的子數(shù)組;
棧與隊(duì)列:42. 接雨水、232. 用棧實(shí)現(xiàn)隊(duì)列、155. 最小棧、225. 用隊(duì)列實(shí)現(xiàn)棧、394. 字符串解碼、739. 每日溫度、84. 柱狀圖中最大的矩形、456. 132模式;
除此之外,還有并查集,前綴樹、堆。
(2)算法
排序算法(常考冒泡/插入/快排/歸并/堆排序)的基本思路、時(shí)間復(fù)雜度分析、穩(wěn)定性判定、常考手撕,補(bǔ)充題4. 手撕快速排序、56. 合并區(qū)間、253. 會(huì)議室 II、215. 數(shù)組中的第K個(gè)最大元素;
動(dòng)態(tài)規(guī)劃(DP):53. 最大子序和、5. 最長(zhǎng)回文子串、300. 最長(zhǎng)上升子序列、70. 爬樓梯、72. 編輯距離、91. 解碼方法、44. 通配符匹配、494. 目標(biāo)和、647. 回文子串、376. 擺動(dòng)序列、279. 完全平方數(shù)、718. 最長(zhǎng)重復(fù)子數(shù)組、1143. 最長(zhǎng)公共子序列;
回溯算法:93. 復(fù)原IP地址、面試題 08.12. 八皇后、51. N皇后、46. 全排列、78. 子集、39. 組合總和、17. 電話號(hào)碼的字母組合、77. 組合、40. 組合總和 II、47. 全排列 II;
??妓惴ㄟ€有滑動(dòng)窗口、二分查找、雙指針、貪心算法,LRU。
項(xiàng)目
當(dāng)時(shí)簡(jiǎn)歷上就寫了個(gè)RPC,但感覺(jué)現(xiàn)在人均RPC了,其實(shí)本來(lái)有寫分布式的項(xiàng)目(尚硅谷),但是自己不是很熟,就沒(méi)寫;另外,寫了兩個(gè)實(shí)驗(yàn)室項(xiàng)目湊數(shù),一個(gè)深度學(xué)習(xí)算法,另一個(gè)偏向系統(tǒng)設(shè)計(jì)。
(1)RPC
講講這個(gè)項(xiàng)目你做了啥,有什么同類型的技術(shù)(比如Dubbo,gRPC),你去看過(guò)嗎?
RPC的調(diào)用流程是什么,客戶端怎么調(diào)用服務(wù)(動(dòng)態(tài)代理,創(chuàng)建代理類),服務(wù)端掛掉怎么辦?
如何實(shí)現(xiàn)對(duì)象的序列化和反序列化,幾種常見(jiàn)的序列化方式(Json、Kryo、Hessian);
網(wǎng)絡(luò)傳輸(通信交互),我用的是Netty框架,基本原理、線性模型、零拷貝;
服務(wù)注冊(cè)與發(fā)現(xiàn),我用的Nacos,或者是用Zookeeper,為什么用它搞清楚;
其他:比如線程池使用,負(fù)載均衡策略,設(shè)計(jì)模式(責(zé)任鏈模式)。
(2)實(shí)驗(yàn)室項(xiàng)目
這類項(xiàng)目面試官一般是不懂的,需要你去講,就用star法則就好了,比如介紹一下項(xiàng)目背景,做了啥,你的職責(zé),取得了什么結(jié)果,也可以說(shuō)說(shuō)你的感想和收獲;
在這一部分,我在有些項(xiàng)目中擔(dān)任負(fù)責(zé)人,面試官就會(huì)問(wèn)很多場(chǎng)景題,怎么去解決問(wèn)題,這種問(wèn)題答案比較開(kāi)放,注意邏輯清晰就好了。
其他
(1)框架
客戶端沒(méi)要求,如果是后端崗位,主要就是SSM、Spring全家桶,包括Spring的兩大核心組件(iOC和AOP經(jīng)常問(wèn)),Spring Boot自動(dòng)裝配原理,Spring MVC的執(zhí)行流程;
我被問(wèn)最多的就是 RPC,設(shè)計(jì)細(xì)節(jié),為什么用這個(gè)組件,怎么通信,還有延伸出的場(chǎng)景題。
根據(jù)每個(gè)人的項(xiàng)目,可能接觸其他框架。有點(diǎn)需要注意,了解框架底層是加分項(xiàng),但如果你簡(jiǎn)歷或者項(xiàng)目沒(méi)用到,面試官也不會(huì)問(wèn),切記不懂裝懂。如果真的被問(wèn)到,你不熟悉,你可以說(shuō)你使用過(guò),但是底層源碼還沒(méi)看到這里,轉(zhuǎn)移話題(你比較熟悉的),比如正在看jdk源碼,集合的源碼等。
(2)設(shè)計(jì)模式
六大設(shè)計(jì)原則,基本思想、每個(gè)設(shè)計(jì)原則最好想一個(gè)經(jīng)典的案例;
常見(jiàn)的設(shè)計(jì)模式, 理解并了解使用場(chǎng)景(自己項(xiàng)目中用到更好),比如單例模式(會(huì)手寫其中的一種方式,線程安全性分析)、代理模式、工廠模式、觀察者模式,適配器模式。
4.一些建議
早做準(zhǔn)備,注意總結(jié)
寒假時(shí)間很關(guān)鍵,要注重效率和總結(jié),包括算法和八股。比較好的辦法是寫博客,這樣便于后期復(fù)習(xí),可以在任意的平臺(tái),我當(dāng)時(shí)記錄在簡(jiǎn)書上了,寫的時(shí)候直接用word可以,當(dāng)時(shí)龍哥就是用 word 整理了一些八股總結(jié),不過(guò)直接用 markdown 更加方便一些,更適合隨時(shí)貼代碼。
算法題是一個(gè)長(zhǎng)期積累的過(guò)程,主要就是 leetcode 和劍指 offer,面試題也大都出自這里,在精不在多,應(yīng)對(duì)秋招兩三百道 leetcode 足矣,但是如果你有時(shí)間多刷肯定是好的。算法題幾乎占據(jù)了秋招的半壁江山,遇到有個(gè)群友三面做了九道算法題,學(xué)好算法進(jìn)大廠也不是夢(mèng)。對(duì)于剛開(kāi)始準(zhǔn)備的同學(xué)可以看看左神的算法課程,講的比較清楚。
八股文的話,初期還是建議多看看書,或者看看視頻也可以,無(wú)論看什么一定要總結(jié)。如果到了寒假就要有針對(duì)性的去準(zhǔn)備,無(wú)非就是語(yǔ)言本身、數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)基礎(chǔ)(網(wǎng)絡(luò)和操作系統(tǒng)),還有就是一些常見(jiàn)的設(shè)計(jì)模式,框架也要了解一些,這個(gè)在網(wǎng)上有很多技術(shù)博客總結(jié)和視頻。
以面代練,注重復(fù)盤
在秋招剛開(kāi)始,我是有點(diǎn)畏懼面試的,總是感覺(jué)自己沒(méi)準(zhǔn)備好,不是這沒(méi)看就是那沒(méi)看。其實(shí),只要你邁出那一步,一切都煙消云散。面試是檢驗(yàn)?zāi)銖?fù)習(xí)成果的最好方式,也能最高效的找出你當(dāng)前的漏洞。同時(shí),你可以借此機(jī)會(huì)和面試官溝通,比如一些技術(shù)問(wèn)題,保持一種謙遜的態(tài)度是很重要。排除一些大佬吊打面試官,我一般是被面試官吊打的那種。
面試復(fù)盤很重要!你面試下來(lái)肯定會(huì)存在很多問(wèn)題,也許是技術(shù)問(wèn)題、也可能是溝通表達(dá),最好做一下記錄??磁?途W(wǎng)很多人會(huì)去寫面經(jīng),這是很好的,記錄一些問(wèn)題,方便自己,也能幫助其他人。我這個(gè)地方做的不好,最開(kāi)始是用筆去記,后邊會(huì)用手機(jī)錄音,記錄整個(gè)面試過(guò)程(但是幾乎沒(méi)去聽(tīng)過(guò))。我遇到不止一次被問(wèn)到相同的問(wèn)題,但是總是感覺(jué)自己回答的不好。所以,一定要復(fù)盤,重點(diǎn)關(guān)注自己不會(huì)的或者回答不是特別流暢的問(wèn)題。
Coding 一般是面試的最后一個(gè)環(huán)節(jié),但有的公司上來(lái)就是算法題。雖然 Coding 能力是一個(gè)積累的過(guò)程,但是算法臨陣磨槍卻有奇效,就是面哪個(gè)公司刷該公司的高頻面試題,比如看看codetop 或者找找??途W(wǎng)面經(jīng)。一般公司會(huì)使用賽碼網(wǎng)或者??途W(wǎng)出算法題,可以直接運(yùn)行,不用寫輸入輸出;但是有些公司也會(huì)自己出題或者自己描述(原題居多),記得有一次,面試官口述算法題,說(shuō)了半天是個(gè)兩數(shù)之和,測(cè)試用例還是錯(cuò)的。還有一點(diǎn)就是遇到簡(jiǎn)單題要矜持,不要一兩分鐘就做出來(lái)了。做題前后多和面試官交流,一定先嘗試去寫,如果真的一頭霧水,可以說(shuō)說(shuō)思路,也可以讓面試官換題,這是下策,我沒(méi)有試過(guò),但是我朋友有一次換了題之后也沒(méi)做出來(lái),就很尷尬;做出來(lái)的,可以嘗試多解(面試官一般也只是讓你說(shuō)說(shuō)思路)。
邏輯清楚,自信沉穩(wěn)
面試回答過(guò)程中,邏輯一定要清楚??陀^題也要組織好語(yǔ)言,可以開(kāi)門見(jiàn)山,上來(lái)給出答案,緊接著給出解釋或者自己的理解;也可以先解釋分析,最后給出總結(jié)。總之,讓面試官知道你在說(shuō)什么,尤其是在介紹項(xiàng)目的時(shí)候,怎么能夠通過(guò)幾句話把一件事描述清楚也是不簡(jiǎn)單的,如果不知道怎么組織語(yǔ)言,Star法則是很好的模板。
客觀題一般兩種問(wèn)法,一是自由發(fā)揮,比如說(shuō)說(shuō)虛擬機(jī)、多線程等,這種范圍比較大,回答要全面,而且回答經(jīng)得住面試官推敲的問(wèn)題,簡(jiǎn)單來(lái)說(shuō),就是引導(dǎo)面試官往自己準(zhǔn)備的問(wèn)題,切記說(shuō)自己不會(huì)的,給自己挖坑。同時(shí),一些問(wèn)題需要總結(jié),可以借此說(shuō)說(shuō)自己的理解,錯(cuò)了也沒(méi)關(guān)系;另一個(gè)是具體問(wèn)題,這種情況很可能會(huì)遇到自己的盲點(diǎn),因?yàn)槊嬖嚬賹?duì)你不了解,只能隨便問(wèn),這里有一個(gè)技巧就是通過(guò)簡(jiǎn)歷或者自我介紹引導(dǎo)面試官,把自己熟知的內(nèi)容寫在簡(jiǎn)歷,我曾遇到不止一個(gè)面試官對(duì)著簡(jiǎn)歷提問(wèn)。如果真遇到自己的盲點(diǎn),那就盡量平行遷移,回答相似的技術(shù)問(wèn)題,有時(shí)答非所問(wèn)(適用少部分題目,有時(shí)候是你真的搞混了),有些不計(jì)較的面試官直接就過(guò)了,這是下策,我之前就被美團(tuán)終面面試官吊打,可能也有壓力面的成分。
另外,自我介紹是非常重要的,是開(kāi)場(chǎng)戲,也可以緩解緊張。注意,稿子還是要背的,但是一定要很自然和自信的說(shuō)出來(lái),把每一個(gè)想呈現(xiàn)給面試官的點(diǎn)說(shuō)清楚,可以說(shuō)說(shuō)自己的一些經(jīng)歷,但最好還是專業(yè)一些,不要抓住自己的愛(ài)好長(zhǎng)篇大論,有實(shí)習(xí)和項(xiàng)目經(jīng)歷就可以聊聊了(我是非科班的,就說(shuō)了說(shuō)在實(shí)驗(yàn)室做了啥),不宜過(guò)長(zhǎng),建議30~90秒吧。面試官一般都很好,語(yǔ)氣和態(tài)度都很好,一般很少遇到奇葩。因此,放慢語(yǔ)速,保持自信和沉穩(wěn),想清楚再說(shuō),至少想想自己會(huì)不會(huì),確定一條主線,就是回答的方向。
以上均是一個(gè)非科班轉(zhuǎn)碼菜鳥的拙見(jiàn)和感想,如果有不當(dāng)之處還請(qǐng)大佬們指正,希望能幫助到也想轉(zhuǎn)碼的朋友!
5.資料推薦
編程書籍
Java語(yǔ)言:《Java編程思想》、《Java核心技術(shù) 卷1》;
算法:《算法》(第四版)、《程序員面試指南》、《劍指Offer》;
計(jì)算機(jī)網(wǎng)絡(luò):《圖解HTTP》、《計(jì)算機(jī)網(wǎng)絡(luò)》(自頂向下方法);
數(shù)據(jù)庫(kù):《MySQL必知必會(huì)》;
其他:《鳥哥Linux私房菜》、《圖解設(shè)計(jì)模式》、《重構(gòu)》;
視頻推薦
黑馬程序員/尚硅谷/狂神
左神算法
極客時(shí)間
博客網(wǎng)站
知識(shí)點(diǎn)總結(jié):CS-Notes/JavaGuide
算法題解:windliang/代碼隨想錄(c++)/liweiwei1419/Krahets/labuladong
刷題網(wǎng)站:??途W(wǎng)/Leetcode/Codetop企業(yè)題庫(kù)/AcWing
