原创 MySQL學習筆記——查詢性能優化

查詢性能優化查詢性能優化主要從查詢優化、索引優化、庫表結構優化三個方面出發慢查詢基礎:優化數據訪問查詢性能低下最根本的原因就是訪問的數據太多,大部分性能低下的查詢都可以通過減少訪問的數據量進行優化。一般有效的分析步驟如下:確認應用程序是否

原创 MySQL學習筆記——索引的理解

索引的概念什麼叫索引索引也稱作鍵,是存儲引擎用於快速找到記錄的一種數據結構。索引可以加快查詢速度,原因是索引使用特定的數據結構(B-Tree)對特定的列額外組織存放,加快存儲引擎(索引是存儲引擎實現)查找記錄的速度。B樹和B+樹之間的區別

原创 劍指offer——n個骰子的點數

題目描述:把n個骰子扔在地上,所有骰子朝上一面的點數之和爲s。輸入n,打印出s的所有可能出現的值出現的概率。解題思路:將n個骰子分爲兩堆,第一堆只有一個,剩下一堆有n-1個然後再計算n-1個骰子的點數之和,過程和第一步一致這顯然是一種遞歸

原创 設計模式——裝飾器模式和橋接模式

裝飾器模式(Decorator Pattern)概念:裝飾器模式允許向一個現有的對象添加新的功能,同時又不改變其結構。裝飾者可以在所委拖被裝飾者的行爲之前或之後加上自己的行爲,已達到特定的目的組成:裝飾器模式由組件和裝飾者組成。抽象組件(

原创 Leetcode——驗證迴文字符串

題目描述:給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。解題思路:使用雙指針,一個指向頭,一個指向尾,如果兩者不相同了,則可以將尾部的往前挪一個,或者首部的往後挪一個,判斷這兩種情況這兩種已經相當於刪除了一個字符,如

原创 Spring Ioc容器

Spring演進Spring框架所倡導的基於POJO(Plain Old Java Object,簡單Java對象)的輕量級開發理念,就是從實際出發,立足於最基礎的POJO(就好像我們的地球)。爲了能夠讓這些基礎的POJO構建出健壯而強大

原创 ConcurrentLinkedQueue詳解

一、 前言常用的併發隊列有阻塞隊列和非阻塞隊列,前者使用鎖實現,後者則使用CAS非阻塞算法實現,使用非阻塞隊列一般性能比較好,下面就看看常用的非阻塞ConcurrentLinkedQueue是如何使用CAS實現的。ConcurrentLi

原创 劍指offer——和爲s的連續正數序列

題目描述:小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和爲100(至少包括兩個數)。沒多久,他就得到另一組連續正數和爲100的序列:

原创 劍指offer——滑動窗口的最大值

題目描述:給定一個數組和滑動窗口的大小,找出所有滑動窗口裏數值的最大值。例如,如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3,那麼一共存在6個滑動窗口,他們的最大值分別爲{4,4,6,6,6,5}; 針對數組{2,3,4

原创 代理模式詳解

代理模式總結代理(Proxy)是一種設計模式,提供了對目標對象另外的訪問方式;即通過代理對象訪問目標對象.這樣做的好處是:可以在目標對象實現的基礎上,增強額外的功能操作,即擴展目標對象的功能. 這裏使用到編程中的一個思想:不要隨意去修改別

原创 生產者-消費者模式

生產者-消費者模式生產者-消費者模式是一種經典的多線程設計模式,它爲多線程之間的協作提供了良好的解決方案。利用共享內存緩衝區來進行通信。它有以下兩個好處:生產者和消費者之間不直接進行通訊,而是通過共享內存緩衝區,從而將生產者和消費者進行了

原创 MySQL學習筆記一事務和存儲引擎

鎖通常分爲兩種鎖,一是共享鎖(讀鎖),一種是排他鎖(寫鎖)。讀鎖是共享的,或者說是互相不阻塞的。多個客戶在同一時刻可以同時讀取同一個資源而互不干擾。寫鎖則是排他的,也就是說寫鎖會阻塞其他的讀鎖和寫鎖。MySQL中主要有兩種鎖:表鎖(tab

原创 解密ThreadLocal

ThreadLocalThreadLocal的作用是提供線程內的局部變量,這種變量在線程的生命週期內起作用,減少同一個線程內多個函數或者組件之間一些公共變量的傳遞的複雜度。正是因爲這是一個線程的局部變量,也就是說,只有在當前線程內部可以訪

原创 劍指offer——撲克牌中的順子

題目描述:LL今天心情特別好,因爲他去買了一副撲克牌,發現裏面居然有2個大王,2個小王(一副牌原本是54張^_^)...他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!!“紅心A,黑桃

原创 實現線程的順序執行

之前,看到過一個題目,是關於如何使得線程順序執行的當時,我的第一個想法就是使用join方法,在t3線程內部調用t2線程的join()方法,然後在t2內部繼續調用t1線程的join方法來實現線程的順序執行,話不多說,手寫代碼來測試結果:/*