博主畢業(yè)快滿(mǎn)三年了,由于種種原因想換一份工作。學(xué)了 7 年計(jì)算機(jī)技術(shù),在目前的行業(yè)用到的技術(shù)不多,還是想去尋找一份互聯(lián)網(wǎng)行業(yè)的工作,這樣更能學(xué)以致用發(fā)揮自己的特長(zhǎng)。從上次更新博客到現(xiàn)在已經(jīng)三周左右了,這三周博客基本斷更了,現(xiàn)在找工作也基本收尾了,來(lái)聊一聊我所遇到的一些面試經(jīng)歷,希望給各位尋求新機(jī)會(huì)的小伙伴一個(gè)參考??偣裁嫱?8 家收了 7 個(gè) offer,應(yīng)該算是比較成功的吧。博文中主要還是聊一下技術(shù)相關(guān)的,博文中所涉及的公司均以代號(hào)標(biāo)志,不便透露細(xì)節(jié)。 第一家面試的公司是一家互聯(lián)網(wǎng)創(chuàng)業(yè)公司,這里簡(jiǎn)稱(chēng) D,博主對(duì)這家公司的印象還是不錯(cuò)的,共面試了 5 輪,筆試一輪,技術(shù)面 3 輪,最后一輪是 HR 面。雖然公司總共員工只有小幾百人,但是做事比較專(zhuān)業(yè),很多大型的成熟公司也未必做得更好。 首先說(shuō)說(shuō)筆試,很多一些小的公司,就是從網(wǎng)上題庫(kù)中拉點(diǎn)選擇題讓你做做,之后的面試和筆試題無(wú)關(guān),這里我遇到的筆試題是和第一輪技術(shù)面相關(guān)的,有點(diǎn)小套路。 筆試題 據(jù)博主的回憶,共有這么些題(都是簡(jiǎn)答題): 1. 寫(xiě)出 java 中 synchronized 的使用方式。 可以參考:Java 多線(xiàn)程知識(shí)小抄集 (一) 2. Java 中設(shè)置最大堆和最小堆內(nèi)存的參數(shù)是什么? -Xmx -Xms 3. volatile 的作用? 兩點(diǎn):內(nèi)存可見(jiàn)性;防止指令重排序; 4. 寫(xiě)一個(gè)二分查找算法 5. 寫(xiě)一個(gè)你熟悉的設(shè)計(jì)模式,畫(huà)出 UML 圖,說(shuō)出此模式的作用以及寫(xiě)出此模式的主要方法。 6. 一道設(shè)計(jì)題。(略) 7. BeanFactory 和 ApplicationContext 的區(qū)別。(Sping 的容器可以分為兩種類(lèi)型 :1. BeanFactory:(org.springframework.beans.factory.BeanFactory 接口定義)是最簡(jiǎn)答的容器,提供了基本的 DI 支持。最常用的 BeanFactory 實(shí)現(xiàn)就是 XmlBeanFactory 類(lèi),它根據(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 題在下面會(huì)解釋?zhuān)?/p> 第一輪技術(shù)面 主要根據(jù)簡(jiǎn)歷以及筆試題進(jìn)行論述。 先將筆試題,首先是寫(xiě)出一個(gè)熟悉的設(shè)計(jì)模式,那當(dāng)然寫(xiě)個(gè)單例咯,這個(gè)最簡(jiǎn)單嘛,主要是 UML 圖也特別好畫(huà)。詳細(xì)可以參考設(shè)計(jì)模式:?jiǎn)卫J剑⊿ingleton)。博主寫(xiě)的是內(nèi)部類(lèi)的寫(xiě)法:
這種寫(xiě)法是懶漢式線(xiàn)程安全的寫(xiě)法。 面試官問(wèn)到一個(gè)問(wèn)題:為什么這種寫(xiě)法是線(xiàn)程安全的? 那么這里就設(shè)計(jì)到一個(gè) JVM 加載的知識(shí):JVM 內(nèi)部機(jī)制可以保證在執(zhí)行類(lèi)構(gòu)造器 () 方法的時(shí)候是線(xiàn)程安全的,詳細(xì)可以參考博文: Java 虛擬機(jī)類(lèi)加載機(jī)制。 這里博主還特意說(shuō)了虛擬機(jī)規(guī)范嚴(yán)格規(guī)定了有且只有 5 種情況(JDK7)必須對(duì)類(lèi)進(jìn)行初始化 (執(zhí)行類(lèi)構(gòu)造器 () 方法):
尤其是第 5 點(diǎn),是個(gè)特別偏冷的知識(shí)點(diǎn),當(dāng)你記住這個(gè)的時(shí)候,可以給面試官留下一個(gè)很好的印象。在后面的博文中會(huì)經(jīng)常涉及這種冷知識(shí),可以讓你的面試過(guò)程添加幾處亮點(diǎn)。 下面就是要說(shuō)明一下的二分查找法(首先確保被排序的數(shù)組有序),這里有兩種寫(xiě)法:遞歸和非遞歸的寫(xiě)法。博主憋了一個(gè)遞歸的算法,不過(guò)最好還是用非遞歸的寫(xiě)法。二分查找法還是很容易的,關(guān)鍵這里引申出了變種算法,譬如:給你一個(gè) key,找出這個(gè)數(shù)組中最左邊的 key,或者最右邊的 key。當(dāng)然還有其他變種算法,有興趣的朋友可以自行查找相關(guān)資料。 接下去就根據(jù)簡(jiǎn)歷聊一聊項(xiàng)目和 Java 基礎(chǔ)了。下面稍微列舉一些問(wèn)題:
技術(shù)面二面 約好的 10:00 電面,11:30 也沒(méi)來(lái),后來(lái)咨詢(xún)了 HR 才說(shuō)面試官出差去了。。。好吧,畢竟公司還在創(chuàng)業(yè)初期,管理上有疏忽可以理解。第二次約的 2 面同樣是 10:00,這次是 10:27 來(lái)的電話(huà)。額。。。這此的面試官好像是 CTO,面的也比較深一些: 1. 談?wù)勀銓?duì) HashMap 的理解,怎么樣去保證線(xiàn)程安全? 博主對(duì) HashMap 巴拉巴拉的一陣,可以參考:Java 集合框架:HashMap. 然后有三種方法可以保證 hashMap 的線(xiàn)程安全:換成 HashTable;用 synchronizedMap 包裝一下 HashMap; 換成 ConcurrentHashMap。然后補(bǔ)了一句 ConcurrentHashMap 是比較推崇的,然后就被問(wèn)了另一個(gè)問(wèn)題:說(shuō)一下 ConcurrentHashMap 的實(shí)現(xiàn)原理。然后解釋了一下,最后問(wèn)了個(gè)問(wèn)題:用 HashMap 怎么去實(shí)現(xiàn) ConcurrentHashMap?當(dāng)時(shí)想了一個(gè),覺(jué)得不 okay,想說(shuō)第二個(gè)方案就被制止了?,F(xiàn)在想想:把 HashMap 用 Collections.synchronizedMap() 包裝一下替換屌 Segment 即可。(如果不知所云,請(qǐng)閱讀一下 ConcurrentHashMap 的源碼先~~) 補(bǔ)充:這里還問(wèn)了平常用了那些線(xiàn)程安全的隊(duì)列,包括:ConcurrentLinkedQueue, ConcurrentLinkedDeque 以及 BlockingQueue 系列。 2.Java 集合中有哪些常用的類(lèi)?ArrayList 的上級(jí)(父類(lèi)或者接口)是什么,HashMap 的上級(jí)又是什么? 常用的類(lèi):Map 系(HashMap,LinkedHashMap,TreeMap, WeakHashMap, EnumMap 等);List 系(ArrayList, LinkedList, Vector, Stack 等);Set 系(HashSet, LinkedHashSet, TreeSet); 工具類(lèi)(Collections,Arrays)。這里如果說(shuō)出來(lái)了,就必須對(duì)其十分了解,比如博主在另一家互聯(lián)網(wǎng)公司 W 的面試過(guò)程中就被問(wèn)到:你對(duì) java 集合了解有多少?博主說(shuō):我看過(guò)所有集合的源碼。然后就被問(wèn)到:Collections.sort() 里面的實(shí)現(xiàn)是什么排序算法?這個(gè)問(wèn)題確實(shí)夠冷門(mén)的!幸虧看過(guò),不然就被打臉了。。(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 周不沒(méi)看過(guò)就會(huì)忘記。。博主當(dāng)時(shí)就忘記了。。超簡(jiǎn)單的題,但是又是最不起眼的題,細(xì)節(jié)做的不夠好。
4.js 中的 ajax 操作的方式?這個(gè)寫(xiě)的太多了,所以答起來(lái)很 easy 5. 一句話(huà)概括 NIO。博主說(shuō)了一通,包括 Reactor 模式神馬的。但是面試官說(shuō):你說(shuō)的也很對(duì),但是不是我想要的結(jié)果。斯巴達(dá)。。。 6. 設(shè)計(jì)數(shù)據(jù)庫(kù)的一道題,比較簡(jiǎn)單,不贅述。 7. 常用的 linux 命令?(這個(gè)被用了好多次了)
8.Spring IOC 的原理?答案:基于反射 9. 數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別? Uncommit Read; Commit Read; Repeated Read; Serializable. 10.memcached 與 Redis 的區(qū)別? 技術(shù)三面 之前說(shuō)過(guò)博主對(duì)數(shù)據(jù)庫(kù)相關(guān)的知識(shí),除了會(huì)寫(xiě) SQL 之外,其他的基本白癡。這次面試將近 40mins,差不多被問(wèn)了 30mins 的數(shù)據(jù)庫(kù)的知識(shí)。比如:數(shù)據(jù)庫(kù)優(yōu)化;訪(fǎng)問(wèn)多少條數(shù)據(jù),數(shù)據(jù)庫(kù)的反應(yīng)延遲是多少;表和視圖的區(qū)別。 當(dāng)然還有一些其他的,譬如 Spring 中的注解在 xml 文件中怎么配置?
面試過(guò)程中有兩種問(wèn)題比較難答:第一種,冷門(mén)知識(shí),比如 Colletions.sort() 用到什么排序算法?第二種就是上面的這種特別簡(jiǎn)單,用過(guò)的都知道,但是像這種在 Spring 配置文件中配置完之后就基本不動(dòng)了,所以特別容易遺忘。 還有類(lèi)似的比如:Spring 中的自動(dòng)裝配怎么配置?
HR 面 最后是 HR 面,這個(gè)最簡(jiǎn)單,只要言語(yǔ)不過(guò)激都是 okay 的,主要談?wù)勗谠瓉?lái)公司主要做什么,為什么要換份新工作,期望薪資神馬的。 (ps: 談薪資是門(mén)藝術(shù),同樣兩個(gè)人,面試打分也是一樣的,但是薪資會(huì)談和不會(huì)談之間可能相差很多,這門(mén)藝術(shù)博主還在研究中,雖然有所收獲,但是還是不敢出來(lái)賣(mài)弄,等博主把人事六大塊之一的薪酬領(lǐng)悟之后再來(lái)探討探討。) 總結(jié) 博主總結(jié)幾個(gè)心得,僅供參考: 面試第一要素:不要緊張,如果你真是技術(shù)族,而且對(duì)技術(shù)有所癡迷,一聊起技術(shù)來(lái)根本不會(huì)緊張。 面試第二要素:要對(duì)簡(jiǎn)歷上的內(nèi)容了如指掌,包括原理源碼,如果略懂或者根本就是用了幾天就再也沒(méi)用過(guò)的技術(shù)就從簡(jiǎn)歷上刪掉吧,否則被面試官抓住不放就糟糕了。 面試第三要素:學(xué)會(huì)引導(dǎo)面試,掌握主動(dòng)權(quán)。這門(mén)技藝需要多去混點(diǎn)面筋,然后自我優(yōu)化之后,一般都可以掌握。 面試第四要素:做人要低調(diào)。面試你這個(gè)職位的人的技術(shù)肯定比這個(gè)職位高好幾個(gè) level, 不要覺(jué)得你回答了你非常熟悉的問(wèn)題就高調(diào)起來(lái),面試官隨時(shí)可以挖出一堆坑來(lái)讓你往里面跳。 面試第五要素:要自信。有些面試官會(huì)對(duì)某些你回答完問(wèn)題之后會(huì)補(bǔ)一句:你確定?這時(shí)候就要看你自己了,有可能面試官再提醒你,也有可能再詐你。歸根結(jié)底還是要技術(shù)掌握的夠硬,底氣就足一些。 參考資料: 1. Java 多線(xiàn)程知識(shí)小抄集 (一) 2. 設(shè)計(jì)模式:?jiǎn)卫J剑⊿ingleton) 3. Java 虛擬機(jī)類(lèi)加載機(jī)制 4. Redis 和 Memcached 的區(qū)別 5. 面向?qū)ο蟮脑O(shè)計(jì)原則 6. 攻破 JAVA NIO 技術(shù)壁壘 7. Java 集合框架:HashMap 專(zhuān)欄作者簡(jiǎn)介 ( 點(diǎn)擊 → 加入專(zhuān)欄作者 ) |
|
來(lái)自: 勇敢走不回頭 > 《待分類(lèi)1》