Last updated: 2019/10/25
2019/08/21 - 更新目錄
2019/09/05 - 增加9家單位面經
2019/09/21 - 更新作者信息
2019/10/11 - 更新10加面經
2019/10/25 - 更新阿里達摩院
1. 華為、大疆、今日頭條、阿里、百度、阿里、騰訊、京東、小米整體概述
2. 本碩985非科班渣碩2020騰訊電腦視覺演算法實習面經
3. 百度計算機視覺暑期實習面經
4. 京東計算機視覺實習面試
5. oppo提前批c++崗位面經
6. 美的提前核准Python資料探勘工程師
7.陌陌科技圖像演算法實習生
8.百度前端三面面經
9. 寒武紀:深度學習工程師
10. 作業幫二面2019.7.24
11. 百度
12. 騰訊
13. 拼多多2019.8.13
14. 蘑菇街2019.8.14
15. 網易互娛遊戲研發
16. 360 搜尋(Ranking)-機器學習工程師
17. 網易互聯網:深度學習工程師
18. 順豐sp和ihandy牛客專場
19. 滴滴牛客sp專場
20. 快手牛客sp專場
21. 依圖
22. 騰訊
23. 遠景
24. 百度
25. 搜狗
26. OPPO
27. 58同城
28. 華為
29. 阿里達摩院
Notes
本碩985(學校排名較低),我自己成績一般,非計算機出身,做過相關CV項目,有點心虛,但大佬帶過幾場比賽。
騰訊計算機視覺演算法崗位
面試內容整體回憶,也不分第幾場面試了
不管第幾次面試,都是先自報家門,1分鐘表達自己的優點,有時候還會稍微提一下你對缺點的看法
是否有參與相關實習,做了哪些項目,打了幾次比賽,分別扮演什麼職位? 著重會針對自己熟悉的一場,詳細講其中演算法的原理,以及比賽成績的分析,如果下次再打比賽,該怎麼提高名次。打比賽的收穫是什麼?認為工業和科學研究有什麼差別?
普通985碩,沒走內推已經拿到百度CV暑期實習offer
難度不大,面試官都很nice,總共三輪面試,基於履歷的項目,然後開始拓展
總結:小哥哥建議注重一些底層演算法的研究,資料結構、決策樹還有普通的影像處理演算法的實作方法
總結:二面基本全部都是問項目,其他問題都是捎帶更關注你項目中解決問題和分析錯誤的思路
總結:面試官都比較專業,沒有架子,千萬不要不懂裝懂,不會說不會。
作者:轉發這個超越妹妹
作者:水一水
1.自我介紹答:一波常規操作,基本資訊+技術能力+軟實力。
2.講下你參加的比賽或專案? 答:樓主講了個比賽。
3.影像方面的模型一般用啥? 答:樓主說自己做的主要是用深度神經網絡,講了一個專案。
4.深度學習或機器學習方面了解哪些模型? 答:樓主深度學習扯了下專案裡的resnet,機器學習就說比賽一般用lgb、xgb居多,有的還用LR,之前一個比賽裡還用過lsmt、rnn之類的,這種對這種自然語言效果好一點。
5.用過哪些資料庫? 答:使用的不多,用過aws的rds資料庫,不過sql語句都學過。
6.現在有一個表,讓你實作插入、更新,怎麼用sql實作? 答:insert和update。
7.你剛才說的是兩條語句,如何用一條語句實現? 答:呆滯了一會,實在沒想起來。面試官就說可能你平常用的不多,我說是的,平常資料庫都不大,對於語句次數要求不是很嚴格。
8.你主要使用什麼語言? python嗎? 答:嗯,最近用python比較多,但剛入學的項目其實是用c++做的。
9.python你平常主要用過哪些包? 答:sklern、numpy、pandas、畫圖的matplotlib,一陣呆滯,想不起來其他的了。
10.pandas的索引是乾啥的? 答:調數據出來,和資料庫的主鍵有點類似(這個好像沒答好,不知道面試官發現沒。。。)
11.你有什麼問題問我? 答:這個崗位是工程能力要求高?還是演算法能力要求高?面試官說你不一定跟我,我只是被集團安排面試的,樓主覺得有點小尷尬。然後面試官說演算法這裡反正都是需要落地的。 然後樓主又問了一個,就是投職的時候,發現有兩個部門,一個集團it部,和一個美雲智數,在這兩個部門做這個崗位,區別大嗎。面試官一陣回答。 。 。
作者: EternityY
作者:小安快跑! !
(1)微信小程式與Vue的差別(因為有做微信小程式的專案)
(2)Vue組件間通訊vuex原理
(3)常用的ES6新增特性
(4)map和set結構
(5)非同步請求Promise與Async await
(6)畫一個三角形均分原理
(7)畫一個扇形
(8)動畫的實作animation與requestAnimationFrame
(9)預請求Options fetch請求有了解嗎? 跨域
(10)web安全
(11)物理像素、邏輯像素例如1px在螢幕上是多大
(12)box-sizing屬性
(13)TCP與UDP的區別
(14)了解二元樹的遍歷嗎?先序遍歷怎麼遍歷的。 。 。
(1)對專案的介紹巴拉巴拉問了很多遇到的困難(解決方法用的setTimeout,所以延伸出了後面的Promise和Async/await)
(2)ES6的一些特性ES6數組方法的一個區別
(3)Set結構它的key值是什麼樣子的(不清楚)
(4)數組去重除了Set還有什麼方法?
(5)非同步操作有哪些? Promise和Async/await
(6)使用Promise對Ajax請求進行封裝就是呼叫這個方法可以透過.then()來取得請求的數據
(7)發送請求有哪些方法?如Ajax
(8)跨域:為什麼會有跨域?同源策略是什麼?跨域怎麼解決父域和子域之間可以共用資源嗎
(9)做過行動端專案嗎? (做過但是早忘了)行動端是怎麼適合的
(10)手機端swiper和animation(給自己挖了坑,本來想隨便說一下,結果人家主要就是做移動端的) 不用swiper插件怎麼實現上滑顯示下一頁的效果?行動端有哪些事件?
(11)怎麼取得頁面url參數
(12)事件委託機制
二面其實主要還是根據履歷你做了什麼以及在你的回答中涉及的到的知識點來問的。
(1)介紹一個項目,從專案背景,實現原因,實現效果以及所遇到的問題來說。說了好久,感覺自己都詞窮了解釋不清,所以換了一個話題。
(2)什麼時候開始學習前端的,以及為什麼會一直堅持前端方向。
(3)在華為實習還做了一些其他什麼事情?
(4)在華為實習學到了什麼?對自身能力方面有哪些提升?
(5)為什麼學習前端以及對前端的一個認識與理解。
(6)從學校到公司實習有個什麼樣的轉變?
(7)現在在學習有學哪些新的東西? (沒有,在看基礎知識)然後讓我舉例說了哪些知識以及應用場景。
(8)為什麼會有前端三大框架?它們解決了什麼問題?
(9)遇到哪些壓力以及怎麼釋放的
(10)遇到哪些困難是怎麼解決的? ? (向同事請教)怎麼交流請教的
(11)覺得自己有哪些短板?我說的缺乏實戰經驗(看起來不太好)
(12)現在在打基礎的同時學習到了什麼新的內容? ES6語法、web安全。 。 。然後把web安全詳細說了一下。又問:XSS攻擊很難發現,我們怎麼去發現這個問題。 。
(13)未來的職涯規劃
(14)接觸過哪些後台語言?
(15)之前有面過其他一些公司嗎?
(16)現在有拿其他offer嗎?
(17)平常是怎麼學習前端知識的
(18)有時間實習嗎?沒時間,寫畢設
(1)您覺得前端未來發展前景是怎麼樣的?
(2)對部門以及業務、技術棧問了一下。
連結:https://www.nowcoder.com/discuss/231656
2019.7.16一面:電話面全程打斷buff
1、自我介紹
2.Python和C++的差別(答了很多python的特性)
3.Python為什麼會慢?
答:因為不知道資料類型,所以取資料要判斷一下
(1、python是一個動態的解釋型語言;python中的值不是儲存在快取區而是分散的儲存在物件中
2.Python是一門解釋器語言,和C++,java不同,C++,java都是編譯語言,也就是說寫完Java程序首先要編譯源程序,生成可執行文件一個class文件,而Python寫完程序,提交到解釋器,解釋器會立刻將第一行程式碼翻譯成機器碼,然後將這行程式碼交給CPU去執行,然後進行下一行,翻譯第二行程式碼,再交給CPU執行,所以, Python要比那些編譯型語言執行起來還要慢)
3.看過那些書(答:python高性能程式)
4.什麼是記憶體外洩?什麼時候會記憶體外洩?
沒有刪掉。
(動態申請的記憶體空間沒有被正常釋放,但也不能繼續被使用的情況。沒有釋放記憶體)
5、關閉程序的術語?
不知道!
(可能是關閉進程,不確定)
6、指針和引用?什麼時候用指針什麼時候引用?
(指標可以不初始化,引用必須初始化,且綁定後不能再變;向函數中傳遞指標和傳遞指標的參考的區別:
傳遞指針,會先複製該指針,在函數內部使用的是複製後的指針,這個指針與原來的指針指向相同的地址,如果在函數內部將復制後的指針指向了另外的新的對象,那麼不會影響原有的指針;
對於傳遞指針引用,如果將傳遞進來的指針指向了新的對象,那麼原始的指針也就指向了新的對象,這樣就會造成內存洩漏,因為原來指針指向的地方已經不能再引用了,即使沒有將傳遞進來的指針指向新的對象,而是在函數結束的時候釋放了指針,那麼在函數外部就不能再使用原有的指針了,因為原來的內存已經被釋放了)
7.知道那些資料結構?
答:堆疊數組列表棧
8、什麼是堆?
答:平常只用陣列模擬堆,不知道真實的結構,認為是父節點-子節點這樣狀態的資料結構(超高頻問題,一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由OS(作業系統)回收。 ,如果沒找到就析構調無用內存再找一次,更具體的請自行總結一下並時常複習,區別包括申請方式、系統響應等很多)
9.堆和棧的區別
棧就是存東西的空間,往最裡面存,出來是最外面出來(超高頻問題,函數運行時分配,函數結束時釋放。由編譯器自動分配釋放,存放為運行函數而分配的局部變數、函數參數、回傳資料、回傳地址等。
10、行程和執行緒
(超高頻問題,我看了深入理解電腦系統後的總結:1、進程就是活著的程序,程序不過是一些文本,運行著的程序就是進程,是系統進行資源調度和分配的基本單位,掌握資源,包括記憶體等,執行緒就是輕量級進程,是CPU調度和分派基本單位。所以切換不靈活,線程不佔資源,只佔必要的資源(遞歸要壓棧所以有一點資源),所以線程容易通信->在進程分來的內存中直接通信,容易並發->切換靈活,同一行程的執行緒切換速度很快,因此執行緒開銷小3、位址空間,行程獨立,同一行程的執行緒共享資源,對其他行程的執行緒獨立)
事後總結: 顯然掛了,特別開心,讓我明白一個問題,搞演算法的也要會一些後端的東西。 演算法領域內工程師是要求變成能力的。
作業幫
一面90分鐘
先做兩題:
1.從陣列找三個數,三和與value差最小
要求時間O(n2)空間O(1)
我的寫法是排序+雙指針,leecode上的原題,沒怎麼刷過leecode,還好解法一致。
要求排序用快排
2、字串A 、B,B佔A最短的子序列(A中最短的子序列包含B)
面試官和我都笑了,因為python切片+in操作符四行結束,面試官也笑了,於是我們約定in這一步自己寫函數。
暴力解決一切花俏
1.介紹Kaggle比賽(從EDA開始到最後)
2、ID3C4.5等基本樹是二元樹還是多叉樹被切過的特徵還會再切嗎
離散特徵(離散數量>2)是多叉分類,連續是二叉分裂,連續可以在切,離散不可以(當時回答的是可以再切,被提示後意識到不可再切,說了自己的matlab實現,先做集合,遍歷特徵,保存最大的資訊增益位置,然後對特徵切分,切分後把這個特徵從集合中刪掉,所以離散特徵切完就不在切了,還好反應過來了,連續性特徵可以再切,詳情可以去看看別人的ID3樹和其他樹的原始碼)
3、介紹BN
(超高頻題目,可以介紹的很多,機器學習本質是學習分佈,特別是logloss損失,等效優化交叉熵,而交叉熵用於衡量分佈的一致性。 1.預白化,訓練快,sigmoid兩端飽和梯度小,BN可以縮放到線性區2、分佈學習,NN深了之後每一層分佈都會偏移,BN壓縮分佈使得各層分佈趨近於一致3 、BN可以看做一定程度的數據擴充,數據做了抖動處理。 4.GBDT和RF哪個樹比較深
RF深。說了boost和bagging的思想。 boost使用低方差學習器去擬合偏差,所以XBG和LGB有樹深的參數設置,RF是擬合方差,對樣本切對特徵切,構造多樣性樣本集合,每棵樹甚至不剪枝。
5.XGB特徵重要性程度是怎麼判斷的?
答:不清楚,但是用的很多,猜測是按分裂點的次數(在所有樹的出現次數),只說了這一點
(gain 增益意味著相應的特徵對通過對模型中的每個樹採取每個特徵的貢獻而計算出的模型的相對貢獻。與其他特徵相比,此度量值的較高值意味著它對於生成預測更為重要。
cover 覆蓋度量指的是與此功能相關的觀測的相對數量。例如,如果您有100個觀察值,4個特徵和3棵樹,並且假設特徵1分別用於決定樹1,樹2和樹3中10個,5個和2個觀察值的葉節點;那麼此度量將計算此功能的覆蓋範圍為10 5 2 = 17個觀測值。這將針對所有4項功能進行計算,並將以17個百分比表示所有功能的覆蓋指標。
freq 頻率(頻率)是表示特定特徵在模型樹中發生的相對次數的百分比。在上面的例子中,如果feature1發生在2個分裂中,1個分裂和3個分裂在每個樹1,樹2和樹3中;那麼特徵1的權重將是2 1 3 = 6。特徵1的頻率被計算為其在所有特徵的權重上的百分比權重。 )
6.XGB很容易理解它的迴歸和二分類,該如何理解多重分類呢?
談笑中度過,一開始回答的label encode ,用onehot+softmax,但是每棵樹如何是擬合softmax前一步呢。這我確實不知道,面試官提示我說三分類,構造100棵樹還是300棵,我就意識到了,回答原以為是100棵。
面試官說構造三百棵樹,擬合三分類,再softmax。
(onehot之後,輸入標籤是一個向量,對向量中每一個預測點整合一群樹)
二面55分鐘
1.先問你是報的NLP方向不
不是,演算法方向,講實驗室項目,用了很多圖像的NN演算法
2、三題
第一題:第K大的數
講了三種方法
方法1:堆排序分析複雜度是O(Nlogk)(沒分析錯把)
方法2:快排二分分析複雜度是O(N)
方法3:排序查表分析複雜度(NLogN)
要求O(N)所以用的快排二分,面試官說快排能做這題?但快排是最快的(我知道的)也剛好是要求的O(N)複雜度
(百度了一下,快排和hash最快,其餘都不快)
手寫python程式碼,但編譯不知道哪裡也錯了,這個IDE也不提示,面試官也很尷尬,說以前用牛客的可以報編譯錯了在哪於是我就說下面的題用C++寫(這個問題很嚴重,面試的時候找不到bug,所以一定要小心python,一定要bug free,不然老實用C++)
第二題:
地板n 3,木板1 3,幾種排法
dp[n]=dp[n-1]+dp[n-3]
第三題:
等機率1-7
造等機率1-10,分析調用1-7的次數期望
7進制,呼叫兩次產生0-48,然後截掉40和40以上的再//4 1
期望不好算,是個數等比列求和,然後我就口算的近似值2.5n
想一想,可能是面試官壓力面我,所以才會質疑快排把,分析了為什麼是O(N)而不是面試官說的O(NlogN) 然後向他解釋為什麼部分排序可以解決這個問題,面試官的程度應該是沒問題的(PS:不要以為面試官能力不行,絕大多數面試官等級都到位) 謝謝作業幫
效率很高,交完履歷一天就面試了
一面很順利,二面一百分鐘,在和麵試官的交流中學到了很多東西
一面:過於順利導致我小本本上什麼都沒記一面順利,對答如流,以致於問答記錄上什麼都沒記錄。 第一題LIS: 演都不演,問完這個題的所有要求就直接默寫最優情況然後和麵試官介紹這樣的結果為什麼是對的,然後順便寫了O(n^2)的寫法。 第二題忘了,一分鐘結束二面: 都是開放問題,沒有標準答案,時長一百分鐘,內容主要是實際推薦場景講比賽? 從頭到尾,講了各個階段我的工作,各個階段我的思考,各階段我的心路歷程。 (歪打正著了,面試官想聽的應該就是我各個階段的工作,然後遇到的問題,對問題的思考和解決) 你覺得如何衡量用戶對搜尋結果的滿意程度? 南呀。我太南了。不過我說了TCP連線計時,根據場景過濾計時噪聲,例如視訊場景用視訊長度的百分位計時,秒退的有效性等等。這點面試官可以滿意。然後絞盡腦汁想不出另外一個好特徵了,就照著弱特說,例如quary的相關性,什麼什麼的。面試官不滿意,因為這些東西主要表徵使用者感興趣程度而不是滿意程度。 你覺得如何解決新搜尋結果的推送? 答:新搜尋結果肯定歷史推送為0,沒有任何參考,但我們不知道他品質怎麼樣。於是把他隨機推送一小部分用戶,在推廣。在推廣是注意刷點擊率現象,過濾一下,巴拉巴拉。面試官很滿意。 你覺得如何看待場景和模型? 我個人非常注重場景,從自己的研究經歷開講,講到西瓜書的引言,講了自己完整的心路歷程。面試官可以滿意。 忘了一部分問題,太多了,講到嗓子啞了,但是面試官的指導真的是乾貨滿滿啊,沒有問模型的一些東西,而是懟實際工程,被懟的懷疑人生,懟完結束,面試官說會報給主管,然後等消息就好了。 面試官這樣懟我,我就很想去百度,因為他征服了我。
沒有內推,直接在官網上寫的履歷,好像也是1天還是2天就面試了,但是。 。 本來是我最意向公司,現在不是了。 騰訊校招
意向部門TEG 電話直接開始:研究崗
自我介紹,聊聊項目
對我們部分有興趣嗎:部門做日誌檢測安全領域
互相了解
要開會,下次繼續聊
10點:繼續聊上次的內容
全程比較輕鬆愉快
二面結束,但是狀態還是二面待安排。 。 。
和麵試官討論如何用機器學習的方法去處理危險日誌偵測。從頭複習了各大學習的知識,也算是自我反省了。這裡能獲得的比較突出的經驗就是,很多部門還是規則學習為主,對機器學習的分類情況有強烈的可解釋性要求。所以樹模型和LR等可解釋性好的模型很受青睞呀。但最後面試官「感謝」了我,估計是暗示我掛了,桑心
通知筆試五題A了3道半,成績也還行把,但部門鎖我履歷。 。 。
通知了“兩面”,幾分鐘結束,隨便聊聊,說9月份繼續面
目前流程已結束,舒服了,按理來說早該結束了呀,這個部門沒有機器學習崗,但是想找個算法工程師來開闢一下業務,問我大概要招多少人emm~
拼多多待感謝信
一面:
自我介紹
科學研究項目介紹
Kaggle 比賽介紹
騰訊比賽介紹
RNN用過嗎用過:專案Kaggle
LR用過嗎用過:Kaggle的二分類偵測
XGB和LGB區別:
只想到三點,特徵排序,特徵切分和直方圖和全排序
說他們共同點較多小提一點,又小提了GBDT到XGB和LGB,然後扯了扯實際用這兩個模型的感受,然後說只記得三點不同了,實際效果xgb不輸LGB但是調參不好搞,而且LGB很快
(
1)更快的訓練速度和更高的效率:LightGBM使用基於直方圖的演算法。
2)直方圖做差加速:一個子節點的直方圖可以透過父節點的直方圖減去兄弟節點的直方圖得到,加速計算。
3)更低的記憶體佔用:使用離散的箱子(bins)保存並替換連續值導致更少的記憶體佔用。
4)更高的準確率(相比於其他任何提升演算法):它透過leaf-wise分裂方法(在當前所有葉子節點中選擇分裂收益最大的節點進行分裂,如此遞歸進行,很明顯leaf-wise這種做法容易過度擬合,因為容易陷入比較高的深度中,因此需要對最大深度做限制,從而避免過擬合。 ,帶來了必要的開銷)更複雜的樹,這就是實現更高準確率的主要因素。然而,它有時或導致過擬合,但是我們可以透過設定|max-depth|參數來防止過擬合的發生。
5)大數據處理能力:相較於XGBoost,由於它在訓練時間上的縮減,它同樣能夠具有處理大數據的能力。
6)支持並行學習。
7)局部取樣:將梯度大的樣本(誤差大)保留,對梯度小的樣本進行取樣,使得樣本數降低,並提高運算速度
)
程式碼水題,直接讓面試官選C++還是Python,面試官(好像所有面試官回應都是一樣)“你選就好”
我選就選python了寫得快
棋盤有棋子,只能左上走到右下,右走或下走,問最多經過棋子數
dp[i][j]=max(dp[i-1][j],dp[i][j-1])
if chess[i][j]=='棋子':
dp[i][j] =1
二面:估計涼涼,答得不好
又一個自帶打斷buff的面試官搞我思路,我不去了還不行嗎
1、gbdt和xgb
(gbdt、xgb、lgb凡是專案提到了一定要熟練)
2、BN、Dropout
( Dropout可以作為訓練深度神經網路的一種trick供選擇。在每個訓練批次中,透過忽略一半的特徵偵測器(讓一半的隱層節點值為0,當然這個「一半」是超參數,自己設),可以明顯減少過度擬合現象。
Dropout說的簡單一點就是:我們在前向傳播的時候,讓某個神經元的活化值以一定的機率p停止運作,這樣可以使模型泛化性更強,因為它不會太依賴某些局部的特徵。
其實就是個Bagging策略,建構子網路組合。 )
3.為什麼不用先用LR呀(LR這麼簡單用它幹嘛?) 用LR做做二分類,做做stack還是挺好的,但LR總感覺表達能力不夠,特徵比較粗的話效果可能一般。 4.騰訊比賽特徵如何離散化啊連續性特徵也能交叉啊為什麼不交叉離散化就是數據分桶,我在這裡按百分位分桶,結果和麵試官解釋了很久為什麼百分位分桶比較均勻,百分位是資料排序的百分位,而不是區間的百分位。 連續性特徵交叉,連續性特徵映射成離散特徵後,可以和連續性特徵一起送到嵌入層。 5.AUC知道吧,迴歸怎麼計算AUC
不知道怎麼計算,一查根本沒有..是不是我聽錯了他其實想說邏輯回歸的AUC怎麼計算
(回歸沒有AUC這麼一說)
6、堆和棧哪個開闢的快
MMP完全說反了,答完很久才反應過來。說的是堆編譯的時候分配好了,不用再開闢伸縮什麼的快,棧要伸啊縮啊所以慢(見前面的答案,這個答錯了我可以涼涼了)
7.重載和重寫
(注意重寫是對虛擬函數的重寫,我當時就答錯了,所謂重載就是同名函數參數表不同,編譯時會對函數改名,其實運行的時候他們已經不是同名的了;重寫是虛函數重寫,子類別對父類別的非虛函數在寫一遍叫重定義或隱藏,反正不是重寫,重寫是對虛函數的重寫)
8.大數據買東西找買東西最多的100個怎麼做
建個哈希表小頂堆
9.MAP底層怎麼做的
我說還沒看底層程式碼。 (話說我一直不知道有MAP這種東西存在,都是手擼哈希表,準備有時間看一下STL源碼分析)
(底層紅黑樹,一種O(log(n)的查找插入和刪除資料結構)
索引複雜度呢我說,log(n) 恍然大悟索引是二元樹
10、有沒有O(1) 的?恍然大悟我擦原來還有哈希表
哈希表衝突怎麼辦
回答了拉鍊重哈希當前1
(同樣高頻問題,拉鍊:鍊錶,衝突了就在鍊錶後1個;探測:線性探測,二次探測,就比如當前的值1;再哈希:多個哈希函數)
其實我不太會STL,我喜歡手擼。不喜歡用STL的函式庫函數,導致我STL不太行。等有空看一波STL源碼分析。
蘑菇街
面試體驗特別好,一二面很順利,然後HR又特別好,感覺HR面已經過了,就差中間的交叉面了這裡說一個點:第一次接到面試通知的時候,打開鏈接是一個介面,上面有個面試時間、可編輯框、確定按鈕和放棄按鈕。 提示寫的是:如果點確定,時間將不能更改。我又不敢點放棄,打電話問的HR,說寫鍾意時間在點放棄就好。 第二次面試的時候,這個框的提示語變成了,如果點確定,時間將不能更改,如果時間不合適,請寫上合適時間並點取消。 我就覺得HR賊好,於是二面的時候瘋狂表達了我對HR工作的滿意、支持和欣賞,二面說我的誇獎她會反饋給HR滴。所以我感覺HR面是不是已經過了,就差交叉面了。
不過我說的都是實話,我確實很喜歡她們的HR。
自我介紹,兩題
第一道:
1000以內的最大質數
說了Python能夠O(1)空間實現素數產生器,篩選法,但是沒寫,沒要求就不寫,直接bool判斷就好,注意從大到小
分析複雜度,如何減少複雜度?從上到下,從999開始往下搜,搜到就停,每次-2。 bool判斷,從2到根號x開始,全求模,非0跳出False。 但好像面試官不會python哦?於是改用C++下一題
第二道:
不用除法實現除法,很簡單
注意我的寫法裡,C++裡abs(一個負數)可能溢出,但是無所謂面試的時候速度A比較重要,平時要注意這些細節,而且python不會溢出
筆試的時候剛準備二進位優化就下一個話題了,面試的時候寫的,湊合看看吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 25 235 3 28 29 30 31 32 3 3438 30 3432 30 43 44 45 46 47 48
#include <iostream>
using namespace std;
int jianfa(int num1,int num2)
{
int re = 0;
bool fuhao = false;
if ((num1<0 && num2<0) || (num1>0 && num2>0))
{
fuhao = true;
}
num1 = abs(num1);//小心溢出
num2 = abs(num2);//小心溢出
if(num2==0)
{
cout<<"div zero error"<<endl;
return 0x3f3f3f3f;
}
if(num1<num2)
return 0;
int tmp=1;
while(num1>num2)
{
tmp*=2;
num2*=2;
}
num2/=2;
tmp/=2;
while(num2)
{
if(num1>=num2)
{
num1-=num2;
re =tmp;
}
num2/=2;
tmp/=2;
}
if(fuhao)
return re;
else
return -re;
}
int main() {
int num1,num2;
cin>>num1>>num2;
cout<<jianfa(num1,num2);
return 0;
}
問了很多很多:
個別想不起來了失憶了。 。
1.為什麼沒有實習經驗?
第一點老師不讓找工作。 (這是真話,今天老師對另一個同學說,你找到工作了嗎,你找到工作但是畢不了業你說工作是不是白找了,。。。)
第二點,為了能夠接觸到實際工程,在科學研究之餘,參加了比賽,巴拉巴拉。面試官可以滿意。
2.LR用過嗎?
必須的
3.LGB比XGB好的點?
直接介紹二者不同
4.L1、L2不同? L1為什麼能稀疏?
從數學分佈講了,一個是拉普拉斯分佈一個是高斯分佈;講了圖解為什麼L1能稀疏,一個圈一個菱形,容易交在軸上。工程上講了,L1的近似求導,區間內0區間外優化。然後L2是直接求導比較簡單。
5.哪些學習器是凸優的呀?
LR sigmoid logloss 凸優。線性迴歸,最小平方法凸優。 SVM凸優。 NN肯定不凸優,因為往往收斂到鞍點。 PCA無數學解,但是利用特徵值反而得到最優解
(注意sigmoid 平方損失不是凸優化)
6.特徵重要性你怎麼做,例如特徵組合和刪除,調參你是怎麼調的呀?
答:特徵組合用onehot 交叉EMBEDING。組合的話要看實際分佈,講了自己構造過的一個和標籤有線性關係的組合,說自己用的是遍歷的方法,用兩兩數學關係構造新特徵,看和標籤的線性關係。
特徵刪除等想到了某個KAGGLE大佬的特徵篩選步驟,從他的kernel我也是學到了很多。
調參:
第一步祖傳參數。例如樹模型的深度、取樣頻率等,這個主要還是經驗
第二部調參,例如嘗試新特徵,特徵取樣頻率要設為1啊這種細節
7.知道幾種激活函數?
我說最簡單的SIGMOID TANH RELU我就不提了,講了講某個比賽時候用到了leakRELU,然後谷歌的論文裡面的swish函數,隨口介紹了一下這個論文。
8.鞍點是什麼?
我有嘴賤說這個乾嗎,然後我說忘了,但絕對不是局部最優點,看表情面試官可以滿意,其實真忘了。
(結合鞍點影像理解更佳。注意一個方向上升,所以很容易坐滑滑梯從上方滑到鞍點。另一個方向是下降,所以可以坐著下降的滑滑梯下去,但是鞍點這裡梯度是0,是平的,所以優化就容易困在這裡。 point)在微分方程中,沿著某一方向是穩定的,另一方向是不穩定的奇點,叫做鞍點。
臨界點,叫做鞍點。在矩陣中,一個數在所在行是最大值,在所在列中是最小值,則稱為鞍點。在物理上要廣泛一些,指在一個方向是極大值,另一個方向是極小值的點。
廣義而說,一個光滑函數(曲線,曲面,或超曲面)的鞍點鄰域的曲線,曲面,或超曲面,都位於這點的切線的不同邊。 )
先問用沒用過RNN
答:專案的RNN效果,分析RNN在專案裡不好,和比賽中RNN前期效果(前期效果最好)
用過GRU嗎,為什麼LSTM能夠記憶長時記憶。
答:GRU用過一次,在哪裡用的。用的記憶門,保證長時記憶傳輸。
9.Attention有哪些?
答:之前說到了自己用過attention,只用過,不知道原理。
(作為一個調參俠,各種網絡隨便試,但是attention的本質我還是不甚理解,attention is all you need?)
10.Dropout為什麼預防過擬合?
從bagging的角度回答的,NN是偏差小方差大的學習器,適合用bagging,構造子網絡在預測的時候組合,相當於構造了學習的多樣性,實現了bagging。
11、協同過濾:
說了解但沒寫過程式碼
(協同過濾,感覺一個學生要是搞科研為主還是很難接觸到,感興趣的可以了解下,特別是面電商的商品推薦工程師呀還是容易問到的)
12、CTR估計,都用什麼?
我說LR和FM ,程式碼寫過,FM主要是NFM,其他的FM都知道理論但沒寫過程式碼
13.蘑菇街是幹嘛的你造不?
答:賣衣服滴。於是他介紹蘑菇街主要是電商和直播。 (聽到直播我差點笑了,快憋不住了,就莫名很開心,然後他看我繃不住了趕緊說直播是目前蘑菇街發展最快的模組)
順利,沒有擼代碼,因為時間不夠面了半小時,二面說一面的評語是代碼能力特別好,所以不寫代碼了
我的專案裡有一個完整的軟體實現,我負責的主要部分超過了1萬行程式碼,可能是這一點讓面試官覺得我不用謝程式碼了吧。
其實大部分正常手擼程式碼都可以(除了字串是我的弱點),真出到不會的題目是真的沒辦法
介紹了專案講了專案細節
專案裡編碼領域內特徵組合都是異或,所以用RELU BN提特徵,BN真的是巨大提升
講BN原理,公式,實現
(可以去看看BN原始碼,不長)
為什麼用BN壓縮異或後映射的正數部分而不是什麼(沒聽清楚)?
我提到了BN層也算做了資料擴充,而且BN層把只有0,1的編碼流做了抖動轉化,讓梯度能變起來,優化的更好(機器學習可行無非就兩點,第二點就是優化問題)
為什麼用CNN?然後面試官介紹推薦領域內的另一種東西(Embedding),這個Embedding映射了隱向量,你覺得是CNN交叉好呢還是隱向量好呢
答:(其實我知道Embedding,因為一起參加比賽的朋友手擼了NFM,第一層就是這個嵌入層)我的回答偏向於場景,編碼領域內的一個特點:只有局部相關,時不變。所以用CNN,做全域相關的Embedding反而不好。推薦裡面特徵離散化後稀疏,而且特徵間本身可能具有高階交互信息,所以映射成隱向量效果會較好,如果是推薦,我建議用隱向量而不是CNN,其實這是由場景決定的,是資料的特性決定選用什麼學習器,使用什麼網路。 (我還介紹了圖像為什麼ResNet更好,但是編碼裡我的兩層極限調參網絡性能超過了殘差網絡,其實都是場景決定的)
面試官是大佬!
自我介紹,你會來蘑菇街嗎? 蘑菇街好啊,我一頓舔,但是說的都是我的心裡話。 前面對答入流,主要是我在介紹自己的比賽,從開頭講到結尾,比賽的背景,中間的心路歷程,最後的處理。 一二面如此順利,交叉面前面也順利的不像話,敗在了一道會做的水題,好氣。 不然我的蘑菇街就穩了啊,本來順利的不像話,哎
給定括號流,找出字符串中合法匹配的連續對數1 s = '(())(()()()'輸出是3。可能做不出來。 然後覺得應該用堆疊和貪心做。動態規劃可以做,這是我強項啊。都沒寫,空的。 = '()'我以為輸入進去了,實際s讀的應該是空。 2個0也行啊。 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#s = input()
s = '(())(()()()'
#s = '(())(()'
re = []
dp = [0]
for i in s:
if not re:
re.append(i)
dp.append(0)
else:
if i=='(':
re.append(i)
dp.append(0)
else:
if re[-1]=='(':
re.pop()
dp.append(dp.pop()+1)
else:
re.append(')')
dp.append(0)
print(re)
print(dp)
m = 0
cur = 0
for i in dp:
if i!=0:
cur+=i
m = max(cur,m)
else:
cur = 0
print(m)
输出:
['(']
[0, 0, 2, 0, 1, 1, 1]
3
最後問問題的時候,面試官有一點說的很好啊,關於召回排序,他補充了業界的一些做法。一般情況我們排序只要偏序就可以了,但是在一些競價廣告的情形排序,我們就必須要給出準確的估計值,這樣才好分錢。例如點擊率CTR還是其他的組合,最後要根據這個排序計算收益。 另外,在推薦搜尋裡,大佬也介紹了去相關的一些東西。即召回的東西可能重複度太高,或是需要被過濾掉(例如少兒不宜,大家都狂點,不太行),所以過濾是如何做的。而且假如是對某個人推薦,一種做法是人群不做特徵送進去,因為對某個人推送,這個人對所有廣告或其他推薦是等效的,所以和這個人交互召回排序就可以了。 最後我問了公司的平均年齡,因為我個人比較在乎這個,網路公司很煩的一點就是人群流動性特別大,我想佔坑後就蹲坑里了。面試官大佬對我說不要有心裡負擔,你來了兩年,做出自己的貢獻,是可以去其他公司的,他自己就去過兩個公司,一個是4年多,一個5年多(面試官看著這麼年輕,驚了),然後他手下的小女孩們比他小10歲,他也不好意思問實際年齡(原來是領導。。強啊,長得又帥,實力又強) ,他是比較支持我做了兩年就溜的。而且他說蘑菇街是中大平台,有獨特的好處,比BAT更更注重人的培養,而且平台的大數據流可能不會像BAT那麼大,這種中大的數據流可以用很多模型啊,不像百度(我全程沒提百度。)可能數據流大公司的一些開源包就不行,只能用自己公司造的輪子,來蘑菇街你能更好的施展自己。 收到了HR面的通知,要求等面試官來學校或直接去公司面試,選擇後者,準備體會一下蘑菇街的風土人情。
1、自我介紹
沒什麼拿得出手的東西呀,我主要是演算法工程師,而且實際科學研究專案要麼專業性強(程式設計演算法都不沾),要麼是演算法的東西
說了自己寫的科學研究軟體,程式碼量1W以上寫了一堆報告其他的簡單一提
自我介紹的時候提到了自己喜歡玩遊戲(以前玩盜版,現在玩正版,steam50級以上,然後遊戲快100了)
(後端開發都是自學了一點,而且互娛不要python)
2、平常喜歡玩什麼遊戲啊?
最近一段時間科研,沒玩遊戲。以前喜歡玩薩爾達、黑魂、魔物獵人等
3、網易的遊戲玩過嗎?
陰陽師和爐石
4、聊聊爐石?
以前特別喜歡玩爐石,主要是喜歡開包包(面試官笑),為爐石花了很多錢,因為我喜歡一個遊戲就很願意支持他。爐石的優點在於它有競技性,而且也是打牌類的遊戲,所以本身有趣味性,而且每局有隨機性,這樣每一句的體驗不一樣。另外一點就是攢金幣開包,金幣多了開包後卡池更新,可以有新的構築,新的體驗。這樣每過一段時間都會新體驗,留住用戶,我本身也是喜歡緊張刺激的開包環節
5.三題,比較簡單,要寫測試用例
手撕成功,寫程式還是比較快的
第一題二分
python寫的編譯報錯,牛客網查不到錯在哪,我就趕緊c 重寫了一個
討論了二分的四個邊界條件
return st,en二種對應返回搜尋邊界,data[mid]<value和<=value,兩種對應二分上下界
共四種,接著說四種情況對應,每種的取值範圍回傳st,回傳的值範圍是0到陣列長度,回傳en,則是-1到陣列長度-1 st和en意義不一樣,這個最好自己寫寫理解一下(更新了一下lower_bound的理解,解釋了為什麼返回值範圍是0到len(data) PS:標準庫返回的是迭代器位置,是一個指針,我這裡從元素的位置概述。傳回數組大於等於value的第一個位置,假如數組中所有元素均小於value,返回尾部迭代器len(data),第一個元素大於等於value,返回0 (第一個元素大於等於value,則所有元素大於等於value,則返回0) 從定義看,這樣定義就不可能返回負1。 upper_bound回傳大於value的第一個位置。傳回的st情況-1 lower_bound :傳回大於等於value的第一個位置lower_bound_en:傳回小於value的第一個位置
upper_bound:回傳大於value的第一個位置upper_bound_en:傳回小於等於value的第一個位置1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2625 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 def lower_bound(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<= en): if data[mid]<value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return st def lower_bound_en(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while (st<=en): if data[mid]<value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return en def upper_bound(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<=value : st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return st def upper_bound_en(data,value): st = 0 en = len(data)-1 mid = st+((en-st)>>1) while(st<=en): if data[mid]<=value: st = mid 1 else: en = mid -1 mid = st+((en-st)>>1) return en
對比的數改成1。
) 然後說了C++演算法標準函式庫(lower_bound和upper_bound)用的哪兩種形式:回傳st的那兩種注意C++標準函式庫回傳的是指標第二題是二元樹的深度
python手撕,又報錯,然後無IDE查bug還好查到了,print大發好,對python,如果print(“XXX”)沒輸出東西就表示沒運行這一行。
定義樹class的時候寫的是.next,暈了,應該是.left和.right
第三題是數組旋轉
左旋轉,自信一波分析寫完是右旋轉,一臉懵逼,怎麼看都是左旋轉跑完就是右旋轉
然後再那試了試改i,j,然後第二次就輸出對了,暈,運氣比較好
由於循環用的常數限制,要求改成了數組的範圍,注意python len(data)是行len(data[0])是列
正常建構一個和data一樣大new數組是先列後行[[0 for _ in range(len(data[0])] for _ in range(len(data)]
然後循環是先行後列(這樣局部性更好,運行速度快,更容易緩存命中,當然面試官也沒問我也沒提)
寫法應該是對的,但我不敢改成行列不相等的情況,萬一錯了呢.PS:想了想應該不對,因為new數組我照著data開闢的,應該行列反過來開闢才對,先行後列構造的話剛好對應旋轉後的情況,幸好沒深究,不過這種bug很容易改,print()大法print一下就出來了
問問題:好希望他問我機器學習的東東,這樣我就能裝逼了,然而
6、靜態記憶體和動態記憶體?
講了static和堆疊是靜態,編譯的時候決定了大小,動態記憶體可以自由開闢->堆,也不知道對不對。 。
(回來問了問另一個收割大佬,應該是這樣)
7、堆是?
說了向上開闢,速度慢、運行時改,然後開闢的過程,鍊錶存著下一個位置和這一塊有沒有使用,如果沒找到就析構合併內存再找,再找不到返回null(可以參考前面的答案)
8、堆疊是?
說了向下開闢、速度快、編譯時分配、主要是存PC指針,然後函數入口參數多組成棧幀存進去等著恢復
9、malloc和new區別free和delete?
1.一個是函數(面試官沒問,但我自覺呀,誠實回答忘了是哪個頭文件裡的了,事後查了查是stdlib我擦我天天寫沒想到是這個)一個是關鍵字
2.malloc要算大小,返回void*(然後隨口提到void*可以轉XX *),強轉後按轉完後的類型用,要自己算大小;new的時候傳類型,就比如100個int ,然後直接開100個就好了,他自動把int長度算進去
3.malloc再堆上,new在自由存儲區(然後回答忘了自由存儲區再哪了) 講著講著忘了free和delete的事了
(自由存儲區和堆似乎是概念上的區別?我丟,深入理解計算機基礎是按C講的,我哪知道C++的自由存儲區和C的堆有啥區別呀,按理來說假如new是依賴malloc實作的,那麼他們不該開闢於同一塊區域麼。
網搜的答案:
自由儲存區是C++中透過new與delete動態分配和釋放物件的抽象概念,而堆(heap)是C語言和作業系統的術語,是作業系統維護的一塊動態分配記憶體。
new所申請的記憶體區域在C++中稱為自由儲存區。藉由堆實現的自由存儲,可以說new所申請的內存區域在堆上。
堆與自由儲存區還是有區別的,它們並非等價。
)
10.智慧指針了解不?
我從python的記憶體管理角度講了計數法析構內存,和智慧指標原理一致。但我自覺誠實的說出我沒用過智能指針
11.python怎麼解決循環引用的?
是不是想問我智慧指標的循環引用解法?我忘了呀,我就直說python本身解不了循環引用的問題(這實話實說,確實解不了,python又不是神,循環引用要靠自己析構,對python來說,循環引用的東西就算程序關了都還在),但python有個函式庫函數可以發現循環引用位置,然後呼叫垃圾收集器析構掉就好(其實就是定位記憶體洩露,然後gc把它幹掉)
12、計網了解不?電腦網路TCP和UDP的差別?
答自學。回答了很多,挺詳細了
(UDP主要用於那些對高速傳輸和即時性有較高要求的通訊或廣播通信,
TCP用於在傳輸層有必要實現可靠性傳輸的情況
1.TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,也就是在傳送資料之前不需要建立連線
2、TCP提供可靠的服務。也就是說,透過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3.TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向封包的;UDP沒有擁塞控制,因此網路出現壅塞不會使來源主機的發送速率降低(對即時應用很有用,如IP電話,即時視訊會議等)
4.每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通信
5.TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
這裡建議不是特別熟的回答首部設定不一樣,別說的太詳細。
6.TCP的邏輯通訊頻道是全雙工的可靠頻道,UDP則是不可靠頻道
)
13、長傳輸和短傳輸?
不知道
(是http的長連線和短連線嗎?HTTP1.1規定了預設保持長連線(HTTP),資料傳輸完成了保持TCP連線不斷開(不發RST包、不四次握手),等待在同網域下繼續用這個通道傳輸資料;相反的就是短連接。
14、作業系統呢?
回答自己看的深入理解電腦系統,看的很詳細,收穫了特別多
15、進程和執行緒?
程序不過一段文本,運行起來才是進程,一頓講,資源/調度單位啊、共享內存啊、並發啊XXXXXX
(見之前的答案)
16.你還有什麼問我?
問了兩個問題
一問:您能不能了解到其他面試人的信息,然後對著我教研室座位後面的字節大佬猛誇(因為他特別想去互娛做遊戲),一開始面試官還以為這個人掛了呢我想撈一手,一聽和我同時面了互娛就輕鬆了說既然這麼強一定能過面試,然後我就突然想到好像可以暗示一波,就說我和他報的都是廣州,我很想跟他當同事(強烈暗示)
二問:我說我是演算法工程師,機器學習特別厲害,平常工作內容是啥啊,機器學習這部分我都用上麼
求互娛給個開獎機會,教練我想做遊戲~(如果百度把我忘了的話),你敢讓我過我就敢去寧可別被我逮捕住了
負責360搜尋的部門,面試體驗很好。
忘了面試的一部分,因為連續4面,其中技術面360兩個,網易網路1個,hr面1面,非常之累。
1、介紹自己
2、介紹自己實現的科學研究軟體
用什麼語言:C++
什麼寫的介面:QT
3.LGB和XGB區別
一開始聽錯了以為是LSTM,我還在想LSTM和XGB的區別,這怎麼說,先介紹介紹XGB吧,然後說完XGB反應過來,面試官不是讓我說LGB吧。 。那就好說了,一頓講。
(答案前面有)
4.介紹CNN、卷積層如何實現非線性
使用激活層,不然在卷積都是線性變換。我從貓的視覺錐細胞開始一頓講,應該講的挺詳細了,CNN的時不變性真的很適合用於訊號處理。講了時不變和局部權值共享,說CNN是DNN的特例。
(
卷積:對影像(不同的資料視窗資料)和濾波矩陣(一組固定的權重)做內積操作。
卷積的重要的物理意義是:一個函數(如:單位響應)在另一個函數(如:輸入訊號)上的加權疊加。
卷積神經網路CNN是多層感知機(MLP)的變種。在1960年代,Hubel等在研究貓腦皮質時發現其獨特的網路結構可以有效地降低反饋神經網路的複雜性,繼而提出了CNN。
CNN:局部連接和共享權值的方式,減少了的權值的數量使得網路易於優化,另一方面降低了過擬合的風險。此優點在網路的輸入是多維影像時表現的更為明顯,使影像可以直接作為網路的輸入,避免了傳統辨識演算法中複雜的特徵提取和資料重建過程。在二維影像處理上有眾多優點。
CNN具有一些傳統技術所沒有的優點:良好的容錯能力、平行處理能力和自學習能力,可處理環境資訊複雜,背景知識不清楚,推理規則不明確情況下的問題,允許樣品有較大的缺損、畸變,運轉速度快,自適應性能好,具有較高的解析度。它是透過結構重組和減少權值將特徵抽取功能融合進多層感知器,並省略辨識前複雜的影像特徵抽取過程。
CNN的泛化能力要顯著優於其它方法,卷積神經網路已被應用於模式分類,物體偵測和物體辨識等方面。利用卷積神經網路建立模式分類器,將卷積神經網路作為通用的模式分類器,直接用於灰階影像。
)
5.卷積層pooling層怎麼放?啟動層放哪裡比較好,有什麼差別?
沒聽明白,不該是中間夾一個激活層嗎。面試官的pooling真的是一言難以呀?我一直以為是最後的全連結FC層,我心想這不是被全域池化取代了麼?不會所以一頓亂說?因為我自己也是改網路的時候,常常會嘗試層的位置交換,我都是哪個效果好用哪個。講的時候想起了何凱明大神的論文裡的預激活,然後對著預激活、卷積層在Resnet的作用一頓誇張。有會的大佬。請私聊教教我。 。 。
兩題
1、10進制轉K進制進制轉換
給定一個十進制數M,以及需要轉換的進制數N。將十進制數M轉換為N進制數輸入描述輸入為一行,M(32位元整數)、N(2 ≤ N ≤ 16),以空格隔開。 輸出描述為每個測試實例輸出轉換後的數,每個輸出佔一行。如果N大於9,則對應的數字規則參考16進位(例如,10用A表示,等等) 這題很簡單,發個自己的寫法,過一遍就好,挺簡單的。可能個別邊界會有問題,但是面試的時候盡量追求速度。 牛客網面試的時候,注意運行全部用例,可以看AC的情況,為什麼這麼說呢,因為你的輸入面試官看不見(他說的),所以他只能給你跑一下看過了多少例子。 像這種水題一定要寫得快。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 25 235 3 28 29 30 31 32 3 3438 30 3432 30 43 44 45 46 47 48 49 50 51 52 53
//map<int,char>table;
//table[0]='0';
//table[10]='A';
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void reverse(vector<int>&a)
{
int l = a.size();
for(int i=0;i<l/2; i)
{
int tmp = a[i];
a[i] = a[l-i-1];
a[l-i-1] = tmp;
}
}
string get(int M,int K)
{
bool ju = false;
if(M<0)
{
ju = true;
}
//注意负数转正数溢出
M=abs(M);
vector<int>data;
while(M)
{
data.push_back(M%K);
M/=K;
}
reverse(data);
string res = "";
if(ju)
res ='-';
for(int i=0;i<data.size();i )
{
if(data[i]<=9)
res ='0' data[i];
else
res ='A'-10 data[i];
}
return res;
}
int main()
{
int M=7,K=2;
cin>>M>>K;
string s = get(M,K);
cout<<s<<endl;
}
2、A->B,B->C,A->C,C->A中有一對鍊子A->C,C->A問序列裡有多少對鍊子使用哪一種資料結構?
要求:序列很長,只看直接相連,A->B->C->A 不算ABC互聯。
講了比較簡單的d[i][j]=(bool)的結構,O(N^2)的時間和空間複雜度
又講了兩次掃描,O(N^2)的時間複雜度,O(1)空間複雜度
最後說了數組+鍊錶,極端情況下時間複雜度也較高,但我心裡想的是對鍊錶排序也不慢吧,二分查找,時間空間都OK呀,但我傻就傻在我心裡想了,嘴上沒說鍊錶排序。
最後有會的大佬麼請教教我。 。
體驗好,一題,抽的前兩題都做過,一個是奇偶排序,一個是前序中序重建樹
都是劍指OFFer原題,面試官見我思路順暢,問我是不是做過,做過默寫就沒意思了。
我說做過劍指OFFer原題。 前兩題沒手寫。
第一道奇偶排序要求穩定排序,思路1就是歸併排序,前偶後奇為大於。思路2雙指針二分偶數倒
第二道找根節點,二分,沒了
第三道沒做過,但是也簡單,問面試官能不能用python,能的話兩分鐘結束這題,說不行就老實寫了
這一面主要是深挖項目,深挖!
反問環節,面試官瘋狂指導我,真好,這裡總結了記住的一部分:
聊了搜尋推薦的一些問題,我問的第一個是360對程式設計能力的要求。面試官的回答是所有的演算法工程師都要具備很強的程式設計能力。
第二個是推薦中排行榜的問題,我說上了排行榜,閱讀量就是瘋狂增加,一增加就會更留在排行榜上,這種情況怎麼辦。面試官回答這是正向回饋問題,說了很多乾貨,有興趣做推薦的可以看看相關內容。
我又問了冷啟動的問題,我就說對於新出現的頁面,第一次出現,沒有任何曝光下,如何給他做推薦呢?這裡面試官反問了我,我就回答了自己的思考,先小批次試爆,再推廣。
面試官開始講推薦和搜尋排序的區別,搜尋排序面臨的問題更複雜。所謂排序就是取得大數據的網頁介面,然後對使用者的查詢給出一個最可能的結果(LGB可用),用到一些分層、召回(最優可能查詢結果撈出來)、排序(對撈出來的東西排序),這裡排序要做到去相關性,查詢要保證輸出結果多樣性、表達多樣性,還牽扯到了詞與詞之間的緊密度、運作和相似度命中。
另外排序有很多困難,首先資料量更大,抓取資訊很多,但是索引不是越多越好,因為存在重複的(抄襲的網頁)、品質不高的網頁。另外對於learning to rank,我們不需要像迴歸那樣得到準確的迴歸值,只要得到他的偏序就好。例如A<B,我們算價值是A:80,B:79和A:80 B:77,偏序都一樣,只要排序正確即可。而要檢驗我們排序的好不好,就是根據回饋,檢驗模型的優劣,例如我們把A在B前面,但是用戶不點A點B,用戶改Quary詞或是翻頁,都可以用來檢驗模型效果。這三時候可能會用機率圖解決這些問題。排序技術難度大,底層需要的技術也比較高級。另外,用戶的詢問和我們的結果可能有一定的gap,例如用戶搜某車的標價,我們給的搜尋結果是某輛車的成交價,這就存在了gap。
最後我問了這麼一個問題,就是我在做學習強國的時候,查詢一個答案, 結果第一個是付費的,第二是是免費的,有限的時間裡查到的第一個結果讓我付費觀看,我就很生氣。這怎麼看待?面試官的回答也是很棒呀,所謂的搜尋排序最終就是給用戶滿意的結果,結果可能是多樣的,有的排版好內容豐富,有的排版差內容差,我們做的就是把最好的結果展示給使用者。對於搜尋排序,可能產業化的結果分成兩個,第一種是滿足需求的免費內容,特別用戶預期的結果。第二種可能是競價排序的結果,可能付費觀看,大部分用戶沒有付費的慾望覺得不好,少部分付費用戶可能也會特別喜歡,但無論如何,前者肯定也會在搜尋結果前列。
啊,面到最後沒時間了,面試官要我問問題,我就隨便問了兩個,然後不得不回360電話了,就說我有點事把視頻關了,本來面得挺好的,哭
其他的忘了,就記得兩題
第一道n的二進位表示中有1的個數
1 2 3 4 5 6 int re = 0; while(n) { re; n = n&(n-1); } 然後分析複雜度,最後提示下分析出來了log(1+n)
然後分析平均複雜度,我以為從1 到int_max的所有複雜度求平均。所以怎麼都分析不對。
最後才知道是每個的複雜度,暈,面試官告訴我是log前面的係數是0.5。
第二道:
1、建個鍊錶
2、列印鍊錶
3、反轉鍊錶
反轉鍊錶寫的不好,左右邊界各判斷了一次,正常情況下只判斷一次就好,但面試官說也OK,多做一次時間影響不大,結果正確就好。
4.排序鍊錶
做的是真難受,臭牛客,哼哼。寫錯個變數都指不出來,改bug改到頭禿。
排序鍊錶寫的是鍊錶快排,最後發現複雜度不是nlog(n),因為我L部分的尾部沒有指向mid(base),導致我最後寫了個找L部分的尾部,把這一步優化了就沒問題了,但是面試官說也行吧排序的結果不會錯。
最後問問題的時候,我一邊問一邊調試,最後終於把鍊錶快排調對了。然後和麵試官說我調出來了,就匆匆結束了這次面試,很難過。因為馬上360就是二面,我總不能為一面放棄二面把,這裡我情商不夠處理的不好,哎,難受。面試官人都蠻好的,都是我的問題。
面試經驗肯定是面的越多越豐富的,從最初樂鑫的筆試掛,到字節跳動筆試不會寫輸入流(第一題我本地1分鐘就A了,然後不會寫輸入流,試了15分鐘,然後寫了第4題,結果本地能過線上報編譯錯誤,我就很生氣了,何況這個輸入流更複雜我就直接放棄了)筆試直接掛,到現在面試一點也不緊張,可以和麵試官愉快吹牛逼了,所以說多點經歷也是挺好的(補充,這次字節筆試3.6/4,還可以)
##部分已掛的公司,吐槽一下: OPPO 履歷掛?顯示履歷過,沒有通知面試,可能原因是沒填內推碼,身邊的字節大佬也跟我一樣履歷掛。 。 。問了去面試的演算法同學面試題目嬰兒難度。 還有提前批沒過,但是履歷狀態還有,是已處理,不能再投遞。 。 。 VIVO 筆試掛。 。我真沒想到筆試還能掛,但VIVO SP給的還不錯,問的問題也不能說難?沒中獎呀難受很氣,想想要不要投步步高?三顧茅廬了要阿里內推掛(本來在池子裡,然後部門的那個人發郵件給你內推,內推完刷新界面掛,可能原因是我掃了內推連接,但是我一般是不選擇內推,想想阿里內推人也不容易,互相體諒吧) 還有一個不知道哪裡的公司掛了我簡歷,原因是簡歷是牛客上創建的,都不知道什麼時候創建的,簡歷上面很乾淨。 。
18-28 作者:工大菜雞連結:(https://www.nowcoder.com/discuss/295287)
18. 順豐sp和ihandy牛客專場:
開篇就是吐槽,我為什麼寫這篇?不是因為順豐面試有多難,而是順豐答應給我的二面,到現在都沒給。 。 。從8月1號順豐給了我人生中第一次公司面試到9月28號我結束秋招,在這段期間順豐不斷推遲二面時間,現在又給我推到了10月中旬,不得不說,順豐的hr還真是佛係呢。 ihandy這貨更狠,給我答應的一面到現在都沒兌現,每次打電話過去問hr,都是同一個回答:馬上幫您安排,然後我就繼續傻傻的等一兩個星期,循環往復。
1.自我介紹,為什麼轉行,你原來實驗室幹的什麼? :因為喜歡算(qian)法(duo),原來實驗室幹的導航導引與控制;
2.介紹比賽,做了哪些數據的清洗,數據增強的處理?作了哪些特徵?怎樣提取特徵的,為什麼會想到這個特徵呢? :balabala如實說,還說目前進入了複賽,正在復賽準備階段XXXXX啥的;
3.我看你比賽用到了xgboost和lightGBM,那說下XGboost原理:額…不會;
4.那說下LightGBM吧:咳咳,也不會;
4.額那說下GBDT總行了吧:額…還是不會;
5.那你會啥?我:LR。 (面試官快哭了TT);
6.那好吧那你說說LR吧:balabala;
7.你聽過CATboost嗎?我:沒。 (面試官再一次哭了);
8.說說LSTM的原理:balabala還口述了輸入門,更新門,輸出門的公式;
9.有什麼想了解順豐的嗎?我:X$Y*&^%(&%@1!2¥……;
我知道我答的很菜,但我還是厚著臉皮問了面試官我的表現咋樣,能否就我的面試情況和簡歷提點建議?後面每一次視訊面試我都會向面試官問這個問題,他們也都會熱心的給我提出建議,幫我修改履歷,收穫很多。
結果:沒想到一面給我過了,但二面遲遲不到。
19. 滴滴牛客sp專場(二面掛):
慚愧,當時在面試的時候還以為滴滴是小公司,問面試官問題的時候,我居然問了滴滴的業務存活情況……
1.自我介紹,轉行之類的問題;
2.了解那種演算法挑一種介紹下:我說了LR,剛才說到交叉熵這兒,面試官打斷:那你說說LR為什麼用交叉熵作為loss函數。我:因為lr從機率密度函數推導出來的對數極大似然函數就是交叉熵函數。面試官說:不全對,其實mse是萬能的loss函數,每個模型都可以用mse當loss函數的,那為什麼lr不用mse呢?我:不幾道。面試完了才想明白,mse的導數裡面有sigmoid函數的導數,而交叉熵導數裡面沒有sigmoid函數的導數,sigmoid的導數的最大值為0.25,更新資料時太慢了;
3.說說XGB:在上次順豐面完後,我仔細學習了一遍xgb,這次大致回答上了面試官的問題,我說了GBDT,再從XGB是如何改進GBDT的角度引入了XGB的一些概念,像是預先排序什麼的,引入正規項和二階泰勒展開什麼的;
4.介紹比賽,介紹如何分工的,如何建構特徵的,如何選擇這些特徵的;
5.說下常見的處理過擬合手段有哪些?我說了l1,l2,神經網路裡的dropout,增加數據量等等,面試官問還有嗎?我:不知道了。其實後來才知道bagging和boosting也是降低過擬合的手段,以前還以為只是種特殊的模型。
同樣向面試官問了我的表現情況以及如何改進,面試官也熱心的提出了建議。
1.自我介紹,大致介紹項目。
2.聊比賽,聊人生。 。 。 。 。大概聊了30多分鐘。
3.問你會不會什麼作業系統,資料庫啥的,c++會不會。答:都不會
二面很自然的就掛了,從滴滴的面試可以看出,其實國內的很多公司都挺看中開發能力的,只會python和跑跑模型應該達不到絕大多數公司的要求。
20.快手牛客sp專場(二面掛)
1.基礎問題都是老生常談,問題和回答略了
2.演算法題:求最長回文子字串,leetcode原題,動態規劃解得最好,但我當時不會,用的是中心展開法,勉強做了出來。
1.上來一一leetcode上的hard演算法題目:求最小編輯距離。不會,直接gg
2.其他閒聊,聊人生
大概等了10多天,官網上掛了
21.依圖(一面掛)
是我最慘的一次面試,面試官笑瞇瞇的,也沒讓我自我介紹,上來四到算法題,一道一道來的那種,題目都忘了,只記得每道都把我摁在地上摩擦,差不多情況就是這樣:
面試官:出道演算法題吧,第一道:XXXX。
我思索10分鐘:不會;
面試官:那我們做第二道:XXXX。
我又思索10分鐘:不會……;
面試官:那再來一道:XXXX。
我尋思我都這麼慘了放過我讓我走吧求你了,於是思索了兩分鐘說:還是不會……;
面試官:那再來一道:XXXX。
我:gun!
後來視訊面試結束的時候,我專門去查了這幾道題目,他們都有一個統一的解法,那就是動態規劃,抱歉我之前真沒聽過動態規劃啊啊啊啊啊,我從此下定決心,進行dp的專案練習。
22.騰訊(一面掛,好後悔沒有抓住唯一一次進鵝廠的機會)
其實面試官問的問題都很簡單,但是當時比賽剛做完,非常疲憊,不想學習,沒有學習新的東西,也沒複習舊的東西,就這樣躺屍了兩天,然後騰訊的技術面試官晚上打電話面試:
1.自我介紹,介紹比賽
2.看你用到了樸素貝葉斯,說下原理吧。我心想這還不簡單,剛要張嘴,才發現壞了,啥叫樸素貝葉斯來著?我給忘了!我對支支吾吾的說:用了貝葉斯公式,然後加上了觀測獨立假設,面試官無語…
3.說下xgb,lgb和gbdt吧。這個我會,由於前面問了很多了,不用複習也能張口就來。
4.我看你的另一場比賽用了bert和CRF,說說CRF的原理。我:……不會(後悔沒看)
5.那說下bert的原理吧。我:……還是不會(好後悔啊,太懶了,還是沒看)
後面balabala的問了一堆,我都回答上了,但前面這幾個沒回答上的太傷了,一面掛
23.遠景(四面掛,boss面掛的,真是掛的莫名其妙…)
都是隨便介紹項目,問一些基礎的問題,沒啥難的,印象深刻的是二面面試官問到最後突然讓我用英文介紹下比賽裡面是如何選擇特徵的,我用我的工地散裝英語一頓亂說,結束時面試官說嗯很不錯,我內心:靠,你壓根就沒聽吧!
四面是boss面,現場面的,聊人生,跟我聊了一個半小時,全程也穿插問些問題,我都回答上了,跟boss聊得非常好,然後就給我莫名其妙的掛了… ,我想原因應該是boss臨走前給我說了一句:你需要多注重工程能力。他可能嫌我工程項目很少吧。
24.百度(一面掛)
百度的筆試就令人印象深刻:
選擇題啥都考,很雜,作業系統,資料庫,c++,python,機器學習,深度學習啥都考
兩道問答題,其中有一個問題印象深刻:說說針對中文,BERT有什麼可以改進的地方。我心想:你丫不就是想吹自己的ERNIE嘛,我就寫了ERNIE針對BERT所做的改進,基於知識的mask訓練方式,基於知識圖譜的改進等等
一道設計題,讓你設計一個系統:可以寫出春聯,必須滿足他的要求,平仄音節都要對上,我直接BERT+CRF+GPT一頓亂寫。
程式設計問題:RGB括號,我猜應該是道dp題吧,連結:https://www.nowcoder.com/discuss/254095
想看的童鞋可以看一看,無視我的答案就好,我到現在都不知道我的答案對不對。
1.紅黑樹的幾個特點。只答上兩個,其實我根本不會
2.python的裝飾器@的用法。不會
3.編程,寫一個函數,實現python的繼承,資料的交換,類別中的全域變數等等。寫上了一半。
4.快排(不能用簡單粗暴的那種,要空間複雜度最低的)和堆排序(必須用最小堆實現)。不是讓你寫程式碼,而是給你一個數組,直接讓你用快排和堆排的思想直接一個元素一個元素的演示給他看,這個我答上了,幸好之前自己實現過弄懂了。
5.演算法題dp兩道:最長公共子串,最長公共子列,都是dp題,幸好專門看了九章演算法,專題學習了dp,簡單或者中等的dp題還是可以一戰的,這兩道也是lintcode上的原題,有興趣的童鞋可以查。
6.介紹xgb,我說到「xgb的預排序是相對於暴力解的加速」這兒,面試官打斷了我,反問我:那具體是為什麼加速了呢?一個特徵下的數據,沒有預排序和預排序了,不都得遍歷一遍才能求解出最優分裂點嗎?
這個問題給我乾蒙了,其實這個問題我之前思考過,但是太懶了,心裡不斷麻醉自己面試官不會問得這麼細,就直接忽略了,沒再去想。百度面試完以後看了原論文的偽代碼才明白為什麼。所以再次建議盡量能讀原paper。
7.介紹下xgb是如何調參的,哪一個先調,哪一個後調,為什麼?哪幾個單獨調,哪幾個放在一組調,為什麼?哪些是處理過擬合的,哪些是增加模型複雜度的,為什麼?我尋思你十萬個為什麼?總之就是被為什麼問的頭昏腦漲,出了門就知道肯定掛了。
25.搜狗(面試流程結束)
1.lr為什麼用sigmoid函數作為機率函數。我:lr是基於伯努利分佈為假設的,伯努利分佈的指數形式就是sigmoid函數,而且sigmoid函數可以將資料壓縮到0-1內,以便表示機率。
2.介紹下word2vec,說說word2vec和fasttext的差別。我:balabalabala,說的看起來還行,面試官點頭
3.印象深刻的推導:
推導下word2vec裡面的一個模型CBOW吧。後悔沒看,哭了,我說不會。
那推導下SVM吧。這個我會,推出來了,但是到對偶條件這裡,面試官問為什麼能用對偶條件,我沒答上來,還是太菜。
那再推下lr吧。這次順利的推了出來,面試官問的問題也回答了上來。順利通過了。
4.演算法題:求最長回文子串,沒錯,和前面快手一面問的筆試題一樣,答上了。
5.機率題,嚴格來說,這題不是我遇見的,是我同學面搜狗的時候被問到的,我覺得很有意思,而且我們都不知道答案,請大佬解答:
總共54張撲克牌,我抽了幾張牌(大於2張),有兩種場景: 1. 我說我有小王;2. 我說我有大王;這兩種情況,哪一種有雙王的機率更高?
這題我是一臉懵逼的,求各位大佬解答!
2.搜狗二面:
1.xgb的loss函數的推導(mse以及非mse形式),以及求解推導。
推出來了;
2.求最大連續子列和,要求時間空間複雜度最小。
很簡單;
3.xgb是如何實現並行的。
保存預先排序的block,用進程間的通訊並行尋找最優分裂點。
4.lgb的直方圖最佳化演算法說說。
隨便說了說,面試官也沒深問。
5.講比賽,講項目。
balabalabal總之二面持續了差不多一小時
沒啥好講的,聊人生,聊轉行,hr說需要綜合各地的資訊來篩選,讓我回去等消息。
26.OPPO(offer)
我整個秋招所經歷的所有面試官裡面,一共面了三個非常有水平的面試官(我個人覺得):一個是遠景的那個boss,微軟亞研院呆了四年,百度呆了六年,google待了六年。和我聊現在的產業情勢以及各種模型的應用,很多問題都會直擊要害,一語中的。和我的聊天中看出了我工程能力不足,跟我聊了一個半小時,為我未來提出了一些建議和規劃,我很感謝那位大叔;第二個是百度的一面面試官,他好像就是住在我肚子裡的蛔蟲一樣,總是能在我的回答中揪出我不會的致命知識點,給我痛擊,真的是怕啥他考啥,他的基礎非常紮實,而且反應和判斷非常迅速;第三個就是這個oppo的一面面試官,根本不問固定知識點,就問一些模型、手段、措施背後的本質並且舉例說明,在你運用的實際場景中有沒有見過。
剛開始都沒讓我自我介紹,直接讓我說比賽。我:balabala,我介紹到CRF的時候,面試官打斷我說:「你說CRF說了一大堆,那他它本質是個啥東西,我不要聽那些定義,你給我說本質」。我:……支支吾吾……,說它應該是函數,balabalaba一頓編。
然後他也沒說對錯,繼續問:說下attention吧,我:又是一頓balabala,講到注意力那兒的時候他問:你能舉個case嗎,用了attention和沒用attention時候的對應的隱狀態在哪些地方有差別你有去觀察嗎?我:又是一頓瞎bala,他又沒說對還是錯。
又問我看你這裡用到bilstm它和lstm的差別在哪?舉例說明,用了和沒用的效果。我心想:哎呦終於有個會的了,結果回答完他還是那副樣子,又是啥也沒說,我心想對還是錯你倒是給個準信啊。
又問到了ELMo,讓我說明ELMo是如何做到動態字向量的。我:把每個字輸入模型,得到的隱狀態相加就能得到不同的詞向量;
面試官:那說下ELMo的缺點。我說:第一就是多層bilstm天生的缺點:「自己看見自己」的現象,然後舉了個例子,balabala…。第二就是無法並行訓練,以上兩個毛病都可以用bert來改進它;
他又問其實我們可以用加入位置嵌入的方式來改進這個無法並行的問題那為什麼非得用bert呢?我一想確實facebook貌似在之前就提出了位置嵌入+textcnn的方式來並行訓練。完了,給自己挖個坑了。於是乎我就扯了一堆bert裡面self-attention的優點,哈哈哈我真是機智。
然後他依舊啥也沒說,又讓我介紹bert,並且問了multi-head的好處,又問我它的實際物理意義是什麼?為什麼能這麼想?舉個case說明下。我用盡了我畢生瞎編的本事,憑藉著我自己的一點理解硬是說了10分鐘,然後結束了是對是錯他還是啥也沒說……………………
又讓我寫LSTM的公式,勉強寫上了
又問了我一個實際場景問題:用一個模型去分類一堆數據,在training階段就無法收斂,反覆震盪,有可能是什麼原因,你有沒有在實際場景中遇見過?
我:可能數據是標註錯誤的或是隨機數據,面試官補刀:假設數據沒問題,那是什麼原因?
我:那就是模型無法擬合這個數據或不適合做這類數據的分類,面試官再補刀:假設模型也沒問題,夠複雜。
我:那有可能是優化過程陷入了局部最優,而且一直無法跳出,面試官再次補刀:假如優化過程沒問題。
我:那就是正負樣本極度不均,網路沒辦法學到東西?面試官:我沒說一定是神經網路模型,而且那再假如樣本正負分佈是均勻的…
我:……那我真沒遇見過這樣的……
面試官當時看起來不太滿意,跟我聊完居然把我的履歷給對折了起來!我第一次見這種場面……,心想:哎呦我去涼了,可能一出門面試官就會把我的履歷丟垃圾桶裡了吧……。面試官要我回去等,晚上如果收到消息就過了,沒收到就掛了。晚上感覺想哭,畢竟OPPO是我蠻喜歡的一個公司,結果快睡著了突然來了一個短信提醒,說我OPPO面試過了……,得,這下倒好,睡不著了……
1.聊聊項目比賽,一路下來沒問啥知識點,沒啥大問題
2.畫出ESIM這個模型的結構,並作介紹
3.面試官看我航太二院的專案跟飛彈攔截有關係,是用GRNN預報彈道的,就讓我介紹下GRNN的網路結構以及原理,還問預報精度怎麼樣。我說這個題目現在是我的畢設,還沒做完呢…
面試官:喔…那你給我說說你要攔截的這個HTV-2是個啥?
我說:是一種美國的臨近空間高超音波速飛行器,可用於飛彈上,對我國國防安全造成威脅,balabalabala…
面試官好像突然來了興趣,一直問我飛彈的事,跟個好奇寶寶一樣:這個HTV-2很厲害嗎?
我:點頭,嗯嗯嗯
面試官:這個HTV-2有啥特質?你們用經典的方法一般是咋攔截的? balabala…
我:額……這些都是保密的……
面試官:哦,那沒事了。
4.聊到後面問我有沒有了解過一些其他的搜尋排序演算法,像是list-wise的,pair-wise的,然後給你一堆非常大的大數據,如何實現全數據的搜尋排序,我憑藉我的理解大致回答了一些,面試官說還不錯,讓我等下一面
我拿起我的oppo find x給hr一頓瞎BB,意向書成功到手,雖然是白菜價,但是OPPO是我很想去的一家公司,尤其是近年來開始搞些奇奇怪怪的手機出來以後越想去了- . -。
我原以為一面二面回答的不太好的情況下OPPO也願意要我,而且hr說今年OPPO機器學習投遞的簡歷,光篩選後的985計算機科班碩士的就多的嚇人,所以我感覺OPPO今年應該在機器學習這個崗位上招人需求很多。沒想到簽約會時候問hr才得知整個哈爾濱加吉林地區,機器學習的offer只有兩個…,瞬間脊背發涼…
27.58同城(口頭意向,拒了)
其實我能面試58我是非常意外的,因為58的筆試程式設計題我一道都沒做出來,選擇題差不多一半都是瞎猜的,甚至面試的時候,面試官還把我做錯的選擇題拿出來又問了我一遍,我還是答錯了……囧,而且三個面試官都問了我:為什麼程式設計題沒做? …好尷尬,太奇怪了! ? 58怎麼會給我面試呢?不過面試時我表現的還不錯,最後也拿到了口頭意向,但已經簽了OPPO就給拒了。
1.還是各種介紹,自我介紹,比賽,項目,為什麼轉行啥的。
2.我看你用了ESIM這個模型,把模型結構畫一下,並且告訴我為什麼有用。很簡單。
3.演算法題:一個數組中和為k的所有二元組,要求時間複雜度為O(n)。這個也很簡單。
4.介紹下BERT以及CRF。老生常談了,他也沒深問。
5.演算法題:最小編輯距離,沒錯又一次被問到了,dp常規思路,只不過需要多考慮邊界條件。完美解決。
6.算法題:一塊錢一瓶水,三個瓶蓋能換一瓶水,問20塊最多能買多少瓶水? (用程式設計方法解決。)面試官午餐沒吃,餓的等不及了,我剛想了一分鐘還沒寫出來,面試官說一面就到這兒吧,我以為他要把我掛了,趕快急急地說了思路,面試官說沒事你一面過了,走去吃飯吧,噗.......
2.58二面:
二面大多時候都是我在問面試官,一時間搞不清楚誰才是真面試官……問了些58的業務,以及業務中需要的模型,演算法等等的。聊得很開心,當然也有些坑,面試官會穿插著問些技術問題,比如在談到58的軟體內搜尋業務的時候,面試官問如何在少量數據的情況下對用戶的輸入進行快速的意圖識別。我說了幾條:可以用資訊熵來決定使用者輸入主體,用聚類來做一些簡單的意圖辨識等等。
3.58hr面:
一個很漂亮的大姊,很親和,又是聊人生,結束後叫我回去等通知。
28.華為(offer,拒了)
我申請的是華為消費者bg軟體部門的人工智慧工程師,自然語言處理/語音處理方向。我聽說今年很難進華為,想進消費者更是難上加難,但是我仍然沒感覺到有多難進……可能華為比較看重課業成績和學歷吧,因為我感覺我只有這個優勢… …
上來兩到演算法題,不過都是很簡單的leetcode原題,題目我給忘了,但是都答上了。但我覺得面試難度看臉,有同學就被甩了兩道dp題沒答上來一面就掛了。
問的問題都很基礎,知識點都是前面的那些,沒有什麼印象深刻的問題。
演算法題:求一個數組中和為k的最長連續數組,暴力法解決的,面試官說沒有複雜度要求。
問了槽位的概念,這個我之前真沒聽過,哎,還是太菜了。
問了一些其他的基礎問題
聊人生,聊規劃,圓滿結束,offer到手,簽約會的時候,hr說給我安排到北京了,我不太想去北京,而且薪資也不高(我聽到的消費者的同學都一個均價,什麼硬體研究院、智慧車、無線的均價都比消費者高),而且最重要的是,他把我安排到了消費者軟體部下的智慧城市這個三級部門,大機率是語音方向的,我不是特別喜歡,就給拒了。
約定電面晚上8點半(阿里是加班到9、10點的節奏?)
主要是商湯無人車實習的項目,問我比baseline提升15個點,怎麼來的。
從資料迭代、backbone、模型修改幾個層面上說了下。
挑一兩個有趣的優化說說,說了cascade、hdcnn的結構,為什麼要用這個結構。
專案中出現什麼狀況,怎麼解決的?主要是說小目標偵測的解決方案。
對caffe源碼熟悉程度。 (我扯了扯原始碼的底層設計模式,資料流怎麼流的,如何加入新層、cuda程式碼的細節)
開放題
給了一個情景,如何訓練模型、調優。 (題目很空,主要考察你對深度學習的理解)
根據需求(前向傳播時間、模型大小),決定模型與基礎網絡,跑第一版模型。 (舉了個栗子) 判斷模型是否出現過擬合的情況,來決定下一步的最佳化方向。 結果分析(confusionMatrix等),分析問題,將論文中的方法套上去,如果沒有自己創造。 (又舉了個栗子)
softmax、多個logistic的各自的優勢? 1.類別數爆炸,2、推了下softmax反向傳播的公式,來比較兩者的優劣。
演算法(走流程題) 字串判斷是否為ipv4,c++。 (可能是時間不多了,大佬想下班了)
全程大多都是我在說,沒有太多互動。後來經過源神@邢源建議,還是要故意給面試官漏點馬腳讓他們來懟我們,然後再懟回去,並說明不這麼做的原因,不然不好拿高評分。 (臥槽,真的是套路深啊~)
大佬似乎涉獵很廣泛,對每個領域都很熟悉,基本上履歷中的許多細節,他都能找到點懟我。 (聊了很久)
項目是從頭到尾懟到尾,主要考察對項目、深度學習的理解。
大佬對我的trickList很有興趣,我猜他現在做的工作和我的很相似。
Anchor大小、長寬比選取?我說了業界常用的方法(YOLO9000中的方法),並提了一個更優的方法。
為什麼要深層、淺層featureMap concat?提了點細節和我踩的坑,需要數量級上的調整,不然深層的feature可能會被壓制。
Cascade的思想? 說了下我的摸索的一個過程。改變樣本分佈,困難樣本挖掘,能達到比較好的效果。
文字辨識使用ctc loss的一些細節。
設計一個情景,傾斜字體偵測,問我有什麼好的想法? (我覺得應該是他現在遇到的問題)
資料增強,加入形變擾動。
非end-to-end版本:分別訓練檢測和分類,舉了之前做過的一個文字辨識的項目的實現。
end-to-end版本:加入仿射變換學習因子,學習字體傾斜的角度與形變。
在商湯發論文了嗎?
沒有,正在攢,項目比較重,但有一些work和insight,講了下思路。 (大佬聽的很認真,貌似被我的故事打動了[摀臉])
為啥要換實習?日常吹水。
評價:大佬主動評價我對模型理解挺好的,工作做的挺深的,說等下一面吧。
體會:二面面試官說話很快,思維比較敏捷,覺得和這種人討論問題很歡暢,如果一起工作會很讚。
以後面試說話語速應該快一些,讓人覺得思考比較敏捷,這個可能會有加分項吧。
大佬應該是搞backbone模型優化的,問了我怎麼迭代基礎網路的版本的,日常扯論文,自己的實驗結果和理解。
前兩個卷積層通道數不用很多,主要是提取邊緣、顏色訊息,少量的捲積核足矣。
skip connection有什麼好處?推了下反向傳播公式,根據鍊式法則,梯度可以直接作用於淺層網路。
初始學習率怎麼設?這個我真的沒有總結過,只是說一般使用0.01~0.1。
mobileNet、shufflenet的原理?說了下原理。
為什麼mobileNet在理論上速度很快,工程上並沒有特別大的提升?先說了卷積源碼上的實現,兩個超大矩陣相乘,可能是group操作,是一些零散的捲積操作,速度會慢。
大佬覺得不滿意,說應該從記憶體上去考慮。申請空間?確實不太清楚。
問我看過哪些前沿的論文?說了說最近兩個月的優質的論文。
扯到了tripleLoss,大佬問樣本怎麼選?隨機,然後就被大佬嫌棄了。裝逼失敗,這塊確實沒怎麼深入研究。
為什麼用multiLoss?多loss權重如何選?訓練普通的模型使其收斂,印出反向傳播梯度的大小,這表示該task的難度,以此作為loss的權重,然後我補充說了下可以搞一個動態的loss權重,根據一段時間窗口來決定loss的權重。
凸優化了解嗎?牛頓法、SGD、最小平方法,各自的優勢。
凸優化其他東西呢?我說只有一些零散的知識點的記憶,純數學,沒有很有系統的研究。 (面試官貌似數學功底很好,只能認慫)。
感覺有點虛,我嘗試著往我會的地方引[摀臉]。 工程上如何對卷積操作進行最佳化?答:傅立葉模擬卷積。大佬不滿意,說那是cudnn早就實現的,還有什麼優化嗎? (確實不知道,甩鍋給工程組)
樣本不均衡怎麼處理?一個batch類別均等採樣,修改loss對不同樣本的權重。
三面面試官懂得不少,不過最後還是過了,有時間凸優化還是要係統整理下。
大佬應該不是做深度學習的,應該是機器學習那塊的。交流中能感覺出來對這塊不是很熟。挑他不會的玩命說,至少讓他看到我的工作量。
SVM的KTT條件?說了說,說到SMO實在說不下去了。
GBDT和randomForest差別?原理角度,方差、偏差角度,過度擬合角度,談了談之前打阿里天池的一些經驗吧。
GBDT和xgboost差別?演算法上工程上的優化,面試前專門看了,總結的不錯,知乎,更多細節可以看看陳天奇的論文,我沒看過[摀臉],做機器學習的小伙伴最好看看。
求和接近於target的連續子數組。 (lintcode上有類似的題目)
最後說讓後面應該還有hr面。