java面試題整理(2)

一、註冊中心你瞭解了哪些?
答:Consul 、Eureka、ZooKeeper

二、JDK 中有哪幾個線程池?
答:JUC提供了調度器對象Executors來創建線程池,可創建的線程池有四種
1、newFixedThreadPool創建一個指定工作線程數量的線程池。每當提交一個任務就創建一個工作線程,如果工作線程數量達到線程池初始的最大數,則將提交的任務存入到池隊列中。
2、newCachedThreadPool創建一個可緩存的線程池。這種類型的線程池特點是:
1).工作線程的創建數量幾乎沒有限制(其實也有限制的,數目爲Interger. MAX_VALUE), 這樣可靈活的往線程池中添加線程。
2).如果長時間沒有往線程池中提交任務,即如果工作線程空閒了指定的時間(默認爲1分鐘),則該工作線程將自動終止。終止後,如果你又提交了新的任務,則線程池重新創建一個工作線程。
3、newSingleThreadExecutor創建一個單線程化的Executor,即只創建唯一的工作者線程來執行任務,如果這個線程異常結束,會有另一個取代它,保證順序執行(我覺得這點是它的特色)。單工作線程最大的特點是可保證順序地執行各個任務,並且在任意給定的時間不會有多個線程是活動的。
4、newScheduleThreadPool創建一個定長的線程池,而且支持定時的以及週期性的任務執行,類似於Timer。

三、Object 的 hashcode 方法重寫了,equals 方法要不要改?
答:不需要,Ojbect類中有兩個方法equals、hashCode,這兩個方法都是用來比較兩個對象是否相等的,如果兩個對象相等(equal),那麼必須擁有相同 的哈希碼(hash code)。
即使兩個對象有相同的哈希值(hash code),他們不一定相等
重寫equals()方法就必須重寫hashCode(),但重寫hashcode方法不一定要重寫equals方法

四、SQL 優化的常見方法有哪些
答:查詢條件減少使用函數,避免全表掃描
減少不必要的表連接
有些數據操作的業務邏輯可以放到應用層進行實現
可以使用with as
儘量避免使用遊標,因爲遊標的效率較差
不要把SQL語句寫得太複雜
不能循環執行查詢
用 exists 代替 in
表關聯關係不要太糾結
查詢多用索引列去查,用char index或者like[0-9]來代替%%
inner關聯的表可以先查出來,再去關聯left join的表
可以進行表關聯數據拆分,即先查出核心數據,再通過核心數據查其他數據,這樣會快得多
參考SQL執行順序進行優化
表關聯時取別名,也能提高效率
使用視圖,給視圖建立索引進行優化
使用數據倉庫的形式,建立單獨的表存儲數據,根據時間戳定期更新數據。將多表關聯的數據集中抽取存入一張表中,查詢時單表查詢,提高了查詢效率
對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引
應儘量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
可以在num上設置默認值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
應儘量避免在 where 子句中使用!=或<>操作符,否則引擎將放棄使用索引而進行全表掃描

五、項目中的監控:監控指標常見的有哪些?
答:CPU、內存、IO 等等。建議下載個nmon工具,裏面有各個指標。
數據庫:Mysql(緩存命中、索引、單條SQL性能、數據庫線程數、數據池連接數)
中間件:1.消息2、負載均衡3、緩存(包括線程數、連接數、日誌)。
網絡: 吞吐量、吞吐率
應用: jvm內存、日誌、Full GC頻率

六、Spring Boot除了自動配置,相比傳統的 Spring 有什麼其他的區別?
答:爲Spring 生態系統的開發提供一種更簡潔的方式,提供了很多非功能性特性,例如:嵌入式 Server,Security,統計,健康檢查,外部配置等等,主要體現在以下幾點:
1.Spring Boot可以建立獨立的Spring應用程序;
2.內嵌瞭如Tomcat,Jetty和Undertow這樣的容器,也就是說可以直接跑起來,用不着再做部署工作了;
3.無需再像Spring那樣搞一堆繁瑣的xml文件的配置;
4.可以自動配置Spring。SpringBoot將原有的XML配置改爲Java配置,將bean注入改爲使用註解注入的方式(@Autowire),並將多個xml、properties配置濃縮在一個appliaction.yml配置文件中。
5.提供了一些現有的功能,如量度工具,表單數據驗證以及一些外部配置這樣的一些第三方功能;
6.整合常用依賴(開發庫,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM可以簡化Maven的配置。當我們引入核心依賴時,SpringBoot會自引入其他依賴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章