兩年后端的面試分享

從今年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)的評價,再考慮要不要去面試的事。我之前面過兩家都是需要筆試的,筆試沒通過是直接沒有后面的面試的(有的面試題非常腦殘,下面上圖),來回也比較遠,浪費了我一個上午的時間。

image

面試準備

面試的時候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)在派上了用場。

項目中遇到的難題,解決了之后其實都不是什么難題了。我列幾個點可以參考一下:

  1. 跨域
  2. 任務調(diào)度冪等性
  3. 使用mq遇到的問題
  4. 分布式系統(tǒng)中的事務問題
  5. 內(nèi)存溢出問題

當然最后還是要自己的專業(yè)技能扎實,才能獲取源源不斷的offer。

[圖片上傳失敗...(image-eb9037-1601200494960)]

<figcaption></figcaption>

面試經(jīng)驗

接下來分享一些這段時間的面試公司

騰云億想

騰訊云全資子公司,其實就是騰訊云的外包公司

  1. 數(shù)據(jù)庫有哪幾種索引
  2. springboot原理,如何實現(xiàn)的自動裝配
  3. springboot打包成jar之后,怎么做到不重新打包修改他的properties配置文件
  4. jvm調(diào)優(yōu)做過嗎,有哪些參數(shù)可以調(diào),具體怎么調(diào)

第一次面試,尷尬的是我基本上沒打上來,只回答上了springboot原理,居然還叫我去hr面,要把這個崗位確定下來,我拒絕了。

壘知科技研究院

上市公司,原來叫做建研集團,做建筑相關(guān)的工程。

  1. 你用過SpringBoot的哪些注解

    1. @component,@service,@controller,@controlleradvice,@Repository
    2. @Autowired,@Inject,@Resource,@Qualifier,一般@Resource單獨使用,@Qualifier會和@Autowired一起用
    3. @dependsOn
    4. @Configuration,@bean, @ComponentScan,
    5. @Aspect,@PointCut,
    6. @Scope,@PostConstruct,@PreDestory
  2. Spring的Bean默認是單例還是多例,我想改成多例的怎么辦

  3. 項目中用到了rabbitmq,使用中遇到什么問題

  4. rabbitmq重復消費怎么解決,除了數(shù)據(jù)庫里查記錄還有其他什么方法

  5. 分布式鎖怎么實現(xiàn),redis實現(xiàn)方式死鎖怎么解決

    我:數(shù)據(jù)庫實現(xiàn),redis實現(xiàn),zookeeper實現(xiàn)。redis加上一個失效時間

  6. mysql索引怎么實現(xiàn)的,btree索引有什么特點

  7. 現(xiàn)在有一個聯(lián)合索引(A,B) 我有一個sql語句是

    select xxx from xxx where A=xxx 會用到索引嗎

    select xxx from xxx whereB=xxx 會用到索引嗎 為什么會是最左匹配原則

  8. ArrayList實現(xiàn)了哪些接口

    說了List、Cloneable、Serializable,我覺得他應該是想問RandomAccess接口,當時沒回答上這個

  9. 代碼優(yōu)化怎么做的

  10. nginx怎么配置負載均衡

  11. 閉鎖怎么用,什么原理

  12. 二分查找法,時間復雜度

自我感覺回答得不是很好,但是第二天收到了復試邀請,還挺驚訝的。

復試先是做一套性格測試題,然后就是項目主管來面試我,問了一下畢業(yè)學校,為啥學校挺好還是科班出身,為啥畢業(yè)會進小公司。然后問了下我現(xiàn)在的職位級別,接下來就巴拉巴拉開始夸他們公司。

然后就是cto面試,也沒問技術(shù),就問了問家里的情況,未來職業(yè)規(guī)劃,然后說他是從華為出來的,公司實行狼性文化,加班是經(jīng)常的。正題來了,他說待遇是不會高于我上家公司的,但是進他們公司未來的發(fā)展肯定會很好。我就有點不太舒服,就嘆氣嘛,然后他說我唉聲嘆息比較悲觀,進公司會影響其他人,他需要的是一個時刻保持樂觀的人,能給團隊帶來活力。

image.png

<figcaption></figcaption>

我整個人都傻了。

西南凱亞

中國民航的子公司,是一家國企。

先要提前一天做一套線上筆試題,不管有沒有通過,第二天都是要去面試的。

主要是項目相關(guān)的,業(yè)務上的東西問得多

代碼優(yōu)化

mysql優(yōu)化

jvm內(nèi)存模型

spring cloud用過哪些組件 講講熔斷機制

為什么離開上家公司

不是很難但是沒有offer,心態(tài)崩了。

image.png

<figcaption></figcaption>

睿沿科技

做人臉識別相關(guān)的,和我上家公司做的產(chǎn)品差不多。

  1. Hashmap原理

  2. ConcurrentHashMap原理,為什么多線程條件下性能這么好

    我從sync在1.6做的優(yōu)化談的,他從鎖的粒度方面談的

  3. 項目相關(guān)

  4. 代碼優(yōu)化

  5. mysql優(yōu)化

  6. spring的aop怎么實現(xiàn)的

  7. 每天抓拍的數(shù)據(jù)量比較大,有做過分庫分表嗎

    用的shardingjdbc 還有mycat,中小公司一般用shardingjdbc,

  8. Rabbitmq實現(xiàn)原理

    不知道

后面兩個沒有回答好吧,所以沒有后續(xù)了。

小海豚能源科技

這家應該是要找做全棧的吧,開頭就問我好幾個前端相關(guān)的,我直接懵了,理所當然的沒有后續(xù)了

  1. 用過jquery哪些框架

  2. es6語法熟悉嗎

  3. vue用過哪些組件

  4. spring用過哪些注解

  5. 使用@autowired注入的時候,如果這個接口有多個實現(xiàn),怎么指定注入哪一個的實現(xiàn)

  6. eureka搭過集群嗎

  7. mysql優(yōu)化,什么時候不會用到索引

    1. select *,可能會導致不走索引

    2. where后面有函數(shù)運算,導致不走索引

    3. 索引不適用于隱式轉(zhuǎn)換的情況,比如你的SELECT FROM T WHERE Y = 5 在Y上面有一個索引,但是Y列是VARCHAR2的,那么Oracle會將上面的5進行一個隱式的轉(zhuǎn)換,SELECT FROM T WHERE TO_NUMBER(Y) = 5,這個時候也是有可能用不到索引的。

    4. like查詢使用通配符開頭不會用到索引

    但是這些好像不是他想要的答案,我也猜不透。。

  8. 接受長期出差嗎

開通金融

做互聯(lián)網(wǎng)金融的,公司總部在北京,我面試的時候是在成都的新網(wǎng)銀行公司,看這個模式應該就是駐場開發(fā)了,但是公司本身不是外包。

  1. springboot和spring的不同
  2. springboot特性,自動裝配怎么實現(xiàn)的
  3. spring用到哪些組件,具體場景
  4. spring默認是單例還是多例,全局變量會有什么問題
  5. spring事務傳播行為、隔離級別
  6. aop實現(xiàn)方式,jdk動態(tài)代理和cglib動態(tài)代理區(qū)別
  7. jdk lambda表達式幾種使用方式,取最大和最小值,list轉(zhuǎn)map,list中有重復的怎么辦
  8. 線程池 有哪些參數(shù),各個參數(shù)的意義
  9. ioc容器有什么優(yōu)點
  10. jvm 堆棧,區(qū)別,線程共享還是線程私有的
  11. springcloud組件、用途,負載均衡的幾種算法
  12. 分布式事務怎么做的
  13. mybatis一對多,多對多怎么做
  14. jpa和mybatis區(qū)別
  15. vmstat命令干嘛的
  16. redis查看內(nèi)存占用命令
  17. mysql導入大量數(shù)據(jù)怎么優(yōu)化
  18. mysql有一條數(shù)據(jù)死鎖了,怎么排查問題,mysql表死鎖,怎么排查
  19. nginx反向代理是什么,正向代理呢

這次面試回答得挺好的,hr也打了好幾次電話說面試官對我挺有意向的,就是一頓操作猛如虎,一問工資0.9。而且我當時還是在職,要求我一周到崗,我就沒去。

蘭亭集勢

做海外電商的公司,但是進去之后是做一些小系統(tǒng)的開發(fā),問的問題有點像校招一樣,我是應屆畢業(yè)生說不定能答出來。

  1. 看過開源框架源碼嗎,SpringBoot自動裝配原理
  2. 寫個冒泡,寫個單例模式
  3. mybatis和jdbc怎么防止sql注入
  4. 單一職責原則是什么,里式替換原則是什么
  5. 3NF是什么
  6. 接口定義一個變量,這個變量的默認作用域
  7. 有沒有自己搭建過微服務
  8. linux怎么看java進程,除了jps和top命令還有其他的嗎
  9. 最近看什么書,我回答多線程并發(fā)相關(guān)的,他:沒用,要在項目里用才有用
  10. 最近在學什么技術(shù)?docker,他:沒用,很簡單不需要學習
  11. 有個部門表,怎么設計他的字段,獲取一個部門下的所有子部門,除了遞歸還有什么方法?加個code字段,通過部門前綴like查詢

京東物流(自帶簡歷)

朋友內(nèi)推的,聽他說是穩(wěn)了,去面就能過,結(jié)果還是翻車了。

  1. java特點描述一下,繼承封裝多態(tài)分別是什么意思

  2. synchronized和lock區(qū)別

  3. ConcurrentHashMap線程安全怎么實現(xiàn)的

  4. 創(chuàng)建線程的幾種方式,創(chuàng)建線程池幾個參數(shù)的含義,線程飽和策略

  5. sleep和wait區(qū)別

  6. spring是單例還是多例,多線程并發(fā)會出現(xiàn)什么問題

  7. SpringBoot如何解決跨域,具體怎么配置

  8. 全局異常捕獲怎么做的

  9. SpringSecurity的前后端分離,登錄怎么做的

    我:攔截登錄的url,然后獲取到用戶名和密碼,把這個用戶名和密碼交給manager,manager會交給具體的provider處理,provider會調(diào)用UserDetailsService的方法完成驗證。

    這里是我失誤了,他說用戶名和密碼時通過getattribute 獲取到的嗎,我說是的。

  10. 怎么設計一個安全的對外接口

  11. 單線程的redis為什么這么快

  12. redis持久化方式

  13. 什么是聚簇索引,什么是非聚簇索引

  14. mysql事務隔離級別

  15. 你覺得你能承擔獨立開發(fā)的任務嗎

其他問題回答得挺好的,自我感覺不錯,本來以為能收到offer的,但是朋友說那個面試官覺得我不行,不能承擔獨立開發(fā)系統(tǒng)的任務,估計是第8個問題回答失誤了吧,其他我覺得我回答沒有問題。

教育家網(wǎng)絡科技

面試的人比較多,所以是群面,一個面試官對應多個面試者。雖然我回答得比另外一個面試者好很多,但是沒有收到offer,很迷,真的很迷。

  1. 介紹項目,然后基本上就圍繞著項目的業(yè)務說
  2. 對金額的計算用什么類型,數(shù)據(jù)庫中用什么類型存儲
  3. SpringBoot怎么自定義注解
  4. mysql優(yōu)化,like查詢的時候,數(shù)據(jù)量很大,如果like查詢以%開頭,不會走索引,怎么優(yōu)化。多表關(guān)聯(lián)查詢,怎么優(yōu)化
  5. 代碼優(yōu)化怎么做的,平時重構(gòu)從哪方面考慮

??到煌ù髷?shù)據(jù)

??迪旅娴囊患曳止荆饕鲕囕v交通相關(guān)大屏數(shù)據(jù)統(tǒng)計報表之類的,面試官和我一個學校的學長,開頭就問我是哪個老師教的,嚇我一跳哈哈哈哈,我以為給老師丟臉了。

  1. HashMap原理,底層結(jié)構(gòu),1.7和1.8區(qū)別,頭插法還是尾插法、線程安全嗎
  2. ConcurentHashMap在什么地方加的鎖,1.7和1.8區(qū)別,1.7用的segment,1.8用的synchronized
  3. lock和synchronized這兩個區(qū)別,1.6之后對synchronized做了什么優(yōu)化
  4. 偏向鎖、輕量級鎖是怎么做到的,我回答的是每個對象都有對象頭,對象頭里做的標記,然后他問我對象頭里有哪些信息
  5. list和數(shù)組區(qū)別,哪個會內(nèi)存泄漏,查詢的話哪個快點。我覺得查詢是一樣快的,因為list本來底層就是數(shù)組
  6. 線程池各個參數(shù)介紹一下,原理是什么。你常用哪種線程池,為什么?
  7. 有哪些隊列,你線程池一般用哪種隊列
  8. spring怎么解決循環(huán)依賴
  9. jdk動態(tài)代理和cglib區(qū)別,哪個更快,有沒有看過他們生成的字節(jié)碼文件
  10. cloud相關(guān)的組件用過哪些,hystrix熔斷原理是什么,除了線程池還有什么。熔斷有個半開狀態(tài),有什么用

過程還是挺愉快的吧,就是薪資待遇沒有談到位,比較可惜。

咻電科技(自帶簡歷)

一家做共享充電寶的公司,面試官又是和我一個學校的學長,但是沒有給我放水,很生氣。

image.png

問題:

  1. spring生命周期
  2. 線程池有幾種創(chuàng)建方式
  3. 線程生命周期
  4. eureka原理
  5. lock和sync區(qū)別
  6. 有一個表有幾個億的數(shù)據(jù),寫sql分頁查詢怎么優(yōu)化
  7. redis內(nèi)存淘汰策略有幾種
  8. dubbo熟悉嗎
  9. 臟讀幻讀不可重復讀,怎么解決
  10. jquery冒泡了解嗎

最后問了一些學習相關(guān)的建議,收獲挺多的。

武漢佰鈞成

外包公司,給平安做的一個項目,電話面試,外包都喜歡這種方式。

  1. 設計模式用過哪些
  2. 代碼優(yōu)化怎么做的
  3. bio和nio區(qū)別
  4. springcloud用過哪些組件
  5. mysql優(yōu)化,有做過sql從幾秒優(yōu)化到幾十毫秒的嗎
  6. 項目并發(fā)量多大
  7. 里式替換原則是什么
  8. tpc/ip協(xié)議
  9. 性能優(yōu)化怎么做

外包不是很好進嗎,但是我沒有收到offer。

成都房聯(lián)云碼

  1. 你怎么看單例模式,寫一個雙重鎖檢測的單例模式
  2. string、stringbuilder、stringbuffer區(qū)別
  3. arraylist、linkedlist區(qū)別
  4. hashmap1.7 、1.8底層結(jié)構(gòu)區(qū)別
  5. hashmap、hashtable區(qū)別
  6. 線程的生命周期
  7. spring事務傳播行為,底層實現(xiàn)原理
  8. 聲明bean的幾種方式
  9. spring默認是單例還是多例,怎么實現(xiàn)多例
  10. springmvc流程
  11. jvm內(nèi)存模型
  12. lock和synchronized區(qū)別,最大的區(qū)別是
  13. 代碼優(yōu)化和sql優(yōu)化
  14. 分布式,session怎么解決
  15. redis優(yōu)點
  16. 對外接口怎么保證安全,光是md5簽名加密不行,還有其他方法嗎
  17. 有一個功能模塊,你會怎么安排時間,如果有一個緊急任務完成不了怎么辦
  18. 平時怎么學習的

面完問了一下期望薪資,然后約了二面,二面就簡單問了一下項目相關(guān)的,平時怎么學習的。三面就是hr面,給我發(fā)了offer。

翻車面試

如果各位以后有機會面試別人的話,希望對面試者多一些尊重吧。

  1. 根據(jù)簡歷提前準備好,針對不同的level提不同的問題
  2. 不要問一些偏門的怪題
  3. 問題都是和面試職位相關(guān)的

以下是一些翻車面試,有些公司真的把我心態(tài)搞崩了,導致后面的面試都沒有發(fā)揮好。

協(xié)能共創(chuàng)(自帶簡歷)

公司很小,面試官架子不小,面試全程非常不愉快,經(jīng)常在我說到一半打斷我,挺會嘲諷人的。面試的時候沒有空間了,然后在外面靠近電梯的走廊面試的。

  1. 因為我的項目是做人臉識別相機相關(guān)的,然后他問我圖片處理到算法識別經(jīng)歷了什么過程,我是直接調(diào)算法,最多把jpg格式的圖片轉(zhuǎn)成bgr格式,或者圖片有旋轉(zhuǎn)的,通過exif修正旋轉(zhuǎn)。但是我的回答好像不是他要的,然后就直接打斷我,說我不知道就直接說不知道

  2. rabbitmq用了哪些設計模式。發(fā)布訂閱模式,還有其他的嗎,我不知道,有知道的朋友可以告訴我一下

  3. tcp/ip協(xié)議

  4. 讓你設計eureka,你怎么設計

  5. 樂觀鎖,悲觀鎖介紹一下

    我:樂觀鎖實際上沒有加鎖

    然后他就直接打斷我了,發(fā)出一聲嘲笑,問我:那你覺得什么是鎖。

  6. jvm參數(shù)調(diào)優(yōu)怎么做的

    我回答的是用的微服務部署,有的微服務訪問很頻繁的,就多給他設置一些內(nèi)存,比如網(wǎng)關(guān),一些不怎么用到的,可以設置稍微小一點。然后他說:你們這就是全憑感覺瞎設置唄

哎,面完之后心情低落了很多,難受了一下午,開始質(zhì)疑我自己。

芯軟科技(自帶簡歷)

Boos直聘上標榜的上市公司,我去面試的時候頂多就看見5個人在公司,辦公區(qū)域很空曠很安靜。

  1. 項目介紹

  2. 挑出你在項目里做的一個模塊,談談這個模塊的整個設計

    這個我真不知道怎么回答,你說整個項目怎么設計的我還能畫個架構(gòu)圖啥的給你瞅瞅,但是你這說到具體的模塊設計,我不知道怎么說,最多給你說說數(shù)據(jù)庫怎么設計的

  3. 項目并發(fā)情況

    你這公司規(guī)模還問我這個,不合適吧

  4. 聽你說對linux比較熟,環(huán)境搭建過嗎(tomcat之類的),有沒有遇到什么問題

    搭環(huán)境都成為一個技術(shù)點來問了嘛,反正我現(xiàn)在用docker了。

  5. nginx你們一般做什么,正向代理一般用來干啥

  6. 你會前端啊,說說vue用history打包之后,部署到服務器,nginx需要配置什么

  7. 說說你的優(yōu)點

  8. 假如你最近加班很累(你已經(jīng)很累了,要猝死了),但是項目比較急,你想請假怎么跟領(lǐng)導溝通。

廣東世紀網(wǎng)通信設備股份有限公司(自帶簡歷)

第一次見到這樣問問題的兄弟,挺有新鮮感的,其他公司翻來覆去的就是那幾個問題。就是浪費了我的簡歷,打印一次一塊錢,你還在我的簡歷上涂涂改改,我都不好意思要回簡歷了。

  1. java的序列化和反序列化什么含義 生成的serialVersionUID有什么用

  2. yml文件里有一些屬性,怎么獲取這些屬性

  3. 有一個枚舉類,有很多value和code,然后yml中的一個屬性對應這個code的值,怎么通過code的值獲取到這個對應value

    我想說循環(huán)判斷,但是覺得沒這么簡單,所以沉默了半天。。。。

    然后他說枚舉類里面有一個方法valueOf

    啊這,是他沒表達清楚還是我理解錯了?

  4. final干嘛的,如果有一個final Stirng a = "123",后面還可以改變嗎

  5. 一般io操作會捕獲異常,然后在catch中釋放資源,有更簡單的辦法嗎。

  6. 有一個list,給它按照類里的一個屬性排序

  7. 有個string數(shù)組,里面有些空的值,我想去除空的,怎么做

  8. 線上有個接口速度慢,但是本地測試環(huán)境和線上環(huán)境是一樣的,數(shù)據(jù)量也是一樣,接口速度卻很快。怎么排查

    不知道

中鐵西南研究院

面了這么多家,他家是第一次把我問的說不上話的,是電話面試。

  1. java的繼承和多態(tài)講講,繼承在項目里面是怎么使用的

    在項目里怎么用我不知道怎么回答

  2. 說一下泛型

    泛型提供了編譯時類型安全檢測機制,該機制可以在編譯時期就檢測到非法的類型,避免了運行時的類型轉(zhuǎn)換異常。可能不是他想要的答案?我不知道他想問什么,他說算了下一個問題。

  3. 設計模式,說說簡單工廠模式和抽象工廠模式怎么實現(xiàn)的,區(qū)別

    我不知道怎么描述他的實現(xiàn),不知道各位能不能口述出來。我語言表達能力真不行

  4. java8新特性,講講用過stream里的哪些東西吧

  5. mysql優(yōu)化

    說了一堆,然后說sql操作盡量使用預編譯語句的時候,

    他說:不是mybatis已經(jīng)解決了嘛。。。哎

  6. 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ā)工程師能做的出來的,但是面試就是要問。死記硬背考記憶力唄,只要記住其中幾個常用的配置就行了。

堆大小設置

  1. -Xms:初始堆大小
  2. -Xmx:最大堆大小
  3. -XX:NewSize=n:設置年輕代大小
  4. -XX:NewRatio=n:設置年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代占整個年輕代年老代和的1/4
  5. -XX:SurvivorRatio=n:年輕代中Eden區(qū)與兩個Survivor區(qū)的比值。注意Survivor區(qū)有兩個。如:3,表示Eden:Survivor=3:2,一個Survivor區(qū)占整個年輕代的1/5

收集器設置

  1. -XX:+UseSerialGC:設置串行收集器
  2. -XX:+UseParallelGC:設置并行收集器
  3. -XX:+UseParalledlOldGC:設置并行年老代收集器
  4. -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)化

分為三個維度來談,可以稍微拓展一下:

  1. 整體框架的優(yōu)化,根據(jù)模塊(類)的職責做一些劃分,盡量做到每個模塊的接口清晰。然后就是善用六大設計原則和24種設計模式。
  2. 功能邏輯的優(yōu)化,把內(nèi)聚的邏輯獨立成一個個函數(shù),函數(shù)依賴的數(shù)據(jù)都通過參數(shù)傳遞,這樣做到函數(shù)可重用,當上層結(jié)構(gòu)做出改變的時候,修改的代碼量不會太多。
  3. 性能優(yōu)化,如果性能不敏感,代碼也不是那么糟糕,那這個優(yōu)化可以不用關(guān)注。

六大設計原則

  • 單一職責原則

    接口的單一職責,一個職責一個接口,我們對外公布的是接口,而不是實現(xiàn)類,所以不需要過度關(guān)心實現(xiàn)類是否遵循單一職責,生搬硬套單一職責會引起類的劇增,給維護帶來非常多的麻煩

  • 里式替換原則

    只要父類能出現(xiàn)的地方我子類就可以出現(xiàn),而且調(diào)用子類還不產(chǎn)生任何的錯誤或異常,調(diào)用者可能根本就不需要知道是父類還是子類。但是反過來就不成了,有子類出現(xiàn)的地方,父類未必就能適應。里式替換原則包含了四層意思:

    1. 子類必須完全的實現(xiàn)父類的方法。我們經(jīng)常寫service會定義一個接口或者抽象類,然后編寫實現(xiàn),調(diào)用類則直接傳入接口或抽象類,其實這里已經(jīng)使用了里氏替換法則。
    2. 子類可以有自己的個性。子類當然可以有自己的行為和外觀了,也就是方法和屬性,在子類出現(xiàn)的地方,父類未必就可以勝任。父類向下轉(zhuǎn)型可能會出現(xiàn)類型轉(zhuǎn)換異常
    3. 覆蓋或?qū)崿F(xiàn)父類的方法時輸入?yún)?shù)可以被放大。
    4. 覆蓋或?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)了:

  1. 數(shù)據(jù)庫表設計優(yōu)化
    1. 所有表必須使用Innodb存儲引擎
    2. 字符集統(tǒng)一使用utf-8
    3. 字段加注釋
    4. 控制單表數(shù)據(jù)量的大小,建議控制在500w內(nèi)
    5. 冷熱數(shù)據(jù)分離,減小表寬度
    6. 禁止存儲圖片,文件等二進制數(shù)據(jù)
    7. 三大范式
  2. 數(shù)據(jù)庫字段設計優(yōu)化
    1. 優(yōu)先選擇符合存儲條件最小的數(shù)據(jù)類型,能用tinyint的就不用int,能用varchar的不用text
    2. 避免使用text,blob數(shù)據(jù)類型
    3. 盡可能把所有列定義為not null
  3. 索引設計優(yōu)化
    1. 限制每張表的索引數(shù)量,單張表不超過5個
    2. 禁止給每一列都建立單獨索引
    3. 每個表必須有一個主鍵
    4. 頻繁查詢的字段建立索引
  4. 編寫sql優(yōu)化
    1. 建議預編譯語句進行數(shù)據(jù)庫操作
    2. 避免數(shù)據(jù)類型的隱式轉(zhuǎn)換
    3. 充分利用表上已經(jīng)存在的索引
    4. 不要使用select * 查詢,要使用select <字段列表> 查詢
    5. 避免使用子查詢,把子查詢優(yōu)化成join操作
    6. 避免使用join關(guān)聯(lián)太多得表
    7. 對同一列進行or判斷時,使用in代替or
    8. where從句中禁止對列進行函數(shù)轉(zhuǎn)換和計算
    9. 在明顯不會有重復值時使用union all而不是union
    10. 拆分復雜的大SQL為多個小SQL
    11. 使用 group by 分組查詢是,默認分組后,還會排序,可能會降低速度,在 group by 后面增加 order by null 就可以防止排序.

jvm內(nèi)存模型

必考題,抽時間看看深入理解jvm虛擬機吧。

總結(jié)

面試和工作是兩回事,面試沒通過的人,工作能力不一定比你弱,面試通過的人,工作能力不一定比你強。所以面試沒通過也不要灰心,回去好好總結(jié)復盤,不要因為失敗就喪失斗志,加油!

點此處鏈接https://docs.qq.com/doc/DS0ljdVdNYm1CWWN3直達面試資料和Java架構(gòu)進階資料獲取通道。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容