小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

這里有一份面經(jīng),請查收(1)

 勇敢走不回頭 2016-08-06


來源: 伯樂在線專欄作者 - 朱小廝 

鏈接:http://blog./103105/

點(diǎn)擊 → 了解如何加入專欄作者


博主畢業(yè)快滿三年了,由于種種原因想換一份工作。學(xué)了 7 年計(jì)算機(jī)技術(shù),在目前的行業(yè)用到的技術(shù)不多,還是想去尋找一份互聯(lián)網(wǎng)行業(yè)的工作,這樣更能學(xué)以致用發(fā)揮自己的特長。從上次更新博客到現(xiàn)在已經(jīng)三周左右了,這三周博客基本斷更了,現(xiàn)在找工作也基本收尾了,來聊一聊我所遇到的一些面試經(jīng)歷,希望給各位尋求新機(jī)會的小伙伴一個(gè)參考??偣裁嫱?8 家收了 7 個(gè) offer,應(yīng)該算是比較成功的吧。博文中主要還是聊一下技術(shù)相關(guān)的,博文中所涉及的公司均以代號標(biāo)志,不便透露細(xì)節(jié)。


第一家面試的公司是一家互聯(lián)網(wǎng)創(chuàng)業(yè)公司,這里簡稱 D,博主對這家公司的印象還是不錯(cuò)的,共面試了 5 輪,筆試一輪,技術(shù)面 3 輪,最后一輪是 HR 面。雖然公司總共員工只有小幾百人,但是做事比較專業(yè),很多大型的成熟公司也未必做得更好。


首先說說筆試,很多一些小的公司,就是從網(wǎng)上題庫中拉點(diǎn)選擇題讓你做做,之后的面試和筆試題無關(guān),這里我遇到的筆試題是和第一輪技術(shù)面相關(guān)的,有點(diǎn)小套路。


筆試題


據(jù)博主的回憶,共有這么些題(都是簡答題):


1. 寫出 java 中 synchronized 的使用方式。

可以參考:Java 多線程知識小抄集 (一)


2. Java 中設(shè)置最大堆和最小堆內(nèi)存的參數(shù)是什么?

-Xmx -Xms


3. volatile 的作用?

兩點(diǎn):內(nèi)存可見性;防止指令重排序;


4. 寫一個(gè)二分查找算法


5. 寫一個(gè)你熟悉的設(shè)計(jì)模式,畫出 UML 圖,說出此模式的作用以及寫出此模式的主要方法。


6. 一道設(shè)計(jì)題。(略)


7. BeanFactory 和 ApplicationContext 的區(qū)別。(Sping 的容器可以分為兩種類型 :1. BeanFactory:(org.springframework.beans.factory.BeanFactory 接口定義)是最簡答的容器,提供了基本的 DI 支持。最常用的 BeanFactory 實(shí)現(xiàn)就是 XmlBeanFactory 類,它根據(jù) XML 文件中的定義加載 beans,該容器從 XML 文件讀取配置元數(shù)據(jù)并用它去創(chuàng)建一個(gè)完全配置的系統(tǒng)或應(yīng)用。 2. ApplicationContext 應(yīng)用上下文:org.springframework.context.ApplicationContext)基于 BeanFactory 之上構(gòu)建,并提供面向應(yīng)用的服務(wù)。)


(第 4,5 題在下面會解釋)


第一輪技術(shù)面


主要根據(jù)簡歷以及筆試題進(jìn)行論述。


先將筆試題,首先是寫出一個(gè)熟悉的設(shè)計(jì)模式,那當(dāng)然寫個(gè)單例咯,這個(gè)最簡單嘛,主要是 UML 圖也特別好畫。詳細(xì)可以參考設(shè)計(jì)模式:單例模式(Singleton)。博主寫的是內(nèi)部類的寫法:


public class LazyInitHolderSingleton {  

    private LazyInitHolderSingleton() {  

    }  

 

    private static class SingletonHolder {  

            private static final LazyInitHolderSingleton INSTANCE = new LazyInitHolderSingleton();  

    }  

 

    public static LazyInitHolderSingleton getInstance() {  

            return SingletonHolder.INSTANCE;  

    }  

}  


這種寫法是懶漢式線程安全的寫法。


面試官問到一個(gè)問題:為什么這種寫法是線程安全的?


那么這里就設(shè)計(jì)到一個(gè) JVM 加載的知識:JVM 內(nèi)部機(jī)制可以保證在執(zhí)行類構(gòu)造器 () 方法的時(shí)候是線程安全的,詳細(xì)可以參考博文: Java 虛擬機(jī)類加載機(jī)制。


這里博主還特意說了虛擬機(jī)規(guī)范嚴(yán)格規(guī)定了有且只有 5 種情況(JDK7)必須對類進(jìn)行初始化 (執(zhí)行類構(gòu)造器 () 方法):


  1. 遇到 new,getstatic,putstatic,invokestatic 這失調(diào)字節(jié)碼指令時(shí),如果類沒有進(jìn)行過初始化,則需要先觸發(fā)其初始化。生成這 4 條指令的最常見的 Java 代碼場景是:使用 new 關(guān)鍵字實(shí)例化對象的時(shí)候、讀取或設(shè)置一個(gè)類的靜態(tài)字段(被 final 修飾、已在編譯器把結(jié)果放入常量池的靜態(tài)字段除外)的時(shí)候,以及調(diào)用一個(gè)類的靜態(tài)方法的時(shí)候。

  2. 使用 java.lang.reflect 包的方法對類進(jìn)行反射調(diào)用的時(shí)候,如果類沒有進(jìn)行過初始化,則需要先觸發(fā)其初始化。

  3. 當(dāng)初始化一個(gè)類的時(shí)候,如果發(fā)現(xiàn)其父類還沒有進(jìn)行過初始化,則需要先觸發(fā)其父類的初始化。

  4. 當(dāng)虛擬機(jī)啟動(dòng)時(shí),用戶需要指定一個(gè)要執(zhí)行的主類(包含 main() 方法的那個(gè)類),虛擬機(jī)會先初始化這個(gè)主類。

  5. 當(dāng)使用 jdk1.7 動(dòng)態(tài)語言支持時(shí),如果一個(gè) java.lang.invoke.MethodHandle 實(shí)例最后的解析結(jié)果 REF_getstatic,REF_putstatic,REF_invokeStatic 的方法句柄,并且這個(gè)方法句柄所對應(yīng)的類沒有進(jìn)行初始化,則需要先出觸發(fā)其初始化。


尤其是第 5 點(diǎn),是個(gè)特別偏冷的知識點(diǎn),當(dāng)你記住這個(gè)的時(shí)候,可以給面試官留下一個(gè)很好的印象。在后面的博文中會經(jīng)常涉及這種冷知識,可以讓你的面試過程添加幾處亮點(diǎn)。


下面就是要說明一下的二分查找法(首先確保被排序的數(shù)組有序),這里有兩種寫法:遞歸和非遞歸的寫法。博主憋了一個(gè)遞歸的算法,不過最好還是用非遞歸的寫法。二分查找法還是很容易的,關(guān)鍵這里引申出了變種算法,譬如:給你一個(gè) key,找出這個(gè)數(shù)組中最左邊的 key,或者最右邊的 key。當(dāng)然還有其他變種算法,有興趣的朋友可以自行查找相關(guān)資料。


接下去就根據(jù)簡歷聊一聊項(xiàng)目和 Java 基礎(chǔ)了。下面稍微列舉一些問題:


  1. Memcached 和 Redis 的區(qū)別? 參考:Redis 和 Memcached 的區(qū)別


  2. ActiveMQ 的集群配置方式有哪些?(基于共享文件,基于數(shù)據(jù)庫,基于 Zookeeper 等)


  3. Mybatis 的一些知識點(diǎn)。(略)


  4. 虛擬機(jī)的類加載機(jī)制。(加載 - 驗(yàn)證 - 準(zhǔn)備 - 解析 - 初始化,詳細(xì)可以參考 Java 虛擬機(jī)類加載機(jī)制)


  5. 內(nèi)部類相關(guān)知識點(diǎn)。


  6. 面向?qū)ο蟮脑O(shè)計(jì)原則?參考:面向?qū)ο蟮脑O(shè)計(jì)原則


  7. Spring Aop 的原理?動(dòng)態(tài)代理。


  8. Spring 常用的注解?


  9. NIO 的相關(guān)。參考:攻破 JAVA NIO 技術(shù)壁壘


  10. 數(shù)據(jù)庫優(yōu)化相關(guān)。(博主基本不直接接觸數(shù)據(jù)庫,so 遇到此類問題直接 say: I don’t know. 有興趣的小伙伴可以自行查閱一些資料,譬如數(shù)據(jù)訪問優(yōu)化漏斗法則。)


  11. linux 下查看文件有哪些方式?cat tac head tail more less nl vim vi gvim


技術(shù)面二面


約好的 10:00 電面,11:30 也沒來,后來咨詢了 HR 才說面試官出差去了。。。好吧,畢竟公司還在創(chuàng)業(yè)初期,管理上有疏忽可以理解。第二次約的 2 面同樣是 10:00,這次是 10:27 來的電話。額。。。這此的面試官好像是 CTO,面的也比較深一些:


1. 談?wù)勀銓?HashMap 的理解,怎么樣去保證線程安全?


博主對 HashMap 巴拉巴拉的一陣,可以參考:Java 集合框架:HashMap. 然后有三種方法可以保證 hashMap 的線程安全:換成 HashTable;用 synchronizedMap 包裝一下 HashMap; 換成 ConcurrentHashMap。然后補(bǔ)了一句 ConcurrentHashMap 是比較推崇的,然后就被問了另一個(gè)問題:說一下 ConcurrentHashMap 的實(shí)現(xiàn)原理。然后解釋了一下,最后問了個(gè)問題:用 HashMap 怎么去實(shí)現(xiàn) ConcurrentHashMap?當(dāng)時(shí)想了一個(gè),覺得不 okay,想說第二個(gè)方案就被制止了?,F(xiàn)在想想:把 HashMap 用 Collections.synchronizedMap() 包裝一下替換屌 Segment 即可。(如果不知所云,請閱讀一下 ConcurrentHashMap 的源碼先~~)


補(bǔ)充:這里還問了平常用了那些線程安全的隊(duì)列,包括:ConcurrentLinkedQueue, ConcurrentLinkedDeque 以及 BlockingQueue 系列。


2.Java 集合中有哪些常用的類?ArrayList 的上級(父類或者接口)是什么,HashMap 的上級又是什么?


常用的類:Map 系(HashMap,LinkedHashMap,TreeMap, WeakHashMap, EnumMap 等);List 系(ArrayList, LinkedList, Vector, Stack 等);Set 系(HashSet, LinkedHashSet, TreeSet); 工具類(Collections,Arrays)。這里如果說出來了,就必須對其十分了解,比如博主在另一家互聯(lián)網(wǎng)公司 W 的面試過程中就被問到:你對 java 集合了解有多少?博主說:我看過所有集合的源碼。然后就被問到:Collections.sort() 里面的實(shí)現(xiàn)是什么排序算法?這個(gè)問題確實(shí)夠冷門的!幸虧看過,不然就被打臉了。。(TimSort, 加強(qiáng)型歸并排序)

ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable. 然后 AbstractList 又繼承了 AbstractCollection. 然后 List 和 AbstractCollection 又都 implements 了 Collection.


HashMap extends AbstractMap implements Map, Cloneable, Serializable.


3.css 導(dǎo)入方式?


這個(gè)只要 2 周不沒看過就會忘記。。博主當(dāng)時(shí)就忘記了。。超簡單的題,但是又是最不起眼的題,細(xì)節(jié)做的不夠好。


'stylesheet' type='text/css' href='css/head.css' />



4.js 中的 ajax 操作的方式?這個(gè)寫的太多了,所以答起來很 easy


5. 一句話概括 NIO。博主說了一通,包括 Reactor 模式神馬的。但是面試官說:你說的也很對,但是不是我想要的結(jié)果。斯巴達(dá)。。。


6. 設(shè)計(jì)數(shù)據(jù)庫的一道題,比較簡單,不贅述。


7. 常用的 linux 命令?(這個(gè)被用了好多次了)


cat tac head tail more less nl vim vi gvim

date cal man shutdown poweroff reboot echo

uname -r; mount; unmount; exit

cd ls pwd mkdir cp scp rm mv

touch file which whereis locate find tar unzip

grep df top free kill killall

ifconfig ping netstat telnet ftp

passwd umask chrown chmod chgrp sudo ps who


8.Spring IOC 的原理?答案:基于反射


9. 數(shù)據(jù)庫事務(wù)隔離級別?

Uncommit Read; Commit Read; Repeated Read; Serializable.


10.memcached 與 Redis 的區(qū)別?


技術(shù)三面


之前說過博主對數(shù)據(jù)庫相關(guān)的知識,除了會寫 SQL 之外,其他的基本白癡。這次面試將近 40mins,差不多被問了 30mins 的數(shù)據(jù)庫的知識。比如:數(shù)據(jù)庫優(yōu)化;訪問多少條數(shù)據(jù),數(shù)據(jù)庫的反應(yīng)延遲是多少;表和視圖的區(qū)別。


當(dāng)然還有一些其他的,譬如 Spring 中的注解在 xml 文件中怎么配置?


context:annotation-config>



面試過程中有兩種問題比較難答:第一種,冷門知識,比如 Colletions.sort() 用到什么排序算法?第二種就是上面的這種特別簡單,用過的都知道,但是像這種在 Spring 配置文件中配置完之后就基本不動(dòng)了,所以特別容易遺忘。


還有類似的比如:Spring 中的自動(dòng)裝配怎么配置?


context:componenet-scan>



HR 面


最后是 HR 面,這個(gè)最簡單,只要言語不過激都是 okay 的,主要談?wù)勗谠瓉砉局饕鍪裁矗瑸槭裁匆獡Q份新工作,期望薪資神馬的。


(ps: 談薪資是門藝術(shù),同樣兩個(gè)人,面試打分也是一樣的,但是薪資會談和不會談之間可能相差很多,這門藝術(shù)博主還在研究中,雖然有所收獲,但是還是不敢出來賣弄,等博主把人事六大塊之一的薪酬領(lǐng)悟之后再來探討探討。)


總結(jié)


博主總結(jié)幾個(gè)心得,僅供參考:


面試第一要素:不要緊張,如果你真是技術(shù)族,而且對技術(shù)有所癡迷,一聊起技術(shù)來根本不會緊張。


面試第二要素:要對簡歷上的內(nèi)容了如指掌,包括原理源碼,如果略懂或者根本就是用了幾天就再也沒用過的技術(shù)就從簡歷上刪掉吧,否則被面試官抓住不放就糟糕了。


面試第三要素:學(xué)會引導(dǎo)面試,掌握主動(dòng)權(quán)。這門技藝需要多去混點(diǎn)面筋,然后自我優(yōu)化之后,一般都可以掌握。


面試第四要素:做人要低調(diào)。面試你這個(gè)職位的人的技術(shù)肯定比這個(gè)職位高好幾個(gè) level, 不要覺得你回答了你非常熟悉的問題就高調(diào)起來,面試官隨時(shí)可以挖出一堆坑來讓你往里面跳。


面試第五要素:要自信。有些面試官會對某些你回答完問題之后會補(bǔ)一句:你確定?這時(shí)候就要看你自己了,有可能面試官再提醒你,也有可能再詐你。歸根結(jié)底還是要技術(shù)掌握的夠硬,底氣就足一些。


參考資料:

1. Java 多線程知識小抄集 (一)

2. 設(shè)計(jì)模式:單例模式(Singleton)

3. Java 虛擬機(jī)類加載機(jī)制

4. Redis 和 Memcached 的區(qū)別

5. 面向?qū)ο蟮脑O(shè)計(jì)原則

6. 攻破 JAVA NIO 技術(shù)壁壘

7. Java 集合框架:HashMap


專欄作者簡介點(diǎn)擊 → 加入專欄作者 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多