技術面試指導

2021-09-28 15:17:02 字數 4512 閱讀 1520

必備項

0.自我介紹

表達流暢,不要太差即可

建議: 自己的理解 -> 搜部落格/githug上搜大神的博文、理解 。可以將 面試題中的問題 在部落格、github上搜答案,不要在面試題附帶的答案上搜

坑:不要寫「精通」

建議:掌握、熟練 ,理解 ,會使用

3.專案 坑:電商、管理系統 ->培訓機構標配,缺乏真實專案的感覺

建議:(1).提前準備好回答的台詞

(2).技術本身的不足,如何彌補 -》技術、真實性

a.mysql、大型、海量 : 如果資料超過的mysql的容量怎麼處理?

b.高併發專案,快取: 在哪些場景 見過快取失效?怎麼解決?

c.mq解決耦合性:哪些真實的場景 用到 解耦合?

(3)專案的重難點

a.分布式專案: 如何共享資料

b.高併發: 幾級快取,如何限流,如何熔斷

(4)真實性:實際的使用場景

a.「用到的人臉識別技術」 : 哪些場景用到了

b.多執行緒、設計模式、演算法: 處理什麼業務?場景?

c.大資料的專案? 資料從哪來?

d.如何設計表?外來鍵 一對一 一對多如何

e.專案能否訪問?

(5)描述:技術+文字 , 專案週期:半年以上 , 寫幾個? 3以內 : 2-3 畢業:1-2

4.表達溝通能力

加分項

1.高併發/分布式

a.多執行緒(juc,aqs,執行緒安全,鎖機制,生產消費者)

b.資料處理

sql優化 , mysql+mycat+haproxy+keepalived

2.實際的解決問題能力

主動引入

回答專案: 遇到過什麼問題、如何發現、排查、分析、解決、總結

主動、學習、能發現問題、解決

----注意/建議事項----

1.體現數字: 幾個專案、幾篇部落格 、排名第幾

2.工作:不要面議 , 範圍5000-8000

3.簡歷: 1-2頁(盡量不要空半頁),不要書皮,格式pdf(wps word,可能出現相容問題), 外觀不要太過絢麗

4.細節: 畢業時間、年齡、工作履歷、期望薪資

溝通:注意人文素養 ,不要抱怨問題, 要體現解決問題

建議: 個人解決的能力、團隊、溝通

方法名引數列表

返回值訪問修飾符

丟擲異常

方法重寫

相同相同

相同或是其子類

不能比父類更嚴格

不能比父類更寬泛

方法過載

相同不相同

無關無關

無關題外話1:list和set的上級介面是collection,但collection與map之間不存在繼承/實現關係。

題外話2:本文中的是否「唯一」,是指集合中的元素值是否可以重複。

有序/無序,是指輸入集合的順序 是否和 集合的儲存順序一致(或理解為輸出順序),例如,向集合依次輸入a、b、c後,如果列印時也輸出a、b、c就代表「有序」;如果列印時輸出的是a、c、b(或b、a、c等)就代表「無序」。

collection(不唯

一、無序)

private void grow(int mincapacity) 

private void grow(int mincapacity) 

}

hashset(唯一,無序): 執行緒不安全,基於hashmap實現的,底層採用 hashmap 來儲存元素

linkedhashset: linkedhashset繼承自hashset,並且其內部是通過 linkedhashmap來實現的。

treeset(有序,唯一): 紅黑樹

hashmap:執行緒不安全,通過concurrenthashmap解決。jdk1.8之前hashmap由陣列+鍊錶組成的,陣列是hashmap的主體(預設初始容量為16),陣列中的每個元素是鍊錶的形式。jdk1.8以後,當鍊表長度大於閾值(預設為8)時,將鍊錶轉化為紅黑樹,以減少搜尋時間。 hashmap的載入因子為0.75:當元素個數 超過 容量長度的0.75倍 時,進行擴容。擴容增量:原容量的2倍.

linkedhashmap: linkedhashmap 繼承自hashmap。linkedhashmap在上面結構的基礎上,增加了一條雙向鍊錶,使得hashmap的結構可以保持鍵值對的插入順序。同時通過對鍊錶進行相應的操作,實現了訪問順序相關邏輯。

hashtable: 陣列+鍊錶組成的,陣列是 hashmap 的主體,鍊錶則是主要為了解決雜湊衝突而存在的 treemap: 紅黑樹

concurrenthashmap:jdk8以前的concurrenthashmap間接的實現了map,並將每乙個元素稱為乙個segment(預設16個),每個segment都是乙個hashentry陣列,陣列的每個元素都是乙個hashentry的單向佇列。jdk8以後,hashmap/concurrenthashmap的儲存結構發生了改變:增加了條件性的「紅黑樹」。為了優化查詢,當鍊表中的元素超過 8 個時,hashmap就會將該鍊錶轉換為紅黑樹,即採用了陣列+鍊錶/紅黑樹的儲存結構。

(1)是否保證執行緒安全: arraylist 和 linkedlist 都是執行緒不安全;

(2)底層資料結構: arraylist 底層使用的是object陣列;linkedlist 底層使用的是雙向鍊錶資料結構(jdk1.6之前為迴圈鍊錶,jdk1.7取消了迴圈)

(3)插入和刪除是否受元素位置的影響

arraylist 採用陣列儲存,所以插入和刪除元素的時間複雜度受元素位置的影響。 比如:執行add(e e) 方法的時候, arraylist 會預設在將指定的元素追加到此列表的末尾,這種情況時間複雜度就是o(1)。但是如果要在指定位置 i 插入和刪除元素的話( add(int index, e element) )時間複雜度就為 o(n-i)。因為在進行上述操作的時候集合中第 i 和第 i 個元素之後的(n-i)個元素都要執行向后位/向前移一位的操作。

linkedlist採用鍊錶儲存,所以插入,刪除元素時間複雜度不受元素位置的影響,都是近似 o(1)而陣列為近似 o(n)。

(4)是否支援快速隨機訪問: linkedlist 不支援高效的隨機元素訪問,而 arraylist 支援。快速隨機訪問就是通過元素的序號快速獲取元素物件(對應於get(int index) 方法)。

(5)記憶體空間占用: arraylist的空 間浪費主要體現在在list列表的結尾會預留一定的容量空間,而linkedlist的空間花費則體現在它的每乙個元素都需要消耗比arraylist更多的空間(因為要存放直接後繼和直接前驅以及資料)。

(1)**(forword)是伺服器行為,重定向(redirect)是客戶端行為

**可以通過httpservletrequest物件的getrequestdispatcher()方法鏈式呼叫forward()方法實現,如request.getrequestdispatcher().forward()。重定向是利用伺服器返回的狀態嗎來實現的。客戶端瀏覽器請求伺服器的時候,伺服器會返回乙個狀態碼。伺服器通過httpservletrequestresponse的setstatus(int status)方法設定狀態碼。如果伺服器返回301或者302,則瀏覽器會到新的**重新請求該資源。**可以通過httpservletresponse物件的sendredirect()方法實現。

(2)位址列顯示: **是伺服器請求資源,伺服器直接訪問目標位址的url,把那個url的響應內容讀取過來, 然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器傳送的內容從**來的,所以它的位址列還是原來的位址. 重定向是服務端根據邏輯,傳送乙個狀態碼,告訴瀏覽器重新去請求那個位址.所以位址列顯示的是新的url.

(3)資料共享: **:**頁面和**到的頁面可以共享request裡面的資料. 重定向:不能共享資料

(4)實際運用: **:一般用於使用者登陸的時候,根據角色**到相應的模組. 重定向:一般用於使用者登出登陸時返回主頁面和跳轉到其它的**等

(5)效率: **:高. 重定向:低.

什麼秒殺: 流量很大,庫存少

架構設計原則:限流、快取、隔離、降級和熔斷

1.限流(多重):盡量上級限流,負載 ,mq流量削峰

2.快取(多級):請求->redis->db

3.隔離:將秒殺的伺服器隔離開

4.降級和熔斷:

熔斷:客戶端 -> service() , beiyong() 降級:服務端 : 20個服務->減少到10個服務

防止重複消費行為:冪等性

zs :支付->支付服務(扣款)->返回(支付成功) 冪等性實現:去重表,在每次支付前,先檢視去重表中 是否有扣款記錄。如果有,則返回文字提示「已扣款,請稍等響應頁面」;如果沒有,再執行扣款

技術指導實踐指南

在過去的4到5年中,我一直擔任軟體開發教練,幫助組織改進他們的技術實踐。我也是偶然中發現自己正在承擔教練的角色。一開始,我有點驚慌失措,因為之前從未做過這樣的事情。我曾經組織過tdd和軟體設計方面的活動會議,但從未按照某種邏輯順序來組織它們。我的第乙個挑戰是選擇活動主題。經過幾次迭代,我開始專注於x...

技術指導實踐指南

在過去的4到5年中,我一直擔任軟體開發教練,幫助組織改進他們的技術實踐。我也是偶然中發現自己正在承擔教練的角色。一開始,我有點驚慌失措,因為之前從未做過這樣的事情。我曾經組織過tdd和軟體設計方面的活動會議,但從未按照某種邏輯順序來組織它們。我的第乙個挑戰是選擇活動主題。經過幾次迭代,我開始專注於x...

技術指導實踐指南

在過去的4到5年中,我一直擔任軟體開發教練,幫助組織改進他們的技術實踐。我也是偶然中發現自己正在承擔教練的角色。一開始,我有點驚慌失措,因為之前從未做過這樣的事情。我曾經組織過tdd和軟體設計方面的活動會議,但從未按照某種邏輯順序來組織它們。我的第乙個挑戰是選擇活動主題。經過幾次迭代,我開始專注於x...