原创 Java內存模型中的happen-before

一、Java內存模型中的happen-before是什麼 Happen-before關係,是Java內存模型中保證多線程操作可見性的基礎。具體表現爲: 線程內執行的每個操作,都保證happen-before後面的操作。這就保證了基本的程序

原创 JVM內存區域的劃分,哪些區域可能產生OutOfMemory

一、JVM內存區域劃分 通常可以把JVM內存區域劃分爲程序計數器,虛擬機棧,本地方法棧,堆,方法區,運行時常量池。其中,有的區域是以線程爲單位,有的區域則是整個JVM進程唯一的。 程序計數器。程序計數器是一塊比較小的內存區域,可以看做當前

原创 PostgreSQL進程分析

一、PostgreSQL進程         PostgreSQL是一個C/S架構的數據庫管理系統,一個服務器上運行多個進程。postmaster是pg的主進程,也是父進程。後端進程和後臺工作進程都是由主進程派生出來,同時具有監聽功能。

原创 計算機網絡複習

一、對稱加密和非對稱加密 利用HTTP協議在互聯網上通信時,數據是非加密傳輸的。數據可能被其他人截獲,造成信息泄露。爲了解決此問題,需要加密。加密有兩種方式,一種是對稱加密,一種是非對稱加密。 在對稱加密算法中,加密和解密對應的祕鑰是相同

原创 數據庫複習

一、數據庫連接池原理 爲什麼需要使用數據庫連接池。像打開和關閉數據庫連接這種操作是很耗時的,當客戶端數量增加的時候會造成瓶頸。爲了解決此問題,將所有連接形成一個連接池。用戶需要連接時從連接池中獲取一個連接,使用結束後歸還連接。 連接池的工

原创 從輸入URL到頁面加載發生了什麼

總體來說發生了以下幾個過程: DNSj解析 TCP連接 發送HTTP請求 服務器處理請求並返回HTTP報文 瀏覽器渲染解析頁面 連接結束 一、DNS解析 DNS解析就是確定那臺計算機上有所需要的資源。互聯網上每臺計算機的唯一標識就是它的I

原创 Java複習

一、COllections.sort內部原理 Collection.sort()排序通過泛化實現對所有類型的排序,對於基礎類型如int,string,按照字符表,數字大小排序。對於自定義類型,通過實現Comparable接口,重寫comp

原创 Redis五種數據結構

一、Redis五種數據類型  Redis除了存儲鍵之外還可以存儲常見的5種數據類型,分別是:String、List、Set、Zset、Hash。 結構類型 結構存儲的值 結構的讀寫能力 String字符串 可以是字符串、整數或浮點數 對

原创 設計一個秒殺系統

一、理解秒殺系統 要做一個秒殺系統,首先要理解秒殺系統。秒殺系統主要解決兩個問題,一個是併發讀,一個是併發寫。併發讀的核心優化概念是儘量減少用戶到服務端來讀數據,或者讓用戶讀更少的數據。併發寫的處理原則也一樣,它要求我們在數據庫層面獨立出

原创 緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級

一、緩存雪崩 緩存雪崩我們可以簡單理解爲:由於原來緩存失效(比如我們設置緩存時採用了相同的過期時間,在同一時刻出現大面積的緩存過期),新緩存未到,原來應該訪問緩存的請求都跑去查詢數據庫,而對數據庫CPU和內存造成巨大壓力,嚴重的會造成系統

原创 腳踏兩隻船的困惑--Memcached和Redis

一、Memcached與Redis的區別 Memcached:一款完全開源、高性能、分佈式的內存系統 Redis:一個開源的,Key-Value型、基於內存運行並支持持久化的NoSQL數據庫。 從概念上來看,Memcached和Redis

原创 Java基礎知識

一、Java平臺概述 Java是一種面向對象的語言,有兩個特徵。一是“一次編譯,到處運行”,獲取了跨平臺的能力。二是垃圾回收機制,JVM自動進行垃圾回收,不需要手動釋放。 我們日常接觸的JRE就是Java運行環境,包括JVM和Java類庫

原创 爲什麼說Redis是單線程的以及爲什麼Redis這麼快

一、Redis爲什麼這麼快 Redis是一個基於內存的採用單進程單線程模型的key-value數據庫,由c語言編寫,官方提供的數據是可以達到100000+QPS。爲什麼能這麼快,主要有以下幾點: 完全基於內存,絕大多數請求都是純粹的內存操

原创 使用快照和AOF將Redis數據持久化到硬盤中

一、前言 Redis是一款內存服務器,爲了避免出現突然斷電造成Redis服務器中的數據失效。我們需要對數據進行備份。將Redis在內存中的數據持久化到硬盤等非易失性介質中,來保證數據的可靠性。Redis提供了兩種方式,快照和只追加文件。

原创 一致性Hash算法

一、Redis集羣的使用 對於大型系統,當數據量很大時,需要對數據庫進行分庫分表。當數據量很大時,Redis同樣要進行此操作,就是分庫分表。假設經過分庫分表,現在有4臺Redis服務器,當查詢一條數據的時候,此時不知道具體在哪一個服務器上