原创 TOMCAT內核之旅--一個簡單的WEB服務器--學習心得(一)

TOMCAT內核之旅–一個簡單的WEB服務器–學習心得(一) 標籤(空格分隔): web服務器 一、學習背景 本人是一名大三學生,開始以java學習爲主,後來學習了javaWEB,瞭解到了TOMCAT服務器,很好奇其內部

原创 LeetCode解題思路--day01

github項目地址 LeetCode解題思路--day011.題目ExampleNote2.解題思路example3.代碼4.總結 1.題目 Given an array nums, write a function to mo

原创 Java 多線程三大核心

Java 多線程三大核心 原子性 Java 的原子性就和數據庫事務的原子性差不多,一個操作中要麼全部執行成功或者失敗。 JMM 只是保證了基本的原子性,但類似於 i++ 之類的操作,看似是原子操作,其實裏面涉及到: 獲取 i 的值。 自

原创 ReentrantLock 實現原理

ReentrantLock 實現原理 使用 synchronized 來做同步處理時,鎖的獲取和釋放都是隱式的,實現的原理是通過編譯後加上不同的機器指令來實現。 而 ReentrantLock 就是一個普通的類,它是基於 AQS(Abst

原创 垃圾回收

垃圾回收 垃圾回收主要思考三件事情: 哪種內存需要回收? 什麼時候回收? 怎麼回收? 對象是否存活 引用計數法 這是一種非常簡單易理解的回收算法。每當有一個地方引用一個對象的時候則在引用計數器上 +1,當失效的時候就 -1,無論什

原创 Java 多線程常見問題

Java 多線程常見問題 上下文切換 多線程並不一定是要在多核處理器才支持的,就算是單核也是可以支持多線程的。 CPU 通過給每個線程分配一定的時間片,由於時間非常短通常是幾十毫秒,所以 CPU 可以不停的切換線程執行任務從而達到了多線

原创 對象創建與內存分配

對象的創建與內存分配 創建對象 當 JVM 收到一個 new 指令時,會檢查指令中的參數在常量池是否有這個符號的引用,還會檢查該類是否已經被 加載過了,如果沒有的話則要進行一次類加載。 接着就是分配內存了,通常有兩種方式: 指針碰撞 空

原创 秒殺系統設計

設計一個秒殺系統 主要做到以下兩點: 儘量將請求過濾在上游。 儘可能的利用緩存(大多數場景下都是查多於寫)。 常用的系統分層結構: 針對於瀏覽器端,可以使用 JS 進行請求過濾,比如五秒鐘之類只能點一次搶購按鈕,五秒鐘只能允許請求一

原创 volatile關鍵字

volatile 關鍵字 前言 不管是在面試還是實際開發中 volatile 都是一個應該掌握的技能。 首先來看看爲什麼會出現這個關鍵字。 內存可見性 由於 Java 內存模型(JMM)規定,所有的變量都存放在主內存中,而每個線程都有着自

原创 Spring Ioc基於java反射而遠遠高於反射---Spring框架三大核心接口

關於最基礎的Ioc的概念及其思想,我們在 Spring核心功能–Ioc一節中都有過詳細的討論,這裏就不多言了! 1、java反射 那麼,接下來,我們從反射入手,開始Spring征程。看例子: package com.smart

原创 OOM(OutOfMemory)分析

OOM 分析 Java 堆內存溢出 在 Java 堆中只要不斷的創建對象,並且 GC-Roots 到對象之間存在引用鏈,這樣 JVM 就不會回收對象。 只要將-Xms(最小堆),-Xmx(最大堆) 設置爲一樣禁止自動擴展堆內存。 當使用一

原创 Spring--裝配Bean

任何一個成功的應用都是有多個爲了實現某一業務目標而相互協作的組件構成的。這些組件必須彼此瞭解,並且相互協作來完成工作。 上篇文章我們通過一個實例,說明了Spring的重要性。不使用Spring,創建應用之間關聯關係的傳統方

原创 Spring容器高級主題

1.1 Spring容器技術內幕 1.1.1 內部工作機制 spring的AbstractApplicationContext是ApplicationContext的抽象實現類,該抽象類的refresh()方法定義了Sprin

原创 java運行時的內存劃分

Java 運行時的內存劃分 程序計數器 記錄當前線程所執行的字節碼行號,用於獲取下一條執行的字節碼。 當多線程運行時,每個線程切換後需要知道上一次所運行的狀態、位置。由此也可以看出程序計數器是每個線程私有的。 虛擬機棧 虛擬機棧由一個一

原创 TOMCAT內核之旅--連接器(Connector)--學習心得(三)

3.1 前言 首先我先針對上一小節最後出現的問題,作出回答,其實很簡單,我們要加載一個類的實例,則不粗得到其字節碼文件(class文件),eclipse是一個IDE工具,它具有自編譯功能,src包下的目錄爲我們編寫的java源文件