一、傳統的軟件公司,這類公司還會使用最爲原始的開發技術(SSH),甚至mybatis和JPA這樣的框架都不會使用,可是這樣的公司招聘量不多了,並且這類公司的技術與如今的流行的技術不符,因此不少從事這方面開發的技術人員實際上已經開始出現了危機。java
二、新興的互聯網公司,全部的技術都是使用最新的,天天最大的感覺就是不斷的改變用戶的體驗(雖然會爲體驗付出成本,傳統的軟件公司好比金蝶、用友基本上就那樣,十年也變化不了,由於有國家政策支持)。新型公司最喜歡問的就是集羣架構、大數據、高併發、分佈式、高可用、性能調優。這種職位的待遇和需求量是很高的可是若是隻是按照傳統的開發模式,那麼可能在一線城市的互聯網上未必能夠獲得很好的發展(至少會架構平臺)。程序員
三、小型的初創(製造)公司,可能本身有一些小的系統但願能夠提供一些微小服務(這種環境基本是咱們所熟悉的就業環境)面試
咱們如今最尷尬的地方就是都須要學:SSH、SSM。須要把整個技術的架子掌握的很是熟練,然後才能夠有更好的發展,同時不要忽略了Linux(否則找工做吃虧,它不難只是作一些簡單的配置),ajax
自我檢查:給你一個需求,運用你所熟練的一項技術你能夠輕鬆的實現。然後作完每個項目以後都須要去思考如下幾點:redis
一、這個項目的代碼是否有大量的重複,以及如何重構?算法
二、這個項目可否出現動態的擴充,以知足不斷增加的用戶及數據需求數據庫
三、(關鍵)這個項目你寫的足夠安全嗎?bug足夠少嗎?(此時就不是簡單的bug了)注:適應當前的軟件開發是有難度的,可是難度與收入是成正比的。json
Maven這個工具是在是過重要了,你學習完了WEB開發(JSP、Servlet)以後必定要把Maven使用熟練(大環境下都在使用),如今也在使用微架構Sprign Boot設計模式
項目:數組
單身攻略:記錄下你全部認識的女性,以及男性,同時把這些男女的關係整理出來。
Java雖然看起來很龐大,可是這裏面仍是有規律可循的:
一、會進行基礎的業務設計,這個業務設計問題是有一個專門的話題,而且這個操做必定要在Java基礎學習完後WEB學習以前進行,同時這類代碼必定要編寫熟練;
二、JSP+JavaBean開發:掌握整個業務設計與顯示層的互相調用,觀察設計的問題;
三、MVC開發:MVC設計模式的組成、反射與MVC的關係、自定義MVC開發框架;
四、最好作一個【MVC項目】:包含有了MVC設計+AJAX+JSON+JQuery+Bootstrap,造成基本的開發流程,最好的自我檢查,隨意設計一張表,很快的實現單表CRUD+分頁+上傳;
五、框架學習:Spring+SpringMVC+Shiro+MyBatis整合弄會;
六、【SSM項目】:關鍵是要總結出與MVC項目開發的區別?
七、【微服務】:SpringBoot的開發框架,若是你以前的項目作了,這門課程能夠很快學會。
1、說一下java類集
一、類集是java實現的數據結構應用(實際使用不會關注類集),若是隻是使用,那麼類集的操做很簡單,由於類集的核心接口:List、Set、Map、Iterator、Enumeration;
二、List子接口:是能夠根據索引號取得內容,而在List集合裏面最容易問到的問題:ArrayList(包裝了數組的集合比較經常使用,數組是可變的)、LinkedList(鏈表的實現,搜索的時間複雜度爲:n(100個元素,複雜度100))區別。
三、Set子接口:排序子類、HashSet與hashCode()和equals的關係;
|-HashSet:重複的判斷依靠的是hashCode()和equals,可是它是無序的;
|-TreeSet:是有序的,依靠的是Comparable排序;
|-LinkedHashSet:繼承了HashSet的特色,可是屬於有序(增長順序爲保存順序)
四、Map接口:Map.Entry、Iterator輸出、HashSet、WeakMap、WeakHashMap(弱應用)
五、可能要求你現場編寫一個鏈表,或者編寫一個二叉樹(要記住鏈表,二叉樹的結構)。
2、字符串哈希值相等,equals相等嗎?反過來呢?
從正常道理來說,若是hashCode相同,那麼equals()必定是相同的。反過來也相同
3、Spring的工做原理,控制反轉是怎麼實現的,本身寫過濾器過濾編碼怎麼實現
Spring的核心組成:IOC&DI(工廠設計)、AOP(代理設計、動態代理設計);
|-Spring之中針對XML的解析處理採用的是DOM4J的實現;
|-Anntation的時候必需要求有一個容器;
對於編碼過濾須要考慮兩種狀況:
|-Struts1.x、SpringMVC、JSP+Servlet:均可以直接經過過濾器Filter完成;
|-Struts2.x:必須經過攔截器完成;
|-實現:考慮到可擴展性的一個配置,因此在配置文件裏面設置編碼,在程序運行的時候動態取得設置的編碼進行操做,可是須要設置兩個操做:請求編碼、迴應編碼。
4、框架的源碼有沒有看過?
不要回答「沒有」,即便你真的沒有,你也別回答沒有(由於在程序員思惟中只有true false沒邊界值);
框架的核心思想:反射+XML(Annotation);
|-Struts2.x的設計:請求交由過濾器執行,然後過濾器交給控制器(action)完成,後面因爲將全部的跳轉路徑等信息寫在了配置文件或者是Annotation裏面,因此還須要進行這部份內容的加載;
|-SpringMVC:它是基於方法的請求處理,全部的參數都提交到方法上,本質上仍是一個DispatcherServlet;
|-Hibernate:就是反射和DOM4J解析處理流程;
(回答的原則就根據上面,全部的框架的源代碼的請求都是交給doget dopost通過反射作分發,除去Struts2它由過濾器完成)
5、動態代理是怎麼實現的?
直接使用InvocationHandler接口進行實現,同時利用Proxy類設置動態請求對象;
使用CGLIB(讀:C G賴不)來避免對於「代理設計須要使用接口實現」的限制;
6、action是單實例仍是多實例?
Struts2.x和SpringMVC中的Action都是多實例;
Struts1.x的Action是單實例;
Struts2.x和SpringMVC的是否單實例能夠控制,只要交由Spring管理的Action類,均可以經過「@scope=prototype」來進行控制
7、怎麼配置bean?
這樣的配置主要是在Spring裏面,重點由xml和annotation的掃描負責
xml中直接使用「<bean>」,這樣在Spring容器啓動的時候就能夠經過容器進行初始化;(較簡單)
Annotation必須設置context命名空間,然後進行掃描包的配置;
8、修改單實例多實例
「@scope="prototype"」來進行控制
9、java的設計模式
工廠設計模式(重要的模式)、代理設計模式、單例設計模式(Runtime)、合成設計模式、門面設計模式(例JDBC)、裝飾設計模式(例PrintStream)、模板設計模式(例Servlet)
10、事務的控制
MySQL數據庫(互聯網公司都用這個)若是要想使用事務,必須使用「type=innodb」這個數據引擎;(不然用不了)
事務的核心控制:commit、rollback;
在Spring裏面,利用AspectJ(啊四排可特價)能夠設置AOP的切面,然後進行聲明式事務控制
11、髒讀
12、事務的傳播屬性
十3、購物車是怎麼實現的
購物車的實現能夠基於:
Session:瀏覽器關閉後消失;
數據保存在本地,若是切換到手機上無效;
數據庫:能夠在不一樣的終端上持續操做;
你的實現:Ajax處理操做,處理購物車的應用,考慮到用戶若是多的狀況,而且訪問量頻繁,要單獨設計一個購物車的子系統模塊
十4、統計一天的訂單量(閒聊題目後面幾道)
若是一天的訂單預估才1W條,隨便你折騰:
絕對不可能使用COUNT()和WHERE;
分時統計,若是系統設計到位,能夠單獨配置一個文件進行計數(須要考慮同步,一同步就慢),不該該出如今搶購環節中
十5、IN HAVING exist
IN是判斷具體的幾項數據;
HAVING是針對於分組後的數據的篩選,依然要使用統計函數處理;
EXITS只是須要判斷子查詢裏面是否有數據。
十6、有沒有用過定時任務
Java自己提供有定時任務:TimerTask、Timer,可是此類操做對於定時很難完成,它只可以作頻率,可是這個頻率不許,因此在定時開發之中使用quartz組件,並且Spring裏面也提供有本身的定時實現,這個實現的好處是能夠在準確的時間上進行觸發(好比凌晨三點觸發,它能完成比較方便)
十7、JVM的內存管理(關鍵性問題了)
內存分爲:棧(Java虛擬機棧)、堆、程序計數器(相似於寄存器)、方法區、本地方法棧。
所謂的垃圾處理操做指的是堆內存:年輕代、老年代、永生代(JDK1.8移除)。會直接牽扯到JVM的內存調優問題。
十8、堆內存、棧內存溢出
棧溢出:棧幀,全部的方法調用都是經過棧幀的形式來控制的。棧若是保存的數據過多,那麼就會產生內存溢出,若是在堆內存中產生的數據量過大,那麼就有可能出現「OutOfMemoryError」錯誤。(若是想再回答的好,什麼虛擬機規範都看了,這就至關龐大了)
十9、說一下緩存
緩存的目的是提升查詢效率,常見的兩種緩存組件:EhCache(數據庫上)、OSCache(頁面上),除了這樣的操做外還有緩存的數據庫redis、memcached,其中redis能夠將數據保存到磁盤上,而且支持的數據類型要多於memcached。這種redis的數據庫每秒併發的訪問量能夠達到15萬次。
二10、統計全部重名用戶
仍是須要考慮數據量問題,若是數據量大,考慮使用位圖索引,若是數據量小直接分組統計便可。
咱們有一家合做的外包公司,前幾天向咱們要人,說要進行外包項目。
甲方的面試,要求在QQ視頻上面試。招工的要求:兩年工做經驗。 看視頻的培訓他們遇到的面試題,考是否寫過東西
答:一、read()方法(除此以外方法被重載了幾回?每一個方法的參數或返回值類型是什麼?哪個是抽象方法?)
二、on("click",function)
三、$.post()、$.get()、$.ajax()、$.jsonp()
四、String(就是一個地址)或ModelAndView(能傳更多值)
五、Web服務調用,結合WSDL與SOAP造成遠程方法調用:如今的實現由兩種:CXF、Jersey
六、RPC是一個遠程過程調用,實際上WebService就是RPC的一中實現機制,只不過RPC是最原始的概念
七、@Componet、@Service、@Repository、@Controller;
八、在ORM裏面緩存有兩種(一級、二級),主要使用的是EhCache組件實現的
(如今的面試通常都是看你是否是寫過代碼,寫過的話過程知道)
一、源代碼問題
實際上許多的同窗去一些好一點的公司面試,那麼在進行面試的時候每每會去問你如下的幾種問題:
你是否看過一些開發框架的源代碼?
|-看你是否本身研究過一些開發框架。
|-看你是否深入理解某一個框架的運行機制(原理分析)
你是否對某些類的底層的實現算法清楚?
|-HashMap在數據量大的時候會自動的轉換爲紅黑樹的算法;
|-這部分的問題大多都會圍繞在類集上,而類集上全部的問題就都體如今於你大學時(科班出身了)數據結構學習到的程度(數據結構:數組、隊列、鏈表、樹、圖)。
在java基礎的學習裏面,也必須清楚一個問題:有一些類的實現須要你本身去讀一些代碼,固然,這個代碼不是說你要給它讀的很是透徹,至少知道,某一個方法何時調用會出現問題,整個的方法實現機制裏面缺乏哪些內容。
雖然不少公司去問這些問題,可是不少時候咱們每每能夠作一些簡化處理,例如:你能夠多讀一些文章,把這些概念記住,那麼就能夠經過面試了。
一、簡歷項目
對於簡歷上出現的項目通常狀況下會有三類項目:
【公認】傳統的辦公系統、管理平臺,幾乎稍微大一些的公司都會存在有這樣的系統(若是是學生隨便找個管理系統,就能夠把功能跑出來)
|-傳統的辦公平臺能夠見到的經常使用名詞:ERP、CRM、OA;
|-這些東西本質上徹底能夠融入到一個平臺上,一個平臺上這就屬於公司內部定義的業務流程,你在編寫項目的時候每每都要根據你實際的工做經驗,以及公司所處行業,具體某些業務規範進行的;
|-例如:企業資源的規劃,天然要牽扯到全部的硬件資源、耗材、人力資源、辦公資源操做彙總,對於CRM也須要考慮到普通客戶、大客戶、客戶的消費的分析、訪問習慣、OA就是無紙化辦公,這些系統基本上是屬於傳統項目,這類傳統的項目裏面不會考慮用戶量大的狀況,像金蝶、用友這樣的公司這種軟件都比較在行。
【互聯網】一些互聯網平臺,包括:產品、電商:
|-須要對你的項目的承受壓力做出總結,例如:每秒10W人的訪問,分佈式開發技術
|-在出現問題後的解決方案;
|-會問你一些比較複雜的處理狀況,多是一些他們工做之中面對的問題;
【強烈專業背景】作一些很細微的數據採集、分析操做。
|-從事與你以前所作的一些工做,例如:一些數據的考覈指標等等;
若是之後面試的時候有公司問:是否能提供源代碼,必定要明確表示,不能給(職業操守)。若是想要去面試高級的職位的話,還要考慮你的項目管理經驗(主要是項目流程)。