如若轉載請註明出處: http://www.cnblogs.com/wang-meng/p/5898837.html 謝謝.
上一篇發了一個找工做的面經, 找工做不宜, 但願這一篇的內容可以幫助到你們.
對於此次跳槽找工做, 我準備了挺長的時間, 其中也收集了不少比較好的筆試面試題, 大都是一些經常使用的基礎, 不少都是因爲時間緣由沒有來得及給出答案, 可是題目大都是比較經典實用的, 如今都放到這裏, 但願對正處於找工做的博友有必定的幫助.
第一部分: Java基礎(此部分面試題題目來自:http://www.hollischuang.com/archives/10 答案是蒐集與互聯網)
(爲了方便,我把他們分了類,有一些是必看的,我用!標註,有一些進階型的我用%標註,有一些須要瞭解的,我用?標註。)html
一:繼承、抽象類與接口區別、訪問控制(private, public, protected,默認)、多態相關 !二、是否能夠繼承多個接口,是否能夠繼承多個抽象類 %三、Static Nested Class 和 Inner Class的不一樣 !四、Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型? !五、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized
!七、構造器Constructor是否可被override? !八、做用域public,protected,private,以及不寫時的區別?
!二、List、Set、Map是否都繼承自Collection接口? !三、HashMap和Hashtable的區別 1.HashTable的方法是同步的,在方法的前面都有synchronized來同步,HashMap未經同步,因此在多線程場合要手動同步 1 int hash = hash(k); 2 int i = indexFor(hash, table.length); 3 static int hash(Object x) { 4 h ^= (h >>> 20) ^ (h >>> 12); 5 return h ^ (h >>> 7) ^ (h >>> 4); 6 }
&&延展: public HashSet() { map = new HashMap<E,Object>(); }
private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolean remove(Object o) { return map.remove(o)==PRESENT; }
B、HashMap 和 ConcurrentHashMap 的關係 %四、HashMap中是否任何對象均可以作爲key,用戶自定義對象作爲key有沒有什麼要求? !五、Collection 和 Collections的區別 %六、其餘的集合類:concurrenthashmap,treemap,treeset,linkedhashmap等。
!三、內存溢出和內存泄露 (a)對於內存的溢出可能發生的狀況,大概有幾種: (b)對於內存泄露可能發生的狀況,大概有幾種: 四:其餘 2,是否多線程安全 !二、String s = 「123」;這個語句有幾個對象產生
1 public boolean equals(Object anObject) 2 { 3 //若是是同一個對象
4 if (this == anObject) 5 { 6 return true; 7 } 8 //若是傳遞進來的參數是String類的實例
9 if (anObject instanceof String) 10 { 11 String anotherString = (String)anObject; 12 int n = count;//字符串長度
13 if (n == anotherString.count) //若是長度相等就進行比較
14 { 15 char v1[] = value;//取每個位置的字符
16 char v2[] = anotherString.value; 17 int i = offset; 18 int j = anotherString.offset; 19 while (n-- != 0) //對於每一位置逐一比較
20 { 21 if (v1[i++] != v2[j++]) 22 return false; 23 } 24 return true; 25 } 26 } 27 return false; 28 }
%九、瞭解過哪些JDK8的新特性,舉例描述下相應的特性? !十二、啓動一個線程是用run()仍是start()?
!1五、多線程與死鎖 %1六、Java的四種引用 五:JAVA開發工具、環境的使用 |
第二部分: Java高級
一:多線程 public class RunThread implements Runnable{} public static void main(String[] args){ RunThread thread = new RunThread(); new Thread(thread).start(); new Thread(thread).start(); }
%四、如何中止一個線程? !五、解釋是一下什麼是線程安全?舉例說明一個線程不安全的例子。解釋Synchronized關鍵字的做用。
!六、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法? 二:內存結構,GC %二、Java中的內存溢出是如何形成的 第一種OutOfMemoryError: PermGen space
%三、jvm gc如何判斷對象是否須要回收,有哪幾種方式? 2.不可達對象必定會被回收嗎
三:CLASSLOADER
四:NIO 五:其餘 |
第三部分: JavaEE
一:Servlet的掌握,包括新的異步Servlet %二、servlet中,如何定製session的過時時間? session.setMaxInactiveInterval(30*60); !三、Servlet中的session工做原理 (禁用cookie如何使用session)
服務器在執行jsp的時候,首先把jsp翻譯成一個Servlet,因此咱們訪問jsp時,其實不是在訪問jsp,而是在訪問jsp翻譯事後的那個Servlet ?六、JSP的動態include和靜態include
三:http相關(內部重定向,外部重定向),http返回碼 !五、在web開發中,用redirect與forward作跳轉有什麼區別?web應用服務器對用戶請求一般返回一些狀態碼,請描述下分別以4和5開頭的狀態碼 四:spring,ibatis,hibernate相關 五:jboss,tomcat等容器相關 六:web安全,SQL注入,XSS, CSRF等 七:AJAX相關 八:Web Service 九:JMS 十:其餘 |
第四部分: 數據庫相關
一:關係模型理論: 二:事務相關 三:併發控制 四:ORACLE或MYSQL題目 五:其餘 |
第五部分: 設計模式
一:高內聚,低耦合方面的理解 二:設計模式方面 三:其餘 |
第六部分: 其餘清單 只有題目
J2SE基礎 1. 九種基本數據類型的大小,以及他們的封裝類。 (2)byte——1 byte——Byte (3)short——2 bytes——Short (4)int——4 bytes——Integer (5)long——8 bytes——Long (6)float——4 bytes——Float (7)double——8 bytes——Double (8)char——2 bytes——Character static Integer valueOf(int i) : 切記-127--+127範圍, 使用cache 2. Switch可否用string作參數? 能夠。在 Java 7以前,switch 只能支持 byte、short、char、int或者其對應的封裝類以及 Enum 類型。 在 Java 7中,String支持被加上了。 3. equals與==的區別。 在java中的數據類型能夠分爲兩類。 1,基本數據類型,他們之間的比較用==表示比較它們的值。 2,引用數據類型,當使用==進行比較時,比較的是它們內存中的存放地址是否相同。而equals內部也是直接引用的==。 可是equals是Object中的方法, 咱們能夠經過複寫來改變equals的用法, 好比String中的equals只是比較兩個變量的值是否相等: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; } 4. Object有哪些公用方法? equals(), toString(), hashCode(), getClass(), notify(), notifyAll(), wait(), finalize(), clone() 5. Java的四種引用,強弱軟虛,用到的場景。 6. Hashcode的做用。(這裏來講明equals和hashCode的關聯) 若是兩個對象相等,那麼他們必定有相同的哈希值(hash code)。 若是兩個對象的哈希值相等,那麼這兩個對象有可能相等也有可能不相等。(須要再經過equals來判斷) 一、equals方法用於比較對象的內容是否相等(覆蓋之後) 二、hashcode方法只有在集合中用到 三、當覆蓋了equals方法時,比較對象是否相等將經過覆蓋後的equals方法進行比較(判斷對象的內容是否相等)。 四、將對象放入到集合中時,首先判斷要放入對象的hashcode值與集合中的任意一個元素的hashcode值是否相等, 若是不相等直接將該對象放入集合中。若是hashcode值相等,而後再經過equals方法判斷要放入對象與集合中的任意一個對象是否相等, 若是equals判斷不相等,直接將該元素放入到集合中,不然不放入。 7. ArrayList、LinkedList、Vector的區別。 ArrayList: 內部採用數組存儲元素,支持高效隨機訪問,支持動態調整大小 增刪慢,查詢快。 LinkedList: 內部採用鏈表來存儲元素,支持快速插入/刪除元素,但不支持高效地隨機訪問. 增刪快,查詢慢。 Vector: 能夠看做線程安全版的ArrayList 8. String、StringBuffer與StringBuilder的區別。 這裏插入知識點:String的intern 直接使用雙引號聲明出來的String對象會直接存儲在常量池中。 若是不是用雙引號聲明的String對象,能夠使用String提供的intern方法。intern 方法會從字符串常量池中查詢當前字符串是否存在,若不存在就會將當前字符串放入常量池中 1. String類型是Java內的對象,是個不可變的對象,當每次對String進行改變時都須要生成一個新的String對象,而後將指針指向一個新的對象,若是在一個循環裏面,不斷的改變一個對象,就要不斷的生成新的對象,並且對象多了,Java的垃圾自動回收機制會開始工做,因此效率很低,建議在不斷更改String對象的地方不要使用String類型 2. StringBuffer 是個可變的對象,就是每次操做都是對對象自己進行操做,而不用生成新的對象,這樣效率確定就會有有很大的提升,在大部分狀況下StringBuffer的效率要比String類型要高 3. StringBuilder 與StringBuffer同樣是個可變的字符序列,提供與StringBuffer兼容的API,可是不能保證同步,用在字符串緩衝區被當個線程使用的狀況,在單機非多線程的狀況下使用StringBuilder會有比較好的效率,由於StringBuilder沒有處理同步(Synchronized)問題。StringBuffer則會處理同步問題,若是StringBuilder會在多線程下被操做,則要改用StringBuffer,讓對象自行管理同步問題。 9. Map、Set、List、Queue、Stack的特色與用法。 10. HashMap和HashTable的區別。 11. HashMap和ConcurrentHashMap的區別,HashMap的底層源碼。 12. TreeMap、HashMap、LindedHashMap的區別。 13. Collection包結構,與Collections的區別。 14. try catch finally,try裏有return,finally還執行麼? 15. Excption與Error包結構。OOM你遇到過哪些狀況,SOF你遇到過哪些狀況。 16. Java面向對象的三個特徵與含義。 17. Override和Overload的含義去區別。 18. Interface與abstract類的區別。 19. Static class 與non static class的區別。 20. java多態的實現原理。 21. 實現多線程的兩種方法:Thread與Runable。 22. 線程同步的方法:sychronized、lock、reentrantLock等。 23. 鎖的等級:方法鎖、對象鎖、類鎖。 24. 寫出生產者消費者模式。 25. ThreadLocal的設計理念與做用。 26. ThreadPool用法與優點。 27. Concurrent包裏的其餘東西:ArrayBlockingQueue、CountDownLatch等等。 28. wait()和sleep()的區別。 29. foreach與正常for循環效率對比。 30. Java IO與NIO。 31. 反射的做用於原理。 32. 泛型經常使用特色,List<String>可否轉爲List<Object>。 33. 解析XML的幾種方式的原理與特色:DOM、SAX、PULL。 34. Java與C++對比。 35. Java1.7與1.8新特性。 36. 設計模式:單例、工廠、適配器、責任鏈、觀察者等等。 37. JNI的使用。 JVM 1. 內存模型以及分區,須要詳細到每一個區放什麼。 2. 堆裏面的分區:Eden,survival from to,老年代,各自的特色。 3. 對象建立方法,對象的內存分配,對象的訪問定位。 4. GC的兩種斷定方法:引用計數與引用鏈。 5. GC的三種收集方法:標記清除、標記整理、複製算法的原理與特色,分別用在什麼地方,若是讓你優化收集方法,有什麼思路? 6. GC收集器有哪些?CMS收集器與G1收集器的特色。 7. Minor GC與Full GC分別在何時發生? 8. 幾種經常使用的內存調試工具:jmap、jstack、jconsole。 9. 類加載的五個過程:加載、驗證、準備、解析、初始化。 10. 雙親委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。 11. 分派:靜態分派與動態分派。 操做系統 1. 進程和線程的區別。 2. 死鎖的必要條件,怎麼處理死鎖。 3. Window內存管理方式:段存儲,頁存儲,段頁存儲。 4. 進程的幾種狀態。 5. IPC幾種通訊方式。 6. 什麼是虛擬內存。 7. 虛擬地址、邏輯地址、線性地址、物理地址的區別 TCP/IP 1. OSI與TCP/IP各層的結構與功能,都有哪些協議。 2. TCP與UDP的區別。 3. TCP報文結構。 4. TCP的三次握手與四次揮手過程,各個狀態名稱與含義,TIMEWAIT的做用。 5. TCP擁塞控制。 6. TCP滑動窗口與回退N針協議。 7. Http的報文結構。 8. Http的狀態碼含義。 9. Http request的幾種類型。 10. Http1.1和Http1.0的區別 11. Http怎麼處理長鏈接。 12. Cookie與Session的做用於原理。 13. 電腦上訪問一個網頁,整個過程是怎麼樣的:DNS、HTTP、TCP、OSPF、IP、ARP。 14. Ping的整個過程。ICMP報文是什麼。 15. C/S模式下使用socket通訊,幾個關鍵函數。 16. IP地址分類。 17. 路由器與交換機區別。 數據結構與算法 1. 鏈表與數組。 2. 隊列和棧,出棧與入棧。 3. 鏈表的刪除、插入、反向。 4. 字符串操做。 5. Hash表的hash函數,衝突解決方法有哪些。 6. 各類排序:冒泡、選擇、插入、希爾、歸併、快排、堆排、桶排、基數的原理、平均時間複雜度、最壞時間複雜度、空間複雜度、是否穩定。 7. 快排的partition函數與歸併的Merge函數。 8. 對冒泡與快排的改進。 9. 二分查找,與變種二分查找。 10. 二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹。 11. 二叉樹的前中後續遍歷:遞歸與非遞歸寫法,層序遍歷算法。 12. 圖的BFS與DFS算法,最小生成樹prim算法與最短路徑Dijkstra算法。 13. KMP算法。 14. 排列組合問題。 15. 動態規劃、貪心算法、分治算法。(通常不會問到) 16. 大數據處理:相似10億條數據找出最大的1000個數.........等等
基礎篇
JAVA基礎
一、 JAVA基礎
1) 抽象類和接口的區別?
補充問題:JAVA8中爲何要加入默認方法?
2) 靜態內部類(static class)的做用?
3) 序列化和反序列化
4) 動態代理和靜態代理的區別?
贈送問題:代理模式,什麼是代理模式?如何實現?代理模式結構圖是怎樣的?代理模式應用在什麼場景?
5) nio熟悉嗎,nio和io的區別?
6) java8有哪些新特性?
二、 JAVA API
1) transient關鍵字的做用?
2) volatile關鍵字的做用?
3) abstract和final是否可同時使用?
4) ArrayList、LinkedList、vector的區別?
5) HashMap、LinkedHashMap,concurrentHashMap的區別,concurrentHashMap爲何特別好用,你看過源碼嗎?
6) collection的繼承結構,你是否看過源碼?
三、 JVM調優(性能)
1) 有哪些調優工具
2) 如何快速定位有問題代碼
3) 內存溢出如何處理,如何調優
4) 垃圾回收機制,有哪些垃圾回收算法,如何配置垃圾回收策略
5) 新生代和老年代
四、 Tomcat
tomcat能夠穩定支持的最大併發用戶數
Tomcat集羣如何架設:Tomcat+Apache
集羣時特別關注兩個問題:
1:如何實現多應用服務器間的session共享:(一臺服務器崩潰,另一臺服務器能夠繼續支持)
2:如何分發請求到各個應用服務器實現壓力分解:(這裏的解決方案是用apache作 web服務器)
算法問題
一、 生產者和消費者問題?
二、 查找算法有幾種,寫出實現代碼?
三、 排序算法有幾種,寫出實現代碼?
四、 遍歷二叉樹,分別按照前序、中序、後續?
五、 紅黑樹
程序題
一、 寫出一個字符串,打印出字符串中字符的全部排序
二、 無序的有重複數據的list變成有序的無重複數據的list
框架篇
一、 Spring核心:
分別說說aop和IOC
事務配置的幾種方式?
spring有幾種注入方式?
spring依賴注入的四種裝配方式?
spring的幾個重要註解@Component(不推薦使用)、@Repository、@Service、@Controller
二、 SpringMVC和Struts2:二者的區別
三、 Mybatis和Hibernate:二者的區別
mybatis如何實現多表關聯查詢
mybatis的resultMap
mybatis的#和$
四、 是否能夠用maven搭建項目,maven如何構建web項目?
五、 git的使用
六、 當日志很是大時,如何查找須要的日誌?
七、 SSH的侷限有哪些
數據庫篇
數據庫基礎
一、 MySQL和oracle的區別
二、 Oracle移植到mysql須要處理哪些
三、 存儲過程
四、 mysql存儲引擎innodb和myisam的區別
數據庫優化
一、 sql優化
二、 索引
關於索引:聯合索引A和B,當按照A、A和B、B查詢時索引使用狀況?
三、 數據庫優化,使用過哪些優化工具:經常使用的SQLYOG、基準測試,expain、status等
具體問題:
如何找到並定位慢SQL?
如何肯定表和查詢是不是最優的?
枚舉類型如何使用,枚舉類型的誤用帶來的損失?
有沒有什麼工具能夠監控數據庫,快速查看有問題的sql?若是存在大批量有問題的sql,如何排查?
如何診斷響應差的(太多線程),殭屍進程(無響應或長時間運行),或者診斷鏈接問題?
若是在某段時間內用戶反映服務器變慢,如何知道服務器性能差?
假設已經檢查了全部常規信息——內存、磁盤等,而全部這些信息都在正常範圍內,沒有出現錯誤和異常,這時,你怎麼知道系統是否運行變慢?
數據庫進階
一、 當數據庫存儲數據出現瓶頸,如何處理?——數據庫水平拆分、垂直拆分
二、 說說水平拆分和垂直拆分,何時水平拆分,何時垂直拆分,分別解決了哪些問題,分別存在哪些不能解決的問題,如何結合使用?
三、 當水平拆分時,到不一樣的表和庫中或不一樣的分佈式服務器上時:不一樣的表能夠聯合查詢(union)、不一樣的庫能夠加上庫名進行聯合查詢;若是須要查詢的數據分佈在不一樣的服務器之間,如何查詢?如何在存儲數據時就將須要同時查詢的數據放在同一服務器上(存儲時取模或者按照時間分佈數據,查詢的時候取模或者按照時間查詢)
四、 mysql讀寫分離
五、 數據庫集羣
升級篇
分佈式
一、 有哪些分佈式框架,對比其性能優劣?
同步調用:RSET(JAX-RS、Spring Boot)、RPC(Thrift、Dubbo、HSF)
異步調用:Kafka、Notify、MetaQ
同步和異步的區別,分別用於什麼場景?
二、 dubbo + zookeeper
三、 nosql(redis、memcache、mongodb)
大併發的處理
一、 負載均衡
二、 分佈式
三、 緩存
四、 數據庫分庫分表
五、 數據庫集羣
六、 圖片服務器分離
七、 首頁靜態化
大數據問題:
假如天天產生5億行日誌文件,如何搜索到指定內容?
有一個100T大小的文件存放在磁盤中,不借助任何外部存儲設備,如何統計指定字符串的個數?
同上,有一個文件,存放天天訪問的URL,天天有100萬條,如何統計URL的個數?
測試1000萬條數據的查詢
多線程
一、 有哪些多線程的應用場景
二、 你本身有寫過多線程嗎,在哪些場景
三、 線程池,java提供的線程池有哪幾種?
四、 隊列
五、 servlet是線程安全的嗎,如何改進?
六、 實現同步的幾種方式?
安全
關於安全方面作了哪些工做?
手機、支付如何保證信息安全?
sql注入問題
如何保證訪問URL安全:如何不暴露真實的URL地址;如何防止篡改URL地址;如何防止在URL中SQL注入?
設計模式
一、 你熟悉哪些設計模式
二、 框架中用到哪些設計模式
JAVA IO:裝飾器模式(Decorator)、適配器模式(Adapt)
Spring :訪問者模式(Visitor)、代理模式(Proxy)、策略模式(Strategy)
SpringMVC:模版模式(TempleteMethod)
Mybatis: 簡單工廠模式、工廠方法模式(FactoryMethod)、抽象工廠模式(Abstract Factory)
Tomcat:門面模式、觀察者模式(Observer)、命令模式(Command)、責任鏈模式(chainof responsible)
Velocity :合成模式
三、 裝飾模式和適配器模式的區別
四、 寫一個單例模式
linux
一、會使用哪些命令
查看端口是否被佔用
如何查看指定的日誌
網絡
一、 通訊協議是否有了解,TCP/UDP等、HTTP
二、 http反向代理
業務篇
一、 訂單:大併發問題
二、 訂單或產品數據量變大以後如何優化
三、 交易付款如何操做
四、 與物流接口
五、 畫出你負責的項目的架構圖
大概總結就這麼多了, 文章內容有點多, 你們能夠慢慢去看, 不少答案的話須要本身百度了, 學習是一個積累的過程, 這些東西只是一些濃縮的映射, 若是哪裏有不太清楚就說明你尚未掌握透徹了.
但願對真正找工做的朋友有些幫助, 加油吧.