更新時間:2020-03-18 10:26:13 來源:動力節點 瀏覽3594次
1、JVM結構原理、GC工作機制詳情
答:具體參照:JVM結構、GC工作機制詳解,說到GC,記住兩點:1、GC是負責回收所有無任何引用對象的內存空間。注意:垃圾回收回收的是無任何引用的對象占據的內存空間而不是對象本身,2、GC回收機制的兩種算法,a、引用計數法b、可達性分析算法(這里的可達性,大家可以看基礎2Java對象的什么周期),至于更詳細的GC算法介紹,大家可以參考:JavaGC機制算法。
2、Java對象的生命周期
答:創建階段、應用階段、不可見階段、不可達階段、收集階段、終結階段、對象空間重新分配階段等等,具體參照:Java對象的生命周期。
3、Map或者HashMap的儲存原理
答:HashMap是由數組+鏈表的一個結構組成,具體參照:HashMap的實現原理。
4、當數據表中A、B字段做了組合索引,那么單獨使用A或單獨使用B會有索引效果嗎?(使用like查詢如何有索引效果)
答:看A、B兩字段做組合索引的時候,誰在前面,誰在后面,如果A在前,那么單獨使用A會有索引效果,單獨使用B則沒有,反之亦然。同理,使用like模糊查詢時,如果只是使用前面%,那么有索引效果,如果使用雙%號匹配,那么則無索引效果。
5、數據庫存儲日期格式時,如何考慮時區轉換問題?
答:使用TimeStamp,原因參照:Java編程中遇到的時區轉換問題。
6、JavaObject類中有哪些方法?
答:Object有哪些方法。
7、HTTP協議,GET和POST的區別
答:淺談HTTP中GET和POST的區別。
線程、設計模式、緩存方面
1、SimpleDataFormat是非線程安全的,如何更好的使用而避免風險呢?
答:關于SimpleDateFormat安全的時間格式化線程安全問題。
2、如何看待設計模式,并簡單說說你對觀察者模式的理解
答:1、設計模式有神馬用2、觀察者模式類圖及實現。
3、集群環境中,session如何實現共享
答:1、Java集群之session共享2、session多服務器共享方案,還有一種方案就是使用一個固定的服務器專門保持session,其他服務器共享。
4、分布式、集群環境中,緩存如何刷新,如何保持同步?
答:A、緩存如何刷新?1、定時刷新2、主動刷新覆蓋,每個緩存框架都有自帶的刷新機制,或者說緩存失效機制,就拿Redis和Ehcache舉例,他們都有自帶的過期機制,另外主動刷新覆蓋時,只需獲取對應的key進行數據的覆蓋即可。
B、緩存如何保持同步?這個redis有自帶的集群同步機制,即復制功能,具體參考:基于Redis分布式緩存實現,Ehcache也有分布式緩存同步的配置,只需要配置不同服務器地址即可,參照:Ehcache分布式緩存同步。
5、一條sql執行過長的時間,你如何優化,從哪些方面?
答:1、查看sql是否涉及多表的聯表或者子查詢,如果有,看是否能進行業務拆分,相關字段冗余或者合并成臨時表(業務和算法的優化);
2、涉及鏈表的查詢,是否能進行分表查詢,單表查詢之后的結果進行字段整合;
3、如果以上兩種都不能操作,非要鏈表查詢,那么考慮對相對應的查詢條件做索引。加快查詢速度;
4、針對數量大的表進行歷史表分離(如交易流水表);
5、數據庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至于主從同步,MySQL有自帶的binlog實現主從同步;
6、explain分析sql語句,查看執行計劃,分析索引是否用上,分析掃描行數等等;
7、查看mysql執行日志,看看是否有其他方面的問題;
個人理解:從根本上來說,查詢慢是占用mysql內存比較多,那么可以從這方面去酌手考慮。
設計方案相關
面試還會問到一些關于設計方案相關的問題,比如:
1、你的接口服務數據被人截包了,你如何防止數據惡意提交?
答:我們可以在接口傳輸參數里面設置一個業務編號,這個編號用來區分是否重復提交。這樣即使數據被抓包了,對方也無法區分每個字段你的含義,這時,這個業務編號的作用就來了。
2、假設服務器經常宕機,你從哪些方面去排查問題?
答:這個就留個各位看官補充了。
總而言之該看的還是得看,還學的還是得學。再次強調,基礎很重要!面試技巧同樣很重要,還是那句話:祝愿各位看官都能找到心儀的工作吧~~
另外,奉勸大家不要頻繁跳槽,這些知識點能提升固然好,不要盲目跳槽,找工作很累的,而且沒有哪家公司喜歡頻繁跳槽的員工。
Java程序猿跳槽應該學哪些方面的技術
互聯網產品、大型企業級項目常會用到的:
1.并發處理技術。具體到Java上通常是涉及java.util.concurrent、并發鎖機制、NIO等方面,當然最近比較火爆的Netty框架也可以作為高并發處理的備選方案之一,這需要對Java的線程調度機制有著比較深的理解。不過這些可能會涉及并發控制的對象(比如reentrantlock等)只能存在于一個JVM里的問題,一旦系統規模大到需要部署多個JVM來處理并發的情況,則需要采用共享session的技術(比如spring-session),或者盡可能將系統后臺設計為無狀態的服務,這需要對RESTful有著較深的理解。
2.高可用、負載均衡技術?;ヂ摼W產品、企業級應用通常要求一年里的Downtime控制在很小的范圍內,這需要足夠的高可用和負載均衡架構來支撐,這個一般和Java技術本身沒太大關系,但卻是一名初級程序員向高級程序員甚至是架構師CIO進階的必備技術,因此可以適當了解一下Nginx、HAProxy等對這方面的支持。另外現在最“時髦”的做法是將應用docker化,配合ETCD、kubernetes等工具在容器的層面上實現高可用和負載均衡,當然這需要看實際的需求,最時髦的不見得是最適用的,要考慮構建成本。
3.緩存技術。緩存應該是大型系統中或高并發條件下提高響應速度的亙古不變的真理(雖然也看到過淘寶搜索商品功能采用的大數據處理技術實現的零緩存的文章,但能達到淘寶的體量和技術水平一般不太可能),這方面的工具太多了,ehcache、memcached、redis……從Java的角度來講,需要了解的一是Java對這些工具的連接器,二是緩存技術背后的JSR-107標準,可以參考spring-cache的實現,閱讀一下源碼加深理解。
4.異步處理技術。這通常也是抵消高并發的處理手段之一,從Java的角度看最簡單的異步處理就是新啟動一個異步線程,這同樣也需要對Java的線程調度有所了解,當然也可使用Spring中的@Async之類的也可以簡單實現異步線程的處理。如果是非常消耗資源的業務處理,簡單的異步線程是滿足不了需求的,這就需要一些消息中間件來做這些異步處理了,消息中間件有很多,activemq、rabbitmq、kafka……需要了解的是Java對這些中間件的連接器。不過異步處理中最關鍵的是事務保證的問題,這可能需要對事務的兩步提交有所了解。
以上就是動力節點Java培訓機構小編介紹的“最新阿里高級Java面試題總結”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習