面試題阿里一面_第1頁(yè)
面試題阿里一面_第2頁(yè)
面試題阿里一面_第3頁(yè)
面試題阿里一面_第4頁(yè)
面試題阿里一面_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、# 數(shù)據(jù)結(jié)構(gòu)1. HashMap 的原理,數(shù)據(jù)結(jié)構(gòu)?- 底層使用哈希表(數(shù)組 + 鏈表),當(dāng)鏈表過(guò)長(zhǎng)會(huì)將鏈表轉(zhuǎn)成復(fù)雜度內(nèi)查找樹(shù)以實(shí)現(xiàn) O(logn) 時(shí)間1. 講一下 HashMap 中 put 方法過(guò)程?1. 對(duì) Key 求 Hash 值,然后再計(jì)算 下標(biāo)。1. 如果沒(méi)有碰撞,直接放入桶中,1. 如果碰撞了,以鏈表的方式到后面,1. 如果鏈表長(zhǎng)度超過(guò)閥值(TREEIFY_THRESHOLD = 8),就把鏈表轉(zhuǎn)成樹(shù)。1. 如果節(jié)點(diǎn)已經(jīng)存在就替換舊值1. 如果桶滿了(容量 * 加載因子),就需要 resize。1. HashMap 中 hash 函數(shù)怎么是是實(shí)現(xiàn)的? 還有哪些 hash 的實(shí)現(xiàn)

2、方式?1. 高 16bit 不變,低 16bit 和高 16bit 做了一個(gè)異或1. (n - 1) & hash - 得到下標(biāo)1. 還有哪些 Hash 實(shí)現(xiàn)方式: 可以參考之前的博客 Effective Java 學(xué)習(xí)筆記 -hashCode()(./reading-notes/Effective-Java.md)1. HashMap 怎樣解決,講一下擴(kuò)容過(guò)程,假如一個(gè)值在原數(shù)組中,現(xiàn)在移動(dòng)了新數(shù)組,位置肯定改變了,那是什么定位到在這個(gè)值新數(shù)組中的位置,- 將新節(jié)點(diǎn)加到鏈表后,- 容量擴(kuò)充為原來(lái)的兩倍,然后對(duì)每個(gè)節(jié)點(diǎn)重新計(jì)算哈希值。- 這個(gè)值只可能在兩個(gè)地方,一個(gè)是原下標(biāo)的位置,另一種是在下

3、標(biāo)為 的位置。1. 拋開(kāi) HashMap,hash有那些解決辦法?- 開(kāi)放定址,鏈地址法1. 針對(duì) HashMap 中某個(gè) Entry 鏈太長(zhǎng),查找的時(shí)間復(fù)雜度可能達(dá)到 O(n),怎么優(yōu)化?- 將鏈表轉(zhuǎn)為樹(shù), JDK1.8 已經(jīng)實(shí)現(xiàn)了。1. 數(shù)組和 ArrayList 的區(qū)別;1. 數(shù)組可以包含基本類(lèi)型和對(duì)象類(lèi)型,ArrayList 只能包含對(duì)象類(lèi)型1. 數(shù)組大小固定,ArrayList 大小可以動(dòng)態(tài)變化1. ArrayList 提供了的特性(addAll、removeAll)。1. Arraylist 如何實(shí)現(xiàn)排序- Collections.sort(List list);- sort(Li

4、st list, Comparator c);1. HashMap1. 數(shù)組 + 鏈表方式1. 默認(rèn)容量: 16(2n 為宜,若定義的初始容量不是 2n,容量會(huì)定義為大于該初始容量的最小 2n)- 例如:初始容量為 13,則真正的容量是 16.1. put:1. 索引計(jì)算: (key.hashCode() (key.hashCode() 16) & (table.length - 1)1. 在鏈表中查找,并鏈表長(zhǎng)度,若鏈表長(zhǎng)度達(dá)到了 TREEIFY_THRESHOLD(8),則將該鏈轉(zhuǎn)成樹(shù)。1. 若在鏈表中找到了,則替換舊值,若未找到則繼續(xù)1. 當(dāng)總元素個(gè)數(shù)超過(guò)容量*加載因子時(shí),擴(kuò)容為原來(lái) 2

5、 倍并重新散列- (元素的下標(biāo)要么不變,要么變?yōu)椤驹聵?biāo)+原容量】)。1. 將新元素加到鏈表尾部1. 線程不安全1. HashTable1. 數(shù)組 + 鏈表方式1. 默認(rèn)容量: 11(質(zhì)數(shù) 為宜)1. put:1. 索引計(jì)算 : (key.hashCode() & 0 x7F)% table.length1. 若在鏈表中找到了,則替換舊值,若未找到則繼續(xù)1. 當(dāng)總元素個(gè)數(shù)超過(guò)容量*加載因子時(shí),擴(kuò)容為原來(lái) 2 倍并重新散列。1. 將新元素加到鏈表頭部1. 對(duì)修改 Hashtable共享數(shù)據(jù)的方法添加了 synchronized,保證線程安全。1. HashMap ,HashTable 區(qū)別1.

6、默認(rèn)容量不同。2. 索引計(jì)算方式不同。3. HashMap 特有的將過(guò)長(zhǎng)鏈表轉(zhuǎn)換為樹(shù)。4. 新元素的位置不同。5. 線程安全性1. HashMap、ConcurrenshMap 區(qū)別。1. 索引計(jì)算消除了最的影響1. 默認(rèn)容量: 16(若定義了初始容量(c),容量會(huì)定義為大于(c + (c 1) +1) 的最小 2n)- 例如:初始容量為 13,則真正的容量是 32.1. 線程安全,并發(fā)性能較好- 并發(fā)性能好的原因是 ConcurrenshMap 并不是定義 synchronized 方法,而是在鏈表頭上同步,不同的鏈表之間是互不影響的。1. ConcurrenshMap 原理1. 最大特點(diǎn)是

7、引入了 CAS(借助 Unsafe 來(lái)實(shí)現(xiàn)【native code】)1. CAS 有 3 個(gè)操作數(shù),內(nèi)存值 V,舊的預(yù)期值 A,要修改的新值 B。當(dāng)且僅當(dāng)預(yù)期值 A和內(nèi)存值 V 相同時(shí),將內(nèi)存值 V 修改為 B,否則什么都不做。1. Unsafe 借助 CPU 指令 cmpxchg 來(lái)實(shí)現(xiàn)1. 使用實(shí)例:1. 對(duì) sizeCtl 的控制都是用 CAS 來(lái)實(shí)現(xiàn)的1. sizeCtl :默認(rèn)為 0,用來(lái)控制 table 的初始化和擴(kuò)容操作。 - -1 代表 table 正在初始化 - N 表示有 -N-1 個(gè)線程正在進(jìn)行擴(kuò)容操作 - 如果 table 未初始化,表示 table 需要初始化的大小

8、。- 如果 table 初始化完成,表示 table 的容量,默認(rèn)是 table 大小的 0.75 倍,居然用這個(gè)公式算 0.75(n - (n 2))。1. CAS 會(huì)出現(xiàn):ABA- 對(duì)變量增加一個(gè)版本號(hào),每次修本號(hào)加 1,比較的時(shí)候比較版本號(hào)。1. TreeMap 和 TreeSet 區(qū)別原理- TreeSet 底層是 TreeMap,TreeMap 是基于樹(shù)來(lái)實(shí)現(xiàn)的。1. 如果想實(shí)現(xiàn)一個(gè)線程安全的隊(duì)列,可以怎么實(shí)現(xiàn)?1. 知道 LRU 嗎,20 分鐘基于 HashMap 實(shí)現(xiàn)一個(gè) LRU 算法,面試官給個(gè)地址,進(jìn)去寫(xiě)代碼,面試官看如何設(shè)計(jì)實(shí)現(xiàn)一個(gè)-LRUCache ? (1%E5%AE%

9、9E%E7%8E%B0%E4%B8%80%E4%B8%AALRU-Cache%EF%BC%9F/)1. 二叉樹(shù)的遍歷方式,前序、中序、后序和層序- 可以再寫(xiě)一篇了。1. 常見(jiàn)的排序算法時(shí)間復(fù)雜度(排序算法實(shí)現(xiàn)也要重點(diǎn)掌握)- 常見(jiàn)排序算法實(shí)現(xiàn)(Java)(./reading-notes/常見(jiàn)排序算法實(shí)現(xiàn).md)1.樹(shù)的特點(diǎn)及相比平衡二叉樹(shù)的優(yōu)點(diǎn)(先介紹各自特點(diǎn))?-樹(shù)1. 每個(gè)節(jié)點(diǎn)要么是紅色,要么是黑色。1. 根節(jié)點(diǎn)是黑色的。1. 所有的葉節(jié)點(diǎn)都是空節(jié)點(diǎn)(即null),并且是黑色的。1. 每個(gè)紅色節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)都是黑色。(從每個(gè)葉子到根的路徑上不會(huì)有兩個(gè)連續(xù)的紅色節(jié)點(diǎn))1. 從任一節(jié)點(diǎn)到其中

10、每個(gè)葉子節(jié)點(diǎn)的路徑都包含相同數(shù)量的黑色節(jié)點(diǎn)。- 平衡二叉樹(shù)1. 任何節(jié)點(diǎn)的兩個(gè)兒子的高度最大差別為一樹(shù)并不追求“完全平衡”它只要求部分地達(dá)到平衡要求,降低了對(duì)旋轉(zhuǎn)的要求,-從而提高了性能。1. B+樹(shù)的了解- 多分支結(jié)構(gòu)有效降低了樹(shù)的高度- B 樹(shù)的能使 B 樹(shù)保持較低的高度,從而達(dá)到有效避免磁盤(pán)過(guò)于頻繁的查找存取操作,從而有效提高查找效率1. Trie-Tree 原理及其應(yīng)用;- 字典樹(shù)- 特點(diǎn)1. 根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)外的每一個(gè)子節(jié)點(diǎn)都包含一個(gè)字符。1. 從根節(jié)點(diǎn)到某一個(gè)節(jié)點(diǎn),路徑上經(jīng)過(guò)的字符連接起來(lái),為該節(jié)點(diǎn)對(duì)應(yīng)的字符串。1. 每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符互不相同。是空間換時(shí)間-

11、 應(yīng)用1. 字符串檢索1. 詞頻統(tǒng)計(jì)# 算法題(劍指 Offer 上原題不少)1. 怎么查詢(xún)一個(gè)單向鏈表的倒數(shù)第五個(gè)節(jié)點(diǎn)1. 判斷鏈表是否成環(huán)1. 兩條相交的單向鏈表,如何求他們的第一個(gè)公共節(jié)點(diǎn)1. 在無(wú)序數(shù)組中找最大的 K 個(gè)數(shù)?1. 給定 n 個(gè)數(shù),尋找第 k 小的數(shù),同時(shí)給出時(shí)間復(fù)雜度1. 找一個(gè)數(shù)組中的第三大數(shù)1. 找出數(shù)組中第一個(gè)出現(xiàn) 2 次的數(shù),1. 求 1-N 中數(shù)字 1 的個(gè)數(shù)。1. 判斷一個(gè)數(shù)是不是丑數(shù);1. 求第 K 個(gè)丑數(shù);1. 10w 行數(shù)據(jù),每行一個(gè)單詞,統(tǒng)計(jì)出現(xiàn)次數(shù)出現(xiàn)最多的前 100 個(gè)。1. 一個(gè)文本文件,給你一個(gè)單詞,判斷單詞是否出現(xiàn)。1. 一進(jìn)去要求敲代碼二

12、叉排序樹(shù)的、刪除及查找1. 某海量用戶(hù),用戶(hù)擁有積分,積分可能會(huì)在使用過(guò)程中隨時(shí)更新?,F(xiàn)在要為該設(shè)計(jì)一種算法,在每次用戶(hù)登錄時(shí)顯示其當(dāng)前積分負(fù)整數(shù),且小于 100 萬(wàn);。用戶(hù)最大規(guī)模為 2 億;積分為非1. 判斷一棵二叉樹(shù)是否是 BST。1. 一副54,現(xiàn)在分成 3 份,每份 18 張,問(wèn)大小王出現(xiàn)在同一份中的概率是多少;1. 50 個(gè)白球 50 個(gè)紅球,兩個(gè)盒子,怎么放讓人隨機(jī)在一個(gè)盒子里抽到紅球概率最高。這個(gè)就是一個(gè)盒子放一個(gè)紅球,另一個(gè)盒子放 99 個(gè)球。1. logN 查找一個(gè)有序數(shù)組移動(dòng)后類(lèi)似 4 5 6 7 1 2 3 里面的一個(gè)數(shù)1. 0 n 連續(xù) n + 1 數(shù),現(xiàn)在有一個(gè)長(zhǎng)度

13、為 n 的數(shù)組存放了上面 n + 1 個(gè)數(shù)的其中 n 個(gè),找出哪一個(gè)數(shù)沒(méi)有被放進(jìn)數(shù)組1. 將M 個(gè)平均長(zhǎng)度為 N 的有序隊(duì)列組一個(gè)有序隊(duì)列1. 10 億條,找出前一萬(wàn)條重復(fù)率高的1. 對(duì)一萬(wàn)條數(shù)據(jù)排序,你認(rèn)為最好的方式是什么1. 假100 萬(wàn)個(gè)玩家,需要對(duì)這 100W 個(gè)玩家的積分中前 100 名的積分,按照順序顯示在中,要求是實(shí)時(shí)更新的。積分可能由做的任務(wù)和獲得的金錢(qián)決定。問(wèn)如何對(duì)著 100萬(wàn)個(gè)玩家前 100 名的積分進(jìn)行實(shí)時(shí)更新?- 除了前 100 名,后 100W-100 名玩家的積分,讓變化的積分跟第 100 名比較,如果比第100 名高,那就替換的原則。# Java 基礎(chǔ)1. Jav

14、a 的優(yōu)勢(shì)- 語(yǔ)法簡(jiǎn)單- 跨- 當(dāng)開(kāi)發(fā)規(guī)模膨脹到一定程度,Java 在規(guī)范、協(xié)作和性能調(diào)優(yōu)上還是占有很大優(yōu)勢(shì),在大型應(yīng)用,尤其是企業(yè)應(yīng)用上,Java 的地位仍然難以撼動(dòng)占幾個(gè)字節(jié)1.1. 如果變量在棧上,那么它占用一個(gè)棧單元(32-bits)1. 如果在堆上,那么就跟 JVM 的實(shí)現(xiàn)有關(guān)了1. 在 Oracle 的 JVM 實(shí)現(xiàn), 中每個(gè)元素占用一個(gè)字節(jié)(8-bits)1. Java修飾符權(quán)限的區(qū)別;- public 所有類(lèi)都可- protected 只允許包內(nèi)、子類(lèi)。- 默認(rèn) 只允許包內(nèi)- private 只允許類(lèi)內(nèi)1. String 是否可以繼承, “+” 怎樣實(shí)現(xiàn)?- String 是

15、final 類(lèi),不可繼承。- + 是通過(guò) StringBuilder(或 StringBuffer) 類(lèi),和 append 方法實(shí)現(xiàn)1. String , StringBuffer , StringBuilder , 區(qū)別, 項(xiàng)目中那里用到了StringBuilder或者 StringBuffer- String 不可變- StringBuffer,可變,線程安全- Stringbuilder,可變,線程不安全1. String 為啥不可變,在內(nèi)存中的具體形態(tài)?- String 使用 final char value 來(lái)存放字符序列。1. Comparable 接口和 Comparator 接

16、口實(shí)現(xiàn)比較- Comparable 是直接在被比較的類(lèi)來(lái)實(shí)現(xiàn)的- Comparator 則是在被比較的類(lèi)外部實(shí)現(xiàn)的1. Arrays 靜態(tài)類(lèi)如何實(shí)現(xiàn)排序的?- 雙軸快排1. 首先檢查數(shù)組長(zhǎng)度,如果比閥值(286)小,直接使軸快排1. 否則先檢查數(shù)組中數(shù)據(jù)的連續(xù)性,標(biāo)記連續(xù)升序,反轉(zhuǎn)連續(xù)降序,如果連續(xù)性好,使用 TimSort 算法(可以很好的利用數(shù)列中的原始順序)1. 否則使軸快排 + 成對(duì)排序1. Java 中異常機(jī)制。- Java 中所有異常都是 Throwable 的子類(lèi),他的直接子類(lèi)有兩個(gè),一個(gè)是 Error, 一個(gè)是Exception。- Error 一般表示 JVM 出現(xiàn)了嚴(yán)重問(wèn)題

17、,比如說(shuō)棧溢出或 OOM,- Exception 中異常分為兩類(lèi),- 一類(lèi)是 RuntimeException 表示運(yùn)行期間出現(xiàn)的錯(cuò)誤,比較常見(jiàn)的是空指針異常和數(shù)組下標(biāo)越界,出現(xiàn)這種異常一般是程序出現(xiàn)了邏輯錯(cuò)誤,也就是代碼有 Bug。- 另一類(lèi)是編譯時(shí)異常(除了 RuntimeException 以外的異常),常見(jiàn)的一般有IOException等, 出現(xiàn)這種錯(cuò)誤程序編譯會(huì)不通過(guò)。- 還有一種分類(lèi)方式是 checked exception 和 uncheck exception。unchecked exception包括 Error 和 RuntimeExcetion,checked excep

18、tion 指之前所說(shuō)的編譯時(shí)異常。1. Java 中異常怎么處理,什么時(shí)候拋出,什么時(shí)候捕獲;- 一般原則是提早拋出,延遲捕獲- 出現(xiàn)異常時(shí),若當(dāng)前無(wú)法處理則拋,否則捕獲異常,嘗試恢復(fù)。1. 說(shuō)一說(shuō)對(duì) java io 的理解- 按照使用的 IO 模型,大致可以分為三類(lèi):- BIO:JDK1.4 之前的阻塞 IO- NIO:JDK1.4 及以后的版本,非阻塞 IO- AIO:JDK1.7 之后,又叫 NIO.2,異步 IO- IO 總的來(lái)說(shuō)分為兩個(gè)階段,第一階段是等待數(shù)據(jù)到達(dá)內(nèi)核緩沖區(qū),第二階段是將數(shù)據(jù)從內(nèi)核緩沖區(qū)到用戶(hù)緩沖區(qū)。- 阻塞 IO 是兩個(gè)階段都保持阻塞狀態(tài)。- 非阻塞 IO 第一個(gè)階

19、段不阻塞,但是需要輪詢(xún)來(lái)查看第一階段是否完成,完成以后進(jìn)行第二階段,第二階段也是需要阻塞的。- IO 復(fù)用使用 select/poll,阻塞在這兩個(gè)系統(tǒng)調(diào)用上,而不是真正的 IO 操作上,這種方式的優(yōu)勢(shì)是可以同時(shí)多個(gè)文件描述符。檢查文件描述符是否就緒的工作是由select/poll 系統(tǒng)調(diào)用來(lái)負(fù)責(zé)的。Java 的 NIO 組合使用了IO 復(fù)用 + 非阻塞 IO 兩種 IO 模型。不過(guò) Linux 版的 JDK 底層使用的系統(tǒng)調(diào)用是 epoll,它使用的模型類(lèi)似與信號(hào)驅(qū)動(dòng)式 IO 模型,當(dāng) IO 就緒時(shí)會(huì)受到消息不需要自己去做輪詢(xún)工作所以,效率相比 select/poll 會(huì)好上很多。但是 ep

20、oll 的缺點(diǎn)是可移植性較差,是 Linux專(zhuān)有的系統(tǒng)調(diào)用,select/poll 就比較通用了。- 信號(hào)驅(qū)動(dòng)式 IO 在第一階段完成后發(fā)送信號(hào),該階段不阻塞,不輪詢(xún),然后阻塞進(jìn)行第二階段。- 異步 IO 在兩個(gè)階段都完成以后才發(fā)送信號(hào),數(shù)據(jù)是直接可用的。- 按照 IO 的對(duì)象,可以分為 4 類(lèi)。分別是:1. 基于字節(jié)操作的 I/O 接口:InputStream 和 OutputStream1. 基于字符操作的 I/O 接口:Writer 和 Reader1. 基于磁盤(pán)操作的 I/O 接口:File1. 基于網(wǎng)絡(luò)操作的 I/O 接口:Socket1. 知不知道 NIO- 三個(gè)特點(diǎn):1. Cha

21、nnels and Buffers / 通過(guò) ChannelsBuffers, 一個(gè) Channel 代表一個(gè)文件描述符-blocking IO/ 非阻塞 IO1./ 單線程,1. Selectorsnultiple Channels1. Java 鎖機(jī)制1. 重入鎖、對(duì)象鎖、類(lèi)鎖的關(guān)系1. 哪些方法實(shí)現(xiàn)線程安全?- synchronized,volatile,然后重點(diǎn)說(shuō)了下 volatile 在某些情況下可以實(shí)現(xiàn)線程安全,然后就把面試官注意力往 volatile 上引,因?yàn)?volatile 這個(gè)專(zhuān)門(mén)看了一下,果然,面試官馬上問(wèn)了 volatile。1. Java 中的同步機(jī)制,synchr

22、onized 關(guān)鍵字,鎖(重入鎖)機(jī)制,其他解決同步的方volatile 關(guān)鍵字 ThreadLocal 類(lèi)的實(shí)現(xiàn)原理要懂。1. Synchronized 和 lock 區(qū)別1. 鎖的優(yōu)化策略- 讀寫(xiě)分離- 分段加鎖- 減少鎖持有的時(shí)間- 多個(gè)線程盡量以相同的順序去獲取資源1. Java 線程阻塞調(diào)用 wait 函數(shù)和 sleep 區(qū)別和聯(lián)系,還有函數(shù) yield,notify 等的作用。- sleep 時(shí)線程的方法(讓出 CPU),wait 是對(duì)象的方法。1. 談?wù)劦?Java 反射的理解,怎么通過(guò)反射某各類(lèi)的私有屬性- 通過(guò)反射,可以獲取類(lèi)的運(yùn)行時(shí)結(jié)構(gòu)。- 反射 API 中有個(gè)方法 get

23、DeclaredFields()1. 動(dòng)態(tài)的原理- 動(dòng)態(tài)基于反射實(shí)現(xiàn),調(diào)用者通過(guò)對(duì)象來(lái)方法的時(shí)候,對(duì)象可以做相應(yīng)的處理,然后通過(guò)反射調(diào)用被對(duì)象的方法。1. 項(xiàng)目中都是用的框架,用過(guò) Servlet 嗎? Servlet 是單例嗎?多線程下 Servlet 怎么保證數(shù)據(jù)安全的?Servlet 的生命周期?- 一般是單例,用的都是 Servlet 的 service,其中一般不包含實(shí)例變量,只有共享代碼,所以一般是安全的,如果有實(shí)例變量的話可以使用 synchronized 關(guān)鍵字進(jìn)行加鎖。當(dāng)Servlet 實(shí)現(xiàn) SingleThreadM式。接口后,Tomcat 會(huì)為該 Servlet 建一個(gè)對(duì)

24、象池,這是享元模- 生命周期1. init 一般在 web 容器初始化,或第一次調(diào)用 servlet 時(shí)。1. service 提供服務(wù)1. destroy 終結(jié)1. 回收1. Thread 狀態(tài)有哪些- !(./res/java-thread-se.png)1. Java 實(shí)現(xiàn)線程的方式;哪種好;為什么好1. 單例模式的生命周期- 一般來(lái)說(shuō)單例模式創(chuàng)建的對(duì)象是由類(lèi)的 sic 變量著的,JVM 如果采用可達(dá)性分析算法來(lái)回收的話,該對(duì)象是不可能被回收的(從創(chuàng)建以后)。1. 繼承和多態(tài)的區(qū)別;1. Java8 的新特性。# Java 高級(jí)1. GC 算法,除了常見(jiàn)的算法,標(biāo)記整理,標(biāo)記清除算法,還

25、有哪些?- 增量算法。主要是收集線程與用戶(hù)線程交替執(zhí)行。也可以說(shuō)一邊執(zhí)行回收一遍執(zhí)行用戶(hù)代碼。但是這種方造成系統(tǒng)吞吐量下降。- 分代收集。這種方法沒(méi)有使用新算法,只是根據(jù)對(duì)象的特點(diǎn)將堆分為年輕代和老年代,年輕代使用算法,老年代使用標(biāo)記整理算法。1.收集器- !gc collectors(./res/gc-collectors.jpg)- |收集器|收集算法|收集區(qū)域|線程|停頓|特點(diǎn)|:-:|:-:|:-:|:-:|:-:|:-:|serial|算法|單線程|收集時(shí)必須停頓其他所有工作線程|簡(jiǎn)單高效|serial old|標(biāo)記整理|老年代|單線程|收集時(shí)必須停頓其他所有工作線程|PerNew|

26、算法|多線程|serial 的多線程版本|Server 模式下首選|parallel Scavenge|算法|多線程|收集時(shí)必須停頓其他所有工作線程|注重吞吐量,適合計(jì)算多|parallel old|標(biāo)記整理|老年代|多線程|收集時(shí)必須停頓其他所有工作線程|同 parallelScavenge|- 收集器搭配1. parallel Scavenge + parallel old /注重吞吐量的應(yīng)用1. CMS + PerNew /注重停頓時(shí)間的應(yīng)用,強(qiáng)交互環(huán)境/ 未來(lái)替代 CMS + PerNew1. G11. CMS(concurrent mark sp)并發(fā)收集、低停頓- !(./res/

27、jvm-cms-m.png)1. 初始標(biāo)記(CMS initial mark):僅僅只是標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)到的對(duì)象,速度很快,需要“Stop The World”。1. 并發(fā)標(biāo)記(CMS concurrent mark):進(jìn)行 GC Roots Tracing 的過(guò)程,在整個(gè)過(guò)程中耗時(shí)最長(zhǎng)。1. 重新標(biāo)記(CMS remark):為了修正并發(fā)標(biāo)記期間因用戶(hù)程序繼續(xù)而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分對(duì)象的標(biāo)記,這個(gè)階段的停頓時(shí)間一般會(huì)比初始標(biāo)記階段稍長(zhǎng)一些,但遠(yuǎn)比并發(fā)標(biāo)記的時(shí)間短。此階段也需要“Stop The World”。1. 并發(fā)清除(CMS concurrent sp)1.

28、 G1- 將整個(gè)Java 堆劃分為多個(gè)大小相等的獨(dú)立區(qū)域(Region),雖然還保留和老年代的概念,但的集合。和老年代不再是物理的了,而都是一部分 Region(不需要連續(xù))- 整體使用標(biāo)記整理,局部使用算法。- !(./res/jvm-g1-m.png)1. 初始標(biāo)記(Initial Marking) 僅僅只是標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)到的對(duì)象,并且修改 TAMS(Nest Top Mark Start)的值,讓下一階段用戶(hù)程序并發(fā)運(yùn)行時(shí),能在正確可以的 Region 中創(chuàng)建對(duì)象,此階段需要停頓線程,但耗時(shí)很短。1. 并發(fā)標(biāo)記(Concurrent Marking) 從 GC R

29、oot 開(kāi)始對(duì)堆中對(duì)象進(jìn)行可達(dá)性分析,找到存活對(duì)象,此階段耗時(shí)較長(zhǎng),但可與用戶(hù)程序并發(fā)執(zhí)行。1. 最終標(biāo)記(Final Marking) 為了修正在并發(fā)標(biāo)記期間因用戶(hù)程序繼續(xù)而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分標(biāo)記,虛擬機(jī)將這段時(shí)間對(duì)象變化程的 Remembered SetLogs 里面,最終標(biāo)記階段需要把 Remembered Set Logs 的數(shù)據(jù)合并到 Remembered Set 中,這階段需要停頓線程,但是可并行執(zhí)行。1. 篩選回收(Live Dounting and Evacuation) 首先對(duì)各個(gè) Region 中的回收價(jià)值和成本進(jìn)行排序,根據(jù)用戶(hù)所期望的 GC 停頓是時(shí)間來(lái)制定回收

30、計(jì)劃。此階段其實(shí)也可以做到與用戶(hù)程序一起并發(fā)執(zhí)行,但是因?yàn)橹换厥找徊糠?Region,時(shí)間是用戶(hù)可控制的,而且停頓用戶(hù)線程將大幅度提高收集效率。1. G1 vs CMS1.選擇哪個(gè)收集器是由回收的目標(biāo)來(lái)決定的,主要考慮以下幾點(diǎn):1. 吞吐量1. 停頓時(shí)間1. 堆容量1. G1 vs CMS- G1 基本不用配置,低停頓,用于大容量的堆。但是他犧牲了應(yīng)用程序的吞吐量和部分堆空間。- CMS 配置比較復(fù)雜,合理的低停頓,用于中等或更小的堆。- 所以當(dāng)你覺(jué)得配置 CMS 太難了,或你的堆在 2 G 以上,或你想要顯式的指定停頓時(shí)間那么你可以使用 G1。否則使用 CMS1. Java 內(nèi)存模型- 深入

31、理解 Java 虛擬機(jī)(./reading-notes/深入理解 Java 虛擬機(jī).md)1. 問(wèn) JVM 內(nèi)存分代機(jī)制(會(huì)問(wèn)分為那幾個(gè)代,各個(gè)代特點(diǎn)),分代回收的優(yōu)點(diǎn)(這個(gè)問(wèn)了很多次)。- 分為年輕代和老年代,年輕的對(duì)象生命周期短,基本是朝生夕死,所以需要頻繁的回收;老年的對(duì)象一般都能熬過(guò)多次 GC 所以他們不需要頻繁回收。分代收集利用了這種特點(diǎn),年輕代使用率相對(duì)還是不錯(cuò)的。算法,老年代使用標(biāo)記整理算法,所以總的來(lái)說(shuō)分代收集的效1. Java 虛擬機(jī)類(lèi)加載機(jī)制,雙親委派模型- 深入理解 Java 虛擬機(jī)(./reading-notes/深入理解 Java 虛擬機(jī).md)1. minC 和 F

32、ull GC 的觸發(fā)時(shí)機(jī)- minC: 當(dāng) eden 區(qū)滿以后會(huì)觸發(fā)。- Full GC:1. JVM 的一些特性比如分配擔(dān)保,大對(duì)象直接進(jìn)入老年代,長(zhǎng)期存活的對(duì)象進(jìn)入老年代等等都會(huì)不斷增加老年代的使用率,當(dāng)老年代空間一次 Full GC以支持下一次 MinC 時(shí)會(huì)觸發(fā)1. 當(dāng)用戶(hù)代碼調(diào)用 System.gc 時(shí),系統(tǒng)系統(tǒng)建議執(zhí)行 Full GC,但是否進(jìn)行是由 JVM 來(lái)決定的。1. JVM 中什么樣的對(duì)象是可以回收的,對(duì)象從新年代到老年代的轉(zhuǎn)移過(guò)程,JVM 哪些地方會(huì)溢出(除了程序計(jì)數(shù)器都有)1. GC roots 不可達(dá)的對(duì)象是可以回收的。- 棧中的的對(duì)象- 方法區(qū)常量的對(duì)象- 方法區(qū)靜

33、態(tài)域的對(duì)象- JNI的對(duì)象1. 轉(zhuǎn)移過(guò)程- 當(dāng)對(duì)象熬過(guò)一定次數(shù)的 GC 后,會(huì)被轉(zhuǎn)移到老年代- 當(dāng) Eden + From surviver 中存活對(duì)象過(guò)多,To surviver 區(qū)存放不下的時(shí)候,剩余的對(duì)象會(huì)進(jìn)入老年代1. Java 虛擬機(jī)的一些參數(shù)配置- 深入理解 Java 虛擬機(jī)(./reading-notes/深入理解 Java 虛擬機(jī).md)1. 什么情況會(huì)棧溢出- 如果線程請(qǐng)求的棧容量超過(guò)棧允許的最大容量的話, Java 虛擬機(jī)將拋出一個(gè)StackOverflow 異常1. JDK1.8 中 JVM 做了那些改變- 主要是撤銷(xiāo)了代,引入元空間(本地內(nèi)存)1. 常用 JVM 調(diào)優(yōu)工

34、具有哪些(Jsus,JStack,Jmap 等),有沒(méi)有調(diào)有經(jīng)驗(yàn).1. 知道 OOM 嗎,舉一個(gè) OOM 的例子- 內(nèi)存中加載的數(shù)據(jù)量過(guò)于龐大,如一次從數(shù)據(jù)庫(kù)取出過(guò)多數(shù)據(jù);- 啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)??;1. 介紹一下 Java 的強(qiáng)軟弱虛四種,問(wèn)什么時(shí)候使用軟- 一般 new 出來(lái)的對(duì)象都是強(qiáng),GC 不會(huì)回收強(qiáng)的對(duì)象- 軟:軟的對(duì)象不那么重要,當(dāng)內(nèi)存時(shí)可以被回收。非常適合于創(chuàng)建緩存。- 弱:只是一個(gè)對(duì)象,若一個(gè)對(duì)象的所有都是弱的話,下次 GC 會(huì)回收該對(duì)象。一般用在集合類(lèi)中,特別是哈希表。- 虛:一般用于對(duì)實(shí)現(xiàn)比較精細(xì)的內(nèi)存使用控制。對(duì)于移動(dòng)設(shè)備來(lái)說(shuō)比較有意義1. RPC 原理;- 你應(yīng)該知道

35、的RPC 原理(http:/92290/)# 三大框架1. Spring 主要是什么,回答 IOC 和 AOP,怎么自己實(shí)現(xiàn) AOP ?- IOC 的好處:阿里一面總結(jié) 12 題(阿里一面總結(jié).md)- 使用基于反射的動(dòng)態(tài)1. SprinP 用的哪一種- JDK 動(dòng)態(tài),這種是一般意義上的動(dòng)態(tài);用一個(gè)類(lèi)來(lái)間接調(diào)用目標(biāo)類(lèi)的方法。目標(biāo)類(lèi)如果實(shí)現(xiàn)了接口那就用這種方式。- cglib 動(dòng)態(tài)。通過(guò)框架轉(zhuǎn)換字節(jié)碼生成目標(biāo)類(lèi)的子類(lèi),并覆蓋其中的方法實(shí)現(xiàn)增強(qiáng),因?yàn)椴捎玫氖抢^承,所以不能對(duì) final 類(lèi)進(jìn)行方法。目標(biāo)類(lèi)沒(méi)有實(shí)現(xiàn)任何接口,就使用這種1. spring bean 初始化過(guò)程XML 資源,并,最終到B

36、ean Factory 中-1. spring bean 對(duì)象的生命周期- 當(dāng)一個(gè) bean 被實(shí)例化時(shí),它需要執(zhí)行一些初始化(init-method)使它轉(zhuǎn)換成可用狀態(tài)。同樣,當(dāng) bean 不再需要,并且從容器中移除時(shí),需要做一些清除工作(destroy-method)1. 講講 Spring 中 ApplicationContext 初始化過(guò)程。- ApplicationContext 的初始化重點(diǎn)是在 refresh 方法,其中最關(guān)鍵的幾步是:1. 創(chuàng)建 bean Factory1. 初始化消息源1. 初始化應(yīng)用事件器1. 初始化單例 bean1. SpringMVC 處理請(qǐng)求的流程-

37、!(./res/springmvc-flow.png)1. 收到用戶(hù)請(qǐng)求1. dispatcher Servlet 將請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的 Controller1. 通過(guò) View Resolver 進(jìn)行視圖1. 返回給用戶(hù)1. SpringMVC 的設(shè)計(jì)模式1. Spring 的 annoion 如何實(shí)現(xiàn)1. Spring器怎么使用,Controller 是單例嗎1. 基于 XML 配置文件1. 基于注解1. 基于 Spring 定義的 Methoderceptor 接口- Controller 是單例的,跟 Servlet 一樣。# 數(shù)據(jù)庫(kù)1. SQL 優(yōu)化方案根據(jù)我目前的知識(shí)水平,大概分為兩

38、類(lèi):1. 多表連接時(shí)不直接連接表,而是先用 where 篩選出符合條件的然后進(jìn)行連接。一般情況下,篩選一次會(huì)除去相當(dāng)多的無(wú)效,這會(huì)極大的提高效率。1. 判斷當(dāng)前的 SQL 是否合理的使用了索引。如果設(shè)置的索引沒(méi)有使用的話,會(huì)導(dǎo)致全表掃描。效率上會(huì)差很多。沒(méi)有利用索引的情況一般有以下幾種:- 以“%”開(kāi)頭的 LIKE 語(yǔ)句,模糊匹配- OR 語(yǔ)句前后沒(méi)有同時(shí)使用索引- 數(shù)據(jù)類(lèi)型出現(xiàn)隱式轉(zhuǎn)化(如 varchar 不加單引號(hào)的話可能會(huì)自動(dòng)轉(zhuǎn)換為型)- where 子句中對(duì)字段進(jìn)行表達(dá)式操作- 在 where 子句中對(duì)字段進(jìn)行函數(shù)操作1. 索引有哪些?分別特點(diǎn)?- 從底層數(shù)據(jù)結(jié)構(gòu)來(lái)劃分的話,主要有兩種

39、:一種是基于 B+ 樹(shù)的索引,一種是基于哈希表的索引?;诠1淼乃饕诘戎挡樵?xún)上有優(yōu)勢(shì),但其他方面就不是很好了。B+樹(shù)是一種多分支的樹(shù)結(jié)構(gòu),相比二叉樹(shù)來(lái)說(shuō)高度降低了很多,能夠有效的減少磁盤(pán) IO,所以平時(shí)使用的都是基于 B+ 樹(shù)的索引1. 索引為什么用 B 樹(shù)不用二叉樹(shù),好處?- 基于 B 樹(shù)的索引實(shí)現(xiàn),降低了樹(shù)的高度,減少了磁盤(pán) IO 的次數(shù)。1. 數(shù)據(jù)庫(kù)索引優(yōu)點(diǎn)和缺點(diǎn)- 優(yōu)點(diǎn):有效加速查詢(xún);- 缺點(diǎn):操作數(shù)據(jù)時(shí)需要對(duì)索引進(jìn)行更新,效率上稍微差一點(diǎn);索引需要占用一定的空間。1. 數(shù)據(jù)庫(kù)事務(wù)的四個(gè)級(jí)別,在哪一個(gè)級(jí)別- !(./res/isolation-level.png)默認(rèn)級(jí)別為 Rep

40、eatable read-1. 數(shù)據(jù)庫(kù),兩次相同的 select 操作,期間沒(méi)有發(fā)生增,刪,改操作,返回的結(jié)果是否相同;- 如果是多線程 select 數(shù)據(jù),那么數(shù)據(jù)很大可能不相同(select 操作中有排序操作除外)- 如果是單線程的,那么一定相同。1. 怎么設(shè)計(jì)數(shù)據(jù)庫(kù)表(從范式角度,可以加一些設(shè)計(jì)慣例)- 理論上說(shuō)達(dá)到第三范式是符合要求的但是一般生產(chǎn)環(huán)境下為了數(shù)據(jù)查詢(xún)方便,數(shù)據(jù)會(huì)有一定的冗余,也就是說(shuō)一般達(dá)到第二范式即可。1. 第一范式:字段不可分1. 第二范式:非主屬性必須完全函數(shù)依賴(lài)于主屬性1. 第三范式:消除了第二范式中的傳遞函數(shù)依賴(lài)引擎有哪些,INNODB 和 MYISAM 的區(qū)別

41、1.- !(./res/-storage-engines-feature-summary.png)支持 8 種引擎,其中最主要的有兩個(gè):InnoDB、MyISAM。- MyISAM 支持表級(jí)鎖。適用于選擇密集型和密集型的表- InnoDB 是 5.7.16-logCommunity Server 默認(rèn)的引擎,支持事務(wù),行級(jí)鎖,外鍵,索引。適用于更新密集的表,容災(zāi)性也較好。1. 實(shí)踐中如何優(yōu)化- SQL 語(yǔ)句及索引的優(yōu)化- 數(shù)據(jù)庫(kù)表結(jié)構(gòu)的優(yōu)化- 系統(tǒng)配置的優(yōu)化- 硬件的優(yōu)化1. 慢查詢(xún)慢查詢(xún)就是在日志中運(yùn)行比較慢的 SQL 語(yǔ)句,這個(gè)功能需要開(kāi)啟才能用。-1.(8) 和(10) 的區(qū)別是什么-

42、與 zerofill 結(jié)合使用才有意義,默認(rèn)是(10),也就是說(shuō)定義字段時(shí)加上 zerofill,如果的值10 位的話,select 的時(shí)候會(huì)加上前導(dǎo) 0 補(bǔ)足 10 位,如果的值大于等于10 位則直接顯示原值。所以這個(gè)地方 8 和 10 的區(qū)別就在于是補(bǔ)足 8 位還是 10 位。# 操作系統(tǒng)1. 進(jìn)程和線程的區(qū)別1. 進(jìn)程是擁有資源的基本,線程是 CPU 調(diào)度的基本1. 進(jìn)程擁有獨(dú)立的地址空間,同一個(gè)進(jìn)程的線程共享該進(jìn)程的地址空間1. 進(jìn)程上下文切換相對(duì)線程上下文切換會(huì)消耗的資源1. 一個(gè)進(jìn)程必須至少擁有一個(gè)線程1. 一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序相對(duì)于多線程的程序來(lái)說(shuō)會(huì)更

43、健壯1. 通信方式不同,線程通過(guò)進(jìn)程內(nèi)的資源進(jìn)行通信,進(jìn)程的通信有多種方式,包括管道、共享內(nèi)存、消息等等。1. 進(jìn)程間通信1. 管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關(guān)系進(jìn)程間的通信,有名管道克服了管道沒(méi)有名字的限制,因此,除具有管道所具有的功能外,它還允許無(wú)親緣關(guān)系進(jìn)程間的通信;1. 信號(hào)(Signal):信號(hào)是比較復(fù)雜的通信方式,用于通知接受進(jìn)程有某種事件發(fā)生,除了用于進(jìn)程間通信程還可以發(fā)送信號(hào)給進(jìn)程本身;1. 報(bào)文(Message)隊(duì)列(消息隊(duì)列):消息隊(duì)列是消息的表。有足夠權(quán)限的進(jìn)程可以向隊(duì)列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊(duì)列中的消息。消息隊(duì)列

44、克服了信號(hào)承載信息量少,管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。1. 共享內(nèi)存:使得多個(gè)進(jìn)程可以同一塊內(nèi)存空間,是最快的可用 IPC 形式。是針對(duì)其他通信機(jī)制運(yùn)行效率較低而設(shè)計(jì)的。往往與其它通信機(jī)制,如信號(hào)量結(jié)合使用,來(lái)達(dá)到進(jìn)程間的同步及互斥。1. 信號(hào)量(semaphore):主要作為進(jìn)程間以及同一進(jìn)程不同線程之間的同步。1. 套接口(Socket):更為一般的進(jìn)程間通信機(jī)制,可用于不同機(jī)器之間的進(jìn)程間通信。1. 在共享內(nèi)存中如何使用mutex1. select 和 epoll1. 操作系統(tǒng)由哪幾部分組成,進(jìn)程結(jié)構(gòu)1. 多進(jìn)程和多線程的區(qū)別1. 什么時(shí)候使用多線程,什么時(shí)候使用多進(jìn)

45、程1. Java 多線程與操作系統(tǒng)線程的關(guān)系1. 一般線程和守護(hù)線程的區(qū)別1. 多線程與多線程的實(shí)現(xiàn)方式1. 死鎖的條件,死鎖避免。1. 互斥條件1. 占有和等待條件1. 不條件1. 循環(huán)等待1. linux 中如何查看進(jìn)程等命令1. 不同進(jìn)程打開(kāi)了同一個(gè)文件,那么這兩個(gè)進(jìn)程得到的文件描述符(fd)相同嗎- 不一定,因?yàn)榇蜷_(kāi)文件有三個(gè)表,inode 表,系統(tǒng)文件描述符表,進(jìn)程文件描述符表。不同進(jìn)程的文件描述符的范圍是一樣的,有可能剛好相同,也有可能不相同1. 兩個(gè)線程如何同時(shí)一個(gè)端口。- SO_REUSEPORT 參數(shù)。# 計(jì)算機(jī)網(wǎng)絡(luò)1. HTTP 狀態(tài)碼有哪些,一一解釋含義1. 1xx 消息

46、- 100 服務(wù)器僅接收到部分請(qǐng)求,但是一旦服務(wù)器并沒(méi)有發(fā)送其余的請(qǐng)求。該請(qǐng)求,客戶(hù)端應(yīng)該繼續(xù)1. 2xx 成功- 200 OK 請(qǐng)求成功(其后是對(duì) GET 和T 請(qǐng)求的應(yīng)答文檔。)1. 3xx 重定向- 304 Not Modified 未修改的文檔??蛻?hù)端有緩沖的文檔并發(fā)出了一個(gè)條件性的請(qǐng)求(一般是提供 If-Modified-Since 頭表示客戶(hù)只想比指定日期更新的文檔)。服務(wù)器告訴客戶(hù),原來(lái)緩沖的文檔還可以繼續(xù)使用。1. 4xx: 客戶(hù)端錯(cuò)誤- 400 Bad Request 服務(wù)器未能理解請(qǐng)求。- 404 Not Found 服務(wù)器無(wú)法找到被請(qǐng)求的頁(yè)面。1. 5xx: 服務(wù)器錯(cuò)誤e

47、rnal Server Error 請(qǐng)求未完成。服務(wù)器遇到不可預(yù)知的情況。- 5001. HTTP 請(qǐng)求頭有哪些,介紹平時(shí)見(jiàn)過(guò)的,怎么利用這些信息來(lái)進(jìn)行前后端調(diào)試1. Host, 請(qǐng)求的1. User-Agent,用戶(hù)的瀏覽器版本信息1. Accept,響應(yīng)的內(nèi)容類(lèi)型1. Accept-Language, 接受的語(yǔ)言1. Accept-Encoding, 可接受的編碼方式,本地的信息1. 1. if-Modified-Since, 本地有緩存,如果在那之后沒(méi)有做修改,則可以直接使用本地緩存。1. TCP 和 UDP 的區(qū)別- !(./res/diff-tcp-udp.png)1. TCP 如何

48、保證可靠性1. 累計(jì)確認(rèn)1. 超時(shí)重傳1. 超時(shí)間隔加倍1. 快速重傳1. 擁塞控制與流量控制的區(qū)別- 流量控制是由接收控制的,擁塞控制由當(dāng)前的網(wǎng)絡(luò)環(huán)境來(lái)控制。1. OSI 七層模型,每層對(duì)應(yīng)的協(xié)議有哪些,每層有何含義- !(./res/tcp-ip-m.png)1. 網(wǎng)絡(luò)瀏覽器一個(gè)發(fā)生了什么過(guò)程1. 在地址欄輸入 URL,并回車(chē)1. 瀏覽器查詢(xún)的 IP。一般會(huì)有以下幾個(gè)地方:1. 瀏覽器緩存1. 操作系統(tǒng)緩存1. 路由器緩存1. 本地 DNS 服務(wù)器1. 如果本地 DNS 服務(wù)器上沒(méi)有的話,它會(huì)遞歸的從根 DNS 服務(wù)器、頂級(jí) DNS 服務(wù)器、DNS 服務(wù)器請(qǐng)求,然后把獲取到的IP 返回給瀏

49、覽器(DNS 協(xié)議基于 UDP)。1. 瀏覽器向 web 服務(wù)器發(fā)送 HTTP 請(qǐng)求1. HTTP 協(xié)議基于 TCP,建立連接需要經(jīng)過(guò)三次握手,并且該連接是長(zhǎng)連接,即 keep-alive1. IP 數(shù)據(jù)包在網(wǎng)絡(luò)傳輸中還需要經(jīng)過(guò)域間選路和域內(nèi)選路。1. 若長(zhǎng)時(shí)間接收不到應(yīng)答,TCP 會(huì)進(jìn)行重傳和擁塞控制。1. BLABLABLA.1. web 服務(wù)器處理請(qǐng)求1. web 服務(wù)器回傳一個(gè) HTTP 相應(yīng)1. 瀏覽器接收到以后HTML 并顯示1. 瀏覽器請(qǐng)求嵌入在 HTML 中的對(duì)象1. 最終瀏覽器呈現(xiàn)一個(gè)圖文并茂的頁(yè)面和 Ses的區(qū)別1.1. Ses是在服務(wù)器端的,是在客戶(hù)端的/TODO1. H

50、TTP1.0 和 1.1 的區(qū)別- 最主要的區(qū)別是 1.1 支持持久連接。Connection 請(qǐng)求頭的值為 Keep-Alive 時(shí),客戶(hù)端通知服務(wù)器返回本次請(qǐng)求結(jié)果后保持連接;Connection 請(qǐng)求頭的值為 close 時(shí),客戶(hù)端通知服務(wù)器返回本次請(qǐng)求結(jié)果后關(guān)閉連接。- 1.1 支持?jǐn)帱c(diǎn)續(xù)傳。RANGE:bytes= 表示要求服務(wù)器從文件字節(jié)處開(kāi)始傳送- 還有一些其他的改進(jìn),有可以自行查閱相關(guān)資料1. HTTP 和 HTTPS 的主要區(qū)別- 安全。HTTP 直接與 TCP 通信,而 HTTPS 是先與 SSL(加密) 通信,然后再由 SSL 和 TCP通信1. 滑動(dòng)窗口算法- 又稱(chēng)回退

51、 N 步(go-back-N),發(fā)送方的窗口滑動(dòng)是由接收方是否已成功收到數(shù)據(jù)包來(lái)決定的。即接收方的窗口向前滑動(dòng)后發(fā)送方的窗口才會(huì)向前滑動(dòng)。/TODO詳細(xì)過(guò)程1.1. IP 地址分為幾類(lèi),每類(lèi)都代表什么,私網(wǎng)是哪些- A:前 1 byte 為網(wǎng)絡(luò)標(biāo)識(shí),剩下的是主機(jī)標(biāo)識(shí)- B:前 2 bytes 為網(wǎng)絡(luò)標(biāo)識(shí)- C:前 3 bytes 為網(wǎng)絡(luò)標(biāo)識(shí)- D:為多播地址,最為 1110- E:特殊 IP。例如 ,,55 等等- 私網(wǎng)- /8- /12- /161. IP 頭組成;1. 計(jì)算機(jī)網(wǎng)絡(luò)中的同步和異步1. 發(fā)現(xiàn)上不去,怎么辦1. 查看 DNS是否正確。若有錯(cuò)誤,刪除本地 DNS 緩存1. 若 DNS 沒(méi)有問(wèn)題,使用 traceroute 檢

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論