三年java經驗面試總結

【點擊領取】阿里雲代金券 | 阿里雲優惠券 |阿里雲優惠碼|雲服務器|阿里雲|阿里雲代金券 – 限時領取1888元阿里雲代金券
css

【3折購買ECS服務器入口】html

【9塊9雲服務 學生計劃】https://promotion.aliyun.com/ntms/act/campus2018.html?userCode=g6nivc1vjava



1. java中wait和sleep有什麼區別?多線程條件下如何保證數據安全? jquery

答:最大區別是等待時wait會釋放鎖,而sleep會一直持有鎖,wait一般用於線程時交,互,sleep一般被用於暫停執行。 
linux

2. java中volatile和synchronized有什麼區別? 

  1. volatile本質是在告訴jvm當前變量在寄存器(工做內存)中的值是不肯定的,須要從主存中讀取;synchronized則是鎖定當前變量,只有當前線程能夠訪問該變量,其餘線程被阻塞住。 
  2. volatile僅能使用在變量級別;synchronized則可使用在變量、方法、和類級別的。 
  3. volatile僅能實現變量的修改可見性,並不能保證原子性;而synchronized則能夠保證變量的修改可見性和原子性。 
  4. volatile不會形成線程的阻塞;synchronized可能會形成線程的阻塞。 
  5. volatile標記的變量不會被編譯器優化;synchronized標記的變量能夠被編譯器優化。 

3. 有了解java的原子類?實現原理是什麼? 

答:採用硬件提供原子操做指令實現的,即CAS。每次調用都會先判斷預期的值是否符合,才進行寫操做,保證數據安全。 web

4. spring主要使用了哪些?IOC實現原理是什麼?AOP實現原理是什麼? 

答:spring主要功能有IOC,AOP,MVC等,IOC實現原理:先反射生成實例,而後調用時主動注入。AOP原理:主要使用java動態代理, redis

5. mybatis有了解嗎?它與hibernate有什麼區別?項目中,你會選哪一個? 

答:二者都是輕量級ORM框架,hibernate實現功能比較多,經過HQL操做數據庫,比較簡單方便,但hibernate自動生成的sql相長,不利測試和查找緣由。複雜sql時,編寫比較困難,同時性能也會下降。mybatis是半自動化,手動編寫SQL語句,同時提供豐富的參數判斷功能。sql語句較清晰,能夠直接進行測試,性能也較好,操做起來很是簡單。同時hibernate容易產生n+1問題。hibernate學習成本較mybatis高。國內一些大公司基本上使用mybatis 算法

6. 緩存框架有使用過哪些?memcache和redis有什麼區別?項目中,怎麼去選擇? 

答:緩存有:ehcache,memcache和redis等 spring

區別: sql

  1. Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過 memcache還可用於緩存其餘東西,例如圖片、視頻等等。 
  2. Redis不只僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的 存儲。 
  3. 虛擬內存--Redis當物理內存用完時,能夠將一些好久沒用到的value 交換到磁盤 
  4. 過時策略--memcache在set時就指定,例如set key1 0 0 8,即永不過時。Redis能夠通 過例如expire 設定,例如expire name 10 
  5. 分佈式--設定memcache集羣,利用magent作一主多從;redis能夠作一主多從。都 能夠一主一從 
  6. 存儲數據安全--memcache掛掉後,數據沒了;redis能夠按期保存到磁盤(持久化) 
  7. 災難恢復--memcache掛掉後,數據不可恢復; redis數據丟失後能夠經過aof恢復 
  8. Redis支持數據的備份,即master-slave模式的數據備份。 

項目使用選擇: 

      redis是單線程實現,若須要使用控制某些併發狀態時,可使用redis.項目中須要使用 複雜的list,set操做時,同時能夠對數據進行持久化。 

      當存儲數據較大時,如100k以上,那memcache性能較好,在多核上,memcache較 好 

7. 說說數據庫性能優化有哪些方法? 

答:使用explain進行優化,查看sql是否充分使用索引。避免使用in,用exist替代,字段值儘量使用更小的值,任何對列的操做都將致使表掃描,它包括數據庫函數、計算表達式等等,查詢時要儘量將操做移至等號右邊。使用鏈接查詢(join)代替子查詢。  

在表的多列字段上創建一個索引,但只有在查詢這些字段的第一個字段時,索引纔會被使用。

8. HTTP請求方法get和post有什麼區別? 

  1. Post傳輸數據時,不須要在URL中顯示出來,而Get方法要在URL中顯示。 
  2. Post傳輸的數據量大,能夠達到2M,而Get方法因爲受到URL長度限制,只能 傳遞大約1024字節. 
  3. Post就是爲了將數據傳送到服務器段,Get就是爲了從服務器段取得數據.而Get 之因此也能傳送數據,只是用來設計告訴服務器,你到底須要什麼樣的數據.Post 的信息做爲http請求的內容,而Get是在Http頭部傳輸的。 

9. linux命令熟悉?查看某個線程命令是什麼?查看整個機器負載命令?文件內容快速查找命令是什麼? 

 查看線程:ps -ef|greptomcat 

 查看負載:top 

 文件內容查找:vi /aa test.txt 或者先打開文件,再查找: vi test.txt /aa 

10. JVM內存模型是如何?垃圾回收機制有哪些?如何對JVM進行調優? 

答:由棧和堆組成,棧是運行時單位,堆內存則分爲年輕代、年老代、持久代等,年輕代中的對象通過幾回的回收,仍然存在則被移到年老代;持久代主要是保存class,method,filed等對象。 

 sun回收機制:主要對年輕代和年老代中的存活對象進行回收,分爲如下:  

年輕代串行(Serial Copying)、年輕代並行(ParNew)、年老代串行(SerialMSC),年老代並行(Parallel Mark Sweep),年老代併發(Concurrent Mark-Sweep GC,即CMS)等等,目前CMS回收算法使用最普遍。 

JVM調優主要是對堆內容和回收算法進行配置,須要對jdk產生的回收日誌進行觀察,同時經過工具(Jconsole,jProfile,VisualVM)對堆內存不斷分析,這些優化是一個過程,須要不斷地進行觀察和維護。 

11. 如銀行內部轉帳功能,如何保證數據一致性,即要麼同時成功,要麼同時失敗?高併發時,又如何保證性能和數據正確? 

答:若是是單機內完成這些操做,那使用數據庫的事務,便可輕鬆實現。如果分佈式呢?  

12. 有了解分佈式事務如何實現? 

答:分佈式事務能夠採用分佈式鎖進行實現,目前zookeeper就提供此鎖;分佈式鎖須要犧牲必定性能去實現,若業務支付最終一致性,那此方法是最佳方案。如在京東下訂單,過一會纔會告訴你訂單審覈經過,而不是立刻響應訂單結果。 

13. java抽象類和接口有什麼區別?項目中怎麼去使用它們? 

相同點: 

 A. 二者都是抽象類,都不能實例化。 

 B. interface實現類及abstractclass的子類都必需要實現已經聲明的抽象方法。 

不一樣點: 

 A. interface須要實現,要用implements,而abstractclass須要繼承,要用extends。 

 B. 一個類能夠實現多個interface,但一個類只能繼承一個abstractclass。 

 C. interface強調特定功能的實現,而abstractclass強調所屬關係。 

 D. 儘管interface實現類及abstrctclass的子類都必需要實現相應的抽象方法,但實現的 形式不一樣。interface中的每個方法都是抽象方法,都只是聲明的 (declaration, 沒有方 法體),實現類必需要實現。而abstractclass的子類能夠有選擇地實現。 

使用: 

abstract:在既須要統一的接口,又須要實例變量或缺省的方法的狀況下,使用abstract; 

interface:使用: 類與類以前須要特定的接口進行協調,而不在意其如何實現。 做爲能 夠實現特定功能的標識存在,也能夠是什麼接口方法都沒有的純粹標識。須要將一組類 視爲單一的類,而調用者只經過接口來與這組類發生聯繫。須要實現特定的多項功能, 而這些功能之間可能徹底沒有任何聯繫。 

14. 對socket熟悉?TCP通信有幾回握手?有使用過哪些socket框架? 

 答:3次握手,客戶端-->服務端,服務端-->客戶端,客戶端-->服務端,當這些過程完成以後,才真正創建起通訊。java中比較有名的socket框架有:mina,netty,都是韓國小棒子寫的。

15. 瞭解java反射機制?反射生成類,能訪問私有變量? 

 答:即動態生成java的實例,能夠 

16. RPC是什麼?有使用過哪些RPC框架? 

 答:即遠程進程調用,本地機器調用遠程的服務,在項目規模大到必定程度,須要使用RPC相關框架進行服務化部署。如:hessian 、webservice等 

17. 熟悉js或css?jquery如何綁定頁面某元素的點擊事件? 

 答:

$("#btn").click(function(){ 

 }) 

相關文章
相關標籤/搜索