算法面試基本問題

一、Java

1.一個Java程序可以認爲是一系列對象的集合,而這些對象通過調用彼此的方法來協同工作。下面簡要介紹下類、對象、方法和實例變量的概念。
2.對象:對象是類的一個實例,有狀態和行爲。
3.類:類是一個模板,它描述一類對象的行爲和狀態。
4.方法:方法就是行爲,一個類可以有很多方法。
5.實例變量:每個對象都有獨特的實例變量,對象的狀態由這些實例變量的值決定。
6.編寫Java程序時,應注意以下幾點:

  • 大小寫敏感
  • 類名:每個單詞的首字母應該大寫
  • 方法名:所有的方法名都應該以小寫字母開頭。如果方法名含有若干單詞,則後面的每個單詞首字母大寫。
  • 源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名作爲文件名保存(切記Java是大小寫敏感的),文件名的後綴爲.java。
  • 主方法入口:所有的Java 程序由public static void main(String []args)方法開始執行。
  • 在Java語言中,所有的變量在使用前必須聲明
import java.io.*;  //導入包
final double PI = 3.1415926;  //final修飾常量
public class 類名{
成員/實例變量;
static 類變量;
public 返回類型 方法名(參數){
    局部變量;
    相關操作;
}
public static void main(string[] args){
    類名 對象=new 類名(“對象值”);//創建對象
    System.out.println(12+變量名+34); //輸出語句
}
}

7.Char類型
(1)字符char ch = ‘a’;
(2)字符數組 char[] charArray={‘a’,’b’,’c’};
(3)創建對象char[] charArray = new char[];
(4)字符數組轉字符串:toString()
8.String類型
(1)String類型不能改,String str = “hello world”;
(2)創建對象,String str = new String(charArray);
(3)字符串長度:str.length()
(4)字符串轉字符數組:toCharArray()
(5)StringBuffer和StringBuilder:字符串可變,StringBuilder更快但線程不安全,用的多。

StringBuilder ss = new StringBuilder(“hello”); ss.append(“world”);//擴展
ss.replace(“world”,”word”);//替換

9.Array數組類型
(1)創建數組int[] array = new int[arraysize];array[0] = 1; array[1] = 2;
(2)創建數組並賦值 int[] array = {1,2,3,4,5};
(3)數組長度:array.length
(4)多維數組:String array[][] = new String[row][col];
10.輸入Scanner

import java.util.Scanner;
Scanner sc = new Scanner(System.in); 
System.out.println("請輸入你的姓名:"); 
String name = sc.nextLine(); 
System.out.println("請輸入你的年齡:"); 
int age = sc.nextInt(); 
System.out.println("請輸入你的工資:"); 
float salary = sc.nextFloat();

11.java虛擬機的內存如何劃分的?類加載機制,類加載器,雙親委派模型?jvm調優做過沒,-Xms和-Xmx分別指什麼?堆,棧,永久區,GC?
答:主要劃分爲五個區域,方法區,本地方法棧,虛擬機棧,程序計數器,堆。大概就是這五個區域,一定要背下來。咱們的垃圾回收主要就是針對堆區來進行的,堆區又會被劃分爲新生代老年代
12.java的垃圾回收算法有哪些?垃圾回收器有哪些?不同的垃圾回收器有什麼區別?對象什麼時候進入老年代,什麼時候進行FullGC?
答:垃圾回收算法有標記複製法,標記清除法 等。垃圾回收器最常被問的就是CMS和G1。scavage之類的回收器基本上不問。CMS在不同階段使用串行或併發來做垃圾回收的,而且他和G1垃圾回收器有什麼區別。
13.voliatile和synchonized有什麼區別?synchonized和jdk提供的Lock包又有什麼區別?volatile怎麼保證可見性?synchronized和lock的區別,synchronized的底層實現?
synchronized和reentrantlock的區別。講講阻塞隊列,volatile和synchronized爲啥是非公平的
答:voliatile只能夠保證可見性和有序性,不能保證原子性,synchonized是通過上鎖來防治出現併發問題。jdk提供的Lock包相比於synchozied提供了更加多樣化的鎖機制。
14.HashMap的原理是什麼?HashMap和HashTable的區別,HashMap怎麼解決hash衝突,jdk1.8後對HashMap的改進?
hashmap也是一個被問爛的問題,但是我這裏進行一些拓展。基本上面試官最常問的就是hashmap是如何實現的,這個網上一查就知道了。但是一些深入一點的東西,如果你能夠講的話,是會有加分的。例如hashmap如何實現動態擴容,hashmap並不是線程安全的,在哪些情況下會出現線程安全的問題?那麼哪一個提供了線程安全的map?他的鎖機制是如何實現的?(它的鎖機制並不是簡單地直接把函數給鎖住,而是通過分段來治理的,還是很有意思的)
hashmap介紹先說了下自己知道JAVA的hash map的用法,python中dictionary也是用hash表實現的:首先利用hash()將key和value映射到一個地址,它通過把key和value映射到表中一個位置來訪問記錄,這種查詢速度非常快,更新也快。而這個映射函數叫做哈希函數,存放值的數組叫做哈希表。 哈希函數的實現方式決定了哈希表的搜索效率。具體操作過程是:

  1. 數據添加:把key通過哈希函數轉換成一個整型數字,然後就將該數字對數組長度進行取餘,取餘結果就當作數組的下標,將value存儲在以該數字爲下標的數組空間裏。
  2. 數據查詢:再次使用哈希函數將key轉換爲對應的數組下標,並定位到數組的位置獲取value。
    但是,對key進行hash的時候,不同的key可能hash出來的結果是一樣的,尤其是數據量增多的時候,這個問題叫做哈希衝突。如果解決這種衝突情況呢?通常的做法有兩種,一種是鏈接法,另一種是開放尋址法,Python選擇後者。
    開放尋址法(open addressing):
    開放尋址法中,所有的元素都存放在散列表裏,當產生哈希衝突時,通過一個探測函數計算出下一個候選位置,如果下一個獲選位置還是有衝突,那麼不斷通過探測函數往下找,直到找個一個空槽來存放待插入元素

15.常用的設計模式有哪些?單例模式的實現方式?
答:這個地方你最少有說得出來單例模式、工廠模式、代理模式等,這些都是很常見的設計模式,而且這個問題也經常被問。
16.Spring的AOP、IOC作用是什麼?如何實現的
答:Spring是一個java web的框架,面試官特別喜歡問。但是問spring基本上也只圍繞着這幾個點,第一個是AOP、IOC的作用是什麼,這個問題查一下就知道了。第二個是AOP、IOC是通過什麼實現的?AOP是通過代理模式來實現的,IOC是通過單例模式+工廠模式來實現的。問得比較多的是AOP的實現方式,你如果回答代理模式一般就夠了。作爲拓展,你可以回答裏面用到了動態代理,動態代理有兩種方式,一種是jdk提供的,一種是cglib。。。然後你和面試官比較一下兩種動態代理的區別,我覺得也是會有加分的。
17.java的3大特性,java相關的數據結構,java對象,java的集合的繼承關係,爲什麼不能多繼承?抽象類和接口?容器
封裝,繼承,多態
18.java裏set,Array和map等容器瞭解嗎,它們的繼承關係寫一下。最頂層好像是是java.util.Collection和java.util.Map
19.String、StringBuffer、StringBuilder的區別,怎麼理解String不變性
20.==和equals的區別,如果重寫了equals()不重寫hashCode()會發生什麼
21.java和python的區別,對面向對象的理解,和麪向過程相比有什麼區別
22.java中爲什麼要寫非static方法?java的序列化方式?
23.java實現多線程的方式?ConcurrentHashMap,ConcurrentHashMap怎麼保證線程安全?HashTable怎麼保證線程安全?HashSet的底層實現,是不是線程安全的?
24.ArrayList和LinkedList的區別
Java中的ArrayList是鏈表還是數組,爲什麼插入和刪除可以O(1)
25.可重入鎖的可重入性是什麼意思,哪些是可重入鎖
26.Java堆溢出問題怎麼處理,內存泄漏和內存溢出的區別
27.什麼是內部類,什麼是匿名內部類
28.Java的NIO用得咋樣
29.構造函數私有的情況,單例模式,protected和private的區別,final和finally的區別,java的Integer和int的區別,初始值都是啥?

二、C++

1.C++內存分配,堆和棧哪個快,指針引用區別,虛函數
2.結構體佔多少字節
3.函數中的局部變量在內存中如何申請
4.C++的多態?如何實現多態?C++內部實現機制,指針與引用的區別
5.C11特性
6.STL中vector的低層實現(手寫),resize函數、reserve函數?STL中插入的操作時間複雜度,要考慮內存複製擴充?
7.C爲什麼比C++快
8.set、map的查找複雜度、插入刪除等
9.深拷貝,淺拷貝,寫一個出來
10.智能指針的名字是啥
11.堆棧區別
12.new,malloc區別
13.純虛函數怎麼定義,用處,寫一個出來
14.函數後面接const是什麼意思
15.棧溢出有哪些情況
16.寫一個函數指針
17.虛函數的好處?
18.靜態成員,那麼有什麼特性?

三、PYTHON

1.python傳參會改變原值嗎
2.python是解釋語言還是編譯語言
3.xrange與range的區別,
4.Python range xrange 哪個是使用迭代器循環,哪個是先生成list再循環
5.python如何得到一個文件夾下的目錄
6.python交換數字a,b
7.python對一個列表刪除所有爲0的數字
8.python怎麼定義一個類的成員變量
9.python寫一個函數,實現給定一個列表,把列表所有0移到列表最後面,其餘相對順序不變,要求時間o(n),空間o(1)
10.python寫一個函數,實現有1T 的數據,10億個不重複單詞,給你一臺機器,16G的內存和5T的內存,怎麼統計每個單詞的個數?
11.zip作用,說打包。numpy裏面的list的引號是什麼意思?
12.QT和python怎麼結合?
13.Python 多進程
14.Python 鎖

四、LINUX

1.瞭解Linux內核?
2.Linux命令
1)統計三個文件每行的加和,寫入一個文件
3)查看某文件的大小
4)vim中怎麼替換內容
5)如何找到Python的進程並殺死;
6)git常用指令,遇到衝突怎麼辦;
7)查看文件大小命令
8)查看文件多少行命令
9)如何後臺起一個服務
10)grep命令
11)如何查看內存和cpu使用情況
3.Linux下有用C++編程嗎
4.linux怎麼刪除一個進程?那麼進程號怎麼知道呢?(grep)
5.linux命令怎麼查看硬盤太小?

五、操作系統

1.進程和線程的區別是什麼?
答:進程是CPU分配資源的最小單元,線程是CPU調度的基本單元、一個進程可以包含多個線程等,能夠理解爲什麼有些時候要使用線程不使用進程。因爲進程啓動的時候cpu需要給他分配資源,對系統壓力比進程大,你可以把線程看成是輕量級的進程。
2.進程間通信的方式有什麼?線程間通信的方式有什麼?
答:進程間通訊可以通過socket,管道,信號,消息,共享內存等多種方式。線程間通信就比較簡單了,直接共享變量也行,通過管道也行。
3.什麼是緩存?有哪些緩存的更新算法?
答:緩存的更新算法用的最多的應該就是LRU。
4.多線程、多進程?python中怎麼實現多線程、多進程的?python中的多線程是真的多線程嗎?爲什麼多線程比較雞肋?
5.線程有幾種實現方式 ,解釋了缺點和使用哪種更多,線程的局部變量,講講線程池參數?線程等待時位於哪個區域,具體講一下?線程有哪些狀態?代碼實現一個線程池?爲什麼要用線程池,線程池的好處?
6.線程安全?
7.synchronized的底層實現
8.如果有兩個進程,一個進程執行一半要求另一個進程終止,該如何操作
9.手寫消費者生產者 wait notify實現
10.time_wait的兩種原因?sleep和wait的區別,sleep會不會釋放鎖,notify和notifyAll的區別
11.什麼情況會發生死鎖,死鎖的處理方法
12.Cookie和Session的區別,怎麼防止Cookie欺騙

六、機器學習

1.線性迴歸和邏輯迴歸、傳統機器學習算法
1)線性迴歸原理,處理步驟
2)Logistic迴歸能處理浮點數嘛
3)邏輯迴歸中sigmoid函數的好處?以及爲什麼用極大似然?
4)線性迴歸和邏輯迴歸的區別
5)softmax和logistic的關係,可以推導嗎
6)怎麼確定因變量與自變量間線性關係?
7)SVM和Logistic Regression對比

2.擬合問題、範數、方差、正則化
1)怎麼避免過擬合情況
2)R方、T值對擬合的意義
3)如何發現過擬合
4)二範數有什麼用,原理是什麼,爲什麼可以防止過擬合
5)L1、L2範數,L1趨向於0,但L2不會,爲什麼?L1 L2範數的區別?
6)偏差、方差、距離度量公式
7)L1正則爲何有稀疏性?正則化怎麼選擇,l1範數、l2範數;

3.缺失值、異常值、數據傾斜、數據處理
1)用的數據量是多少,數據集怎麼劃分的
2)做數據增強了嗎,做完了數據怎麼存放的
3)數據預處理怎麼做的? 數據不均衡怎麼處理?
4)數據量不足怎麼解決、沒有數據怎麼辦?數據爭論怎麼辦?
5)超參數怎設置的
6)如果數據不好怎麼辦,數據不均衡怎麼處理、只有少量帶標籤怎麼處理
7)數據標註怎麼做?
8)對數據預處理怎麼填充的缺失值,
9)哪些判定爲異常值
10)如何處理數據傾斜
11)對長拖尾分佈的數據進行log處理的好處
12)項目裏面從數據採集到最終的數據可視化,每個環節都有可能丟數據,怎麼判斷數據有沒有丟,如果丟了如何定位到在哪一個環節丟的

4.特徵選擇
1)多項式組合特徵對哪個模型中效果提升最大。
答:面試官說是Logistic迴歸裏面提升最大,而且組合起來的兩個特徵也是想出來的,沒什麼理論支撐。
2)對特徵含義的理解
3)傳統特徵有哪些(sift, surf, orb, haris),解釋一下sift爲何具有尺度和旋轉不變性
4)對連續屬性進行離散化有什麼好處
5)特徵維度是多少維度

5.AUC、ROC、recall、IOU
1)模型的評價指標AUC是如何計算的
2)ROC曲線的橫縱座標代表了什麼含義
3)調參過程中recall達到了多少、
4)iou計算、k-means、dropout、iou和NMS怎麼算,寫代碼?
5)精確率高、召回率低是爲什麼

6.LR、SVM、XGBoost模型、GBDT、boost、Adaboost
1)XGBoost模型裏面參數有哪些,怎麼調參的
2)XGBoost模型中對數據進行採樣的好處?
3)介紹LR、SVM和XGBoost,這三個模型中哪個處理數據不平衡的Cover能力最強?
答:被面試官指出是XGBoost,號稱能處理10:1的數據不平衡
4)SVM的核函數都有哪些?
5)闡述SVM原理,爲何使用對偶性以及對偶性原理,SVM如何解決多分類,SVM與LR對比。
6)闡述GBDT、xgboost、lightGBM的異同,xgb的優勢,lgb的優勢,二者的並行如何實現
7)爲什麼用LR,不是0-1
8)LR手寫代碼
9)給你數據,進行性別分類,有:身高、體重、興趣,注意有些特徵連續,有些是離散的,怎麼用LR來做
10)xgb和gbdt的區別

7.神經網絡、激活函數、CNN、卷積、池化
1)CNN的原理和核心?講一下CNN,每個層,及作用?
2)卷積如何進行、爲何有效?
3)11卷積的作用?
4)卷積反向傳播過程?反向傳播求導,給了個例子鏈式求導,pool如何反向傳播,反向傳播過程中池化層怎麼接受後面傳過來的損失的
5)tensorflow\caffe怎麼實現的知道麼,Tensorflow中卷積操作是怎樣實現
6)網絡結構參數,損失函數怎麼定義,假如網絡不收斂,你會採取哪些措施
7)兩個矩陣,2
3和33矩陣,拼成一個23的,tensorflow怎麼操作
8)softmax loss,全連接的作用,GD、SGD、mini batch GD的區別
9)depth conv?計算一層的參數量、計算量?計算經過卷積操作後的feature map大小?卷積層參數量
10)dropout和batch normalization
11)如何用到CNN的?比如用CNN解決了一個原先算法無法解決的問題,還是說剛上來就用CNN?
12)激活函數sigmoid,優缺點?激活函數?權重初始化方法都有哪些?爲什麼不用sigmoid而用relu嗎?做出了哪些改進?
13)梯度消失與梯度爆炸的產生原因,如何避免?
14)優化器有哪些,怎麼演進的,平時怎麼用,如何調參數
15)什麼情況下可停止迭代

8.LSTM、GRU、RNN
1)梯度消失和梯度爆炸,LSTM中如何解決
2)選擇了什麼RNN網絡,優化器是什麼,效果怎麼樣,數據來源
3)LSTM、GRU、RNN的原理以及差別

9.resnet
1)resnet,mobilenet比較分析特點
2)resnet好處,resnet第二個版本做了哪些改進
3)VGG16和resnet152哪個參數量多
4)殘差網絡梯度怎樣計算的,爲什麼這裏梯度不會消失,推導一下

10.bn層
1)bn層詳解,優點以及如何反向傳播,怎麼求導
2)BN的作用,有哪些BN算法,爲什麼能達到XX的效果
3)BN層的moving——mean怎麼求得
4)BN層怎麼計算
5)BN層,先加BN還是激活,有什麼區別
6)解決Overfitting、regulation的方法:regulation,我才總結下了,大致主要聊了2點:
1)dropout,介紹dropout的概念啊,問了下train和test階段的不一樣過程細節
主要講了下test把active function的輸出都乘以P,這樣就把train和test的輸出期望都scale到了一個range,這樣纔是更加準確的
2)Batch Normalisation:BN,BN的原理,問什麼好,好在哪裏?
1.降低了樣本之間的差異,scale到(0,1)
2,降低了層層之間的依賴,主要體現在前一層的輸出是下一層的輸入,那麼我們把所有數據都scale到了(0,1)的distribution,那麼降低了層層之間的依賴關係,從而使數據更加準確

11.優化算法:牛頓法,共軛梯度法,擬牛頓

12.inception
1)inception的結構畫一下
2)inception裏面多通路並列有什麼作用
3)inception v1-v4的區別、改進
4)介紹一下momentum
5)inception網絡,主要用來解決什麼問題,如何減少參數量

13.分類、標籤
1)給你一個場景超市,需要上萬種物品目標定位檢測、識別,需要細粒度分類,如何處理
2)如何劃分一級標籤、二級標籤的?人工還是?
3)分類,既有河流,又有建築,怎麼做。多標籤識別怎麼做?
4)有個類別總是錯分到其他類怎麼辦
5)1000個視頻,無標籤,怎麼分類預測
6)數據中有20%的噪聲,標籤不準確,怎麼解決這個問題?
eg.找對噪聲不敏感的模型建模,or看predict的值,把接近cutoff值的圖拿出去看看

14.問答題+情景題
1)你認爲深度學習是最好的方法嗎?那你覺得哪些時候不能使用深度學習
給你一個烤箱,你需要識別烤箱中的食材,怎麼去做?
2)模型不好怎麼辦,效果不行,烤箱設備升級,照明、攝像頭位置等提高,但是原有的模型準確率卻下降了。怎麼辦
3)權重怎麼設置,做了哪些改進,提升
4)各種數據的channel是指什麼意思
5)如何評估模型
場景題,有很多正例,沒有負例,然後有很多未標註數據,儘可能的從這些數據中尋找負例(我是從聚類、最近鄰以及異常點檢測的思路去想。one-class-svm應該也是可以的)。場景題回答的好是很關鍵的,其餘的都可以背下來,但是隻有這部分纔會考你對算法的理解和對問題的處理方式。

15.anchor
1)anchor設置的意義?
2)anchor的正負樣本比是多少

16.圖像處理
1)霍夫變換、直方圖
2)相似度衡量尺度
3)圖像特徵提取方式
4)人臉識別,如何輸出標籤
5)mat申請一個圖像矩陣後怎麼釋放內存
6)圖像旋轉、旋轉矩陣、像素點怎麼填充
17.目標檢測算法、切割字符
1)rcnn系列到yolo,yolo與ssd的區別
2)ssd如果做道路上汽車的檢測應該怎麼改進比較合適
3)如何切割字符,網絡結構的選擇
4)faster rcnn
5)ROI層是怎麼實現的,怎麼做的映射
6)求感受野
答:1.你知道感知野嗎?什麼作用?你知道卷積的作用嗎?你用過池化層嗎?有哪些?
當時一臉懵逼,感知野是神馬啊?最後再次確認了感知野其實就是在多個kernel做卷積的時候的窗口區域,就是3個33等於1個77的感知大小。
卷積的作用是提取特徵,前面的卷積提取類似於人眼能識別的初步特徵,後面的卷積是能夠提取更加不容易發現但是真實存在的特徵。
Pooling 用過,max pooling, average pooling, global average pooling。再問這個兩個分別有什麼用?
max pooling我蠢到說提取最有特徵的特徵,其實就是最具有代表性的特徵;average pooling提取的是比較general 的特徵;global average pooling用來分類的,因爲後面網絡的加深,full connected layer參數太多了,不容易訓練,爲了快速準確得到結果,採用global average pooling,沒有參數,但是得到的分類效果跟FC差不多。
7)邊緣檢測算法sobel算法,拉普拉斯算子、canny算子

17.傳統的視覺算法
1)sift、orb、S3D
2)圖像的特徵提取有哪些算法,適用範圍、優缺點嗎?

18.PCA
1)SVD分解
2)二維平面,一堆散點,找一個條擬合的直線
3)二維平面,一堆散點,找分佈函數

19.爬蟲講講原理、深度學習模型、遷移學習、視頻分類難點有哪些
20.HMM與CRF的原理,差別,是全局最優還是局部最優以及爲什麼。
21.你知道attention起源是用在哪裏?pixel還是frame,是soft還是hard
22.那untrimmed和trimmed,你認爲untrimmed的難點是什麼?
23.監督信息是什麼?無監督學習瞭解哪些?
24.action proposal?
25.小網絡mobilenet、shuffleNet怎麼實現
26.蒙哥特洛方法
27.GAN、DCGAN、opencv、pre train
28.BM25
29.如何構建倒排索引?如何加速查詢,WAND算法細節?倒排索引的log時間合併?如何評價一次query,設計一個機器學習模型,如何設計這樣的模型,如何提取feature,用什麼模型 ?如何做查詢補全 Trie?設計一個查詢緩存?如何對倒排索引進行空間壓縮,我先說了OptPForDelta?
30.如何選擇最優分裂點,抽樣,然後算
31.闡述word2vec的原理,爲何使用哈弗曼樹,如何構建哈夫曼,負採樣的原理。
32.對於一個取值較多的類別變量在不能進行onehot的情況下如何使用
33.ID3樹用什麼指標選擇特徵
34. boosting和bagging在不同情況下的選用
35. DBSCAN原理和算法僞代碼,與kmeans,OPTICS區別
36. EM算法推導,jensen不等式確定的下界
37. xgboost和lightgbm的區別和適用場景
38. DNN的梯度更新方式
39. apriori,KM算法,匈牙利算法,模擬退火,貪婪,蟻羣對比,
40. xgb,rf,lr優缺點場景
41. 是否寫過udf,問udaf,udtf區別和一些細節
42. 問推薦算法,fm,lr,embedding
43. 算法題,10億個32位正整數,求不同值,只給1GB內存
44. 算法題: topK給出3種解法
推薦系統的大概步驟,解決冷啓動
45. 用mapreduce實現10億級以上數據的kmeans
46. rf和gbdt基分類器區別,裏面的決策樹分別長啥樣,怎麼剪枝
47. lightgbm優勢,Wod2vec公式 ,FM公式 ,LR公式,softmax公式
48. 神經網絡爲啥用交叉熵。 交叉熵公式
49. 注意力公式,注意力模型的原理
50. 特徵如何降維
51. 決策樹有哪些選擇最優劃分節點的方法?有了信息增益爲什麼還提出了增益比?
52. 模型評價標準,RMSE\ROC\AUC等等
53. 決策樹分類和迴歸時候有哪些區別
54. 介紹阿爾法狗的原理
55. 膠囊網絡
56. 推薦算法
57. 分類模型評價標準有哪些?追問,AUC可以用於多分類模型麼?
58. LR和SVM的區別,當聊到損失函數,問分別是什麼?hinge損失函數裏面的z是什麼?
59. 決策樹裏面的分類樹怎麼選擇劃分屬性,給了兩個屬性分佈情況,問選擇哪個?
60. 決策樹做迴歸時候劃分點怎麼選擇?
61. LSTM對於RNN的改進地方在哪?解決了RNN的什麼問題?(梯度彌散)
62. 那麼RNN的梯度爆炸怎麼解決?
63. LSTM的結構,裏面的遺忘門是一個數值還是向量?維度是多少?
64. 補充一個還有LSTM你用的優化方法是哪個,我說是Adam,他問還有哪些,我說SGD等等,他問GD和SGD的區別了
65. 解釋一下AUC(ROC的面積),從概率上面的解釋一下?
66. 解釋一下交叉熵
67. 解釋一下模型訓練裏面的偏差和方差對於訓練的意義?
68. 用了gcc沒?
69. bagging和boosting的區別
70. 手推邏輯迴歸
71. 場景分析題,如何對新聞進行實效性分析,怎麼挖特徵
72. lstm.每個門的公式還會寫嗎?
73. 特徵選擇,特徵工程,隨機森林是怎樣重要篩選特徵
74. RF/XGboost/GBDT區別,樹模型如何處理缺失值和連續值,模型融合stacking
75. 用過什麼聚類算法, 什麼時候需要用聚類?
76. 神經網絡瞭解過嗎, 講一下權值共享
77. 生成式模型與判別式模型的區別?
78. 貝葉斯是什麼?
79. bn爲什麼能加快收斂速度。bn解決了什麼問題?bn是怎麼計算的?基於什麼計算的?訓練和測試的時候有什麼不同?測試時候的均值和方差是怎麼來的?
80. 池化層的作用?池化層反向傳播的時候是怎麼計算的?
81. 神經網絡不斷髮展的趨勢是什麼?向着什麼方向發展?
82. 正則化有哪些方法?
83. 爲什麼輸入網絡之前數據要做歸一化?
84. 如何加快收斂速度。
85. SVM爲什麼能夠求解對偶問題,求解對偶問題爲什麼和原問題一樣?爲什麼要求解對偶問題?svm的公式是什麼?如果線性不可分怎麼辦?
86. kkt條件具體是什麼?
87. 極大似然函數和極大後驗函數是啥?
88. relu有什麼缺點。
89. 具體解釋adam,二階矩是什麼?爲什麼要用二階矩?
90. 凸函數是什麼,有什麼良好的性質?極值是什麼?
91. k個獨立高斯同分布隨機變量的結果是?
92. 推導softmax的梯度,和tanh的梯度(求導~)
93. 特徵與模型的相關性如何計算與表示;
94. 深度學習特徵的hash搜索算法時間複雜度;
95. lightgbm的特性以及學習函數;
96. Adaboost學習策略;
97. 決策樹種類以及分裂方式;
98. RF與lightgbm的區別;
99. precision和recall的定義和公式;
100. 不平衡數據集的適用指標有哪些;
101. AUC、ROC的定義、實際意義、畫法; 畫ROC曲線,依照曲線上某點解釋意義;
102. 除了修改mercy,還可以用哪些方法來處理不平衡數據集;
103. 寫貝葉斯公式,解釋先驗、似然、後驗;
104. 寫vc dimension的公式,解釋其意義、作用;
105. 簡單介紹神經網絡和CNN,介紹一下CNN對NN的改進之處;
106. 介紹inception、VGG、Resnet;
107. 爲什麼VGG要使用小的kernel代替大kernel;
108. 支持向量機SVM:在整體框架上,首先要知道SVM的學習策略是間隔最大化,可形式化爲一個凸二次規劃,等價於正則化的hinge損失函數的最小化問題,最後通過SMO方法解決接下來可根據李航的統計學習方法或者周志華的機器學習的SVM章節從頭開始回憶細節。可根據以下問題串聯算法原理細節。
109. 函數間隔和幾何間隔的區別? 分類超平面可表示爲wx+b,y爲分類類別(1/-1),其中函數間隔(function margin)爲y(wx+b),可代表距離超平面的遠近即爲對樣本分類的確信程度。此時會顯易見想到如果成比例改變w,b,雖然沒有改變分離超平面但是會增加函數間隔,所以需要對分離超平面進行規範化即除以||w||,得到幾何間隔。
110. 怎麼得到svm目標函數?基本思想爲相近樣本點使其最大間隔化,這樣確保距離超平面很近的點能有足夠大的區分度。即爲最大化樣本(xi,yi)之間的最小几何間隔。實際上以上思想是對數據結構化分佈做了描述。
111. 什麼是kkt條件? 什麼是支持向量? 將含由不等式的約束問題通過拉格朗日法得到了無約束問題,此時得到了KKT條件,通俗來將有以下幾個條件
(1)拉格朗日式L對各個參數求導爲0
(2)等式約束f(xi)爲0
(3)拉格朗日系數alpha>=0
(4) 拉格朗日系數alpha 與不等式約束式子g(xi)的乘積=0
可由以上可的,當alpha>0 時,g(xi) =0即其解x向量就是支持向量這裏同時說明支持向量機只依賴於alpha>0的樣本點,其他樣本點對其沒有影響,說明支持向量對噪音不敏感
4、 什麼是鬆弛變量?
所有訓練樣本並不是線性可分的,意味着不能滿足函數間隔 大於等於1。爲了提高容錯率使得函數間隔加上鬆弛變量 sigm且sigm>=0 。對於每個鬆弛變量需要支付代價,則改變目標函數+C sum(sigm),其中C爲懲罰係數,C越大表示誤分類的個數越少。
5、 爲什麼推到成對偶形式?
(1) 對偶問題更容易求解
(2) 能夠自然的引入核函數,進而推廣到非線性問題
6、核函數的作用是什麼?有哪些核函數?如何選擇核函數?
(1) 什麼是核函數?
特徵函數爲將歐式空間映射到希爾伯特徵空間, 核函數K(x,z)就爲特徵函數的內積。
核技巧爲只定義核函數K(x,z),不定義映射函數, 通過核函數直接計算映射函數的內積。
2 核函數的作用?
將低維的歐式空間映射到高唯特徵空間,將線性不可分在高維特徵空間中變得線性可分,在svm中拉格朗日對偶問題中的內積xixj 可以用核函數代替 。核函數可將兩組數據映射爲核空間內的兩個點,看兩個點之間的距離判斷是否爲同一分佈。
3 有哪些核函數?
1)高斯核函數RBF: 其嵌入空間(embedding space)非常豐富,使得原空間的不同分佈能夠映射到不同的點.
核函數能將連續函數空間填滿的kernel叫做general kernel.
2)多項式核函數:多項式函數不是general kernel. 因爲更高階的多項式不能由低階多項式的線性組合構成
3)字符串核函數(string kernel function):核函數不僅定義在歐式空間,還定義在離散數據集合. 字符串核函數是定義在字符串集合上的核函數
7、 模型的優缺點?
優點:
1 、基於結構風險最小化原則,正則化的合頁損失函數(當樣本被正確分類且函數間隔(確性度)>1 的時候損失
數爲0,否則損失函數爲1-y(wx+b)),有更好的泛化能力
2 、在對偶問題上可以使用核技巧,避免了高維空間的複雜映射
3 、SVM問題是凸二次規劃函數,可以求得全局最優解
缺點 1 、有較大的空間消耗,主要是儲存訓練樣本與核函數,適用於訓練小樣本
· 邏輯迴歸 LR
1、爲什麼可以用(要用)sigmoid 函數?
(1) 爲什麼可以用: Sigmoid函數定義了邏輯迴歸的條件概率,<w,x>的內積代表數據屬於正類(y=1)的確信度。<w,x>越大則x屬於正類的確信度越大。由於建模需求,需要將<w,x>從整個實數空間映射到條件概率P(y=1|w,x),Sigmoid 函數單調遞增能反映確信度,並且能夠將實數空間(-無窮,+無窮)映射到(0,1)區間內,能表示概率意義,更加直觀。
(2) 爲什麼要用:指數分佈具有最大熵的性質,即在滿足前提假設下的分佈,分佈越均勻越好.在邏輯迴歸中認爲P(Y|x)服從伯努利二分佈,並且P(y|x)=f(wx),可根據最大熵的性質推出sigmoid函數。
2、 邏輯迴歸對於多分類怎麼做?
P(y=k|x)的概率分佈,等價於softmax,計算在哪類的概率值高。
3、邏輯迴歸能否解決非線性分類?
(1)非線性超平面可通過變換替換,使得超平面關於新變量線性。
(2)邏輯迴歸不是wx+b這樣的形式,需要變換爲有內積的對偶形式,再利用核技巧。但LR對偶形式係數不稀疏,但是svm對偶形式係數是稀疏的,所以當線性可分會選擇svm
4、邏輯迴歸有哪些應用場景?
在特徵很多的場景,比如上億
· 決策樹
1、 如何生成決策樹?
決策樹思想:表示給定特徵條件下的條件概率分佈,分類即將該節點分到條件概率大的一邊,決策樹是一個遞歸選擇最優特徵的過程,特徵將訓練機劃分成子集,在當前條件下該狀態是最好的分類 1)若子集能被正確分類,則構造葉節點 2)若自己沒有完全被正確分類,則對自己選擇新的最有特徵(遞歸過程) 終止條件:直到所有訓練子集能被正確分類
2、 決策樹屬性選擇的方法?
1)信息增益
2) 信息增益比
3、什麼是ID3 ID4.5 CART?
特徵分裂準則:信息增益(熵H(Y)-條件熵H(Y|X) :即已知特徵X後Y的信息量減少的程度
ID4.5:由於信息增益選擇取值較多的特徵問題,使用信息增益比進行矯正
CART分類迴歸樹,迴歸樹特徵選擇標準爲最小化平方誤差,分類樹則爲吉尼係數,吉尼係數越大不確定性久越大。
4、 決策樹如何後減枝?
損失函數爲C(T)+a|T| ,其中C(T)是訓練數據的預測誤差,|T|爲葉子結點的個數,a爲權衡模型複雜度的係數。
對樹任意內部節點,計算以t爲單節點的損失函數 與 t爲根節點的損失函數,並且由此計算減枝後整體損失函數減少程度。
5、 決策樹的優缺點?
缺點:(1)噪音對決策樹生成影響很大,我們所希望的分類器對噪音是健壯的。( 2)決策樹是基於貪婪算法,難以找到全局最優
優點:(1)對數據類型和缺失值,離羣點魯 (2)可解釋性很強,抽取分類規則路徑
6、決策樹的適用場景
中小型數據集,適合小特徵量。若特徵量過多則可能被剪枝。
· 決策樹集成算法
1、 什麼是adaboost?
Adaboost是提升方法的一種特例,其算法主要思想爲:
(1) 、一個弱分類器在每一輪訓練過程中改變數據的權值分佈,即提高前一輪被分類器分錯類的樣本的權值
(2)、將多個弱分類器組合成一個強分類器,即加大分類誤差小的弱分類器的權值
算法模型爲加法模型,不能直接用SGD優化方法更新權重,故用前向分步算法更新權重。
2、 什麼是GBDT?
重點是新的模型是在之前模型的殘差往梯度方向走
3、什麼是xgboost?
(1) 爲什麼xgboost是對誤差進行建模?
xgboost是集成學習boosting框架下的學習算法,因爲特徵空間是用分段函數去逼近的,所以採用additive training去學習我們的模型。additive training 是第t輪的模型預測=第t-1輪的模型預測+新的函數f(t),新的函數就是我們所學習的,其中q爲葉子索引代表樹的結構,w爲葉子結點的權重,所以新函數爲特定的葉子結點的權重
(2) 如何學習新函數
通過最小化目標函數得出新函數,目標函數是基於結構風險最小化原則,目標函數=誤差擬合+模型複雜度
對誤差擬合函數二階泰勒展開,對模型複雜度包含(葉子結點數 和 葉子結點權重)
最後通過對目標函數求導 得到最優權重(該權重與一階與二階信息有關) 以及 已知權重下的目標函數(打分函數)
(3) 如何生成xgboost?
選取最優特徵,在最優特徵下尋找最佳屬性分割點,評判標準爲類似於吉尼係數形式,遞歸生成樹
(4)xgboost有哪些參數?
-學習率 eta :學習率越小,迭代次數越多。
-最小孩子權重 min-child-weight:控制葉子結點中二階導數和的最小值,即樣本的數量越少(由於h大約均在0.01附近),越容易過擬合
-最大深度 max_depth
-最大葉子結點數 max_leaf_node
-後剪枝參數gamma
-L2參數lambda
-L1參數alpha (控制模型複雜度)
-樣本隨機採樣 subsample;列採樣比例 colsample_bytree
(5)xgboost 有哪些優點?
-樹節點分裂方法,利用近似算法,二階導數爲權重值的分位數作爲切分點
-自動學習特徵缺失值的方向
-列抽樣(借鑑隨機森林),行抽樣
-學習率(eta)的shrinkage,增加迭代次數
-自定義損失函數
-特徵預排序
(6)xgboost和gbdt的區別?
1)GBDT是以CART作爲基分類器,xgboost支持線性分類器,其中線性分類器的xgboost相當於正則化的邏輯迴歸(分類問題)或
線性迴歸(迴歸問題)
2)GBDT的目標函數含有一階信息,xgboost的目標函數含有二階信息,最小化目標函數可得關於函數空間f(t)的梯度迭代或牛頓迭代,
牛頓法能更快的收斂。同時xgboost加入了正則項,控制了模型的複雜度。
(7) Lightgbm對xgboost有哪些改進?
-Histgram算法 將浮點型數值離散爲K個,統計離散值的累積量,遍歷直方圖找最優特徵分裂點
-直方圖加速:葉子結點的直方圖可由父親結點的直方圖與兄弟結點的直方圖做差得到
-leave wise 選取信息增益最大的葉子結點繼續分裂(容易過擬合,利用max_depth參數控制)
· 深度學習
(1) 什麼是卷積網絡?什麼是vgg16-19 ?
vgg16有同樣大小卷積核3
3和2*2池化層,最後三層爲全連結,全連結耗參數,卷積耗時間,在每次卷積後均有Relu激活函數進行非線性映射。
(2) 爲什麼多次小核要好於一次大核?
增強非線性映射
(3) 什麼是ResNet?
神經網絡存在退化現象(degradation),即會隨着深度增加達到飽和後,再持續增加深度準確率下降(測試集和訓練集準確率均下降,故不是過擬合).
爲了解決這個問題,引入了殘差但願,一個殘差單元學習的目標爲輸入和輸出的差別H(x)-x,而不是完整的輸入H(x)
分佈式
1.Hadoop
1)原理、搭建hadoop集羣的規模,進行過哪些操作
2)Hadoop 1x Hadoop2x
3)hadoop的序列化方式,Avro,parquet,transient關鍵字
2.HBase
1)HBase的優勢,爲什麼使用了HBase、設計rowkey?
2)wal是幹啥用的,爲啥要有這個東西存在,cap理論
3)hbase爲什麼查詢速度快
4)hive sql怎麼轉換成底層的MapReduce程序,以及shuffle的過程
5)region是怎麼回事,怎麼劃分的,怎麼定位的,寫操作是怎麼樣的,什麼情況下會刷寫?HBase region切分後數據是怎麼分的?
6)爲什麼項目選用hbase
7)Hbase讀寫流程,數據compact流程
3.HDFS
1)HDFS寫數據過程介紹
2)hdfs文件上傳流程
3)hdfs的容錯機制
4)client和HDFS文件的讀寫過程,延遲太高,怎麼解決
5)這個就要了解的詳細點,是怎麼存數據的,怎麼對數據分塊的,怎麼讀取數據的,都有什麼控制的節點,各自都是做什麼用的等等。斷電的話怎麼辦,哪些數據丟失
6)Hdfs讀寫流程,數據checkpoint流程
4.Hive
1)改造hive表後怎麼進行數據一致性校驗的,有沒有自動化流程
2)怎麼解決hive數據傾斜問題,混洗是幹啥的,如何解決數據傾斜
3)Hivesql怎麼轉化爲MapReduce任務
5.MapReduce
1)MapReduce的過程,map,shuffle,reduce這些
2)map階段運行特別慢怎麼辦
3)分片怎麼讀的,爲什麼用快排,換別的行不行,多路歸併怎麼實現的,環形緩衝區怎麼實現的。
6.yarn
1)yarn的結構、搶佔
2)yarn的狀態機和epoll
3)yarn的公平調度器和容量調度器和FIFO
4)yarn在什麼層面調度,和k8s和mesos有什麼區別
5)yarn裏面機器崩了,怎麼讓任務接着算
7.Spark
1)spark架構、程序的運行流程、調優
2)mysql、spark中的join原理。
3)spark中幾種partitioner、水塘抽樣?
4)spark工作機制,哪些角色,作用
5)spark yarn模式下的cluster模式和client模式有什麼區別
6)一個application提交運行的過程,畫圖?介紹Spark,client提交application後,接下來的流程,driver,yarn怎麼通訊
7)spark怎麼劃分stage,rdd的寬依賴和窄依賴,spark的調度過程,TaskScheduler如何調度任務的?task資源分配、任務調度、master計算資源分配?spark rdd、dataframe、dataset區別 ?spark裏面有哪些參數可以設置,有什麼用
8)Spark的shuffle是什麼樣的,怎麼優化的。
9)Hadoop的MR和Spark有什麼區別,爲什麼Spark有優勢?兩者的代碼風格?
Sparkshuffle和hadoopshuffle原理、對比?
10)手寫word count
11)RDD的懶加載怎麼回事,RDD怎麼更新,RDD都有什麼操作,區別是?
12)groupbykey,reducebyke有什麼區別。
13)分區的算法,池塘抽樣等。
14)Spark standalone模型、yarn架構模型(畫出來架構圖)
15)Spark算子(map、flatmap、reducebykey和reduce、groupbykey和reducebykey、join、distinct)原理
16)Sparksql自定義函數、怎麼創建dateframe
17)Sparkstreaming項目多久一個批次數據
18)hashpartitioner與rangePartitioner的實現
8.hashMap和hashTable
1)介紹hashMap 和hashTable,有什麼區別
2)Hashmap 擴容
3)hashmap的底層和hashmap怎麼解決hash衝突
9.Zookeeper
1)Zookeeper 實現了cap的哪些
2)zookeeper怎麼保證原子性,怎麼實現分佈式鎖
3)原理、如何保證一致性的
4)zk是如何判斷session超時,connection超時的。如何觸發回調。
5)zookeeper是如何選舉新的Active Namenode
6)Zookeeper腦裂問題,HA中的選舉過程,如何防止腦裂,爲什麼需要fencing,SSH連不上怎麼辦?
10.Kafka源碼
1)kafka broker的源碼裏面的類,以及這個類的主要方法,用的什麼設計模式
2)數據接入的時候,怎麼往kafka topic裏面發的,用的什麼方式,起了幾個線程,producer是線程安全的嗎
3)kafka集羣有幾臺機器,怎麼確定你們項目需要用幾臺機器,有評估過嗎,吞吐量測過嗎
4)spark streaming是怎麼跟kafka交互的,spark streaming從kafka中讀數據的兩種方式,具體代碼怎麼寫的,程序執行流程是怎樣的,這個過程中怎麼確保數據不丟
5)kafka監控是怎麼做的,kafka中能徹底刪除數據嗎,怎麼做的
6)kafka如何保證高吞吐的,了不瞭解kafka零拷貝,具體怎麼做的
7)Kafka複製機制、分區多副本機制
8)kafka存儲模型與網絡模型
11.實時計算
1)時序數據庫opentsdb,跟其它的時序數據庫對比過
2)爲什麼用kafka stream做實時計算,而不是用spark或者flink,kafka sql和spark sql瞭解過嗎
12.海量數據的Count問題(單機),如果把大文件hash成不同的小文件,此時小文件裝不下某個key對應的數據,該怎麼辦
13.內存調度是什麼怎麼調度的,如果考慮CPU怎麼調度的。如何實現隔離的,Control group 和Namespace是怎麼回事
14.通信
1)RM和NM的交互,如何分配任務的
2)客戶端和NN的通信過程,和DN的通信過程
15.大CPU大內存,網卡超爛,如何優化? 強制本地化,選高壓縮的序列化格式,核心就是儘量減少網絡IO。
16.一個加載在內存裏的HashMap,Key和Value全是int,從硬盤讀進來只做查詢不做修改,不考慮查詢效率,儘可能提高空間效率,稍微考慮一下時間效率。
17.checkpoint的過程?各種分佈式計算框架的區別 ?flink?storm如何處理反壓,如何保證流的可靠性的?
18.大數據算法
1)10億個int查重,講思路,布隆過濾,mapreduce,bitmap,算法的複雜度說說
2)在一個不斷產生的流式數據中,如何保證每次取到的數據儘可能的隨機。
3)topk問題 :100個數,如何打亂,要求最亂。
計算機網絡
1.計算機網絡分層—ISO/OSI模型和TCP/IP協議簇模型

應用層 提供OSI用戶接口和服務
表示層 爲應用層進程提供格式化的表示和轉換數據服務。數據的壓縮,解壓縮,加密和解密等
會話層 管理不同主機上各進程間的對話
1)會話管理:允許用戶在兩個實體設備之間建立、維持和終止會話,並支持它們之間的數據交換。半雙工、單工、全雙工2)會話流量控制:提供流量控制和交叉會話功能。
3)尋址:使用遠程地址建立會話連接。域名地址
4)出錯控制:從邏輯上講,會話層主要負責數據交換的建立、保持和終止,但實際的工作卻是接收來自傳輸層的數據,並負責糾錯。會話控制和遠程過程調用均屬於這一層的功能。但應注意,此層檢查的錯誤不是通信介質的錯誤,而是磁盤空間、打印機缺紙等高級類的錯誤。
傳輸層 向用戶提供可靠的、端到端的差錯和流量控制,保證報文的正確傳輸。
1)傳輸連接管理:提供建立、連接和拆除傳輸連接的功能。提供“面向連接”和“面向無連接”兩種服務
2)處理傳輸差錯:提供可靠的“面向連接”和不可靠的“面向無連接”的數據傳輸服務、差錯控制和流量控制。
3)監控服務質量
網絡層 將數據分成一定長度的分組,將分組穿過通信子網,從信源選擇路徑後傳到信宿。路由選擇、擁塞控制。
1)尋址:MAC地址轉IP地址
2)交換:規定不同的交換方式。常見的交換技術有:線路交換技術和存儲轉發技術,後者包括報文轉發技術和分組轉發技術。
3)路由選擇
4)源節點到目的節點間流量控制,從而進行擁塞控制,差錯檢測
數據鏈路層 將數據分成一個個數據幀,以數據幀爲單位傳輸。有應有答,遇錯重發。

物理層

4.TCP連接需要幾次握手?幾次分手?爲什麼兩次握手不行
TCP連接需要三次握手,四次分手。這兩個數字是一定一定要記住的。
背後爲什麼要三次握手,爲什麼要四次分手,你可以去了解一下,如果能夠和面試官說出來會有加分,面試官不一定會問。

5.當你輸入域名訪問一個網站的時候,背後的過程是什麼?
這個問題是比較開放的。
第一步就是域名解析,域名解析的話你可以說一下域名緩存在哪些地方,然後如果你域名在本地沒有緩存的話,是如何通過DNS來進行域名解析的,如果你的DNS服務器上沒有保存那個域名,那你的DNS服務器將如何處理來得到這個域名的ip。
第二步就是說一下TCP連接的三次握手的過程。
其他拓展內容有很多可以說,看你知識儲備。例如你可以說通過CDN來進行訪問加速。也可以說目前網站基本上都是前後端分離的,訪問的時候會先訪問反向代理服務器進行負載均衡之類的

6.什麼是https協議?https協議用到了哪種密鑰?
https是在http上面套了一層ssl,用來實現安全連接。
用到的密鑰有對稱密鑰和非對稱密鑰。目前基本上大一點的網站,都會使用https,這裏面涉及的知識點也不是很多,但是過程相對來說會複雜一點,感興趣的話可以去看一下。
基本上就是有數字證書,然後把對稱密鑰作爲消息內容,通過非對稱密鑰來進行傳輸。之後雙方的通信就通過對稱密鑰來進行解密就行了。
7.什麼是socket?
socket是用來進行網絡通信的,java裏面已經有封裝好這個類了,分爲客戶端和服務器,通過ip+端口來進行訪問。
如果沒有用過socket的話,建議你到網上找一個demo,跟着寫一下,你基本上就知道socket怎麼用了,算是比較簡單的。

8.什麼是IO,什麼是NIO,什麼是AIO,什麼是netty框架?
如果我上面那個問題,你自己有到網上找一個例子去寫一下,你就會發現在socket在讀取消息的時候阻塞的。
這裏有一個概念,阻塞。如果你不知道什麼是阻塞函數的話,需要去了解一下。
NIO就是非阻塞IO,用來解決上面讀取消息的時候會阻塞的問題。在jdk1.4左右引入的,是通過selector、buffer、通道等組件來實現的,具體實現原理我覺得還是需要有所瞭解的。
AIO就是異步非阻塞IO。咱們上面說的NIO是同步阻塞IO。AIO是異步的,NIO是同步的。同步和異步是什麼區別我有點講不清楚,如果這個你不懂自己去查一下資料。異步基本上就是通過回調來實現的。AIO是在jdk1.7左右引入的,面試官問AIO一般也會問得比較少。
netty是用來實現非阻塞IO的一個框架,這個作爲拓展點,感興趣可以去了解一下。我在面試阿里的時候被問到過,其他公司還沒問過。
9.虛擬內存,底層如何實現
10.對UDF的理解,寫UDF的目的,代碼怎麼寫的
數據結構
左神講解、劍指offer和leetcode
算法題中的重點應該是動態規劃,主要是因爲動態規劃如果你能夠找得到狀態轉移方程的話,那麼代碼行數會比較少的。
最簡單的就是各種排序,難一點就是各種劍指offer的類型題,跟深入一些的話,動態規劃,消費者生產者模式,手寫一個線程池等等
1.數組和鏈表
1)什麼時候適合插入,什麼時候適合查找,爲什麼?插入和刪除用鏈表還是數組?
2)從求組中找出唯一出現一次得數
3)如何最快的在循環有序數組中查找某個值
4)有一個數組,
(1)其中有一個數出現次數超過半數,找到這個數?
(2)其中有兩個數出現次數都超過了30%,找到這兩個數?
5)鏈表反轉,鏈表排序
6)最大和子數組
7)二維數組中的查找
8)鏈表中環的入口,鏈表找公共節點,鏈表找環
9)求數組中連續子數組的最大和
10)兩個數組,找全局中間數那個
11)最大連續子數組
12)數組有序,但是循環右移了幾位,問新數組中原數組起始位子的下標是多少
13)給數組,找到加起來是100的一組數
14)數組n個正整數,每個數值不超過n-1,有一個重複的數,找出那個重複的數
15)有一個數target,一個數組,數組中兩個數的和是這個target,請找到這兩個數
16)給定一個單鏈表,一個數x,然後你把這個單鏈表改成前面是比x小,後面是大於等於x的順序,然後每個部分仍然保持原來鏈表的順序
17)單鏈表判斷是否有環,以及判斷環入口
18)二維有序數組的二分查找某個數
19)合併兩個無序鏈表成爲有序鏈表
20)找相交鏈表的交點
21)兩個有序數組,求其中位數,然後改進時間複雜度
22)有序數組的二分查找(重複數字返回第一個)
23)兩條鏈表求第一個公共節點
24)數組的全排列
25)在一個有序數組中查找一個數,怎麼最快:二分法 O(logn)
26)在一個無序數組中查找第k大的數字,怎麼最快
2.樹
1)樹的先序遍歷,中序遍歷,後序遍歷
2)二叉樹,二叉搜索樹,二叉平衡樹,紅黑樹
3)如何判斷一個樹是否符合查找樹的規則
4)二叉樹前/中/後序遍歷的非遞歸,二叉樹的層次遍歷
5)二叉樹的最大高度,遞歸/非遞歸
6)求二叉樹的深度
7)廣度優先可以用來求二叉樹的深度嘛?
8)找一棵二叉搜索樹裏面給定兩個節點的公共祖先
9)二叉樹相加,是否子結構
10)判斷一個二叉樹是否爲二叉搜索樹。優化空間
11)給一個二叉搜索樹,和一個區間,刪掉不在區間內的節點
12)找到二叉樹每一層的最大值
3.圖
1)圖的廣度優先搜索算法,深度優先搜索算法。
2)圖的最短路徑問題
4.矩陣
1)二維矩陣相乘
2)二維矩陣,行、列皆有序,用O(M+N)查找一個數是否存在
3)求二位矩陣中連通1的最大區域
4)矩陣左上走到右下最短路徑多少種,如果中間有路障呢
5)矩陣找數 劍指offer原題
5.集合
1)如何最快的找出兩個集合中的交集,提出用哈希表的方法,問了這種方法的複雜度,然後又問如果這兩個集合都特別大,不能再內存中構建哈希表該如何做?
6.隊列/棧
1)用隊列實現棧的功能
2)兩個棧實現一個隊列(劍指原題)
3)如何實現一個棧,支持動態擴充
4)如何用鏈表實現一個棧,
5)如何實現一個棧,O(1)獲取最小值,get_min
6)堆和棧的訪問哪個更快
7.字符串
1)字符串中第一個只出現一次的字符
2)輸出字符串中字符的所有排列
3)輸入兩個字符串,輸出它們合併排序後的結果
4)n位字符串,循環右移m位,要求時間複雜度線性,空間複雜度爲o(n)
5)反轉字符串
6)字符串轉數字
8.排序問題和查找問題
1)歸併排序—小頂堆
2)二分查找
3)快排的時間複雜度和空間複雜度,最優情況和最差情況分別是多少,是穩定排序嗎,快排爲什麼快
答:快排的時間複雜度和空間複雜度?平均多少?最差多少?還有那些排序的時間複雜度是O(nlogn)?知道排序中的穩定性嗎?我:快排的時間複雜度我記很清楚是O(nlogn),空間複雜度是O(1),平均就是O(nlogn),最差是O(n^2),退化成了冒泡排序;此外還有時間複雜度爲O(nlogn)的還有堆排序和歸併排序;排序的穩定性知道是在排序之前,有兩個元素A1,A2,A1在A2之前,在排序之後還是A1在A2之前。
4)寫個快排,爲什麼要用三數取中法,好處是什麼
5)堆排序
6)25個小車 速度未知,只有五個跑道,如何最快選出最快的五個車
9.編程題
1)找出正整數中的偶數,並輸出相加後的數
2)輸入n和b,找到1到n中被b整除的個數
4)給年月日,判斷是方面第幾天。
5)小球從100米下落,每次回彈一半距離,第幾次落地後的總距離。
6)斐波那契數列,求數字數組中最長的斐波那契數列長度
7)被圍繞的區域,leetcode第130題
8)跳臺階問題
9)路徑問題,leetcode上63題和64題
10)使用最小花費爬樓梯,leetcode746題
11)輸入n個整數,找出其中最大的k個數
12)給一個整數數組和一個目標值,找出數組中和爲目標值的兩個數
13)最長公共子序列,最長迴文子串, 最大子序列和,判斷是否是迴文數,用兩種方法
14)一篇英文文章,統計單詞頻率,得到頻率最高的那個單詞
15)給一組整數,無序,在不改動原數組的基礎上,請找出1000個位置連續的數,使其和爲10萬。
16)那如果是不限制個數,只要使其和爲10萬就可以的數。
17)給10x10的棋盤,掃雷,隨機放置10個點作爲雷,如何保證隨機放置?
18)只有一條語句,判斷數n是不是2的冪
19)篩子六個面,每個面的概率不一樣,要求實現一個擲篩子的函數
20)手寫直方圖代碼
21)一個1-n的數,少了一個,找出來 ; 一個1-n,少了兩個數,找出來
22)計算1-100的質數和
23)給數字N,表示以後N對括號,求所有可能的合法括號,判斷括號是否合法
24)強盜搶東西
25)快速找到一個數字的開五次方根
26)一個數,0-1024,最多幾次找到這個數
27)52張牌,摸5張牌,求順子的概率,允許不同花色
28)翻轉中間由各種符號隔開的字符串
29)從右邊看被遮擋的二叉樹,求露出的node
30)名人問題,給出最優解法
31)單調函數求零點 (簡單的二分法)
32)編輯距離,求兩個數的漢明距離
33)TopK
34)IP地址 32位int存儲
35)01矩陣找出最大面積的由1組成的矩形(lintcode 510-hard)
36)I love you轉換成you love I?只允許申請O(1)的額外空間
37)不用math中的取平法差,判斷一個自然數是不是可以開方(時間複雜度儘量低)
38)求根號n
39)九宮格輸入法怎麼實現單詞提示(比如輸入a,提示advertise) 什麼數據結構實現?
40)ax=b,求x的方法。(求逆矩陣,如果不可逆怎麼辦。什麼情況下可逆。
41)硬幣2元,3元,5元,給定金額,輸出最少需要多少硬幣
42)00!末尾有幾個0
43)矩陣迷宮問題(動態規劃)
44)一萬個數去排序,用什麼方法比較好,隨機順序。當N很小時,快速排序慢,歸併排序快,N很大時,無序,堆排序快,有序,快速排序快
45)寫一個buffer,帶有讀和寫操作,寫是從每次讀的後一個位置開始?寫完後開始詢問如何保證線程安全,寫一下?如何實現寫讀安全,兩個讀的時候不加鎖
46)寫一個實際場景的算法,trigger和alarm的時間關係
47)兩個語料庫,一個千萬級別,一個萬級別,返回萬級別中的詞條有沒有出現在千萬級別的語料庫中,考慮時間複雜度空間複雜度等,詞典樹(多叉樹)
48)循環移動,一個數組,給定移動第幾位,以及右移多少位,若移動到數組尾部則從頭來
49)數組查找題,升序數組,旋轉一下,在旋轉數組中查找有沒有目標數字,二分法
50)給定一個字符串,給定一個很多子串的集合,求滿足能完整無重疊的拼成字符串的所有集合?題修改爲求用最小子集的拼成字符串的集合
10.智力題
1)8升水,有一個5L的杯子和3L的杯子,怎麼得到4升水
2)一頭母牛每年生一頭小母牛,每頭小母牛從第四年開始,每年也會生一頭小母牛,寫個公式求第n年會有多少頭牛
3)一張圓桌子,我和面試官輪流往桌子上放硬幣(隨便放),直到桌子放不下爲止,最後一個放硬幣的人贏,如果我先放,怎麼保證我肯定贏
4)50個紅球和50個黑球往兩個桶裏放,然後自己去抽,怎麼樣才能使抽到紅球的概率最高
5)54張牌,分3組,大王小王同在一組的概率
6)設隨機變量X1,X2,…Xn相互獨立,且都服從(0,θ)上的均勻分佈。求U=max{X1,X2,…Xn}數學期望
7)推理:三個連續數,大於6,其中兩個是質數,問第三個一定能被6整除
8)概率題,抽藍球紅球,藍結束紅放回繼續,平均結束遊戲抽取次數
9)概率題,5000個黑球5000個白球,每次摸兩個,如果同色,放一個黑球進去,如果不同色,放一個白球進去,求最後剩一個黑球的概率
10)1000瓶水有一瓶毒藥,需要幾隻小白鼠(10只,二進制編碼)
11)馬匹賽跑,25匹馬,5個跑道,沒有計時器,要找出前三名,最少要比多少場,答案是7
12)概率題,三個硬幣,一個正正,一個反反,一個正反,隨機取了一枚,拋出是正面,求背面也是正面的概率
11.設計題
1)一個停車場有一些大車位和小車位,大車只能停大車位,小車既能停大車位又能停小車位,實現這種場景下的調度系統
2)一個市有9個消防站,現在要新增3個消防站,這3個消防站應該放在哪裏
3)如何節省空間,存放最小值,如果有多個,不想多次存放
4)用map計數,但是需要O(logN)的複雜度查找;用數組計數,空間複雜度更大用數組計數,空間複雜度更大;設置結構體,除了value,還有一個count值,計數。即前面已經用了鏈表,節點結構體含有,value,count,next;
5)42億排好序的QQ號,找到其中某個
6)如何查找一個文件夾下所有文件的大小和,用什麼數據結構,我說用樹,然後遍歷,遍歷用後序比較節約時間,最後訪問根節點

12.動態規劃和分治的區別與聯繫,各自適應哪些情況
1)揹包問題:瞭解動態規劃麼,一個書包體積是V,有若干個m V的物體,最後讓書包最重,把方法和遞推公式說一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章