原创 解析數據庫鎖協議和InnoDB的鎖機制(全面解析行級鎖、表級鎖、排他鎖、共享鎖、悲觀鎖、樂觀鎖等常用鎖)

前言 數據庫通過鎖以及鎖協議來進行併發控制,解決併發事務帶來的問題,本篇博文主要是解析數據庫的鎖協議和Mysql的默認存儲引擎InnoDB的鎖機制。 如果對事務隔離級別以及併發事務帶來的問題不熟悉可以翻閱我的另外一篇博文–《解析事

原创 InnoDB的MVCC實現原理(InnoDB如何實現MVCC以及MVCC的工作機制)

MVCC(多版本併發控制) 使用鎖和鎖協議來實現相應的隔離級別來進行併發控制,味道雖好但因爲鎖會造成事務阻塞,導致併發性能會受到一定的影響。而多版本併發控制使得對同一行記錄做讀寫的事務之間不用相互阻塞等待(寫寫還是要阻塞等待,因爲

原创 從底層解析B+索引提高查詢速度的原因

前言 我的上篇文章《解析B+樹比B樹更加適合做數據庫索引的原因》介紹了爲什麼B+樹更適合做索引,並以InnoDB和MyISAM存儲引擎介紹了聚集索引和非聚集索引的區別。Mysql默認的存儲引擎是InnoDB,因此此篇文章主要以In

原创 解析亂碼產生的原因

編碼與解碼 編碼-將字符轉換爲對應的二進制序列 解碼-編碼的逆過程,按照編碼的規則將二進制序列轉換成字符 爲什麼需要編碼和解碼 先小小的舉個例子,你現在所看到的這篇文章都是一個個文字組成,這些文字在計算機內存中是以二進制序列的形式

原创 Java中的值傳遞

C++中在進行參數傳遞時,分爲按值傳遞、引用傳遞(&)、按指針傳遞(*),需要自己指定參數傳遞類型。但JAVA表面上只有值傳遞,但真的只是值傳遞嗎?其實並非如此,Java中也分爲按值傳遞、按引用傳遞,只是傳遞類型按照傳入參數的類型

原创 JAVA高效併發之synchronized關鍵字和鎖優化

多線程編程中,我們往往使用synchronized關鍵字以及ReentrantLock類來實現線程安全,二者都是基於互斥同步的方式來保障併發安全性,且都可重入。儘管最基本的互斥同步手段是synchronized關鍵字,它是原生語法

原创 基於視頻的實時人臉識別(含代碼)

介紹 思路介紹 無論是基於視頻或者調用攝像頭來完成人臉識別,其實是一樣,通過使用opencv,來捕獲視頻或者攝像頭傳來的圖像,每隔若干幀取一幀做人臉識別,調用Dlib中的人臉檢測器來檢測人臉,並通過Dlib的人臉關鍵點預測器來獲得

原创 JMM-高效併發之內存模型

前言 學習併發關鍵在於學會解決併發過程中線程通信以及線程同步中出現的問題,線程通信有兩類機制,一是共享內存,另一個是消息傳遞。JAVA使用的是第一種,通過在共享內存中進行讀寫來進行消息傳遞,在共享內存中,線程通信是隱性的,對編程人

原创 智愛後臺管理收穫總結

                        智愛後臺管理收穫總結1. SSH框架整合完成(struts2+spring+hibernate)1. spring與Struts2的整合A. 有兩種整合方式(詳情查閱SSH文件夾)B. 當啓

原创 原型模式-JAVA實現深克隆

一.原型模式介紹A.優點:當創建新的對象實例較爲複雜時,使用原型模式可以簡化的對象的創建過程,通過複製一個已有實例可以提高新實例的創建效率。原型模式允許動態增加或減少產品類。原型模式具有給一個應用軟件動態加載新功能的能力。 產品類不需要非

原创 JVM筆記--內存區域

                               JVM筆記--內存區域(推薦書籍------《深入理解Java虛擬機》)1. GCA. GC是JAVA提供的可以自動檢測對象是否超過其作用域從而自動的進行內存回收。B. 垃圾回

原创 軟件設計模式筆記

  軟件設計模式筆記1. 面向對象五大原則A.開放封閉原則,它是面向對象所有原則的核心,軟件設計說到底追求的目標就是封裝變化、降低耦合,而開放封閉原則就是這一目標的最直接體現。 開放封閉原則,其核心思想是:軟件實體應該是可擴展的,而不可修

原创 JAVA筆記-四種引用

1. 強引用---即使是內存不足,垃圾回收器也不會回收被強引用的對象的內存。(會報OOM異常)2. 軟引用---只有在內存快溢出的時候,垃圾回收器纔會回收被其引用的對象的內存。軟引用可以和一個引用隊列(ReferenceQueue)聯合使

原创 eclipse覈查導入的架包是否有誤

1.點擊--show view2.輸入--breakpoints3.點擊Add Java Exception Breakpoint(帶有J!符號的標誌)4.輸入ZipException5.停止服務器,debug運行服務器,若jar包出錯,

原创 JAVA筆記-finalize方法

(部分轉載  部分參考《JAVA編程思想》)一.方法筆記A. 儘量不要使用finalize方法,一個對象的finalize方法只會被調用一次,finalize()被調用不意味着gc會立即回收該對象,所以有可能調用finalize()後,該