網絡編程
- ISO模型與協議
- http1.0:需要使用keep-alive參數來告知服務器端要建立一個長連接
- http1.1:默認長連接。支持只發(fā)送header信息砌们,可以用作權限請求。支持Host域。
- http2.0:多路復用的技術寞宫,做到同一個連接并發(fā)處理多個請求。HTTP2.0使用HPACK算法對header的數據進行壓縮拉鹃。支持HTTP2.0的web server請求數據的時候辈赋,服務器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請求到服務器端獲取膏燕。這種方式非常合適加載靜態(tài)資源钥屈。
- 會話層:負責管理主機之間的會話進程,負責建立坝辫、管理篷就、終止進程之間的會話。
- 傳輸層:將上層數據分段并提供端到端的近忙、可靠的或不可靠的傳輸竭业,還要處理端到端的差錯控制和流量控制問題。協議TCP及舍、UDP永品、SPX
- 網絡層:對子網間的數據包進行路由選擇。此外击纬,網絡層還可以實現擁塞控制、網際互連等功能钾麸。協議IP更振、IPX炕桨、RIP肯腕、OSPF
- 數據鏈路層:在不可靠的物理介質上提供可靠的傳輸献宫。該層的作用包括:物理地址尋址、數據的成幀实撒、流量控制姊途、數據的檢錯、重發(fā)等知态。協議SDLC捷兰、HDLC、PPP负敏、STP贡茅、幀中繼
- TCPIP模型與協議
- 應用層:單位是數據段,協議有FTP其做、TELNET顶考、HTTP、SMTP妖泄、SNMP驹沿、TFTP、NTP蹈胡、DNS
- 運輸層:單位是數據包渊季,協議有TCP、UDP
- 網絡層:單位是數據幀审残,協議有IP
- 網絡接口層:單位是比特梭域,ARP、RARP
- 三次握手與四次揮手
- BIO NIO AIO
- BIO:同步阻塞IO搅轿,每個請求都要一個線程來處理病涨。
- NIO:同步非阻塞IO,一個線程可以處理多個請求璧坟,適用于短連接既穆、小數據。
- AIO:異步非阻塞IO雀鹃,一個線程處理多個請求幻工,使用回調函數實現,適用于長連接黎茎、大數據囊颅。
- DDOS攻擊原理與防御方式
- HTTP Get Flood:發(fā)送大量會產生sql查詢的連接,使得數據庫負載很高。
- CSRF跨站請求偽造原理攻擊者盜用了你的身份踢代,以你的名義發(fā)送惡意請求盲憎。
- CSRF攻擊是源于WEB的隱式身份驗證機制!WEB的身份驗證機制雖然可以保證一個請求是來自于某個用戶的瀏覽器胳挎,但卻無法保證該請求是用戶批準發(fā)送的饼疙!
- 防御方式:1.驗證碼;2. 后臺生成token慕爬,讓前端請求攜帶窑眯。3.使用對稱加密,后端隨機給前端一個密鑰医窿,前端進行加密磅甩,后端解密。
- 會話劫持通過暴力破解留搔、 預測更胖、竊取(通過XSS攻擊)等方式獲取到用戶session
- XSS攻擊XSS攻擊是Web攻擊中最常見的攻擊方法之一隔显,它是通過對網頁注入可執(zhí)行代碼且成功地被瀏覽器執(zhí)行却妨,達到攻擊的目的,形成了一次有效XSS攻擊括眠,一旦攻擊成功彪标,它可以獲取用戶的聯系人列表,然后向聯系人發(fā)送虛假詐騙信息掷豺,可以刪除用戶的日志等等捞烟,有時候還和其他攻擊方式同時實施比如SQL注入攻擊服務器和數據庫、Click劫持当船、相對鏈接劫持等實施釣魚题画,它帶來的危害是巨大的,是web安全的頭號大敵德频。
- XSS反射型攻擊苍息,惡意代碼并沒有保存在目標網站,通過引誘用戶點擊一個鏈接到目標網站的惡意鏈接來實施攻擊的壹置。
- XSS存儲型攻擊竞思,惡意代碼被保存到目標網站的服務器中,這種攻擊具有較強的穩(wěn)定性和持久性钞护,比較常見場景是在博客盖喷,論壇等社交網站上,但OA系統难咕,和CRM系統上也能看到它身影课梳,比如:某CRM系統的客戶投訴功能上存在XSS存儲型漏洞距辆,黑客提交了惡意攻擊代碼,當系統管理員查看投訴信息時惡意代碼執(zhí)行,竊取了客戶的資料,然而管理員毫不知情专控,這就是典型的XSS存儲型攻擊中捆。
- 解決方法
- 在表單提交或者url參數傳遞前,對需要的參數進行過濾
- 過濾用戶輸入雾消。檢查用戶輸入的內容中是否有非法內容灾搏。如<>(尖括號)、”(引號)立润、 ‘(單引號)狂窑、%(百分比符號)、;(分號)桑腮、()(括號)泉哈、&(& 符號)、+(加號)等
28.RPC與HTTP服務的區(qū)別
數據庫原理
- MYISAM與innodb搜索引擎原理MyISAM引擎使用B+Tree作為索引結構破讨,葉節(jié)點的data域存放的是數據記錄的地址丛晦。其采用索引文件與數據文件,索引文件只存放索引提陶,葉子節(jié)點存放數據的物理地址烫沙。數據文件存放數據。其索引方式是非聚集的隙笆。
- InnoDB也使用B+Tree作為索引結構锌蓄。但是它的主索引與數據都放在一個文件中。這種索引叫做聚集索引撑柔,因為InnoDB的數據文件本身要按主鍵聚集瘸爽,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定铅忿,則MySQL系統會自動選擇一個可以唯一標識數據記錄的列作為主鍵剪决,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵辆沦,這個字段長度為6個字節(jié)昼捍,類型為長整形。
- 區(qū)別一:InnoDB的主索引與數據都放在一個文件中肢扯。而MYISAM是分開存放的妒茬。
- 區(qū)別二:InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址。
- 區(qū)別三:InnoDB的主鍵索引是聚集索引蔚晨,而MYISAM不是聚集索引乍钻。
3.索引肛循,聚簇索引和二級索引的加鎖區(qū)別
- 聚集(clustered)索引,也叫聚簇索引银择。數據行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同多糠,一個表中只能擁有一個聚集索引。
- 非聚集(unclustered)索引浩考。該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同夹孔,一個表中可以擁有多個非聚集索引。會發(fā)生二次查詢析孽。
- 稠密索引:稠密索引文件中的索引塊保持鍵的順序與文件中的排序順序一致搭伤。
- 稀疏索引:稀疏索引沒有為每個數據都創(chuàng)建一個索引,它比稠密索引節(jié)省了更多的存儲空間,但查找給定值的記錄需更多的時間袜瞬。只有當數據文件是按照某個查找鍵排序時怜俐,在該查找鍵上建立的稀疏索引才能被使用,而稠密索引則可以應用在任何的查找鍵邓尤。
- 聯合索引:將一張表中多個列組成聯合索引(col1,col2,col3)拍鲤,其生效方式滿足最左前綴原則。
- 覆蓋索引:對于二級索引而言汞扎,在innodb中一般是需要先根據二級索引查詢到主鍵季稳,然后在根據一級索引查詢到數據。但是如果select的列都在索引中佩捞,就避免進行一級查詢绞幌。
4.主鍵選擇
- 在使用InnoDB存儲引擎時,如果沒有特別的需要一忱,請永遠使用一個與業(yè)務無關的自增字段作為主鍵莲蜘。
- where 1 = 1:能夠方便我們拼sql,但是使用了之后就無法使用索引優(yōu)化策略帘营,因此會進行全表掃描票渠,影響效率。
5.分表分庫
- 水平拆分:依據表中的數據的邏輯關系芬迄,將同一個表中的數據依照某種條件拆分到多臺數據庫(主機)上面问顷。按照1個或多個字段以及相應的規(guī)則,將一張表重的數據分到多張表中去禀梳。比如按照id%5的規(guī)則杜窄,將一張大表拆分成5張小表。適合具有超大表的系統算途。
- 垂直拆分:依照不同的表(或者Schema)來切分到不同的數據庫(主機)之上塞耕。一般按照模塊來分庫。適合各業(yè)務之間耦合度非常低的系統嘴瓤。
6.隔離級別
- read uncommit:讀不加鎖扫外,寫加共享鎖莉钙。會產生臟讀、幻讀筛谚。
- read commit:讀加共享鎖磁玉,寫加排它鎖,但不加間隙鎖驾讲。間隙鎖的主要作用是防止不可重復讀蚊伞,但會加大鎖的范圍。
- repeatable read(innodb默認):讀加共享鎖蝎毡,寫加間隙排它鎖厚柳。注意,Innodb對這個級別進行了特殊處理沐兵,使得這個級別能夠避免幻讀,但不是所有引擎都能夠防止幻讀便监!(網易面試官問)
- serialization:會給整張表加鎖扎谎,強一致,但是效率低烧董。
7.innodb中的鎖
- MVCC(multi-Version Concurrency Control):讀不加鎖毁靶,讀寫不沖突。適合寫少讀多的場景逊移。讀操作分為:快照讀(返回記錄的可見版本预吆,不加鎖)、當前讀(記錄的最新版本胳泉,加鎖拐叉,保證其它記錄不修改)。
- LBCC(Lock-Based Concurrency Control):
- join原理Simple Nested-Loop Join:效率最低扇商,按照join的次序凤瘦,在join的屬性上一個個掃描,并合并結果案铺。
- Index Nested-Loop Join:效率最高蔬芥,join的屬性上面有索引,根據索引來匹配控汉。
- Block Nested-Loop Join:用于沒有索引的列笔诵。它會采用join buffer,將外表的值緩存到join buffer中姑子,然后與內表進行批量比較乎婿,這樣可以降低對外表的訪問頻率
8.galera
- 多主架構:真正的多點讀寫的集群,在任何時候讀寫數據壁酬,都是最新的次酌。
- 同步復制恨课,各節(jié)點間無延遲且節(jié)點宕機不會導致數據丟失。
- 緊密耦合岳服,所有節(jié)點均保持相同狀態(tài)剂公,節(jié)點間無不同數據。
- 無需主從切換操作吊宋。
- 無需進行讀寫分離纲辽。
- 并發(fā)復制:從節(jié)點在APPLY數據時,支持并行執(zhí)行璃搜,有更好的性能表現拖吼。
- 故障切換:在出現數據庫故障時,因為支持多點寫入这吻,切的非常容易吊档。
- 熱插拔:在服務期間,如果數據庫掛了唾糯,只要監(jiān)控程序發(fā)現的夠快怠硼,不可服務時間就會非常少。在節(jié)點故障期間移怯,節(jié)點本身對集群的影響非常小香璃。
- 自動節(jié)點克隆:在新增節(jié)點舟误,或者停機維護時葡秒,增量數據或者基礎數據不需要人工手動備份提供,Galera Cluster會自動拉取在線節(jié)點數據嵌溢,最終集群會變?yōu)橐恢隆?/li>
- 對應用透明:集群的維護眯牧,對應用程序是透明的,幾乎感覺不到堵腹。
9.LSM Tree炸站,主要應用于nessDB、leveldb疚顷、hbase
- 核心思想的核心就是放棄部分讀能力旱易,換取寫入的最大化能力。它假設假定內存足夠大腿堤,因此不需要每次有數據更新就必須將數據寫入到磁盤中阀坏,而可以先將最新的數據駐留在內存中,等到積累到最后多之后笆檀,再使用歸并排序的方式將內存內的數據合并追加到磁盤隊尾忌堂。(使用歸并排序是要因為帶排序樹都是有序樹)
- LSM具有批量特性,存儲延遲酗洒。B樹在insert的時候可能會造成分裂士修,可能會造成隨機讀寫枷遂。而LSM將多次單頁隨機寫,變成一次多頁隨機寫,復用了磁盤尋道時間棋嘲,極大提升效率酒唉。
- LSM Tree放棄磁盤讀性能來換取寫的順序性。
- 一般會使用Bloom Filter來優(yōu)化LSM沸移。當將內存中的數據與磁盤數據合并的時候痪伦,先要判斷數據是否有重復,如果不用Bloom Filter就需要在磁盤上一層層地找雹锣,而使用了之后就會降低搜索代價网沾。
多線程
- synchronized、CAS
- Collections
- 支持高并發(fā)的數據結構蕊爵,如ConcurrentHashMap
- 基于AQS實現的鎖辉哥、信號量、計數器原理
- Runnable與Callable的區(qū)別
- 線程池
- 作用
- 減少在創(chuàng)建和銷毀線程上所花的時間以及系統資源的開銷 攒射。
- 當前任務與主線程隔離证薇,能實現和主線程的異步執(zhí)行,特別是很多可以分開重復執(zhí)行的任務匆篓。
8.阻塞隊列
9.threadlocal
Spring框架
- IOC/DI
- Core、Beans寇窑、Context鸦概、Expression Language
- JDBC、ORM甩骏、OXM窗市、JMS、Transaction
- AOP
- Web
- Test
- @Autowired原理
- 工廠模式
- 反射
- 自動配置@ConfigurationProperties(prefix = “hello”):讀取以hello為開頭的配置饮笛,屬性類使用
- @Configuration:指名當前類為配置類
- @EnableConfigurationProperties(Properties):指名配置屬性類
- @ConditionalOnClass(Condition.class):條件類咨察,只有Condition.class存在,當前配置類才生效
- Spring Boot在spring.factories配置了很多全限定名的配置類福青。
Redis
核心原理
- 常用數據類型String:二進制安全摄狱,可以存任何數據,比如序列化的圖片无午。最大長度位512M.
- Hash:是KV對集合媒役,本質是String類型的KV映射,適合存儲對象宪迟。
- List:簡單字符串鏈表酣衷,可以在left、right兩邊插入次泽,本質是雙向鏈表穿仪。緩沖區(qū)也是用這個實現席爽。
- Set:String類型的無序集合,內部實現是一個 value永遠為null的HashMap,實際就是通過計算hash的方式來快速排重的啊片,這也是set能提供判斷一個成員是否在集合內的原因只锻。
- zset:有序集合,每個元素會關聯一個double類型的score钠龙,然后根據score進行排序炬藤。注意:元素不能重復,但是score是可以重復的碴里。使用HashMap和跳躍表(SkipList)來保證數據的存儲和有序沈矿,HashMap里放的是成員到score的映射,而跳躍表里存放的是所有的成員咬腋,排序依據是HashMap里存的score.
- pub/sub:在Redis中羹膳,你可以設定對某一個key值進行消息發(fā)布及消息訂閱,當一個key值上進行了消息發(fā)布后根竿,所有訂閱它的客戶端都會收到相應的消息陵像。
持久化
- RDB:一種是手動執(zhí)行持久化命令來持久化快照;另一種是在配置文件中配置策略寇壳,來自動持久化醒颖。持久化命令有save、bgsave兩種壳炎,bgsave會調用fork命令泞歉,產生子進程來進行持久化,而父進程繼續(xù)處理數據匿辩,但是持久化的快照是fork那一刻的快照腰耙,因此這種策略可能會丟失一部分數據。特點:每次都記錄所有數據铲球,恢復快挺庞,子進程不影響父進程性能。
- AOF:append only file稼病,將每條操作命令都記錄到appendonly.aof文件中选侨,但是不會立馬寫入硬盤,我們可以配置always(每有一個命令溯饵,都同步)侵俗、everysec(每秒同步一次)、no(沒30秒同步一次)丰刊。往往everysec就夠了隘谣。aof數據損失要比RDB小。特點:有序記錄所有操作,數據丟失更少寻歧,會對操作做壓縮優(yōu)化掌栅,bgrewriteaof也會fork子進程,不影響父進程性能
事務
- Transactions:不是嚴格的ACID的事務码泛,但是這個Transactions還是提供了基本的命令打包執(zhí)行的功能(在服務器不出問題的情況下猾封,可以保證一連串的命令是順序在一起執(zhí)行的,中間有會有其它客戶端命令插進來執(zhí)行)噪珊。
- Redis還提供了一個Watch功能晌缘,你可以對一個key進行Watch,然后再執(zhí)行Transactions痢站,在這過程中磷箕,如果這個Watched的值進行了修改,那么這個Transactions會發(fā)現并拒絕執(zhí)行阵难。
KafKA
- topic
- broker
- partition
- consumer
- producer
- stream
- 存儲機制
- 網絡模型
- 注意:partition之間是無序的
- 消息隊列的生產者消費者中消費者沒有收到消息怎么辦岳枷,消息有順序比如1.2.3但是收到的卻是1.3.2怎么辦?消息發(fā)過來的過程中損壞或者出錯怎么辦
Spring security
- 攔截器棧
- @PreAuthorize
- @PostAuthorize
- 支持Expression Language
jvm原理
內存模型呜叫、垃圾收集器空繁、CMS與G1是重點
垃圾收集算法
- 標記-清除(CMS)容易產生碎片,當碎片太多會提前觸發(fā)Full GC
- 復制(年輕代基本用這個算法)會浪費一半的可能感覺
- 標記-整理(serial Old朱庆、Parallel Old)
- Serial:采用單線程stop-the-world的方式進行收集盛泡。當內存不足時,串行GC設置停頓標識娱颊,待所有線程都進入安全點(Safepoint)時饭于,應用線程暫停,串行GC開始工作维蒙,采用單線程方式回收空間并整理內存。串行收集器特別適合堆內存不高果覆、單核甚至雙核CPU的場合颅痊。
- ParNew
- Parallel Scavenge
CMS:
- 初始標記(stop of world)
- 并行標記、預清理
- 重新標記(stop of world)
- 并行清理
G1
將堆分成很多region局待,可以同時堆年輕代與老年代進行收集
- 初始標記(stop of world):初始標記(Initial Mark)負責標記所有能被直接可達的根對象(原生棧對象斑响、全局對象、JNI對象)
- 并行標記:
- 重新標記(stop of world):
- 清理(stop of world):
- 重置
gc觸發(fā)條件
- 從年輕代分區(qū)拷貝存活對象時钳榨,無法找到可用的空閑分區(qū)舰罚,會觸發(fā)Minor GC
- 從老年代分區(qū)轉移存活對象時,無法找到可用的空閑分區(qū)薛耻,會觸發(fā)Major GC
- 分配巨型對象時在老年代無法找到足夠的連續(xù)分區(qū),會觸發(fā)Major GC
- 可達性分析:通過檢查一塊內存空間能否被root達到,來判斷是否對其進行回收饲漾。
jdk不同版本新增的部分特性
jvm調優(yōu)
- VisualVM:JDK自帶JVM可視化工具,能過對內存考传、gc吃型、cpu、thread勤晚、class泉褐、變量等等信息進行可視化赐写。
設計模式
- 單例雙重檢查
- 觀察者模式
- 裝飾者模式:jdk中輸入輸出流用到了該模式
- 適配器模式:jdk中Reader、writer用到了該模式
- 代理模式
- 靜態(tài)代理
- JDK動態(tài)代理
- Cglib到動態(tài)代理
- 生產者消費者模式
- 工廠模式
項目管理與運維工具
- git+Jenkins
- maven
- K8Spod:Pod是所有業(yè)務類型的基礎兴枯,所有的容器均在Pod中運行,它是一個或多個容器的組合。每一個Pod都會被指派一個唯一的Ip地址财剖,在Pod中的每一個容器共享網絡命名空間,包括Ip地址和網絡端口沦补。Pod能夠被指定共享存儲卷的集合咪橙,在Pod中所有的容器能夠訪問共享存儲卷,允許這些容器共享數據产舞。
- kubelet:kubelet負責管理pods和它們上面的容器菠剩,images鏡像具壮、volumes、etc棺妓。
- ingress怜跑,用于負載均衡
- docker
- docker與虛擬機的區(qū)別
數據結構
- 平衡二叉樹AVL
- 高度log(n)
- 插入時間復雜度log(n)
- 紅黑樹
- 插入時間復雜度log(n)
- 查找時間復雜度log(n)
- 在查找是,紅黑樹雖然復雜度也是log(n),但是從效率上比要略低于AVL彤灶。但是其優(yōu)勢在于插入元素的時候,不會像AVL那樣頻繁地旋轉诵姜。
- B+Tree:只有葉子節(jié)點存值搏熄,非葉子節(jié)點只存key和child,因此同樣大小的物理頁上能存放更多的節(jié)點宵凌。每一層的節(jié)點數量越多止后,意味著層次越少译株,也就意味著IO次數越少,因此非常適合數據庫以及文件系統乘寒。
- 大根堆:采用數組存儲樹匪补,是一個完全樹。先插入到數組最后的位置上蚤氏,然后采用上浮的思想踊兜,將該元素與比它小的父元素調換润文,直到parent>target殿怜,浮到root;然后將root與未排序的最后一個元素交換位置;重復以上步驟骏掀,直到所有元素都有序。插入如查找的復雜度都是log(n)笑陈。
- 優(yōu)先隊列PriorityQueue葵袭,Java中使用小根堆實現坡锡,非線程安全。
- 優(yōu)先阻塞隊列PriorityBlockQueue帆锋,線程安全禽额。
算法
- 快排
- 時間復雜度O(nlog(n))
- 空間復雜度O(log(n))
- 堆排序
- 時間復雜度O(nlog(n))
- 空間復雜度O(1)
- 歸并排序
- 時間復雜度O(nlog(n))
- 空間復雜度O(n)
- 跳表時間復雜度O(log(n))
- 空間復雜度O(2n)
- 高度O(log(n))
分布式
cap理論
- 可用性
- 一致性
- 分區(qū)容忍性:對網絡斷開的容忍度脯倒,有點像魯棒性
- 拜占庭將軍問題
Raft 算法
- 有l(wèi)eader、follower徙菠、candidate
同步流程
- 由客戶端提交數據到Leader節(jié)點郁岩。
- 由Leader節(jié)點把數據復制到集群內所有的Follower節(jié)點问慎。如果一次復制失敗,會不斷進行重試如叼。
- Follower節(jié)點們接收到復制的數據笼恰,會反饋給Leader節(jié)點。
- 如果Leader節(jié)點接收到超過半數的Follower反饋逼龟,表明復制成功追葡。于是提交自己的數據,并通知客戶端數據提交成功匀钧。
- 由Leader節(jié)點通知集群內所有的Follower節(jié)點提交數據之斯,從而完成數據同步流程。
zookeeper
- Zab(Zookeeper Atomic Broadcast)協議,有兩種模式:
- 它們分別是:恢復模式(選主)和廣播模式(同步)达椰。
- 有兩種算法:1. basic paxos项乒;2. fast paxos(默認)
- 文件系統:zookeeper的通知機制檀何、分布式鎖、隊列管理栓辜、配置管理都是基于文件系統的垛孔。
- 分布式鎖:有了zookeeper的一致性文件系統,鎖的問題變得容易狭莱。鎖服務可以分為兩類概作,一個是保持獨占讯榕,另一個是控制時序。
- 獨占鎖:將zookeeper上的一個znode看作是一把鎖济竹,通過createznode的方式來實現霎槐。所有客戶端都去創(chuàng)建 /distribute_lock 節(jié)點栽燕,最終成功創(chuàng)建的那個客戶端也即擁有了這把鎖。用完刪除掉自己創(chuàng)建的distribute_lock 節(jié)點就釋放出鎖浴讯。
- 控制時序鎖:/distribute_lock 已經預先存在蔼啦,所有客戶端在它下面創(chuàng)建臨時順序編號目錄節(jié)點捏肢,和選master一樣,編號最小的獲得鎖衣屏,用完刪除辩棒。
- 隊列管理一睁,分為同步隊列、非同步隊列
- 數據復制的好處
- 容錯:一個節(jié)點出錯窘俺,不致于讓整個系統停止工作复凳,別的節(jié)點可以接管它的工作染坯;
- 提高系統的擴展能力 :把負載分布到多個節(jié)點上,或者增加節(jié)點來提高系統的負載能力掀宋;
- 提高性能:讓客戶端本地訪問就近的節(jié)點仲锄,提高用戶訪問速度儒喊。
5.一致性hash算法原理
微服務
Spring cloud
- 網關:zuul
- 分布式版本化配置 config
- 服務注冊和發(fā)現:Eureka,配置時需要注意多久刷新列表一次侨颈,多久監(jiān)測心跳等。
- service-to-service 調用
- 負載均衡:Ribbon妻柒;在生成RestTemplate的bean時举塔,通過@LoadBalanced注解可以使得RestTemplate的調用
- 斷路器:Hystrix
- 監(jiān)控:spring admin求泰。在啟動類上加@EnableAdminServer注解。
java web
- servlet工作原理
- tomcat工作原理,好文芽丹,強推
- container
linux
- 系統結構志衍,講得很好聊替,強推
- 硬鏈接與軟連接
- 硬鏈接:數據節(jié)點通過引用計數的方式來對指向它的硬鏈接計數惹悄,當計數為0就刪除。
- 軟連接:我們可以把它看成是快捷方式暂殖,它只是記錄了某個文件的硬鏈接的路徑当纱,如果我們把源文件刪除坡氯,再重新創(chuàng)建一個相同名字的文件,那么軟連接指向的就是新創(chuàng)建的文件手形。
- 虛擬文件系統(VFS):文件系統是有很多實現的悯恍,比如ext2涮毫、ext3贷屎、FAT等等豫尽,而VFS則是存在于應用程序與文件系統中間顷帖,它封裝了open贬墩、close妄呕、read绪励、write等等操作文件系統的接口,為應用程序屏蔽掉不同文件系統之間的差異停做。
- VFS數據結構
其它
- bitmap大莫,大文件交集
- Elasticsearch索引原理
- 從內存到屏幕經歷了啥
- 高并發(fā)場景的限流只厘,你怎么來確定限流限多少,模擬場景和實際場景有區(qū)別怎么解決河咽,
百度面試
- 說一下redis與kafka忘蟹,redis持久化策略
- git中rebase與merge區(qū)別
- docker底層原理们陆,依賴操作系統的什么
- ls -l | grep xxx的執(zhí)行過程,盡可能的細杂腰,是多進程還是單進程喂很?
- 兩個有序數組求中位數
- 算法 3Sum、中序遍歷非遞歸實現凌摄、循環(huán)打印矩陣
- final锨亏、finally忙干、finanize
- jvm內存模型
- 垃圾回收器
- Spring特點介紹下
- Synchronize與ReentrantLock的區(qū)別捐迫、使用場景
- CAS使用場景
- 聊了下git+jekins+K8S+docker實現自動化部署
- innodb原理,使用場景反浓,與MYISAM在場景上的區(qū)別
- weakReference雷则、softReference等
- Hbase的原理肪笋,LSM Tree
- Linux中涂乌,哪種進程可以使用管道
美團
- 權限模型
- 介紹下線程池,阻塞隊列的用法湿右,無界隊列真的無界嗎毅人?
- 說一下redis
- kafka存儲模型與網絡模型
- zookeeper與redis實現分布式鎖
- 樂觀鎖與悲觀鎖
- 算法:有n個人尖殃,給你ai與aj的身高關系送丰,如ai比aj高,進行身高排序俐载,如果條件不滿足,則輸出“不滿足”
- Spring boot的特性
以上是總結出的最全技術面試題目挖炬,以下是最新總結出的BAT面試java必考題目和答案意敛。
私信作者【面試題】領取面試題答案以及學習資料