小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

最全技術(shù)面試180題:阿里11面試 網(wǎng)易 百度 美團!含答案大贈送!

 知行合一ing 2018-09-08

最全技術(shù)面試180題:阿里11面試+網(wǎng)易+百度+美團!含答案大贈送!

網(wǎng)絡(luò)編程

  1. ISO模型與協(xié)議
  2. http1.0:需要使用keep-alive參數(shù)來告知服務(wù)器端要建立一個長連接
  3. http1.1:默認(rèn)長連接。支持只發(fā)送header信息,可以用作權(quán)限請求。支持Host域。
  4. http2.0:多路復(fù)用的技術(shù),做到同一個連接并發(fā)處理多個請求。HTTP2.0使用HPACK算法對header的數(shù)據(jù)進行壓縮。支持HTTP2.0的web server請求數(shù)據(jù)的時候,服務(wù)器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請求到服務(wù)器端獲取。這種方式非常合適加載靜態(tài)資源。
  5. 會話層:負(fù)責(zé)管理主機之間的會話進程,負(fù)責(zé)建立、管理、終止進程之間的會話。
  6. 傳輸層:將上層數(shù)據(jù)分段并提供端到端的、可靠的或不可靠的傳輸,還要處理端到端的差錯控制和流量控制問題。協(xié)議TCP、UDP、SPX
  7. 網(wǎng)絡(luò)層:對子網(wǎng)間的數(shù)據(jù)包進行路由選擇。此外,網(wǎng)絡(luò)層還可以實現(xiàn)擁塞控制、網(wǎng)際互連等功能。協(xié)議IP、IPX、RIP、OSPF
  8. 數(shù)據(jù)鏈路層:在不可靠的物理介質(zhì)上提供可靠的傳輸。該層的作用包括:物理地址尋址、數(shù)據(jù)的成幀、流量控制、數(shù)據(jù)的檢錯、重發(fā)等。協(xié)議SDLC、HDLC、PPP、STP、幀中繼
  9. TCP\IP模型與協(xié)議
  10. 應(yīng)用層:單位是數(shù)據(jù)段,協(xié)議有FTP、TELNET、HTTP、SMTP、SNMP、TFTP、NTP、DNS
  11. 運輸層:單位是數(shù)據(jù)包,協(xié)議有TCP、UDP
  12. 網(wǎng)絡(luò)層:單位是數(shù)據(jù)幀,協(xié)議有IP
  13. 網(wǎng)絡(luò)接口層:單位是比特,ARP、RARP
  14. 三次握手與四次揮手
  15. BIO NIO AIO
  16. BIO:同步阻塞IO,每個請求都要一個線程來處理。
  17. NIO:同步非阻塞IO,一個線程可以處理多個請求,適用于短連接、小數(shù)據(jù)。
  18. AIO:異步非阻塞IO,一個線程處理多個請求,使用回調(diào)函數(shù)實現(xiàn),適用于長連接、大數(shù)據(jù)。
  19. DDOS攻擊原理與防御方式
  20. HTTP Get Flood:發(fā)送大量會產(chǎn)生sql查詢的連接,使得數(shù)據(jù)庫負(fù)載很高。
  21. CSRF跨站請求偽造原理攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求。
  22. CSRF攻擊是源于WEB的隱式身份驗證機制!WEB的身份驗證機制雖然可以保證一個請求是來自于某個用戶的瀏覽器,但卻無法保證該請求是用戶批準(zhǔn)發(fā)送的!
  23. 防御方式:1.驗證碼;2. 后臺生成token,讓前端請求攜帶。3.使用對稱加密,后端隨機給前端一個密鑰,前端進行加密,后端解密。
  24. 會話劫持通過暴力破解、 預(yù)測、竊取(通過XSS攻擊)等方式獲取到用戶session
  25. XSS攻擊XSS攻擊是Web攻擊中最常見的攻擊方法之一,它是通過對網(wǎng)頁注入可執(zhí)行代碼且成功地被瀏覽器執(zhí)行,達到攻擊的目的,形成了一次有效XSS攻擊,一旦攻擊成功,它可以獲取用戶的聯(lián)系人列表,然后向聯(lián)系人發(fā)送虛假詐騙信息,可以刪除用戶的日志等等,有時候還和其他攻擊方式同時實施比如SQL注入攻擊服務(wù)器和數(shù)據(jù)庫、Click劫持、相對鏈接劫持等實施釣魚,它帶來的危害是巨大的,是web安全的頭號大敵。
  26. XSS反射型攻擊,惡意代碼并沒有保存在目標(biāo)網(wǎng)站,通過引誘用戶點擊一個鏈接到目標(biāo)網(wǎng)站的惡意鏈接來實施攻擊的。
  27. XSS存儲型攻擊,惡意代碼被保存到目標(biāo)網(wǎng)站的服務(wù)器中,這種攻擊具有較強的穩(wěn)定性和持久性,比較常見場景是在博客,論壇等社交網(wǎng)站上,但OA系統(tǒng),和CRM系統(tǒng)上也能看到它身影,比如:某CRM系統(tǒng)的客戶投訴功能上存在XSS存儲型漏洞,黑客提交了惡意攻擊代碼,當(dāng)系統(tǒng)管理員查看投訴信息時惡意代碼執(zhí)行,竊取了客戶的資料,然而管理員毫不知情,這就是典型的XSS存儲型攻擊。
  • 解決方法
  • 在表單提交或者url參數(shù)傳遞前,對需要的參數(shù)進行過濾
  • 過濾用戶輸入。檢查用戶輸入的內(nèi)容中是否有非法內(nèi)容。如<>(尖括號)、”(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等

28.RPC與HTTP服務(wù)的區(qū)別

數(shù)據(jù)庫原理

  1. MYISAM與innodb搜索引擎原理MyISAM引擎使用B+Tree作為索引結(jié)構(gòu),葉節(jié)點的data域存放的是數(shù)據(jù)記錄的地址。其采用索引文件與數(shù)據(jù)文件,索引文件只存放索引,葉子節(jié)點存放數(shù)據(jù)的物理地址。數(shù)據(jù)文件存放數(shù)據(jù)。其索引方式是非聚集的。
  2. InnoDB也使用B+Tree作為索引結(jié)構(gòu)。但是它的主索引與數(shù)據(jù)都放在一個文件中。這種索引叫做聚集索引,因為InnoDB的數(shù)據(jù)文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統(tǒng)會自動選擇一個可以唯一標(biāo)識數(shù)據(jù)記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵,這個字段長度為6個字節(jié),類型為長整形。
  • 區(qū)別一:InnoDB的主索引與數(shù)據(jù)都放在一個文件中。而MYISAM是分開存放的。
  • 區(qū)別二:InnoDB的輔助索引data域存儲相應(yīng)記錄主鍵的值而不是地址。
  • 區(qū)別三:InnoDB的主鍵索引是聚集索引,而MYISAM不是聚集索引。

3.索引,聚簇索引和二級索引的加鎖區(qū)別

  • 聚集(clustered)索引,也叫聚簇索引。數(shù)據(jù)行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,一個表中只能擁有一個聚集索引。
  • 非聚集(unclustered)索引。該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同,一個表中可以擁有多個非聚集索引。會發(fā)生二次查詢。
  • 稠密索引:稠密索引文件中的索引塊保持鍵的順序與文件中的排序順序一致。
  • 稀疏索引:稀疏索引沒有為每個數(shù)據(jù)都創(chuàng)建一個索引,它比稠密索引節(jié)省了更多的存儲空間,但查找給定值的記錄需更多的時間。只有當(dāng)數(shù)據(jù)文件是按照某個查找鍵排序時,在該查找鍵上建立的稀疏索引才能被使用,而稠密索引則可以應(yīng)用在任何的查找鍵。
  • 聯(lián)合索引:將一張表中多個列組成聯(lián)合索引(col1,col2,col3),其生效方式滿足最左前綴原則。
  • 覆蓋索引:對于二級索引而言,在innodb中一般是需要先根據(jù)二級索引查詢到主鍵,然后在根據(jù)一級索引查詢到數(shù)據(jù)。但是如果select的列都在索引中,就避免進行一級查詢。

4.主鍵選擇

  • 在使用InnoDB存儲引擎時,如果沒有特別的需要,請永遠(yuǎn)使用一個與業(yè)務(wù)無關(guān)的自增字段作為主鍵。
  • where 1 = 1:能夠方便我們拼sql,但是使用了之后就無法使用索引優(yōu)化策略,因此會進行全表掃描,影響效率。

5.分表分庫

  • 水平拆分:依據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個表中的數(shù)據(jù)依照某種條件拆分到多臺數(shù)據(jù)庫(主機)上面。按照1個或多個字段以及相應(yīng)的規(guī)則,將一張表重的數(shù)據(jù)分到多張表中去。比如按照id%5的規(guī)則,將一張大表拆分成5張小表。適合具有超大表的系統(tǒng)。
  • 垂直拆分:依照不同的表(或者Schema)來切分到不同的數(shù)據(jù)庫(主機)之上。一般按照模塊來分庫。適合各業(yè)務(wù)之間耦合度非常低的系統(tǒng)。

6.隔離級別

  • read uncommit:讀不加鎖,寫加共享鎖。會產(chǎn)生臟讀、幻讀。
  • read commit:讀加共享鎖,寫加排它鎖,但不加間隙鎖。間隙鎖的主要作用是防止不可重復(fù)讀,但會加大鎖的范圍。
  • repeatable read(innodb默認(rèn)):讀加共享鎖,寫加間隙排它鎖。注意,Innodb對這個級別進行了特殊處理,使得這個級別能夠避免幻讀,但不是所有引擎都能夠防止幻讀!(網(wǎng)易面試官問)
  • serialization:會給整張表加鎖,強一致,但是效率低。

7.innodb中的鎖

  • MVCC(multi-Version Concurrency Control):讀不加鎖,讀寫不沖突。適合寫少讀多的場景。讀操作分為:快照讀(返回記錄的可見版本,不加鎖)、當(dāng)前讀(記錄的最新版本,加鎖,保證其它記錄不修改)。
  • LBCC(Lock-Based Concurrency Control):
  • join原理Simple Nested-Loop Join:效率最低,按照join的次序,在join的屬性上一個個掃描,并合并結(jié)果。
  • Index Nested-Loop Join:效率最高,join的屬性上面有索引,根據(jù)索引來匹配。
  • Block Nested-Loop Join:用于沒有索引的列。它會采用join buffer,將外表的值緩存到j(luò)oin buffer中,然后與內(nèi)表進行批量比較,這樣可以降低對外表的訪問頻率

8.galera

  • 多主架構(gòu):真正的多點讀寫的集群,在任何時候讀寫數(shù)據(jù),都是最新的。
  • 同步復(fù)制,各節(jié)點間無延遲且節(jié)點宕機不會導(dǎo)致數(shù)據(jù)丟失。
  • 緊密耦合,所有節(jié)點均保持相同狀態(tài),節(jié)點間無不同數(shù)據(jù)。
  • 無需主從切換操作。
  • 無需進行讀寫分離。
  • 并發(fā)復(fù)制:從節(jié)點在APPLY數(shù)據(jù)時,支持并行執(zhí)行,有更好的性能表現(xiàn)。
  • 故障切換:在出現(xiàn)數(shù)據(jù)庫故障時,因為支持多點寫入,切的非常容易。
  • 熱插拔:在服務(wù)期間,如果數(shù)據(jù)庫掛了,只要監(jiān)控程序發(fā)現(xiàn)的夠快,不可服務(wù)時間就會非常少。在節(jié)點故障期間,節(jié)點本身對集群的影響非常小。
  • 自動節(jié)點克?。涸谛略龉?jié)點,或者停機維護時,增量數(shù)據(jù)或者基礎(chǔ)數(shù)據(jù)不需要人工手動備份提供,Galera Cluster會自動拉取在線節(jié)點數(shù)據(jù),最終集群會變?yōu)橐恢隆?/li>
  • 對應(yīng)用透明:集群的維護,對應(yīng)用程序是透明的,幾乎感覺不到。

9.LSM Tree,主要應(yīng)用于nessDB、leveldb、hbase

  • 核心思想的核心就是放棄部分讀能力,換取寫入的最大化能力。它假設(shè)假定內(nèi)存足夠大,因此不需要每次有數(shù)據(jù)更新就必須將數(shù)據(jù)寫入到磁盤中,而可以先將最新的數(shù)據(jù)駐留在內(nèi)存中,等到積累到最后多之后,再使用

    歸并排序

    的方式將內(nèi)存內(nèi)的數(shù)據(jù)合并追加到磁盤隊尾。(使用歸并排序是要因為帶排序樹都是有序樹)
  • LSM具有批量特性,存儲延遲。B樹在insert的時候可能會造成分裂,可能會造成隨機讀寫。而LSM將多次單頁隨機寫,變成一次多頁隨機寫,復(fù)用了磁盤尋道時間,極大提升效率。
  • LSM Tree放棄磁盤讀性能來換取寫的順序性。
  • 一般會使用Bloom Filter來優(yōu)化LSM。當(dāng)將內(nèi)存中的數(shù)據(jù)與磁盤數(shù)據(jù)合并的時候,先要判斷數(shù)據(jù)是否有重復(fù),如果不用Bloom Filter就需要在磁盤上一層層地找,而使用了之后就會降低搜索代價。

多線程

  1. synchronized、CAS
  2. Collections
  3. 支持高并發(fā)的數(shù)據(jù)結(jié)構(gòu),如ConcurrentHashMap
  4. 基于AQS實現(xiàn)的鎖、信號量、計數(shù)器原理
  5. Runnable與Callable的區(qū)別
  6. 線程池
  7. 作用
  • 減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷 。
  • 當(dāng)前任務(wù)與主線程隔離,能實現(xiàn)和主線程的異步執(zhí)行,特別是很多可以分開重復(fù)執(zhí)行的任務(wù)。

8.阻塞隊列

9.threadlocal

Spring框架

  1. IOC/DI
  2. Core、Beans、Context、Expression Language
  3. JDBC、ORM、OXM、JMS、Transaction
  4. AOP
  5. Web
  6. Test
  7. @Autowired原理
  8. 工廠模式
  9. 反射
  10. 自動配置@ConfigurationProperties(prefix = 'hello'):讀取以hello為開頭的配置,屬性類使用
  11. @Configuration:指名當(dāng)前類為配置類
  12. @EnableConfigurationProperties(Properties):指名配置屬性類
  13. @ConditionalOnClass(Condition.class):條件類,只有Condition.class存在,當(dāng)前配置類才生效
  14. Spring Boot在spring.factories配置了很多全限定名的配置類。

Redis

核心原理

  1. 常用數(shù)據(jù)類型String:二進制安全,可以存任何數(shù)據(jù),比如序列化的圖片。最大長度位512M.
  2. Hash:是KV對集合,本質(zhì)是String類型的KV映射,適合存儲對象。
  3. List:簡單字符串鏈表,可以在left、right兩邊插入,本質(zhì)是雙向鏈表。緩沖區(qū)也是用這個實現(xiàn)。
  4. Set:String類型的無序集合,內(nèi)部實現(xiàn)是一個 value永遠(yuǎn)為null的HashMap,實際就是通過計算hash的方式來快速排重的,這也是set能提供判斷一個成員是否在集合內(nèi)的原因。
  5. zset:有序集合,每個元素會關(guān)聯(lián)一個double類型的score,然后根據(jù)score進行排序。注意:元素不能重復(fù),但是score是可以重復(fù)的。使用HashMap和跳躍表(SkipList)來保證數(shù)據(jù)的存儲和有序,HashMap里放的是成員到score的映射,而跳躍表里存放的是所有的成員,排序依據(jù)是HashMap里存的score.
  • pub/sub:在Redis中,你可以設(shè)定對某一個key值進行消息發(fā)布及消息訂閱,當(dāng)一個key值上進行了消息發(fā)布后,所有訂閱它的客戶端都會收到相應(yīng)的消息。

持久化

  1. RDB:一種是手動執(zhí)行持久化命令來持久化快照;另一種是在配置文件中配置策略,來自動持久化。持久化命令有save、bgsave兩種,bgsave會調(diào)用fork命令,產(chǎn)生子進程來進行持久化,而父進程繼續(xù)處理數(shù)據(jù),但是持久化的快照是fork那一刻的快照,因此這種策略可能會丟失一部分?jǐn)?shù)據(jù)。特點:每次都記錄所有數(shù)據(jù),恢復(fù)快,子進程不影響父進程性能。
  2. AOF:append only file,將每條操作命令都記錄到appendonly.aof文件中,但是不會立馬寫入硬盤,我們可以配置always(每有一個命令,都同步)、everysec(每秒同步一次)、no(沒30秒同步一次)。往往everysec就夠了。aof數(shù)據(jù)損失要比RDB小。特點:有序記錄所有操作,數(shù)據(jù)丟失更少,會對操作做壓縮優(yōu)化,bgrewriteaof也會fork子進程,不影響父進程性能

事務(wù)

  1. Transactions:不是嚴(yán)格的ACID的事務(wù),但是這個Transactions還是提供了基本的命令打包執(zhí)行的功能(在服務(wù)器不出問題的情況下,可以保證一連串的命令是順序在一起執(zhí)行的,中間有會有其它客戶端命令插進來執(zhí)行)。
  2. Redis還提供了一個Watch功能,你可以對一個key進行Watch,然后再執(zhí)行Transactions,在這過程中,如果這個Watched的值進行了修改,那么這個Transactions會發(fā)現(xiàn)并拒絕執(zhí)行。

KafKA

  1. topic
  2. broker
  3. partition
  4. consumer
  5. producer
  6. stream
  7. 存儲機制
  8. 網(wǎng)絡(luò)模型
  9. 注意:partition之間是無序的
  10. 消息隊列的生產(chǎn)者消費者中消費者沒有收到消息怎么辦,消息有順序比如1.2.3但是收到的卻是1.3.2怎么辦?消息發(fā)過來的過程中損壞或者出錯怎么辦

Spring security

  1. 攔截器棧
  2. @PreAuthorize
  3. @PostAuthorize
  4. 支持Expression Language

jvm原理

內(nèi)存模型、垃圾收集器、CMS與G1是重點

垃圾收集算法

  • 標(biāo)記-清除(CMS)容易產(chǎn)生碎片,當(dāng)碎片太多會提前觸發(fā)Full GC
  • 復(fù)制(年輕代基本用這個算法)會浪費一半的可能感覺
  • 標(biāo)記-整理(serial Old、Parallel Old)
  • Serial:采用單線程stop-the-world的方式進行收集。當(dāng)內(nèi)存不足時,串行GC設(shè)置停頓標(biāo)識,待所有線程都進入安全點(Safepoint)時,應(yīng)用線程暫停,串行GC開始工作,采用單線程方式回收空間并整理內(nèi)存。串行收集器特別適合堆內(nèi)存不高、單核甚至雙核CPU的場合。
  • ParNew
  • Parallel Scavenge

CMS

  • 初始標(biāo)記(stop of world)
  • 并行標(biāo)記、預(yù)清理
  • 重新標(biāo)記(stop of world)
  • 并行清理

G1

將堆分成很多region,可以同時堆年輕代與老年代進行收集

  • 初始標(biāo)記(stop of world):初始標(biāo)記(Initial Mark)負(fù)責(zé)標(biāo)記所有能被直接可達的根對象(原生棧對象、全局對象、JNI對象)
  • 并行標(biāo)記:
  • 重新標(biāo)記(stop of world):
  • 清理(stop of world):
  • 重置

gc觸發(fā)條件

  1. 從年輕代分區(qū)拷貝存活對象時,無法找到可用的空閑分區(qū),會觸發(fā)Minor GC
  2. 從老年代分區(qū)轉(zhuǎn)移存活對象時,無法找到可用的空閑分區(qū),會觸發(fā)Major GC
  3. 分配巨型對象時在老年代無法找到足夠的連續(xù)分區(qū),會觸發(fā)Major GC
  4. 可達性分析:通過檢查一塊內(nèi)存空間能否被root達到,來判斷是否對其進行回收。

jdk不同版本新增的部分特性

jvm調(diào)優(yōu)

  • VisualVM:JDK自帶JVM可視化工具,能過對內(nèi)存、gc、cpu、thread、class、變量等等信息進行可視化。

設(shè)計模式

  1. 單例雙重檢查
  2. 觀察者模式
  3. 裝飾者模式:jdk中輸入輸出流用到了該模式
  4. 適配器模式:jdk中Reader、writer用到了該模式
  5. 代理模式
  6. 靜態(tài)代理
  7. JDK動態(tài)代理
  8. Cglib到動態(tài)代理
  9. 生產(chǎn)者消費者模式
  10. 工廠模式

項目管理與運維工具

  1. git+Jenkins
  2. maven
  3. K8Spod:Pod是所有業(yè)務(wù)類型的基礎(chǔ),所有的容器均在Pod中運行,它是一個或多個容器的組合。每一個Pod都會被指派一個唯一的Ip地址,在Pod中的每一個容器共享網(wǎng)絡(luò)命名空間,包括Ip地址和網(wǎng)絡(luò)端口。Pod能夠被指定共享存儲卷的集合,在Pod中所有的容器能夠訪問共享存儲卷,允許這些容器共享數(shù)據(jù)。
  4. kubelet:kubelet負(fù)責(zé)管理pods和它們上面的容器,images鏡像、volumes、etc。
  5. ingress,用于負(fù)載均衡
  6. docker
  7. docker與虛擬機的區(qū)別

數(shù)據(jù)結(jié)構(gòu)

  1. 平衡二叉樹AVL
  2. 高度log(n)
  3. 插入時間復(fù)雜度log(n)
  4. 紅黑樹
  5. 插入時間復(fù)雜度log(n)
  6. 查找時間復(fù)雜度log(n)
  7. 在查找是,紅黑樹雖然復(fù)雜度也是log(n),但是從效率上比要略低于AVL。但是其優(yōu)勢在于插入元素的時候,不會像AVL那樣頻繁地旋轉(zhuǎn)。
  8. B+Tree:只有葉子節(jié)點存值,非葉子節(jié)點只存key和child,因此同樣大小的物理頁上能存放更多的節(jié)點。每一層的節(jié)點數(shù)量越多,意味著層次越少,也就意味著IO次數(shù)越少,因此非常適合數(shù)據(jù)庫以及文件系統(tǒng)。
  9. 大根堆:采用數(shù)組存儲樹,是一個完全樹。先插入到數(shù)組最后的位置上,然后采用上浮的思想,將該元素與比它小的父元素調(diào)換,直到parent>target,浮到root;然后將root與未排序的最后一個元素交換位置;重復(fù)以上步驟,直到所有元素都有序。插入如查找的復(fù)雜度都是log(n)。
  10. 優(yōu)先隊列PriorityQueue,Java中使用小根堆實現(xiàn),非線程安全。
  11. 優(yōu)先阻塞隊列PriorityBlockQueue,線程安全。

算法

  1. 快排
  2. 時間復(fù)雜度O(nlog(n))
  3. 空間復(fù)雜度O(log(n))
  4. 堆排序
  5. 時間復(fù)雜度O(nlog(n))
  6. 空間復(fù)雜度O(1)
  7. 歸并排序
  8. 時間復(fù)雜度O(nlog(n))
  9. 空間復(fù)雜度O(n)
  10. 跳表時間復(fù)雜度O(log(n))
  11. 空間復(fù)雜度O(2n)
  12. 高度O(log(n))

分布式

cap理論

  1. 可用性
  2. 一致性
  3. 分區(qū)容忍性:對網(wǎng)絡(luò)斷開的容忍度,有點像魯棒性
  4. 拜占庭將軍問題

Raft 算法

  • 有l(wèi)eader、follower、candidate

同步流程

  1. 由客戶端提交數(shù)據(jù)到Leader節(jié)點。
  2. 由Leader節(jié)點把數(shù)據(jù)復(fù)制到集群內(nèi)所有的Follower節(jié)點。如果一次復(fù)制失敗,會不斷進行重試。
  3. Follower節(jié)點們接收到復(fù)制的數(shù)據(jù),會反饋給Leader節(jié)點。
  4. 如果Leader節(jié)點接收到超過半數(shù)的Follower反饋,表明復(fù)制成功。于是提交自己的數(shù)據(jù),并通知客戶端數(shù)據(jù)提交成功。
  5. 由Leader節(jié)點通知集群內(nèi)所有的Follower節(jié)點提交數(shù)據(jù),從而完成數(shù)據(jù)同步流程。

zookeeper

  1. Zab(Zookeeper Atomic Broadcast)協(xié)議,有兩種模式:
  • 它們分別是:恢復(fù)模式(選主)和廣播模式(同步)。
  • 有兩種算法:1. basic paxos;2. fast paxos(默認(rèn))
  1. 文件系統(tǒng):zookeeper的通知機制、分布式鎖、隊列管理、配置管理都是基于文件系統(tǒng)的。
  2. 分布式鎖:有了zookeeper的一致性文件系統(tǒng),鎖的問題變得容易。鎖服務(wù)可以分為兩類,一個是保持獨占,另一個是控制時序。
  3. 獨占鎖:將zookeeper上的一個znode看作是一把鎖,通過createznode的方式來實現(xiàn)。所有客戶端都去創(chuàng)建 /distribute_lock 節(jié)點,最終成功創(chuàng)建的那個客戶端也即擁有了這把鎖。用完刪除掉自己創(chuàng)建的distribute_lock 節(jié)點就釋放出鎖。
  4. 控制時序鎖:/distribute_lock 已經(jīng)預(yù)先存在,所有客戶端在它下面創(chuàng)建臨時順序編號目錄節(jié)點,和選master一樣,編號最小的獲得鎖,用完刪除。
  5. 隊列管理,分為同步隊列、非同步隊列
  6. 數(shù)據(jù)復(fù)制的好處
  • 容錯:一個節(jié)點出錯,不致于讓整個系統(tǒng)停止工作,別的節(jié)點可以接管它的工作;
  • 提高系統(tǒng)的擴展能力 :把負(fù)載分布到多個節(jié)點上,或者增加節(jié)點來提高系統(tǒng)的負(fù)載能力;
  • 提高性能:讓客戶端本地訪問就近的節(jié)點,提高用戶訪問速度。

5.一致性hash算法原理

微服務(wù)

Spring cloud

  • 網(wǎng)關(guān):zuul
  • 分布式\版本化配置 config
  • 服務(wù)注冊和發(fā)現(xiàn):Eureka,配置時需要注意多久刷新列表一次,多久監(jiān)測心跳等。
  • service-to-service 調(diào)用
  • 負(fù)載均衡:Ribbon;在生成RestTemplate的bean時,通過@LoadBalanced注解可以使得RestTemplate的調(diào)用
  • 斷路器:Hystrix
  • 監(jiān)控:spring admin。在啟動類上加@EnableAdminServer注解。

java web

  1. servlet工作原理
  2. tomcat工作原理,好文,強推
  3. container

linux

  1. 系統(tǒng)結(jié)構(gòu),講得很好,強推
  2. 硬鏈接與軟連接
  3. 硬鏈接:數(shù)據(jù)節(jié)點通過引用計數(shù)的方式來對指向它的硬鏈接計數(shù),當(dāng)計數(shù)為0就刪除。
  4. 軟連接:我們可以把它看成是快捷方式,它只是記錄了某個文件的硬鏈接的路徑,如果我們把源文件刪除,再重新創(chuàng)建一個相同名字的文件,那么軟連接指向的就是新創(chuàng)建的文件。
  5. 虛擬文件系統(tǒng)(VFS):文件系統(tǒng)是有很多實現(xiàn)的,比如ext2、ext3、FAT等等,而VFS則是存在于應(yīng)用程序與文件系統(tǒng)中間,它封裝了open、close、read、write等等操作文件系統(tǒng)的接口,為應(yīng)用程序屏蔽掉不同文件系統(tǒng)之間的差異。
  6. VFS數(shù)據(jù)結(jié)構(gòu)

其它

  • bitmap,大文件交集
  • Elasticsearch索引原理
  • 從內(nèi)存到屏幕經(jīng)歷了啥
  • 高并發(fā)場景的限流,你怎么來確定限流限多少,模擬場景和實際場景有區(qū)別怎么解決,

百度面試

  • 說一下redis與kafka,redis持久化策略
  • git中rebase與merge區(qū)別
  • docker底層原理,依賴操作系統(tǒng)的什么
  • ls -l | grep xxx的執(zhí)行過程,盡可能的細(xì),是多進程還是單進程?
  • 兩個有序數(shù)組求中位數(shù)
  • 算法 3Sum、中序遍歷非遞歸實現(xiàn)、循環(huán)打印矩陣
  • final、finally、finanize
  • jvm內(nèi)存模型
  • 垃圾回收器
  • Spring特點介紹下
  • Synchronize與ReentrantLock的區(qū)別、使用場景
  • CAS使用場景
  • 聊了下git+jekins+K8S+docker實現(xiàn)自動化部署
  • innodb原理,使用場景,與MYISAM在場景上的區(qū)別
  • weakReference、softReference等
  • Hbase的原理,LSM Tree
  • Linux中,哪種進程可以使用管道

美團

  • 權(quán)限模型
  • 介紹下線程池,阻塞隊列的用法,無界隊列真的無界嗎?
  • 說一下redis
  • kafka存儲模型與網(wǎng)絡(luò)模型
  • zookeeper與redis實現(xiàn)分布式鎖
  • 樂觀鎖與悲觀鎖
  • 算法:有n個人,給你ai與aj的身高關(guān)系,如ai比aj高,進行身高排序,如果條件不滿足,則輸出“不滿足”
  • Spring boot的特性

以上是總結(jié)出的最全技術(shù)面試題目,以下是最新總結(jié)出的BAT面試java必考題目和答案。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多