機器學習面試問題彙總

weixin_30924079發表於2020-04-04

虛擬碼實現:LR、梯度下降、最小二乘、KNN、Kmeans;

LR,SVM,XGBOOST推公式(手推)

LR,SVM,RF,KNN,EM,Adaboost,PageRank,GBDT,Xgboost,HMM,DNN,推薦演算法,聚類演算法,等等機器學習領域的演算法

基本知識:

1)監督與非監督區別;

是否有監督(supervised),就看輸入資料是否有標籤(label)。輸入資料有標籤,則為有監督學習,沒標籤則為無監督學習。

半監督學習:綜合利用有類標的資料和沒有類標的資料,來生成合適的分類函式。利用少量標註樣本和大量未標註樣本進行機器學習,從概率學習角度可理解為研究如何利用訓練樣本的輸入邊緣概率 P( x )和條件輸出概率P ( y | x )的聯絡設計具有良好效能的分類器。

2)L1L2區別;

(核心:L2對大數,對outlier離群點更敏感!)

下降速度:最小化權值引數L1比L2變化的快

模型空間的限制:L1會產生稀疏 L2不會。

L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。

3)生成模型和判別模型區別 像貝葉斯,lda 等就是生成模型,計算過概率分佈之類的

監督學習分為生成模型和判別模型。

生成模型:由資料學習聯合概率分佈,然後求出條件概率分佈作為預測的模型。給定x產生出y的生成關係。

eg:樸素貝葉斯、隱馬爾科夫

判別模型:由資料直接學習決策函式或者條件概率分佈作為預測模型。給定x應該預測什麼樣的輸出y。

eg:KNN、感知機、決策樹、邏輯斯蒂迴歸、最大熵、svm、提升方法、條件隨機場

演算法的優缺點以及相應解決方案:k-means, KNN, apriori

演算法原理:LR、KNN、k-means、apriori、ID3(C45,CART)、SVM、神經網路,協同過濾,em演算法

常見問題:

1)svm演算法的原理、如何組織訓練資料、如何調節懲罰因子、如何防止過擬合、svm的泛化能力、增量學習

1、間隔最大的分離超平面

2、min 2/|w| st yi(wi+b)>=1

3、拉格朗日乘子法算凸二次規劃

對偶 max(a)min(w,b)L(w,b,a)

w b

4、f=sign(wx+b)

C間隔(C>0)-間隔越大 錯誤分類懲罰大 間隔越小 對錯誤分類懲罰小

調整C正則化特徵

泛化能力強

2)神經網路引數相關。比如,引數的範圍?如何防止過擬合?隱藏層點的個數多了怎樣少了怎樣?什麼情況下引數是負數?

初始權重 -0.5-0.5 0-1

隱藏節點個數

傳輸函式

學習速率(太大不穩定 太小太慢)

減少隱藏節點個數

多了過擬合

不起作用??

3)為什麼要用邏輯迴歸?

邏輯迴歸的優點:

1.實現簡單

2.分類計算量小速度快,儲存資源低

缺點:

1、容易欠擬合,一般準確度不太高

2、只能處理兩分類問題(在此基礎上衍生出來的softmax可以用於多分類),且必須線性可分;

4)決策樹演算法是按什麼來進行分類的?

ID3 資訊增益

C4.5 資訊增益率

CART 基尼係數(二叉樹)

5) 樸素貝葉斯公式

P(Y|X)=P(X,Y)/P(X)=(P(X|Y)*P(Y))/P(X) –通過樸素貝葉斯條件獨立展開

P(A|B)=P(B|A)*P(A)/P(B)

對於給出的待分類項,求解在此項出現的條件下各個目標類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別

7)svm中rbf核函式與高斯核函式的比較

在SVM的應用中,徑向基函式就是指高斯核函式;

exp(-(x-c)^2/r^2) r方差c均值 svm裡面 c為xj

8)說一下SVM的實現和運用過程

見上

10)簡單說說決策樹分析

特徵選擇、生成樹、剪枝 if-then規則

12)SVM有哪些優勢,(x,y,z)三個特徵如何用徑向基核函式抽取第四維特徵

SVM演算法優點:

可用於線性/非線性分類,也可以用於迴歸;

低泛化誤差;

容易解釋;

缺點:

對引數和核函式的選擇比較敏感

原始的SVM只比較擅長處理二分類問題

14)如何用Logic regression建立一個廣告點選次數預測模型

輸入x

使用者特徵

人口屬性如年齡、性別、收入;興趣標籤;歷史點選率

廣告特徵

廣告類別、廣告id、廣告主id、行業、素材影像特徵等

上下文特徵

廣告位、地域、時間、作業系統、瀏覽器等

輸出(h(x))

使用者是否會點選某個廣告(點選的概率是多大)

特徵處理-離散化-交叉特徵-歸一-onehot

使用者->從廣告集合裡規則抽取部分->ctr預估這部分廣告

15)舉一個適合採用層次分析法的例子

目標->準則->方案

構建對比較矩陣(某一準則比重)

排序計算方案權重

買鋼筆->價格外觀質量->可供選擇的筆

17)關聯分析中的極大頻繁項集;FP增長演算法

1、掃描資料庫一遍,得到頻繁項的集合F和每個頻繁項的支援度。把F按支援度遞降排序。

2、構造原始FPTree 以null為根 順序插入

3、構建頻繁項集。同一個頻繁項在PF樹中的所有節點的祖先路徑的集合。

比如I3在FP樹中一共出現了3次,其祖先路徑分別是{I2,I1:2(頻度為2)},{I2:2}和{I1:2}。這3個祖先路徑的集合就是頻繁項I3的條件模式基。

22) 如何解決過擬合問題

簡化模型-正則化係數

23) L1和L2正則的區別,如何選擇L1和L2正則

見上

24) 隨機森林的學習過程

隨機森林是有很多隨機得決策樹構成,它們之間沒有關聯。得到RF以後,在預測時分別對每一個決策樹進行判斷,最後使用Bagging的思想進行結果的輸出

學習過程:

現在有N個訓練樣本,每個樣本的特徵為M個,需要建K顆樹

1從N個訓練樣本中有放回的取N個樣本作為一組訓練集(其餘未取到的樣本作為預測分類,評估其誤差)

2從M個特徵中取m個特徵左右子集特徵(m<M)

25) 隨機森林中的每一棵樹是如何學習的

決策樹

26) 隨機森林學習演算法中CART樹的基尼指數是什麼

變數的不確定性

30) k-mean shift的機制,能不能用偽碼實現

迭代

初始K箇中心點(第二次開始使用上次生成的中心點)

map計算每個樣本距離那個近 輸出 中心 樣本

reduce 計算每個簇的新的中心點 滿足停止條件停止 不滿足輸出 新中心點

31)實現最小二乘法。

1/2(h(x)-y)求偏導

32)Bagging與Boosting

Bagging

從N樣本中有放回的取樣N個樣本

對這N個樣本在全屬性上建立分類器(CART,SVM)

重複上面的步驟,建立m個分類器

預測的時候使用投票的方法得到結果

Boosting

boosting在訓練的時候會給樣本加一個權重,然後使loss function儘量去考慮那些分錯類的樣本(比如給分錯類的樣本的權重值加大)

18)線性分類器與非線性分類器的區別及優劣

線性分類器:模型是引數的線性函式,分類平面是(超)平面

非線性分類器:模型分介面可以是曲面或者超平面的組合。 可以解決線性不可分問題(異或問題)

典型的線性分類器有感知機,LDA,邏輯斯特迴歸,SVM(線性核)

典型的非線性分類器有kNN,決策樹,SVM(非線性核)

樸素貝葉斯(有文章說這個本質是線性的, http://dataunion.org/12344.html )

用MapReduce寫好友推薦,userCF和ItemCF

在一堆單詞裡面找出現次數最多的k個

map-每個map的cleanup()輸出topk

reduce-彙總map topk

hadoop原理:

HDFS+MapReduce

shuffle如何排序:

MapReduce提供Partitioner介面,它的作用就是根據key或value及reduce的數量來決定當前的這對輸出資料最終應該交由哪個reduce task處理,預設對key hash後再以reduce task數量取模。

Shuffle在map端的過程:1、輸入資料經過mapper輸出key-value對 2經過分割槽操作、記憶體的排序、每個分組合並操作

Shuffle在reduce端的過程:1Copy map結果過程 2 Merge階段 3生成Reducer的輸入檔案

map如何切割資料:

splitSize不小於minSize以及不大於blockSiz,如果map任務的檔案分割大小splitSize超過blockSize,那麼每個map任務可能需要跨多個datanode獲取檔案,會導致額外增加網路開銷,因為通常一個map會被分配在該檔案所在的datanode上執行,這樣本地讀取檔案,則不需要網路開銷。mapper函式對block的每行資料進行處理

如何處理資料傾斜:

1.增加reduce 的jvm記憶體 單個值有大量記錄的不適用

2.增加reduce 個數 單個值有大量記錄的不適用 唯一值較多的適用(某些reduce分配了多個較多記錄)

3.明白資料傾斜的分佈自己實現分割槽

4.單獨處理傾斜資料-實現新的key使不傾斜 特定情況特殊分析

join的mr程式碼:

reduce side join-跨機器傳輸資料量大

map同時讀取兩個檔案File1和File2 標籤來自檔案1還是檔案2

reduce函式獲取key相同的來自File1和File2檔案的value list進行join(笛卡爾乘積)

map side join- 小表連大表

小表複製到每個map task

map掃描大表 在hash table中查詢是否有相同的key的記錄連線輸出

SemiJoin-半連線優化reduce side join

File1的join的key抽出放入記憶體中File3(較小)

map期間File2在File3的進行reduce不在的跳過(減少了map端的輸出)

動態規劃

動態規劃:待求解的問題分解為若干個子階段(下一階段需要上一階段結果)

初始狀態→│決策1│→│決策2│→…→│決策n│→結束狀態

1)問題的階段

2)每個階段的狀態

3)從前一個階段轉化到後一個階段之間的遞推關係。

樹結構

class TreeNode{

int value;

TreeNode left;

TreeNode right;

}

連結串列結構

每個節點Node都有一個值val和指向下個節點的連結next

class Node {

int val;

Node next;

Node(int x) {

val = x;

next = null;

}

}

SVM原理-SVM核技巧原理,如何選擇核函式

泛化誤差界的公式為:

R(w)≤Remp(w)+Ф(n/h)

公式中R(w)就是真實風險,Remp(w)就是經驗風險(分類器在給定樣本上的誤差),Ф(n/h)就是置信風險(多大程度上可以信任分類器在未知資料上分類的結果)。

統計學習的目標從經驗風險最小化變為了尋求經驗風險與置信風險的和最小,即結構風險最小。

SVM正是這樣一種努力最小化結構風險的演算法。

SVM演算法要求的樣本數是相對比較少的(小樣本,並不是說樣本的絕對數量少)

非線性,是指SVM擅長應付樣本資料線性不可分的情況,主要通過鬆弛變數(也有人叫懲罰變數)和核函式技術來實現

硬間隔支援向量機(線性分類器)

軟間隔支援向量機(線性分類器)

非線性支援向量機(核技巧與軟間隔最大化)

線性可分:線性核函式

線性不可分:選擇非線性核函式:多項式核函式、高斯核函式、拉普拉斯核函式、sigmoid核函式

PageRank原理

PageRank兩個基本假設:

1.數量假設:入鏈數量越多,那麼這個頁面越重要。

2.質量假設:越是質量高的頁面指向頁面A,則頁面A越重要。

利用以上兩個假設,PageRank演算法剛開始賦予每個網頁相同的重要性得分,通過迭代遞迴計算來更新每個頁面節點的PageRank得分,直到得分穩定為止。

步驟如下:

1)在初始階段:網頁通過連結關係構建起Web圖,每個頁面設定相同的PageRank值,通過若干輪的計算,會得到每個頁面所獲得的最終PageRank值。隨著每一輪的計算進行,網頁當前的PageRank值會不斷得到更新。

2)在一輪中更新頁面PageRank得分的計算方法:在一輪更新頁面PageRank得分的計算中,每個頁面將其當前的PageRank值平均分配到本頁面包含的出鏈上,這樣每個連結即獲得了相應的權值。而每個頁面將所有指向本頁面的入鏈所傳入的權值求和,即可得到新的PageRank得分。當每個頁面都獲得了更新後的PageRank值,就完成了一輪PageRank計算。

優點:

是一個與查詢無關的靜態演算法,所有網頁的PageRank值通過離線計算獲得;有效減少線上查詢時的計算量,極大降低了查詢響應時間。

缺點:

1)人們的查詢具有主題特徵,PageRank忽略了主題相關性,導致結果的相關性和主題性降低

2)舊的頁面等級會比新頁面高。因為即使是非常好的新頁面也不會有很多上游連結,除非它是某個站點的子站點。

http://blog.csdn.net/hguisu/article/details/7996185

AUC的定義和本質,有哪些計算方法

ROC曲線AUC為ROC曲線下的面積 越大分類越準

ROC曲線

橫軸:負正類率FPR FP / (FP+TN=N) 直觀解釋:實際是0負中,錯猜多少

縱軸:真正類率TPR TP / (TP+FN=P) 直觀解釋:實際是1正的中,猜對多少

auc的直觀含義是任意取一個正樣本和負樣本,正樣本得分大於負樣本的概率。

分類器能輸出score:

1.先把score排序一邊掃描一邊計算AUC近似的認為是一個一個矩形面積累加(階梯狀的)計算麻煩

2.統計一下所有的 M×N(M為正類樣本的數目,N為負類樣本的數目)個正負樣本對中,有多少個組中的正樣本的score大於負樣本的score。當二元組中正負樣本的 score相等的時候,按照0.5計算。然後除以MN。實現這個方法的複雜度為O(n^2)。n為樣本數(即n=M+N)

3.對score從大到小排序,最大score對應的sample 的rank為n,第二大score對應sample的rank為n-1,以此類推

然後把所有的正類樣本的rank相加,再減去正類樣本的score為最小的那M個值的情況。得到的就是所有的樣本中有多少對正類樣本的score大於負類樣本的score。然後再除以M×N。即

AUC=((所有的正例位置相加)-(M*(M+1)/2))/(M*N)

http://blog.csdn.net/pzy20062141/article/details/48711355

gbdt和xgboost區別

傳統GBDT以CART作為基分類器xgboost還支援線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。

傳統GBDT在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支援自定義代價函式,只要函式可一階和二階求導。

xgboost在代價函式里加入了正則項,用於控制模型的複雜度。正則項裡包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。

Shrinkage(縮減),相當於學習速率(xgboost中的eta)。xgboost在進行完一次迭代後,會將葉子節點的權重乘上該係數,主要是為了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設定得小一點,然後迭代次數設定得大一點。(補充:傳統GBDT的實現也有學習速率)

列抽樣(column subsampling)。xgboost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。

對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向。

xgboost工具支援並行。boosting不是一種序列的結構嗎?怎麼並行的?注意xgboost的並行不是tree粒度的並行,xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函式裡包含了前面t-1次迭代的預測值)。xgboost的並行是在特徵粒度上的。我們知道,決策樹的學習最耗時的一個步驟就是對特徵的值進行排序(因為要確定最佳分割點),xgboost在訓練之前,預先對資料進行了排序,然後儲存為block結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個block結構也使得並行成為了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多執行緒進行。

可並行的近似直方圖演算法。樹節點在進行分裂時,我們需要計算每個特徵的每個分割點對應的增益,即用貪心法列舉所有可能的分割點。當資料無法一次載入記憶體或者在分散式情況下,貪心演算法效率就會變得很低,所以xgboost還提出了一種可並行的近似直方圖演算法,用於高效地生成候選的分割點。

https://www.zhihu.com/question/41354392/answer/128008021?group_id=773629156532445184

具體怎麼做預處理,特徵工程,模型融合常用方式,融合一定會提升嗎

標準化

資料歸一化規範化Normalization

特徵二值化Binarization

類別資料編碼 OneHot 編碼

標籤二值化

類別編碼

生成多項式特徵

常見融合框架原理,優缺點,bagging,stacking,boosting,為什麼融合能提升效果

個人理解是按照不同的思路來組合基礎模型,在保證準確度的同時也提升了模型防止過擬合的能力。針對弱學習器(泛化能力弱)效果明顯,個體學習器滿足:1好而不同,具有多樣性2不能太壞

Boosting(序列-減少偏差)

Bagging(並行-減少方差)

Stacking

不同模型之間有差異,體現不同表達能力

2G記憶體裡找100TB資料的中位數

如何在海量資料中查詢給定部分資料最相似的top200向量,向量的維度也很高

KD樹,聚類,hash

雜湊分治:大檔案雜湊對映多個小檔案-小檔案top-合併大檔案top堆排序/快排

找出5億個int型數的中位數:

首先將這5億個int型數劃分為2^16個區域,然後讀取資料統計落到各個區域裡的數的個數,根據統計結果就可以判斷中位數落到哪個區域,並知道這個區域中的第幾大數剛好是中位數。然後,第二次掃描只統計落在這個區域中的那些數就可以了。

http://www.epubit.com.cn/article/290

為什麼LR需要歸一化或者取對數,為什麼LR把特徵離散化後效果更好

目的是它能夠讓它符合我們所做的假設,使我們能夠在已有理論上對其分析

LR更適合處理稀疏資料

邏輯迴歸屬於廣義線性模型,表達能力受限;單變數離散化為N個後,每個變數有單獨的權重,相當於為模型引入了非線性,能夠提升模型表達能力,加大擬合;(啞變數)

特徵離散化以後,起到了簡化了邏輯迴歸模型的作用,降低了模型過擬合的風險。

為什麼把特徵組合之後還能提升

反正這些基本都是增強了特徵的表達能力,或者說更容易線性可分吧

單連結串列如何判斷有環

演算法的思想是設定兩個指標p, q,其中p每次向前移動一步,q每次向前移動兩步。那麼如果單連結串列存在環,則p和q相遇;否則q將首先遇到null。

(p和q同時在操場跑步,其中q的速度是p的兩倍,當他們兩個同時出發時,p跑一圈到達起點,而q此時也剛 好跑完兩圈到達起點。)

http://www.cnblogs.com/chengyeliang/p/4454290.html

從大資料中找出topk

http://www.epubit.com.cn/article/290

各個損失函式之間區別

http://blog.csdn.net/google19890102/article/details/50522945 http://blog.csdn.net/shenxiaoming77/article/details/51614601

哪些優化方法,隨機梯度下降,牛頓擬牛頓原理

http://www.tuicool.com/articles/EfInM3Q

特徵選擇方法有哪些(能說出來10種以上加分)

  1. 相關係數法 使用相關係數法,先要計算各個特徵對目標值的相關係
  2. 構建單個特徵的模型,通過模型的準確性為特徵排序,藉此來選擇特徵
  3. 通過L1正則項來選擇特徵:L1正則方法具有稀疏解的特性,因此天然具備特徵選擇的特性 
    (分別使用L1和L2擬合,如果兩個特徵在L2中係數相接近,在L1中一個係數為0一個不為0,那麼其實這兩個特徵都應該保留,原因是L1對於強相關特徵只會保留一個)
  4. 訓練能夠對特徵打分的預選模型:RandomForest和LogisticRegression/GBDT等都能對模型的特徵打分,通過打分獲得相關性後再訓練最終模型;
  5. 通過特徵組合後再來選擇特徵:如對使用者id和使用者特徵最組合來獲得較大的特徵集再來選擇特徵,這種做法在推薦系統和廣告系統中比較常見
  6. 通過深度學習來進行特徵選擇
  7. 傳統用前進或者後退法的逐步迴歸來篩選特徵或者對特徵重要性排序,對於特徵數量不多的情況還是適用的。
  8. 方差選擇法計算各個特徵的方差,然後根據閾值,選擇方差大於閾值的特徵
  9. 卡方檢驗 經典的卡方檢驗是檢驗定性自變數對定性因變數的相關性
  10. 互資訊法 互資訊法經典的互資訊也是評價定性自變數對定性因變數的相關性的
  11. 線性判別分析法(LDA)
  12. 主成分分析法(PCA) 
    https://www.zhihu.com/question/28641663/answer/41653367

資訊熵和基尼指數的關係(資訊熵在x=1處一階泰勒展開就是基尼指數)

如何克服過擬合,欠擬合

L0,L1,L2正則化(如果能推導絕對是加分項,一般人最多能畫個等高線,L0是NP問題)

怎麼衡量兩個商品的價效比

19)特徵比資料量還大時,選擇什麼樣的分類器

20)對於維度很高的特徵,你是選擇線性還是非線性分類器

21) 對於維度極低的特徵,你是選擇線性還是非線性分類器

6) 講em演算法

11)推薦系統中基於svd方法

13)userCF和ItemCF在實際當中如何使用,提供具體操作,以及它們的優勢(推薦系統)

28) 如何搭建一個推薦平臺,給出具體的想法,

27)支援向量機、圖模型、波爾茨曼機,記憶體壓縮、紅黑樹、並行度

9)談談DNN

29) 實現一箇中文輸入法

怎麼用模型來查詢異常使用者

快速排序

通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序

可以開始尋找比6小的數從右往左找第二次比較,這次要變成找比k大的了,而且要從前往後找

所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置

歸併排序

歸併操作(merge),也叫歸併演算法,指的是將兩個順序序列合併成一個順序序列的方法。

第一次歸併後:{6,202},{100,301},{8,38},{1},比較次數:3;

第二次歸併後:{6,100,202,301},{1,8,38},比較次數:4;

堆排序

堆實際上是一棵完全二叉樹

即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。

即每次調整都是從父節點、左孩子節點、右孩子節點三者中選擇最大者跟父節點進行交換

插入排序–直接插入排序

先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序為止O(n^2).

插入排序—希爾排序

選擇一個增量序列

按增量序列個數k,對序列進行k 趟排序;

氣泡排序

自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒

桶排序/基數排序

把資料分組,放在一個個的桶中,然後對每個桶裡面的在進行排序。

可以把桶設為大小為10的範圍 算hash值分桶

對A[1..n]從頭到尾掃描一遍,把每個A[i]放入對應的桶B[j]中

再對這100個桶中每個桶裡的數字排序,這時可用冒泡,選擇,乃至快排

最後,依次輸出每個桶裡面的數字,且每個桶中的數字從小到大輸出,這 樣就得到所有數字排好序的一個序列了。

java虛擬機器

Java虛擬機器執行時資料區分為以下幾個部分:

方法區、Java棧、Java堆、程式計數器。

程式計數器CPU必須具有某些手段來確定下一條指令的地址使其保持的總是將要執行的下一條指令的地址 用來計數的,指示指令在儲存器的存放位置,也就是個地址資訊

Java棧

執行緒私有 儲存一個方法的區域性變數、運算元棧、常量池指標

方法區

儲存裝載的類資訊 型別的常量池 方法資訊

Java堆

Java堆是所有執行緒共享的存放物件例項被成為GC堆 應用系統物件都儲存在Java堆中

gc新生代演算法

標記清除–首先通過根節點,標記所有從根節點開始的可達物件未被標記的物件就是未被引用的垃圾物件。然後,在清除階段,清除所有未被標記的物件。

標記壓縮–將所有的存活物件壓縮到記憶體的一端。之後,清理邊界外所有的空間。

複製演算法–將原有的記憶體空間分為兩塊,每次只使用其中一塊,在垃圾回收時,將正在使用的記憶體中的存活物件複製到未使用的記憶體塊中,之後,清除正在使用的記憶體塊中的所有物件,交換兩個記憶體的角色,完成垃圾回收

分代思想

依據物件的存活週期進行分類,短命物件歸為新生代,長命物件歸為老年代。

根據不同代的特點,選取合適的收集演算法

少量物件存活,適合複製演算法

大量物件存活,適合標記清理或者標記壓縮

java基礎

執行緒程式共享記憶體

一個程式中可以包含若干個執行緒 程式作為分配資源的基本單位 程式間相互獨立 程式在執行過程中擁有獨立的記憶體單元

執行緒作為獨立執行和獨立排程的基本單位

子程式和父程式有不同的程式碼和資料空間,而多個執行緒則共享資料空間

作業系統的設計,因此可以歸結為三點:

(1)以多程式形式,允許多個任務同時執行;

(2)以多執行緒形式,允許單個任務分成不同的部分執行;

(3)提供協調機制,一方面防止程式之間和執行緒之間產生衝突,另一方面允許程式之間和執行緒之間共享資源。

簡單移動平均法

sma[t]= mean(ts[1:t])

加權移動平均法

wma[t]= sum( ts[(t-k+1):t] * weight )

k期移動平均法(簡單移動平均法的優化,取最近K期的均值)

kwma[t]= mean(ts[(t-k+1):t])

指數平滑法 平滑係數α的選擇(時間越遠權重小)

ewma[t]= a*ts[t] + (1-a)*ewma[t-1]

當時間數列無明顯的趨勢變化,可用一次指數平滑預測。

二次指數平滑預測

二次指數平滑是對一次指數平滑的再平滑。它適用於具線性趨勢的時間數列。

三次指數平滑預測

三次指數平滑預測是二次平滑基礎上的再平滑。

它們的基本思想都是:預測值是以前觀測值的加權和,且對不同的資料給予不同的權,新資料給較大的權,舊資料給較小的權。

mapreduce 兩個大文字連線

reduce side join 重分割槽連線 reduce端連線

map函式同時讀取兩個檔案File1和File2對每條資料打一個標籤(tag)

在reduce階段,reduce函式獲取key相同的來自File1和File2檔案的value list, 然後對於同一個key,對File1和File2中的資料進行join

map side join 小表連大表

Semi Join 半連線 另一個map端連線 連線的資料集中有一個資料集非常大,但同時這個資料集可以被過濾成小到可以放在記憶體中。

File1,將其參與join的key抽取出來,儲存到檔案File3 將File2中不在File3中的key對應的記錄過濾掉,剩下的reduce階段的工作與reduce side join相同

int值排序

int+出現次數

hive

spark

RDD作為資料結構,本質上是一個只讀的分割槽記錄集合

資料分割槽的集合,能根據本地性快速訪問到資料的偏好位置,依賴關係,計算方法,是否是雜湊/範圍分割槽的後設資料

KPI統計

電影推薦

矩陣乘法

1 0 3 1 6

4 8 7 9 5

4 6

K V

1 1 a 1 1 a第一行 b第一列 a矩陣 a第一列 值

1 2 a 1 1 a第一行 b第二列 a矩陣 a第一列 值

1 1 a 3 3 a第一行 b第一列 a矩陣 a第三列 值

1 2 a 3 3 a第一行 b第二列 a矩陣 a第三列 值

把要乘的數放在一起

mahout推薦

協同過濾

基於物品推薦

建立物品的同現矩陣-AB物品同時出現的次數

建立使用者對物品的評分矩陣

同現矩陣X評分矩陣=物品推薦分數

優化:壓縮輸出檔案、合併小檔案har 讀入多個檔案作為一條input

自定義排序 自定義分組 自定義分割槽

top k 有序樹

問企業公司專注於哪裡學習哪方面知識

面試結果

面積經驗

1.國內網際網路公司和國外FLAGS的面試有很大不同,前者重視專案、實習經驗、專業積累,後者看重的是你聰不聰明與程式設計題刷得多不多。在求職開始的時候心裡得有個譜,合理分配時間、精力,並理性看待自己掛了筆試或面試。

2.簡歷講究簡單粗暴有逼格,簡歷包含聯絡方式、教育背景、實習經歷、專案介紹、牛逼的榮譽、崗位相關的技能就好,謂之簡單粗暴,有逼格則指的是實習、專案多用數字量化描述,省去敘事的過程,結果導向。還有一點經驗,可以適當裝逼,但不能裝逼得超過可掌控範圍。

投簡歷的時候,多走內推渠道,省去大部分筆試或者電話面試,不吃力又討好。內推渠道有以下幾種,我按照靠譜程度排個序:1) 總監以下的內部技術員工 2) HR 3)總監以上的高管 4)北郵人論壇 5)Linked In 6)知乎 7)NLP job 8)微信公眾號。1)和2)是比較靠譜的,3)~7)只能作為備胎。還有一個非主流但很有效的捷徑是參加企業舉辦的比賽並取得好名次。

面試時要抓住提問環節問一些實質性的問題,比如具體的技術問題、部門組織架構、部門戰略地位、以後的工作團隊、對個人的定位、KPI怎樣給出等,尤以部門組織架構、戰略地位、團隊這類大又可說的問題最佳。京東面試官給我講了百度架構部門的痛點,在之後的面試中我就經常和麵試官聊關於架構部門和業務部門的話題,學到很多,大局觀也慢慢改善。

5.在精力允許的情況下多面,多拿offer,一方面漲見識、談資,一方面在談理想公司的offer時能爭取到更好的薪資待遇。

1.筆試題

- 在網際網路分析中,通常會關注使用者的【第N日啟用率】來衡量使用者質量。使用者的第N日啟用指的是使用者在註冊的第N天登入網站或App,即算為該使用者的第N日啟用。第N日啟用率指的是某日註冊使用者在第N天啟用的數量除以該日所有註冊使用者數量。

“赤兔”是領英中國針對中國職場人士推出的一款本土化的社交應用。如果你是領英中國的資料分析師,你會從哪些方面和維度來設計各項指標,給產品的設計和運營提供資料上的支援?請給出具體的維度和指標,並說明原因。

- 網易遊戲的一道筆試題是給定一條包含3個join的SQL語句,要求寫程式碼模擬實現SQL的功能。

2.程式設計題

- 最少時間複雜度求陣列中第k大的數,寫code

- 去除字串S1中的字元使得最終的字串S2不包含’ab’和’c’,寫code

- 長度為N的序列Sequence=abc….Z,問有多少不同的二叉樹形態中序遍歷是這個,寫遞推公式

- 給定整數n和m,問能不能找出整數x,使得x以後的所有整數都可以由整數n和m組合而成

- 中序遍歷二叉樹,利用O(1)空間統計遍歷的每個節點的層次,寫bug free的code

- 排序二叉樹轉雙向連結串列

- 一個運算序列只有+、*、數字,計算運算序列的結果

3.機器學習&資料探勘問題

- L1和L2正則項 >> 它們間的比較

- 各個模型的Loss function,牛頓學習法、SGD如何訓練

-介紹LR、RF、GBDT ,分析它們的優缺點,是否寫過它們的分散式程式碼

- 介紹SVD、SVD++

- 是否瞭解線性加權、bagging、boosting、cascade等模型融合方式

- 推薦系統的冷啟動問題如何解決

- 是否瞭解A/B Test以及A/B Test結果的置信度

- 特徵工程經驗

- 是否瞭解mutual infomation、chi-square、LR前後向、樹模型等特徵選擇方式

4.解決方案類題目

- 為今日頭條設計一個熱門評論系統,支援實時更新

給定淘寶上同類目同價格範圍的兩個商品A和B,如何利用淘寶已有的使用者、商品資料、搜尋資料、評論資料、使用者行為資料等所有能拿到的資料進行建模,判斷A和B統計平均價效比高低。統計平均價效比的衡量標準是大量曝光,購買者多則高。

- 有n個elements和1個Compare(A, B)函式,用Compare函式作為排序演算法中的比較運算元給elements排序。Compare函式有p的可能比較錯。排序完取Top m個元素,本來就在Top m並被正確分在Top m的元素個數是x。問x的數學期望。

- 如何預測雙十一支付寶的負載峰值。

轉載於:https://www.cnblogs.com/hellochennan/p/6654084.html

相關文章