申明:這篇文章是我本身我的的經驗之談,非我所屬公司的官方資料,不表明我所屬公司的任何觀點。本建議只適合於工做時間不超過5年的,超過5年的業界可能的要求又不太同樣了。html
最近在boss上發了一些內推的崗位,和我聊的人仍是不少的。可是我發現不管是我的能力仍是簡歷都存在不少的問題,爲了方便你們也方便本身,如今對java後臺求職須要注意的一些問題進行了總結,歡迎你們提出一些寶貴的意見。java
1.專業技能
專業技能是每一個公司的必考項,它是你工做最基本的東西。我列舉了一下常常被問到的一些問題。mysql
1.1 Java基礎知識
- String 是否可以被繼承,它是Immutable的;字符串常量池;StringBuffer 和StringBuilder 的區別,何時能夠選StringBuilder,一樣的能夠問List和Vector的區別。
- 集合相關,HashMap和TreeMap的區別,底層數據結構是什麼;LinkList和ArrayList的區別,下面這段代碼list是LinkList和ArrayList有什麼區別。
for (int i = 0; i < list.size(); ++i) {
String s = list.get(i);
}
複製代碼
- 多線程相關:AbstractQueuedSynchronizer,lock,Condition,CyclicBarrier,CountDownLatch,Future,ConcurrentHashMap這些內容必定要去了解,確定會問到;Object.wait(),Object.notify()這些的使用(結合看一下Conditon的使用),它和Thread.Sleep的區別(鎖是否被釋放);valotile和synchronize關鍵字有什麼用,synchronize和juc包裏面的lock對比;對象鎖和類鎖(static方法);
- ClassLoader相關的內容,熟悉一下Bootstrap Class Loader,Extension Class Loader和System Class Loader。網上相關的文章仍是不少的,能夠看一下;熱部署的簡單思路等;
- 範型和反射:由於spring這種框架大量的使用了範型和反射,因此這個問題必定會問到。
- JVM和GC,JVM的內存分佈,引用計數有什麼問題,標記清除算法大概的思路;目前GC經常使用的一些算法比較,有沒有對JVM進行過調優;jmap、jstat、jinfo等經常使用命令的使用,mat工具的使用。
- NIO 相關:你只要知道IO多路複用,select,poll和epoll這些通常問題不大,若是你項目裏面有用到相關的一些庫(好比netty),那可能會問的比較深刻一些。
1.2 Spring Boot
Spring Boot是目前比較流行的Java Web框架,因此通常都會問相關的問題,只是深淺不一樣。spring的問題會有不少,我也說不上來具體很問哪些(主要是我也不太熟)面試
- IOC的概念,爲何要IOC。
- AOP,主要的實現方式:JDK動態代理(須要實現接口)和cglib,應用:transactional註解,固然也能夠根據實際使用的狀況展開回答。
- 源碼閱讀:須要平時積累的。
1.3 mysql
其實應該是RDBMS的,但目前用的比較多的就是mysql了,因此就以mysql爲例,進行說明。mysql推薦你們一個博客,水平仍是比較高的。redis
- ACID原則,這個概念須要好好的理解,結合事務一塊兒。
- 事務和鎖:事務的隔離機制;非阻塞讀,官方文檔值得好好的閱讀。
- 索引相關:InnoDb聚簇索引和非聚簇索引,關於索引優化的能夠看一下一本叫High Performance Mysql的書,講的仍是蠻詳細的;explain的使用手冊。
- 對分庫分表的理解
1.4 nosql
隨着互聯網的迅猛發展,傳統的RDBMS沒法知足業務的須要。常見的一些nosql數據庫包括:redis,memcache,mongodb,hbase等。通常會根據候選人對這些數據庫的熟悉狀況來進行提問。常見問題以下:算法
- redis有哪些數據結構,你用過哪些,爲何要用這些數據結構,你的思考是什麼。
- redis實現相關,好比它是event driven的,使用了io多路複用。redis能夠執行lua腳原本作一些複雜的原子操做,可是不要把一些耗時的操做放在lua裏面,不然block其餘的命令就麻煩了。
- 架構:通常來講nosql會和分佈式的一些理論結合起來問,因此常常會問使用的這些數據庫的架構是什麼,爲何要這樣設計,畫一下簡單的架構圖。
- 這些數據庫對ACID的支持怎麼樣,你是怎麼看待這些問題的。
- 分佈式鎖的問題,能夠參考一下這篇文章
- 這些數據庫之間有什麼區別,什麼狀況會選哪一種數據庫。考慮的方向是:有沒有一些ACID的需求;是否須要持久化;索引的狀況等。
1.5.分佈式理論
這個可能就比較泛了,cap理論、分佈式事務(兩階段提交等)、一致性算法和協同算法等。這些可能更多的是看本身的喜愛了,由於理解起來真的是比較困難。spring
2.簡歷
這個就更加劇要了,簡歷是一我的的門面。對一些沒有大型互聯網公司、沒有比較好的學歷的人來講,一份好的簡歷就更加劇要了,畢竟你比別人少了兩個加分項。針對我收的簡歷,我列舉一下容易出現的問題。sql
- 排版:排版是一我的思路是否清晰的體現,一份好的簡歷最好可以模塊化。這樣面試官能夠很是容易找到本身想要的東西。不要把不同的東西混在一塊兒,上次收的一份簡歷,我的技能和基本信息混在一塊兒,讓人看了就不是很舒服。
- 技能:能夠像我上面那樣,把技能分紅幾塊。每一塊最好可以展開一下,說一些比較具體的內容,而不是詞語簡單的堆砌。好比Java多線程,這個詞就能夠稍微的展開一下,能夠寫AbstractQueuedSynchronizer等;這樣面試官起碼知道你是有看過源代碼的,比你只說看過源代碼會好一些。
- 項目:項目不只僅寫項目的內容,要談談遇到的什麼問題,你是怎麼思考和解決的。我收到的簡歷裏面比較廣泛的問題是:把那個項目名字換成一個外包項目,徹底沒有違和感,太籠統了,太萬金油了。項目在精,而不在多,最好每一個項目可以體現你使用到的不同的技術,這樣項目就和你的技能相呼應,給人感受就會比較靠譜。
- 針對jd作一些優化:有一些jd是須要特殊背景的(例如金融行業),這個時候就須要思考這個行業的難點了,不然如何可以勝任呢?以金融爲例:你是如何保證服務不出錯的,如何設計保證冪等的,消息隊列如何保證不丟的(我隨便舉的例子,可能不是很恰當,由於我也不太懂)
分享幾張技能圖,方便你們查漏補缺。掌握了這些,對於要求3~5年工做經驗的崗位應該問題不大。mongodb
最後想要內推阿里的能夠加我脈脈~~數據庫