偽代碼實現: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/7996185AUC的定義和本質,有哪些計算方法
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/48711355gbdt和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種以上加分)
- 相關系數法 使用相關系數法,先要計算各個特征對目標值的相關系
- 構建單個特征的模型,通過模型的准確性為特征排序,借此來選擇特征
- 通過L1正則項來選擇特征:L1正則方法具有稀疏解的特性,因此天然具備特征選擇的特性
(分別使用L1和L2擬合,如果兩個特征在L2中系數相接近,在L1中一個系數為0一個不為0,那么其實這兩個特征都應該保留,原因是L1對於強相關特征只會保留一個) - 訓練能夠對特征打分的預選模型:RandomForest和LogisticRegression/GBDT等都能對模型的特征打分,通過打分獲得相關性后再訓練最終模型;
- 通過特征組合后再來選擇特征:如對用戶id和用戶特征最組合來獲得較大的特征集再來選擇特征,這種做法在推薦系統和廣告系統中比較常見
- 通過深度學習來進行特征選擇
- 傳統用前進或者后退法的逐步回歸來篩選特征或者對特征重要性排序,對於特征數量不多的情況還是適用的。
- 方差選擇法計算各個特征的方差,然后根據閾值,選擇方差大於閾值的特征
- 卡方檢驗 經典的卡方檢驗是檢驗定性自變量對定性因變量的相關性
- 互信息法 互信息法經典的互信息也是評價定性自變量對定性因變量的相關性的
- 線性判別分析法(LDA)
- 主成分分析法(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的數學期望。
- 如何預測雙十一支付寶的負載峰值。