網絡:
1、OSI七層模型與TCP/IP 五層模型
OSI七層模型與TCP/IP 五層模型
這應該是把計算機網絡五層模型講的最好是文章了,看不懂你打我
面試:你真的懂網絡分層模型嗎?(上)
2、常見應用層協議和運輸層、網絡層協議,以及硬件如路由器之類在哪一層
IP協議詳解
3、TCP與UDP區別和應用場景,基於TCP的協議有哪些,基於UDP的有哪些
TCP和UDP的區別及應用場景
使用TCP的協議有哪些?使用UDP的協議有哪些?
4、TCP可靠傳輸的保證,擁塞控制目和過程
動畫:如何給面試官回答 TCP 的擁塞控制?
5、TCP粘包現象原因和解決方法
6、TCP三次握手過程以及每次握手後的狀態改變,爲什麼三次?爲什麼兩次不行?如果你的答案是防止已失效的請求報文又傳送到了服務端,建立了多餘的鏈接,浪費資源,但這個答案被否定了,你還能給出什麼答案?
動畫:用動畫給面試官解釋 TCP 三次握手過程
7、TCP四次揮手過程以及狀態改變,爲什麼四次?CLOSE-WAIT和TIME-WAIT存在的意義?如何查看TIME-WAIT狀態的鏈接數量?爲什麼會TIME-WAIT過多?解決方法是怎樣的?
動畫:用動畫給女朋友講解 TCP 四次分手過程
8、TCP、UDP、IP、以太網報文格式以及重要字段,報文從一端到另一端傳遞的過程。
9、瀏覽器輸入URL並回車的過程以及相關協議,DNS查詢過程。
動畫: 一個瀏覽器是如何工作的?
11、HTTP與HTTPS之間的區別,HTTPS鏈接建立的過程,瞭解對稱加密算法和非對稱加密算法?
12、HTTP請求有哪些,多說點。Post和get區別
13、HTTP常見響應狀態碼,從1xx到5xx都要說。如304,301,302,504,
14、重定向和轉發的區別
HTTP中的重定向和請求轉發的區別
頁面跳轉的兩種方式(轉發和重定向)區別及應用場景分析
15、cookie和session區別、Session和Cookie的區別
16、socket
17、webserver、websocket
操作系統:
1、進程和線程的區別
2、協程呢?
3、進程間通信方式IPC
JAVA線程與線程、進程與進程間通信
面試題:進程間通信的方式
4、用戶態和核心態
5、操作系統分配的進程空間是怎樣的?線程能共享哪些?
6、操作系統內存管理方式,分頁分段以及段頁式的優缺點
操作系統:內存管理(概念)
操作系統內存管理
7、頁面置換算法有哪些,FIFO爲什麼不好?如何改進?LRU思想,手寫LRU
Java基礎
1、面向對象特性介紹、與C++區別
2、多態實現原理
3、抽象類和接口區別,以及各自的使用場景
abstract class抽象類和interface接口有什麼區別?
抽象類和接口的區別(面試題)
4、泛型以及泛型擦除。A類型的list,可以加入無繼承關係的B類型對象嗎?如何加入?
5、Java異常體系
7、ThreadLocal原理,如何使用?
8、內存泄漏的場景
9、static關鍵字和final關鍵字使用情況,一個類不能被繼承,除了final關鍵字之外,還有什麼方法(從構造函數考慮)?
10、序列化和反序列化,反序列化失敗的場景。
11、ArrayList和LinkedList的區別和底層實現?如何實現線程安全?
淺談java集合
12、List遍歷時如何刪除元素?fail—fast是什麼?fail—safe是什麼?
List如何在遍歷時刪除元素?(fail-fast機制)
關於List的remove()方法
13、詳細介紹HashMap。角度:數據結構+擴容情況+put查找的詳細過程+哈希函數+容量爲什麼始終都是2^N+JDK1.7與JDK1.8的區別。
14、HashMap如何實現線程安全?ConcurrentHashMap的底層實現?JDK1.7與JDK1.8的區別
15、正則表達式會寫嗎?
16、設計模式瞭解嗎?
17、linux指令知道哪些?
18、強引用、弱引用、軟引用、虛引用
JVM相關
1、JVM運行時內存劃分?PC+虛擬機棧+本地方法棧+堆+方法區+JDK1.7與1.8區別
2、堆內存分配策略
3、Full GC觸發條件
4、如何判斷對象是否存活?回收對象的兩次標記過程。
5、垃圾回收算法以及垃圾回收器介紹,尤其是G1和CMS的優缺點
6、創建一個對象的步驟
7、詳細介紹類加載過程
8、雙親委派機制,使用這個機制的好處?破壞雙親委派機制的場景?如何破壞?
9、瞭解下tomcat的類加載機制
10、JVM性能調優,常用命令,以及工具
多線程併發
1、進程線程區別,線程安全和非線程安全區別
2、線程狀態,start,run,wait,notify,yiled,sleep,join等方法的作用以及區別
3、wait,notify阻塞喚醒確切過程?在哪阻塞,在哪喚醒?爲什麼要出現在同步代碼塊中,爲什麼要處於while循環中?
4、線程中斷,守護線程
5、Java樂觀鎖機制,CAS思想?缺點?是否原子性?如何保證?
6、synchronized使用方法?底層實現?
7、ReenTrantLock使用方法?底層實現?和synchronized區別?
8、公平鎖和非公平鎖區別?爲什麼公平鎖效率低?
9、鎖優化。自旋鎖、自適應自旋鎖、鎖消除、鎖粗化、偏向鎖、輕量級鎖、重量級鎖解釋
10、Java內存模型
11、volatile作用?底層實現?禁止重排序的場景?單例模式中volatile的作用?
12、AQS思想,以及基於AQS實現的lock, CountDownLatch、CyclicBarrier、Semaphore介紹
13、線程池構造函數7大參數,線程處理任務過程,線程拒絕策略
14、Execuors類實現的幾種線程池類型,阿里爲啥不讓用?
15、線程池大小如何設置?
16、手寫簡單的線程池,體現線程複用
17、手寫消費者生產者模式
18、手寫阻塞隊列
19、手寫多線程交替打印ABC
MySQL
1、事務4大特性,一致性具體指什麼?這4個特性mysql如何保證實現的?
事務四大特徵:原子性,一致性,隔離性和持久性(ACID)
2、事務隔離級別,4個隔離級別分別有什麼併發問題?
數據庫的四大特性以及四個隔離級別和引發的問題
事務的4種隔離級別(Isolation Level)分別是什麼?
3、Mysql默認隔離級別?如何保證併發安全?
【原創】互聯網項目中mysql應該選什麼事務隔離級別
4、RR和RC如何實現的?RR使用場景?對比volatile可見性,爲什麼RR的事務要設計成不能讀另一個事務已經提交的數據?
5、隔離級別的單位是數據表還是數據行?如串行化級別,兩個事務訪問不同的數據行,能併發?
6、存儲引擎Innodb和Myisam的區別以及使用場景
7、 介紹Inodb鎖機制,行鎖,表鎖,意向鎖
8、介紹MVCC
9、哈希索引是如何實現的?
10、B樹索引爲什麼使用B+樹,相對於B樹有什麼優點?爲什麼不能紅黑樹?要提到磁盤預讀
一步步分析爲什麼B+樹適合作爲索引的結構
11、聚簇索引和非聚簇索引區別
12、回表查詢和覆蓋索引
如何避免回表查詢?什麼是索引覆蓋? | 1分鐘MySQL優化系列
13、如何創建索引?
MySQL 如何創建索引?怎麼優化?
14、如何使用索引避免全表掃描?
15、Explain語句各字段的意義
MySQL高級 之 explain執行計劃詳解
16、最左前綴!!聯合索引B+樹是如何建立的?是如何查詢的?當where子句中出現>時,聯合索引命中是如何的? 如 where a > 10 and b = “111”時,聯合索引如何創建?mysql優化器會針對得做出優化嗎?
17、MySQL中一條SQL語句的執行過程
18、數據庫幾大範式
數據庫第一二三範式到底在說什麼?
19、數據庫基本查詢關鍵字使用,如left join on,where,beteen and,group by,having,limit,聚合函數等。
20、left join,right join,inner join,outer join的含義及區別
21、mysql主從複製過程,binlog記錄格式,複製的異步半同步同步模式區別
22、主從複製或讀寫分離等數據不一致性問題以及如何解決
23、銀行的話,可以會考mysql數據類型,如餘額要用decimal
Redis問題:
1、爲什麼使用Redis
2、分佈式緩存和本地緩存有啥區別?讓你自己設計本地緩存怎麼設計?如何解決緩存過期問題?如何解決內存溢出問題?
3、redis和mem***d的區別
4、redis常用數據結構和使用場景
5、Zset底層實現?跳錶搜索插入刪除過程?
6、redis過期淘汰策略
7、redis持久化機制?都有什麼優缺點?持久化的時候還能接受請求嗎?
8、redis事務
9、緩存雪崩和緩存穿透,以及解決方法
10、如何保證緩存和數據庫的數據一致性?
11、redis是單線程還是多線程?爲什麼那麼快?
12、五種IO模型的區別
13、select、poll、epoll的區別?
14、redis熱key問題?如何發現以及如何解決?
15、redis數據分佈方式?有什麼優點?一致性hash呢?
16、redis主從複製,主從切換,集羣
Spring
1、Spring IOC
2、Spring AOP,動態***
3、Bean生命週期
4、Bean作用域?默認什麼級別?是否線程安全?Spring如何保障線程安全的?
5、Spring事務隔離級別和事務傳播屬性
6、Spring以及Spring MVC常見註解
7、@autowired和@resource的區別,當UserDao存在不止一個bean或沒有存在時,會怎樣?怎麼解決?
8、mybatis如何防止sql注入?$#的區別是什麼?傳入表明用哪個?
9、Spring MVC工作原理
10、SpringBoot自動配置的原理是什麼?介紹SpringBootApplication註解.
11、Mybatis和Hibernate的區別
12、spring中的註解原理?例如事務註解,spring如何根據註解實現事務功能的
13、Spring中用到了哪些設計模式?單例、***、工廠、適配、觀察者之類的說一說就行
大數據和空間限制與系統設計
1、100億黑名單URL,每個64B,判斷一個URL是否在黑名單中
2、2GB內存在20億整數中找到出現次數最多的數
3、40億個非負整數中找到沒有出現的數
4、40億個非負整數中找到一個沒有出現的數,內存限制10MB
5、找到100億個URL中重複的URL
6、海量搜索詞彙,找到最熱TOP100詞彙的方法
7、40億個無符號整數,1GB內存,找到所有出現兩次的數
8、10MB內存,找到40億整數的中位數
9、設計短域名系統,將長URL轉化成短的URL.(知乎老哥給出了答案,博客有人根據他的總結了一下,很好)
10、讓你係統的設計一個高併發的架構,你會從哪幾個方面考慮?
11、一個千萬級的APP,你要搞定關注和粉絲列表,你用什麼來做。要求最後一個關注的在最前面。新增和取關都要比較快的反饋你怎麼做?如果一個人關注了之後,服務器宕機了怎麼辦?
12、OOD design:計費停車場
13、假設有這麼一個場景,有一條新聞,新聞的評論量可能很大,如何設計評論的讀和寫
14、顯示網站的用戶在線數的解決思路
項目
如果個人沒有好的項目,就用高併發秒殺。B站搜高併發秒殺,有慕課網視頻,講的很好。Github搜秒殺,有代碼,跑一遍。有時間自己寫一遍,沒時間就看懂就好。然後準備問題,不要求每個功能都實現的特別好,但一定要多考慮系統可能出現的問題,因爲很多人都是這個項目,你考慮的多,自然就顯得稍微那麼好了點。
1、如何解決超賣?mysql鎖+redis預減庫存+redis緩存賣完標記
2、如何解決重複下單?mysql唯一索引+分佈式鎖
3、如何防刷?IP限流+驗證碼
4、熱key問題如何解決?redis集羣+本地緩存+限流+key加隨機值分佈在多個實例中
5、消息隊列的作用?如何保證消息的不丟失?異步削峯;發送方開啓confirm+消息隊列持久化+消費方關閉自動ACK,確保消費成功之後自動調用API進行確認。
6、緩存和數據庫數據一致性如何保證?秒殺項目不用保證,其他項目就用延時雙刪或者先更新數據再是緩存失效,爲防緩存失效這一信息丟失,可用消息隊***保。
7、壓測沒有?用什麼壓測?什麼情況?
8、系統瓶頸在哪?如何查找,如何再優化?
面經之手撕代碼
代碼題一般分爲幾類:排序、二分查找、數據結構、數組、字符串、鏈表、樹、回溯、動態規劃、貪心、數學。首先三大排序算法快排、歸併、堆排序一定特別熟練,時間複雜度一定要特別熟悉。如果這三個都沒有掌握,面試就先放放吧。快排如何寫,什麼思想?用快排思想求無序數組中第K小的值如何寫?時間複雜度多少?歸併如何寫?什麼思想?用歸併思想給鏈表排序如何寫?用歸併思想求數組中逆序對數如何寫?M個長度爲N的數組如何排序?時間複雜度多少?M個長度爲N的鏈表如何排序?堆排序如何寫,什麼思想?時間複雜度怎麼算的?符合堆的結構,插入和刪除函數如何實現?把這幾個問題弄會,三大排序問題基本就沒問題了。二分查找,有序數組直接考慮二分查找,如旋轉有序數組的最小值、旋轉有序數組查找目標值、有序數組目標值的最左和最右位置、二分查找尋找峯值,二分查找問題,要考慮while(left <= right)是否可以等於,right = mid還是right = mid +1,返回值是left還是right,反正多考慮考慮邊界問題。數據結構,也就是棧、隊列、雙向隊列之類的,問題不大。數組和字符串,簡單的時候很簡單,難的時候很傷腦子,這類題一出基本都是要求你使用最低時間複雜度和空間複雜度計算的,多背背題目,多看看面經總結總結吧。鏈表,掌握好鏈表逆序,快慢指針,保留pre節點和當前cur刪除符合條件的節點,把這些掌握了,基本能解決八成的鏈表問題。樹,掌握層序遍歷+size+flag、非遞歸中序遍歷、非遞歸前序遍歷、二叉搜索樹特點、完全二叉樹特點及善用遞歸解決樹深度,樹是否平衡,樹節點最大距離,樹節點最長帶權路徑,最近公共父節點等問題,基本解決八成樹問題。回溯,兩大類排列和組合,總結排列組合類型的各自特點,以及考慮去重!動態規劃,多做多總結,不過一般出現在筆試中,面試很少有特別難的動態規劃,即使出也很並不難。貪心,少見,做幾道就好。數學,挺難的,沒做過類似的真未必想起來,主要就是位運算,其中&和異或最常見,還有就是0-n順排,求第K位的數字是多少,以及0-N,數字7或者1出現的次數,利用random5實現random7等。
劍指offer的題目:
No3.數組中重複的數字。n個數,範圍0到n-1,找到任意一個重複的,時間複雜度O(1);
No4,二維數組查找,從左到右遞增,從上到下遞增。
No5,字符串空格替換,如果有空格,就將他替換成%20
No6,從尾到頭打印鏈表,遞歸和非遞歸方法
No7 重建二叉樹,前序遍歷和中序遍歷重構二叉樹
No8 二叉樹的下一個節點。中序遍歷的二叉樹下一個節點,這個樹的節點,有指向父指針;
No9,兩個棧實現隊列
No10 斐波那契數列;
No 10-1,青蛙可以挑一階,也可以2階,跳到n階,幾種做法
No10-2,變態跳,可以跳1-n階,隨便跳。求n階幾種方法;
No11,旋轉數組最小的數字:非減排序的數組,可能存在重複
No12,矩陣中的路徑。矩陣有字符,可以從任意開始,上下左右任意走,但不能走走過的格子,求是否存在一條包含給定字符串的路徑。
No13,機器人的運動範圍,從(0,0)開始,上下左右移動,但不能進入行座標和列座標數位之和大於k的格子,給定k,能打幾個格子。
No14,剪繩子,長爲n,剪m段(m,n都是整數,且m>1),所有的長度的乘積最大爲多少。
No15,二進制中1的個數;
No16, 數值的整數次方
No17, 打印從1到最大的n位數
No18-1,刪除節點。給定一鏈表頭結點和指定節點,O(1)時間內,刪除指定節點
No18-2.刪除重複的節點。存在的重複節點,全都刪了。
No19,實現函數來匹配包含‘.’和‘*’的正則表達式.
No20實現一個函數來判斷字符串是否表示數值。
No20-2將字符串轉換成整數;不合法返回0;
No21,調整數組順序使得奇數位於偶數之前。
No22,返回鏈表的倒數第k個節點。
No23,鏈表中環的入口節點;
No24,反轉鏈表,並返回反轉之後的頭結點。
No25,合併兩個有序的鏈表,重建一個新的,包含所有的兩個鏈表。—>單調不減
No26,輸入A和B兩個樹,判斷B是A的子樹。空樹不是子樹
No27,二叉樹的鏡像。輸入一個二叉樹,將他變成他的鏡像
No28,輸入一個二叉樹,判斷二叉樹是不是對稱的。
No29,順時針打印矩陣。
No30,包含min函數的棧
No31,棧的壓入彈出序列,第一個表示壓入序列,判斷第二個是不 是彈出序列。
No32,從上到下打印二叉樹
No33,輸入一個整數數組,判斷是不是二叉搜索樹的後序遍歷序列
No34,二叉樹中和未某一值得路徑
No35複雜鏈表的複製;鏈表不僅有val,next,還有一個指向任意節點random
No36二叉搜索樹和雙向鏈表;二叉搜索樹轉換成一個排序的雙向鏈表,不能創建新的節點,只能調整指針順序。
No37實現函數序列化二叉樹和反序列二叉樹
No38輸入一個字符串,給出所有的排列;
No39,數組中出現超過一半的數字,如果不存在,返回0;
No40,最小的k個數
No41,數據流中的中位數,奇數個,中間那個。偶數個,中間倆的平均.
No42,連續子數組的最大和,數組中有正數有負數,求所有連續子數組的最大和。
No43,1-n所有數中,求所有十進制位出現1個總數
No44,從0-n,所有的從前到後排到一塊,實現一個函數,求第k位的數字是幾?
No45,給定一個數組,求組合到一塊的最小數字
No46,0-25翻譯成a-z,給一個數字,求有幾種翻譯方法
No47,禮物的最大價值,矩陣,每一步都有一個值,從左上到右下,只能向右或向下移動,求最大和
No48,最長不含重複字符的子字符串,
No49,只含2,3,5因子的數是醜數,1也是,求第n個醜數
No50,第一個只出現一次的字符,返回的是位置
No51,數組中的逆序對,歸併排序!!!
No52,兩個鏈表的第一個公共節點。
No53,在排序數組中查找數組,一個數字出現了多少次
No54,二叉搜索樹中,第K小節點
No55-1,二叉樹深度
No55-2,是不是平衡二叉樹
No56-1,一個數組,一個出現一次,其他出現兩次,求一次的。
No56-2,數組,一個出現一次,其他出現三次。求一次
No57-1,遞增排序的數組,和target.找出一對和爲target的數字
No57-2,正數s,給出連續正數序列,其和未s.所有的序列。序列最少有倆。
No58-1,翻轉單詞順序
No58-2,左旋轉字符串
No59-1給出數組和窗口大小,求滑動窗口的最大值。
No59-2,實現帶有max函數的隊列,出入隊和max都是O(1)
No60,n個色子,點數和爲s,s所有可能出現的值得概率
No61,撲克牌抽5個數,是不是順子。大小王可以爲任何;
No62,0到n-1,圍一圈,從0開始,刪除第m個數字。求最後的數字;
No63,數組,值爲股票當時的價格,求最大利潤
No65,不用加減乘除做加法
No66,構建乘積數組。
LeetCode的一些題目:
-
Two Sum:給定數組和target,返回兩個元素之和爲target的元素index;
-
Add Two Numbers:他是一個反轉的鏈表,求真正鏈表代表數字的和的鏈表的翻轉;
-
Longest Substring Without Repeating Characters:字符串最長的不重複子序列長度:
-
Longest Palindromic Substring:字符串最長的迴文序列。
-
ZigZag Conversion:一個字符串,一個行數。然後字符豎折豎折來排序。然後一層一層的組合字符。
-
Reverse Integer:將整數值反轉,如120變21,-21變-12,考慮值超過int溢出。
-
String to Integer (atoi):將字符串轉化爲整數
-
Palindrome Number,一個數,正反來是否一樣。負數不一樣。
-
Integer to Roman,給定一個數,轉化成羅馬數字。
-
Longest Common Prefix;N個字符串,求這N個字符串最長公共前綴
-
3Sum,數組中,找3個和爲0爲三個數,每個數不能用兩次。要考慮重複的問題。
-
3Sum Closest:一個數組,找出3個和最進階target的。
-
Letter Combinations of a Phone Number,給定數字,求九宮格拼音下的所有組合。回溯
-
4Sum.數組中4個數之和爲0,考慮重複的數.
19,刪除倒數第k個節點
20、括號序列是否匹配:
21、合併兩個有序鏈表,遞歸和非遞歸方式。
22、n對小括號的全正確排序:回溯
- 成對的翻轉鏈表
26、有序數組,刪除多餘的重複數組,in-place刪除,然後返回長度。
27、數組,刪除指定的數字;
28、實現indexOf(String s1,String s2);
33、左移一部分的有序數組中,查詢target。二分查找的經典題目
34、有序數組中,查詢一個target第一次和最後一次出現的位置;二分查找的經典題目
35、將一個數插入到有序數組中,求位置
39:非重複數組,找出和爲target的數組,一個不能用兩次;回溯。
40,帶有重複的數組,找出和未target的數組組合,一個不能用兩次;回溯+組合
43,兩字符串的數字,相乘,得到結果,輸出字符串。
46,不重複數組的,所有全排列;回溯+排列
47,帶有重複的數組,全排列;回溯+排列+去重
48:n x n矩陣,順時針轉動90度。
49,一羣字符串,有些字符串字母組成一樣,有的不一樣,將一樣的放一塊;
50:計算power(x,n); x在正負100,n在正負 2^31;
54:一圈圈順時針打印數組。
58:最後一個單詞的長度。
59:給一個N,將1-N^2,整成上面外圈順時針到裏圈的矩陣。
60:1-N這n個數字的全排列,求第K小的;
61、翻轉鏈表,鏈表右移K爲,可以循環多移;
62、矩陣移動,mxn矩陣從左上角移動到右下角,只能橫移和豎移,共有多少方法;
63、矩陣移動,從左上移動到右下:橫豎移動,矩陣值爲1的不能走;求多少種移動方式。
64、矩陣,從左上到右下,最短的路徑和多少。
66、數組表示的數+1,然後返回之後的。
67、兩個二進制字符串相加,得到的二進制字符串。
- Sqrt(x) 實現int sqrt(int x);
73、MxN的數組,如果有一個爲0,那麼就讓起其所有列和行都爲0,求最後的數組;
74、mxn的矩陣,層序遍歷就是有序的數組。在矩陣中搜索target;
75:一個只有2、1、0的數組,將0分到左邊,2移動右邊。
77:1-N,挑選K個進行排列;
78:求數組的所有子集合。
80:刪除有序數組中過於多餘的數字,最多每個出現兩次。
81:翻轉部分的有序數組,可能存在重複,搜索target;
82:刪除有序鏈表,將重複的全都刪了;
83:刪除有序鏈表多餘的節點,重複的保留一個。
86:鏈表,給定target,將比target小的節點移動到左邊。大的和等於的移動到後面。其他相對位置不變。
88:將兩個有序數組合到第一個數組中;
90:可能有重複元素的數組,求所有的組合。
91:將數字解碼成A-Z;1-26;給出數字字符串,有幾種解碼方式:
92:逆轉鏈表的m-n這部分;
93:給定一數字字符串,輸出可能的IP地址列表。
94,二叉樹中序遍歷:
96:n個節點,共有多少種二叉搜索樹。
98:判斷一個樹,是否是二叉搜索樹。
100:判斷兩個樹是否一致。
101:判斷一個樹是否對稱。
102:二叉樹層序遍歷。
103,之字形打印二叉樹
104:二叉樹的深度:
105:前序和中序構成二叉樹。
106:中序和後序構成二叉樹
107:層序遍歷:從底層到上層;
108: 將有序數組轉化成二叉搜索樹
109:將有序鏈表轉化成二叉搜索樹:
110:是否平衡二叉樹:
111:葉節點到根節點的最短路徑。
112:二叉樹是否存在從根節點到葉節點的路徑和爲target:
113:找出所有路徑和爲target的序列
114:將二叉樹往一邊偏;
116:滿二叉樹,將爲每個節點加上next,就是每層的右邊那個。
117:二叉樹,將爲每個節點加上next,就是每層的右邊那個。
125:字符串是否迴文,只考慮數字和字母,大小寫不論。
129:二叉樹,從頭結點到尾節點:拼接成數字,然後所有的加一塊。
136,一個數組,一個出現一次,其他的出現兩次,求一次的那個
137:數組,有人出現三次,有人出現一次,求一次的。
138:帶有random指針的複雜鏈表的複製:
- 鏈表是否有環:
142:鏈表環入口節點
143:重排鏈表:1-2-3-4-5;先第一,再最後一個,先第二個,再倒二,就這樣。
144:前序遍歷二叉樹:
- LRU Cache
147:對鏈表進行插入排序,
148:NlongN的時間排序鏈表。
150、逆波蘭
151、單詞逆序:
155、帶有最小值函數的棧
160:兩個鏈表的相交點
165:比較版本號大小。如10.2.2大於3.1.2;
167:有序數組,找出兩數之和爲target的索引。
168:數字轉化爲26進制的A-Z;
- Majority Element,超過一半的數字
171:26進制A-Z轉化爲十進制數字
172:Given an integer n, return the number of trailing zeroes in n!.
179:整數數組,求組合到一塊的最大值。
189:數組左移K位
199:二叉樹,從右邊看到的節點數組。也就是每層最右邊那個。
200:dfs求島嶼的個數。1表示陸地,0表示島嶼。
201:N-M數組的連續數,逐個&;求最後的結果。
209 : 最短的連續子序列之和大於等於target;
215:無序數組中找出最K大的數字:
216:1-9的數,選出n個,之和爲k。求所有N的組合,一個數不能用兩次
220:一個數組,是否存在不同的數i和j,使得nums[i]-nums[j]的絕對值最大是t,而i-j的絕對值最大是k;
221:矩陣,有0有1;找出最大的正方形,其裏面數值都1;
222:給定一完全二叉樹,求節點總個數。
223:以(A,B)和(C,D)爲對角頂點,構建矩形,以EF,GH構建,求縱的矩形面積。
227:非負整數,有±*/和空格數字的字符串組成的表達式,求表達式的值;
228:給出排序好的數組,沒有重複,將連續的整成0->2的形式,求所有的連續範圍段。
229,數組中超過n/3的次數的數。
230:BST二叉搜索樹中,第K小的節點,遞歸和非遞歸方式
236:二叉樹中,兩個節點最近的公共祖先節點。
238:構建乘積數組
240:在矩陣中遍歷,每行都增加,每列都增加。
241:數字和操作符,±*,請隨便加括號改變計算順序,然後得出所有可能的結果。
260:數組,只有兩個出線一次,其他的出現兩次,求出現一次的那倆
264:第K個醜數,因子只有2,3,5的數;
274:if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each.
275:同上,也是求H。但這個數組是有序的;
287:N+1數,都是1-n之間,求重複的那個數。
300:最長遞增序列,可以不連續。但是前面的index比後面的小
306:數字字符串,我們將字符串分割最少三個數字,然後Fn = Fn-1+Fn-2;
313:求第N個超級醜數,並且給出數組因子,只有只包括該數組因子的數纔是超級醜數
318: 字符串數組,求兩個沒有公共字母的字符串長度乘積的最大值;
319:開關轉換,剛開始有N的燈,最初都是滅的,第一輪,每一個都按一個。第二輪每二個按一個開關。第N輪之後,亮着的燈的個數。
322:給一堆零錢,可以重複使用,然後給整錢。將整錢換成零錢,求最小的零錢數,如果不能換,返回-1;
324:無序數組重排序:nums[0] < nums[1] > nums[2] < nums[3]…
328:鏈表重排序,將奇數位index,而不是奇數值的放到前面。偶數index的放後面:
331:將一個二叉樹,他的空子節點記成#,給定一個字符串,問這個是不是前序遍歷;
332 : 航班信息[from,to],一些列的這種數組信息,這人從JFK出發,求他的真正路線一次經過的城市;
334:數字數組,是否存在三個子序列,可以不連續,是遞增的;
338:給定一num.求0-num這些數每個的二進制中1的個數。
347,TopK出現頻率最高的數字,一個數組,每個數字可能出現多次,求最K多出現的那k個
343:給定一個整數,將他分成最小二段,和爲這個整數,求這些段乘積的最大值。
357:n位數的數,求沒有重複數字的總個數。11,121這種就不行。
面經中遇到的題:
1、數組的逆序數
2、LRU //hashMap加雙向鏈表,雙向鏈表有頭尾節點,
3、最長迴文序列 leetocde 5
4、矩陣中的最長遞增路徑,可以上下左右一起都走; leetcode329
5、判斷一個二叉樹是另一個二叉樹的子樹
6、歸併排序的時間複雜度 // NlongN
7、求給出01矩陣中的最大正方形面積(全爲1) lc221
8、求二叉樹中距離最遠的節點 leetcode543
9、判斷字符串是否爲合法IPV4地址 lc468
10、數組值爲1-n,各出現一次,先加入x(x也是1-n的範圍),找出x
11、給定n,計算15n,不用+*/
12、給定字符數組chars,將其右移n位
13、100層樓,只有兩個雞蛋,找出雞蛋會在哪一層樓被摔碎
14、reverse linked list in a group of k
15、如何空間O(0)實現兩個數的互換
16、IP地址的Regex
17、the longest path in a binary tree lc124
18、the largest consecutive sum in an array
19、LeetCode 41 Find mis sing positive
20、給一個小於一億的中文數字字符串,轉化成數字格式
21、一個數組,把所有的0都移動到末尾,還要保持順序不亂 維持臨界點j,如果當前遍歷不是0,就和j互換
22、羅馬數字轉整數 leetcode13
23、二叉樹的序列化和反序列化
24、輸入一個數組,輸出數組中滿足條件的數字,條件爲:數組中當前元素的值大於等於它前面所有的元素,小於等於它後面所有的元素。
25、給出一個數字,對數字的兩位進行交換,只能交換一次,輸出可能結果中的最小數字
26、輸入一個字符串,字符串中字符全部爲數字,在字符串中插入 ‘.’ 使得結果爲合法的ip地址,輸出全部可能的結果
27、基數排序
28、鏈表是否爲迴文結構。不能用棧
29、最大不重複子串
30、複雜鏈表複製
31、長度爲n的數組,元素大小是0~n-1,判斷數組元素是否有重複的
32、list1/list2交替打印元素
33、36進制加法
34、合併區間
35、快排
36、生產者-消費者 模型
37、排序一個字符串時間要求O(n)
38、給一個有重複數字的數組,求集合{(a,b,c) | a+b+c=0}
39、兩個棧實現隊列
40、二叉樹轉化爲雙端鏈表
41、手寫線程池
42、之字形打印二叉樹
43、給定一個數組,調整該數組,使其滿足堆的性質
44、給定n個單詞,如果單詞組成一致但是元素順序不一致,該對單詞爲同位詞,例如:abc,bca爲同位詞.求所有同位詞的集合輸出
45、鏈表,兩個鏈表的公共點
46、二叉樹的後續遍歷非遞歸形式
47、買賣股票的最佳時機,只能一次買入和一次賣出
48、可以進行多次交易的結果,求賺取的最大利潤
49、(A,B)(A,C)(B,D)(D,A)判斷是否有循環引用,提示用拓撲排序
50、數組找是否存在和爲M的兩個數
51、KMP
52、實現一個阻塞隊列(生產者消費者模型)
53、找出10000個數據中第 k 大的數
54、輸入一個字符串,包含數字、加減乘除和括號,輸出結果,編程
55、給定一個數x,要求使用k個數字求和可以得到x,數字從1-9中選擇,不能重複。
56、輸入一個正整數 N,返回 N 個 ‘(’ 和 N 個 ‘)’ 的所有可能情況
57、76.minimum-window-substring、30.substring-with-concatenation-of-all-words、42.trapping-rain-water,
58、求樹的最左下節點
59、無序數組中第k大的數(quick select)
60、求旋轉數組找最小值(二分)
61、判斷二叉樹是否鏡像(遞歸)
62、給定一個矩陣,從左上角開始只能往下或者右走,求到達右下角的最小權值路徑
63、字符串轉Int,如果越界就返回0
64、lc400
65、單向鏈表實現加法
66、打家劫舍
67、收到禮物最大值
68、五張牌,其中大小鬼爲癩子,牌面爲 0,判斷這五張牌是否能組成順子
69、給定一個字符串打印所有的子串,要求不重複
70、自然數1-n,排一塊組成的字符串,求第k位是什麼。
71.如果a[0]<a[1],a[n-2]>a[n-1],那麼請找出任意一個點使得a[i-1]<a[i]>a[i+1] 要求logN
72、a[-1]和a[n+1]設爲負無窮大,二分查找找到數組中的一個峯值。
73、如果有一組數字,按照“拿出第一個數在桌上並然後將下一個數放到隊尾”一直操作直到數字全部放在桌子上,給你最後在桌子上的數字,請返回最開始數字的順序。
74、有序數組找到第一個小於0的數和第一個大於0的數
75、合併兩個排序數組並去重
76、兩個排序數組找中位數
77、兩個超大整數的字符串做減法運算。
78、1~10000中7出現的次數,如17算1個,77算2個。
79、給一個字符串數組,統計每一個字符串出現的次數,要求不能用set,map.時間複雜度O(n).
80、手撕最大堆,實現對應的push和pop操作
81、找出一個字符串中所有的迴文子串
82、重複次數最多的最長連續子串(即找到重複次數最多的子串,若有多個,輸出最長的)
83、長度爲n的數組,有一個長度爲k的滑動窗口,詢問各個滑動窗口內的中位數。
84、區間最大最小值。兩個長度爲n的序列a,b,問有多少區間[l,r] 滿足max(a[l,r])<min(b[l,r])。即a[l,r]的最大值小於b[l,r]的最小值
85、8皇后問題共有多少種解法
86、一個數字串刪除指定個數的數字字符,剩下的組成一個最大的數
87、N個長度爲K的有序鏈表合併,時間複雜度,空間複雜度
88、N個長度爲K的有序數組合並,時間複雜度,空間複雜度
89、用一個棧去排序另一個棧
90、一個數組實現兩個棧
91、一個n位數,現在可以刪除其中任意k位,使得剩下的數最小
92、實現有符號大數鏈表加法,靠近頭結點位置爲高位
93、找出來數組中每個元素後邊第一個比它大的值
94、完全二叉樹的最大深度與節點個數
95、兩個有序數組交集、並集
96、用二分法對一個數字開根號
97、一個無序有正有負數組,求乘積最大的三個數的乘積
98、實現鏈表,無序鏈表,對鏈表值奇偶分離並排序,空間複雜度O(1)
99、無序數組構建一棵二叉排序樹
100、打印出根節點到葉子節點的最長路徑
101、字符串形式自定義進制大數相加
102、LeetCode 1038
103、任意一個整型數組,判斷是否可以將數組分爲三個區間,每個區間中數值的和相同
104、二叉樹逆時針打印最外層節點
105、無向圖最短路徑
106、輸入一個矩陣,起始點和目標點,判斷是否存在可達路徑