1. 程式人生 > >百度視覺技術部實習生面試2018-09-29-16:00

百度視覺技術部實習生面試2018-09-29-16:00

一、總記

今天20180929下午16:00,人生第一次演算法崗面試。昨天下午看到百度之星開發者大賽群裡的通知,跟往常一樣丟了個簡歷過去。記得騰訊演算法大賽後被call了兩次,發郵件告知我有綠色通道,我發了簡歷過去就石沉大海了。這次很意外,29號中午接到了面試通知,此時只有兩個小時的準備時間,有點方。

二、準備工作

1、趕緊把課題錄音和ppt找出來開始記筆記。

包括:CPCD、資料集標記方法、densenet原理。

2、吳恩達《深度學習》筆記。

三、面試流程

1、學校專業、個人基本資訊:

這就很尷尬了,我這個醫學生不知道怎麼樣才能讓面試官相信我不是來玩的。我就解釋,我是中山醫學院負責建模方向的研一學生,做的事情跟計算機系的學生一樣。本科是學醫的。面試官好像聽出來了我在極力說明我真的是認真的,讓我不要緊張。

2、根據簡歷問一些做過的專案和比賽:

(1)首先是演算法比賽了。我重點介紹了一下騰訊廣告演算法大賽,這是我真正入演算法坑第一次比賽。然後介紹了下清華的課題。我就以QA形式寫一下這部分的面試問題吧。

①騰訊演算法大賽

1)這個比賽的任務是:預測使用者廣告點選率。

2)資料量:幾千萬條,一共16個g的資料。

3)特徵工程:單值離散型變數用了onehot,多值離散型變數用了countvector,單值連續型變數未作處理。自己又做了一些組合特徵和計數特徵。Onehot後會維度爆炸,因為每一列的離散型變數有很多,onehot後有幾個離散型變數就擴增了多少列,特徵維度就爆炸了。

進行了labelcoder。

4)模型:初賽使用lgb和xgb,複賽使用了ffm和nn。

5)Lgb和xgb的區別:沒答上來,我說的是lgb的分裂節點多。大佬說lgb最強的地方是通過直方圖找分裂點,lgb靠葉子,xgb靠深度。

6)Ffm是什麼:因子分解機,具體原理不知道。

②課題

1)這個課題的任務:影像組學預測肝癌mvi風險。

2)資料預處理:使用張量演算法把一個圖片分成三維,取前x階特徵放入網路

3)資料集:訓練集中抽取平衡的正例和負例,可放回的抽。

4)模型:densenet。

5)框架:tensorflow。還知道什麼深度學習框架:tf、paddlepaddle、caffe。

6)對tf瞭解多少:原理。卷積核、池化、全連線。

7)介紹下CPCD具體引數:我說我借用的已有的演算法,具體分解過程不太明白。

8)CPCD處理後輸入網路的是什麼:這一組的前x階特徵,就是前x階特徵畫素點,包含腫瘤區域,感覺我是亂說的。

9)輸入的解析度:不會。

10)我是負責哪一塊的:densenet調網路,準確率達到70%。

11)還有其他特徵處理麼:加入臨床特徵,把圖片輸出當做特徵和臨床特徵一起輸入lgb。

(2)其他跟影象識別相關的專案。我說本科做過微控制器stm32影象識別。

①電賽做的板球系統

1)任務:使用stm32攝像頭識別小球位置來控制板子運動,讓小球達到指定位置。

2)演算法:直接用原始碼改。因為有相應介面,呼叫就行。Opencv?不知道。C語言寫的。(要涼)

3、程式語言的考察

1)習慣用什麼語言:python。

2)常見的啟用函式:relu、tanh、leaky、sigmoid

3)Python的資料型別:array、list、tuple、dataframe、series(感覺我是亂說的)。

4)List和tuple的區別:我只記得tuple是小括號。後來查是tuple不能改,list能改。一直不懂tuple,終於撞槍口了。

5)梯度消失、梯度爆炸怎麼理解和解決:因為啟用函式權重的引數更新,如果權重比1大一點點,指數迭代後,權重過大就梯度爆炸;如果權重比1小一點點,指數迭代後,權重過小就梯度消失。解決方法:不會。

6)Batch_normalization怎麼理解和解決方法:開始以為是正則化,回答成了L2正則化是歐幾里得函式,然後面試官說這是批歸一化。我就不知道了。

7)會C語言麼:會,stm32就是c語言寫。

8)瞭解kmeans麼:只知道是聚類,不記得咋用了。。

9)實習時間:都行。

4、現場寫程式碼

1)Xcoder互動介面

2)趕緊聯絡澤喵外援,一下就懵逼了。給了十分鐘,後來差不多到時間了,老師說他手機沒電了,我也就基本上寫了一半多。

3)題目:(其實後來發現是LeetCode簡單題541題)

Given a string and an integer k, you need
to reverse the first k characters for every 2k characters counting from the
start of the string. If there are less than k characters left, reverse all of
them. If there are less than 2k but greater than or equal to k characters, then
reverse the first k characters and left the other as original.

Example:
Input: s = “abcdefg”, k = 2
Output: “bacdfeg”

Restrictions:
The string consists of lower English
letters only.
Length of the given string and k will in
the range [1, 10000]

4)互動介面的解答:

def string_reverse(s, k):

  leng_string = len(s)

  num_every2k = math.ceil(leng_string / (2*k))

  result = ""

  for i in range(num_every2k):

    idx_start = 2 * k * i

    if idx_start <= leng_string:

        result += s[idx_start:(idx_start+k)][::-1]

        result += s[(idx_start+k):(idx_start+2*k)]

     elif idx_start - k > leng_string:

        result += s[(idx_start-2*k):][::-1]

     else:

        result += s[idx_start-2*k:(idx_start-k)][::-1]

        result += s[idx_start-k:]

   return result

四、後記

1、面試持續了一個半小時,16:00-17:30,電話和微信語音。我全程想看看筆記卻找不到,真的是每個步驟都必須親力親為才能波瀾不驚。

2、感受和建議就是:

(1)自己做的東西,參與的比賽要搞懂每一個細節,不要怕慢,一定要搞懂。什麼叫懂?就是原理理論不會忘,隨時能給別人講出來,程式碼會實現。

(2)廣泛涉獵,你看的每一個細節都可能成為你回答問題的點。

(3)刷題:現場寫程式碼說好的一般都是LeetCode抽題呢!弄懂原理隨時會寫,達到import ABCD的水平就好。

3、不在意結果,有這次機會已經彌足珍貴。也謝謝澤喵助攻。未來會更努力。