業餘草分享2018最新面試題總結

時運不濟,纔到16年10月份,公司資金緊張,不得已又出去面試,面試了大概四家公司,只有一家offer ,被打擊的體無完膚。 多說無益,下面是面試中提到的面試題和個人我的解答html

1、Java底層基礎題

一、SpringMVC的原理以及返回數據如何渲染到jsp/html上?java

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

 

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

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

 

三、重寫equals爲什麼要重寫hashCode?redis

答:判斷兩個對象是否相等,比較的就是其hashCode, 若是你重載了equals,好比說是基於對象的內容實現的,而保留hashCode的實現不變,那麼極可能某兩個對象明明是「相等」,而hashCode卻不同。  hashcode不同,就沒法認定兩個對象相等了算法

 

四、談談你對JVM的理解?sql

答: Java語言的一個很是重要的特色就是與平臺的無關性。而使用Java虛擬機是實現這一特色的關鍵。Java編譯器只要面向JVM,生成JVM能理解的代碼或字節碼文件。Java源文件經編譯成字節碼程序,經過JVM將每一條指令翻譯成不一樣平臺機器碼,經過特定平臺運行。數據庫

JVM執行程序的過程 :I.加載。class文件   ,II.管理並分配內存  ,III.執行垃圾收集

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

 

具體詳情:JVM原理和調優

 

五、Mysql的事物隔離級別?

答:Mysql的事物隔離級別 其實跟 Spring的事物隔離級別同樣,都是一、Read Uncommitted(讀取未提交內容), 二、Read Committed(讀取提交內容),三、Repeatable Read(可重讀),四、Serializable(可串行化)    具體參照:mysql事物隔離級別

 

六、Spring的原理

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

七、談談你對NIO的理解

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

 

八、ArrayList和LinkedList、Vector的區別?

答:總得來講能夠理解爲:.

     1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。 
     2.對於隨機訪問get和set,ArrayList以爲優於LinkedList,由於LinkedList要移動指針。 
     3.對於新增和刪除操做add和remove,LinedList比較佔優點,由於ArrayList要移動數據

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

 

九、隨便說說幾個單例模式,並選擇一種線程安全的

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

 

十、談談紅黑樹

答:算法和數據結構一直是我薄弱之處,這方面說本身補吧,成效不大,這裏我就推薦一個:紅黑樹

 

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

答:這裏我就不細說了,你們本身看看 Java實現幾種常見的排序算法

 

十二、Mysql索引的原理

答:索引的做用你們都知道,就是加快查詢速度,可是原理,我說不上來,這裏直接看吧:Mysql索引工做原理

 

1三、序列化的原理和做用

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

2、併發及項目調優

一、說說線程安全的幾種實現方式?

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

二、方法內部,如何實現更好的異步?

答:咱們知道異步其實就是讓另外一個線程去跑,那麼如何建立線程?  第一種直接new Thread ,第二種new 一個實現Runnable接口的實現類。 第三種,經過線程池來管理建立等 ,這裏說到更好的實現異步,那就是說咱們在方法內部避免頻繁的new 線程,就能夠考慮線程池了。 那麼線程池如何建立? 這裏能夠new 一個線程池,可是須要考慮單例,或者在程序初始啓東時,就建立一個線程池,讓他跑着,而後在具體方法的時候,經過線程池來建立線程,實現異步

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

 

三、項目中爲什麼要用緩存?如何理解nginx + tomcat + redis 集羣緩存?
答1:最直接的表現就是減輕數據庫的壓力。避免由於數據讀取頻繁或過大而影響數據庫性能,下降程序宕機的可能性
答2:nginx經常使用作靜態內容服務和代理服務器,直面外來請求轉發給後面的應用服務。nginx自己也能作緩存,好比靜態頁面的緩存什麼的。而tomcat是應用服務器,處理JAVA WEB程序功能等等 。你也能夠這麼理解,假設把用戶的請求當作是一條河流,那麼nginx就至關於一個水利工程,tomcat至關於一條條分流的支流,而redis 至關於支流旁邊的一個個水庫。 當你洪水來了,nginx根據你每條支流的承受力度分發不一樣的水流量,在確保程序正常運行的狀況下,分發給每條支流(tomcat)不一樣的水流量。而redis至關於一個個支流的水庫,存儲水源,下降壓力,讓後面的水量平穩。
個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

四、平常項目中,若是你接手,你準備從哪些方面調優?
答:這個呢首先是瞭解哪些須要優化,須要優化確定是項目性能遭遇瓶頸或者猜想即將遭遇了,咱們纔會去考慮優化。那麼怎麼優化?
a、擴容 ,擴容的理解,就是擴充服務器並行處理的能力,簡單來講就是加服務器,增長處理請求的能力,例如增長nginx 、tomcat等應用服務器的個數,或者物理服務器的個數,還有加大服務器帶寬等等,這裏考慮的是硬件方面
b、調優 ,調優,包括系統調優和代碼調優 。 系統調優就是說加快處理速度,好比咱們所提到的CDN、ehcache、redis等緩存技術,消息隊列等等,加快服務間的響應速度,增長系統吞吐量,避免併發,至於代碼調優,這些就須要多積累了,好比重構、工廠等, 數據庫調優的話這個我不是很懂,只知道索引和存儲過程,具體參考:Mysql數據庫調優21個最佳實踐  ,其餘數據庫調優方面就各位本身找找吧

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

五、談談你對分佈式的理解

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

六、Redis實現消息隊列

答:Redis實現消息隊列     、參考2

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

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

 

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

以前的面試總結:面試題總結——JAVA高級工程師

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

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

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

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

二、假設有一個數組 A ,int[] A = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 ...  N};   原來是須要查出大於0的數組,可是因爲傳參錯誤或者其餘緣由,致使查出0和負數了,如今要求在不使用新數組和新集合的狀況下(即只使用這個A數組,因數組數據比較大,且只能用一次循環) 實現正數放到數組的前面,小於等於0的數放到數組的末尾(答案可在評論裏回覆)

 個人博客:CODE大全www.codedq.net業餘草www.xttblog.com愛分享www.ndislwf.comifxvn.com

總結:

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

        另外,面試過程當中,保持自信,不會的咱大膽的說不會,沒啥好丟臉的,不會不是說你真的不會,也許是忘了,也許是沒注意到,記住面試題目,回來本身補充資料和相關的信息,相信你確定會愈來愈從容,要記住不是爲了面試而面試,而是爲了將來的工做而面試,若是能一直保持這個狀態,沒有什麼事情拿不下的。

        拿我本身來講,不少不會,關鍵在於你願不肯意去學,願不肯意去付諸行動。加油吧,但願各位看官都能找到心儀的工做

若有疑問,歡迎關注微信公衆號「業餘草」!

相關文章
相關標籤/搜索