本人是作java開發的,這是我參加58,搜狐,搜狗,新浪微博,百度,騰訊文學,網易以及其餘一些小的創業型公司的面試常被問的問題,固然有重複,弄清楚這些,相信面試會輕鬆許多。html
1. junit用法,before,beforeClass,after, afterClass的執行順序java
2. 分佈式鎖 https://blog.csdn.net/zxp_cpinfo/article/details/53692922
3. nginx的請求轉發算法,如何配置根據權重轉發
4. 用hashmap實現redis有什麼問題(死鎖,死循環,可用ConcurrentHashmap)mysql
系統中在用hashmap做爲緩存,因此不得不考慮一些因素:多線程併發,最大容量,性能,以及與redis,EhCache等的優劣比較linux
一、容量的問題:nginx
源碼中,HashMap的最大容量爲1<<30。HashMap的初始默認容量是16,默認負載因子0.75,也就是說,隨着數據的不斷插入,當數據量不斷增大,超過現有容量*負載因子的時候,就是進行容量擴充,即resize操做,而這個操做須要將原來數組的數據逐個所有從新放入到新生成的大容量的數組裏面去,這樣的代價就會比較高,尤爲是hashmap容量在不斷迅速增加的狀況下。所以,相似咱們如今這個系統中,hashmap中須要緩存的數據量基本上是比較穩定的(在可預見的將來不會出現暴增的狀況,所以只要在必定範圍內,也不會形成內存的急劇膨脹),這種狀況下能夠考慮在生成hashmap的時候就直接指定一個容量以及負載因子;並且在咱們的系統中,hashmap緩存的其實就是一張數據表的數據,這樣這個指定的容量其實就能夠根據數據表如今的長度來得到。git
二、多線程併發的問題web
HashMap自己不是線程安全的,所以不能用於多線程併發,由於多線程環境下,使用HashMap進行put操做會引發死循環,致使CPU利用率接近100%,可是java中提供了一個ConcurrentHashMap,這個map是線程安全的,經過對get操做不加鎖,對put操做分塊加鎖的方式來保證線程安全的同時還能有較高的讀寫性能,詳細的介紹能夠參考:http://goldendoc.iteye.com/blog/1103980,http://www.infoq.com/cn/articles/ConcurrentHashMap面試
三、操做性能沒有進行測試,稍後再來測試這個,暫時能夠參考http://blog.csdn.net/java2000_net/article/details/3373181,http://blog.csdn.net/liuzhengkang/article/details/2916829,可是後者看評論好像是有爭議的。redis
5. 線程的狀態
5. 線程的阻塞的方式算法
6. sleep和wait的區別
7. hashmap的底層實現
8. 一萬我的搶100個紅包,如何實現(不用隊列),如何保證2我的不能搶到同一個紅包,可用分佈式鎖 待看
9. java內存模型,垃圾回收機制,不可達算法
Java堆中存放着程序中幾乎全部的對象實例,垃圾收集器在對堆進行回收前,首先須要判斷哪些對象還「活着」,哪些已經「死去」。一般判斷的方法有引用計數算法、可達性分析算法。引用計數算法給對象中添加一個引用計數器,每當一個地方引用它時,計數器值加1;當引用失效時,計數器值減1,若是計數器的值爲0,則說明對象再也不被使用(死去了)。然而Java虛擬機中並無選用計數算法來管理內存,由於引用計數算法難以解決對象之間相互循環引用的問題。可達性分析算法是將一系列稱爲「GC Roots」的對象做爲起始節點,從這些節點開始向下搜索,搜索所走過的路徑稱爲引用鏈,當一個對象到GC Roots沒有任何引用鏈相連時,則證實此對象是不可用的(也死去了)。其中可做爲GC Roots對象的有:虛擬機棧(棧幀中本地變量表)中引用的對象,方法區中靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中引用的對象。上邊說的都是Java堆中的內存回收,而方法區(HotSpot中的永久代)的垃圾收集主要回收兩部份內容:廢棄常量和無用類。判斷一個常量是不是廢棄常量只需判斷是否還存在對該常量有引用的對象。而判斷無用類須要同時知足3個條件:該類全部的實例都已經被回收,即Java堆中不存在該類的任何實例;加載該類的ClassLoader已經被回收;該類對應的java.lang.Class對象沒有在任何地方被引用,沒法在任何地方經過反射訪問該類的方法。
10. 兩個Integer的引用對象傳給一個swap方法在方法內部交換引用,返回後,兩個引用的值是否會發現變化
11. aop的底層實現,動態代理是如何動態,假若有100個對象,如何動態的爲這100個對象代理
https://blog.csdn.net/qq_24693837/article/details/54909477
https://www.jianshu.com/p/6402c45cee62
12. 是否用過maven install。 maven test。git(make install是安裝本地jar包)
13. tomcat的各類配置,如何配置docBase
14. spring的bean配置的幾種方式
15. web.xml的配置
16. spring的監聽器。
17. zookeeper的實現機制,有緩存,如何存儲註冊服務的
18. IO會阻塞嗎?readLine是否是阻塞的
19. 用過spring的線程池仍是java的線程池?
20. 字符串的格式化方法 (20,21這兩個問題問的過低級了)
21. 時間的格式化方法
22. 定時器用什麼作的
高效的實現方式就是使用java.util.Timer工具類。
23. 線程如何退出結束
24. java有哪些鎖?樂觀鎖 悲觀鎖 synchronized 可重入鎖 讀寫鎖,用過reentrantlock嗎?reentrantlock與synmchronized的區別
25. ThreadLocal的使用場景
在工具 類獲取CurrentSession 或者獲取鏈接的工具類 能夠用ThreadLocal <Session或者Connection> 用線程的變量副本存儲 這些session 保證一個線程只存在一個session 相互直接不共享數據
26. java的內存模型,垃圾回收機制
27. 爲何線程執行要調用start而不是直接run(直接run,跟普通方法沒什麼區別,先調start,run纔會做爲一個線程方法運行)
28. qmq消息的實現機制(qmq是去哪兒網本身封裝的消息隊列)
29. 遍歷hashmap的三種方式
30. jvm的一些命令
31. memcache和redis的區別
http://www.cnblogs.com/shan1393/p/9001113.html
32. mysql的行級鎖加在哪一個位置
33. ConcurrentHashmap的鎖是如何加的?是否是分段越多越好
34. myisam和innodb的區別(innodb是行級鎖,myisam是表級鎖)
35. mysql其餘的性能優化方式
36. linux系統日誌在哪裏看
cat /var/log/syslog 等 cat /var/log/*.log
37. 如何查看網絡進程
ps 命令用於查看當前正在運行的進程。
grep 是搜索
例如: ps -ef | grep java
表示查看全部進程裏 CMD 是 java 的進程信息
ps -aux | grep java
-aux 顯示全部狀態
ps kill 命令用於終止進程
例如: kill -9 [PID]
-9 表示強迫進程當即中止
一般用 ps 查看進程 PID ,用 kill 命令終止進程
關鍵字: linux 查進程、殺進程、起進程
38. 統計一個整數的二進制表示中bit爲1的個數
39. jvm內存模型,java內存模型
40. 如何把java內存的數據所有dump出來
41. 如何手動觸發全量回收垃圾,如何當即觸發垃圾回收
system.gc 可是 不保證垃圾回收器必定會執行
42. hashmap若是隻有一個寫其餘全讀會出什麼問題
43. git rebase
44. mongodb和hbase的區別
45. 如何解決併發問題
46. volatile的用途 保證變量時刻是最新的 不能夠被緩存 只能修飾變量
47. java線程池(好像以前個人理解有問題)
48. mysql的binlog
49. 代理模式
50. mysql是如何實現事務的
每執行一條sql調用一次事務 手動設置 須要 set autoCommit=0
51. 讀寫分離什麼時候強制要讀主庫,讀哪一個從庫是經過什麼方式決定的,從庫的同步mysql用的什麼方式
52. mysql的存儲引擎
mylsam 選擇 插入
innodb 數據庫恢復 事務
53. mysql的默認隔離級別,其餘隔離級別
54. 將一個鏈表反轉(用三個指針,可是每次只發轉一個)
55. spring Aop的實現原理,具體說說
面向切面 在不改變原有代碼對 程序進行加強
56. 什麼時候會內存泄漏,內存泄漏會拋哪些異常
內存泄漏 是指在資源用完沒有及時釋放致使內存泄漏
內存溢出 指你有的數據比內存給的要大 內存溢出 例如用int 存Long類型的 數
57. 是否用過Autowire註解
58. spring的注入bean的方式
59. sql語句各類條件的執行順序,如select, where, order by, group by
分組後排序
60. select xx from xx where xx and xx order by xx limit xx; 如何優化這個(看explain)
61. 四則元算寫代碼
62. 統計100G的ip文件中出現ip次數最多的100個ip
select count ( select 經過id進行分組)r where r.rownum<100
63. zookeeper的事物,結點,服務提供方掛了如何告知消費方
64. 5臺服務器如何選出leader(選舉算法)
65. 適配器和代理模式的區別
類的適配器模式:當但願將一個類轉換成知足另外一個新接口的類時,可使用類的適配器模式,建立一個新類,繼承原有的類,實現新的接口便可。
代理模式就是多一個代理類出來,替原對象進行一些操做,
代理模式的應用場景:
若是已有的方法在使用的時候須要對原有的方法進行改進,此時有兩種辦法:
一、修改原有的方法來適應。這樣違反了「對擴展開放,對修改關閉」的原則。
二、就是採用一個代理類調用原有的方法,且對產生的結果進行控制。這種方法就是代理模式。
66. 讀寫鎖
67. static加鎖
68. 事務隔離級別
69. 門面模式,類圖(外觀模式)
70. mybatis如何映射表結構
71. 二叉樹遍歷
72. 主從複製
https://i.cnblogs.com/EditPosts.aspx?postid=9064102
73. mysql引擎區別
74. 靜態內部類加載到了哪一個區?方法區
75. class文件編譯後加載到了哪
76. web的http請求如何總體響應時間變長致使處理的請求數變少,該如何處理?用隊列,當處理不了那麼多http請求時將請求放到隊列
中慢慢處理,web如何實現隊列
77. 線程安全的單例模式
78. 快速排序性能考慮
79. volatile關鍵字用法
80. 求表的size,或作數據統計可用什麼存儲引擎
81. 讀多寫少可用什麼引擎
82. 假如要統計多個表應該用什麼引擎
83. concurrenhashmap求size是如何加鎖的,若是剛求完一段後這段發生了變化該如何處理
84. 1000個蘋果放10個籃子,怎麼放,能讓我拿到全部可能的個數
85. 可重入的讀寫鎖,可重入是如何實現的?
86. 是否用過NIO
87. java的concurrent包用過沒
88. sting s=new string("abc")分別在堆棧上新建了哪些對象 方法區 "abc" 堆 s對象 棧存的對象的引用
89. java虛擬機的區域分配,各區分別存什麼
90. 分佈式事務(JTA)
91. threadlocal使用時注意的問題(ThreadLocal和Synchonized都用於解決多線程併發訪問。可是ThreadLocal與synchronized有本質的區別。synchronized是利用鎖的機制,使變量或代碼塊在某一時該只能被一個線程訪問。而ThreadLocal爲每個線程都提供了變量的副本,使得每一個線程在某一時間訪問到的並非同一個對象,這樣就隔離了多個線程對數據的數據共享。而Synchronized卻正好相反,它用於在多個線程間通訊時可以得到數據共享)
92. java有哪些容器(集合,tomcat也是一種容器)
93. 二分查找算法
94. myisam的優勢,和innodb的區別
95. redis能存哪些類型 String hash set Zset
96. http協議格式,get和post的區別
97. 可重入鎖中對應的wait和notify
98. redis能把內存空間交換進磁盤中嗎(這個應該是能夠的,可是那個面試官非跟我說不能夠)
99. java線程池中基於緩存和基於定長的兩種線程池,當請求太多時分別是如何處理的?定長的事用的隊列,若是隊列也滿了呢?交換進磁盤?基於緩存的線程池解決方法呢?
100. synchronized加在方法上用的什麼鎖 可重入鎖
101. 可重入鎖中的lock和trylock的區別
trylock(time ) 等待指定時間纔會嘗試獲取鎖返回true
102. innodb對一行數據的讀會枷鎖嗎?不枷鎖,讀實際讀的是副本
103. redis作緩存是分佈式存的?不一樣的服務器上存的數據是否重複?guava cache呢?是否重複?不一樣的機器存的數據不一樣
104. 用awk統計一個ip文件中top10
105. 對錶作統計時可直接看schema info信息,即查看錶的系統信息
106. mysql目前用的版本
107. 公司經驗豐富的人給了什麼幫助?(通常boss面會問這些)
108. 本身相對於同樣的應屆生有什麼優點
109. 本身的好的總結習慣給本身從此的工做帶了什麼幫助,舉例爲證
110. 原子類,線程安全的對象,異常的處理方式
111. 4億個int數,如何找出重複的數(用hash方法,建一個2的32次方個bit的hash數組,每取一個int數,可hash下2的32次方找到它在hash數組中的位置,而後將bit置1表示已存在)
112. 4億個url,找出其中重複的(考慮內存不夠,經過hash算法,將url分配到1000個文件中,不一樣的文件間確定就不會重複了,再分別找出重複的)
有1萬個數組,每一個數組有1000個整數,每一個數組都是降序的,從中找出最大的N個數,N<1000
113. LinkedHashmap的底層實現
114. 類序列化時類的版本號的用途,若是沒有指定一個版本號,系統是怎麼處理的?若是加了字段會怎麼樣?
Java的序列化機制是經過在運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的字節流中的serialVersionUID與本地相應實體(類)的serialVersionUID進行比較,若是相同就認爲是一致的,能夠進行反序列化,不然就會出現序列化版本不一致的異常。
115. Override和Overload的區別,分別用在什麼場景
116. java的反射是如何實現的
類的字節碼 Class.forname("類的全路徑")