當(dāng)一個(gè)程序員真正掌握算法之后,會(huì)變得有多強(qiáng)?

2020 = 1024 + 996...對(duì)于程序員來說,2020年看起來可不怎么“友好”啊。(參與文末有獎(jiǎng)互動(dòng),就有機(jī)會(huì)免費(fèi)獲得?99?元哦?。?/span>
?
但是不管外部環(huán)境如何,提升自身內(nèi)功都是每個(gè)職場(chǎng)人所必需的。在如今的環(huán)境下,想要換一份理想的工作更是需要“找準(zhǔn)時(shí)機(jī),抓住機(jī)會(huì)”,當(dāng)然在面試前的準(zhǔn)備是必不可少的。極客大學(xué)邀請(qǐng)了算法訓(xùn)練營(yíng)的助教,請(qǐng)他們分享一下作為面試官喜歡考察候選人哪些能力、他們有哪些“精選算法面試題”。我們的助教們來自美團(tuán)、百度或海外的一線互聯(lián)網(wǎng)公司,希望他們分享的經(jīng)驗(yàn)可以幫助到你。
前美團(tuán)資深工程師Windy
作為面試官,我比較看中候選人的行業(yè)背景、專業(yè)技能還有一些軟素質(zhì)。具體來說:
行業(yè)背景就是上一份工作所在的領(lǐng)域比如電商、社交等;
專業(yè)技能的話主要是語言基礎(chǔ),高并發(fā)、分布式、中間件等知識(shí),以及排查問題、運(yùn)維、設(shè)計(jì)的能力。這里面最重要的是編程能力,針對(duì)高級(jí)崗位還要考察架構(gòu)能力。
軟素質(zhì)包括候選人的溝通能力、項(xiàng)目管理能力和領(lǐng)導(dǎo)力等。
?
作為面試官,在面試過程我會(huì)用筆試題的形式考察候選人的思維邏輯能力,通常考察的具體知識(shí)點(diǎn)包括鏈表、樹、排序、二分查找等,需要候選人能夠分析出不同算法的時(shí)間復(fù)雜度和空間復(fù)雜度。題目我會(huì)選擇LeetCode上簡(jiǎn)單到中等難度的題目,??嫉挠校?/span>
單鏈表翻轉(zhuǎn)(遞歸或者循環(huán))
樹的前中后序遍歷
動(dòng)態(tài)規(guī)劃(爬樓梯以及變形問題、斐波那契數(shù)列、股票問題)
二分查找(以及變形)
排序(快排)
通過算法面試題的考察,我希望候選人不光可以展示編程能力,還可以通過詳細(xì)了解題目,展示自己的溝通能力和推演能力(如何構(gòu)建題目的思路)。最關(guān)鍵的編程能力,候選人可以展示自己對(duì)于問題邊界的思考,比較不同方法的性能和效率,給出解決問題的多種方法。
?
我的精選算法面試題是:搜索二維矩陣
?
?
百度高級(jí)研發(fā)工程師Kimze
針對(duì)不同層次的候選,作為面試官肯定有所側(cè)重。在算法訓(xùn)練營(yíng)中有不少是在校的學(xué)生,針對(duì)應(yīng)屆畢業(yè)生的話,我主要是考察態(tài)度、編程基礎(chǔ),以及數(shù)據(jù)結(jié)構(gòu)和算法的基本功。對(duì)于有經(jīng)驗(yàn)的同學(xué)來說,我會(huì)結(jié)合簡(jiǎn)歷技能,圍繞項(xiàng)目經(jīng)驗(yàn),考察領(lǐng)域能力的廣度和深度,探知到候選人的上限,也可以互相交流學(xué)習(xí)。
?
高可用、高性能、高擴(kuò)展性作為后端通用的技術(shù),針對(duì)不同技術(shù)棧,我會(huì)考察:
分布式分層架構(gòu)設(shè)計(jì)理解
LB 負(fù)載均衡、前端壓縮/CDN 緩存/DNS相關(guān)知識(shí)
多級(jí)緩存、MQ異步解耦?
無狀態(tài)化設(shè)計(jì) -> 快速擴(kuò)縮容
DB Sharding 、讀寫分離、分庫分表、SQL和慢查詢優(yōu)化、JVM優(yōu)化等措施
ES檢索、數(shù)據(jù)異構(gòu)、大數(shù)據(jù)處理
一致性設(shè)計(jì):批量異步、串行改并行、同步改異步
數(shù)據(jù)協(xié)議、通信協(xié)議??
容量預(yù)估規(guī)劃、全鏈路壓測(cè)、灰度發(fā)布設(shè)計(jì)、降級(jí)/熔斷/限流的設(shè)計(jì)、RPC服務(wù)治理
分布式配置、注冊(cè)、監(jiān)控
CI/CD:“Docker + Kubernetes”架構(gòu)??
?
對(duì)于數(shù)據(jù)結(jié)構(gòu)和算法的考察,比較基礎(chǔ)的如快排、歸并、二分查找的題目,候選人要能分析出時(shí)間和空間復(fù)雜度,并展示出相關(guān)推演的過程。對(duì)于高級(jí)一些的內(nèi)容,我最低的要求是有思路,知道什么情況下用什么樣的數(shù)據(jù)結(jié)構(gòu)和算法,并寫出模板即可。比如我會(huì)問:
Redis底層數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),引申出跳表的原理,再擴(kuò)展到Hash的實(shí)現(xiàn)及擴(kuò)容實(shí)現(xiàn),希望考察候選人是否了解跳表優(yōu)缺點(diǎn), 以及Redis為什么這么設(shè)計(jì)。?
MySQL B+樹索引結(jié)構(gòu)的時(shí)間復(fù)雜度以及選型原因,希望考察為什么使用B+樹而不是紅黑樹或Hash、跳表。
?
我考察的具體題目并不多,我認(rèn)為非常好的一道題目是:零錢兌換

?
Serko高級(jí)軟件工程師Xu
不同公司、不同職位、不同級(jí)別所要求能力、范圍和深度不一樣,海外公司和國(guó)內(nèi)互聯(lián)網(wǎng)公司的業(yè)務(wù)需求也有很大不同,但我認(rèn)為作為程序員一般需要具備下面能力:
編程能力(編碼、數(shù)據(jù)結(jié)構(gòu)和算法、數(shù)學(xué))
簡(jiǎn)潔代碼(Clean code)
好的編程實(shí)踐(Good programming practices)
軟件設(shè)計(jì)
系統(tǒng)設(shè)計(jì)
軟件架構(gòu)
系統(tǒng)架構(gòu)
分析和解決問題能力
領(lǐng)導(dǎo)力
溝通表達(dá)能力
合作能力
分享能力
持續(xù)學(xué)習(xí)能力?
?
對(duì)于大多數(shù)需要面試的初級(jí)和中級(jí)程序員來說,作為技術(shù)面第一輪的白板算法題,我一般會(huì)出LeetCode上easy到meduim的題目,這類題目一般可以暴力求解、能夠優(yōu)化,有多種解法和思路,同時(shí)候選人最好能夠展示一些軟件工程方面的實(shí)力。?
?
在做題過程中,有幾點(diǎn)需要注意:
理解題目,在這個(gè)過程中要和面試官溝通,澄清題目的要求和相關(guān)疑問,而不是一上來就開始寫程序。
設(shè)計(jì)算法,在這個(gè)過程中和面試官不斷互動(dòng),一步一步探尋最優(yōu)解,而不是一聲不吭,一個(gè)人”埋頭苦干“。
實(shí)現(xiàn)算法,在這個(gè)過程中可以展示你對(duì)軟件開發(fā)和測(cè)試的理解。
代碼完成后,酌情可以和面試官討論一些相關(guān)東西,比如TDD、BDD、CI/CD等。
?
我的精選算法面試題是:驗(yàn)證二叉搜索樹

以上這些題目你都會(huì)做了嗎?我想你絕對(duì)會(huì)懵逼!不服?來,評(píng)論區(qū)里show出你的代碼!
什么?你不會(huì)?那也不用捉急,同其他編程技能一樣,高效掌握常見的算法與數(shù)據(jù)結(jié)構(gòu)知識(shí),并學(xué)會(huì)用相應(yīng)的算法來解決實(shí)際工作和面試中的算法問題,都是可以通過學(xué)習(xí)和訓(xùn)練不斷提高的。
?
由前?Facebook?工程師覃超老師擔(dān)任講師的「極客大學(xué)·算法訓(xùn)練營(yíng)」將用 10 周時(shí)間,幫你迅速提升算法解題能力和思維方式,還能結(jié)識(shí)來自五湖四海優(yōu)秀的伙伴與你一起精進(jìn)。算法訓(xùn)練營(yíng)不限地域,內(nèi)容從低到高、由淺入深,涵蓋所有核心算法知識(shí)精講、解題思路、實(shí)戰(zhàn)結(jié)合,學(xué)完后有能力解決 80% 中等難度的算法題目。
?
算法訓(xùn)練營(yíng)第 6 期正在招生,無論你想備戰(zhàn)即將到來的“金三銀四”,還是希望通過系統(tǒng)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法來提升編程思維,這里都會(huì)滿足你。
?掃碼報(bào)名?
僅限前 50 人有效!先到先得!
?現(xiàn)在?9.9 元還可以體驗(yàn)7天哦!
算法訓(xùn)練營(yíng)第6期招募
?覃超老師,他從美國(guó)頂尖學(xué)府卡內(nèi)基梅隆大學(xué)計(jì)算機(jī)專業(yè)畢業(yè),曾經(jīng)在?Facebook工作三年,作為 Facebook Messenger Tech Lead,參與了 Facebook App、Facebook Messenger、Facebook Phone 等產(chǎn)品的研發(fā)工作。
本期算法訓(xùn)練營(yíng)幫助不同基礎(chǔ)的軟件工程師精進(jìn)算法能力、構(gòu)建知識(shí)體系。
它不僅涵蓋常見的算法面試題精講,還包括數(shù)據(jù)結(jié)構(gòu)和算法的理論知識(shí)的講解,以及算法在實(shí)際工程上的應(yīng)用,一次性將數(shù)據(jù)結(jié)構(gòu)和算法的方方面面講透;同時(shí)訓(xùn)練營(yíng)設(shè)計(jì)了一套有效的學(xué)習(xí)機(jī)制,幫助大家克服學(xué)習(xí)的種種障礙。這個(gè)訓(xùn)練營(yíng)能夠讓你在有限的時(shí)間內(nèi),實(shí)現(xiàn)算法學(xué)習(xí)的突破。?
1. 通過完備的課程體系,幫你建立算法學(xué)習(xí)的全景圖
不同于我的視頻專欄以算法面試題目講解為主,算法訓(xùn)練營(yíng)不僅涵蓋面試題精講,還會(huì)帶你建立完整的算法知識(shí)體系,詳細(xì)講解常見的數(shù)據(jù)結(jié)構(gòu)和算法的理論知識(shí),以及算法在實(shí)際工程上的應(yīng)用,一次性將數(shù)據(jù)結(jié)構(gòu)和算法的方方面面講透。
?
2. 通過有計(jì)劃的學(xué)習(xí)機(jī)制,讓你進(jìn)行有跟蹤、有反饋的閉環(huán)學(xué)習(xí)
不僅只是觀看課程視頻,我會(huì)在每節(jié)課后給你精選練習(xí)題,并通過期中、期末考試讓你自查成果,接收到實(shí)際學(xué)習(xí)反饋。每個(gè)階段我也會(huì)根據(jù)大家的學(xué)習(xí)情況,進(jìn)行重點(diǎn)、難點(diǎn)的直播講解。班主任和我們的教研組將傾力提供全方位線上學(xué)習(xí)服務(wù),包括助教答疑、作業(yè)、線上討論、線下社交等。
?
3. 通過建立班級(jí)組織,讓你跟優(yōu)秀的伙伴一起學(xué)習(xí)
你不會(huì)是獨(dú)立學(xué)習(xí)的個(gè)體,你會(huì)在一個(gè)班級(jí)中、一個(gè)小組中,跟優(yōu)秀的同學(xué)共同克服難關(guān)。班主任會(huì)組織大家進(jìn)行線上分享和討論,也會(huì)有班長(zhǎng)、學(xué)習(xí)委員組織大家進(jìn)行線下的社交,從這些集體活動(dòng)中,你會(huì)吸收到很多同班同學(xué)輸出的優(yōu)質(zhì)內(nèi)容和學(xué)習(xí)方法。
?
4. 600+大廠內(nèi)推,給你帶來更多職業(yè)發(fā)展機(jī)會(huì)
優(yōu)秀畢業(yè)生畢業(yè)一年內(nèi),隨時(shí)可獲得極客大學(xué)提供的兩次一線互聯(lián)網(wǎng)大廠內(nèi)推服務(wù),更有 TGO 鯤鵬會(huì)的 600 家企業(yè)推薦通道為你敞開,獲得更多的職業(yè)發(fā)展機(jī)會(huì)。
詳細(xì)課程大綱如下:





?掃碼報(bào)名?
僅限前 50 人有效!先到先得!
?現(xiàn)在?9.9 元還可以體驗(yàn)7天哦!
最后,來看看算法訓(xùn)練營(yíng)的往期學(xué)員是如何在訓(xùn)練營(yíng)成長(zhǎng)的:



?點(diǎn)擊閱讀原文,就有機(jī)會(huì)免費(fèi)獲得?99?元哦~
