原创 記錄下這幾個月的心路歷程2020.04.26

今天也是拿到稱心意的實習Offer了,趁着這個機會想記錄一下一個非科班仔的自學之路。這兩三個月來,算上發到CSDN的和沒發出來的,可能一共寫了也有上百篇技術博客了,好像還不曾寫過非技術的博客,那這就算是第一篇吧。 我是非科班生,本

原创 查漏補缺(十二):select與poll與epoll

這三個都是nio的不同實現 select 它內部維護了一個文件描述符句柄數組,當有io事件發生的時候,它需要把這些文件描述符句柄由用戶空間複製到內核空間,然後由操作系統內核輪詢所有的文件描述符,找到發生了IO事件的那個 缺點:

原创 Tomcat的幾個知識點總結

文章目錄Tomcat爲什麼要破壞雙親委派模型Tomcat的IO模型Tomcat如何生成Servlet有幾種在Tomcat中部署Web應用的方法? Tomcat爲什麼要破壞雙親委派模型 這一點其實是Servlet規範裏面有提到,建議

原创 Tomcat總體架構:連接器與容器

文章目錄連接器與容器連接器EndPointProcessorAdapter容器 連接器與容器 Tomcat其實總得來說就分成兩個部分: 連接器:用來接受請求,並將請求轉化爲Request對象 容器:接收連接器傳來的request

原创 HTTP與TCP相關的幾個遺漏知識點

文章目錄HTTP2.0有什麼新特性?TCP的全連接隊列和半連接隊列TCP握手的過程中是否允許傳輸數據?GET和POST的區別: HTTP2.0有什麼新特性? 頭部壓縮:以往的http請求頭部都是用文本進行書寫的,那這個很明顯是一

原创 查漏補缺(十):線程池狀態等

文章目錄線程池的5個狀態創建線程的幾種方式finalize()方法 線程池的5個狀態 線程池的5個狀態:RUNNING,SHUTDOWN,STOP ,TIDYING,TERMINATED 1.線程池一開始被創建的時候,是處於RUN

原创 查漏補缺(六):Mysql主從複製

Mysql的主從複製是通過binary-log(bin log)的二進制日誌來實現的。流程是這樣的: 因爲Mysql主從模式是一種讀寫分離的模式嘛,所以當客戶端在主服務器提交一個事務後,對應的操作會同步到binary log上,然

原创 OutOfMemory排查

Java程序在運行的時候,因爲一些代碼問題,可能會出現OOM錯誤,那此時如何排查呢?可以分爲幾步 第一步,就是找到Tomcat對應的一個進程號,可以使用ps-ef來找到對應的PID 第二步,就是可以使用jmap-heap指令,跟上

原创 查漏補缺(五):TCP粘包

TCP粘包是在TCP長連接下才會發生的一種問題。因爲TCP它是面向流的嘛,也就是它傳輸的報文段沒有消息保護邊界,也就是說如果一次性拿到多個報文段,對於接受端來說是不知道如何劃分出原來的報文段的。並且由於Nagle優化算法的存在,發

原创 synchorinzed作用域反編譯出來的一點東西

synchronized可以作用在方法上,也可以作用在代碼塊上,而從編譯角度來說,這兩者是有所區別的。 如果作用在方法上,對對應的class文件使用javap進行反編譯是這樣的: 對應方法的標記位上有ACC_SYNCHRONIZ

原创 查漏補缺(二):Redis數據結構實現原理

文章目錄stringlistHashsetzset string string用於進行最簡單的key-value存儲。redis是使用C語言來實現的,但它並不是直接使用C語言的char數組來實現string。它其實維護了一個叫SD

原创 計算機網絡基礎+HTTP知識點總結

文章目錄1.什麼是DHCP?執行流程?2.說一下TCP的三次握手?爲什麼是三次?二次不行嘛?3.說一下TCP的四次揮手?最後爲什麼要等待一個超時時間?4.TCP協議如何保證傳輸的可靠性?5.說一下TCP的流量控制?6.說一下TCP

原创 HTTP緩存機制與原理解析

文章目錄HTTP報文HTTP緩存強緩存協商緩存 HTTP報文 HTTP報文分爲兩個部分 Header:報頭,填寫着相關一些字段屬性,與HTTP緩存相關的規則就保存在Header中 Body:用來存放HTTP傳輸的真正數據 HT

原创 MVCC如何實現數據庫讀已提交和可重複讀這兩種隔離級別?

文章目錄隱藏列undo logReadView讀已提交和可重複讀的實現 我們都知道Mysql有四種事務隔離級別: 讀未提交 讀已提交 可重複讀 串行化 這四個隔離級別的特點就不多贅述了,這次主要聊一下MVCC(多版本併發控制)

原创 從源碼上看Spring IOC如何解決bean之間循環依賴的問題

文章目錄什麼是循環依賴三級緩存流程 我們來探討一下Spring是如何解決循環依賴問題的。 什麼是循環依賴 先看一個示例圖吧: 好像很抽象的樣子,沒事,直接看代碼就很清晰了: class A{ private B b; }