摘要:由于線程被無(wú)限期地阻塞,因此程序不可能正常終止。因而,紅黑樹(shù)是相對(duì)是接近平衡的二叉樹(shù)。旋轉(zhuǎn)的目的是讓樹(shù)保持紅黑樹(shù)的特性。三次握手和四次揮手面試??蜑榱藴?zhǔn)確無(wú)誤地把數(shù)據(jù)送達(dá)目標(biāo)處,協(xié)議采用了三次握手策略。
由于作者面試過(guò)程中高度緊張,本文中只列出了自己還記得的部分題目。
經(jīng)歷了漫長(zhǎng)一個(gè)月的等待,終于在前幾天通過(guò)面試官獲悉已被螞蟻金服錄取,這期間的焦慮、痛苦自不必說(shuō),知道被錄取的那一刻,一整年的陰霾都一掃而空了。
筆者面的是阿里的Java研發(fā)工程師崗,面試流程是3輪技術(shù)面+1輪hr面。
1 意外的一面一面的時(shí)候大概是3月12號(hào),面完等了差不多半個(gè)月才突然接到二面面試官的電話。一面可能是簡(jiǎn)歷面,所以問(wèn)題比較簡(jiǎn)單。
ArrayList和LinkedList區(qū)別1. 是否保證線程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保證線程安全;
2. 底層數(shù)據(jù)結(jié)構(gòu): Arraylist 底層使用的是Object數(shù)組;LinkedList 底層使用的是雙向鏈表數(shù)據(jù)結(jié)構(gòu)(JDK1.6之前為循環(huán)鏈表,JDK1.7取消了循環(huán)。注意雙向鏈表和雙向循環(huán)鏈表的區(qū)別,下面有介紹到?。?/p>
3. 插入和刪除是否受元素位置的影響: ① ArrayList 采用數(shù)組存儲(chǔ),所以插入和刪除元素的時(shí)間復(fù)雜度受元素位置的影響。 比如:執(zhí)行add(E e)方法的時(shí)候, ArrayList 會(huì)默認(rèn)在將指定的元素追加到此列表的末尾,這種情況時(shí)間復(fù)雜度就是O(1)。但是如果要在指定位置 i 插入和刪除元素的話(add(int index, E element))時(shí)間復(fù)雜度就為 O(n-i)。因?yàn)樵谶M(jìn)行上述操作的時(shí)候集合中第 i 和第 i 個(gè)元素之后的(n-i)個(gè)元素都要執(zhí)行向后位/向前移一位的操作。 ② LinkedList 采用鏈表存儲(chǔ),所以插入,刪除元素時(shí)間復(fù)雜度不受元素位置的影響,都是近似 O(1)而數(shù)組為近似 O(n)。
4. 是否支持快速隨機(jī)訪問(wèn): LinkedList 不支持高效的隨機(jī)元素訪問(wèn),而 ArrayList 支持??焖匐S機(jī)訪問(wèn)就是通過(guò)元素的序號(hào)快速獲取元素對(duì)象(對(duì)應(yīng)于get(int index)方法)。
5. 內(nèi)存空間占用: ArrayList的空 間浪費(fèi)主要體現(xiàn)在在list列表的結(jié)尾會(huì)預(yù)留一定的容量空間,而LinkedList的空間花費(fèi)則體現(xiàn)在它的每一個(gè)元素都需要消耗比ArrayList更多的空間(因?yàn)橐娣胖苯雍罄^和直接前驅(qū)以及數(shù)據(jù))。
什么情況會(huì)造成內(nèi)存泄漏在Java中,內(nèi)存泄漏就是存在一些被分配的對(duì)象,這些對(duì)象有下面兩個(gè)特點(diǎn):
這些對(duì)象是可達(dá)的,即在有向圖中,存在通路可以與其相連;
這些對(duì)象是無(wú)用的,即程序以后不會(huì)再使用這些對(duì)象。
如果對(duì)象滿足這兩個(gè)條件,這些對(duì)象就可以判定為Java中的內(nèi)存泄漏,這些對(duì)象不會(huì)被GC所回收,然而它卻占用內(nèi)存。
什么是線程死鎖");多個(gè)線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于線程被無(wú)限期地阻塞,因此程序不可能正常終止。
如下圖所示,線程 A 持有資源 2,線程 B 持有資源 1,他們同時(shí)都想申請(qǐng)對(duì)方的資源,所以這兩個(gè)線程就會(huì)互相等待而進(jìn)入死鎖狀態(tài)。
線程死鎖示意圖
下面通過(guò)一個(gè)例子來(lái)說(shuō)明線程死鎖,代碼模擬了上圖的死鎖的情況 (代碼來(lái)源于《并發(fā)編程之美》):
public class DeadLockDemo { private static Object resource1 = new Object();//資源 1 private static Object resource2 = new Object();//資源 2 public static void main(String[] args) { new Thread(() -> { synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource2"); synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); } } }, "線程 1").start(); new Thread(() -> { synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource1"); synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); } } }, "線程 2").start(); }}
Output
Thread[線程 1,5,main]get resource1Thread[線程 2,5,main]get resource2Thread[線程 1,5,main]waiting get resource2Thread[線程 2,5,main]waiting get resource1
線程 A 通過(guò) synchronized (resource1) 獲得 resource1 的監(jiān)視器鎖,然后通過(guò)Thread.sleep(1000);讓線程 A 休眠 1s 為的是讓線程 B 得到執(zhí)行然后獲取到 resource2 的監(jiān)視器鎖。線程 A 和線程 B 休眠結(jié)束了都開(kāi)始企圖請(qǐng)求獲取對(duì)方的資源,然后這兩個(gè)線程就會(huì)陷入互相等待的狀態(tài),這也就產(chǎn)生了死鎖。上面的例子符合產(chǎn)生死鎖的四個(gè)必要條件。
學(xué)過(guò)操作系統(tǒng)的朋友都知道產(chǎn)生死鎖必須具備以下四個(gè)條件:
互斥條件:該資源任意一個(gè)時(shí)刻只由一個(gè)線程占用。
請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
不剝奪條件:線程已獲得的資源在末使用完之前不能被其他線程強(qiáng)行剝奪,只有自己使用完畢后才釋放資源。
循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
我們只要破壞產(chǎn)生死鎖的四個(gè)條件中的其中一個(gè)就可以了。
破壞互斥條件
這個(gè)條件我們沒(méi)有辦法破壞,因?yàn)槲覀冇面i本來(lái)就是想讓他們互斥的(臨界資源需要互斥訪問(wèn))。
破壞請(qǐng)求與保持條件
一次性申請(qǐng)所有的資源。
破壞不剝奪條件
占用部分資源的線程進(jìn)一步申請(qǐng)其他資源時(shí),如果申請(qǐng)不到,可以主動(dòng)釋放它占有的資源。
破壞循環(huán)等待條件
靠按序申請(qǐng)資源來(lái)預(yù)防。按某一順序申請(qǐng)資源,釋放資源則反序釋放。破壞循環(huán)等待條件。
我們對(duì)線程 2 的代碼修改成下面這樣就不會(huì)產(chǎn)生死鎖了。
new Thread(() -> { synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource2"); synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); } } }, "線程 2").start();
Output
Thread[線程 1,5,main]get resource1Thread[線程 1,5,main]waiting get resource2Thread[線程 1,5,main]get resource2Thread[線程 2,5,main]get resource1Thread[線程 2,5,main]waiting get resource2Thread[線程 2,5,main]get resource2Process finished with exit code 0
我們分析一下上面的代碼為什么避免了死鎖的發(fā)生");
線程 1 首先獲得到 resource1 的監(jiān)視器鎖,這時(shí)候線程 2 就獲取不到了。然后線程 1 再去獲取 resource2 的監(jiān)視器鎖,可以獲取到。然后線程 1 釋放了對(duì) resource1、resource2 的監(jiān)視器鎖的占用,線程 2 獲取到就可以執(zhí)行了。這樣就破壞了破壞循環(huán)等待條件,因此避免了死鎖。
紅黑樹(shù)是什么");紅黑樹(shù)(Red-Black Tree,簡(jiǎn)稱R-B Tree),它一種特殊的二叉查找樹(shù)。紅黑樹(shù)是特殊的二叉查找樹(shù),意味著它滿足二叉查找樹(shù)的特征:任意一個(gè)節(jié)點(diǎn)所包含的鍵值,大于等于左孩子的鍵值,小于等于右孩子的鍵值。除了具備該特性之外,紅黑樹(shù)還包括許多額外的信息。
紅黑樹(shù)的每個(gè)節(jié)點(diǎn)上都有存儲(chǔ)位表示節(jié)點(diǎn)的顏色,顏色是紅(Red)或黑(Black)。紅黑樹(shù)的特性:
每個(gè)節(jié)點(diǎn)或者是黑色,或者是紅色。
根節(jié)點(diǎn)是黑色。
每個(gè)葉子節(jié)點(diǎn)是黑色。
如果一個(gè)節(jié)點(diǎn)是紅色的,則它的子節(jié)點(diǎn)必須是黑色的。
從一個(gè)節(jié)點(diǎn)到該節(jié)點(diǎn)的子孫節(jié)點(diǎn)的所有路徑上包含相同數(shù)目的黑節(jié)點(diǎn)。
關(guān)于它的特性,需要注意的是:
第一,特性(3)中的葉子節(jié)點(diǎn),是只為空(NIL或null)的節(jié)點(diǎn)。
第二,特性(5),確保沒(méi)有一條路徑會(huì)比其他路徑長(zhǎng)出倆倍。因而,紅黑樹(shù)是相對(duì)是接近平衡的二叉樹(shù)。
img
具體實(shí)現(xiàn)代碼這里不貼了,要實(shí)現(xiàn)起來(lái),需要包含的基本操作是添加、刪除和旋轉(zhuǎn)。在對(duì)紅黑樹(shù)進(jìn)行添加或刪除后,會(huì)用到旋轉(zhuǎn)方法。旋轉(zhuǎn)的目的是讓樹(shù)保持紅黑樹(shù)的特性。旋轉(zhuǎn)包括兩種:左旋 和 右旋。
紅黑樹(shù)的應(yīng)用比較廣泛,主要是用它來(lái)存儲(chǔ)有序的數(shù)據(jù),它的查找、插入和刪除操作的時(shí)間復(fù)雜度是O(lgn)。
TCP 三次握手和四次揮手(面試???為了準(zhǔn)確無(wú)誤地把數(shù)據(jù)送達(dá)目標(biāo)處,TCP協(xié)議采用了三次握手策略。
漫畫(huà)圖解:
圖片來(lái)源:《圖解HTTP》
TCP三次握手
簡(jiǎn)單示意圖:
TCP三次握手
客戶端–發(fā)送帶有 SYN 標(biāo)志的數(shù)據(jù)包–一次握手–服務(wù)端
服務(wù)端–發(fā)送帶有 SYN/ACK 標(biāo)志的數(shù)據(jù)包–二次握手–客戶端
客戶端–發(fā)送帶有帶有 ACK 標(biāo)志的數(shù)據(jù)包–三次握手–服務(wù)端
三次握手的目的是建立可靠的通信信道,說(shuō)到通訊,簡(jiǎn)單來(lái)說(shuō)就是數(shù)據(jù)的發(fā)送與接收,而三次握手最主要的目的就是雙方確認(rèn)自己與對(duì)方的發(fā)送與接收是正常的。
第一次握手:Client 什么都不能確認(rèn);Server 確認(rèn)了對(duì)方發(fā)送正常
第二次握手:Client 確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送、接收正常;Server 確認(rèn)了:自己接收正常,對(duì)方發(fā)送正常
第三次握手:Client 確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送、接收正常;Server 確認(rèn)了:自己發(fā)送、接收正常,對(duì)方發(fā)送、接收正常
所以三次握手就能確認(rèn)雙發(fā)收發(fā)功能都正常,缺一不可。
接收端傳回發(fā)送端所發(fā)送的 SYN 是為了告訴發(fā)送端,我接收到的信息確實(shí)就是你所發(fā)送的信號(hào)了。
SYN 是 TCP/IP 建立連接時(shí)使用的握手信號(hào)。在客戶機(jī)和服務(wù)器之間建立正常的 TCP 網(wǎng)絡(luò)連接時(shí),客戶機(jī)首先發(fā)出一個(gè) SYN 消息,服務(wù)器使用 SYN-ACK 應(yīng)答表示接收到了這個(gè)消息,最后客戶機(jī)再以 ACK(Acknowledgement[漢譯:確認(rèn)字符 ,在數(shù)據(jù)通信傳輸中,接收站發(fā)給發(fā)送站的一種傳輸控制字符。它表示確認(rèn)發(fā)來(lái)的數(shù)據(jù)已經(jīng)接受無(wú)誤。 ])消息響應(yīng)。這樣在客戶機(jī)和服務(wù)器之間才能建立起可靠的TCP連接,數(shù)據(jù)才可以在客戶機(jī)和服務(wù)器之間傳遞。
雙方通信無(wú)誤必須是兩者互相發(fā)送信息都無(wú)誤。傳了 SYN,證明發(fā)送方到接收方的通道沒(méi)有問(wèn)題,但是接收方到發(fā)送方的通道還需要 ACK 信號(hào)來(lái)進(jìn)行驗(yàn)證。
TCP四次揮手
斷開(kāi)一個(gè) TCP 連接則需要“四次揮手”:
客戶端-發(fā)送一個(gè) FIN,用來(lái)關(guān)閉客戶端到服務(wù)器的數(shù)據(jù)傳送
服務(wù)器-收到這個(gè) FIN,它發(fā)回一 個(gè) ACK,確認(rèn)序號(hào)為收到的序號(hào)加1 。和 SYN 一樣,一個(gè) FIN 將占用一個(gè)序號(hào)
服務(wù)器-關(guān)閉與客戶端的連接,發(fā)送一個(gè)FIN給客戶端
客戶端-發(fā)回 ACK 報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1
任何一方都可以在數(shù)據(jù)傳送結(jié)束后發(fā)出連接釋放的通知,待對(duì)方確認(rèn)后進(jìn)入半關(guān)閉狀態(tài)。當(dāng)另一方也沒(méi)有數(shù)據(jù)再發(fā)送的時(shí)候,則發(fā)出連接釋放通知,對(duì)方確認(rèn)后就完全關(guān)閉了TCP連接。
舉個(gè)例子:A 和 B 打電話,通話即將結(jié)束后,A 說(shuō)“我沒(méi)啥要說(shuō)的了”,B回答“我知道了”,但是 B 可能還會(huì)有要說(shuō)的話,A 不能要求 B 跟著自己的節(jié)奏結(jié)束通話,于是 B 可能又巴拉巴拉說(shuō)了一通,最后 B 說(shuō)“我說(shuō)完了”,A 回答“知道了”,這樣通話才算結(jié)束。
上面講的比較概括,推薦一篇講的比較細(xì)致的文章:https://blog.csdn.net/qzcsu/article/details/72861891
突然的二面一面的時(shí)候大概是3月12號(hào),面完等了差不多半個(gè)月才突然接到二面面試官的電話。
介紹項(xiàng)目 Storm怎么保證一致性Storm是一個(gè)分布式的流處理系統(tǒng),利用anchor和ack機(jī)制保證所有tuple都被成功處理。如果tuple出錯(cuò),則可以被重傳,但是如何保證出錯(cuò)的tuple只被處理一次呢?Storm提供了一套事務(wù)性組件Transaction Topology,用來(lái)解決這個(gè)問(wèn)題。
Transactional Topology目前已經(jīng)不再維護(hù),由Trident來(lái)實(shí)現(xiàn)事務(wù)性topology,但是原理相同。
參考:https://dwz.cn/8bXRPexB
說(shuō)一下 HashMap 以及它是否線程安全HashMap 基于哈希表的 Map 接口的實(shí)現(xiàn)。HashMap 中,null 可以作為鍵,這樣的鍵只有一個(gè);可以有一個(gè)或多個(gè)鍵所對(duì)應(yīng)的值為null。HashMap 中 hash 數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。Hashtable、HashMap都使用了 Iterator。而由于歷史原因,Hashtable還使用了Enumeration的方式 。HashMap 實(shí)現(xiàn) Iterator,支持fast-fail。
哈希表是由數(shù)組+鏈表組成的,它是通過(guò)把key值進(jìn)行hash來(lái)定位對(duì)象的,這樣可以提供比線性存儲(chǔ)更好的性能。
img
?
HashMap不是線程安全的。
十億條淘寶購(gòu)買記錄,怎么獲取出現(xiàn)最多的前十個(gè)這是一道典型的有限內(nèi)存的海量數(shù)據(jù)處理的題目。一般這類題目的解答無(wú)非是以下幾種:
分治,hash映射,堆排序,雙層桶劃分,Bloom Filter,bitmap,數(shù)據(jù)庫(kù)索引,mapreduce等。
具體情形都有很多不同的方案。這類題目可以到網(wǎng)上搜索一下,了解下套路,后面就基本都會(huì)了。
平時(shí)有沒(méi)有用linux系統(tǒng),怎么查看某個(gè)進(jìn)程ps aux|grep java 查看java進(jìn)程ps aux 查看所有進(jìn)程ps –ef|grep tomcat 查看所有有關(guān)tomcat的進(jìn)程ps -ef|grep --color java 高亮要查詢的關(guān)鍵字kill -9 19979 終止線程號(hào)位19979的進(jìn)程
說(shuō)一下 Innodb 和 MySIAM 的區(qū)別MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持。MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持以及外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。
InnoDB不支持FULLTEXT類型的索引。
InnoDB 中不保存表的具體行數(shù),也就是說(shuō),執(zhí)行select count(
) from table時(shí),InnoDB要掃描一遍整個(gè)表來(lái)計(jì)算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(
)語(yǔ)句包含 where條件時(shí),兩種表的操作是一樣的。對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。
LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用。
說(shuō)一下jvm內(nèi)存模型,介紹一下你了解的垃圾收集器其實(shí)并沒(méi)有 jvm 內(nèi)存模型的概念。應(yīng)該是 Java 內(nèi)存模型或者 jvm 內(nèi)存結(jié)構(gòu),這里面試者一定要聽(tīng)清楚問(wèn)的是哪個(gè),再回答。
可以參考:
可能是把Java內(nèi)存區(qū)域講的最清楚的一篇文章
搞定 JVM 垃圾回收就是這么簡(jiǎn)單
你說(shuō)你是大數(shù)據(jù)方向的,了解哪些大數(shù)據(jù)框架作者回答了一些zookeeper、storm、HDFS、Hbase等
其他問(wèn)題100個(gè)有序的整型,如何打亂順序?
如何設(shè)計(jì)一個(gè)可靠的UDP協(xié)議?
二面大概就是這些,其中storm一致性這個(gè)問(wèn)題被面試官懷疑了一下,就有點(diǎn)緊張,其實(shí)沒(méi)答錯(cuò),所以還是要對(duì)知識(shí)掌握得更明確才行。
準(zhǔn)備充足的三面清明節(jié)的時(shí)候例外地沒(méi)有回家掃墓,因?yàn)橹雷约旱娜蹴?xiàng)是操作系統(tǒng)和海量數(shù)據(jù)題這塊,所以想著惡補(bǔ)這方面的知識(shí),不過(guò)之后的面試意外的并沒(méi)有問(wèn)到這方面的內(nèi)容。
介紹項(xiàng)目項(xiàng)目介紹完之后沒(méi)問(wèn)太多
介紹一下HashMapHashMap真的是面試高頻題,多次面試都問(wèn)到了,一定要掌握。
介紹一下并發(fā)這里可以把整個(gè)并發(fā)的體系都說(shuō)下,包括volatile、synchronized、lock、樂(lè)觀悲觀鎖、鎖膨脹、鎖降級(jí)、線程池等
銀行賬戶讀寫(xiě)怎么做我說(shuō)了讀寫(xiě)鎖以及可能出現(xiàn)死鎖問(wèn)題
說(shuō)一下關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì):
性能:NOSQL是基于鍵值對(duì)的,可以想象成表中的主鍵和值的對(duì)應(yīng)關(guān)系,而且不需要經(jīng)過(guò)SQL層的解析,所以性能非常高
可擴(kuò)展性:同樣也是因?yàn)榛阪I值對(duì),數(shù)據(jù)之間沒(méi)有耦合性,所以非常容易水平擴(kuò)展。
使用場(chǎng)景:日志、埋點(diǎn)、論壇、博客等
關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)勢(shì):
復(fù)雜查詢:可以用SQL語(yǔ)句方便的在一個(gè)表以及多個(gè)表之間做非常復(fù)雜的數(shù)據(jù)查詢
事務(wù)支持:使得對(duì)于安全性能很高的數(shù)據(jù)訪問(wèn)要求得以實(shí)現(xiàn)。
使用場(chǎng)景:所有有邏輯關(guān)系的數(shù)據(jù)存儲(chǔ)
如何訪問(wèn)鏈表中間節(jié)點(diǎn)對(duì)于這個(gè)問(wèn)題,我們首先能夠想到的就是先遍歷一遍整個(gè)的鏈表,然后計(jì)算出鏈表的長(zhǎng)度,進(jìn)而遍歷第二遍找出中間位置的數(shù)據(jù)。這種方式非常簡(jiǎn)單。
若題目要求只能遍歷一次鏈表,那又當(dāng)如何解決問(wèn)題?
可以采取建立兩個(gè)指針,一個(gè)指針一次遍歷兩個(gè)節(jié)點(diǎn),另一個(gè)節(jié)點(diǎn)一次遍歷一個(gè)節(jié)點(diǎn),當(dāng)快指針遍歷到空節(jié)點(diǎn)時(shí),慢指針指向的位置為鏈表的中間位置,這種解決問(wèn)題的方法稱為快慢指針?lè)椒ā?/p> 說(shuō)下進(jìn)程間通信,以及各自的區(qū)別
進(jìn)程間通信是指在不同進(jìn)程之間傳播或交換信息。方式通常有管道(包括無(wú)名管道和命名管道)、消息隊(duì)列、信號(hào)量、共享存儲(chǔ)、Socket、Streams等。
訪問(wèn)淘寶網(wǎng)頁(yè)的一個(gè)具體流程,從獲取ip地址,到怎么返回相關(guān)內(nèi)容先通過(guò)DNS解析到服務(wù)器地址,然后反向代理、負(fù)載均衡服務(wù)器等,尋找集群中的一臺(tái)機(jī)器來(lái)真正執(zhí)行你的請(qǐng)求。還可以介紹CDN、頁(yè)面緩存、Cookie以及session等。
這個(gè)過(guò)程還包括三次握手、HTTP request中包含哪些內(nèi)容,狀態(tài)碼等,還有OSI七層分層可以介紹。
服務(wù)器接到請(qǐng)求后,會(huì)執(zhí)行業(yè)務(wù)邏輯,執(zhí)行過(guò)程中可以按照MVC來(lái)分別介紹。
服務(wù)處理過(guò)程中是否調(diào)用其他RPC服務(wù)或者異步消息,這個(gè)過(guò)程包含服務(wù)發(fā)現(xiàn)與注冊(cè),消息路由。
最后查詢數(shù)據(jù)庫(kù),會(huì)不會(huì)經(jīng)過(guò)緩存?是不是關(guān)系型數(shù)據(jù)庫(kù)?是會(huì)分庫(kù)分表還是做哪些操作?
對(duì)于數(shù)據(jù)庫(kù),分庫(kù)分表如果數(shù)據(jù)量大的話是有必要的,一般業(yè)務(wù)根據(jù)一個(gè)分表字段進(jìn)行取模進(jìn)行分表,而在做數(shù)據(jù)庫(kù)操作的時(shí)候,也根據(jù)同樣的規(guī)則,決定數(shù)據(jù)的讀寫(xiě)操作對(duì)應(yīng)哪張表。這種也有開(kāi)源的實(shí)現(xiàn)的,如阿里的TDDL就有這種功能。分庫(kù)分表還涉及到很多技術(shù),比如sequence如何設(shè)置 ,如何解決熱點(diǎn)問(wèn)題等。
最后再把處理結(jié)果封裝成response,返回給客戶端。瀏覽器再進(jìn)行頁(yè)面渲染。
焦慮的hr面之所以說(shuō)hr面焦慮,是因?yàn)槊嬖嚽拔疫€在看IG的半決賽(實(shí)在復(fù)習(xí)不下),接到電話的時(shí)候分外緊張,在一些點(diǎn)上答得很差。
遇到什么挫折這種問(wèn)題主要考察面試者遇見(jiàn)困難是否能堅(jiān)持下去,并且可以看出他的解決問(wèn)題的能力。
可以簡(jiǎn)單描述挫折,并說(shuō)明自己如何克服,最終有哪些收獲。
職業(yè)規(guī)劃表明自己決心,首先自己不準(zhǔn)備繼續(xù)求學(xué)了,必須招工作了。然后說(shuō)下自己不會(huì)短期內(nèi)換行業(yè),或者換工作,自己比較喜歡,希望可以堅(jiān)持幾年看自己的興趣再規(guī)劃之類的。
對(duì)阿里的認(rèn)識(shí)這個(gè)比較簡(jiǎn)答,夸就行了。
有什么崇拜的人嗎我說(shuō)了詹姆斯哈登,hr小姐姐居然笑了。
這個(gè)可以說(shuō)一些IT大牛。
希望去哪里就業(yè)這個(gè)問(wèn)題果斷回答該公司所在的城市啊。
其他問(wèn)題有什么興趣愛(ài)好,能拿得上臺(tái)表演的有嗎
記憶深刻的事情
總結(jié)提前批更多的是考察基礎(chǔ)知識(shí),大公司都有自己在用的框架,你進(jìn)去后基本上得重新學(xué)這些框架,所以對(duì)他們來(lái)說(shuō),基礎(chǔ)是否扎實(shí)才是考察的關(guān)鍵。
基礎(chǔ)包括: 操作系統(tǒng)、linxu、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)、算法、java(基礎(chǔ)、容器、高并發(fā)、jvm)、計(jì)算機(jī)網(wǎng)絡(luò)等**
建議要投資知識(shí),從寒假到現(xiàn)在,先后買了9個(gè)極客時(shí)間的課程、訂閱了H神的知識(shí)星球、當(dāng)當(dāng)買了四五本相關(guān)技術(shù)書(shū)籍…
雖然購(gòu)買的課很多還來(lái)不及讀(慚愧)
當(dāng)時(shí)我問(wèn)一個(gè)Java群的師兄,學(xué)不下了怎么辦,他說(shuō),換種姿勢(shì)繼續(xù)學(xué),還別說(shuō),有時(shí)候失眠的時(shí)候,我都在看極客時(shí)間或知識(shí)星球催眠自己…
要對(duì)知識(shí)做好總結(jié),雖然以前也有記錄簡(jiǎn)書(shū)的習(xí)慣,但是大多數(shù)時(shí)候都是寫(xiě)了不發(fā)表,自己做一個(gè)記憶的作用,3月份我給自己的要求就是,對(duì)每個(gè)知識(shí)點(diǎn)要做到能夠有自己的理解,然后寫(xiě)一篇質(zhì)量較好的博客總結(jié)。
面試建議是,一定要自信,敢于表達(dá),面試的時(shí)候我們對(duì)知識(shí)的掌握有時(shí)候很難面面俱到,把自己的思路說(shuō)出來(lái),而不是直接告訴面試官自己不懂,這也是可以加分的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/7294.html
摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng)。面試官那你都了解里面的哪些東西呢我哈哈哈這可是我的強(qiáng)項(xiàng),從,說(shuō)到,,又說(shuō)到線程池,分別說(shuō)了底層實(shí)現(xiàn)和項(xiàng)目中的應(yīng)用。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng) 35k+ Star。會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://github.com/Snailclimb... ...
摘要:作者鏈接來(lái)源??途W(wǎng)今天剛剛收到的電話,開(kāi)心,簡(jiǎn)單記錄一下美團(tuán)的面經(jīng)。當(dāng)時(shí)面試官評(píng)價(jià)基礎(chǔ)不是很好,其他還行。的三次握手四次揮手。整體感覺(jué)美團(tuán)的面試比較基礎(chǔ),但是各個(gè)方面都有涉及到。 作者:icysnowgx鏈接:https://www.nowcoder.com/disc...來(lái)源:??途W(wǎng) 今天剛剛收到hr的電話,開(kāi)心,簡(jiǎn)單記錄一下美團(tuán)的面經(jīng)。時(shí)間隔的比較久了,簡(jiǎn)單回憶下,最后會(huì)給出我之前...
摘要:財(cái)富管理專場(chǎng)上,螞蟻金服微貸事業(yè)群高級(jí)前端技術(shù)專家王卓做了主題為螞蟻微貸互動(dòng)營(yíng)銷技術(shù)體系實(shí)踐的精彩分享。通過(guò)互動(dòng)技術(shù),最終實(shí)現(xiàn)拉新,留存和促活等目標(biāo)。營(yíng)銷技術(shù)方案對(duì)接研發(fā)平臺(tái),通過(guò)鳳蝶系統(tǒng)和研發(fā)管理體系進(jìn)行打通。 摘要:以數(shù)字金融新原力(The New Force of Digital Finance)為主題,螞蟻金服ATEC城市峰會(huì)于2019年1月4日上海如期舉辦。財(cái)富管理專場(chǎng)上,螞...
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
一面(23min) 自我介紹 項(xiàng)目中最自豪的部分 也沒(méi)什么太自豪的,就是在移動(dòng)端開(kāi)發(fā)的時(shí)候不存在cookie和session,然后用redis存了一下驗(yàn)證碼感覺(jué)還不錯(cuò)。 講一講ArrayList和LinkedListArrayList底層實(shí)現(xiàn)是數(shù)組,并且每次擴(kuò)容擴(kuò)容1.5倍,常用在查詢較多的場(chǎng)景中。而LinkedList底層實(shí)現(xiàn)是鏈表常用在增刪比較多的場(chǎng)景 你說(shuō)你對(duì)鎖有了解,說(shuō)一說(shuō)你最熟...
閱讀 3444·2021-11-25 09:43
閱讀 3491·2021-11-19 09:40
閱讀 2496·2021-10-14 09:48
閱讀 1337·2021-09-09 11:39
閱讀 1956·2019-08-30 15:54
閱讀 2848·2019-08-30 15:44
閱讀 2026·2019-08-29 13:12
閱讀 1570·2019-08-29 12:59