知識點關注

基礎篇

1. JVM相關,JAVA裏的垃圾回收有什麼目的?何時會觸發?(追問:頻繁full GC問題排查思路,GVM調優)

垃圾回收的目的,內存管理,釋放無用的對象;
可以完成的描述一次垃圾回收的過程。(年輕代、老年代、永久代)
Full gc 現象,分析定位,解決;java

2. 集合相關,HashMap實現原理?(追問:多線程環境如何使用Map)

HashMap存儲,碰撞,擴容,性能,紅黑樹;
線程相關的HashTable,CurrentHashMap;redis


3. 多線程相關:線程池ThreadPoolExecutor有沒有使用過,解決什麼問題?(追問:線程池的擴容機制)

線程管理解耦,下降資源消耗,提升可管理性
setCorePoolSize和setMaximumPoolSize兩個參數,建立和銷燬的機制。
reject機制默認有Discard/DiscardOld/Abort/CallersRun, 默認爲abort報錯。可以講明白原理的,標記出來 算加分sql

4. 鎖相關:設計一個高速緩存,容許多個線程讀,只容許一個線程寫? 

讀寫鎖,CurrentHashMap
考慮性能和數據一致性數據庫

5. 分佈式:分佈式系統中不一樣的模塊如何進行通訊?

RPC、RMI、Web Service、JMS(MQ)
RPC 和 HTTP比較
RPC框架的原理(註冊發現機制、路由、降級、負載均衡)
dubbo、thrift、
MQ(消息消費模式:廣播、點對點)緩存

6. 操做系統:

從那幾個方面評估機器的負載
  CPU ,當java進程佔用CPU太高的時候,常常100%,怎麼排查
    top查看進程id,ps查看線程id,jstack堆棧信息
  內存,java內存查看分析工具
    gc日誌,在jvm啓動參數中加入 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimestamps -XX:+PrintGCApplicationStopedTime
    jconsole,jmap,jhat,jstat,MAT
  load,load是怎麼計算的
    load 要結合cpu數量來看,咱們假設cpu數量爲4,每一個cpu都正好滿負荷運轉時,load爲4.若是每一個cpu處理任務過程當中,還有一個任務在排隊等待,那麼load爲8。
  網絡IO
    sar -n DEV
cat /home/a.log | grep 'abc' | sort | uniq 理解這段腳本
  統計a.log中包含abc的行,正序排序並去重
用JAVA實現,畫板上codeing
擴展,超大文件,MapReduce思想服務器

7. 數據庫:Mysql

MySQL中有一條SQL比較慢,若是讓你去優化,你會怎麼作?爲何要這樣作?
  explain查看執行計劃,是否走索引,sql自己優化,好比模糊查詢,子查詢,loop
表數據量過大,分庫分表
redis;
讀寫分離;網絡

高級篇

分佈式、集羣環境中,緩存如何刷新,如何保持同步?

A、緩存如何刷新?
  一、定時刷新
  二、主動刷新覆蓋
  每一個緩存框架都有自帶的刷新機制, 或者說緩存失效機制, 就拿Redis和 Ehcache舉例, 他們都有自帶的過時機制, 另外主動刷新覆蓋時, 只需獲取對應的key進行數據的覆蓋便可
B、緩存如何保持同步?
  這個redis有自帶的集羣同步機制, 即複製功能, 具體參考:基於Redis分佈式緩存實現, Ehcache也有分佈式緩存同步的配置, 只須要配置不一樣服務器地址便可, 參照:Ehcache分佈式緩存同步


多線程

相關文章
相關標籤/搜索