遠光軟件:2019校招 Java開發(fā) 一二面
面試題
一面 電話面試:
-
java中public、private等的作用
修飾方法、屬性的訪問權限。
-
介紹一下數(shù)據(jù)庫設計的三范式
第一范式:表不可再分
第二范式:消除了非主屬性對主屬性的部分函數(shù)依賴
第三范式:消除了非主屬性對主屬性的傳遞函數(shù)依賴
-
介紹幾個常用的Map容器
-
HashMap:<Key,Value>鍵值對映射,支持null值 -
ConcurrentantMap:jdk1.8以后支持并發(fā)的Map容器 -
HashTable:不支持null的Map容器 -
TreeMap:有序的Map容器
-
-
在有很多張表連接的非常復雜的查詢時如何優(yōu)化
主要解決問題所考慮的角度:
- 優(yōu)化查詢中的連接
- 優(yōu)化表的索引
- 優(yōu)化查詢中的查詢條件
- 從底層執(zhí)行計劃進行優(yōu)化
- 使用
explain對查詢的執(zhí)行情況進行分析
具體的知識點很復雜,要考慮的內容也很多,這里僅給出網(wǎng)上可以參考學習的一些博客帖子:
參考:
-
說一下對
RESTful的理解RESTful,全稱 Representational State Transfer,表示性狀態(tài)轉移,是一種Http接口風格。
主要特點是:- 一般使用
json、xml等格式傳輸數(shù)據(jù)。 - 在接口的調用上采用標準
Http的方法如GET、POST、PUT、DELETE等進行“查詢”、“增加”、“更新”、“刪除”等操作。 - 客戶端和服務器之間是無狀態(tài)的。
- 一般使用
-
數(shù)據(jù)庫進行復雜查詢時,如何優(yōu)化查詢的響應時間
與上面一道題的區(qū)別,在于面試官在這個題中想從系統(tǒng)、架構方面給出解決或優(yōu)化方案,上一題則偏向于只考慮數(shù)據(jù)庫本身。
考慮使用
Redis、memcache等,作為MySQL的緩存層-
使用主從數(shù)據(jù)庫進行讀寫分離:
一般業(yè)務中,讀操作頻度遠大于寫操作,容易成為性能瓶頸,將數(shù)據(jù)庫分為主從兩個,主數(shù)據(jù)庫負責寫操作,從數(shù)據(jù)庫定時從主數(shù)據(jù)庫中同步數(shù)據(jù),負責處理讀操作。
-
分布式部署:
在僅適用主從架構的基礎上進一步優(yōu)化,部署多個數(shù)據(jù)庫集群,每一個集群中再進行主從讀寫分離。
-
介紹下JDBC、Hibenate、MyBatis
JDBC:是java用于連接數(shù)據(jù)庫的驅動,Hibenate、MyBatis都是基于JDBC進行工作的。
Hibenate、MyBatis都屬于Java的ORM框架,用于將關系型數(shù)據(jù)庫映射到對象中,封裝了數(shù)據(jù)庫相關的操作。
二者的區(qū)別主要在于MyBatis是可以封裝自己寫的SQL代碼,而Hibenate則只能使用其自帶的一些操作,在業(yè)務操作復雜時,MyBatis具有更好的靈活性,能根據(jù)需求進行SQL的編寫以及優(yōu)化。 -
MyBatis連接不同數(shù)據(jù)庫如何配置(配置多數(shù)據(jù)源)在
MyBatis的配置文件中,在environments節(jié)點下,通過environments節(jié)點針對每一個數(shù)據(jù)源進行具體的配置。 除了SSM、SSH外,是否關注了解其他的開源框架
二面 現(xiàn)場面試:
畫下項目的大致架構
項目答辯PPT是如何分節(jié)組織的
職業(yè)規(guī)劃
-
項目團隊中扮演的角色
-
Java虛擬機常用的參數(shù)-Xmx:堆最大容量-Xms:堆初始大小-Xmn:新生代大小-Xss:每個線程堆棧大小-XX:PermSize:持久代大小-XX:MaxPermSize:持久代最大值-XX:SurvivorRatio:Eden和Survivor大小比值-XX:NewRatio:年輕代與老年代大小比值-XX:+HeapDumpOnOutOfMemoryError:內存溢出時自動Dump出當前的內存堆轉儲快照可配置的參數(shù)較多,僅列舉部分常用的參數(shù),參考:
《深入理解Java虛擬機 第二版》
-
Jdbc常用的配置password:密碼user:用戶名socketFactory:用于創(chuàng)建套接字連接的類connectTimeout:套接字連接超時socketTimeout:網(wǎng)絡套接字連接超時autoReconnect:自動重連
-
MongoDb與mysql異同mongodb是非關系型數(shù)據(jù)庫,mysql為關系型數(shù)據(jù)庫。在數(shù)據(jù)的邏輯結構上,前者對數(shù)據(jù)沒有固定的格式要求,而后者則需要遵循建表時的規(guī)范;
在可拓展性上,因為
mongodb沒有固定的數(shù)據(jù)結構,具有更好的靈活性、拓展性,所以在業(yè)務變化時無需像mysql一樣對數(shù)據(jù)表進行修改;在效率上,在數(shù)據(jù)量大時,非關系型數(shù)據(jù)庫也有更好的性能。
-
Linux常用的發(fā)行版本CentOs、Ubuntu、kali linux。 -
會用、常用的
Linux命令ls、cd、rm、mv、head、cat、tail、chmod、mkdir、kill、ps等。 -
Linux如何查看內存、CPU等的使用情況free:打印出當前內存的使用情況top:對各進程的CPU、內存等的使用情況持續(xù)監(jiān)控,類似于windows中的任務管理器
場景、感受
一面
一面中,除了項目外,大部分問的偏基礎,在數(shù)據(jù)庫方面問的問題較多,且涉及到了在較復雜的業(yè)務需求時的數(shù)據(jù)庫優(yōu)化問題。平時項目規(guī)模較小,在數(shù)據(jù)庫優(yōu)化的那幾個題答的不是很好。最后對于開源項目的關注在此前的面試、看過的面經中基本沒有遇到,比較出乎意料。
面試的關注點主要是還是集中在個人的技術以及對技術的關注和了解上,整體屬于比較普通的技術面。
二面
二面時,面試官是大數(shù)據(jù)部門的經理,對項目的架構規(guī)劃問的比較多,一開始就讓對兩個曾經項目中的架構方面做介紹,以及比賽項目答辯的PPT章節(jié)劃分,介紹的同時會問為什么要這樣設計。在問技術相關的問題時,在發(fā)現(xiàn)是我比較熟悉的領域后就直接跳過了,在我不怎么熟的領域時則讓我盡可能回答我知道的,感覺在試探我的知識面。最后是職業(yè)的規(guī)劃,問的也很細,在說完自己的想法后,面試官結合我之前在架構方面的回答,提了很多今后職業(yè)發(fā)展的建議和項目流程的理解(被上了一課,收獲頗豐),然后HR面。
二面考察的很廣,面試官不僅想知道我會啥,還我那些不會的基本上問了個遍,應該是要對個人的能力、知識面有一個準確的評估。除了開發(fā)直接相關的知識外,在項目管理和架構上也問了很多,給了很多建議。屬于專業(yè)崗位先關的非常綜合、非常有意義面試。
總結
- 除了學習應用的知識外,還需要保持對領域、技術的關注。(一面被問到對開源項目的關注)
- 對于項目的架構和流程值得更加深入地去思考:一個項目在開發(fā)團隊內部、部門之間、客戶與公司之間的整體流程與溝通,所選的技術與其他技術的異同對比、所選技術與架構能達到的效果、公司與其他競品公司在公司整體以及產品上的橫向對比。(二面被上了一課)
- 在今后的職業(yè)規(guī)劃中,也需要盡可能的去全方面提升能力,當某項任務能提升某項自己有待提升的能力時,值得主動去和上級申請。(二面被上了一課的另一個內容)