1. web後端開發要考什麼證書證書 知乎
IT行業一般是不看什麼證書的,去公司面試的時候都不怎麼問證書什麼的,主要還是看你技術水平和工作的項目經驗。我面試的很多家公司都沒有問我要過什麼證書,都是問我技術和工作項目經驗,所以我也沒有考什麼證書,我身邊做開發的朋友也沒有考過證書。
2. 有沒有適合java初學者的小項目,綜合性比較強的,web後端,推薦幾個,面試用
1、注冊登錄系統,幾乎每個網站都會有這個模塊,是初學者不可繞過項目,的一定要瞭然於心,無論是servlet+jdbc實現,還是struts2+hibernate實現都要滾瓜爛熟
2、網上商城,裡麵包含兩個經典的模塊,購物車和在線支付,這個項目是初學者第一個項目的不二之選
3、在線相冊系統,涉及到文件的上傳下載,這考驗你對JavaIO的熟悉程度,也是很不錯的選擇
4、其外,你還可以做一下圖書管理系統,就是模仿圖書館的管理系統,也很考驗人
最後:只要你遵循MVC的設計理念,搞懂各層之間的傳值方法,面試就不會慌
3. 什麼是網頁的前端和後端開發
1.前端框架一般指用於簡化網頁設計的框架,比如,jquery,extjs,bootstrap等等,這些框架封裝了一些功能,比如html文檔操作,漂亮的各種控制項(按鈕,表單等等)。
2. 使用前段框架可以降低界面開發周期和提高界面的美觀性。
3. 有些框架比較輕量,比如jquery,有些框架比較重量,比如extjs。一般來說重量的框架會封裝更多的功能,比如extjs,封裝的grid控制項有很強的數據展示和操作功能。
1.對用戶的價值:
大部分產品對用戶的核心價值是功能和內容提供的,而不是由表現層和交互。譬如支付、電商、新聞、交友。
後端解決有還是無的問題,開天闢地。
前端解決有了以後好用的問題,錦上添花,在競爭激烈的領域確實至關重要。
2.技術廣度和難度:
廣度上後端工作在伺服器領域,能控制的硬體基本沒有極限,CPU、存儲、網路、集群等等,因此技術領域極廣。一個優秀的後端需要掌握或了解大量技術如:並發、業務架構、資料庫、幾打流行框架、性能調優、分布式計算、集群架構、容災、安全、運維等等,一層挖透了還有下一層。幾十年計算機發展歷史中大量的技術沉澱在伺服器端。
Web前端一直工作在一個瀏覽器盒子里,先天不足,能承載的可能性太小,技術廣度不足。
深度上,現代計算機領域的難題如大規模負載,海量數據處理,實時計算也是後端的,前端集中在表示層,這一層雖然也很復雜,但能稱之為難題的技術幾乎沒有,也很容易復制。
前端要說深度也不是沒有,但這一步需要跨到圖形領域(如網頁游戲),不是常見場景。
說到底前端代碼能控制的硬體確實不如後端,因此在技術上,前端更容易。現在為什麼說前端會比後端更值錢呢?那是因為前端對硬體的控制能力提升了(html5 odejsmobile),而後端分化得比較厲害,有一批後端專門只寫業務邏輯,框架是別人寫的,系統架構是別人搭的,伺服器跑在雲里,連機器物理地址都不知道。世人眼裡可能覺得這種寫MVC代碼的人才是後端,這種被限制在一個「虛擬盒子」里的後端確實不怎麼難上手。
一般而言網上說的互聯網行業的技術含量排名大概是這樣:
產品經理<設計師<前端<後端<其他更高級職位,比如演算法工程師等等。
在廣大中小公司,很多產品經理都是不會代碼,不會設計。 很多技校學藝術設計的畢業生,當上了美工。這些都是真,所以能力低,乾的人多,自然就低。然而,你問Google設計師掙多少了嘛?
門檻低不等於技術含量低。
4. C++ 後台開發面試時一般考察什麼
C++一般是系統及服務端的大型開發,一般來說面試考察的內容一般是比較多的。舉例來說
1. C++基本的認識,問得比較多的是指針、多態(虛函數表、內存 layout等)、作用域、內存的管理等等。(通常只有宣稱熟悉 C++或者簡歷中有很多 C++項目的人,我才會把這個當做一個重要的方面考察;對語言細節研究不深入,或者一直用其它語言比如 go/java 之類的,那也無妨,這塊可以稍微放寬要求。)
2. 演算法和數據結構,數據結構我比較關注哈希、優先順序隊列等,演算法則是字元串處理、簡單的 DFS、BFS、動態規劃都有
3. 系統的知識:進程、線程、協程、鎖的使用、消息隊列、共享內存、還有網路協議、epoll、select等。順便會考察一些處理問題的基本思路,比如通過哈希來劃分、通過隊列來序列化操作等等。此外,往往很多同學的項目經歷中,有很多點可以結合系統的知識來考察,看看是否真的做過項目。比如我就碰到過自己寫過 web server 的,搞過 key-value 資料庫的,聲稱讀過 redis 源碼的,這些很適合配合系統知識考察,確認是不是真的做過這些項目,理解如何。
4. 和應聘者背景經歷有關的知識,比如學信息安全,剛好是我的專業,我會問一些簡單的安全知識,比如緩沖區溢出、sql 注入、虛擬機、https、數字簽名原理等等。當然,後面從事了個性化推薦有關的工作,機器學習也稍微懂一點,偶爾可以聊聊。這個主要是發現一些學習態度也特別好,但是又想做後台的同學。
5. 如何面試Python後端工程師
一.語言
1.推薦一本看過最好的python書籍? 拉開話題好扯淡
2.談談python的裝飾器,迭代器,yield?
3.標准庫線程安全的隊列是哪一個?不安全的是哪一個?logging是線程安全的嗎?
4.python適合的場景有哪些?當遇到計算密集型任務怎麼辦?
5.python高並發解決方案?我希望聽到twisted->tornado->gevent,能扯到golang,erlang更好
二.操作系統
可以直接認為是linux,畢竟搞後端的多數是和linux打交道。
1.tcp/udp的區別?tcp粘包是怎麼回事,如何處理?udp有粘包嗎?
2.time_wait是什麼情況?出現過多的close_wait可能是什麼原因?
3.epoll,select的區別?邊緣觸發,水平觸發區別?
三.存儲
存儲可能包含rdbms,nosql以及緩存等,我以MySQL,redis舉例
mysql相關
1.談談mysql字元集和排序規則?
2.varchar與char的區別是什麼?大小限制?utf8字元集下varchar最多能存多少個字元
3.primary key和unique的區別?
4.外鍵有什麼用,是否該用外鍵?外鍵一定需要索引嗎?
5.myisam與innodb的區別?innodb的兩階段鎖定協議是什麼情況?
6.索引有什麼用,大致原理是什麼?設計索引有什麼注意點?
redis相關
1.什麼場景用redis,為什麼mysql不適合?
2.談談redis的事務?用事務模擬原子+1操作?原子操作還有其它解決方案嗎?
3.redis內存滿了會怎麼樣?
四.安全
web安全相關
1.sql注入是怎麼產生的,如何防止?
2.xss如何預防?htmlescape後能否避免xss?
3.csrf是什麼?django是如何防範的?
密碼技術
1.什麼是分組加密?加密模式有哪些?ecb和cbc模式有什麼區別?為什麼需要iv向量?
2.簡單說說https的過程?
3.對稱加密與非對稱加密區別?
3.如何生成共享秘鑰? 如何防範中間人攻擊?
五.雜
是否關注新技術啊?golang,Rust是否了解?numpy,pandas是啥鳥?
是否緊跟時代潮流?逛不逛微博,刷不刷知乎?
可能你覺得我問的好細,但這好多都是平常經常遇到,並需要解決的,細節更能體現一個人。
如果你覺得小kiss,歡迎投簡歷給我[email protected],龍圖游戲運營支持中心數據分析部招人;覺得有點問題,那還等什麼,趕快來和我交流交流。
更新:討論區挺熱鬧,有人說好簡單,有人說好難,其實我覺得這只適合面試2~3年工作經驗的後端工程師。真的沒有問
很難的題目,只是可能你平時沒有注意。
在這里我推薦幾本書吧
python參考手冊,絕對讓你更上一層樓
圖解密碼技術,密碼入門不二之選
mysql技術內幕第五版,有點厚當手冊讀讀,要有耐心,高性能mysql也強烈建議讀讀
effective tcp/ip programming
為什麼評論區有這么大差異?我想是個人經歷不一樣吧,如果是搞web的對操作系統這塊和密碼技術會偏弱,但如果是系統工程師或是游戲服務端這塊會明顯偏強。
六.後記
最近我也面試了不少童鞋,我發現能達到要求的真的少之又少,很多hr都說Python是最難招聘的崗位,我想是有道理的,這真的很值得我們去深思?
我想有一部分原因是Python這門語言造成的,會寫Python的人很多,但寫的好的人很少,大部分都把Python當做腳本來寫,缺乏面向對象,模式的思想。想想Java,大家都習慣了介面,實現分離,設計模式在Java中也喊了很多年,尤其是ssh三大框架一出,用著用著就理所當然的認為就該這么做,雖然也有點壞處,但對企業級Java開發無疑是一大進步。
反觀Python,尤其是生成器,協程,元類給Python注入了很大的靈活性,想寫的Pythonic有不小難度,但其實Python高級特性就那麼幾個,幹掉了也就沒有了。
當你覺得Python遇到了瓶頸,不妨停下來好好想想。研究研究設計模式,想想重構,了解領域驅動設計,敏捷開發,再回來讀讀以前寫的代碼,當眼界變高了,代碼也就美了。
當然思想的提高不是一朝一夕,模式,原則會經常讓你糾結,糾結就會思索,思考就走出了自己的路,當然條條大路通羅馬。
資料庫等存儲技術是研發工程師邁不過的坎,對關系資料庫以mysql舉例來說,你必須清楚的知道什麼欄位選擇什麼類型,類型位元組大小,限制條件,這東西也很容易理解,多想想即可,比如set類型,要支持交並等操作,1個位元組只能存8個類別。數據類型搞定了,下面就是索引了,mysql索引種類?主鍵,唯一索引,普通索引。索引類別,BTree索引,hash索引。索引的優缺點,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情況,比如mysql子查詢慢等。其實到這里研發工程師就差不多,當然你可以繼續深入下去,比如讀寫分離,集群管理,甚至一些參數調優。
6. 面試Python後端工程師,主要注意准備什麼
Python是人工智慧時代最佳的編程語言,它語法簡潔、通俗,語言結構清晰,吸引了很多人加入學習。想要快速就業拿高薪,基礎技能很重要,但面試技巧也不容忽視。
如何參加面試
收到面試通知,如有時間緩沖,盡量在2-3天內去參加面試。切忌收到電話通知當天去參加面試。
3、提前了解公司類型
不同的公司類型Python技術難度、面試風格都有較大差異,請提前熟知:
資深互聯網:技術前沿、全面;
外企500強:注重技術+管理;
創業融資公司:技術全面扎實。
4、了解崗位需求
技能需求:如工作經驗1-3年;注意:也包括在校期間有效的實際項目經驗。
非技能需求:外語(外資企業更加重視)、團隊、管理、學習能力等。
5、項目經驗梳理
項目技能:項目架構+資料庫設計+開發語言;
領域知識:項目針對特定行業的背景信息;
項目說辭:想好如何直接有效的介紹項目。
當然,面試准備的再充分,如果你的技能達不到企業要求,那也是白費功夫。如果你想快速系統的學習Python技能,掌握企業所需的技術,可以選擇專業學習一下。
7. 前端面試 問什麼問題
web前端面試會問人事方面的內容和web前端技術的內容;
人事的面試
web前端人事面試方面,需要注意如何自我介紹、性格有哪些優劣勢、職業規劃方向是什麼、你的特長是什麼、對於加班之類你是怎麼看待等人事面試內容;
web前端技術的面試
技術面試,需要注意HTML+CSS+JavaScript以及JS主流框架的使用,比如Vue、React等,前端相關技術,比如tcp握手協議、網路安全、後端技術等;
對於web前端面試准備,建議你去看「決勝前端」(min app),它裡麵包含了很多web前端技術面試、人事面試等面試真題,而且針對面試題做了詳細的分析與解答。
我給你截圖看一下例子吧
8. Python後端工程師面試題目有哪些
一.語言
1.推薦一本看過最好的python書籍?
2.談談python的裝飾器,迭代器,yield?
3.標准庫線程安全的隊列是哪一個?不安全的是哪一個?logging是線程安全的嗎?
4.python適合的場景有哪些?當遇到計算密集型任務怎麼辦?
5.python高並發解決方案?我希望聽到twisted->tornado->gevent,能扯到golang,erlang更好
二.操作系統
可以直接認為是linux,畢竟搞後端的多數是和linux打交道。
1.tcp/udp的區別?tcp粘包是怎麼回事,如何處理?udp有粘包嗎?
2.time_wait是什麼情況?出現過多的close_wait可能是什麼原因?
3.epoll,select的區別?邊緣觸發,水平觸發區別?
三.存儲
存儲可能包含rdbms,nosql以及緩存等,我以mysql,redis舉例
mysql相關
1.談談mysql字元集和排序規則?
2.varchar與char的區別是什麼?大小限制?utf8字元集下varchar最多能存多少個字元
3.primary key和unique的區別?
4.外鍵有什麼用,是否該用外鍵?外鍵一定需要索引嗎?
5.myisam與innodb的區別?innodb的兩階段鎖定協議是什麼情況?
6.索引有什麼用,大致原理是什麼?設計索引有什麼注意點?
redis相關
1.什麼場景用redis,為什麼mysql不適合?
2.談談redis的事務?用事務模擬原子+1操作?原子操作還有其它解決方案嗎?
3.redis內存滿了會怎麼樣?
四.安全
web安全相關
1.sql注入是怎麼產生的,如何防止?
2.xss如何預防?htmlescape後能否避免xss?
3.csrf是什麼?django是如何防範的?
密碼技術
1.什麼是分組加密?加密模式有哪些?ecb和cbc模式有什麼區別?為什麼需要iv向量?
2.簡單說說https的過程?
3.對稱加密與非對稱加密區別?
3.如何生成共享秘鑰? 如何防範中間人攻擊?
五.雜
是否關注新技術啊?golang,rust是否了解?numpy,pandas是啥鳥?
是否緊跟時代潮流?逛不逛微博,刷不刷知乎?
可能你覺得我問的好細,但這好多都是平常經常遇到,並需要解決的,細節更能體現一個人。
如果你覺得小kiss,歡迎投簡歷給我[email protected],龍圖游戲運營支持中心數據分析部招人;覺得有點問題,那還等什麼,趕快來和我交流交流。
更新:討論區挺熱鬧,有人說好簡單,有人說好難,其實我覺得這只適合面試2~3年工作經驗的後端工程師。真的沒有問
很難的題目,只是可能你平時沒有注意。
在這里我推薦幾本書吧
python參考手冊,絕對讓你更上一層樓
圖解密碼技術,密碼入門不二之選
mysql技術內幕第五版,有點厚當手冊讀讀,要有耐心,高性能mysql也強烈建議讀讀
effective tcp/ip programming
為什麼評論區有這么大差異?我想是個人經歷不一樣吧,如果是搞web的對操作系統這塊和密碼技術會偏弱,但如果是系統工程師或是游戲服務端這塊會明顯偏強。
六.後記
最近我也面試了不少童鞋,我發現能達到要求的真的少之又少,很多hr都說Python是最難招聘的崗位,我想是有道理的,這真的很值得我們去深思?
我想有一部分原因是Python這門語言造成的,會寫Python的人很多,但寫的好的人很少,大部分都把Python當做腳本來寫,缺乏面向對 象,模式的思想。想想Java,大家都習慣了介面,實現分離,設計模式在Java中也喊了很多年,尤其是ssh三大框架一出,用著用著就理所當然的認為就 該這么做,雖然也有點壞處,但對企業級Java開發無疑是一大進步。
反觀Python,尤其是生成器,協程,元類給Python注入了很大的靈活性,想寫的Pythonic有不小難度,但其實Python高級特性就那麼幾個,幹掉了也就沒有了。
當你覺得Python遇到了瓶頸,不妨停下來好好想想。研究研究設計模式,想想重構,了解領域驅動設計,敏捷開發,再回來讀讀以前寫的代碼,當眼界變高了,代碼也就美了。
當然思想的提高不是一朝一夕,模式,原則會經常讓你糾結,糾結就會思索,思考就走出了自己的路,當然條條大路通羅馬。
資料庫等存儲技術是研發工程師邁不過的坎,對關系資料庫以mysql舉例來說,你必須清楚的知道什麼欄位選擇什麼類型,類型位元組大小,限制條件,這 東西也很容易理解,多想想即可,比如set類型,要支持交並等操作,1個位元組只能存8個類別。數據類型搞定了,下面就是索引了,mysql索引種類?主 鍵,唯一索引,普通索引。索引類別,BTree索引,hash索引。索引的優缺點,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情況,比如mysql子查詢慢等。其實到這里研發工程師就差不多,當然你可以繼續深入下去,比如讀寫分離,集群管理,甚至一些 參數調優。
9. 前端好還是後端
前後端應該都挺有發展前景,相對來說前端會比較簡單一點。但是現在對於同個層次的人,一般公司前後端待遇都差不多,待遇好的肯定是你技術過硬的。那就要看自己的愛好了。以下是web前端開發和java後端開發兩者的分析。
具體步驟
首先說JAVA,JAVA是作為後端開發的。現在後端開發主要是PHP和JAVA,當然還要加上資料庫MySQL、Oracle。PHP比較適合交互比較少的後端,適合小規模的應用。JAVA做後端安全性、穩定性都較好,所以大、中企業用JAVA開發。當然後端開發還有C++等語言,C++的特點是開發快、成本低,一些手機游戲就用C++作為後端語言。
Web前端主要用的語言是Html5、CSS3、JavaScript,還要加上AJAX。前端開發還有什麼前端呢?移動應用(APP)前端。2015年之前,開發APP的前端,要用Android和IOS,而且還必須分別開發。
2015年開始,興起了APP前端統一開發,比如MUI框架、react native。這兩種開發我都涉及到,原生android我也做過幾款APP。MUI開發用的就是Web前端的那一套東西,只不過封裝了很多的類。react native開發模仿的就是Web前端開發,用的語言是ES5,ES6。你網路上查一查就知道ES跟JS其實沒啥區別。
所以,要說哪個有前途。真不好說,因為這兩個技術就是相輔相成的。現在學前端就是從 Web前端開始。但是對於個人來說,從事前端或者後端還是有區別的。前端開發,對於有美術功底的人是有優勢的,後端開發適合編程技術功底扎實的人。
10. 如何面試後端程序員
計算機網路常見面試點總結
計算機網路常見問題回顧
2.1 TCP、UDP 協議的區別
2.2 在瀏覽器中輸入url地址 ->> 顯示主頁的過程
2.3 各種協議與HTTP協議之間的關系
2.4 HTTP長連接、短連接
2.5 TCP 三次握手和四次揮手
三 Linux
3.1-簡單介紹一下-linux-文件系統?
3.2 一些常見的 Linux 命令了解嗎?
四 MySQL
4.1 說說自己對於 MySQL 常見的兩種存儲引擎:MyISAM與InnoDB的理解
4.2 資料庫索引了解嗎?
4.3 對於大表的常見優化手段說一下
五 Redis
5.1 redis 簡介
5.2 為什麼要用 redis /為什麼要用緩存
5.3 為什麼要用 redis 而不用 map/guava 做緩存?
5.4 redis 和 memcached 的區別
5.5 redis 常見數據結構以及使用場景分析
5.6 redis 設置過期時間
5.7 redis 內存淘汰機制
5.8 redis 持久化機制(怎麼保證 redis 掛掉之後再重啟數據可以進行恢復)
5.9 緩存雪崩和緩存穿透問題解決方案
5.10 如何解決 Redis 的並發競爭 Key 問題
5.11 如何保證緩存與資料庫雙寫時的數據一致性?
六 Java
6.1 Java 基礎知識
6.2 Java 集合框架
6.3 Java多線程
6.4 Java虛擬機
6.5 設計模式
七 數據結構
八 演算法
8.1 舉個栗子(手寫快排)
九 Spring
9.1 Spring Bean 的作用域
9.2 Spring 事務中的隔離級別
9.3 Spring 事務中的事務傳播行為
9.4 AOP
9.5 IOC
不需要寫代碼就能衡量候選人的方法可能有一萬種。我常用的三個主要方法可以覆蓋許多不同的技能。在面試過程中,我們會談論候選人的經驗,要求他們做一些代碼審查,並與別人合作設計一個系統。
下面我會詳細解釋這個過程。
我試圖通過這些方法找到真正能夠勝任技術工作的候選人,並且他們必須能在單純的編程技能之外給團隊帶來價值。通常在一次面試中我能在大約一個小時內覆蓋所有三個部分。我有信心這些信息能讓我找到好的候選人。
1、深入挖掘他們的經驗
許多團隊已經這樣做了。他們會在面試一開始花幾分鍾,詢問候選人之前的工作,他們對工作的態度,等等。大多時候這就像隨意談話一樣。
但這是不對的。
記住這是面試。你需要盡可能地理解他們構建系統時使用的技術。
為了做好這一點,你需要在面試開始之前仔細閱讀他們的簡歷。這不是開玩笑,在面試開始之前至少花上10分鍾仔細閱讀(不是略讀)簡歷,如果花30分鍾時間則最好。要從簡歷中盡可能多了解些他們之前的項目,Google一下看看能否找到他們項目的公開信息。面試時挖掘背景信息所花的時間越少,就越能獲得好的效果。
在面試中,要求候選人談談他最近最感興趣的項目。要練習主動的傾聽,要學會參與。假裝你是他團隊中的一員,或者假裝你們是在做架構審查。你要努力了解他們構建的東西以及構建的方法。這樣做的好處和壞處是什麼?要讓候選人知道,不知道答案無所謂,但重要的是能勾起你的好奇心。
下面是我認為能獲得好的答案的問題:
你在項目中的職責是什麼?這個問題本身並不是決定性的。即使在項目中承擔的職責很小,他們也可能很適合你們的團隊。你的候選人也許正是因為沒能獲得重要的職責而在尋找新的機會。因此,知道他們過去的職責會很有幫助。
你從他人那裡獲得了什麼幫助?無法感受他人的幫助是個極其危險的信號。即使是個人項目,也一定需要別人的幫忙。你肯定不想要一個以自我為中心的同事。
給我介紹下那個功能的工作原理。解釋下數據的來源和去向、存儲方式以及這一切能帶給最終用戶的好處。這個問題的答案足以吸引你的好奇心。
這個項目中最糟糕的技術債務是什麼?好的工程師必須理解他們做出決定時需要付出的代價。問完這個問題,可以繼續詢問他們怎樣改正這些問題,或者尚未改正的理由。
有沒有出過生產環境下的bug或服務中斷?測試下他們是否理解bug的原因,以及團隊解決bug的方法。他們是否提前預期到了bug?下次怎樣才能避免同樣的問題發生?
他們怎樣與代碼的「作者」交流?交流是否有用?是否高效?是否友善?
他們會著重哪些問題?是否能明確表達出他們的疑問?他們是否會立即指出哪些無關緊要的問題?
他們是否善於閱讀自己不熟悉的代碼?
過於糟糕的拉取請求的描述或提交信息;
能用但無法自洽的代碼;
過於復雜的代碼(需要重構的代碼);
混亂的變數或方法名;
過度設計的代碼(即實際上永遠不會用到的功能)。
這一部分面試能讓你直接了解候選人的經驗。做好這一部分還能讓你了解他們如何感謝別人或責備別人。你將會了解到他們如何在兩難的工程問題上做出抉擇,他們會與你分享最近的教訓,他們與別人溝通技術的能力應該也很明顯。
如果他們選擇了不太適合的項目,可以考慮談論其他項目。所謂不太適合的意思是項目不夠復雜或他們記不清的情況。
注意,這一步要避免詢問類似於「告訴我你解決過的最難的bug」之類的問題。要求別人回憶系統的某一部分的具體原理會帶來大量的虛假負面判斷。人們不可能擁有他們修復的bug相關的一切知識,這種問題會給面試過程帶來很大壓力。
2、讓他們審查你們的代碼
這項活動一半是代碼審查一半是角色扮演。你可以藉此篩選出那些能夠提升團隊整體代碼質量並促進辦公室氛圍的人。
下面是代碼審查過程中需要關注的一些方面:
這個方法需要提前准備很多東西。你需要找到或編寫一段代碼供候選人審查。你還需要為你希望候選人找出的問題創建一個優先順序列表。不要讓面試管當場出題,一定要事先准備好。
在選擇需要審查的代碼時,不要選擇產品代碼。你的候選人沒有你所擁有的背景知識,這樣做實際上是將候選人與你的同事比較,而不是與其他候選人比較。
努力降低代碼示例中的復雜度。面試的時候,候選人沒有太多時間閱讀代碼,而且很可能他們並沒有想到會做代碼審查。熱身就要花很長時間。
在代碼中加入一兩個真實的bug,但不要強調找bug。一般來說,代碼審查並不是個好的找bug方法,特別是審查者從來沒有見過代碼的情況下。能自證的bug(如給需要數組的函數傳遞字元串)最好。在你的優先順序列表中,bug的優先順序應該是最低的,bug應該是給極其優秀的人的加分項。
最後,代碼應該做一些實際的事情。如果你的公司很出名,那可以選擇你的產品簡化版本。但如果你需要花大量時間為候選人提供背景信息的話還是算了。
最好的選擇要麼是虛構的代碼(也許可以選擇本文竭力避免的代碼面試中用到的代碼),要麼是開源代碼中的一個拉取請求。
一旦決定了要審查的代碼,你應該期待候選人找出下面這些東西:
如果代碼中沒有足夠的問題,就多加一些。
這里有個潛在的問題,我還沒有確定的答案。這個問題是:你是否應該提前將代碼發給候選人?
如果你這樣做,就又給那些有空閑時間的人以巨大的優勢。如果不這樣做,就要面臨增加面試壓力的風險。
我傾向於後者。好的面試官可以減輕壓力,方法之一就是讓面試者提前知道他們將做代碼審查,你也可以在審查開始之前介紹你的期望。