https://www.nowcoder.com/discuss/12805
華爲面試感覺有點坑啊http://www.nowcoder.com/discuss/7768?type=0&order=3&pos=4448&page=2
一、Java基礎
1.JVM虛擬機(內存模型、垃圾收集、gc)
- gc算法(JVM內存模型、分區,組成部分特點,GC算法,minor gc和full gc,再說說垃圾回收器,Serial、ParNew、CMS等,類加載等問題)【10】
- 新生老生代gc算法實現
- 垃圾回收機制(垃圾判斷算法、垃圾回收算法、垃圾回收器)
- JVM內存模型【3】
【1-4答案】Java內存結構、虛擬機垃圾回收和gc算法 - 談一談finalize的理解
- Java 8 的新特性,我講了一下非阻塞的同步方式CAS,????
- juc包內有哪些類,CAS如何實現,說一下對線程池的理解
- 事務的隔離級別和傳播行爲 ,另外跟他說一下ACID.????
2.Java的基礎過程
- java的優勢,Java有哪些特性(封裝、繼承、多態之類的)【2】
- 封裝、多態【2】
- new 實例化過程
- 反射的所有包,怎實現反射
- java修飾符(public、private、default、protected)
- 靜態類與單例模式的區別
- 面向對象的設計規範
- 接口和抽象類的區別
- 繼承的好處和壞處
-
- super()和this能不能同時使用
3.數組、字符、字符串
- String,StringBuffer,StringBuilder區別,String爲什麼不可變【3】 2.
4.鏈表
- 鏈表刪去指定值的節點 2.
5.棧、隊列
- 手寫兩個棧實現隊列,優化【3】
6.樹、圖
- 樹的中序遍歷,除了遞歸和棧還有什麼實現方式(Morris遍歷)
- 說一下對B+樹的瞭解
- 堆與普通二叉樹有什麼區別。
7.IO
- IO哪個類可以byte轉String
- 說一下IO模型
- 說一說對java io的理解
- 操作系統IO的幾種類型和原理
二、集合
HashMap相關
- Hashmap底層實現,原理,手撕【8】(處理衝突方法【3】?各個方法優缺點,爲什麼不用另一個有點的方法????)
- HashSet和HashMap的區別
- HashMap和HashTable的區別
- 談一談TreeMap
- ConcurrentHashMap以及HashMap在什麼情況下性能會不好【2】
- HashMap如果有很多相同key,後面的鏈很長的話,你會怎麼優化?或者你會用什麼數據結構來存儲?我說了一個SkipList
- 針對HashMap中某個Entry鏈太長,查找的時間複雜度可能達到O(n),怎麼優化?(當時說了可能是容量或者hash算法的原因,說了擴容,尋找好的hash算法替代,然後面試官說不是這兩個原因造成的,當時LZ也不知道JDK8中是採用紅黑樹進行處理的,就想不是爲了降低查找時間複雜度嗎,就說了用有序數組存儲鏈表的數據,也就想到用有序數組查找的時間複雜度爲O(nlogn )來解決,也是病急亂投醫吧,最後面試官說也算是一種方法吧。)
List相關
- 常用集合類,用過哪些容器【2】
- Array與List的區別
- ArrayList與LinkedList,從實現機制,擴容機制等方面
- ArrayList如何實現排序
- map、list、set的區別
三、線程、鎖
1.多線程
- 進程與線程的區別,多線程的理解【2】
- ThreadLocal關鍵字(維護變量時,爲每個使用該變量的線程提供獨立的變量副本,每個線程都可以獨立改變自己副本,不影響其他線程)
- sleep和wait的區別【3】
- 多線程幾種狀態【3】
- java實現線程的方式;哪種好;爲什麼好;
- 創建線程的方式。
- 多線程共享變量的問題?
- 進程通信的方法
- 一般線程和守護線程的區別
- 多個線程請求怎麼辦(ConcurentLinkedQueue 好像不對,假如1000個線程,多整幾個隊列 假設8個,那麼併發量減少到1000/8 ,設成100個隊列 併發更少。至於哪個線程分到哪個隊列,可以用hash的方法 將線程分散開。)
- 不同進程打開了同一個文件,那麼這兩個進程得到的文件描述符(fd)相同嗎? 12.
2.鎖(線程安全)
- java如何實現線程安全,synchronized和lock的區別,可重入鎖
- 死鎖形成、死鎖怎麼檢測
- Synchronized和lock的區別【2】
- 多線程中鎖,如何處理呢保證效率。( ConcurrentHashMap , 鎖分段技術 Segment ,並與 HashMap、HashTable對照着闡述了一下自己的觀點,他也問了幾個基本參數 看我是不是真知道。)
3.同步
- 同步方法。創建線程。
- 進程調度、頁面置換、LRU???【2】
- 學校oj平臺這個項目怎麼實現1000人併發?併發的性能瓶頸在哪?(nginx+tomcat集羣,性能瓶頸可能出現在網絡io和java gc上,然後說了下jvm gc的優化,如何實現session共享。面試官說這樣有問題)【2】
併發
- 談一談對volatile理解,這個問題很常見,答出要點: 可見性、防止指令重排即可。
四、項目相關
1.統問問題
- 項目介紹
- 項目中使用哪些設計模式
- 項目中技術難點
- 你的項目是怎麼測試和驗收的啊?
- 如果重新讓做,你會怎麼做?
- 你覺得從中收穫最大的三個點?
2.細節問題
- 項目過程中做過的一些優化以及碰到的一些挑戰性的問題。
這裏結合實際開發中遇到的問題說,eg:
- 很常見的 Nullpointerexception ,你是怎麼排查的,怎麼解決的;
- Out of MemoryError 產生的原因是什麼,具體怎麼去調優,以及理解那幾個參數的含義 -Xms, -Xmx ,-Xmn, -XX:PermSize
- 線程池的配置 Excutor 以及Connector的配置
- 項目用到了幾個Tomcat ? 如果多個Tomcat 你該怎麼做?( Nginx+Tomcat )
項目中用到緩存沒有,講一下Redis和自己的理解
在線打印導出 ,遇到的兼容性問題,怎麼解決的?
- 數據庫事務在項目中的應用
項目中哪些地方可以用到這塊AOP,日誌管理、事務管理這塊。【2】
用到哪些中間件
13.
3.優化問題
- 那你做沒做過相關的優化呢?這裏就有的說了,項目的部署架構,一臺機器可以能宕機怎麼辦?假如是你怎麼會優化?我給面試官說了主從數據庫,前端的優化呢?CDN/反向代理,代碼的優化等等。爲什麼學Freemarker模版引擎?是做什麼用的?這裏給面試官講得很細說了大約20分鐘,技術點難點說清楚,把住重點說了。
- 你這項目用負載均衡了嗎?Nginx結合負載均衡 哪個在前哪個在後,這個是試探嗎?【超綱- -】
- Hibernate緩存用過嗎?並沒有用過,壓力測試過,講解了Tomcat優化
- 項目交付之前有沒有做過測試?黑盒和白盒。有沒有做過性能方面的測試,網站上線的話最好做一下併發測試!壓力和併發測試
- 穩定性和可容載的部分怎麼做的?說了下數據庫連接池,Hiabernate整合第三方連接池。
- 項目中對我的挑戰和成長的地方有哪些?
- 這塊我一個人扯了四五分鐘,大概說了以下幾個方面:
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配置
- Tomcat的結構(按server.xml中的層次結構來答)
- 一個web服務,如何搭建環境。
- 項目用到了幾個Tomcat ? 如果多個Tomcat 你該怎麼做?( Nginx+Tomcat )
- Tomcat提供了哪些服務,Tomcat 調優的的具體參數設置(結合實際的項目的問題來說)【2】
- 如果用戶通過Nginx登錄到後面某一臺Tomcat上面,那麼後續的請求,你怎麼保證被轉發到同一個Tomcat 呢?(我說可以用session記錄會話信息 ,感覺答非所問!現在想起來他考察我得應該是Nginx負載均衡算法!
我靈機一動,想到了Hash的思想就說出來了。這裏大家可以下去自己看看,有好幾個算法可以說。) - 那麼怎樣允許後續的請求,可以轉發到另外的Tomcat 節點上呢?也就是說同一個請求可以不同節點來做呢?(負載均衡如何實現Seesion共享,我想了30秒最後把Redis說出來了,)
三、MySQL數據庫
1.問題類
- 數據庫索引的實現【3】,使用和注意事項
- 索引有哪些?分別有什麼特點?
- Inner join,Left Join,Right join的區別
- 列表內容
- 聚簇索引和非聚簇索引的區別
- 數據庫事務的理解【5】,四個特性,隔離級別,MySql在哪個級別,事務併發控制帶來的問題:髒讀、不可重複讀、丟失修改、幻讀【3】
- 間隙鎖、樂觀鎖、悲觀鎖????【2】
- 數據庫優化(索引、存儲引擎、sql優化、視圖)【4】
- 關閉MySQL? 授予權限什麼命令? grant all on testdb.* to common_user@’%’ 主備數據庫知道嗎?沒整過啊
- A和B兩個表做等值連接(Inner join) 怎麼優化 (哈希)
- 怎麼在上億的query中找出頻率最高的k個,Top k問題(解決方案 針對top k類問題,通常比較好的方案是【分治+trie樹/hash+小頂堆】,即先將數據集按照hash方法分解成多個小數據集,然後使用trie樹或者hash統計每個小數據集中的query詞頻,之後用小頂堆求出每個數據集中出頻率最高的前K個數)
十道海量數據處理面試題與十個方法大總結 - 的
2.連接池
- 數據庫連接池知道麼,用的啥連接池,原理是啥?
- 線程池使用了什麼設計模式,線程池使用時一般要考慮哪些問題
- 數據庫連接池監控,監控對你有幫助嗎?
3.做題類
- 輸出用戶表裏重名的用戶
- 統計每個學生有多少門課分數大於80(考察聚集函數和group by的用法)
- 數據庫裏有個表,tab_demo( id , data) id是主鍵 , 對於 where id=’ 1 ’ 和 where data = ’ text ’ ,數據庫是怎麼去操作的,
- 我當時靈光一現 這肯定是考數據庫索引的知識,我答到:前者數據庫默認建立了Unique索引,直接根據索引能找到相應的數據,後邊的要全表掃描。
- 追問: 如果在data 上也建立索引呢,怎麼獲取數據 然後時間複雜度是多少? (B+樹索引??)
4.
四、數據結構
1.數組
- 求兩個int數組的並集、交集
2.字符串
3.鏈表
4.棧
5.隊列
6.樹
- 手寫代碼,左右子樹交換
- 給定一個2叉樹,打印每一層最右邊的結點
- 中序遍歷的非遞歸做法?引出BFS和DFS的區別 4.
7.圖
8.哈希
9.堆
五、算法
1.查找
- 查找有序數組和爲S的數
- 兩個int整數m,n的二進制表達式有多少位不同
- M個數裏找出最大的N個
- 給定一個數組,裏面只有一個數出現了一次,其他都出現了兩次。怎麼得到這個出現了一次的數?
- 在上一題基礎上,如果有兩個不同數的出現了一次,其他出現了兩次,怎麼得到這兩個數?
- 無重複數組找出第K大的數字(引出堆排序(是否穩定,時間/空間複雜度))【2】
2.排序
- 八大排序的原理,時間複雜度,空間複雜度,穩定性(可以拓展通排序(基數排序、計數排序)的原理)【2】
- 快排,描述思路【2】
- 選擇排序穩定嗎?
- 對10G個數進行排序,限制內存爲1G(大數問題,但是這10G個數可能是整數,字符串以及中文改如何排序,)
拓撲排序思想
假如有個公司有10000名員工,要求按照年齡來排序要求時間複雜度O(N),你會怎麼做?大家會怎麼答呢
- 我是這麼想的,Hash的思想空間換時間:因爲人的年齡是有範圍的 ,那我新建一個100的數組,年齡作爲下標存入數組,那麼從前往後遍歷,比如碰到25歲的,Hash[25]++ ; 這樣只需要便利一次即可排序了,時間複雜度O(N),空間複雜度O(N)。大家可以在評論區給出更好的方法。
6.
3.遞歸
- 什麼是遞歸,遞歸的幾個條件?寫遞歸要注意些什麼?
4.複雜度
5.高級算法
- 手寫跳臺階
- 一致性Hash原理
- 寫一個 斐波那契數列
六、設計模式
- 寫一個單例模式,(飽漢模式、餓漢模式(帶鎖的雙重檢查??),private和static使用的原因)【6】
- 項目中使用了哪些設計模式【3】
- JDK中哪些體現了命令模式
- 線程池使用了什麼設計模式
- servlet是單例麼?
- 生產者消費者模式
七、網絡
1.網絡協議
- 網絡七層協議
- TCT與UDP的區別
- TCP的三次握手、四次揮手【3】
- TCP包的結構
- TCP四次揮手的原因
- http協議 5.
2.網絡
- 網絡重定向,說下流程
- IPC 進程間的通信 (Socket)
- 輸入www.baidu.com會發生什麼?(除了說HTTP請求,面試官還暗示想讓說CDN和負載均衡的知識)
- 如何攔截5分鐘前惡意登錄(用戶名密碼不正確)超多一定次數的ip
八、JavaEE基礎
1.HTML
2.CSS
3.JavaScript
4.JSP
5.Servlet
- servlet和filter的區別。
- filter你在哪些地方用到過。
6.JavaBean
7.JDBC
Ajax
九、框架
1.Struts2
- Struts2和1的區別
- 那麼問一下 Struts的Action中會調用多個service嗎?一個請求到action 會不會調用多個service ?如果調用多個serivce怎麼保證事務呢?
- 兩個Service平級的話事務能保證嗎?
- 求一個struct的大小
2.MyBatis
- 有哪些標籤
- 查詢語句使用MyBatis框架中where標籤和不使用框架的sql語句有啥不同 3.
3.Spring
- IOC和AOP具體怎麼使用【7】,日誌怎麼配,代理模式,反射,InvocationHandler????
- StrpingMVC工作原理、處理請求的流程【4】
- 手寫實現IOC【3面的問題了】
- spring,quartz,spark,lucene??????
- bean生命週期,初始化過程,測試基本方法【2】
- annotation如何實現
- 源碼看過嗎
4.Hibernate
- Hibernate生成策略,native、uuid
- Hibernate緩存用過嗎?並沒有用過,壓力測試過,講解了Tomcat優化
- 說一下它的幾個核心接口吧。 Seesion SeesionFactory Configuration…
- 說一下Hibernate 和 Mybatis的區別 ,結合Struts 和SpringMVC 說了一下
5.maven
- maven衝突如何解決
6.Git
7.Redis
- Redis如何解決key衝突(redis都是保存的key.value的鍵值對。用的是hash對象,用拉鍊法解決hash過後的衝突。)
- redis的理解
- redis與mongodb的區別
8.Ajax
9.socket
- socket實現過程,具體用的方法;怎麼實現異步socket.
10.Linux
- 隨便說20個命令,查看文件(cat head tail more less )
- 操作系統如何實現輸出
- linux查詢java進程
- linux查看內存佔用情況
- Linux下 給定一個文件,裏面存放的是IP地址,統計各個IP地址出現的次數
- linux如何查找文件