1. 程式人生 > >【Java】Java面試

【Java】Java面試

https://segmentfault.com/a/1190000004716061

一、

1、Thread和Runnable的區別:

    繼承Thread類,實現Runnable介面 - java不支援多繼承,但支援多實現,使用Runnable更靈活些;

    Runnable是可以共享資料的,即多個Thread可以同時載入同一個Runnable,runnable裡面的資源是共享的!

    如何停止一個縣執行緒?執行緒編寫中的一些方法?

2、nginx負載均衡:

    輪詢、最小連線數、IP hash、權重

3、MySQL事務和鎖

    事務ACID:

    事務隔離級別-4種:讀未提交、讀提交(大部分資料庫預設隔離級別)、可重讀(Mysql)、可序列化

    共享鎖和排它鎖:

    MyISAM和InnoDB的區別:MyISAM型別不支援事務處理等高階處理,而InnoDB型別支援。MyISAM型別的表強調的是效能,其執行數度比InnoDB型別更快,但是不提供事務支援,而InnoDB提供事務支援以及外部鍵、行級鎖等高階資料庫功能

4、jvm垃圾回收機制的時機:

    引用計數器演算法、根搜尋演算法

5、執行緒安全問題:   

    多執行緒環境下,多個執行緒操作共享資料,因此解決辦法就是同步,多個執行緒使用同一個鎖物件,具體的有:同步程式碼塊、同步方法、靜態同步方法

6、dubbo、服務治理:

    https://cloud.tencent.com/developer/article/1078966

    https://www.jianshu.com/p/9d062eceb765

7、ELK工具:elasticsearch、logstash、kibana

8、docker、k8s、rancher、swarm

9、mybatis的快取原理:一級快取sqlSession級別的(預設開啟,同一個sqlSession中),二級快取Mapper級別的(多個sqlSession可以共享的,同一個namespace中)

10、快取問題:

    快取穿透:查一個一定不存在的資料(解決辦法,一是布隆過濾器即將所有可能存在的資料存在一個足夠大的bitmap中,二是簡單粗暴地快取null結果

且該快取過期時間設定很小如不超過5分鐘)

    快取雪崩:同一時刻大量快取過期,給DB帶來巨大壓力(一是可以在原有失效時間基礎之上加一個隨機1~5分鐘時間,二是用加鎖或者佇列的方式保證快取的單線 程(程序)寫,從而避免失效時大量的併發請求落到底層儲存系統上)

    快取擊穿:某一個快取在某個時間點過期的時候,恰好在這個時間點對這個Key有大量的併發請求過來,這些請求發現快取過期一般都會從後端DB載入資料並回設到快取,這個時候大併發的請求可能會瞬間把後端DB壓垮(簡單分散式互斥鎖(mutex key)、“提前”使用互斥鎖、不過期(本文)、資源隔離元件hystrix(本文)

11、如何使得一個棧的查詢速度達到O(1):犧牲空間,利用兩個棧,另外一個棧單獨用來儲存當前棧位置處時已入棧的元素中的最小值,彈出時同時彈出!

12、spring bean的載入過程

13、spring ioc 和aop

14、設計模式

二、

1、MySQL資料庫索引的實現原理 - 平衡樹

    支援索引型別-B+樹索引、雜湊索引、全文索引

    MyISAM和InnoDB均使用B+樹(平衡多路查詢樹)作為 索引結構:InnoDB中資料檔案本身就是索引檔案,葉節點的data域儲存完整的資料記錄,索引key即為表的主鍵,且通過輔助索引查詢獲取到主鍵值然後再到主索引中獲取到資料記錄,是一種聚集索引;而MyISAM則有資料檔案和索引檔案,葉子節點data域中儲存的是資料記錄的地址,是一種非聚集索引

2、MySQL索引更新的原理

3、MySQL索引失效的情況

    where條件中:or、in、函式、對索引列進行運算(+,-,*,/,! 等)

    where條件中使用比較操作符LIKE和REGEXP,且搜尋模板中的第一個字元不是萬用字元的情況下索引才生效(如LIKE 'abc%'索引生效,LIKE '%abc'索引失效)

    單列索引不儲存null值,複合索引不儲存全null值,null查詢索引無效

     列型別是字串,如果不將資料使用引號則索引將失效

    JOIN操作時,只有主鍵和外來鍵的資料型別相同時,索引才生效

4、HTTP狀態碼:

    200 OK  正常成功處理

    301 Moved Permantently 永久重定向

    302 Found 臨時重定向

    400 Bad Request 請求報文存在語法錯誤或引數錯誤

    401 Unauthorized 傳送的請求需要有HTTP認證資訊或者是認證失敗了

    403 Forbiddern 對請求資源的訪問被伺服器拒絕了

    404 Not Found 伺服器找不到你請求的資源 

    500 Internal Server Error 服務內部錯誤

    204 No Content 請求已成功處理,但沒有內容返回

    206 Patial Content 完成了部分GET請求

    503 Service Unavailable 伺服器超負載或正停機維護,無法處理請求

5、spring中事務的使用方式

    宣告式:不需要對原有的業務做任何修改,通過在XML檔案中定義需要攔截方法的匹配即可完成配置,要求是,業務處理中的方法的命名要有規律,比如setXxx,xxxUpdate等等

    註解式:只需要在Spring配置檔案中定義一個事務管理物件(如DataSourceTransactionManager),然後加入<tx:annotation-driven/>節點,引用該事務管理物件,然後即可在需要進行事務處理的類和方法使用@Transactional進行標註

6、如何自定義一個具有實際意義功能的註解?

    註解宣告、註解解析(或者切面處理)、使用註解

三、

1、樂觀鎖和悲觀鎖的區別,如何去實現一個樂觀鎖?

2、concurrentHashMap在jdk1.7和jdk1.8中的區別是什麼?

3、如何終止一個執行緒?

4、aop不能使用的一些場景?

5、如何實現一個spring-boot-starter開箱即用的工程?

6、哪些情況下會出現棧溢位OOM?

四、

1、多租戶系統開發?sass、paas

2、springboot統一異常處理

3、spring security實現許可權控制

五、

1、dubbo服務註冊原理是什麼?

2、dubbo服務間負載均衡是怎麼實現的?dubbo熔斷如何實現的?

3、mysql索引為什麼使用的是B+二叉樹?

4、螞蟻基本上使用的都是sofa分散式框架?

5、為什麼要使用zookeeper?zookeeper有什麼優勢?

6、做過前端開發,有自己的作品嗎?網站域名是什麼?

7、分散式系統中各個日誌如何進行同步的?怎麼實現統計網站訪問量等圖形介面的?