最開始是打算面試外包公司刷經(jīng)驗,等經(jīng)驗差不多了,再去甲方嘗試,可惜不太順利。
一、邁思(面試了30分鐘)
- 自我介紹
- 左連接(a 表左連接 b 表,a 表全部數(shù)據(jù)出來,b 表沒有的數(shù)據(jù)為空)
- a 表左連接 b 表,b 表左連接 c 表,c 表左連接 a 表,這樣的數(shù)據(jù)是什么數(shù)據(jù)(博主當時有點懵,回答全連接,全部數(shù)據(jù)會出來。。。)
- sql:一個班的學生有兩個字段,一個字段叫分數(shù),另外一個字段叫組名,有 4 個組,查出每個組的第一名,sql 怎么寫
select group_name,max(score) from table group by group_name order by group_name
5.數(shù)據(jù)庫引擎有哪些(myIsam,InnoDB 等等)
- myIsam 和 Inno DB的區(qū)別(InnoDB 支持事務,外鍵,崩潰后恢復,InnoDB 行級鎖,myIsam 表級鎖)
- myIsam 的優(yōu)點(博主當時只記住了 InnoDB 的優(yōu)點,沒想到面試官問到了 myIsam 的優(yōu)點,速度快,磁盤空間占用少)
- Spring 的兩個特性(IOC 和 aop,這兩個特性用到了哪些設計模式)
- JAVA 的容器,集合(老生常談了,list, set, map 等等,另外說一下有哪些實現(xiàn)類)
- hashmap 的實現(xiàn)(數(shù)組+鏈表+紅黑樹)
- put 一個 key 和 value,怎么確定數(shù)組的下標,如果有兩個key put到同個位置,怎么做?(根據(jù)key計算hash值,根據(jù)hash確定下標等等)
- HashMap 是線程安全的嗎?有哪些實現(xiàn)?(不是,線程安全的可以用hashtable,concurrentHashMap等等)
- concurrentHashMap 是怎么實現(xiàn)線程安全的?具體的實現(xiàn)?兩個線程同時 put 兩個 key 是怎么做的?
(1.7數(shù)組+鏈表,分段鎖,1.8數(shù)組+鏈表+紅黑樹,cas+synchronized)
- java 集合的排序(stream 中的 sort),內(nèi)部是怎么實現(xiàn)的?原理是什么?了解過哪些排序?
(Comparable和Comparator 參考鏈接)
- java 集合的分組(groupingby (對象::屬性))
- 函數(shù)式方法(接口),什么條件下才能用?這種適用于所有的嗎?還是說有一定的限制?
- 后臺的請求比較慢,一般是什么原因造成的?后臺請求直接卡了,怎么排查,日志沒報錯呢?(查一下慢sql,需要大量運算)
- 怎么查鎖日志,線程日志?(這個不知道)
- 常見線程池,這些都是什么樣的線程池?(newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor,現(xiàn)在有6種線程池了,沒記那么多)
- java 鎖,并簡單說一下鎖,類名,關鍵字,鎖的實現(xiàn)等等(ReentrantLock,迷迷糊糊說了一些,畢竟記得不多)
- 谷歌 guava 緩存用過嗎?(沒用過)
- 項目有哪些難的實現(xiàn),你是怎么做的?(根據(jù)自己的情況去回答)
二、親鄰科技(甲方)
過去面試的時候,是星期五晚上8點多了
一面:hr(不到10分鐘)
簡單自我介紹,對技術,薪資有要求什么的,跳槽原因,評價自己,公司加班挺多的,問能不能接受
二面:技術(不到20分鐘,答的有點差)
- 對稱加密和非對稱加密的區(qū)別
- 跨域腳本攻擊(還有好幾個沒聽過)
- 數(shù)據(jù)庫隔離級別(讀未提交,讀已提交,可重復讀,串行化)
- 不可重復讀和幻讀是什么?(a重復讀同個數(shù)據(jù),b修改數(shù)據(jù),a再次讀,就是不可重復讀;a修改某些數(shù)據(jù),b從中插入一條數(shù)據(jù),a會發(fā)現(xiàn)還有一條數(shù)據(jù)沒修改,那么就是幻讀)
- 死鎖是什么?產(chǎn)生原因?怎么解決(競爭同一資源,四個條件,破壞四個條件,這一塊沒答好)
- 服務器 cpu 百分百,怎么排查(ps 查看進程,答的不是很好,畢竟這方面沒研究。雖然公司也遇到了 cpu 百分百的情況,但是解決辦法是把需要大量運算的 mrp 功能給禁掉,后面加內(nèi)存,加服務器。這一塊我可不敢實話實說)
- Nginx 可以用來做什么(負載均衡,反向代理,面試官還繼續(xù)問還有呢,我不知道什么了,我說可以攔截 ip 等等)
- cas 是什么?(樂觀鎖的一種實現(xiàn),會造成aba問題,加版本號或者時間戳)
- redis 持久化機制,rdb 和 aof 的優(yōu)缺點(全量數(shù)據(jù)備份,安全性低,備份間隔時間長;增量數(shù)據(jù)備份,數(shù)據(jù)安全,文件大)
- spring 異步注解(沒用過)
- 講一講類加載機制
- 內(nèi)存泄露和內(nèi)存溢出的區(qū)別
- 還問了其他一些題目,不太記得了
- 講一講項目,你是怎么做的
三、奧薩醫(yī)藥(甲方,面試了35分鐘左右)
看到一個小姐姐,問路,好漂亮
進去之后,填資料,填完資料,就問問題
- MySQL 的常用引擎,區(qū)別(InnoDB:支持事務,外鍵,行鎖,支持崩潰后恢復,面試官還問為什么能恢復。Myisam: 表鎖,全文索引)
- sql 有哪些優(yōu)化,常用索引(查詢哪些字段,不要用*, null, like后面的"% 等等)
- sql 語句執(zhí)行的過程是怎么樣的?怎么分析 explain
- 假如有 100w 數(shù)據(jù),我想要第 60 萬行之后的數(shù)據(jù),怎么優(yōu)化(用limit,加索引,面試官太變態(tài)了,問加了這些還很慢,怎么辦)
- redis 是什么,為什么比 mongodb 熱門?(非關系型數(shù)據(jù)庫,基于內(nèi)存等等,為什么熱門,這個我就說不知道了,因為不知道 mongodb)
- 什么是非關系型數(shù)據(jù)庫,與關系型數(shù)據(jù)庫的區(qū)別?(沒回答好)
- 除了基于內(nèi)存,讀取速度快,還有哪些原因讓 redis 快?(沒回答好)
- 常用的數(shù)據(jù)類型,應用場景(String,List,Set,Zset,Hash,面試官還問為什么,額,簡直是抽絲剝繭呢)
- 持久化機制,rdb 和 aof 的區(qū)別,你會怎么選擇哪種機制(全量和增量,備份時間長短,數(shù)據(jù)安全等等,現(xiàn)在有混合機制)
- 淘汰策略有哪些(答到過期策略那里去了,面試官提醒了)
- redis 為什么可以對 String 進行自增自減運算(這個不知道)
- redis 怎么進行優(yōu)化?(不知道)
- java 常用的集合有哪些?(list,set,map,實現(xiàn)類)
- arrayList 和 linkedList 的區(qū)別(數(shù)據(jù)結構,讀取和增刪速度,線程安全copyonwriteArrayList)
- 我想要插入幾十萬數(shù)據(jù)到 arrayList,有什么優(yōu)化方法?(這個還真的不知道了)
- hashmap 底層結構,put的過程?為什么要加紅黑數(shù)?結構全部用紅黑樹可以嗎?(數(shù)組+鏈表+紅黑樹,根據(jù) key 計算 hash,根據(jù) hash 計算下標,下標為 null 就賦值,不為 null,就遍歷判斷 hashcode 相等等等,1.7用頭插,1.8用尾插,加紅黑樹是穩(wěn)定,效率。數(shù)組查詢時間復雜度o(1),鏈表增刪時間復制度o(1),紅黑樹o(log n),效率沒有前面兩者高,所以,不能全部用紅黑樹)
- concurrenthashmap 的結構(1.7分段鎖,1.8cas+synchronize)
- synchronized和 lock 的區(qū)別
- hashtable 和 concurrenthashmap 的區(qū)別(結構不同,hashtable是鎖整個對象和方法)
- 有哪些 java 的鎖?實現(xiàn)類?cas 是什么?aqs 是什么?(樂觀悲觀,公平非公平,只說了 ReentrantLock,面試官接著問還有呢?cas,樂觀鎖的實現(xiàn),會造成 aba 問題,加版本號或者時間戳。aqs 是鎖框架)
- 線程池怎么使用,常用的參數(shù)?(使用 ThreadPoolExcutor,核心線程數(shù),最大線程數(shù),時間,隊列,線程工廠,拒絕策略)
- 假如有 50 個任務去執(zhí)行,5 個核心線程,10 個最大線程數(shù),10 個任務隊列,流程是怎么樣的,狀態(tài)是怎么樣的?多余的任務是怎么用拒絕策略的(創(chuàng)建 5 個核心線程,10 個放隊列,隊列滿了,再創(chuàng)建 10 個非核心線程,剩余 25 個根據(jù)拒絕策略來決定,默認報異常,其余三種:要么忽略,要么放棄最早的線程,要么用該線程去執(zhí)行)(后來才知道回答錯了,10 個最大線程數(shù),5個核心 + 5個非核心,剩下的 30 個走拒絕策略)
面試官給我的評價:面試的都能答出來,這一點很不錯,但了解的不深,雖然工作上用不到,但是面試就是這樣造火箭的。面試不會差,但也不優(yōu)秀,處于待定狀態(tài)。
四、金蝶軟件(甲方,面試了40分鐘)
- 問的項目問題比較多,怎么設計功能的,數(shù)據(jù)庫是怎么設計的
- 左連接,右連接,內(nèi)連接的區(qū)別
- mysql 執(zhí)行計劃,有哪些看的
- springmvc 執(zhí)行過程,從前端到后臺,再返回前端的過程
- 權限驗證,驗權怎么做
- 數(shù)據(jù)庫的鎖(樂觀鎖,悲觀鎖,獨占鎖,共享鎖)
- select, update, delete 對應哪些鎖
- java 集合體系(list,set,map)
- arraylist 刪除元素有哪些注意的地方
- arraylist 是線程安全的嗎(不是,線程安全:vector,copyonwritearraylist)
- 什么時候用 arraylist,linkedList(頻繁增刪用 linkedList)
- 深拷貝和淺拷貝
- 值傳遞和引用傳遞
- 多線程,線程池
- 資源同步是怎么做的?
- synchronized 可以修飾靜態(tài)類嗎
- lock 和 synchronized 的區(qū)別?用的話,你會怎么選
- 平時怎么學習的(看教程,看博客)
- 自己的規(guī)劃是什么?(規(guī)劃學微服務,分布式等等)
- 技術方面的優(yōu)勢是什么
- 代碼怎么優(yōu)化,重構(單一職責,共用等等)
- 自己的網(wǎng)站是怎么進行性能優(yōu)化的?(加 cdn,加 redis)
- 你有什么想問我的?你們那邊用到的技術是什么?面試官:技術桟是封裝框架,沒有前端,用拖拉組件什么的,微服務是 dubbo,數(shù)據(jù)庫是 oracle,側(cè)重點是業(yè)務,技術次要。
最后面試官說:有四輪面試,這邊面試完跟總監(jiān)商量一下(剩下3輪都不是技術面)
五、平安銀行(外包,面試了40分鐘,因為有事,最后中斷了)
- spirngboot 啟動原理(內(nèi)嵌 Tomcat....)
- 啟動的注解(springbootApplication)
- springboot 核心配置
- 配置文件的方式(yml, properties)
- springmvc 的工作流程
- springmvc 的組件
- @RequestMapping 的作用(攔截 url)
- spring 常用的模塊,核心
- 說一說 ioc 和 aop
- spring 常用的注入方式
- spring 的 bean 有沒有了解
- spring 事務的實現(xiàn)
- spring 的隔離
- 數(shù)據(jù)庫的隔離級別(讀未提交,讀已提交,可重復讀,串行化)
- 隔離級別的影響(臟讀,不可重復讀,幻讀)
- 原子性,持久性(不可分割,保存到數(shù)據(jù)庫)
- char 和 varchar 的區(qū)別(字節(jié)大小,''和"")面試官繼續(xù)問還有沒有。。。
- left join 和 right join 的區(qū)別
- sql 你是怎么調(diào)優(yōu)的
- sql 執(zhí)行計劃(explain)
- sql 的行鎖和表鎖,優(yōu)勢(鎖一行和鎖整個表)
- 樂觀鎖,悲觀鎖(版本號,時間戳)
- mysql 的引擎,區(qū)別(innodb 支持外鍵,行鎖,支持奔潰恢復,myisam 支持全文索引)
- select count(*) from table,數(shù)據(jù)是怎么執(zhí)行的,會造成全表掃描嗎(innodb,不支持全文索引,所以在innodb會造成全表掃描)
- float 和 double 內(nèi)存占多少字節(jié)
- 在自增表,有6條數(shù)據(jù),刪了兩條數(shù)據(jù),再增加一條數(shù)據(jù),這條數(shù)據(jù)的id是多少(innodb是7,myisam是5,結果說反了)
- redis使用場景,和 memcache 的區(qū)別
- redis 的持久化(rdb 和 aof,全量,增量)
- 了解 redis 分布式,有多少個節(jié)點,以及一些命令
- nginx應用場景(前后端分離,負載均衡)
- 負載均衡的策略(輪詢,權重等等)
- 前后端是怎么交互的
- 正向代理和反向代理
- swagger 有了解嗎(接口文檔)
- == 和 equals 的區(qū)別
- 堆棧有了解嗎
- stringbuilder 和 stringbuffer 的區(qū)別(線程安全,效率)
- io 流(reader和writer,inputstream和outputstream)
- fileinputstream 和 bufferinputstream 的區(qū)別
- 集合(list,set,map)
- 線程安全的集合有哪些(vector,copyonwritearraylist,hashtable, concurrenthashmap)
- hashmap的實現(xiàn)過程(1.7頭插,1.8尾插)
- hashset 和 linkedhashset(底層hashmap,有序,底層 linkedhashmap,無序)
- 深拷貝,淺拷貝
問的時間差不多40分鐘了,因為還要工作,就打斷面試了,結果晚上就來了第二輪面試
平安銀行第二輪面試(面試了26分鐘)
- mysql 查詢,有很多關聯(lián)的表,怎么優(yōu)化(表加字段,適當冗余,少關聯(lián)表,不要用*,in,null,or, %等等)
- 索引失效的情況(in,null,or, %等等)
- 常用的集合類(list,set,map及實現(xiàn)類)
- 線程安全的容器有哪些(vector,copyonwritearraylist,hashtable,concurrenthashmap)
- concurrenthashmap 是怎么保證線程安全的(1.7用分段鎖,16個都上鎖,1.8用cas+syn)
- hashmap 的數(shù)據(jù)結構(1.7數(shù)組+鏈表,多線程會形成一個環(huán),cpu會飆升100%,1.8數(shù)組+鏈表+紅黑樹)
- 什么情況下會轉(zhuǎn)成紅黑樹(key,hash,數(shù)組大于64,鏈表大于8,轉(zhuǎn)成紅黑樹)
- 重寫了 equals,還需要重寫 hashcode 方法嗎(因為根據(jù) key,hash 計算出來有可能會沖突,所以要重寫hashcode)
- 鏈表是雙向鏈表嗎
- redis的數(shù)據(jù)結構(string,set,sort set,list,hash,bitmap等等)
- redis 分布式鎖
- b+ 樹了解嗎(mysql索引)
- 緩存擊穿(緩存失效,在緩存找不到,在數(shù)據(jù)庫有數(shù)據(jù))
- 解決辦法(設置緩存失效時間隨機,錯開時間,或者給個標記)(其實是設置熱點數(shù)據(jù)永遠不過期或者加互斥鎖等等)
- threadlocal有了解嗎(發(fā)音沒聽清,聽成什么logo了,聽了三遍沒聽出來,后面才反應他要說什么)
- 項目中遇到的困難(mrp功能)
- 服務器 cpu 上升到90以上的時候,還可以用多線程嗎?
- 最近有研究什么新的技術嗎?(在學習微服務)
- 微服務相關組件,一些沒聽過(說了一下這些是干嘛的)
- zookeeper有了解嗎(分布式)
- 內(nèi)存泄露有哪些情況?
- 從專業(yè)角度+性格,評價自己
- 你希望的項目是什么樣的?(技術桟,技術氛圍)
- linux常用命令(ls,cd,pwd,chmod,vi,whereis,find二進制文件)
面試官:到崗時間比較急,技術棧是 springboot+dubbo,微服務集群,zookeeper+redis+mysql 等等
面試評價:沒什么大問題,希望快點入職
結尾
jvm,微服務和分布式等等的沒有記錄了,自己沒接觸過,聽到了也忘記,沒有及時寫上去。還有一些面試,沒有去記錄了,整理和記錄面試挺費時間的,上面的主要記錄技術面試。有些終面,面了 40 分鐘,問生活細節(jié),有什么愛好,之前寫的博客,還記得嗎?xx篇,你還記得寫了什么內(nèi)容嗎?你是哪里人,將來是不是還待在深圳?暈死,一直問,問了 40 多分鐘,如果我不打斷,可能會一個小時以上。像這樣的流水賬面試,就沒有寫到上面去了。
最后比較幸運,拿下幾個 offer,面試題還是得多刷題,避免答不出來,另外收到offer的機會才會多。
總結
待的公司,比較安逸穩(wěn)定,也算是個溫室,業(yè)務比較復雜(ERP 系統(tǒng)),項目架構比較簡單,單體項目,去年說加緩存的一直沒加,單表數(shù)據(jù)最多是上千,現(xiàn)在是 260 多張表。目前有 20 個客戶,cpu 飄升到百分之 90,之后,服務器奔潰,好幾次都這樣。后來我們 CTO 的解決辦法是把功能給禁掉(MRP 運算),后來發(fā)現(xiàn)是報表問題,oom 錯誤,換了報表工具。過了一段時間,加了內(nèi)存,加服務器。(微服務,分布式,緩存,集群,消息隊列都沒用到,也學不到),一直做一些復雜的業(yè)務功能,寫業(yè)務代碼。還是早一點離開技術得不到提升的地方,雖然他一直給我洗腦,說會那么多技術有什么用,你業(yè)務不會,代碼不會寫,會再多技術也是等于零。但我心里一直否認,畢竟我是搞技術的,懂基本業(yè)務可以,討論業(yè)務,需求可以交給項目經(jīng)理什么的,最后安排我做什么就行了。除非走業(yè)務路線,走管理,懂技術懂業(yè)務。像我這種學五渣,不適合走業(yè)務。
原文鏈接 http://www.xuluowuhen.com/article/1596454872






