Java面試題整理

https://www.nowcoder.com/discuss/12805
華爲面試感覺有點坑啊http://www.nowcoder.com/discuss/7768?type=0&order=3&pos=4448&page=2

一、Java基礎

1.JVM虛擬機(內存模型、垃圾收集、gc)

  1. gc算法(JVM內存模型、分區,組成部分特點,GC算法,minor gc和full gc,再說說垃圾回收器,Serial、ParNew、CMS等,類加載等問題)【10】
  2. 新生老生代gc算法實現
  3. 垃圾回收機制(垃圾判斷算法、垃圾回收算法、垃圾回收器)
  4. JVM內存模型【3】
    【1-4答案】Java內存結構、虛擬機垃圾回收和gc算法
  5. 談一談finalize的理解
  6. Java 8 的新特性,我講了一下非阻塞的同步方式CAS,????
  7. juc包內有哪些類,CAS如何實現,說一下對線程池的理解
  8. 事務的隔離級別和傳播行爲 ,另外跟他說一下ACID.????

2.Java的基礎過程

  1. java的優勢,Java有哪些特性(封裝、繼承、多態之類的)【2】
    1. 封裝、多態【2】
  2. new 實例化過程
  3. 反射的所有包,怎實現反射
  4. java修飾符(public、private、default、protected)
  5. 靜態類與單例模式的區別
  6. 面向對象的設計規範
  7. 接口和抽象類的區別
  8. 繼承的好處和壞處

    1. super()和this能不能同時使用

3.數組、字符、字符串

  1. String,StringBuffer,StringBuilder區別,String爲什麼不可變【3】
  2. 2.

4.鏈表

  1. 鏈表刪去指定值的節點
  2. 2.

5.棧、隊列

  1. 手寫兩個棧實現隊列,優化【3】

6.樹、圖

  1. 樹的中序遍歷,除了遞歸和棧還有什麼實現方式(Morris遍歷)
  2. 說一下對B+樹的瞭解
  3. 堆與普通二叉樹有什麼區別。

7.IO

  1. IO哪個類可以byte轉String
  2. 說一下IO模型
  3. 說一說對java io的理解
  4. 操作系統IO的幾種類型和原理

二、集合

HashMap相關

  1. Hashmap底層實現,原理,手撕【8】(處理衝突方法【3】?各個方法優缺點,爲什麼不用另一個有點的方法????)
  2. HashSet和HashMap的區別
  3. HashMap和HashTable的區別
  4. 談一談TreeMap
  5. ConcurrentHashMap以及HashMap在什麼情況下性能會不好【2】
  6. HashMap如果有很多相同key,後面的鏈很長的話,你會怎麼優化?或者你會用什麼數據結構來存儲?我說了一個SkipList
  7. 針對HashMap中某個Entry鏈太長,查找的時間複雜度可能達到O(n),怎麼優化?(當時說了可能是容量或者hash算法的原因,說了擴容,尋找好的hash算法替代,然後面試官說不是這兩個原因造成的,當時LZ也不知道JDK8中是採用紅黑樹進行處理的,就想不是爲了降低查找時間複雜度嗎,就說了用有序數組存儲鏈表的數據,也就想到用有序數組查找的時間複雜度爲O(nlogn )來解決,也是病急亂投醫吧,最後面試官說也算是一種方法吧。)

List相關

  1. 常用集合類,用過哪些容器【2】
  2. Array與List的區別
  3. ArrayList與LinkedList,從實現機制,擴容機制等方面
  4. ArrayList如何實現排序
  5. map、list、set的區別

三、線程、鎖

1.多線程

  1. 進程與線程的區別,多線程的理解【2】
  2. ThreadLocal關鍵字(維護變量時,爲每個使用該變量的線程提供獨立的變量副本,每個線程都可以獨立改變自己副本,不影響其他線程)
  3. sleep和wait的區別【3】
  4. 多線程幾種狀態【3】
  5. java實現線程的方式;哪種好;爲什麼好;
  6. 創建線程的方式。
  7. 多線程共享變量的問題?
  8. 進程通信的方法
  9. 一般線程和守護線程的區別
  10. 多個線程請求怎麼辦(ConcurentLinkedQueue 好像不對,假如1000個線程,多整幾個隊列 假設8個,那麼併發量減少到1000/8 ,設成100個隊列 併發更少。至於哪個線程分到哪個隊列,可以用hash的方法 將線程分散開。)
  11. 不同進程打開了同一個文件,那麼這兩個進程得到的文件描述符(fd)相同嗎?
  12. 12.

2.鎖(線程安全)

  1. java如何實現線程安全,synchronized和lock的區別,可重入鎖
  2. 死鎖形成、死鎖怎麼檢測
  3. Synchronized和lock的區別【2】
  4. 多線程中鎖,如何處理呢保證效率。( ConcurrentHashMap , 鎖分段技術 Segment ,並與 HashMap、HashTable對照着闡述了一下自己的觀點,他也問了幾個基本參數 看我是不是真知道。)

3.同步

  1. 同步方法。創建線程。
  2. 進程調度、頁面置換、LRU???【2】
  3. 學校oj平臺這個項目怎麼實現1000人併發?併發的性能瓶頸在哪?(nginx+tomcat集羣,性能瓶頸可能出現在網絡io和java gc上,然後說了下jvm gc的優化,如何實現session共享。面試官說這樣有問題)【2】

併發

  1. 談一談對volatile理解,這個問題很常見,答出要點: 可見性、防止指令重排即可。

四、項目相關

1.統問問題

  1. 項目介紹
  2. 項目中使用哪些設計模式
  3. 項目中技術難點
  4. 你的項目是怎麼測試和驗收的啊?
  5. 如果重新讓做,你會怎麼做?
  6. 你覺得從中收穫最大的三個點?

2.細節問題

  1. 項目過程中做過的一些優化以及碰到的一些挑戰性的問題。
    這裏結合實際開發中遇到的問題說,eg:
    • 很常見的 Nullpointerexception ,你是怎麼排查的,怎麼解決的;
    • Out of MemoryError 產生的原因是什麼,具體怎麼去調優,以及理解那幾個參數的含義 -Xms, -Xmx ,-Xmn, -XX:PermSize
    • 線程池的配置 Excutor 以及Connector的配置
  2. 項目用到了幾個Tomcat ? 如果多個Tomcat 你該怎麼做?( Nginx+Tomcat )
  3. 項目中用到緩存沒有,講一下Redis和自己的理解

  4. 在線打印導出 ,遇到的兼容性問題,怎麼解決的?

  5. 數據庫事務在項目中的應用
  6. 項目中哪些地方可以用到這塊AOP,日誌管理、事務管理這塊。【2】

  7. 用到哪些中間件

  8. 13.

3.優化問題

  1. 那你做沒做過相關的優化呢?這裏就有的說了,項目的部署架構,一臺機器可以能宕機怎麼辦?假如是你怎麼會優化?我給面試官說了主從數據庫,前端的優化呢?CDN/反向代理,代碼的優化等等。爲什麼學Freemarker模版引擎?是做什麼用的?這裏給面試官講得很細說了大約20分鐘,技術點難點說清楚,把住重點說了。
  2. 你這項目用負載均衡了嗎?Nginx結合負載均衡 哪個在前哪個在後,這個是試探嗎?【超綱- -】
  3. Hibernate緩存用過嗎?並沒有用過,壓力測試過,講解了Tomcat優化
  4. 項目交付之前有沒有做過測試?黑盒和白盒。有沒有做過性能方面的測試,網站上線的話最好做一下併發測試!壓力和併發測試
  5. 穩定性和可容載的部分怎麼做的?說了下數據庫連接池,Hiabernate整合第三方連接池。
  6. 項目中對我的挑戰和成長的地方有哪些?
    • 這塊我一個人扯了四五分鐘,大概說了以下幾個方面:
      1)這個SSH框架的理解,具體數據的處理邏輯細節,比如 Ajax ,Struts結合json等等。
      2)數據庫事務 、 數據庫連接池的理解和優化,第三方連接池性能的比較。
      3)Tomcat 性能調優,主要講解了 JVM內存優化,具體的怎麼修改和具體參數, 如: -Xms -Xmx XX:PermSize -XX:MaxPermSize 等等
      Tomcat 併發調優 ,配置線程池。
      4) Spring 配置過濾器 和 Struts的攔截器配置與使用。
      5) 防止xxs攻擊和sql攻擊等等 ,保證 整個項目的安全性。
      6) 前端框架有多少了解?樓主搭建過網站,然後就被問到了。你自己喜歡做前端的東西嗎?對動態樣式和效果感興趣?
      基於網站又說了一些前端優化,比如 靜態化處理,前臺和後臺的結合。到這裏一定要明確自己的位置是後臺還是前臺!!
      7) 對後臺的優化有了解嗎?比如負載均衡。我給面試官說了 Ngix+Tomcat負載均衡,異步處理(消息緩衝服務器),緩存(Redis, Memcache),NoSQL,數據庫優化,存儲索引優化。
      8) 有在本地環境搭建並實現過以上述技術方案嗎?樓主沒有具體應用到項目中,這一塊樓主有點虛啊。然後就把平時搭建過靜態博客系統扯了出來,用了Octpress+Ruby+MarkDown+github 等技術,把自己做的東西展現給面試官。

咦咦咦

9.異常

異常知識點整理

10.正則表達式

正則表達式 語法、方法整理

二、Tomcat配置

  1. Tomcat的結構(按server.xml中的層次結構來答)
  2. 一個web服務,如何搭建環境。
  3. 項目用到了幾個Tomcat ? 如果多個Tomcat 你該怎麼做?( Nginx+Tomcat )
  4. Tomcat提供了哪些服務,Tomcat 調優的的具體參數設置(結合實際的項目的問題來說)【2】
  5. 如果用戶通過Nginx登錄到後面某一臺Tomcat上面,那麼後續的請求,你怎麼保證被轉發到同一個Tomcat 呢?(我說可以用session記錄會話信息 ,感覺答非所問!現在想起來他考察我得應該是Nginx負載均衡算法!
    我靈機一動,想到了Hash的思想就說出來了。這裏大家可以下去自己看看,有好幾個算法可以說。)
  6. 那麼怎樣允許後續的請求,可以轉發到另外的Tomcat 節點上呢?也就是說同一個請求可以不同節點來做呢?(負載均衡如何實現Seesion共享,我想了30秒最後把Redis說出來了,)

三、MySQL數據庫

1.問題類

  1. 數據庫索引的實現【3】,使用和注意事項
  2. 索引有哪些?分別有什麼特點?
  3. Inner join,Left Join,Right join的區別
  4. 列表內容
  5. 聚簇索引和非聚簇索引的區別
  6. 數據庫事務的理解【5】,四個特性,隔離級別,MySql在哪個級別,事務併發控制帶來的問題:髒讀、不可重複讀、丟失修改、幻讀【3】
  7. 間隙鎖、樂觀鎖、悲觀鎖????【2】
  8. 數據庫優化(索引、存儲引擎、sql優化、視圖)【4】
  9. 關閉MySQL? 授予權限什麼命令? grant all on testdb.* to common_user@’%’ 主備數據庫知道嗎?沒整過啊
  10. A和B兩個表做等值連接(Inner join) 怎麼優化 (哈希)
  11. 怎麼在上億的query中找出頻率最高的k個,Top k問題(解決方案 針對top k類問題,通常比較好的方案是【分治+trie樹/hash+小頂堆】,即先將數據集按照hash方法分解成多個小數據集,然後使用trie樹或者hash統計每個小數據集中的query詞頻,之後用小頂堆求出每個數據集中出頻率最高的前K個數)
    十道海量數據處理面試題與十個方法大總結

2.連接池

  1. 數據庫連接池知道麼,用的啥連接池,原理是啥?
  2. 線程池使用了什麼設計模式,線程池使用時一般要考慮哪些問題
  3. 數據庫連接池監控,監控對你有幫助嗎?

3.做題類

  1. 輸出用戶表裏重名的用戶
  2. 統計每個學生有多少門課分數大於80(考察聚集函數和group by的用法)
  3. 數據庫裏有個表,tab_demo( id , data) id是主鍵 , 對於 where id=’ 1 ’ 和 where data = ’ text ’ ,數據庫是怎麼去操作的,
    • 我當時靈光一現 這肯定是考數據庫索引的知識,我答到:前者數據庫默認建立了Unique索引,直接根據索引能找到相應的數據,後邊的要全表掃描。
    • 追問: 如果在data 上也建立索引呢,怎麼獲取數據 然後時間複雜度是多少? (B+樹索引??)
  4. 4.

四、數據結構

1.數組

  1. 求兩個int數組的並集、交集

2.字符串

3.鏈表

4.棧

5.隊列

6.樹

  1. 手寫代碼,左右子樹交換
  2. 給定一個2叉樹,打印每一層最右邊的結點
  3. 中序遍歷的非遞歸做法?引出BFS和DFS的區別
  4. 4.

7.圖

8.哈希

9.堆

五、算法

1.查找

  1. 查找有序數組和爲S的數
  2. 兩個int整數m,n的二進制表達式有多少位不同
  3. M個數裏找出最大的N個
  4. 給定一個數組,裏面只有一個數出現了一次,其他都出現了兩次。怎麼得到這個出現了一次的數?
  5. 在上一題基礎上,如果有兩個不同數的出現了一次,其他出現了兩次,怎麼得到這兩個數?
  6. 無重複數組找出第K大的數字(引出堆排序(是否穩定,時間/空間複雜度))【2】

2.排序

  1. 八大排序的原理,時間複雜度,空間複雜度,穩定性(可以拓展通排序(基數排序、計數排序)的原理)【2】
  2. 快排,描述思路【2】
  3. 選擇排序穩定嗎?
  4. 對10G個數進行排序,限制內存爲1G(大數問題,但是這10G個數可能是整數,字符串以及中文改如何排序,)
  5. 拓撲排序思想

  6. 假如有個公司有10000名員工,要求按照年齡來排序要求時間複雜度O(N),你會怎麼做?大家會怎麼答呢

    • 我是這麼想的,Hash的思想空間換時間:因爲人的年齡是有範圍的 ,那我新建一個100的數組,年齡作爲下標存入數組,那麼從前往後遍歷,比如碰到25歲的,Hash[25]++ ; 這樣只需要便利一次即可排序了,時間複雜度O(N),空間複雜度O(N)。大家可以在評論區給出更好的方法。
  7. 6.

3.遞歸

  1. 什麼是遞歸,遞歸的幾個條件?寫遞歸要注意些什麼?

4.複雜度

5.高級算法

  1. 手寫跳臺階
  2. 一致性Hash原理
  3. 寫一個 斐波那契數列

六、設計模式

  1. 寫一個單例模式,(飽漢模式、餓漢模式(帶鎖的雙重檢查??),private和static使用的原因)【6】
  2. 項目中使用了哪些設計模式【3】
  3. JDK中哪些體現了命令模式
  4. 線程池使用了什麼設計模式
  5. servlet是單例麼?
  6. 生產者消費者模式

七、網絡

1.網絡協議

  1. 網絡七層協議
  2. TCT與UDP的區別
  3. TCP的三次握手、四次揮手【3】
  4. TCP包的結構
  5. TCP四次揮手的原因
  6. http協議
  7. 5.

2.網絡

  1. 網絡重定向,說下流程
  2. IPC 進程間的通信 (Socket)
  3. 輸入www.baidu.com會發生什麼?(除了說HTTP請求,面試官還暗示想讓說CDN和負載均衡的知識)
  4. 如何攔截5分鐘前惡意登錄(用戶名密碼不正確)超多一定次數的ip

八、JavaEE基礎

1.HTML

2.CSS

3.JavaScript

4.JSP

5.Servlet

  1. servlet和filter的區別。
  2. filter你在哪些地方用到過。

6.JavaBean

7.JDBC

Ajax

九、框架

1.Struts2

  1. Struts2和1的區別
  2. 那麼問一下 Struts的Action中會調用多個service嗎?一個請求到action 會不會調用多個service ?如果調用多個serivce怎麼保證事務呢?
  3. 兩個Service平級的話事務能保證嗎?
  4. 求一個struct的大小

2.MyBatis

  1. 有哪些標籤
  2. 查詢語句使用MyBatis框架中where標籤和不使用框架的sql語句有啥不同
  3. 3.

3.Spring

  1. IOC和AOP具體怎麼使用【7】,日誌怎麼配,代理模式,反射,InvocationHandler????
  2. StrpingMVC工作原理、處理請求的流程【4】
  3. 手寫實現IOC【3面的問題了】
  4. spring,quartz,spark,lucene??????
  5. bean生命週期,初始化過程,測試基本方法【2】
  6. annotation如何實現
  7. 源碼看過嗎

4.Hibernate

  1. Hibernate生成策略,native、uuid
  2. Hibernate緩存用過嗎?並沒有用過,壓力測試過,講解了Tomcat優化
  3. 說一下它的幾個核心接口吧。 Seesion SeesionFactory Configuration…
  4. 說一下Hibernate 和 Mybatis的區別 ,結合Struts 和SpringMVC 說了一下

5.maven

  1. maven衝突如何解決

6.Git

7.Redis

  1. Redis如何解決key衝突(redis都是保存的key.value的鍵值對。用的是hash對象,用拉鍊法解決hash過後的衝突。)
  2. redis的理解
  3. redis與mongodb的區別

8.Ajax

9.socket

  1. socket實現過程,具體用的方法;怎麼實現異步socket.

10.Linux

  1. 隨便說20個命令,查看文件(cat head tail more less )
  2. 操作系統如何實現輸出
  3. linux查詢java進程
  4. linux查看內存佔用情況
  5. Linux下 給定一個文件,裏面存放的是IP地址,統計各個IP地址出現的次數
  6. linux如何查找文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章