面試總結——Java進階工程師(二)

來源:互聯網
上載者:User

標籤:順序   ash   速度   view   ble   move   進階   項目   有一個   

一、Java底層基礎題

1、SpringMVC的原理以及返回資料如何渲染到jsp/html上?

答:Spring MVC的核心就是 DispatcherServlet , 一個請求經過 DispatcherServlet ,轉寄給HandlerMapping ,然後經反射,對應 Controller及其裡面方法的@RequestMapping地址,最後經ModelAndView和ViewResoler返回給對應視圖  。  具體可參考:Spring MVC的工作原理

 

2、一個類對象屬性發生改變時,如何讓調用者知道?

答:Java event時間監聽  ,即在set方法改變屬性時,觸發 ,這種模式也可以理解為觀察者模式,具體查看:觀察者模式簡單案例和說明

 

3、重寫equals為何要重寫hashCode?

答:判斷兩個對象是否相等,比較的就是其hashCode, 如果你重載了equals,比如說是基於對象的內容實現的,而保留hashCode的實現不變,那麼很可能某兩個對象明明是“相等”,而hashCode卻不一樣。  hashcode不一樣,就無法認定兩個對象相等了

 

4、談談你對JVM的理解?

答: Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機器是實現這一特點的關鍵。Java編譯器只要面向JVM,產生JVM能理解的代碼或位元組碼檔案。Java源檔案經編譯成位元組碼程式,通過JVM將每一條指令翻譯成不同平台機器碼,通過特定平台運行。

JVM執行程式的過程 :I.載入。class檔案   ,II.管理並分配記憶體  ,III.執行垃圾收集

JRE(java運行時環境)由JVM構造的java程式的運行環境 

 

具體詳情:JVM原理和調優

 

5、Mysql的事物隔離等級?

答:Mysql的事物隔離等級 其實跟 Spring的事物隔離等級一樣,都是1、Read Uncommitted(讀取未提交內容), 2、Read Committed(讀取提交內容),3、Repeatable Read(可重讀),4、Serializable(可序列化)    具體參照:mysql事物隔離等級

 

6、Spring的原理

答:Spring的核心是IOC和AOP  ,IOC是依賴注入和控制反轉, 其注入方式可分為set注入、構造器注入、介面注入等等。IOC就是一個容器,負責執行個體化、定位、配置應用程式中的對象及建立這些對象間的依賴。簡單理解就是:JAVA每個商務邏輯處理至少需要兩個或者以上的對象協作進行工作,但是每個對象在使用它的合作對象的時候,都需要頻繁的new 對象來實現,你就會發現,對象間的耦合度高了。而IOC的思想是:Spring容器來管理這些,對象只需要處理本身業務關係就好了。至於什麼是控制反轉,就是獲得依賴對象的方式反轉了。
AOP呢,面向切面編程,最直接的體現就是Spring事物管理。至於Spring事物的相關資料,就不細說了,參考:Spring註解式事物管理

 

7、談談你對NIO的理解

答:IO是面向流,NIO是面向緩衝 ,這裡不細講了,具體參照:Java NIO和IO的區別

 

8、ArrayList和LinkedList、Vector的區別?

答:總得來說可以理解為:.

     1.ArrayList是實現了基於動態數組的資料結構,LinkedList基於鏈表的資料結構。 
     2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。 
     3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料

Vector和ArrayList類似,但屬於強同步類,即安全執行緒的,具體比較參照:比較ArrayList、LinkedList、Vector

 

9、隨便說說幾個單例模式,並選擇一種安全執行緒的

答:單例的類別:懶漢、餓漢、枚舉、靜態內部類、雙重校正鎖 等等 , 選擇安全執行緒我選最後一種,雙重校正鎖。  具體實現方式參照:Java:單例模式的七種寫法

 

10、談談紅/黑樹狀結構

答:演算法和資料結構一直是我薄弱之處,這方面說自己補吧,成效不大,這裡我就推薦一個:紅/黑樹狀結構

 

11、舉例說說幾個排序,並說明其排序原理

答:這裡我就不細說了,大家自己看看 Java實現幾種常見的排序演算法

 

12、Mysql索引的原理

答:索引的作用大家都知道,就是加快查詢速度,但是原理,我說不上來,這裡直接看吧:Mysql索引工作原理

 

13、序列化的原理和作用

答:Serialization(序列化)是一種將對象以一連串的位元組描述的過程;還原序列化deserialization是一種將這些位元組重建成一個對象的過程,主要用於HTTP或者WebService介面傳輸過程中對象參數的傳播,具體可參看:Java序列化機制和原理

 

二、並發及項目調優

1、說說安全執行緒的幾種實現方式?

答:什麼是安全執行緒? 我的理解是這樣的,一個對象被多個線程同時訪問,還能保持其內部屬性的順序性及同步性,則認定為安全執行緒。實現安全執行緒的三種方式:被volatile、synchronized等關鍵字修飾,或者使用java.util.concurrent下面的類庫。  至於前兩者的關係,參考:synchronized和volatile的用法區別

 

2、方法內部,如何?更好的非同步?

答:我們知道非同步其實就是讓另一個線程去跑,那麼如何建立線程?  第一種直接new Thread ,第二種new 一個實現Runnable介面的實作類別。 第三種,通過線程池來管理建立等 ,這裡說到更好的實現非同步,那就是說我們在方法內部避免頻繁的new 線程,就可以考慮線程池了。 那麼線程池如何建立? 這裡可以new 一個線程池,但是需要考慮單例,或者在程式初始啟東時,就建立一個線程池,讓他跑著,然後在具體方法的時候,通過線程池來建立線程,實現非同步

 

 

3、項目中為何要用緩衝?如何理解nginx + tomcat + redis 叢集緩衝?
答1:最直接的表現就是減輕資料庫的壓力。避免因為資料讀取頻繁或過大而影響資料庫效能,降低程式宕機的可能性
答2:nginx常用做靜態內容服務和Proxy 伺服器,直面外來請求轉寄給後面的應用服務。nginx本身也能做緩衝,比如靜態頁面的緩衝什麼的。而tomcat是應用伺服器,處理JAVA WEB程式功能等等 。你也可以這麼理解,假設把使用者的請求當做是一條河流,那麼nginx就相當於一個水利工程,tomcat相當於一條條分流的支流,而redis 相當於支流旁邊的一個個水庫。 當你洪水來了,nginx根據你每條支流的承受力度分發不同的水流量,在確保程式正常啟動並執行情況下,分發給每條支流(tomcat)不同的水流量。而redis相當於一個個支流的水庫,儲存水源,降低壓力,讓後面的水量平穩。


4、日常項目中,如果你接手,你準備從哪些方面調優?
答:這個呢首先是瞭解哪些需要最佳化,需要最佳化肯定是項目效能遭遇瓶頸或者猜測即將遭遇了,我們才會去考慮最佳化。那麼怎麼最佳化?
a、擴容 ,擴容的理解,就是擴充伺服器平行處理的能力,簡單來說就是加伺服器,增加處理請求的能力,例如增加nginx 、tomcat等應用伺服器的個數,或者物理伺服器的個數,還有加大伺服器頻寬等等,這裡考慮的是硬體方面
b、調優 ,調優,包括系統調優和代碼調優 。 系統調優就是說加快處理速度,比如我們所提到的CDN、ehcache、redis等緩衝技術,訊息佇列等等,加快服務間的響應速度,增加系統輸送量,避免並發,至於代碼調優,這些就需要多積累了,比如重構、工廠等, 資料庫調優的話這個我不是很懂,只知道索引和預存程序,具體參考:Mysql資料庫調優21個最佳實務  ,其他資料庫調優方面就各位自己找找吧

 

5、談談你對分布式的理解

答:個人理解:分布式就是把一個系統/業務 拆分成多個子系統/子業務 去協同處理,這個過程就叫分布式,具體的演變方式參考:Java分布式應用技術架構介紹

 

6、Redis實現訊息佇列

答:Redis實現訊息佇列     、參考2

 

7、另總結多線程相關面試題50道

 

8、分享一個調優工具和方案:如何利用 JConsole觀察分析Java程式的運行,進行排錯調優

 

之前的面試總結:面試題總結——JAVA進階工程師

之前的技術問答:技術問答 也提到了一些面試的經驗和知識點

 

三、手寫代碼題(包含sql題)

1、假設商戶表A(id , city )  ,交易流水表B (aid, amount , time)   這裡的time代表交易時間,  請用sql寫出查詢每個城市每個月的銷售業績(答案可在評論裡回複)

 

2、假設有一個數組 A ,int[] A = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 ...  N};   原來是需要查出大於0的數組,但是由於傳參錯誤或者其他原因,導致查出0和負數了,現在要求在不使用新數組和新集合的情況下(即只使用這個A數組,因數組資料比較大,且只能用一次迴圈) 實現正數放到數組的前面,小於等於0的數放到數組的末尾(答案可在評論裡回複)

 

總結:

        暫時就先總結這些,後續再補充吧,面試題千變萬化,不變的是知識點和技術根本。基礎很重要,故不積跬步,無以至千裡;不積小流,無以成江海。學好基礎,把握好技術的原理,然後去實踐,這樣才能深入瞭解一門技術,學不可以已!

        另外,面試過程中,保持自信,不會的咱大膽的說不會,沒啥好丟臉的,不會不是說你真的不會,也許是忘了,也許是沒注意到,記住面試題目,回來自己補充資料和相關的資訊,相信你肯定會越來越從容,要記住不是為了面試而面試,而是為了未來的工作而面試,如果能一直保持這個狀態,沒有什麼事情拿不下的。

        拿我自己來說,很多不會,關鍵在於你願不願意去學,願不願意去付諸行動。加油吧,希望各位看官都能找到心儀的工作

面試總結——Java進階工程師(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.