Java 200道題

1. junit用法,before,beforeClass,after, afterClass的執行順序html

一個測試類單元測試的執行順序爲:java

@BeforeClass –> @Before –> @Test –> @After –> @AfterClassmysql

每個測試方法的調用順序爲:linux

@Before –> @Test –> @Afternginx

參考: http://blog.csdn.net/wangpeng047/article/details/9631193git


2. 分佈式鎖web

1、zookeeper 瞬時有序節點:每一個客戶端對某個功能加鎖時,在zookeeper上的與該功能對應的指定節點的目錄下,生成一個惟一的瞬時有序節點面試

2、memcached add函數:add會添加第一個到達的值,並返回true,後續的添加則都會返回false。(沒法持久化)redis

3、redis分佈式鎖算法

redis分佈式鎖便可以結合zk分佈式鎖鎖高度安全memcached併發場景下效率很好的優勢,能夠利用jedis客戶端實現。

參考http://blog.csdn.net/java2000_wl/article/details/8740911

http://surlymo.iteye.com/blog/2082684


3. nginx的請求轉發算法,如何配置根據權重轉發

當在一臺主機上部署了多個不一樣的web服務器,而且須要能在80端口同時訪問這些web服務器時,可使用 nginx 的反向代理功能: 用 nginx 在80端口監聽全部請求,並依據轉發規則(比較常見的是以 URI 來轉發)轉發到對應的web服務器上。

例若有 webmail , webcom 以及 webdefault 三個服務器分別運行在 portmail , portcom , portdefault 端口,要實現從80端口同時訪問這三個web服務器,則能夠在80端口運行 nginx, 而後將 /mail 下的請求轉發到 webmail 服務器, 將 /com下的請求轉發到 webcom 服務器, 將其餘全部請求轉發到 webdefault 服務器。

http://blog.csdn.net/tobacco5648/article/details/51099426


4. 用hashmap實現redis有什麼問題

(死鎖,死循環,可用ConcurrentHashmap)


5. 線程的狀態

五個狀態之一:新建狀態、就緒狀態、運行狀態、阻塞狀態及死亡狀態。


5. 線程的阻塞的方式

sleep() wait() join()


6. sleep和wait的區別

對於sleep()方法,是屬於Thread類中的。而wait()方法,則是屬於Object類中的。

sleep()方法致使了程序暫停執行指定的時間,讓出cpu該其餘線程,線程不會釋放對象鎖。

而當調用wait()方法的時候,線程會放棄對象鎖,對象調用notify()方法後本線程才獲取對象鎖進入運行狀態。


7. hashmap的底層實現

HashMap是基於哈希表的Map接口的非同步實現(Hashtable跟HashMap很像,惟一的區別是Hashtalbe中的方法是線程安全的,也就是同步的)。

HashMap底層就是一個數組,數組中的每一項又是一個鏈表。當程序試圖將一個key-value對放入HashMap中時,程序首先根據該 key 的 hashCode() 返回值決定該 Entry 的存儲位置:若是兩個 Entry 的 key 的 hashCode() 返回值相同,那它們的存儲位置相同。若是這兩個 Entry 的 key 經過 equals 比較返回 true,新添加 Entry 的 value 將覆蓋集合中原有 Entry 的 value,但key不會覆蓋。若是這兩個 Entry 的 key 經過 equals 比較返回 false,新添加的 Entry 將與集合中原有 Entry 造成 Entry 鏈

http://www.cnblogs.com/ITtangtang/p/3948406.html


8. 一萬我的搶100個紅包,如何實現(不用隊列),如何保證2我的不能搶到同一個紅包?

可用jedisLock—redis分佈式鎖實現:基本原理用一個狀態值表示鎖,對鎖的佔用和釋放經過狀態值來標識。

SETNX key value/expire KEY seconds/del KEY

http://blog.csdn.net/u010359884/article/details/50310387

http://www.cnblogs.com/0201zcr/p/5942748.html


9. java內存模型,

垃圾回收機制,不可達算法


10. 兩個Integer的引用對象傳給一個swap方法在方法內部交換引用,返回後,兩個引用的值是否會發現變化

不會!Java裏方法的參數傳遞方式只有一種:值傳遞。

Integer a =1;Integer b=2; swap(Integer a1,Integer b1){c=b1;b1=a1;a1=c}


11. aop的底層實現,動態代理是如何動態,假若有100個對象,如何動態的爲這100個對象代理

AOP的核心機制經過動態代理來實現(jdk動態代理和cglib動態代理)


12. 是否用過maven install。 maven test。Git(make install是安裝本地jar包)

maven install 生成jar包

maven test 運行 src/test/java下的測試用例

mvn install -Dmaven.test.skip=true跳過測試

http://www.cnblogs.com/phoebus0501/archive/2011/05/10/2042511.html


13. tomcat的各類配置,如何配置docBase

appBase這個目錄下面的子目錄將自動被部署爲應用

docBase只是指向了你某個應用的目錄

http://blog.csdn.net/liuxuejin/article/details/9104055


14. spring的bean配置的幾種方式

基於XML的配置、基於註解的配置和基於Java類的配置。

http://www.cnblogs.com/zhangwenjing/p/3546006.html


15. web.xml的配置

最終加載順序:ServletContext -> listener -> filter -> servlet

http://www.cnblogs.com/xxoome/p/5954633.html


16. spring的監聽器。

http://blog.csdn.net/xrt95050/article/details/6132179


17. zookeeper的實現機制,有緩存,如何存儲註冊服務的

ZooKeeper是Hadoop Ecosystem中很是重要的組件,它的主要功能是爲分佈式系統提供一致性協調(Coordination)服務

http://blog.csdn.net/xinguan1267/article/details/38422149


18. IO會阻塞嗎?readLine是否是阻塞的

readLine()是一個阻塞函數,當沒有數據讀取時,就一直會阻塞在那,而不是返回null

readLine()只有在數據流發生異常或者另外一端被close()掉時,纔會返回null值。

http://blog.csdn.net/swingline/article/details/5357581


19. 用過spring的線程池仍是java的線程池?

SpringFrameWork 的 ThreadPoolTaskExecutor 是輔助 JDK 的 ThreadPoolExecutor 的工具類,它將屬性經過 JavaBeans 的命名規則提供出來,方便進行配置。

http://www.cnblogs.com/chkk/p/5386356.html


20. 字符串的格式化方法 (20,21這兩個問題問的過低級了)

String類的format()方法

21. 時間的格式化方法

SimpleDateFormat的format()方法
22. 定時器用什麼作的

http://lengchaotian.iteye.com/blog/1887439


23. 線程如何退出結束

1. 使用退出標誌,使線程正常退出,也就是當run方法完成後線程終止。 while (!exit);
2. 使用stop方法強行終止線程。
3. 使用interrupt方法中斷線程。


24. java有哪些鎖?

樂觀鎖 悲觀鎖 synchronized 可重入鎖 讀寫鎖,

用過reentrantlock嗎?reentrantlock與synmchronized的區別

1. 等待可中斷 tryLock(long timeout, TimeUnit unit)。

2.公平鎖與非公平鎖(synchronized的是非公平鎖

3.綁定多個Condition

http://www.cnblogs.com/fanguangdexiaoyuer/p/5313653.html


25. ThreadLocal的使用場景

ThreadLocal就是用於線程間的數據隔離的。最適合的是按線程多實例(每一個線程對應一個實例)的對象的訪問


26. java的內存模型,垃圾回收機制


27. 爲何線程執行要調用start而不是直接run

(直接run,跟普通方法沒什麼區別,先調start,run纔會做爲一個線程方法運行)


28. qmq消息的實現機制(qmq是去哪兒網本身封裝的消息隊列)
29. 遍歷hashmap的三種方式

方式1:經過遍歷keySet()遍歷HashMap的value
用時:61
方式2:經過遍歷values()遍歷HashMap的value
用時:7
方式3:經過entrySet().iterator()遍歷HashMap的key和映射的value
用時:12

http://blog.csdn.net/fly_zxy/article/details/43015193

 

30. jvm的一些命令

jps jstat jmap jhat jstack jinfo

 

31. memcache和redis的區別

1  Redis不只僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
2  Redis支持數據的備份,即master-slave模式的數據備份。
3  Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用

http://blog.csdn.net/tonysz126/article/details/8280696/

32. MySQL的行級鎖加在哪一個位置

表級,直接鎖定整張表,在你鎖按期間,其它進程沒法對該表進行寫操做。若是你是寫鎖,則其它進程則讀也不容許
行級,,僅對指定的記錄進行加鎖,這樣其它進程仍是能夠對同一個表中的其它記錄進行操做。
頁級,表級鎖速度快,但衝突多,行級衝突少,但速度慢。因此取了折衷的頁級,一次鎖定相鄰的一組記錄。

http://www.jb51.net/article/50047.htm


33. ConcurrentHashmap的鎖是如何加的?是否是分段越多越好

http://www.cnblogs.com/my376908915/p/6759667.html


34. myisam和innodb的區別

(innodb是行級鎖,myisam是表級鎖)


35. mysql其餘的性能優化方式

http://www.cnblogs.com/eric-gao/articles/5549801.html

 

36. linux系統日誌在哪裏看

/var/log/*     ,用Ls / cat查看

http://mushme.iteye.com/blog/1001478

 

37. 如何查看網絡進程

38. 統計一個整數的二進制表示中bit爲1的個數

while (n >0) { if((n &1) ==1) // 當前位是1 ++c ; // 計數器加1 n >>=1 ; // 移位  }

http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html

 

39. jvm內存模型,java內存模型

http://www.cnblogs.com/my376908915/p/6753498.html

 

40. 如何把java內存的數據所有dump出來

jmap來獲取內存鏡像;MAT/ visualvm來進行內存鏡像分析

http://f.dataguru.cn/thread-714170-1-1.html

41. 如何手動觸發全量回收垃圾,如何當即觸發垃圾回收

手動調用gc函數

 

42. hashmap若是隻有一個寫其餘全讀會出什麼問題

若是value爲空(表示這個key尚未插入),那麼極可能同時幾個線程get的value都是null

 

43. git rebase git merge 區別

在當前的分支下rebase一下master分支,這樣我這個分支的幾個commits相對於master仍是處於最頂端的,也就是說rebase主要用來跟上游同步,同時把本身的修改頂到最上面。

用rebase有時候會須要屢次fix衝突;用merge確實只須要解決一遍衝突,比較簡單粗暴

 

44. mongodb和hbase的區別

Redis定位在"快",HBase定位於"大",mongodb定位在"靈活"。

mongodb能夠看成簡單場景下的可是性能高數倍的MySQL,定位是取代關係型數據庫,想當一個主流數據庫。由於他有非結構化、方便擴充字段、寫性能優於mysql。萬事萬物有利有弊,mongodb的內存型緩存內容,讓其速度飛快,帶來內存率多,掉電數據問題等

Redis基本只會用來作緩存,是一個小而美的數據庫,主要用在key-value 的內存緩存,讀寫性能極佳,list,set,hash等幾種簡單結構使得使用也很簡單。緩存與簡單是其定位,分佈式redis架構的出現,讓redis更加普遍的使用,穩坐緩存第一把交椅。

HBase用來作離線計算,定位非結構化大數據,可伸縮性好,並非徹底高可用,底層依靠hadoop提供的HDFS,使用時有一整套zookeeper,pig,hive的生態系統。

 

45. 如何解決併發問題

代碼中的處理就是線程池,多線程,生產者消費者的應用了。

1、 web外網加速相關技術
1. 鏡像站點:譬如一個美國網站的中國鏡像可使來自中國的用戶直接從這個中國的鏡像訪問,從而加快了速度。這能夠看做是一種全球範圍的緩存。
2. DNS負載均衡:在DNS服務器中爲同一個主機名配置多個IP地址,DNS服務器對每一個查詢將以DNS文件中主機記錄的IP地址按順序返回不一樣的解析結果,將客戶端的訪問引導到不一樣的機器上去,從而達到負載均衡的目的
3. CDN內容分發:儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節
2、 內網加速技術

0. HTML靜態化 :HTTP請求---Web服務器---Servlet--HTML--響應請求
1. 負載均衡(軟件負載均衡:LVS、Nginx,第七層(應用層)的應用。硬件負載均衡:F5,第四層(傳輸層)上的應用)
2. Web緩存服務器(數據庫緩存:memcached/redis來作緩存集羣)
3. Web/應用服務器分佈式文件系統(圖片服務器分離 )
4. 分佈式數據庫。數據庫主從分佈: M-M-Slaves方式,2個主Mysql(寫),多個Slaves(讀-負載均衡,結合LVS)。數據庫分割:從業務層面上進行分區,好比id,切分到不一樣的數據庫集羣去。)

http://www.ablanxue.com/prone_1020_1.html


46. volatile的用途

一個最多見的volatile的應用場景是boolean的共享狀態標誌位,或者單例模式的雙重檢查鎖

http://www.cnblogs.com/my376908915/p/6757533.html


47. java線程池

http://www.cnblogs.com/my376908915/p/6761364.html


48. mysql的binlog

binlog日誌用於記錄全部更新了數據或者已經潛在更新了數據(例如,沒有匹配任何行的一個DELETE)的全部語句。語句以「事件」的形式保存,它描述數據更改。

做用:由於有了數據更新的binlog,因此能夠用於實時備份,與master/slave複製。

http://blog.csdn.net/wyzxg/article/details/7412777


49. 代理模式
50. mysql是如何實現事務的

MySQL的事務支持不是綁定在MySQL服務器自己,而是與存儲引擎相關

1.MyISAM:不支持事務,用於只讀程序提升性能

2.InnoDB:支持ACID事務、行級鎖、併發

3.Berkeley DB:支持事務

在MySQL中,事務開始使用COMMIT或ROLLBACK語句開始工做和結束。

http://www.cnblogs.com/ymy124/p/3718439.html

 

51. 讀寫分離什麼時候強制要讀主庫,讀哪一個從庫是經過什麼方式決定的,從庫的同步mysql用的什麼方式

開啓了讀寫分離,在寫數據的時候寫入了主庫,寫完都須要刷新redis緩存,強制要讀主庫。在寫操做的同步延遲窗口以內讀,則讀取主庫,其餘狀況下讀從庫。

讀寫一致:http://www.it610.com/article/4872058.htm

 

主從架構原本就是一種高可用性解決方案,主從架構下的強一致性(銀行業)只須要在主機寫入時,確認更新已經同步到備機以後,再返回寫操做成功便可。主流數據庫均支持這種徹底的同步模式。(MySQL的Semi-sync功能)

目前互聯網企業對於「高併發的寫操做」問題比較典型的解決方案是分表分庫+寫緩存,增長針對寫操做的緩存層,把寫操做放到隊列裏,排隊到數據庫結點上異步執行。(在數據庫層之上架構一個redis這樣的分佈式緩存

 


52. mysql的存儲引擎

MySQL5.5之後默認使用InnoDB存儲引擎,其中InnoDB和BDB提供事務安全表,其它存儲引擎都是非事務安全表。若要修改默認引擎,能夠修改配置文件中的default-storage-engine。

http://www.cnblogs.com/gbyukg/archive/2011/11/09/2242271.html


53. mysql的默認隔離級別,其餘隔離級別

Read Uncommitted(讀取未提交內容),髒讀

Read Committed(讀取提交內容):大多數數據庫系統的默認隔離級別,不可重複讀

Repeatable Read(可重讀):MySQL的默認事務隔離級別,幻讀

Serializable(可串行化):最高的隔離級別

http://www.jb51.net/article/96179.htm


54. 將一個鏈表反轉(用三個指針,可是每次只發轉一個)

思路:從原鏈表的頭部一個一個取節點並插入到新鏈表的頭部

思路:每次都將原第一個結點以後的那個結點放在新的表頭後面。

http://blog.csdn.net/hyqsong/article/details/49429859


55. spring Aop的實現原理,具體說說

IOC(反轉控制):對成員變量的賦值的控制權從代碼中反轉到配置文件中。
AOP:Aspect(切面) Oriented(面向) Programming(編程),面向切面編程。

動態代理和發射技術,已經基本實現了AOP的功能: http://www.jb51.net/article/81788.htm


56. 什麼時候會內存泄漏,內存泄漏會拋哪些異常

首先,這些對象是可達的,即在有向圖中,存在通路能夠與其相連;
其次,這些對象是無用的,即不被程序使用,然而它卻佔用內存。

一個生存週期遠大於另外一個生存週期,並且生存週期大的對象有指向生存週期小的對象的引用,

並且生存週期小的對象再也不有指向其餘對象的引用,那好,既然大的有指向小的引用,那垃圾回收器對小的也迫不得已。

memory leak:最終會致使out of memory!


57. 是否用過Autowire註解

Spring 2.5 引入了 @Autowired 註釋,它能夠對類成員變量、方法及構造函數進行標註,完成自動裝配的工做。 經過 @Autowired的使用來消除 set ,get方法。

Spring 經過一個 BeanPostProcessor 對 @Autowired 進行解析,因此要讓 @Autowired 起做用必須事先在 Spring 容器中聲明 AutowiredAnnotationBeanPostProcessor Bean。

Spring 將直接採用 Java 反射機制對 Boss 中的 car 和 office 這兩個私有成員變量進行自動注入。


58. spring的注入bean的方式

Spring中依賴注入有三種注入方式:

1、構造器注入;

2、設值注入(setter方式注入);

3、Feild方式注入(註解方式注入)。

http://glzaction.iteye.com/blog/1299441


59. sql語句各類條件的執行順序,如select, where, order by, group by

from--where--group by--having--select--order by---limit

http://www.cnblogs.com/huminxxl/p/3149097.html


60. select  xx from xx where xx and xx order by xx limit xx; 如何優化這個(看explain)

加limit,和不加走的索引不同。 select  xx from (select  xx from xx where xx and xx order by xx ) yy limit xx;

在order by  limit 一塊兒時 執行順序不是按照:where ------order by ------ limit

而是:order by ----- limit -------where的順序去執行,這樣就會有一個問題,按照咱們管用的思路,上面的查詢確定是會丟失數據的。

http://blog.csdn.net/wulantian/article/details/42679167

 

MySQL 對於千萬級的大表要怎麼優化?

第一優化你的sql和索引;MySQL性能優化的最佳20+條經驗:http://coolshell.cn/articles/1846.html

第二加緩存,memcached,redis;

第三以上都作了後,仍是慢,就作主從複製或主主複製,讀寫分離

第四若是以上都作了仍是慢,不要想着去作切分,mysql自帶分區表:http://www.cnblogs.com/zemliu/archive/2013/07/21/3203511.html

第五若是以上都作了,那就先作垂直拆分,其實就是根據你模塊的耦合度,將一個大的系統分爲多個小的系統,也就是分佈式系統;列與列之間關聯性不大的時候,垂直切分。

第六纔是水平切分,針對數據量大的表,行不少的時候水平切分表,表名取模:http://www.cnblogs.com/sns007/p/5790838.html

 

61. 四則運算寫代碼

http://www.jb51.net/article/71487.htm

 

62. 統計100G的ip文件中出現ip次數最多的100個ip

1,分割IP:讀原始文件,去掉IP中的點轉化爲一個long型變量,取模爲0,1,2...99的 IP都分到一個(寫)文件了。(內存不夠分而治之http://blog.csdn.net/yan5105105/article/details/50783262)

2,哈希表map<(ip, count>,將每一個IP做爲關鍵字映射爲出現次數,這個哈希表建好以後也得先寫入硬盤

3,建小頂堆,每次有數據輸入的時候能夠先與根節點比較。若小於或等於根節點,則捨棄;不然用新數值替換根節點數值。並進行最小堆的調整。http://blog.csdn.net/ephuizi/article/details/11790957

基於堆實現的優先級隊列:PriorityQueue 解決 Top K 問題:https://my.oschina.net/leejun2005/blog/135085


63. zookeeper的事務,結點,服務提供方掛了如何告知消費方
64. 5臺服務器如何選出leader

分佈式-選舉算法(bully算法):

當任何一個進程發現協調者不響應請求時,他發起一次選舉,選舉過程以下:

a, P進程向全部編號比他大的進程發送一個election消息;

b, 若是無人響應,則P獲勝,成爲協調者

c,若是編號比他大的進程響應,則由響應者接管選舉工做,P的工做完成。

http://blog.csdn.net/huangwei19892008/article/details/9004970

 

65. 適配器和代理模式的區別

代理模式(Proxy):爲其餘對象提供一種代理以控制對這個對象的訪問。用同一接口的子類的方法去 實現接口的方法

適配器模式(Adapter):將一個類的接口轉換成客戶但願的另一個接口,使得本來接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。用不一樣接口的子類的方法去 實現接口的方法


66. 讀寫鎖

對於讀多寫少的場景,一個讀操做無須阻塞其它讀操做,只須要保證讀和寫  或者 寫與寫  不一樣時發生便可。

讀寫鎖的鎖定規則以下:
得到讀鎖後,其它線程可得到讀鎖而不能獲取寫鎖
得到寫鎖後,其它線程既不能得到讀鎖也不能得到寫鎖

http://www.cnblogs.com/my376908915/p/6758681.html


67. static加鎖

synchronized是對類的當前實例進行加鎖,防止其餘線程同時訪問該類的該實例的全部synchronized塊,注意這裏是「 類的當前實例 」,類的兩個不一樣實例就沒有這種約束了。

那麼static synchronized剛好就是要控制類的全部實例的訪問了,static synchronized是限制線程同時訪問jvm中該類的全部實例同時訪問對應的代碼塊。

http://blog.csdn.net/zbuger/article/details/50827762


68. 事務隔離級別

MySQL數據庫爲咱們提供的四種隔離級別:

  ① Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。

  ② Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。

  ③ Read committed (讀已提交):可避免髒讀的發生。

  ④ Read uncommitted (讀未提交):最低級別,任何狀況都沒法保證。

http://www.cnblogs.com/fjdingsd/p/5273008.html


69. 門面模式,類圖(外觀模式)

爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

http://www.cnblogs.com/wangjq/archive/2012/07/10/2583672.html


70. mybatis如何映射表結構

    1. SqlMapConfig.xml中
      <typeAliases>
      <typeAlias alias="game" type="實體類路徑"/>
      </typeAliases>
      這就是把你的實體類寫了個別名

    2. 最後:在寫查詢添加的時候:
      <select id="gameDao" resultType="game">返回實體類對象
      select * from tb_game
      </select>
      這樣查出的結果就對應上數據了。

71. 二叉樹遍歷

前序、中序以及後序三種遍歷方法。

遞歸實現:

void preOrder1(BinTree *root) //遞歸前序遍歷,按照「根結點-左孩子-右孩子」的順序進行訪問。
{
if(root!=NULL)
{
cout<<root->data<<" ";
preOrder1(root->lchild);
preOrder1(root->rchild);
}
}

非遞歸實現:
1)訪問結點P,並將結點P入棧;
2)判斷結點P的左孩子是否爲空,若爲空,則取棧頂結點並進行出棧操做,並將棧頂結點的右孩子置爲當前的結點P,循環至1);若不爲空,則將P的左孩子置爲當前的結點P;
3)直到P爲NULL而且棧爲空,則遍歷結束。
void preOrder2(BinTree *root) //非遞歸前序遍歷
{
stack<BinTree*> s;
BinTree *p=root;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
cout<<p->data<<" ";
s.push(p);
p=p->lchild;
}
if(!s.empty())
{
p=s.top();
s.pop();
p=p->rchild;
}
}
}

72. 主從複製

總體上來講,複製有3個步驟:   

       (1)    master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events);
       (2)    slave將master的binary log events拷貝到它的中繼日誌(relay log);

       (3)    slave重作中繼日誌中的事件,將改變反映它本身的數據。

在每一個事務更新數據完成以前,master在二日誌記錄這些改變。MySQL將事務串行的寫入二進制日誌,即便事務中的語句都是交叉執行的。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。
下一步就是slave將master的binary log拷貝到它本身的中繼日誌。首先,slave開始一個工做線程——I/O線程。I/O線程在master上打開一個普通的鏈接,而後開始binlog dump process。Binlog dump process從master的二進制日誌中讀取事件,若是已經跟上master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌。
SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日誌一般會位於OS的緩存中,因此中繼日誌的開銷很小。

http://blog.csdn.net/hguisu/article/details/7325124


73. mysql引擎區別

MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。

MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級數據庫功能。

通常來講,MyISAM適合:
(1)作不少count 的計算;
(2)插入不頻繁,查詢很是頻繁;
(3)沒有事務。

InnoDB適合:
(1)可靠性要求比較高,或者要求事務;
(2)表更新和查詢都至關的頻繁,而且表鎖定的機會比較大的狀況指定數據引擎的建立

http://www.jb51.net/article/38004.htm


74. 靜態內部類加載到了哪一個區?

方法區

靜態內部類,又叫類級內部類。

延遲加載單例模式:類裝載的時候不去初始化對象,延遲初始化到getInstance方法時初始化。

http://www.javaweb1024.com/java/Javajichu/2015/03/25/454.html

 

75. class文件編譯後加載到了哪

方法區

java編譯期會加載.class文件:加載的類是你須要編譯類所依賴的類,如你使用了System這個類,由於在jdk裏的lib已經存在了,因此你不用顯示的如加載,已經在classpath下面了。

若是你本身寫的一個Class1,把它編譯後,再寫了個Class2。再編譯Class2的時候就須要把Class1的編譯文件加載到classpath中。

 

76. web的http請求若是總體響應時間變長致使處理的請求數變少,該如何處理?

瓶頸在哪裏?

用隊列,當處理不了那麼多http請求時將請求放到隊列中慢慢處理

 

77. 線程安全的單例模式

靜態內部類實現單例模式:

  1. public class MySingleton {  
  2.     //內部類  
  3.     private static class MySingletonHandler{  
  4.         private static MySingleton instance = new MySingleton();  //靜態內部類在類加載是被實例化
  5.     }   
  6.       
  7.     private MySingleton(){}  
  8.     public static MySingleton getInstance() {   
  9.         return MySingletonHandler.instance;  
  10.     }  

枚舉數據類型實現單例模式:EnumFactory.singletonFactory.getInstance()

  1. public enum EnumFactory{    
  2.     singletonFactory;  
  3.     private MySingleton instance;  
  4.     private EnumFactory(){//枚舉類的構造方法在類加載是被實例化  (在使用枚舉時,構造方法會被自動調用)
  5.         instance = new MySingleton();  
  6.     }  
  7.        
  8.     public MySingleton getInstance(){  
  9.         return instance;  
  10.     }  

http://blog.csdn.net/cselmu9/article/details/51366946

78. 快速排序性能考慮

該方法的基本思想(分治法)是:

1.先從數列中取出一個數做爲基準數。

2.分區過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有一個數。

http://blog.csdn.net/morewindows/article/details/6684558

http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html

 

79. volatile關鍵字用法

volatile的應用場景是boolean的共享狀態標誌位,或者單例模式的雙重檢查鎖

http://www.cnblogs.com/my376908915/p/6757533.html

 

80. 求表的size,或作數據統計可用什麼存儲引擎

MyISAM

通常來講,MyISAM適合:
(1)作不少count 的計算;
(2)插入不頻繁,查詢很是頻繁;
(3)沒有事務。

InnoDB適合:
(1)可靠性要求比較高,或者要求事務;
(2)表更新和查詢都至關的頻繁,而且表鎖定的機會比較大的狀況指定數據引擎的建立

http://www.jb51.net/article/38004.htm

 

81. 讀多寫少可用什麼引擎

MyISAM

 

82. 假如要統計多個表應該用什麼引擎

MyISAM

 

83. concurrenhashmap求size是如何加鎖的,若是剛求完一段後這段發生了變化該如何處理

Put等操做都是在單個Segment中進行的,可是ConcurrentHashMap有一些操做是在多個Segment中進行,好比size操做,ConcurrentHashMap的size操做也採用了一種比較巧的方式,來儘可能避免對全部的Segment都加鎖。   

前面咱們提到了一個Segment中的有一個modCount變量,表明的是對Segment中元素的數量形成影響的操做的次數,這個值只增不減,

size操做就是遍歷了兩次Segment,每次記錄Segment的modCount值,而後將兩次的modCount進行比較,若是相同,則表示期間沒有發生過寫入操做,就將原先遍歷的結果返回,

若是不相同,則把這個過程再重複作一次,

若是再不相同,則就須要將全部的Segment都鎖住,而後一個一個遍歷了。

 

ConcurrentHashMap加鎖的時候根據散列值鎖住了散列值鎖對應的那段,所以提升了併發性能。

ConcurrentHashMap也增長了對經常使用複合操做的支持,好比"若沒有則添加":putIfAbsent(),替換:replace()。這2個操做都是原子操做。

http://www.cnblogs.com/my376908915/p/6759667.html

 

84. 1000個蘋果,請你將它放進10個箱子,如何放,使得顧客無論要多少個蘋果,你總能夠從10箱子裏拿出若干個箱子,其蘋果之和就是顧客要的蘋果數?

箱子中依次放1,2,4,8,16,32,64,128,256,489個蘋果

算法:其實就是數的二進制表示而已,你將全部的數轉換成2進制後,就會發現,全部的數都是由不一樣位上的1組成
二進制表:1,10,100,1000,10000,100000。。。。。。。

 

85. 可重入的讀寫鎖,可重入是如何實現的?

可重入鎖又叫作遞歸鎖。

reentrant 鎖意味着什麼呢?簡單來講,它有一個與鎖相關的獲取計數器,若是擁有鎖的某個線程再次獲得鎖,那麼獲取計數器就加1,而後鎖須要被釋放兩次才能得到真正釋放。

這至關因而模仿了synchronized中又能夠嵌套一個synchronized這樣的場景

http://blog.csdn.net/johnking123/article/details/50043961

 

86. 是否用過NIO

BufferChannel是標準NIO中的核心對象(網絡NIO中還有個Selector核心對象),幾乎每個IO操做中都會用到它們。

http://www.cnblogs.com/my376908915/p/6767922.html

 

87. java的concurrent包用過沒

java.util.concurrent包,

AtomicI原子化,基於原子操做的循環CAS算法。

Collections容器,ConcurrentLinkedQueue(非阻塞隊列---基於原子引用的循環CAS),ConcurrentHashMap

Locks鎖,基於非阻塞隊列的循環CAS + JNI的unsafe.park(false, 0L)阻塞線程

Executor線程池。

http://www.cnblogs.com/my376908915/p/6758278.html

 

88. sting s=new string("abc")分別在堆棧上新建了哪些對象

棧:sting s
堆:new string("abc")
字符串池(方法區):"abc"

JVM中存在着一個字符串池,使用引號 建立文本的方式的String對象都會放入字符串池。能夠提升效率。
String a="abc"; String b="abc";//這兩句在字符串池 只建立一個實例對象。
String a="ab"+"cd";//這一句在字符串池 建立三個實例對象。
new方式新建String對象則不會放入字符串池,放入堆。
參考: http://blog.csdn.net/lubiaopan/article/details/4776000/

89. java虛擬機的區域分配,各區分別存什麼

http://www.cnblogs.com/my376908915/p/6753498.html

 

90. 分佈式事務(JTA)

普通的jdbc事務只能針對單個connection,要實現多個數據庫事務的操做,jta能夠知足要求。

jta應用程序要調用 javax.transaction.UserTransaction 接口中的方法。

「用 JTA 界定事務,那麼就須要有一個實現 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驅動程序。
一個實現了這些接口的驅動程序將能夠參與 JTA 事務。一個 XADataSource 對象就是一個 XAConnection 對象的工廠。 XAConnection s 是參與 JTA 事務的 JDBC 鏈接。」
要使用JTA事務,必須使用XADataSource來產生數據庫鏈接,產生的鏈接爲一個XA鏈接。
XA鏈接(javax.sql.XAConnection)和非XA(java.sql.Connection)鏈接的區別在於:XA能夠參與JTA的事務,並且不支持自動提交。
Innodb存儲引擎支持XA事務,經過XA事務能夠支持分佈式事務的實現。
http://blog.csdn.net/mchdba/article/details/13076803

 

91. threadlocal使用時注意的問題

(ThreadLocal和Synchonized都用於解決多線程併發訪問。可是ThreadLocal與synchronized有本質的區別。

synchronized是利用鎖的機制,使變量或代碼塊在某一時該只能被一個線程訪問。

而ThreadLocal爲每個線程都提供了變量的副本,使得每一個線程在某一時間訪問到的並非同一個對象,這樣就隔離了多個線程對數據的數據共享。

而Synchronized卻正好相反,它用於在多個線程間通訊時可以得到數據共享)

http://www.cnblogs.com/my376908915/p/6763210.html

 

92. java有哪些容器

(各類集合,tomcat也是一種容器)

 

93. 二分查找算法

用二分查找在已排序的數組中查看該數組是否含有一個特定的值。速度是很是快速的。

迭代方式:

  1. public int BinarySearchIteration(int[] array, int key)  
  2. {  
  3.     int begin = 0;  
  4.     int end = array.Length - 1;  
  5.     while (begin <= end)  
  6.     {  
  7.         int mid = begin + (end - begin) / 2;  
  8.         if (array[mid] > key)  
  9.         {  
  10.             end = mid - 1;  
  11.         }  
  12.         else if (array[mid] < key)  
  13.         {  
  14.             begin = mid + 1;  
  15.         }  
  16.         else  
  17.         {  
  18.             return mid;  
  19.         }  
  20.     }  
  21.     return -1;  

http://blog.csdn.net/beiyeqingteng/article/details/5736004


94. myisam的優勢,和innodb的區別

MyISAM

通常來講,MyISAM適合:
(1)作不少count 的計算;
(2)插入不頻繁,查詢很是頻繁;
(3)沒有事務。

InnoDB適合:
(1)可靠性要求比較高,或者要求事務;
(2)表更新和查詢都至關的頻繁,而且表鎖定的機會比較大的狀況指定數據引擎的建立

http://www.jb51.net/article/38004.htm


95. redis能存哪些類型

redis經常使用五種數據類型:string,hash,list,set,zset(sorted set).

http://blog.csdn.net/qq_19943157/article/details/50495925


96. http協議格式,get和post的區別

http協議格式: http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

get和post的區別:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html


97. 可重入鎖中對應的wait和notify

條件鎖,http://www.cnblogs.com/my376908915/p/6758681.html

Conditon中的await()對應Object的wait();
Condition中的signal()對應Object的notify();
Condition中的signalAll()對應Object的notifyAll()。


98. redis能把內存空間交換進磁盤中嗎

Redis利用swap文件將數據從內存轉移到磁盤。

http://blog.csdn.net/nvnh7553/article/details/50107971

若是你打開虛擬內存功能,當內存用盡時, Redis就會把那些不常用的數據存儲到磁盤。
若是Redis裏的虛擬內存被禁了,他就會用上操做系統的虛擬內存(交換內存),同時性能急劇降低。
你能夠配置maxmemory參數,來避免Redis默認再分配更多的內存。

http://www.dewen.net.cn/q/242


99. java線程池中基於緩存和基於定長的兩種線程池,當請求太多時分別是如何處理的?

Java自帶的幾種線程池:

一、newCachedThreadPool 建立一個可緩存的線程池。

這種類型的線程池特色是:

a).工做線程的建立數量幾乎沒有限制(其實也有限制的,數目爲Interger. MAX_VALUE), 這樣可靈活的往線程池中添加線程。

b).若是長時間沒有往線程池中提交任務,即若是工做線程空閒了指定的時間(默認爲1分鐘),則該工做線程將自動終止。終止後,若是你又提交了新的任務,則線程池從新建立一個工做線程。

二、newFixedThreadPool 建立一個指定工做線程數量的線程池。

每當提交一個任務就建立一個工做線程,若是工做線程數量達到線程池初始的最大數,則將提交的任務存入到池隊列中。

三、newSingleThreadExecutor 建立一個單線程化的Executor,即只建立惟一的工做者線程來執行任務,若是這個線程異常結束,會有另外一個取代它,保證順序執行(我以爲這點是它的特點)。

單工做線程最大的特色是可保證順序地執行各個任務,而且在任意給定的時間不會有多個線程是活動的 。

四、newScheduleThreadPool 建立一個定長的線程池,並且支持定時的以及週期性的任務執行,相似於Timer。


100. synchronized加在方法上用的什麼鎖

方法對應的實例對象。

 

101. 可重入鎖中的lock和trylock的區別

ReentrantLock獲取鎖定與三種方式:
    a)  lock(), 若是獲取了鎖當即返回,若是別的線程持有鎖,當前線程則一直處於休眠狀態,直到獲取鎖

    b) tryLock(), 若是獲取了鎖當即返回true,若是別的線程正持有鎖,當即返回false;

    c) tryLock(long timeout,TimeUnit unit),   若是獲取了鎖定當即返回true,若是別的線程正持有鎖,會等待參數給定的時間,在等待的過程當中,若是獲取了鎖定,就返回true,若是等待超時,返回false;

    d) lockInterruptibly:若是獲取了鎖定當即返回,若是沒有獲取鎖定,當前線程處於休眠狀態,直到得到鎖定,或者當前線程被別的線程中斷

http://www.cnblogs.com/my376908915/p/6758681.html


102. innodb對一行數據的讀會加鎖嗎?

對於insert、update、delete,InnoDB會自動給涉及的數據加排他鎖(X);

對於通常的Select語句,InnoDB不會加任何鎖,事務能夠經過如下語句給顯示加共享鎖或排他鎖。

共享鎖:select * from table_name where .....lock in share mode

排他鎖:select * from table_name where .....for update

http://www.2cto.com/database/201508/429967.html


103. redis作緩存是分佈式存的?不一樣的服務器上存的數據是否重複?guava cache呢?是否重複?不一樣的機器存的數據不一樣

因爲redis是單點,項目中須要使用,必須本身實現分佈式。

分佈式實現經過key作一致性哈希,實現key對應redis結點的分佈。

http://www.open-open.com/lib/view/open1384603154712.html

Mysql是適合海量數據存儲的,而後經過Memcached將一些經常使用的數據進行緩存,加快訪問速度。

當數據量不斷的增大的時候,進行切表,拆表的,Memcached也須要不斷的跟着擴容MemcachedMysql的數據一致性的問題,Memcached數據命中率低或者Down機,大量的訪問就會穿透到數據庫,這時候Mysql可能會沒法支撐。

          Redis使用最佳方式是所有數據in-memory。

          Redis更多場景是做爲Memcached的替代者來使用。

         當須要除key/value以外的更多數據類型支持時,使用Redis更合適。

         當存儲的數據不能被剔除時,使用Redis更合適。

http://blog.csdn.net/bemavery/article/details/47061663


104. 用awk統計一個ip文件中top10

cat File.log | awk -F ',' '{print $8}' | sort | uniq -c | sort -k1nr | head -10

 

Linux awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤其強大。http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理。http://man.linuxde.net/awk

https://yq.aliyun.com/ziliao/73055


105. 對錶作統計時可直接看schema info信息,即查看錶的系統信息

MySQL中有一個名爲 information_schema 的數據庫,在該庫中有一個 TABLES 表,這個表主要字段分別是:

TABLE_SCHEMA : 數據庫名

TABLE_NAME:表名

ENGINE:所使用的存儲引擎

TABLES_ROWS:記錄數

DATA_LENGTH:數據大小

INDEX_LENGTH:索引大小

 

use information_schema;
select table_name,table_rows from tables
where TABLE_SCHEMA = '數據庫名'
order by table_rows desc;
查詢出來的是每張表的行數

http://help.wopus.org/mysql-manage/607.html


106. mysql目前用的版本

聽說5.0.x的版本比較穩定,兼容比較好,我如今安裝的5.1.63

Mysql查看版本號的五種方式介紹:http://www.jb51.net/article/36370.htm


107. 公司經驗豐富的人給了什麼幫助?(通常boss面會問這些)

具體技術的點撥,思考問題的方式,解決問題的方式。


108. 本身相對於同樣的應屆生有什麼優點

經驗豐富


109. 本身的好的總結習慣,給本身從此的工做帶了什麼幫助,舉例爲證

技術總結分享,文檔歸檔。

 

110. 原子類,線程安全的對象,異常的處理方式

JUC出現以後,這些原子操做 基於JNI提供了新的實現,

好比AtomicInteger,AtomicLong,AtomicBoolean,AtomicReference,AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray;

這些操做中提供一些原子化操做,好比incrementAndGet(至關於i++),compareAndSet(安全賦值)等,直接讀源代碼也很容易懂。

www.cnblogs.com/my376908915/p/6758415.html

 

111. 4億個int數,如何找出重複的數

大數據處理算法一:Bitmap算法

核心思想即經過將一個數做爲下標(index)來索引一個bit表示一個數是否存在,排序時的時間複雜度爲O(N),須要的額外空間的複雜度O(N/8),支持整個int範圍(正負數都支持)的算法

http://www.open-open.com/lib/view/open1430902831226.html


112. 4億個url,找出其中重複的(考慮內存不夠,經過hash算法,將url分配到1000個文件中,不一樣的文件間確定就不會重複了,再分別找出重複的)

hash算法:   H(url)出一個整數後,取1000的餘數,分割到1000個文件中,餘數即爲文件名。

讀入每一個小文件,進內存HashMap(url,Counts)。

遍歷EntrySets,即Counts 〉1的url

hash算法原理詳解 :http://blog.csdn.net/tanggao1314/article/details/51457585


有1萬個數組,每一個數組有1000個整數,每一個數組都是降序的,從中找出最大的10個數。

每一個數組取出前10個,堆排序,或優先隊列。

 

113. LinkedHashmap的底層實現

LinkedHashMap實現與HashMap的不一樣之處在於,LinkedHashMap維護着一個運行於全部條目的雙向連接列表。此連接列表定義了迭代順序,該迭代順序能夠是插入順序或者是訪問順序。

對於LinkedHashMap而言,它繼承與HashMap、底層使用哈希表與雙向鏈表來保存全部元素。其基本操做與父類HashMap類似,它經過重寫父類相關的方法,來實現本身的連接列表特性。

Entry除了保存當前對象的引用外,還保存了其上一個元素before和下一個元素after的引用,從而在哈希表的基礎上又構成了雙向連接列表。

http://zhangshixi.iteye.com/blog/673789


114. 類序列化時類的版本號的用途,若是沒有指定一個版本號,系統是怎麼處理的?若是加了字段會怎麼樣?

若是沒有顯式聲明序列號,那麼在程序編譯時會本身生成這個版本序列號。

若是加了字段,更改了實體類的時候又會從新生成一個序列號。

運行程序,就會報錯:InvalidClassException

http://blog.sina.com.cn/s/blog_7f73e06d0100u52c.html


115. Override和Overload的區別,分別用在什麼場景

方法重載(overload),參數不一樣。

方法覆蓋(override),方法內容不一樣。用在子類

http://blog.csdn.net/zhouhong1026/article/details/8232350


116. java的反射是如何實現的

反射機制其實就是指程序在運行的時候可以獲取自身的信息。

若是知道一個類的名稱/或者它的一個實例對象, 就能把這個類的全部方法和變量的信息(方法名,變量名,方法,修飾符,類型,方法參數等等全部信息)找出來。

若是明確知道這個類裏的某個方法名+參數個數 類型,還能經過傳遞參數來運行那個類裏的那個方法,這就是反射。

儘管Java不是一種動態語言,但它卻有一個很是突出的動態機制:Reflection。它使咱們能夠於運行時加載、探知、使用編譯期間徹底未知的 classes。

換句話說,Java程序能夠加載一個運行時才得知名稱的class,獲悉其完整構造(但不包括methods定義),並生成其對象實體、 或對其fields設值、或喚起其methods。既一種「看透class」的能力。

http://www.tuicool.com/articles/zuIN7r

http://www.cnblogs.com/my376908915/p/6752707.html

http://blog.csdn.net/liujiahan629629/article/details/18013523

 

117.HashMap  HashTable的區別

http://www.importnew.com/7010.html

118.Map集合的四種遍歷方式

http://www.cnblogs.com/blest-future/p/4628871.html

119.HashMap如何實現

Hash算法-〉數組,

+ 處理衝突-〉鏈表法

120.多線程循環刪除List數組容器裏面元素,會ConcurrentModificationException

把List數組轉換成Iterator進行迭代刪除,一點問題都沒有:listA.iterator().remove(); Iterator進行循環操做,而後刪除,是很安全的。

121.線程間共享數據的方式

http://www.cnblogs.com/my376908915/p/6756895.html

122.Spring MVC頁面渲染的幾種方式

http://blog.csdn.net/suifeng3051/article/details/51648360

123.Ioc和AOP的理解和源碼

AOP基於什麼設計模式實現的?具體說下cglib代理和jdk代理的區別,他們是怎麼實現動態代理的,核心類和核心方法是什麼

http://www.cnblogs.com/my376908915/p/6782604.html

124.spring bean的幾種狀態

用的最多的仍是singleton單態,prototype原型多態。

125.spring的緩存優化是怎麼作的?如何清緩存,緩存哪裏用到了,用他作什麼?

http://blog.csdn.net/a494303877/article/details/53780597

http://blog.csdn.net/dlf123321/article/details/51382666

126.使用spring初始化須要加載的東西,

bean.dispatcherServlet,加載Html,spring的配置文件

127.若是redis緩存宕掉了怎麼辦

https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&context=%7B%22sourceFrom%22%3A%22bjh%22%2C%22nid%22%3A%22news_3562062748706618586%22%7D

128.java中異常機制

Throwable是Error和Exception的父類,
Error通常是指JVM拋出的錯誤,不須要捕獲,Exception是程序錯誤,須要捕獲處理;

129.有10億條文本,找出前一萬條重複率高的

先Hash算法分割到1000個文件中去;HashMap(文本,counts);堆排序。

BitMap算法:使用hash計算並存儲次數,而後遍歷一次找出top10;



130.對一千萬條數據排序,你認爲最好的方式是什麼
分塊查找,堆排序。
BitMap算法。是否有重複。申請長度爲一千萬位的位向量bit[10000000],全部位設置爲0,順序讀取待排序文件,每讀入一個數i,便將bit[i]置爲1。當全部數據讀入完成,便對bit作從頭至尾的遍歷,若是bit[i]=1,則輸出i到文件,當遍歷完成,重複的數據被輸出。
131.10w行數據,每行一個單詞,統計出現次數出現最多的前100個。
(1)可使用小根堆;
(2)在linux中實現: cat words.txt | sort | uniq -c | sort -k1,1nr | head -10
uniq -c:  顯示惟一的行,並在每行 行首 加上本行在文件中出現的次數
sort -k1,1nr:  按照第一個字段,數值排序,且爲逆序
132.一個文本文件,給你一個單詞,判斷單詞是否出現。
grep -wq "fail" 123.txt && echo "no"||echo "yes"
-w 精確匹配

http://www.2cto.com/os/201411/348541.html

 

其餘:

互聯網公司校招Java面試題總結及答案——京東

互聯網公司校招Java面試題總結及答案——百度(目前只是部分總結)

互聯網公司校招Java面試題總結及答案——美團

互聯網公司校招Java面試題總結及答案——CVTE

互聯網公司校招Java面試題總結及答案——樂視、滴滴、華爲

互聯網公司校招Java面試題總結及答案——招銀科技

互聯網公司校招Java面試題總結及答案——微店、去哪兒、蘑菇街

相關文章
相關標籤/搜索