遞歸控制
數(shù)學(xué)歸納法:用戶證明斷言對所有自然數(shù)(非負整數(shù))成立
為什么在講解之前對數(shù)學(xué)歸納法做一個解釋:在程序中,我們接觸的都是數(shù)疲牵,在應(yīng)用中我們難免不會對數(shù)做一些運算承二。歸納法就是很好的解決方法。
什么是數(shù)學(xué)歸納法:
用戶證明斷言對所有自然數(shù)成立:
1.證明對于N=1成立
2.證明N>1時:如果對于N-1成立纲爸,那么對于N成立
應(yīng)用:求證:1+2+3+4+...+n = n(n+1)/2
1.1=1*2/2
2.如果1+2+3+...+(n-1)=(n-1)n/2
3.那么1+2+3+...+n=1+2+3+...+(n-1)+n=(n-1)n/2+n=n(n+1)/2
遞歸控制方法:
1亥鸠、嚴格控制遞歸函數(shù)作用,包括參數(shù),返回值
2负蚊、先一般神妹,后特殊
3、每次調(diào)用必須縮小問題規(guī)模
4盖桥、每次問題規(guī)脑煮Γ縮小程度為1
編碼一:給一個整數(shù)數(shù)組轉(zhuǎn)化為鏈表,創(chuàng)建 1 2 3 4 5
鏈表的結(jié)構(gòu)有二種格式:
單向鏈表:
雙向鏈表:
在這里我們創(chuàng)建一個實體讓他包裹一個鏈(單向鏈表)
//Node鏈表
public class Node {
private int values;
private Node nodeNext;
public Node(int values){
this.values = values;
this.nodeNext = null;
}
public int getValues(){
return values;
}
public Node getNodeNext(){
return nodeNext;
}
public void setNodeNext(Node nodeNext){
this.nodeNext = nodeNext;
}
使用方法
public static Node createLinkList(List<Integer> data){
if (data.isEmpty()) { //特殊判斷
return null;
}
Node firstNode = new Node(data.get(0));
Node nextNode = createLinkList(data.subList(1, data.size()));//遞歸控制
firstNode.setNodeNext(nextNode);
return firstNode;
}
Java異常
Error和Exception的區(qū)別
1揩徊、error:程序無法處理的系統(tǒng)錯誤腰鬼,編譯器不做檢查
2、exception:程序可以處理的異常塑荒,捕獲后可能恢復(fù)
RuntimeException
1熄赡、NullPointerException 空指針異常
2、classCastException 類型轉(zhuǎn)換異常
3齿税、IllegalArgumentException 傳遞非法參數(shù)異常
4彼硫、IndexOutOfBoundsException 數(shù)組下標越界異常
5、NumberFormatException 數(shù)字格式異常
非RuntimeException(需要捕獲)
1凌箕、ClassNotfoundException 找不到指定class的異常
2拧篮、IOException IO操作異常
Error
1、noClassDefFoundError 找不到class定義的異常
2牵舱、stackOverflowError 深遞歸導(dǎo)致棧被耗盡拋出的異常
3串绩、OutOfmemoryError 內(nèi)存溢出異常
在異常中,如果catch中有返回程序芜壁,會優(yōu)先執(zhí)行finally中的程序
Java異常處理的原則
具體明確:跑出的異常應(yīng)能通過異常類名和message準確說明異常的類型和產(chǎn)生異常的原因礁凡;
提早拋出:應(yīng)盡可能早的發(fā)現(xiàn)并拋出異常,便于精確定位問題慧妄;
延遲捕獲:異常的捕獲和處理應(yīng)盡可能延遲顷牌,讓掌握更多信息的作用域來處理異常。
Java集合框架
在Java集合框架中塞淹,我們主要關(guān)注的是List,Set.這也是面試過程中常問到的問題窟蓝。
數(shù)據(jù)結(jié)構(gòu)考點
數(shù)組和鏈表的區(qū)別:
不同:1、鏈表是鏈式的存儲結(jié)構(gòu)饱普;數(shù)組是順序的存儲結(jié)構(gòu)运挫。
2、鏈表通過指針來連接元素與元素费彼,數(shù)組則是把所有元素按次序依次存儲滑臊。
3口芍、鏈表的插入刪除元素相對數(shù)組較為簡單箍铲,不需要移動元素,且較為容易實現(xiàn)長度擴充鬓椭,但是尋找某個元素較為困難颠猴。
4关划、相同:兩種結(jié)構(gòu)均可實現(xiàn)數(shù)據(jù)的順序存儲,構(gòu)造出來的模型呈線性結(jié)構(gòu)翘瓮。
鏈表的操作:比如反轉(zhuǎn)贮折,鏈表環(huán)路檢測,雙向鏈表资盅,循環(huán)鏈表操作隊列调榄,棧的應(yīng)用:
二叉樹的遍歷方式及遞歸和非遞歸的區(qū)別:
紅黑樹的反轉(zhuǎn):
算法考點
內(nèi)部排序:遞歸排序,交換(冒泡呵扛,快速)每庆,選擇排序,插入排序
外部排序:
應(yīng)掌握如何利用有限的內(nèi)存配合海量的外部存儲來處理超大的數(shù)據(jù)集今穿,寫不出來也要有相關(guān)的思路
哪些排序是不穩(wěn)定的缤灵,穩(wěn)定以為著什么:
穩(wěn)定:
冒泡排序是通過不停的遍歷,以升序為例,如果相鄰元素中左邊的大于右邊的則交換.碰到相等的時就不交換保持原位.所以冒泡排序是一種穩(wěn)定排序算法。
不穩(wěn)定:
快速排序是不穩(wěn)定的.舉例8 5 6 6 蓝晒。以8為基準,第一趟交換后最后一個6跑到第一位,8到最后.第二趟交換.這個6跑到5的位置.變成有序的了.兩個6位置變了,所以是不穩(wěn)定的腮出,最常見的也就是sort函數(shù)了。
不同數(shù)據(jù)集芝薇,各種排序最好或最差的情況:
如何優(yōu)化算法:
空間換時間
網(wǎng)絡(luò)架構(gòu)的發(fā)展過程
分布式
一個業(yè)務(wù)拆分成多個子系統(tǒng)胚嘲,部署在不同的服務(wù)器上
集群
同一個業(yè)務(wù),部署在多個服務(wù)器上