中初級程式設計師需要掌握的實際和麵試筆試知識
對於一個初中級程式設計師來說,面試問題不僅僅涉及到Java語言,還會包括很多其他知識,比如計算機基礎知識(資料結構、計算機網路、作業系統等)、C語言基礎、Java底層知識以及一些框架相關知識等。本文幾乎覆蓋到了所有領域。
❈計算機基礎知識
C語言基礎
Java基礎
Java高階
Java Web
設計模式
知識的綜合能力
工具使用
專案相關
技術熱情
表達能力
思考方式
其他
推薦閱讀
❈還有,我知道很多人會問關於這些題目的答案問題。答案我都有,由於篇幅有限沒辦法直接貼上來。這些題目的答案我會在我的公眾號及知識星球中給出,感謝關注。
我總結的這套題目,總數是280道,道道都是精品必考題。如果這些面試題都能很好的回答上的話,參加國內各大公司的校招基本都沒啥問題。
我很難估算一個人要掌握這所有的題目有多難。但是我覺得,如果你是一個有一定的計算機基礎知識並且有一定的Java經驗。比如一個學習還不錯的大三學生。大概可以用半年左右的時間就可以掌握這裡面的所有題目。別問我為什麼,因為我試過。
為了方便,我把他們分了類,有一些是必看的,我用!標註,有一些進階型的我用%標註,有一些需要了解的,我用?標註。
必會關鍵字
計算機基礎知識資料結構void byte int long char short float doubleString StringBuffer StringBuilder Array CollectionCollections List ArrayList LinkedList Vector SetHashMap TreeMap LinkedHashMap ConcerrentHashMapSet TreeMap HashMap synchronized volatiletransient implements extends public privateprotected this super static final const runstart thread enmu stack queue list heap throwthrows try catch finally break continueinstanceof
演算法!1、什麼是佇列、棧、連結串列
!2、什麼是樹(平衡樹,排序樹,B樹,B+樹,R樹,紅黑樹)、堆(大根堆、小根堆)、圖(有向圖、無向圖、拓撲)
!3、棧和佇列的相同和不同之處
?4、棧通常採用的兩種儲存結構
%5、兩個棧實現佇列,和兩個佇列實現棧
作業系統!1、
排序
都有哪幾種方法?!2、會寫常用的排序演算法,如快排,歸併等。
%3、各種排序演算法的
時間複雜度
和穩定性
,重點快排。!4、單鏈表的遍歷和逆序
!5、
深度優先搜尋
和廣度優先搜尋
?6、最小生成樹
!7、常見Hash演算法,雜湊的原理和代價
%8、全排列、貪心演算法、KMP演算法、hash演算法
?9、一致性Hash演算法
計算機網路?1、虛擬記憶體管理
?2、換頁演算法
!3、程序間通訊
?4、程序同步:生產者消費者問題、哲學家就餐問題、讀者寫者問題
!5、死鎖的四個必要條件,避免方法
!6、Linux的一些基本命令,如
ls
、tail
、chmod
等
資料庫!1、tcp,udp區別
!2、HTTP請求和響應的全過程
!3、HTTP常見響應碼:200、301、302、404、500
!4、get和post的區別
!5、forward和redirect的區別
!6、
osi
七層模型!7、
tcp/ip
四層模型及原理!8、TCP和UDP區別
!9、TCP的三次握手,四次關閉
%10、丟包,粘包,
?11、容量控制,擁塞控制
?12、子網劃分
%13、IPV4和IPV6
?14、HTTPS和HTTP/2
海量資料處理!1、
正規化
!2、資料庫事務和隔離級別
!3、為什麼需要鎖,鎖定分類,鎖粒度
%4、
樂觀鎖
,悲觀鎖
的概念及實現方式!5、
分頁
如何實現(Oracle
,MySql
)!6、Mysql引擎
?7、MYSQL語句優化
%8、從一張大表讀取資料,如何解決效能問題
!9、
內連線
,左連線
,右連線
作用及區別!10、
Statement
和PreparedStatement
之間的區別%11、
索引
以及索引的實現
(B+樹介紹、和B樹、R樹區別?12、什麼是資料庫連線池
C語言基礎建構函式、解構函式%1、海量日誌資料,如何提取出某日訪問淘寶次數最多的IP
%2、上億資料,統計其中出現次數最多的前N個數據
%3、5億個int,找出他們的中位數
%4、兩個檔案,各存放50億條URL,每個URL佔64位元組。記憶體限制是4G,找出兩個檔案中相同的URL
%5、有40億個不重複的unsigned int的整數,沒排過序,現在給一個數,如何快速判斷這個數是否在這40億個數當中。
?6、提示:分治、Hash對映、堆排序、雙層桶劃分、Bloom filter、bitmap、資料庫索引、mapreduce
c++相關!1、建構函式和解構函式
%2、為什麼不要在構造器中呼叫虛擬函式
%3、為什麼不要在解構函式中丟擲異常
其他!1、面向物件的三大基本特徵,五大基本原則
%2、C++繼承的記憶體佈局
!3、C++多型的實現機制
!4、new/deletr和malloc/free的區別
Java基礎封裝、繼承、多型!1、為什麼使用補碼
%2、C語言中的記憶體洩漏
!3、進位制轉換
% 4、自己編寫strlen/strcpy/strcmp
! 5、C、C++以及Java之間的區別和各自優缺點
集合相關!1、Java中實現多型的機制是什麼,動態多型和靜態多型的區別
!2、介面和抽象類的區別,如何選擇
!3、Java能不能多繼承,可不可以多實現
%4、
Static Nested Class
和Inner Class
的不同!5、過載和重寫的區別。
!6、是否可以繼承
String
類!7、構造器是否可被
override
?!8、
public
,protected
,private
的區別?
異常相關!1、列舉幾個Java中
Collection
類庫中的常用類!2、
List
、Set
、Map
是否都繼承自Collection
介面?儲存特點分別是什麼?!3、
ArrayList
、LinkedList
和Vector
之間的區別與聯絡!4、
HashMap
和Hashtable
、TreeMap
以及ConcurrentHashMap
的區別!5、
Collection
和Collections
的區別%6、其他的集合類:
treeset
,linkedhashmap
等。
其它!1、
Error
和Exception
的區別!2、異常的型別,什麼是執行時異常
!3、
final
、finally
和finalize
的區別%4、
try-catch-finally
中,如果在catch
中return
了,finally
中的程式碼還會執行麼,原理是什麼?!5、列舉3個以上的
RuntimeException
!6、Java中的異常處理機制的簡單原理和應用
Java高階多執行緒!1、
String
和StringBuffer
、StringBuilder
的區別!2、
==
和equals
的區別%3、
hashCode
的作用,和equals
方法的關係!4、
Input/OutputStream
和Reader/Writer
有什麼區別!5、如何在字元流和位元組流之間轉換?
!6、
switch
可以使用那些資料型別%7、Java的四種引用
!8、序列化與反序列化
!9、正則表示式
!10、
int
和Integer
的區別,什麼是自動裝箱和自動拆箱
JVM底層技術!1、程序和執行緒的區別
!2、並行和併發的區別和聯絡
!3、同步與非同步
!4、多執行緒的實現方式,有什麼區別
!5、什麼叫
守護執行緒
%6、如何停止一個執行緒?
!7、什麼是
執行緒安全
?!8、
synchronized
和lock
的區別!9、當一個執行緒進入一個物件的一個
synchronized
方法後,其它執行緒是否可進入此物件的其它方法?!10、啟動一個執行緒是用
run()
還是start()
?!12、wait和sleep的區別
%13、notify和notifyAll的區別
%14、執行緒池的作用
%15、Java中執行緒池相關的類
IO!1、
gc
的概念,如果A和B物件迴圈引用,是否可以被GC?%2、jvm gc如何判斷物件是否需要回收,有哪幾種方式?
!3、Java中能不能主動觸發GC
!4、JVM的記憶體結構,堆和棧的區別
!5、JVM堆的分代
%6、
Java
中的記憶體溢位是什麼,和記憶體洩露有什麼關係!7、Java的類載入機制,什麼是雙親委派
!8、ClassLoader的類載入方式
其它!1、NIO、AIO和BIO 之間的區別
?2、
IO
和NIO
常用用法
Java WebServlet?1、
hashcode
有哪些演算法!2、反射的基本概念,
反射
是否可以呼叫私有方法!3、Java中
範型
的概念?4、JVM啟動引數,
-Xms
和-Xmx
%5、
代理機制
的實現!6、
String s = new String("s")
,建立了幾個物件。
MVC框架!1、
JSP
和Servlet
的區別,Servelt
的概念。!2、
Servlet
的生命週期!3、Servlet中的
session
工作原理 ,以及設定過期時間的方式!4、Servlet中,
filter
的應用場景有哪些??5、JSP的動態
include
和靜態include
%6、web.xml中常用配置及作用
%7、Servlet的執行緒安全問題
http相關!1、介紹幾個常用的MVC框架
!2、什麼是MVC
!3、
Struts
中請求的實現過程%4、
Spring mvc
與Struts mvc
的區別?5、
Service
巢狀事務處理,如何回滾!6、struts2 中攔截器與過濾器的區別及執行順序
%7、struts2攔截器的實現原理
SSH相關!1、
session
和cookie
的區別!2、HTTP請求中
session
實現原理?%3、如果客戶端禁止Cookie能實現Session嗎?
!4、http中
get
和post
區別!5、
redirect
與forward
的區別!6、常見的web請求返回的狀態碼。404、302、301、500分別代表什麼
容器相關?1、
Hibernate
/Ibatis
/MyBatis
之間的區別?2、什麼是
OR Mapping
%3、hibernate的快取機制、一級和二級快取
!4、使用Spring的好處是什麼,Spring的核心理念
!5、什麼是
AOP
和IOC
,實現原理是什麼!6、spring bean的初始化過程
!7、Spring的
事務管理
,Spring bean注入
的幾種方式%8、spring四種依賴注入方式
web安全!1、什麼是web伺服器、什麼是應用伺服器
!2、常用的web伺服器有哪些?
?3、
Tomcat
和weblogic
的區別
動態代理!1、什麼是
SQL注入
,如何避免。%2、什麼是XSS攻擊,如何避免
%3、什麼是CSRF攻擊,如何避免
編碼問題!1、Java的動態代理的概念
%2、Java的動態代理的實現
其它!1、常用的字元編碼
!2、如何解決中文亂碼問題
設計模式%1、XML的解析方式,以及優缺點。
%2、什麼是ajax,
Ajax
如何解決跨域問題
知識的綜合能力%1、談一下自己瞭解或者熟悉的
設計模式
!2、
Singleton
的幾種實現方式,實現一個執行緒安全的單例。?3、
工廠模式
和抽象工廠模式
之間的區別
工具使用!1、請介紹一下一個http請求的全過程,描述的越全面越好
!2、當你在瀏覽器位址列輸入www.taobao.com,敲下回車之後都發生了什麼
專案相關!1、知道git/svn是幹什麼的嗎?用過嗎
!2、知道maven/gradle是幹什麼的嗎?用過嗎
!3、平常使用什麼IDE,為什麼
!4、平常使用什麼瀏覽器,為什麼
!5、平常開發機器是什麼作業系統的
!6、會在Linux上開發嗎。Linux常用命令會嗎
技術熱情!1、請簡單介紹一下你的這個專案
!2、你在這個專案中充當什麼角色
!3、這個專案的技術選型有做過麼。
!4、選擇某項技術做過哪些調研和對比
!5、這個專案中遇到的最大的問題是什麼?你是如何解決的。
!6、專案中是否考慮過效能、安全性等問題
表達能力!1、當前Java的最新版本
!2、Java8的lambda表示式
%3、Java8的stream API
%4、Java9的模組化
%5、Java10的區域性變數型別推斷
%6、Spring Boot2.0
%7、HTTP/2
%8、會翻牆麼,知道翻牆的原理嗎
!9、你最近在讀什麼書
思考方式!1、能不能簡單做一個自我介紹。
!2、能不能描述一下杭州給你的印象。用三句話概括一下。
其他!1、如何估算杭州有多少軟體工程師
!2、你最近讀過的印象最深的文章是什麼
!3、這篇文章中有幾個觀點,你最贊成哪一個,最不贊成哪一個
推薦閱讀!1、你對加班怎麼看
!2、你還有什麼問題要問我(面試官)的麼
程式設計師面試筆試寶典
程式設計師面試金典
Java程式設計思想
Effective Java
深入理解Java虛擬機器
大話資料結構
劍指Offer
!Hollis技術部落格(http://www.hollischuang.com)及個人公眾號(Hollis)
看了題目不過癮?還想要答案?歡迎關注我的公眾號(Hollis),答案我正在整理,後續分批給出答案。當然,你也可以加入我的星球,和140+位球友共同討論這些面試問題及答案。最後,如果你覺得本文對你有幫助,希望你幫忙點贊和轉發。