java 架構師知識體系 & 常見面試題

第一部分 操作系統

1.操作系統有哪些io模型
https://blog.csdn.net/sinat_34990639/article/details/52778562
2.幾種進程間的通信方式:管道,信號,消息,信號量,共享內存,socket
3.三次握手與四次關閉
4.osi七層模型
5.tcp粘包與拆包
6.常見進程同步問題
生產者消費者,哲學家就餐,讀者寫者
7.棧溢出,堆溢出,SEH
8.sysenter,系統調用過程
9.逆向中經常看到的DriverEntry開頭的GS代碼幹啥用的,對應哪個編譯選項
10.ntfs文件格式
11.完成端口在內核層怎麼表示
12.windows內核中網絡部分的spi,tdi,ndis過濾過程
13.windows內核中,LPC和RPC過程
14.windows內核中,打開文件過程。
createfile->NTCreateFile->IoCreateFile
->ObOpenObjectByName->ObpLookupObjectName->ObReferenceObjectByHandle
->IopParseFile->IopParseDevice->Irp到文件系統->IoCallDriver->scsi磁盤操作
15.進程創建在應用層和內核層的具體流程
16.如何進行棧回溯.

第二部分 java

一. java基礎

0.java語言的常用規範有哪些
jcp.org. java語言規範,java虛擬機規範,jmx 管理擴展規範,java EE核心 13規範
1.面向對象的三大基本特徵和五大基本原則
三大特徵:封裝,繼承,多態
五大原則:單一職責,開放封閉,里氏替換,依賴倒置,接口隔離
2.值傳遞和引用傳遞
3.什麼是多態,方法重寫與重載
4.適合用繼承父類的場景,適合用實現接口的場景
5.整數類型中byte,short,int,long的取值範圍
6.什麼是自動拆裝箱
自動裝箱,引用valueOf
7.Integer的緩存,Integer的==和equals的區別
Integer內部緩存-128到127之間整數,所以==比較爲true,其他值是new新對象,==爲false
equals比較的是數值.Integer,Byte,Short,Long,Character都有緩存機制.
8.string,stringbuffer和stringbuilder什麼區別
String不可變,做+時,會被優化成StringBuilder的append操作,每次新增字串.string是final,形成字符串池,節省空間,線程安全,提高效率.
StringBuffer和StringBuilder都繼承自AbstractStringBuilder.
StringBuffer線程安全,方法前面都加了synchronized關鍵字,StringBuilder線程不安全
9.爲什麼金額計算不能用doube,要用BigDecimal
double精度丟失,比如10可能表示爲9.99999。和整數10用equals不等,通過instanceof比較,需要轉成.doubleValue().
10.字符串拼接的幾種方式
"+",concat,join,append
11.String.valueOf和Integer.toString的區別
String.valueOf如果爲空的話,返回"null"字串,然後調用Integer.toString()
12.String對+的處理性能問題
轉成StringBuilder.append處理
13.transient,instanceof,final,static,volatile,synchronized,const原理
transient關鍵字在hotspot源碼中如何解析處理的,暫時沒找到.靜態成員不參與序列化.
instanceof在Hotspot中源碼位置沒找到。注意和getClass比較,instance可以比較繼承關係,
getClass不行,只能匹配本身類
final用於定義常量,final的變量引用不能更改,方法不能覆蓋,類不能繼承.
synchronized用於代碼塊時用monitorenter指令實現,在hotspot的TemplateTable::monitorenter代碼中.
volatile處理緩存一致性問題,MESI協議,保證可見性,禁止重排序.處理單例的Double check lock問題.

14.常用集合類的底層實現,區別不同jdk版本比如ArrayList和LinkedList,SynchronizedList,HashMap和HashTable和
TreeMap和ConcurrentHashMap,HashSet和LinkedHashSet和TreeSet
15.java8的Stream用法,lambda表達式用法
16.Collection和Collections區別.常用的集合工具類有哪些第三方包,apache common,guava
17.使用Arrays.asList有什麼需要注意的
18.Enumeration和 Iterator 的區別
19.快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什麼?
20.常用java併發工具包實現原理,比如CopyOnWriteArrayList,ConcurrentSkipListMap
21.Enum怎麼實現序列化的,怎麼保證線程安全性
22.BIO,NIO,AIO,netty的原理
23.靜態,動態代理的原理,實現方式,和AOP的關係
24.序列化的底層原理,安全問題,爲什麼要設置serialVersionUID
25.自定義註解的用法
26.java的常用註解
27.JMS的消息模型
28.jmx的使用場景
29.泛型的類型擦除原理
30.限定和非限定通配符,extends和super用法
31.通配符,?和TypeReference,ParameterizedType的使用場景
32.junit,mock,mockito的用法
33.spi的原理
34.異常中finally 和 return 的執行順序
35.Error,Exception,RuntimeException場景
36.格林威治時間、CET,UTC,GMT,CST 幾種常見時間的含義和關係
37.SimpleDateFormat的線程安全性
38.URL 編解碼、Big Endian 和 Little Endian
39.如何解決亂碼問題
40.常用的語法糖
41.線程池原理
32.爲什麼不能用Executors創建線程池
33.線程如何排查
34.CAS、樂觀鎖與悲觀鎖、數據庫相關鎖機制、分佈式鎖、偏向鎖、輕量級鎖、重量級鎖、monitor、
鎖優化、鎖消除、鎖粗化、自旋鎖、可重入鎖、阻塞鎖、死鎖.
35.synchronized實現原理
36.java 8,9,10,11,增加了什麼內容
37.java同步幾種方法?threadlocal怎麼實現。
38.volatile的實現原理
39.常用併發包的原理,比如AbstractQueuedSynchronizer,ReentrantReadWriteLock,ReentrantLock,CountDownLatch,Executors,Atomic*.
AbstractQueuedSynchronizer:通過雙向隊列實現線程節點的等待喚醒.在acquire()中調用addWaiter在隊列尾部添加節點,然後for死循環進入自旋狀態.release()中調用unparkSuccessor喚醒後繼節點,然後把後繼節點作爲首節點,調用sun.misc.Unsafe.unpark()喚醒線程完成出隊列操作.
ReentrantLock內部通過Sync實現,屬於排他鎖,分爲公平鎖FairSync和非公平鎖NonfairSync兩個子類.內部有個整數states,存儲線程衝入的次數,每次衝入加1,unlock時減一,減到0時釋放鎖.公不公平主要是獲取鎖時是否按照FIFO的順序獲取鎖.公平鎖調用tryAcquire()時多個hasQueuedPredecessors(),判斷是不是隊列中的第一個,如果不是第一個,直接返回false.
ReentrantReadWriteLock屬於讀寫鎖,可重入,內部兩個對象ReadLock,WriteLock, 兩個內部都通過Sync實現.重入次數通過高16位寫狀態,低16位讀狀態判斷.
40.java程序的的cpu load過高,內存過高,一般是什麼問題,怎麼定位.
41.Java中是否可以覆蓋(override)一個private或者是static的方法
42.java rmi使用方法

二.jvm底層

1.class文件格式
2.java的對象一定在堆上分配嗎?
3.可見性、原子性、順序性、happens-before先發生於、內存屏障、編譯器指令重排和CPU指令重排
4.GC 算法:標記清除、引用計數、複製、標記壓縮、分代回收、增量式回收
5.對象存活的判定,可達性分析
6.垃圾收集器(CMS、G1、ZGC、Epsilon)
7.jvm參數調優-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、
-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold
8.oop普通對象指針,klass格式,對象頭格式.java對象在Hotspot中的存儲格式.
9.常用性能監控和故障調優工具
jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace, TProfiler
Arthas
10.minor gc和full gc區別
11.gc的safe point做什麼用?包含哪些?
12.JVM的永久代中會發生垃圾回收麼?
13.雙親加載模型
14.常用的ClassLoader
15.常用模塊化實現,比如jboss modules、osgi、jigsaw
16.JIT如何優化
17.常用反編譯工具,javac,jad,javap,crf
18.如何用位運算實現用位運算實現加、減、乘、除、取餘
19.java角度的CPU緩存和僞共享
20.常見的oom類型,HeapOutOfMemory、 Young OutOfMemory、
MethodArea OutOfMemory、ConstantPool OutOfMemory、
DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow
21.java程序響應慢如何定位
22.java頻繁full gc如何定位
23.如何查看gc 日誌
24.如何排查內存泄露
25.hotspot如何進行語法分析,語義分析(LL,遞歸下降,LR)
26.hotspot編譯java代碼經歷了哪些過程
27.hotspot的設計架構
28.jdb調試命令
jdb Test
stop in Test.main
run
29.hotspot的類加載流程
(1).ClassLoader模塊初始化類加載器,加載libjava.so,libzip.(2).通過ClassFile模塊的ClassFileParser加載class文件,解析魔數,主從版本號,常量池,訪問標識,全限定名的索引,接口,字段,方法,vtable信息.創建對應的klassOop對象.(3).鏈接.
30.hotspot中new一個對象,具體執行了什麼字節碼,對應的幾個字節碼,在hotspot怎麼解釋執行?
31.happen-before的規則有哪些?
代碼執行結果有序,加鎖操作的先解鎖才能加鎖,volatile變量先寫後讀,傳遞原則,線程的start最先,線程的中斷先interrupt再發中斷事件,線程先終止再觸發終止事件,對象先初始化,才能析構.如果兩個操作不存在上述任何原則,jvm可以進行重排序.如果A happen-before B,則A在內存上的多線程操作對B可見.比如兩個線程執行i++;
32.重排序的條件.比如a=1;b=1;c=a+b; 比如a是成員變量,方法writer(){a =1;flag=true} read() {if(falg) {int i = a +a}};多線程執行結果可能不一樣.
33.如何獲取對象的佔用內存大小?如何獲取對象的內存地址?
34. public int add() { Integer a = 1; int b= 2; int c = a + b; return c;}  這個加法函數,虛擬機編譯成什麼字節碼,怎麼解釋執行的. 

三.設計模式與軟件架構

1.設計模式的六大原則
2.三類設計模式,創建型,結構型,行爲型
3.reactor和proactor模型什麼區別?
4.單例模式的七種寫法:懶漢-線程不安全,懶漢-線程安全,餓漢,餓漢-變種,靜態內部類,枚舉,雙重檢驗鎖
5.談談如何提高代碼的擴展性。
6.列舉幾種軟件架構,
7.什麼是領域驅動設計,DDD
8.類結構的幾種關係,is a 繼承, has a 聚合, like a 組合
9.多個模塊組成的系統,設計時注意什麼?調用解耦,減少重複代碼,邊界清晰,模塊內代碼遵循設計模式或者算法,
代碼規範。注意負載均衡,分庫分表,緩存,冪等性,分佈式事務,鎖的問題。
10.常用架構圖的怎麼畫.

第三部分 java web

一.http協議

1.http的get和post區別.區分@RequestParam,@RequestBody使用場景
2.常用的web請求返回的狀態碼
3.http報文格式,1.0和1.1版本的區別
4.http和https區別
5.常用的java的http庫,HttpClient
6.cookie與session區別。cookie禁用,怎麼實現session
7.什麼是DNS污染,DNS劫持
8.正向代理和反向代理應用場景

二.應用服務器
1.tomcat架構
https://blog.csdn.net/feivirus/article/details/85948673
connector和container組成。
connector處理socket連接。.container解析處理具體的http請求報文,由外到內主要包括Engine引擎,Host主機,Context上下文,Wrapper四部分.Host主要用來區分同一個server上的多個虛擬主機。Context用來區分同一主機上的多個網站。wrapper用來區分同一網站的不同的Servlet請求.
2.nginx架構

三.servlet
1.servlet的生命週期
2.filter用法,filter和aop區別
3.web.xml常用配置
4.sendRedirect()和forward()區別?
5.jsp常用指令

四.spring/springmvc
1.aop原理
2.ioc原理
3.url請求從瀏覽器,到tomcat,到servlet,到springmvc,到入庫的處理過程
4.spring security原理
5.Spring支持的事務管理類型
6.spring的四中依賴注入方式(byName, byType,contructor,autodetect)
7.解釋Spring框架中bean的生命週期
8.spring boot的starter原理
9.spring boot自動配置的順序,比如文件,註解
10.shiro默認有哪些攔截器
11.通過shiro怎麼實現一個對用戶是否登錄的驗證?它是怎麼實現的?

五.mybatis
1.常用OR Maping方式,hibernate和mybatis區別
2.hibernate的懶加載
3.hibernate的緩存機制
4.Mybatis的插件運行原理
SqlSessionFactory,SqlSession,Executor,BoundSql,StatementHandler
5.mybatis中#和$區別
6.mybatis中Dao接口裏的方法,參數不同時,方法能重載嗎?


第四部分 數據庫


1.mysql設計架構
連接處理,sql詞法和語法解析,sql優化,sql執行(存儲引擎).
https://blog.csdn.net/feivirus/article/details/83716680
2.InnoDB引擎架構
3.mysql是怎麼解析sql語句解析的,詞法,語法分析過程
4.Hash索引、B樹索引的過程
5.索引的最左前綴原則
6.組合索引的生效原理
7.事務的4種隔離級別
8.行鎖,表鎖實現原理
9.樂觀鎖,悲觀鎖原理
10.binlog的日誌格式的種類和分別
11.MySQL的主從複製原理以及流程.
12.MySQL數據庫cpu飆升到100%的話怎麼處理
13.select count(*) 和select count(1) 和select count(列名)什麼區別
14.現在有一張正在使用的表,數據量爲1500W,你如何做查詢優化?
15.表中有大字段X(例如:text類型),且字段X不會經常更新,以讀爲爲主,請問
(1)、您是選擇拆成子表,還是繼續放一起;
(2)、寫出您這樣選擇的理由。
16.分庫分表的場景
17.數據庫連接池原理
18.mysql的選取,投影,連接分別實現什麼.
19.mysql的查詢語法樹結構是什麼樣子的
https://blog.csdn.net/feivirus/article/details/83716680

第五部分  中間件框架


一.分佈式理論
1.cap理論
2.2pc和3pc
3.tcc
4.base

二.zookeeper
1.測試和生產公用一套zookeeper,怎麼保證消費不衝突
2.paxos算法原理
3.zookeeper的應用場景有哪些
4.zookeeper的leader選舉過程
5.zookeeper的監聽機制

三.微服務與dubbo
1.dubbo的設計架構
service,config,proxy,registry,cluster,monitor,protocol,,exchange,transport,
serialize模塊
2.dubbo的服務註冊,服務發現,服務治理怎麼實現的。
3.負載均衡
Random LoadBalance(隨機均衡算法)、;RoundRobin LoadBalance(權重輪循均衡算法)、LeastAction LoadBalance(最少活躍調用數均衡算法)、ConsistentHash LoadBalance(一致性Hash均衡算法)
4.dubbo運行時,突然所有的zookeeper全部宕機,dubbo是否還會繼續提供服務.
5.service mesh


四.kafka
1.kafka的設計架構是什麼?

五.rabbit MQ
1.RabbitMQ除了direct exchange還有哪些exchange。爲什麼要用channel,不直接用tcp連接

六.redis
1.緩存雪崩
2.內存管理模型


七.mongo


八.spring cloud
1.spring cloud各層的常用組件
服務發現與註冊:Eureka,zookeeper,consul
負載均衡:feign,spring cloud loadbalance,
服務配置:spring cloud config
服務限流與熔斷:hystrix,sentinal
服務鏈路追蹤:dapper
服務網關zuul,安全,消息

九.分佈式數據庫mycat

十.shardingsphere

十一.docker和kubernets

十二.分佈式鏈路追蹤skywalking,dapper

十三.openstack/kvm

十四.spring state machie 與squirrel
1.狀態機應用場景
2.如何實現一個狀態機.
https://blog.csdn.net/feivirus/article/details/85370385

十五.日誌
1.log4j和slf4j的區別

十六.disruptor

十七.akka


第六部分 數據結構與算法

1.棧的兩種存儲結構
2.二叉樹,字典樹,平衡樹,排序樹,
B樹,B+樹,R樹,多路樹,紅黑樹
3.大根堆,小根堆
4.有向圖,DAG,有向無環圖,拓撲
5.穩定和不穩定的排序算法
6.深度和廣度優先搜索
7.海量數據處理算法原理:分治,hash映射,堆排序,雙層桶劃分,
bloom filter
8.機器學習算法
9.在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b.
10.怎麼判斷一字符串是不是對稱的,如:abccba.
11.1000萬次險企報價記錄,,險企名稱255字節內。怎麼查詢報價次數最多的10家險企.
12.flex/bison過程

第七部分 大數據


一.hdfs 
二.map reduce
三.hbase
四.hive
五.yarn
六.spark
七.storm
八.flink
九.lucene
十. ElasticSearch
十一.mahout
十二.solr

第八部分 網絡安全


一.web安全top10
1.sql注入
2.xss
3.csrf


第九部分 前端


1.定義和使用一個freemarker的宏。
2.說幾個常用的bootstrap組件?怎麼做分頁?怎麼選時間?爲什麼是12柵格?
3.velociy中的#include和#parse有什麼區別
4.webx中的screen,action,control是怎麼渲染到頁面中的?

第十部分 運維 


1.常用的配置比如mysql.properties,在開發環境、測試環境、生產環境裏面的值肯定不一樣,你是如何用自動化構建工具解決這裏面內容的修改問題?
2.如何部署一個jar包到maven倉庫,使用什麼命令?
3.常用代碼掃描插件,FindBugs,阿里代碼規範插件,PMD,check Style,Lint,
4.代碼掃描插件原理
5.dapper
6.LVS負載均衡原理
7.HA Proxy原理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章