天天看點

架構演進,阿裡資深Java工程師帶你手撕之架構大全(性能優化+分布式+架構+微服務)前言架構技術的演變01 開源架構(Spring +SpringMVC+Mybatis){}和${}的差別是什麼?02 分布式(限流+通訊+資料庫)03 微服務(Dubbo+Spring Boot+Spring Cloud)04 性能優化(JVM+Tomcat+MySQL)

前言

新技術層出不窮。過去十年時間裡,我們經曆了許多激動人心的新技術,包括那些新的架構、語言、平台、程式設計模型等等。這些新技術極大地改善了開發人員的工作環境,縮短了産品和項目的面世時間。然而作為在軟體行業第一線工作多年的從業者,我們卻不得不面對一個現實,那就是當初采用新技術的樂趣随着項目周期的增長而迅速減少。無論當初的選擇多麼光鮮,半年、一年之後,隻要這個項目依然活躍,業務在擴張——越來越多的功能需要加入,一些公共的問題就會逐漸顯露出來。建構過慢,完成新功能讓你痛不欲生,團隊成員無法很快融入,文檔無法及時更新等等。

架構

架構這個詞在各種場合不斷地以各種面目表現出來。從維基百科的詞條看來,我們經常聽到的有插件架構(Plugin),以資料庫為中心的架構(Database Centric),模型-視圖-控制器架構(MVC),面向服務的架構(SOA),三層模型(Three-Tier model),模型驅動架構(MDA)等等等等。奇妙的是,這些詞越大,實際的開發者就越痛苦。SOA很好——但在它提出的那個年代,帶給開發者的隻是面向廠商虛無缥缈的“公共資料類型”;MDA甚至都沒有機會淪為新一輪令人笑話的CASE工具。

在繼續閱讀之前,讀者不妨問自己一個問題:在長期的項目中,這些大詞是否真的切實給你帶來過好處?更為功利的問題是:你,作為戰鬥在一線的開發者,在長期項目中可曾有過美好的體驗?

技術的演變

企業應用的發展似乎從十年前開始騰飛。從Microsoft ASP/LAMP(Linux、Apache、MySQL、PHP)年代開始,各種企業應用紛紛向浏覽器遷移。經過十年的發展,目前陣營已經百花齊放。與過去不同,現在的技術不僅僅在程式設計語言方面,常見的程式設計套路、最佳實踐、方法學、社群,都是各種技術獨特擁有的。

之前有零零散散整理過一些專題給大家參考學習,這次幹脆全部彙總起來,一次性來個終極手撕之架構大全,包含開源架構、分布式、微服務、性能優化等四個大專題共17個小專題,全部一鍋端,送給大家一起學習~

01 開源架構(Spring +SpringMVC+Mybatis)

開源架構答案解析如下:

架構演進,阿裡資深Java工程師帶你手撕之架構大全(性能優化+分布式+架構+微服務)前言架構技術的演變01 開源架構(Spring +SpringMVC+Mybatis){}和${}的差別是什麼?02 分布式(限流+通訊+資料庫)03 微服務(Dubbo+Spring Boot+Spring Cloud)04 性能優化(JVM+Tomcat+MySQL)

1.1 手撕開源架構之Spring

  1. 什麼是 Spring 架構?Spring 架構有哪些主要子產品?
  2. 使用 Spring 架構能帶來哪些好處?
  3. 什麼是控制反轉(IOC)
  4. 請解釋下 Spring 架構中的 IoC
  5. BeanFactory 和 和 ApplicationContext 有什麼差別?
  6. Spring 有幾種配置方式?
  7. 如何用基于 XML 配置的方式配置 Spring
  8. 如何用基于 Java 配置的方式配置 Spring
  9. 怎樣用注解的方式配置 Spring
  10. 請解釋 Spring Bean 的生命周期?
  11. Spring Bean 的作用域之間有什麼差別?
  12. Spring 架構中的單例 Beans 是線程安全的麼?
  13. 請舉例說明如何在 Spring 中注入一個 Java Collection
  14. 如何向 Spring Bean 中注入一個 Java.util.Properties
  15. 請解釋 Spring Bean 的自動裝配?
  16. 請解釋自動裝配模式的差別?
  17. 如何開啟基于注解的自動裝配?
  18. 請舉例解釋@Required 注解?
  19. 請舉例解釋@Autowired 注解?
  20. 請舉例說明@Qualifier 注解?
  21. 構造方法注入和設值注入有什麼差別?
  22. Spring 架構中有哪些不同類型的事件?
  23. Spring 架構中都用到了哪些設計模式?

1.2 手撕開源架構之SpringMVC

  1. 什麼是 SpringMvc?
  2. Spring MVC 的優點:
  3. SpringMVC 工作原理?
  4. SpringMVC 流程?
  5. SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
  6. 如果你也用過 struts2.簡單介紹下 springMVC 和 struts2 的差別有哪些?
  7. SpingMvc 中的控制器的注解一般用那個,有沒有别的注解可以替代?
  8. @RequestMapping 注解用在類上面有什麼作用?
  9. 怎麼樣把某個請求映射到特定的方法上面?
  10. 如果在攔截請求中,我想攔截 get 方式送出的方法,怎麼配置?
  11. 怎麼樣在方法裡面得到 Request,或者 Session?
  12. 我想在攔截的方法裡面得到從前台傳入的參數,怎麼得到?
  13. 如果前台有很多個參數傳入,并且這些參數都是一個對象的,那麼怎麼樣快速得到這個對象?
  14. SpringMvc 中函數的傳回值是什麼?
  15. SpringMVC 怎麼樣設定重定向和轉發的?
  16. SpringMvc 用什麼對象從背景向前台傳遞資料的?
  17. SpringMvc 中有個類把視圖和資料都合并的一起的,叫什麼?
  18. 怎麼樣把 ModelMap 裡面的資料放入 Session 裡面?
  19. SpringMvc 怎麼和 AJAX 互相調用的?
  20. 講下 SpringMvc 的執行流程
  21. SpringMvc 裡面攔截器是怎麼寫的?
  22. 當一個方法向 AJAX 傳回特殊對象,譬如 Object,List 等,需要做什麼處理?

1.3 手撕開源架構之Mybatis

  1. 什麼是 MyBatis?
  2. 講下 MyBatis 的緩存
  3. Mybatis 是如何進行分頁的?分頁插件的原理是什麼?
  4. 簡述 Mybatis 的插件運作原理,以及如何編寫一個插件?
  5. Mybatis 動态 sql 是做什麼的?都有哪些動态 sql?能簡述一下動态 sql 的執行原理不?
  6. {}和${}的差別是什麼?

  7. 為什麼說 Mybatis 是半自動 ORM 映射工具?它與全自動的差別在哪裡?
  8. Mybatis 是否支援延遲加載?如果支援,它的實作原理是什麼?
  9. MyBatis 與 Hibernate 有哪些不同?
  10. MyBatis 的好處是什麼?
  11. 簡述 Mybatis 的 Xml 映射檔案和 Mybatis 内部資料結構之間的映射關系?
  12. 什麼是 MyBatis 的接口綁定,有什麼好處?
  13. 接口綁定有幾種實作方式,分别是怎麼實作的?
  14. 什麼情況下用注解綁定,什麼情況下用 xml 綁定?
  15. MyBatis 實作一對一有幾種方式?具體怎麼操作的?
  16. Mybatis 能執行一對一、一對多的關聯查詢嗎?都有哪些實作方式,以及它們之間的差別?
  17. MyBatis 裡面的動态 Sql 是怎麼設定的?用什麼文法?
  18. Mybatis 是如何将 sql 執行結果封裝為目标對象并傳回的?都有哪些映射形式?
  19. Xml 映射檔案中,除了常見的 select|insert|updae|delete 标簽之外,還有哪些标簽?
  20. 當實體類中的屬性名和表中的字段名不一樣,如果将查詢的結果封裝到指定 pojo?
  21. 模糊查詢 like 語句該怎麼寫
  22. 通常一個 Xml 映射檔案,都會寫一個 Dao 接口與之對應, Dao 的工作原理,是否可以重載?
  23. Mybatis 映射檔案中,如果 A 标簽通過 include 引用了 B 标簽的内容,請問,B 标簽能否定義在 A 标簽的後面,還是說必須定義在 A 标簽的前面?
  24. Mybatis 的 Xml 映射檔案中,不同的 Xml 映射檔案,id 是否可以重複?
  25. Mybatis 中如何執行批處理?
  26. Mybatis 都有哪些 Executor 執行器?它們之間的差別是什麼?
  27. Mybatis 中如何指定使用哪一種 Executor 執行器?
  28. Mybatis 執行批量插入,能傳回資料庫主鍵清單嗎?
  29. Mybatis 是否可以映射 Enum 枚舉類?
  30. 如何擷取自動生成的(主)鍵值?
  31. 在 mapper 中如何傳遞多個參數?
  32. resultType resultMap 的差別?
  33. 使用 MyBatis 的 mapper 接口調用時有哪些要求?
  34. Mybatis 比 IBatis 比較大的幾個改進是什麼?
  35. IBatis 和 MyBatis 在核心處理類分别叫什麼?
  36. IBatis 和 MyBatis 在細節上的不同有哪些?

02 分布式(限流+通訊+資料庫)

分布式答案解析如下:

架構演進,阿裡資深Java工程師帶你手撕之架構大全(性能優化+分布式+架構+微服務)前言架構技術的演變01 開源架構(Spring +SpringMVC+Mybatis){}和${}的差別是什麼?02 分布式(限流+通訊+資料庫)03 微服務(Dubbo+Spring Boot+Spring Cloud)04 性能優化(JVM+Tomcat+MySQL)

2.1 手撕分布式限流(Nginx+ZooKeeper)

(1) 手撕分布式限流之Nginx

  1. 請解釋一下什麼是 Nginx?
  2. 請列舉 x Nginx 的一些特性。
  3. 請列舉 x Nginx 和 和 Apache 之間的不同點
  4. 請解釋 x Nginx 如何處理 P HTTP 請求。
  5. 在 x Nginx 中,如何使用未定義的伺服器名稱來阻止處理請求?
  6. 使用 “ 反向代理伺服器 ”
  7. 請列舉 x Nginx 伺服器的最佳用途。
  8. 請解釋 x Nginx 伺服器上的 r Master 和 和 r Worker 程序分别是什麼?
  9. 請解釋你如何通過不同于 0 80 的端口開啟 Nginx?
  10. 請解釋是否有可能将 x Nginx 的錯誤替換為 2 502 錯誤?
  11. 在 x Nginx 中,解釋如何在 L URL 中保留雙斜線? ?
  12. 請解釋 e ngx_http_upstream_module 的作用是什麼?
  13. 請解釋什麼是 K C10K 問題?
  14. 請陳述 s stub_status 和 和 r sub_filter 指令的作用是什麼?
  15. 解釋 x Nginx 是否支援将請求壓縮到上遊?
  16. 解釋如何在 x Nginx 中獲得目前的時間?
  17. 用 x Nginx 伺服器解釋s -s 的目的是什麼?
  18. 解釋如何在 x Nginx 伺服器上添加子產品?

(2)手撕分布式限流之ZooKeeper

  1. ZooKeeper 是什麼?
  2. ZooKeeper 提供了什麼?
  3. Zookeeper 檔案系統
  4. 四種類型的 znode
  5. Zookeeper 通知機制
  6. Zookeeper 做了什麼?
  7. zk 的命名服務(檔案系統)
  8. zk 的配置管理(檔案系統、通知機制)
  9. Zookeeper 叢集管理(檔案系統、通知機制)
  10. Zookeeper 分布式鎖(檔案系統、通知機制)
  11. 擷取分布式鎖的流程
  12. Zookeeper 隊列管理(檔案系統、通知機制)
  13. Zookeeper 資料複制
  14. Zookeeper 工作原理
  15. zookeeper 是如何保證事務的順序一緻性的?
  16. Zookeeper 下 Server 工作狀态
  17. zookeeper 是如何選取主 leader 的?
  18. 分布式通知和協調
  19. 機器中為什麼會有 leader?
  20. zk 節點當機如何處理?
  21. Zookeeper 同步流程
  22. zookeeper 負載均衡和 nginx 負載均衡差別
  23. zookeeper watch 機制

2.2 手撕分布式通訊(Kafka+ActiveMQ+RabbitMQ)

(1)手撕分布式通訊之kafka

  1. Kafka 的設計時什麼樣的呢?
  2. 資料傳輸的事物定義有哪三種?
  3. Kafka 判斷一個節點是否還活着有那兩個條件?
  4. producer 是否直接将資料發送到 broker 的 leader(主節點)?
  5. Kafa consumer 是否可以消費指定分區消息?
  6. Kafka 消息是采用 Pull 模式,還是 Push 模式?
  7. Kafka 存儲在硬碟上的消息格式是什麼?
  8. Kafka 高效檔案存儲設計特點:
  9. Kafka 與傳統消息系統之間有三個關鍵差別
  10. Kafka 建立 Topic 時如何将分區放置到不同的 Broker 中
  11. Kafka 建立的分區會在哪個目錄下建立
  12. partition 的資料如何儲存到硬碟
  13. kafka 的 ack 機制
  14. Kafka 的消費者如何消費資料
  15. 消費者負載均衡政策
  16. 資料有序
  17. kafaka 生産資料時資料的分組政策

(2)手撕分布式通訊之ActiveMQ

  1. 什麼是 ActiveMQ?
  2. ActiveMQ 伺服器當機怎麼辦?
  3. 丢消息怎麼辦?
  4. 持久化消息非常慢
  5. 消息的不均勻消費。
  6. 死信隊列。
  7. ActiveMQ 中的消息重發時間間隔和重發次數嗎?

(3)手撕分布式通訊之RabbitMQ

  1. RabbitMQ 中的 broker 是指什麼?cluster 又是指什麼?
  2. 什麼是中繼資料?中繼資料分為哪些類型?包括哪些内容?與 cluster 相關的中繼資料有哪些?中繼資料是如何儲存的?中繼資料在 cluster 中是如何分布的?
  3. RAM node 和 disk node 的差別?
  4. RabbitMQ 上的一個 queue 中存放的 message 是否有數量限制?
  5. RabbitMQ 概念裡的 channel、exchange 和 queue 這些東東是邏輯概念,還是對應着程序實體?這些東東分别起什麼作用?
  6. vhost 是什麼?起什麼作用?
  7. 在單 node 系統和多 node 構成的 cluster 系統中聲明 queue、exchange ,以及進行 binding 會有什麼不同?
  8. 用戶端連接配接到 cluster 中的任意 node 上是否都能正常工作?
  9. cluster 中 node 的失效會對 consumer 産生什麼影響?若是在 cluster 中建立了mirrored queue ,這時 node 失效會對 consumer 産生什麼影響?
  10. 能夠在地理上分開的不同資料中心使用 RabbitMQ cluster 麼?
  11. 為什麼 heavy RPC 的使用場景下不建議采用 disk node ?
  12. 向不存在的 exchange 發 publish 消息會發生什麼?向不存在的 queue 執行consume 動作會發生什麼?
  13. routing_key 和 binding_key 的最大長度是多少?
  14. RabbitMQ 允許發送的 message 最大可達多大?
  15. 什麼情況下 producer 不主動建立 queue 是安全的?
  16. “dead letter”queue 的用途?
  17. 為什麼說保證 message 被可靠持久化的條件是 queue 和 exchange 具有durable 屬性,同時 message 具有 persistent 屬性才行?
  18. 什麼情況下會出現 blackholed 問題?
  19. 如何防止出現 blackholed 問題?
  20. Consumer Cancellation Notification 機制用于什麼場景?
  21. Basic.Reject 的用法是什麼?
  22. 為什麼不應該對所有的 message 都使用持久化機制?
  23. RabbitMQ 中的 cluster、mirrored queue,以及 warrens 機制分别用于解決什麼問題?存在哪些問題?

2.3 手撕分布式之緩存(Redis+memcached+MongoDB)

(1)手撕分布式緩存之Redis

  1. redis 簡介
  2. 為什麼要用 redis /為什麼要用緩存(高性能、高并發)
  3. 為什麼要用 redis 而不用 map/guava 做緩存?
  4. redis 和 memcached 的差別
  5. redis 常見資料結構以及使用場景分析(String、Hash、List、Set、Sorted Set)
  6. redis 設定過期時間
  7. redis 記憶體淘汰機制(MySQL裡有2000w資料,Redis中隻存20w的資料,如何保證Redis中的資料都是熱點資料?)
  8. redis 持久化機制(怎麼保證 redis 挂掉之後再重新開機資料可以進行恢複)
  9. redis 事務
  10. Redis 常見異常及解決方案(緩存穿透、緩存雪崩、緩存預熱、緩存降級)
  11. 分布式環境下常見的應用場景(分布式鎖、分布式自增 ID)
  12. Redis 叢集模式(主從模式、哨兵模式、Cluster 叢集模式)
  13. 如何解決 Redis 的并發競争 Key 問題
  14. 如何保證緩存與資料庫雙寫時的資料一緻性?

(2)分布式緩存之memcached

  1. memcached 是怎麼工作的?
  2. memcached 最大的優勢是什麼?
  3. memcached 和伺服器的 local cache (比如 PHP 的 的 APC 、mmap 檔案等)相比,有什麼優缺點?
  4. memcached 和 和 MySQL 的 的 query cache 相比,有什麼優缺點?
  5. memcached 的 的 cache 機制是怎樣的?
  6. memcached 如何實作備援機制?
  7. 我需要把 memcached 中的 item 批量導出導入,怎麼辦?
  8. memcached 如何處理容錯的?
  9. 如何将 memcached 中 中 item 批量導入導出?
  10. memcached 是如何做身份驗證的?
  11. memcached 的多線程是什麼?如何使用它們?
  12. memcached 能接受的 key 的最大長度是多少?
  13. memcached 對 對 item 的過期時間有什麼限制?
  14. memcached 最大能存儲多大的單個 item ?
  15. 為什麼單個 item 的大小被限制在 1M byte 之内?

(3)手撕分布式緩存之MongoDB

  1. 你說的 NoSQL 資料庫是什麼意思?NoSQL 與 RDBMS 直接有什麼差別?為什麼要使用和不使用NoSQL 資料庫?說一說 NoSQL 資料庫的幾個優點?
  2. NoSQL 資料庫有哪些類型?
  3. MySQL 與 MongoDB 之間最基本的差别是什麼?
  4. 你怎麼比較 MongoDB、CouchDB 及 CouchBase?
  5. MongoDB 成為最好 NoSQL 資料庫的原因是什麼?
  6. 32 位系統上有什麼細微差别?
  7. journal 回放在條目(entry)不完整時(比如恰巧有一個中途故障了)會遇到問題嗎?
  8. 分析器在 MongoDB 中的作用是什麼?
  9. 名字空間(namespace)是什麼?
  10. 如果使用者移除對象的屬性,該屬性是否從存儲層中删除?
  11. 能否使用日志特征進行安全備份?
  12. 允許空值 null 嗎?
  13. 更新操作立刻 fsync 到磁盤?
  14. 如何執行事務/加鎖?
  15. 為什麼我的資料檔案如此龐大?
  16. 啟用備份故障恢複需要多久?
  17. 什麼是 master 或 primary?
  18. 什麼是 secondary 或 slave?
  19. 我必須調用 getLastError 來確定寫操作生效了麼?
  20. 我應該啟動一個叢集分片(sharded)還是一個非叢集分片的 MongoDB 環境?
  21. 分片(sharding)和複制(replication)是怎樣工作的?
  22. 資料在什麼時候才會擴充到多個分片(shard)裡?
  23. 當我試圖更新一個正在被遷移的塊(chunk)上的文檔時會發生什麼?
  24. 如果在一個分片(shard)停止或者很慢的時候,我發起一個查詢會怎樣?
  25. 我可以把 moveChunk 目錄裡的舊檔案删除嗎?
  26. 我怎麼檢視 Mongo 正在使用的連結?
  27. 如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉移的文檔嗎?
  28. 如果我在使用複制技術(replication),可以一部分使用日志(journaling)而其他部分則不使用嗎?
  29. 當更新一個正在被遷移的塊(Chunk)上的文檔時會發生什麼?
  30. MongoDB 在 A:{B,C}上建立索引,查詢 A:{B,C}和 A:{C,B}都會使用索引嗎?
  31. 如果一個分片(Shard)停止或很慢的時候,發起一個查詢會怎樣?
  32. MongoDB 支援存儲過程嗎?如果支援的話,怎麼用?
  33. 如何了解 MongoDB 中的 GridFS 機制,MongoDB 為何使用 GridFS 來存儲檔案?

03 微服務(Dubbo+Spring Boot+Spring Cloud)

架構演進,阿裡資深Java工程師帶你手撕之架構大全(性能優化+分布式+架構+微服務)前言架構技術的演變01 開源架構(Spring +SpringMVC+Mybatis){}和${}的差別是什麼?02 分布式(限流+通訊+資料庫)03 微服務(Dubbo+Spring Boot+Spring Cloud)04 性能優化(JVM+Tomcat+MySQL)

3.1 手撕微服務之Dubbo

  1. Dubbo 支援哪些協定,每種協定的應用場景,優缺點?
  2. Dubbo 逾時時間怎樣設定?
  3. Dubbo 有些哪些注冊中心?
  4. Dubbo 叢集的負載均衡有哪些政策
  5. Dubbo 的核心功能?
  6. Dubbo 服務注冊與發現的流程?
  7. Dubbo 的架構設計?
  8. Dubbo 架構設計一共劃分了 10 個層:
  9. Dubbo 支援哪些協定,每種協定的應用場景,優缺點?
  10. dubbo 推薦用什麼協定?
  11. Dubbo 預設采用注冊中心?
  12. Dubbo 與 Spring 的關系?
  13. Dubbo 的叢集容錯方案有哪些?
  14. Dubbo 的預設叢集容錯方案?
  15. Dubbo 在安全機制方面是如何解決?
  16. Dubbo 和 Spring Cloud 的關系?
  17. Dubbo 逾時時間怎樣設定?
  18. Dubbo 和 Spring Cloud 的差別?

3.2 手撕微服務之Spring Boot

  1. 什麼是 Spring Boot?
  2. Spring Boot 有哪些優點?
  3. 什麼是 JavaConfig?
  4. 如何重新加載 Spring Boot 上的更改,而無需重新啟動伺服器?
  5. Spring Boot 中的螢幕是什麼?
  6. 如何在 Spring Boot 中禁用 Actuator 端點安全性?
  7. 如何在自定義端口上運作 Spring Boot 應用程式?
  8. 什麼是 YAML?
  9. 什麼是 Spring Profiles?
  10. 什麼是 Spring Batch?
  11. 如何內建 Spring Boot 和 ActiveMQ?
  12. 如何使用 Spring Boot 實作分頁和排序?
  13. 什麼是 Swagger?你用 Spring Boot 實作了它嗎?
  14. 什麼是 FreeMarker 模闆?
  15. 如何使用 Spring Boot 實作異常處理?
  16. 您使用了哪些 starter maven 依賴項?
  17. 什麼是 CSRF 攻擊?
  18. 什麼是 WebSockets?
  19. 什麼是 AOP?
  20. 什麼是 Apache Kafka?
  21. 我們如何監視所有 Spring Boot 微服務?

3.3 手撕微服務之Spring Cloud

  1. 什麼是 Spring Cloud?
  2. 使用 Spring Cloud 有什麼優勢?
  3. 服務注冊和發現是什麼意思?Spring Cloud 如何實作?
  4. 負載平衡的意義什麼?
  5. 什麼是 Hystrix?它如何實作容錯?
  6. 什麼是 Hystrix 斷路器?我們需要它嗎?
  7. 什麼是 Spring Cloud Bus?我們需要它嗎?
  8. 什麼是 Netflix Feign?它的優點是什麼?

04 性能優化(JVM+Tomcat+MySQL)

性能優化答案解析如下:

架構演進,阿裡資深Java工程師帶你手撕之架構大全(性能優化+分布式+架構+微服務)前言架構技術的演變01 開源架構(Spring +SpringMVC+Mybatis){}和${}的差別是什麼?02 分布式(限流+通訊+資料庫)03 微服務(Dubbo+Spring Boot+Spring Cloud)04 性能優化(JVM+Tomcat+MySQL)

4.1 手撕性能優化之JVM

  1. Java 類加載過程?
  2. 描述一下 JVM 加載 Class 檔案的原理機制?
  3. Java 記憶體配置設定。
  4. GC 是什麼? 為什麼要有 GC?
  5. 簡述 Java 垃圾回收機制。
  6. 如何判斷一個對象是否存活?(或者 GC 對象的判定方法)
  7. 垃圾回收的優點和原理。并考慮 2 種回收機制
  8. 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收記憶體嗎?有什麼辦法主動通知虛拟機進行垃圾回收?
  9. Java 中會存在記憶體洩漏嗎,請簡單描述。
  10. 深拷貝和淺拷貝。
  11. System.gc() 和 Runtime.gc() 會做什麼事情?
  12. finalize() 方法什麼時候被調用?析構函數 (finalization) 的目的是什麼?
  13. 如果對象的引用被置為 null,垃圾收集器是否會立即釋放對象占用的記憶體?
  14. 什麼是分布式垃圾回收(DGC)?它是如何工作的?
  15. 串行(serial)收集器和吞吐量(throughput)收集器的差別是什麼?
  16. 在 Java 中,對象什麼時候可以被垃圾回收?
  17. 簡述 Java 記憶體配置設定與回收策率以及 Minor GC 和 MajorGC
  18. JVM 的永久代中會發生垃圾回收麼?
  19. Java 中垃圾收集的方法有哪些?
  20. 什麼是類加載器,類加載器有哪些?
  21. 類加載器雙親委派模型機制?

4.2 手撕性能優化之Tomcat

  1. 你怎樣給 tomcat 去調優?
  2. 如何加大 tomcat 連接配接數
  3. tomcat 中如何禁止列目錄下的檔案
  4. 怎樣加大 tomcat 的記憶體
  5. Tomcat 有幾種部署方式
  6. Tomcat 的優化經驗

4.3 手撕性能優化之MySQL

  1. 為查詢緩存優化你的查詢
  2. EXPLAIN你的SELECT查詢
  3. 當隻要一行資料時使用LIMIT 1
  4. 為搜尋字段建索引
  5. 在Join表的時候使用相當類型的例,并将其索引
  6. 千萬不要 ORDER BY RAND()
  7. 避免 SELECT *
  8. 永遠為每張表設定一個 ID
  9. 使用 ENUM 而不是 VARCHAR
  10. 從 PROCEDURE ANALYSE() 取得建議
  11. 盡可能的使用 NOT NULL
  12. Prepared Statements
  13. 無緩沖的查詢
  14. 把 IP 位址存成 UNSIGNED INT
  15. 固定長度的表會更快
  16. 垂直分割
  17. 拆分大的 DELETE 或 INSERT 語句
  18. 越小的列會越快
  19. 選擇正确的存儲引擎
  20. 使用一個對象關系映射器(Object Relational Mapper)
  21. 小心“永久連結”