這是我畢業(yè)以來第一次面試,是一家初創(chuàng)公司聊品,也是一個(gè)做saas的公司飞蹂,起初在BOSS上聊了幾句,職位是java主力開發(fā)(大概就是那種使勁干活不要命那種)翻屈,然后就電聊了45分鐘陈哑,接下來就約定第二天面試。
剛到公司,說實(shí)話公司環(huán)境比較擁擠(可能是因?yàn)楝F(xiàn)在的公司太大了哈哈哈)惊窖,然后就從人群中站出來三個(gè)人刽宪,后來才知道一個(gè)前端架構(gòu)師,一個(gè)后端架構(gòu)師界酒,一個(gè)經(jīng)理圣拄,這陣容我也是慌了一下,第一個(gè)問題wait和sleep的區(qū)別毁欣,可能是還沒緩過神來庇谆,從前特別清楚的問題一瞬間不知道怎么表達(dá)-_-,估計(jì)還是不夠扎實(shí)署辉,然后就看架構(gòu)師翻著手機(jī)的面試題,一個(gè)一個(gè)問岩四,從以下幾個(gè)部分來整理這些問題吧哭尝,也算是給大家一個(gè)方向:
java基礎(chǔ)部分(從java基礎(chǔ)、面向?qū)ο笃驶停紾C材鹦、jvm,這些知識(shí)還算清晰耕姊,也可能是進(jìn)入了狀態(tài)hhh)
Long l1=124L;Long l2=124L; l1==l2?
這個(gè)lz沒有思考就說了true桶唐,并且說如果大于127就是false,他也沒繼續(xù)問原因茉兰,我也就沒繼續(xù)說下去尤泽。說一下String,StringBuffer规脸,StringBuilder坯约,為什么String加法運(yùn)算費(fèi)性能
StringBuffer線程安全,StringBuilder不是線程安全的莫鸭,String 內(nèi)部包含final的char[] 闹丐,所以每次操作都會(huì)生成個(gè)新的數(shù)組,但是在java8以后String加法操作進(jìn)行了重載被因,底層StringBuilder實(shí)現(xiàn)卿拴,比原來省性能。剛剛你說到j(luò)ava8梨与,java8有哪些新特性堕花?
我常用的是stream,balabala(說了些函數(shù)式編程)粥鞋,還有Optional類航徙,balala(其實(shí)還有很多新特性,只不過平時(shí)沒用過沒底氣說)重寫重載區(qū)別(這個(gè)太基礎(chǔ)),那你說返回值類型不同算不算重載
當(dāng)然不算到踏,因?yàn)槲覀儾⒉皇撬袝r(shí)候都去關(guān)心返回值杠袱,所以當(dāng)執(zhí)行a()你也不知道是要int的返回值還是void的,所以也不能作為依據(jù)來確定用哪個(gè)方法窝稿。重寫中子類和父類的異常關(guān)系是這么個(gè)約束
子類中可以不拋出異常楣富,或拋出更詳細(xì)的異常說一下GC過程
首先,需要判斷對(duì)象的存活性伴榔,主要有兩種方式纹蝴,第一是引用計(jì)數(shù),但是會(huì)造成abba問題踪少,第二個(gè)方法是可達(dá)性分析算法塘安,當(dāng)創(chuàng)建對(duì)象時(shí)候就像根節(jié)點(diǎn)或某個(gè)子節(jié)點(diǎn)掛載,當(dāng)某個(gè)對(duì)象到根節(jié)點(diǎn)無可達(dá)路徑則判定對(duì)象死亡援奢,HotSpot用的是這種算法兼犯,當(dāng)對(duì)象被標(biāo)記兩次才有可能被回收,回收算法有有很多集漾,標(biāo)記清除切黔,標(biāo)記整理,復(fù)制算法(說了下不同算法的優(yōu)點(diǎn)和適用場(chǎng)景)具篇,不同的GC使用的算法不同纬霞,一般來說會(huì)根據(jù)不同的代來進(jìn)行不同的回收機(jī)制,java8中默認(rèn)是G1回收器驱显。(回答這部分問題的時(shí)候面試官在中間會(huì)時(shí)不時(shí)的冒出問題···)jvm問的就比較少了诗芜,還是我自己主動(dòng)提的,比如在java8中永久代被元空間取代埃疫,內(nèi)存模型啊绢陌,對(duì)象創(chuàng)建過程,分配內(nèi)存的CAS算法等等等熔恢,但面試官好像不是很感興趣···
框架(Spring脐湾,SpringMVC,SpringBoot)
你用過Boot吧叙淌,說說你了解哪些秤掌?
(黑人臉,我不知道從哪說起啊鹰霍,太多可說的了)我就從IOC AOP 動(dòng)態(tài)代理兩種實(shí)現(xiàn)方式(后來想想闻鉴,其實(shí)回答的不對(duì),這都不是Boot的優(yōu)點(diǎn)茂洒,常掛在嘴邊的習(xí)慣大于配置竟然沒說···)剛剛你提到動(dòng)態(tài)代理孟岛,你說一下動(dòng)態(tài)代理的默認(rèn)機(jī)制
spring4中優(yōu)先是動(dòng)態(tài)代理,若代理的對(duì)象無接口,則用CGlib的方式來進(jìn)行動(dòng)態(tài)字節(jié)碼的代理渠羞。Mybatis接觸過么
我們持久層用的hibernate斤贰,但是我寫過一些demo,相比于hibernate的全自動(dòng)次询,mybatis的半自動(dòng)化更靈活和輕快吧荧恍,sql基礎(chǔ)好學(xué)這個(gè)應(yīng)該不難,之前解決過其他項(xiàng)目組的bug(balala敘事)了解Dubbo么
我們服務(wù)發(fā)現(xiàn)治理用的是Eureka屯吊,一直也沒什么機(jī)會(huì)接觸送巡,但好像阿里最近推崇的是HSF(面試官表情很耐人琢磨)開啟定時(shí)任務(wù)怎么開啟
需要加@EnableSchduling注解框架的事基本就聊到了這
數(shù)據(jù)庫
說說事務(wù)的隔離級(jí)別
串行、重復(fù)讀盒卸、已提交骗爆、未提交(balalalalala)幻讀和臟讀區(qū)別是啥
幻讀:一個(gè)事務(wù)修改了全部列,這時(shí)另一個(gè)事務(wù)插入了一行蔽介,這時(shí)候就好像之前的修改沒生效摘投,發(fā)生了幻覺
臟讀:就是一個(gè)事務(wù)修改某個(gè)數(shù)據(jù)未提交,另一個(gè)事務(wù)讀取這個(gè)數(shù)據(jù)造成臟讀mysql存儲(chǔ)引擎知道哪些屉佳?有啥特點(diǎn)谷朝?
我只知道Innodb洲押,這個(gè)問題過了(說到這我已經(jīng)口干舌燥不想說話了····也不給杯水)武花,這部分在我學(xué)習(xí)計(jì)劃靠后的地方,畢竟我才轉(zhuǎn)型java不到一年杈帐,還有很多要學(xué)体箕。查詢?nèi)绾蝺?yōu)化
一般建立索引就可以,再有就是對(duì)null 盡量設(shè)置初始值(balala這個(gè)問題網(wǎng)上一大堆只記得這些了)事物有什么意義
保證了一些操作的“原子性”挑童,保證數(shù)據(jù)的準(zhǔn)確(舉轉(zhuǎn)賬例子balala)分布式事務(wù)怎么解決
這部分我只是了解一點(diǎn)JTA累铅,它是通過分段提交保證了事務(wù)ACID。阿里有個(gè)GTS好像對(duì)分布式事務(wù)有較優(yōu)的實(shí)現(xiàn)站叼,但是做成了產(chǎn)品沒開源娃兽。ACID你知道都是啥么
(我自己提的hhhh)原子性,一致性尽楔,隔離性投储,持久性(看來又不想繼續(xù)深問···)我看你用過redis?redis有哪些數(shù)據(jù)類型
我用過codis阔馋,是go實(shí)現(xiàn)的redis的集群化(這樣形容并不準(zhǔn)確)(數(shù)據(jù)類型我沒回答玛荞,我知道有字符串、哈希表呕寝、List勋眯、Set、有序列表),我只是負(fù)責(zé)搭建這樣個(gè)環(huán)境客蹋,修改原有的腳本塞蹭,適用于實(shí)際的開發(fā)環(huán)境。redis存json有什么弊端嚼酝?
我猶豫了一下浮还,我本想說轉(zhuǎn)對(duì)象時(shí)費(fèi)性能,但是我覺得問的是redis本身的弊端闽巩,然后也pass了钧舌,現(xiàn)在想想好像就是性能問題···
設(shè)計(jì)模式
談?wù)勀阒赖脑O(shè)計(jì)模式
設(shè)計(jì)模式太多了,我們也不會(huì)說用其中一種涎跨,在使用的時(shí)候這些模式經(jīng)常需要變種枣申,模式本身就是給開發(fā)者提供一個(gè)開發(fā)思路套媚,主要思想就是抽離不變的,封裝變化的,多用組合少用繼承也祠,針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)有巧,然后遵守下開閉原則鹉胖。(balalala)觀察者模式知道么?項(xiàng)目中有哪些場(chǎng)景绒尊?
(說實(shí)話我對(duì)記名字真的是····)發(fā)布通知畜挥?項(xiàng)目中···難以具體舉例啊,現(xiàn)在想想其實(shí)reactor就是一個(gè)較為合適的例子婴谱,異步通知····那你舉一個(gè)生活中的場(chǎng)景吧
報(bào)紙蟹但?天氣預(yù)報(bào)?(都不恰當(dāng))
前端
看你以前做過web架構(gòu)谭羔,說說負(fù)責(zé)哪部分华糖?你對(duì)前端架構(gòu)有什么理解
balabala敘事,架構(gòu)就是骨架瘟裸,抽離出脫離業(yè)務(wù)不變的部分客叉,進(jìn)行一個(gè)業(yè)務(wù)的統(tǒng)一默認(rèn)實(shí)現(xiàn),前端的架構(gòu)還包括一些插件的整合话告。估計(jì)因?yàn)槲沂敲嬖噅ava開發(fā)兼搏,所以web基本沒問太多 ,angularjs的指令雙向綁定 vue的鉤子函數(shù)超棺,生命周期這些都沒問(失望臉裝逼失斚蜃濉)
shell
- shell基本沒問什么實(shí)際問題,我就是說我自學(xué)寫過幾個(gè)腳本棠绘,公司一直在用件相,三劍客(awk再扭、grep、sed)都沒問夜矗,但估計(jì)其他的公司還是會(huì)問的泛范。
其他
談?wù)勀銓?duì)rest的理解,和rpc的區(qū)別
rest我個(gè)人理解就是一種風(fēng)格規(guī)范紊撕,對(duì)于前后端分離這種罢荡,我實(shí)際感受到的最大的好處就是定義規(guī)約就容易形成“默契”,根據(jù)接口就能判斷他的業(yè)務(wù)含義对扶,然后前端獨(dú)立開發(fā)的時(shí)候如果遵守這樣的規(guī)則区赵,那聯(lián)調(diào)的時(shí)候基本不需要太大的改動(dòng)(balala亂扯),rpc適合服務(wù)器間通訊浪南,以方法名來作為驅(qū)動(dòng)(后面還說什么了記不住了)nginx你會(huì)配么笼才,怎么設(shè)置https
會(huì)啊,首先要獲取證書络凿,然后在配置項(xiàng)里配置證書位置就好了骡送,具體的配置項(xiàng)的key叫什么記不清了,我們項(xiàng)目目前都是httphttp絮记?那怎么保證網(wǎng)絡(luò)安全摔踱?
我們項(xiàng)目特殊,都是政府項(xiàng)目怨愤,訪問都在內(nèi)網(wǎng)派敷,相對(duì)安全點(diǎn)···http你了解么?和http2有什么區(qū)別
它處于應(yīng)用層(然后就是tcp/ip那一套握手揮手)憔四,http2快吧(其實(shí)應(yīng)該答多路復(fù)用)膀息,支持長(zhǎng)連接吧(其實(shí)應(yīng)該說支持推送···)協(xié)議和計(jì)算機(jī)原理一直是lz的薄弱項(xiàng)般眉,因?yàn)楹苌俳佑|了赵,不過最近準(zhǔn)備開始系統(tǒng)學(xué)習(xí)了。甸赃。柿汛。
剩下的就是項(xiàng)目的問題了,然后擔(dān)任的角色埠对,看哪些書络断,用哪些搜索引擎,看哪些國(guó)外網(wǎng)站(這個(gè)很尷尬项玛,lz從來不記名字···貌笨,用手語比劃回想起來還是很尷尬的,拿個(gè)筆我能給stackoverflow畫出來)
然后公司介紹了一下自己的情況襟沮,問我有什么問題锥惋,其實(shí)這是每個(gè)面試者都應(yīng)該提前準(zhǔn)備好的昌腰,當(dāng)時(shí)一是沒面試經(jīng)驗(yàn),二是沒有面試準(zhǔn)備膀跌,就隨便聊了聊考勤問題遭商、公司戰(zhàn)略、架構(gòu)師的經(jīng)歷(這個(gè)很尷尬捅伤,仿佛一副“你們憑什么降伏老子”的既視感···劫流,其實(shí)我只是好奇架構(gòu)師的成長(zhǎng)之路),這一問題還是要去公司前提前準(zhǔn)備好丛忆,針對(duì)于不同的公司有不同的問題祠汇。
一些較為開放的問題一定要捋清思路,語言描述一定要有邏輯結(jié)構(gòu)熄诡,畢竟程序員邏輯思維很重要座哩。
然后就讓我等通知(好萊塢原則)
總結(jié)
這篇文章寫給像我一樣的面試小白,不要緊張粮彤,真實(shí)面對(duì)根穷,也不要想蒙混過關(guān),技術(shù)這東西編不出來的导坟。唯有腳踏實(shí)地的去學(xué)習(xí)和思考屿良,與君共勉。
文章純手打惫周,如有不對(duì)或不準(zhǔn)確請(qǐng)指出更正 謝謝尘惧!
對(duì)齊填充。