Keep Java 開發實習生面試

一面

  • 自我介紹
  • 問項目
  • int[]數組長度爲n,問數組中連續m個數的最大值
  • 鏈表反轉
  • 20w條ip地址的數據,給一個ip地址,怎麼找到?
  • 設計用戶發微博的數據庫,以及查看首頁功能
    • 首頁時間線表,但對於大V發微博,告知關注者的時間線處理有問題
  • 微博用戶羣組問題,怎麼做到分羣組?
    • 圖的BFS
  • 對設計的微博的表,怎麼建索引?建索引爲什麼會快?
  • http和https的區別?https的加密過程?

Q:哪些情況需要加索引?

  • 在經常需要搜索的列上,可以加快搜索的速度;
  • 在作爲主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
  • 在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
  • 在經常需要根據範圍進行搜索的列上創建索引,因爲索引已經排序,其指定的範圍是連續的;
  • 在經常需要排序的列上創建索引,因爲索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
  • 在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。

Q:哪些情況不需要加索引?

  • 第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因爲,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
  • 第二,對於那些只有很少數據值的列也不應該增加索引。這是因爲,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。
  • 第三,對於那些定義爲text, image和bit數據類型的列不應該增加索引。這是因爲,這些列的數據量要麼相當大,要麼取值很少。
  • 第四,當修改性能遠遠大於檢索性能時,不應該創建索引。這是因爲,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引。

Q:數據庫建立索引爲什麼會加快查詢速度?

首先明白爲什麼索引會增加速度,DB在執行一條Sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一字段增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。

HTTPS通信過程

二面

  • 介紹項目
  • 垃圾回收策略
  • HotSpot垃圾收集器,G1的特點,優缺點…
  • 爲什麼Eden: Survivor: Survivor是8:1:1 ?
  • IOC,IOC的初始化過程?
    • 低級容器 加載配置文件(從 XML,數據庫,Applet),並解析成 BeanDefinition 到低級容器中。
    • 加載成功後,高級容器啓動高級功能,例如接口回調,監聽器,自動實例化單例,發佈事件等等功能。
  • AOP,AOP的動態代理怎麼做?
    • InvocationHandler接口
  • concurrent包裏有些啥?
  • ThreadPoolExecutor類得看源碼
  • Java鎖機制,Java怎麼實現CAS的?多線程i++問題?AtomicInteger?UnSafe類?

IoC 在 Spring 裏,只需要低級容器就可以實現,2 個步驟:

  • 加載配置文件,解析成 BeanDefinition 放在 Map 裏。
  • 調用 getBean 的時候,從 BeanDefinition 所屬的 Map 裏,拿出 Class 對象進行實例化,同時,如果有依賴關係,將遞歸調用 getBean 方法 —— 完成依賴注入。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章