機器學習面試問題彙總

僞代碼實現:LR、梯度降低、最小二乘、KNN、Kmeans;html

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

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

基本知識:面試

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的泛化能力、增量學習

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

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

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

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

w b

四、f=sign(wx+b)

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

調整C正則化特徵

泛化能力強

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

初始權重 -0.5-0.5 0-1

隱藏節點個數

傳輸函數

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

減小隱藏節點個數

多了過擬合

不起做用??

3)爲何要用邏輯迴歸?

邏輯迴歸的優勢:

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增加算法

一、掃描數據庫一遍,獲得頻繁項的集合F和每一個頻繁項的支持度。把F按支持度遞降排序。

二、構造原始FPTree 以null爲根 順序插入

三、構建頻繁項集。同一個頻繁項在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端的過程:一、輸入數據通過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的數學指望。

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

相關文章
相關標籤/搜索