1. 程式人生 > >2018年10月26日面試回顧

2018年10月26日面試回顧

今天只有上午一場面試,下午的取消掉了。
早上9點半之後就到了,兩輪技術面,一輪hr面,到了12點之後才結束,總體來說還是一場很舒服的面試,跟技術面試官聊的挺好,還學到了不少知識。
一面:

  • 不同資料結構的時間複雜度
  • 講一講集合類都瞭解哪些,常用的有哪些,有什麼區別
  • ArrayList與linkedlish的區別與時間複雜度
  • hashmap的資料介面,時間複雜度
  • set的底層資料結構是什麼
  • 對那種排序熟悉,手寫一個排序方法:冒泡;冒泡的時間複雜度是多少
  • 除了冒泡,還知道其他的什麼排序演算法?桶排序的原理,快排的原理,二分查詢
  • 樹的遍歷方法有哪些?左中右
  • 紅黑樹有什麼瞭解?怎麼實現平衡?
  • 平衡二叉樹有什麼瞭解?
  • MySQL的InnoDB索引用了什麼資料結構?
  • 一個物件如何實現在set中只能儲存一個:重寫equals與hashcode
  • 物件實現集合中的排序需要做什麼:繼承Comparetor
  • 關於執行緒安全的瞭解:synchronized,lock,volatile,原子類,juc,併發容器
  • synchronized與volatile的區別:synchronized是java提供的內建鎖,同步,物件鎖,類鎖;volatile是輕量級同步鎖,保證記憶體可見性,不能保證原子可見性,實現原理為:有執行緒對被volatile修飾的變數進行修改之後,就把資料從工作記憶體刷回主記憶體,同時通知其他持有這個變數的執行緒的資料為無效,之後其他執行緒讀取這個變數的時候需要從主記憶體取最新的資料。
  • 執行緒池:Excutors提供的幾種模板方式,自定義的核心引數:核心執行緒數,最大執行緒數,存活時間,阻塞佇列,執行緒工廠,拒絕策略。
  • 最大執行緒數和阻塞佇列都滿了之後怎麼處理,根據配置的拒絕策略對請求進行處理。
  • jvm有什麼瞭解:執行時資料區的組成部分;垃圾回收演算法;確定物件是否有引用的可達性分析演算法;
  • 什麼情況下會觸發full gc:有大物件直接進老年代時空間不足;或者是老年代做分配擔保時空間不足時。
  • ClassLoader:類載入機制,雙親委派模型的流程:啟動類載入器,擴充套件類載入器,應用程式類載入器,自定義類載入器。
  • 熟悉的資料庫
  • MySQL的索引型別:主鍵索引,唯一索引,聯合索引,文字索引
  • InnoDB的索引為什麼要用b-tree:b-tree,b+tree,葉子結點指標連線,範圍查詢,順序查詢;選擇B樹,資料量太大,只有葉子結點儲存資料,其他結點儲存類似於查詢條件;磁碟的掃描是以頁為單位的,部分載入。
  • 聯合索引的最左匹配
  • left join,right join,inner join的區別
  • MySQL資料庫表結構設計的三大正規化,反正規化:三大正規化的瞭解,插入,資料儲存;反正規化的瞭解,查詢效率;反正規化的使用場景:表中增加冗餘的查詢欄位資料;主表中統計子表資料時在主表中增加派生欄位直接儲存子表資料個數;減少表拆分,多表合併。
  • MySQL的主從原理:binlog的同步的流程
  • springboot的瞭解
  • spring家族知道的有哪些?spring,springboot,SpringCloud,springbatch,springdata
  • springdata有哪幾種
  • spring中的aop介紹一些
  • 面向物件設計模式:工廠,單例,代理,模板,介面卡,觀察者
  • 觀察者模式,UML圖,demo程式碼示例
  • 代理模式:jdk的繼承介面InvocationHandler,Proxy;cglib,產生子類
  • 哪些原始碼用到設計模式的:jdk中的鎖中有模板模式;spring裡有工廠模式,代理,責任鏈;jdk中的IO,動態增加職責的,用裝飾器;
  • Springboot中熟悉的註解:@restcontroller,@requestmapping,@get,@post,@service,@repoity,@mapper
  • @RestController是個複合註解,裡面包含哪些註解,controller,responseBody
  • @SpringBootApplication中包含哪些註解
  • redis中資料結構有哪些
  • redis的持久化方式,快照,增量日誌的方式(類似於mysql的binlog)
  • redis是否自己搭建過
  • redis是單執行緒的,一般多執行緒的效率高一些,為什麼redis的效率會那麼高?單執行緒沒有執行緒上下文切換,鎖,同步,事務的開銷;epoll的多路複用;完全在記憶體中處理速度快
  • nginx有哪些作用?負載均衡,反向代理,靜態檔案快取伺服器
  • 負載均衡的演算法:隨機,hash,輪詢
    二面:
  • 演算法題:對一個int陣列中的元素進行翻轉,第一個與最後一個互換,第二個與倒數第二個互換;for迴圈中用i,j分別表示陣列中從頭開始與從尾開始的元素,迴圈條件:i<陣列長度/2,j<陣列長度/2,i++,j–,在for迴圈中去使用臨時變數執行替換
  • 兩個int值互換除了臨時變數之外還有什麼方法?
    • a=a+b;a=a-b;b=a-b;可能存在的問題,相加溢位
    • 異或,a=a^b;a=a^b;b=a^b;
  • 有個初始化好的List users,把user中年齡小於20的刪除掉
    • users.stream.filter(o->o.getAge >= 20).collectionToList();
    • Iterator it = users.iterator();for(it.hasNext(){User u = it.next();if(u.getAge() < 20){it.remove();}})
    • 再建立一個數組,符合條件的往裡面放
    • 增強for迴圈的方式會拋異常
    • for(int i=0;i<users.size();i++){User u = users.get(i);if(u.getAge()<20){users.remove(i);}}這種方式會存在問題,刪除之後,index的i會跳過未判斷的元素,修改方案有兩個:1、在if判斷中的remove語句之後增加i–,可以解決,但是程式可讀性差;2、i倒序遍歷陣列;
    • 為啥用Iterator,在1.8之前
    • 如果是ArrayList確實不建議使用for迴圈,邊遍歷邊刪除;如果是linkedList,可以進行刪除操作。
  • 資料庫死鎖,獲取鎖超時,鎖等待
  • MySQL聯合索引的使用,直譯器優化
  • memercash與redis,一般情況下redis效能表現挺好,比memercash好,但是redis是單執行緒,memercash是多執行緒,為什麼?
  • 多路複用是什麼意思?
  • 不說多路複用,memercash改為單執行緒,效能是不是就跟redis差不多了?memercash為什麼用多執行緒?
  • 服務化的瞭解,SpringCloud的元件介紹,Eureka,Zuul,Hystrix,Config,Ribbon,Feign,Bus,Stream,鏈路跟蹤
  • Zuul可以做什麼事情?服務路由,鑑權認證校驗,負載均衡,限流
  • linux下vim的頁首,頁尾的命令,/和?的區別
  • 大檔案的檢視命令,less,more,tail
  • 查詢log中的一個關鍵字,不但是一行,還想查詢上面100行,下面100行
  • 近三年的規劃是什麼樣的?一方面是在技術方面擴充套件自己的技術面,分散式,微服務,底層的,另一方面工作機會中有機會的話去在技術管理方面發展
  • 對加班怎麼看?在開發緊張及上線期間加班是正常的,但是加班文化的那種耗著的話不能接受。
  • 如果確實一直都很忙,比如幾個月,小半年,加班到晚上9,10點,能接受嗎?階段性的加班其實還是可以接受的