從今年5月份就開始面試了,前前后后也有4個多月了吧,面試了幾十家公司,其中有幾十個人的小型創(chuàng)業(yè)公司,也有幾百人的上市公司,踩了不少的坑,最后收到了寶能集團的offer,我也決定就去這家了。
看過很多別人的面試分享經(jīng)驗,這里我也做一些面試的分享吧。點此鏈接獲取相關(guān)面試資料和Java架構(gòu)進階文檔https://docs.qq.com/doc/DS0ljdVdNYm1CWWN3。
前言
首先,提前要求自帶簡歷的一般都不太靠譜,特別是小公司要求自帶簡歷,一般都是hr不專業(yè),不想提前把你的簡歷打印出來,或者說不想為了你浪費幾張A4紙,所以這種公司可以直接pass了,除非你特別缺offer,生存都成困難了。
其次,可以提前問一下hr面試流程是什么樣的,現(xiàn)在很多公司都取消筆試了。眾所周知筆試沒有人監(jiān)督你,所以可以掏出手機(雖然我沒做過,但是面試看見其他人這樣做過),所以我覺得筆試作用其實沒多少。如果有公司是明確要先筆試,筆試通過再進行面試,而你面試的不是應屆生崗位,就要小心了,先考慮一下那家公司過去面試距離遠不遠,提前去看準網(wǎng)看一下相關(guān)的評價,再考慮要不要去面試的事。我之前面過兩家都是需要筆試的,筆試沒通過是直接沒有后面的面試的(有的面試題非常腦殘,下面上圖),來回也比較遠,浪費了我一個上午的時間。
面試準備
面試的時候99.99%的公司都會讓你做一下自我介紹和最近做的一個項目,所以自我介紹和項目要提前打好草稿,特別是不太會說話的。
自我介紹
我覺得簡潔一點就行了,一般面試官都會趁著你自我介紹的時候看簡歷,也沒認真聽你做自我介紹。
下面是我自己打的草稿:
面試官你好,非常榮幸參加貴公司的本次面試。下面我簡單的介紹一下我的個人情況,我叫凌霄,xx年畢業(yè)于xxx學院xxx專業(yè)。目前在xxx公司工作,主要是從事xxx開發(fā)。 通過xxx招聘平臺關(guān)注到貴公司崗位的招聘信息,這個職位比較符合我未來的職業(yè)發(fā)展,而且貴公司的業(yè)務對我都非常有吸引力,非常希望能夠進入貴公司發(fā)展。
我對技術(shù)有濃厚的興趣,專業(yè)知識面寬,技術(shù)也相對全面,責任心強,思路清晰,溝通能力好,熟悉JAVA體系, 對各種開發(fā)流程和主流架構(gòu)模式,設計模式和UML,有較強的需求分析、架構(gòu)設計、項目管理能力,并有豐富的實戰(zhàn)經(jīng)驗; 出于對工程師文化的向往,我在研發(fā)團隊管理期間,嘗試了多種方法去建立良性的團隊氛圍,并有效的改善了研發(fā)效率; 技術(shù)是為產(chǎn)品支撐的,所以我現(xiàn)在也在熟悉產(chǎn)品設計過程,希望可以結(jié)合公司發(fā)展戰(zhàn)略,營銷策略,跟著團隊打造出一個好的產(chǎn)品。
上面的可以適當簡化一下,能說出來多少取決于你的記憶力。
項目介紹
這個是真的要提前準備好說辭,不然你面試的時候邊想邊說,說起來磕磕巴巴的,你給面試官的第一印象就不好了,至少說明你的表述能力不強。
介紹項目的話可以不用太緊張,面試官才拿到你的簡歷看多久,所以肯定是對你自己的項目是最熟悉的。需要注意的地方就是不要只講一些業(yè)務相關(guān)的,面試官不需要知道這些,他只關(guān)心你的技術(shù)能力是否足夠,通過你的描述知道你使用了什么技術(shù),再根據(jù)相關(guān)的技術(shù)進行提問。
貼一下我的草稿:
我在xx公司做的xx系統(tǒng),客戶主要是xx,項目的功能主要是提供代理雨傘,代理快遞,代理訂餐,圖書借閱等服務,后臺用的是主體架構(gòu)是使用Spring Cloud,微服務模塊劃分為xxx,我主要負責其中xxx幾個模塊的開發(fā), orm用的是mybatis,數(shù)據(jù)庫是用的mysql,緩存是用的redis,前臺用到了vue技術(shù)。共有xx個同事參與開發(fā),整個項目持續(xù)了xx時間。
面試官會對他感興趣的點進行提問。
項目中遇到的難題
讓我想起小學時經(jīng)常寫的作文:最難忘的一件事。這可真是太艸了,沒想到小學學的知識現(xiàn)在派上了用場。
項目中遇到的難題,解決了之后其實都不是什么難題了。我列幾個點可以參考一下:
- 跨域
- 任務調(diào)度冪等性
- 使用mq遇到的問題
- 分布式系統(tǒng)中的事務問題
- 內(nèi)存溢出問題
當然最后還是要自己的專業(yè)技能扎實,才能獲取源源不斷的offer。
[圖片上傳失敗...(image-eb9037-1601200494960)]
<figcaption></figcaption>
面試經(jīng)驗
接下來分享一些這段時間的面試公司
騰云億想
騰訊云全資子公司,其實就是騰訊云的外包公司
- 數(shù)據(jù)庫有哪幾種索引
- springboot原理,如何實現(xiàn)的自動裝配
- springboot打包成jar之后,怎么做到不重新打包修改他的properties配置文件
- jvm調(diào)優(yōu)做過嗎,有哪些參數(shù)可以調(diào),具體怎么調(diào)
第一次面試,尷尬的是我基本上沒打上來,只回答上了springboot原理,居然還叫我去hr面,要把這個崗位確定下來,我拒絕了。
壘知科技研究院
上市公司,原來叫做建研集團,做建筑相關(guān)的工程。
-
你用過SpringBoot的哪些注解
- @component,@service,@controller,@controlleradvice,@Repository
- @Autowired,@Inject,@Resource,@Qualifier,一般@Resource單獨使用,@Qualifier會和@Autowired一起用
- @dependsOn
- @Configuration,@bean, @ComponentScan,
- @Aspect,@PointCut,
- @Scope,@PostConstruct,@PreDestory
Spring的Bean默認是單例還是多例,我想改成多例的怎么辦
項目中用到了rabbitmq,使用中遇到什么問題
rabbitmq重復消費怎么解決,除了數(shù)據(jù)庫里查記錄還有其他什么方法
-
分布式鎖怎么實現(xiàn),redis實現(xiàn)方式死鎖怎么解決
我:數(shù)據(jù)庫實現(xiàn),redis實現(xiàn),zookeeper實現(xiàn)。redis加上一個失效時間
mysql索引怎么實現(xiàn)的,btree索引有什么特點
-
現(xiàn)在有一個聯(lián)合索引(A,B) 我有一個sql語句是
select xxx from xxx where A=xxx 會用到索引嗎
select xxx from xxx whereB=xxx 會用到索引嗎 為什么會是最左匹配原則
-
ArrayList實現(xiàn)了哪些接口
說了List、Cloneable、Serializable,我覺得他應該是想問RandomAccess接口,當時沒回答上這個
代碼優(yōu)化怎么做的
nginx怎么配置負載均衡
閉鎖怎么用,什么原理
二分查找法,時間復雜度
自我感覺回答得不是很好,但是第二天收到了復試邀請,還挺驚訝的。
復試先是做一套性格測試題,然后就是項目主管來面試我,問了一下畢業(yè)學校,為啥學校挺好還是科班出身,為啥畢業(yè)會進小公司。然后問了下我現(xiàn)在的職位級別,接下來就巴拉巴拉開始夸他們公司。
然后就是cto面試,也沒問技術(shù),就問了問家里的情況,未來職業(yè)規(guī)劃,然后說他是從華為出來的,公司實行狼性文化,加班是經(jīng)常的。正題來了,他說待遇是不會高于我上家公司的,但是進他們公司未來的發(fā)展肯定會很好。我就有點不太舒服,就嘆氣嘛,然后他說我唉聲嘆息比較悲觀,進公司會影響其他人,他需要的是一個時刻保持樂觀的人,能給團隊帶來活力。

<figcaption></figcaption>
我整個人都傻了。
西南凱亞
中國民航的子公司,是一家國企。
先要提前一天做一套線上筆試題,不管有沒有通過,第二天都是要去面試的。
主要是項目相關(guān)的,業(yè)務上的東西問得多
代碼優(yōu)化
mysql優(yōu)化
jvm內(nèi)存模型
spring cloud用過哪些組件 講講熔斷機制
為什么離開上家公司
不是很難但是沒有offer,心態(tài)崩了。

<figcaption></figcaption>
睿沿科技
做人臉識別相關(guān)的,和我上家公司做的產(chǎn)品差不多。
Hashmap原理
-
ConcurrentHashMap原理,為什么多線程條件下性能這么好
我從sync在1.6做的優(yōu)化談的,他從鎖的粒度方面談的
項目相關(guān)
代碼優(yōu)化
mysql優(yōu)化
spring的aop怎么實現(xiàn)的
-
每天抓拍的數(shù)據(jù)量比較大,有做過分庫分表嗎
用的shardingjdbc 還有mycat,中小公司一般用shardingjdbc,
-
Rabbitmq實現(xiàn)原理
不知道
后面兩個沒有回答好吧,所以沒有后續(xù)了。
小海豚能源科技
這家應該是要找做全棧的吧,開頭就問我好幾個前端相關(guān)的,我直接懵了,理所當然的沒有后續(xù)了
用過jquery哪些框架
es6語法熟悉嗎
vue用過哪些組件
spring用過哪些注解
使用@autowired注入的時候,如果這個接口有多個實現(xiàn),怎么指定注入哪一個的實現(xiàn)
eureka搭過集群嗎
-
mysql優(yōu)化,什么時候不會用到索引
select *,可能會導致不走索引
where后面有函數(shù)運算,導致不走索引
索引不適用于隱式轉(zhuǎn)換的情況,比如你的SELECT FROM T WHERE Y = 5 在Y上面有一個索引,但是Y列是VARCHAR2的,那么Oracle會將上面的5進行一個隱式的轉(zhuǎn)換,SELECT FROM T WHERE TO_NUMBER(Y) = 5,這個時候也是有可能用不到索引的。
like查詢使用通配符開頭不會用到索引
但是這些好像不是他想要的答案,我也猜不透。。
接受長期出差嗎
開通金融
做互聯(lián)網(wǎng)金融的,公司總部在北京,我面試的時候是在成都的新網(wǎng)銀行公司,看這個模式應該就是駐場開發(fā)了,但是公司本身不是外包。
- springboot和spring的不同
- springboot特性,自動裝配怎么實現(xiàn)的
- spring用到哪些組件,具體場景
- spring默認是單例還是多例,全局變量會有什么問題
- spring事務傳播行為、隔離級別
- aop實現(xiàn)方式,jdk動態(tài)代理和cglib動態(tài)代理區(qū)別
- jdk lambda表達式幾種使用方式,取最大和最小值,list轉(zhuǎn)map,list中有重復的怎么辦
- 線程池 有哪些參數(shù),各個參數(shù)的意義
- ioc容器有什么優(yōu)點
- jvm 堆棧,區(qū)別,線程共享還是線程私有的
- springcloud組件、用途,負載均衡的幾種算法
- 分布式事務怎么做的
- mybatis一對多,多對多怎么做
- jpa和mybatis區(qū)別
- vmstat命令干嘛的
- redis查看內(nèi)存占用命令
- mysql導入大量數(shù)據(jù)怎么優(yōu)化
- mysql有一條數(shù)據(jù)死鎖了,怎么排查問題,mysql表死鎖,怎么排查
- nginx反向代理是什么,正向代理呢
這次面試回答得挺好的,hr也打了好幾次電話說面試官對我挺有意向的,就是一頓操作猛如虎,一問工資0.9。而且我當時還是在職,要求我一周到崗,我就沒去。
蘭亭集勢
做海外電商的公司,但是進去之后是做一些小系統(tǒng)的開發(fā),問的問題有點像校招一樣,我是應屆畢業(yè)生說不定能答出來。
- 看過開源框架源碼嗎,SpringBoot自動裝配原理
- 寫個冒泡,寫個單例模式
- mybatis和jdbc怎么防止sql注入
- 單一職責原則是什么,里式替換原則是什么
- 3NF是什么
- 接口定義一個變量,這個變量的默認作用域
- 有沒有自己搭建過微服務
- linux怎么看java進程,除了jps和top命令還有其他的嗎
- 最近看什么書,我回答多線程并發(fā)相關(guān)的,他:沒用,要在項目里用才有用
- 最近在學什么技術(shù)?docker,他:沒用,很簡單不需要學習
- 有個部門表,怎么設計他的字段,獲取一個部門下的所有子部門,除了遞歸還有什么方法?加個code字段,通過部門前綴like查詢
京東物流(自帶簡歷)
朋友內(nèi)推的,聽他說是穩(wěn)了,去面就能過,結(jié)果還是翻車了。
java特點描述一下,繼承封裝多態(tài)分別是什么意思
synchronized和lock區(qū)別
ConcurrentHashMap線程安全怎么實現(xiàn)的
創(chuàng)建線程的幾種方式,創(chuàng)建線程池幾個參數(shù)的含義,線程飽和策略
sleep和wait區(qū)別
spring是單例還是多例,多線程并發(fā)會出現(xiàn)什么問題
SpringBoot如何解決跨域,具體怎么配置
全局異常捕獲怎么做的
-
SpringSecurity的前后端分離,登錄怎么做的
我:攔截登錄的url,然后獲取到用戶名和密碼,把這個用戶名和密碼交給manager,manager會交給具體的provider處理,provider會調(diào)用UserDetailsService的方法完成驗證。
這里是我失誤了,他說用戶名和密碼時通過getattribute 獲取到的嗎,我說是的。
怎么設計一個安全的對外接口
單線程的redis為什么這么快
redis持久化方式
什么是聚簇索引,什么是非聚簇索引
mysql事務隔離級別
你覺得你能承擔獨立開發(fā)的任務嗎
其他問題回答得挺好的,自我感覺不錯,本來以為能收到offer的,但是朋友說那個面試官覺得我不行,不能承擔獨立開發(fā)系統(tǒng)的任務,估計是第8個問題回答失誤了吧,其他我覺得我回答沒有問題。
教育家網(wǎng)絡科技
面試的人比較多,所以是群面,一個面試官對應多個面試者。雖然我回答得比另外一個面試者好很多,但是沒有收到offer,很迷,真的很迷。
- 介紹項目,然后基本上就圍繞著項目的業(yè)務說
- 對金額的計算用什么類型,數(shù)據(jù)庫中用什么類型存儲
- SpringBoot怎么自定義注解
- mysql優(yōu)化,like查詢的時候,數(shù)據(jù)量很大,如果like查詢以%開頭,不會走索引,怎么優(yōu)化。多表關(guān)聯(lián)查詢,怎么優(yōu)化
- 代碼優(yōu)化怎么做的,平時重構(gòu)從哪方面考慮
??到煌ù髷?shù)據(jù)
??迪旅娴囊患曳止荆饕鲕囕v交通相關(guān)大屏數(shù)據(jù)統(tǒng)計報表之類的,面試官和我一個學校的學長,開頭就問我是哪個老師教的,嚇我一跳哈哈哈哈,我以為給老師丟臉了。
- HashMap原理,底層結(jié)構(gòu),1.7和1.8區(qū)別,頭插法還是尾插法、線程安全嗎
- ConcurentHashMap在什么地方加的鎖,1.7和1.8區(qū)別,1.7用的segment,1.8用的synchronized
- lock和synchronized這兩個區(qū)別,1.6之后對synchronized做了什么優(yōu)化
- 偏向鎖、輕量級鎖是怎么做到的,我回答的是每個對象都有對象頭,對象頭里做的標記,然后他問我對象頭里有哪些信息
- list和數(shù)組區(qū)別,哪個會內(nèi)存泄漏,查詢的話哪個快點。我覺得查詢是一樣快的,因為list本來底層就是數(shù)組
- 線程池各個參數(shù)介紹一下,原理是什么。你常用哪種線程池,為什么?
- 有哪些隊列,你線程池一般用哪種隊列
- spring怎么解決循環(huán)依賴
- jdk動態(tài)代理和cglib區(qū)別,哪個更快,有沒有看過他們生成的字節(jié)碼文件
- cloud相關(guān)的組件用過哪些,hystrix熔斷原理是什么,除了線程池還有什么。熔斷有個半開狀態(tài),有什么用
過程還是挺愉快的吧,就是薪資待遇沒有談到位,比較可惜。
咻電科技(自帶簡歷)
一家做共享充電寶的公司,面試官又是和我一個學校的學長,但是沒有給我放水,很生氣。

問題:
- spring生命周期
- 線程池有幾種創(chuàng)建方式
- 線程生命周期
- eureka原理
- lock和sync區(qū)別
- 有一個表有幾個億的數(shù)據(jù),寫sql分頁查詢怎么優(yōu)化
- redis內(nèi)存淘汰策略有幾種
- dubbo熟悉嗎
- 臟讀幻讀不可重復讀,怎么解決
- jquery冒泡了解嗎
最后問了一些學習相關(guān)的建議,收獲挺多的。
武漢佰鈞成
外包公司,給平安做的一個項目,電話面試,外包都喜歡這種方式。
- 設計模式用過哪些
- 代碼優(yōu)化怎么做的
- bio和nio區(qū)別
- springcloud用過哪些組件
- mysql優(yōu)化,有做過sql從幾秒優(yōu)化到幾十毫秒的嗎
- 項目并發(fā)量多大
- 里式替換原則是什么
- tpc/ip協(xié)議
- 性能優(yōu)化怎么做
外包不是很好進嗎,但是我沒有收到offer。
成都房聯(lián)云碼
- 你怎么看單例模式,寫一個雙重鎖檢測的單例模式
- string、stringbuilder、stringbuffer區(qū)別
- arraylist、linkedlist區(qū)別
- hashmap1.7 、1.8底層結(jié)構(gòu)區(qū)別
- hashmap、hashtable區(qū)別
- 線程的生命周期
- spring事務傳播行為,底層實現(xiàn)原理
- 聲明bean的幾種方式
- spring默認是單例還是多例,怎么實現(xiàn)多例
- springmvc流程
- jvm內(nèi)存模型
- lock和synchronized區(qū)別,最大的區(qū)別是
- 代碼優(yōu)化和sql優(yōu)化
- 分布式,session怎么解決
- redis優(yōu)點
- 對外接口怎么保證安全,光是md5簽名加密不行,還有其他方法嗎
- 有一個功能模塊,你會怎么安排時間,如果有一個緊急任務完成不了怎么辦
- 平時怎么學習的
面完問了一下期望薪資,然后約了二面,二面就簡單問了一下項目相關(guān)的,平時怎么學習的。三面就是hr面,給我發(fā)了offer。
翻車面試
如果各位以后有機會面試別人的話,希望對面試者多一些尊重吧。
- 根據(jù)簡歷提前準備好,針對不同的level提不同的問題
- 不要問一些偏門的怪題
- 問題都是和面試職位相關(guān)的
以下是一些翻車面試,有些公司真的把我心態(tài)搞崩了,導致后面的面試都沒有發(fā)揮好。
協(xié)能共創(chuàng)(自帶簡歷)
公司很小,面試官架子不小,面試全程非常不愉快,經(jīng)常在我說到一半打斷我,挺會嘲諷人的。面試的時候沒有空間了,然后在外面靠近電梯的走廊面試的。
因為我的項目是做人臉識別相機相關(guān)的,然后他問我圖片處理到算法識別經(jīng)歷了什么過程,我是直接調(diào)算法,最多把jpg格式的圖片轉(zhuǎn)成bgr格式,或者圖片有旋轉(zhuǎn)的,通過exif修正旋轉(zhuǎn)。但是我的回答好像不是他要的,然后就直接打斷我,說我不知道就直接說不知道
rabbitmq用了哪些設計模式。發(fā)布訂閱模式,還有其他的嗎,我不知道,有知道的朋友可以告訴我一下
tcp/ip協(xié)議
讓你設計eureka,你怎么設計
-
樂觀鎖,悲觀鎖介紹一下
我:樂觀鎖實際上沒有加鎖
然后他就直接打斷我了,發(fā)出一聲嘲笑,問我:那你覺得什么是鎖。
-
jvm參數(shù)調(diào)優(yōu)怎么做的
我回答的是用的微服務部署,有的微服務訪問很頻繁的,就多給他設置一些內(nèi)存,比如網(wǎng)關(guān),一些不怎么用到的,可以設置稍微小一點。然后他說:你們這就是全憑感覺瞎設置唄
哎,面完之后心情低落了很多,難受了一下午,開始質(zhì)疑我自己。
芯軟科技(自帶簡歷)
Boos直聘上標榜的上市公司,我去面試的時候頂多就看見5個人在公司,辦公區(qū)域很空曠很安靜。
項目介紹
-
挑出你在項目里做的一個模塊,談談這個模塊的整個設計
這個我真不知道怎么回答,你說整個項目怎么設計的我還能畫個架構(gòu)圖啥的給你瞅瞅,但是你這說到具體的模塊設計,我不知道怎么說,最多給你說說數(shù)據(jù)庫怎么設計的
-
項目并發(fā)情況
你這公司規(guī)模還問我這個,不合適吧
-
聽你說對linux比較熟,環(huán)境搭建過嗎(tomcat之類的),有沒有遇到什么問題
搭環(huán)境都成為一個技術(shù)點來問了嘛,反正我現(xiàn)在用docker了。
nginx你們一般做什么,正向代理一般用來干啥
你會前端啊,說說vue用history打包之后,部署到服務器,nginx需要配置什么
說說你的優(yōu)點
假如你最近加班很累(你已經(jīng)很累了,要猝死了),但是項目比較急,你想請假怎么跟領(lǐng)導溝通。
廣東世紀網(wǎng)通信設備股份有限公司(自帶簡歷)
第一次見到這樣問問題的兄弟,挺有新鮮感的,其他公司翻來覆去的就是那幾個問題。就是浪費了我的簡歷,打印一次一塊錢,你還在我的簡歷上涂涂改改,我都不好意思要回簡歷了。
java的序列化和反序列化什么含義 生成的serialVersionUID有什么用
yml文件里有一些屬性,怎么獲取這些屬性
-
有一個枚舉類,有很多value和code,然后yml中的一個屬性對應這個code的值,怎么通過code的值獲取到這個對應value
我想說循環(huán)判斷,但是覺得沒這么簡單,所以沉默了半天。。。。
然后他說枚舉類里面有一個方法valueOf
啊這,是他沒表達清楚還是我理解錯了?
final干嘛的,如果有一個final Stirng a = "123",后面還可以改變嗎
一般io操作會捕獲異常,然后在catch中釋放資源,有更簡單的辦法嗎。
有一個list,給它按照類里的一個屬性排序
有個string數(shù)組,里面有些空的值,我想去除空的,怎么做
-
線上有個接口速度慢,但是本地測試環(huán)境和線上環(huán)境是一樣的,數(shù)據(jù)量也是一樣,接口速度卻很快。怎么排查
不知道
中鐵西南研究院
面了這么多家,他家是第一次把我問的說不上話的,是電話面試。
-
java的繼承和多態(tài)講講,繼承在項目里面是怎么使用的
在項目里怎么用我不知道怎么回答
-
說一下泛型
泛型提供了編譯時類型安全檢測機制,該機制可以在編譯時期就檢測到非法的類型,避免了運行時的類型轉(zhuǎn)換異常。可能不是他想要的答案?我不知道他想問什么,他說算了下一個問題。
-
設計模式,說說簡單工廠模式和抽象工廠模式怎么實現(xiàn)的,區(qū)別
我不知道怎么描述他的實現(xiàn),不知道各位能不能口述出來。我語言表達能力真不行
java8新特性,講講用過stream里的哪些東西吧
-
mysql優(yōu)化
說了一堆,然后說sql操作盡量使用預編譯語句的時候,
他說:不是mybatis已經(jīng)解決了嘛。。。哎
-
redis項目里怎么用
作用是支撐高性能高并發(fā),然后在項目里具體怎么用的說了下。
他:一句話的事兒:不就是做緩存的嘛
通甲優(yōu)博(自帶簡歷)
坐車坐了兩個小時,然后去面試先hr面,了解了基本的情況,然后沒了。
我還是請假坐車2個小時過去的,hr沒有提前了解我的基本信息就給我發(fā)面試邀請了吧,然后過來面試才覺得我不合適,所以直接就沒有技術(shù)面試了。
返空匯
就是最開頭說的那家,招聘網(wǎng)站上常年掛著招聘崗位,起碼掛了快一年。過去先是做了一套筆試題,滿分100,60分及格,沒及格就沒后續(xù)。
慧友云商科技
同樣是做了一套筆試題沒有后續(xù)了。因為我發(fā)現(xiàn)有一個題有問題,然后留空白。
國信杰云科技
前一天電話面試,自我介紹之后,問了一些技術(shù)問題,然后就讓第二天到現(xiàn)場面試。
現(xiàn)場的話,整個公司人員不超過10個人,本來想走了的,想著來都來了,進去坐坐也無妨嘛。結(jié)果這是我做的最后悔的一個決定。
整個面試體驗非常差,面試官線是讓我自我介紹,我前一天已經(jīng)在電話里做過自我介紹了,不知道這是什么意思,面試中途還接了幾個電話。然后就問登錄怎么設計的,前端密碼怎么傳輸過去的,明文還是加密,我說前端加密沒有必要也沒意義,最多加上https,他說加上https沒用,就是要加密傳,我就在思考怎么回答他的時候,他說這是面試,請你尊重這次面試(說話語氣帶了點怒火,感覺要罵人了),我也不能忍啊,直接起身就走了。
常問問題
jvm調(diào)優(yōu)
我覺得這不是一個中級開發(fā)工程師甚至高級開發(fā)工程師能做的出來的,但是面試就是要問。死記硬背考記憶力唄,只要記住其中幾個常用的配置就行了。
堆大小設置
- -Xms:初始堆大小
- -Xmx:最大堆大小
- -XX:NewSize=n:設置年輕代大小
- -XX:NewRatio=n:設置年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代占整個年輕代年老代和的1/4
- -XX:SurvivorRatio=n:年輕代中Eden區(qū)與兩個Survivor區(qū)的比值。注意Survivor區(qū)有兩個。如:3,表示Eden:Survivor=3:2,一個Survivor區(qū)占整個年輕代的1/5
收集器設置
- -XX:+UseSerialGC:設置串行收集器
- -XX:+UseParallelGC:設置并行收集器
- -XX:+UseParalledlOldGC:設置并行年老代收集器
- -XX:+UseConcMarkSweepGC:設置并發(fā)收集器
調(diào)優(yōu)總結(jié)
年輕代選擇
響應時間優(yōu)先的應用:盡可能設大,直到接近系統(tǒng)的最低響應時間限制(根據(jù)實際情況選擇)。在此種情況下,年輕代收集發(fā)生的頻率也是最小的。同時,減少到達年老代的對象。 吞吐量優(yōu)先的應用:盡可能的設置大,可能到達Gbit的程度。因為對響應時間沒有要求,垃圾收集可以并行進行,一般適合8CPU以上的應用。
年老代選擇
響應時間優(yōu)先的應用:年老代使用并發(fā)收集器,所以其大小需要小心設置,一般要考慮并發(fā)會話率和會話持續(xù)時間等一些參數(shù)。如果堆設置小了,可以會造成內(nèi)存碎片、高回收頻率以及應用暫停而使用傳統(tǒng)的標記清除方式;如果堆大了,則需要較長的收集時間。
代碼優(yōu)化
分為三個維度來談,可以稍微拓展一下:
- 整體框架的優(yōu)化,根據(jù)模塊(類)的職責做一些劃分,盡量做到每個模塊的接口清晰。然后就是善用六大設計原則和24種設計模式。
- 功能邏輯的優(yōu)化,把內(nèi)聚的邏輯獨立成一個個函數(shù),函數(shù)依賴的數(shù)據(jù)都通過參數(shù)傳遞,這樣做到函數(shù)可重用,當上層結(jié)構(gòu)做出改變的時候,修改的代碼量不會太多。
- 性能優(yōu)化,如果性能不敏感,代碼也不是那么糟糕,那這個優(yōu)化可以不用關(guān)注。
六大設計原則
-
單一職責原則
接口的單一職責,一個職責一個接口,我們對外公布的是接口,而不是實現(xiàn)類,所以不需要過度關(guān)心實現(xiàn)類是否遵循單一職責,生搬硬套單一職責會引起類的劇增,給維護帶來非常多的麻煩
-
里式替換原則
只要父類能出現(xiàn)的地方我子類就可以出現(xiàn),而且調(diào)用子類還不產(chǎn)生任何的錯誤或異常,調(diào)用者可能根本就不需要知道是父類還是子類。但是反過來就不成了,有子類出現(xiàn)的地方,父類未必就能適應。里式替換原則包含了四層意思:
- 子類必須完全的實現(xiàn)父類的方法。我們經(jīng)常寫service會定義一個接口或者抽象類,然后編寫實現(xiàn),調(diào)用類則直接傳入接口或抽象類,其實這里已經(jīng)使用了里氏替換法則。
- 子類可以有自己的個性。子類當然可以有自己的行為和外觀了,也就是方法和屬性,在子類出現(xiàn)的地方,父類未必就可以勝任。父類向下轉(zhuǎn)型可能會出現(xiàn)類型轉(zhuǎn)換異常
- 覆蓋或?qū)崿F(xiàn)父類的方法時輸入?yún)?shù)可以被放大。
- 覆蓋或?qū)崿F(xiàn)父類的方法是輸出結(jié)果可以被縮小。
-
依賴倒置原則
依賴倒置原則的本質(zhì)就是通過抽象(接口或抽象類)使各個類或模塊的實現(xiàn)彼此獨立,不互相影響,實現(xiàn)模塊間的松耦合。我們在項目中使用這個原則要遵循下面的規(guī)則:
每個類盡量都有接口或者抽象類,或者抽象類和接口兩都具備
變量的表面類型盡量是接口或者抽象類
任何類都不應該從具體類派生
盡量不要覆寫基類的方法
-
接口隔離原則
客戶端不應該依賴它不需要的接口,客戶端需要什么接口就提供什么接口,把不需要的接口剔除掉,對接口進行細化,保證其純潔性。通俗的講就是:建立單一接口,不要建立臃腫龐大的接口。
-
迪米特法則
一個對象應該對其他對象有最少的了解,通俗的講,一個類對自己需要耦合/調(diào)用的類應該知道的最少,這個類內(nèi)部是怎么復雜、怎么糾纏不清都和我沒關(guān)系。盡量不要對外公布太多public方法和非靜態(tài)的public變量,盡量內(nèi)斂,多使用private、package-private、protected等訪問權(quán)限
-
開閉原則
類、方法對于擴展是開放的,對于修改是關(guān)閉的,在程序需要進行拓展的時候,不能去修改原來的代碼。
24種設計模式
單例模式
工廠模式
建造者模式
觀察者模式
有觀察者和被觀察者,被觀察者接口:增加觀察者、刪除觀察者,通知觀察者更新 觀察者:被觀察者發(fā)送消息了,我自己也要做些什么
責任鏈模式
適配器模式
mysql的優(yōu)化
十家公司有九家會問,這個必須要記住。基本上只要記住我寫的這些,面試基本上穩(wěn)了:
- 數(shù)據(jù)庫表設計優(yōu)化
- 所有表必須使用Innodb存儲引擎
- 字符集統(tǒng)一使用utf-8
- 字段加注釋
- 控制單表數(shù)據(jù)量的大小,建議控制在500w內(nèi)
- 冷熱數(shù)據(jù)分離,減小表寬度
- 禁止存儲圖片,文件等二進制數(shù)據(jù)
- 三大范式
- 數(shù)據(jù)庫字段設計優(yōu)化
- 優(yōu)先選擇符合存儲條件最小的數(shù)據(jù)類型,能用tinyint的就不用int,能用varchar的不用text
- 避免使用text,blob數(shù)據(jù)類型
- 盡可能把所有列定義為not null
- 索引設計優(yōu)化
- 限制每張表的索引數(shù)量,單張表不超過5個
- 禁止給每一列都建立單獨索引
- 每個表必須有一個主鍵
- 頻繁查詢的字段建立索引
- 編寫sql優(yōu)化
- 建議預編譯語句進行數(shù)據(jù)庫操作
- 避免數(shù)據(jù)類型的隱式轉(zhuǎn)換
- 充分利用表上已經(jīng)存在的索引
- 不要使用select * 查詢,要使用select <字段列表> 查詢
- 避免使用子查詢,把子查詢優(yōu)化成join操作
- 避免使用join關(guān)聯(lián)太多得表
- 對同一列進行or判斷時,使用in代替or
- where從句中禁止對列進行函數(shù)轉(zhuǎn)換和計算
- 在明顯不會有重復值時使用union all而不是union
- 拆分復雜的大SQL為多個小SQL
- 使用 group by 分組查詢是,默認分組后,還會排序,可能會降低速度,在 group by 后面增加 order by null 就可以防止排序.
jvm內(nèi)存模型
必考題,抽時間看看深入理解jvm虛擬機吧。
總結(jié)
面試和工作是兩回事,面試沒通過的人,工作能力不一定比你弱,面試通過的人,工作能力不一定比你強。所以面試沒通過也不要灰心,回去好好總結(jié)復盤,不要因為失敗就喪失斗志,加油!
點此處鏈接https://docs.qq.com/doc/DS0ljdVdNYm1CWWN3直達面試資料和Java架構(gòu)進階資料獲取通道。