原创 用任意多個個2*1的小矩形,覆蓋2*n的大矩形,請問有多少種覆蓋的方法?

思路:覆蓋最後一格,有一種覆蓋的方法,覆蓋最後兩格,也只有一種覆蓋方法,依次遞歸,直到最後一格或最後兩格。代碼如下:public class Sol

原创 TCP三次握手/四次揮手

1.1 三次握手: 1.2 四次揮手

原创 聊一聊紅黑樹的左旋和右旋(結合JAVA中TreeMap紅黑樹實現)

紅黑樹的左旋和右旋是維持紅黑樹平衡的一個關鍵操作。 下面我們就結合如下圖所示的紅黑樹先來聊聊紅黑樹的左旋: 我們要對節點A執行左旋的操作,那我們就需要執行接下來的幾個操作: ①將A的右子樹設置爲D; ②如果D不爲空,則將D的父節點設置爲

原创 聊一聊紅黑樹調平策略(結合JAVA中TreeMap紅黑樹實現)

本篇博客內容需結合紅黑樹左旋(rotate left)和右旋(rotate right)理解,如未理解紅黑樹的左旋、右旋,請先看這篇博客: 下面進入正題: 首先,爲什麼需要調平? 一棵二叉查找樹如果不進行調平那麼在最壞的情況下所有的元素都

原创 java類加載機制

類加載總共分爲以下幾步:1、加載(loading);2、驗證(verification);3、準備(preparation);4、解析(resolution);5、初始化(initialization);6、使用(using);7、卸載(

原创 mysql數據庫事務

mysql數據庫事務遵循四大原則:ACID。即: 1、原子性(atomicty) 事務內的操作要麼全部執行,要麼全部不執行。 2、一致性(consistence) 事務執行前後都會保持一個一致性狀態,即從一個一致性狀態變爲另一個一致性狀態

原创 JAVA虛擬機(二)內存溢出

一.JAVA堆內存溢出: 首先,需要確定發生的是內存溢出(Memory overflow)還是內存泄漏(Memory Leak)。 如果是內存泄漏,可以查看泄露對象到GC Roots的引用鏈,就能找到泄露對象是通過怎樣的路徑與GC Roo

原创 JAVA併發編程(二)

一.可見性:讀操作能實時的看到寫操作最新寫入的值。 在單線程中,讀操作總能得到寫操作寫入的值; 但在多線程中,如果讀操作跟寫操作在不同的線程中執行,那麼讀操作將不一定能適時的看到其他線程寫入的值。 二.重排序:在沒有使用同步的情況下,編譯

原创 找出一個數組中最小的K個元素

思路:看到這個題的第一瞬間我就想到了TreeSet,利用TreeSet在插入元素的時候會進行排序這一特性,這道題還有什麼難度呢?遍歷數組將所有元素存入TreeSet,然後再遍歷TreeSet,取出需要的前K個元素即可。代碼如下: imp

原创 給定一個非負整數n,統計1~n中所有數中1出現的次數

思路:遍歷1~n的所有數,把每個數都轉爲char數組,然後看1在數組中出現的次數,統計返回即可。代碼如下: public class Solution { public int NumberOf1Between1AndN_Solu

原创 深入淺出JAVA虛擬機(一) JAVA虛擬機內存管理

一.內存分配。java虛擬機在運行的時候,將會包含以下運行時數據區域: 1.線程私有的部分: 程序計數器:可以看成是當前線程所執行字節碼的行號指示器。字節碼解釋器就是通過改變這個計數器的值來確定下一條字節碼指令。 虛擬機棧:虛擬機棧爲虛

原创 JAVA併發編程學習之路(一)

線程安全性: 當多個線程訪問某個類的時候,不管運行時環境採用何種調度方式或者這些線程將如何交替執行,並且在主調代碼中不需要任何額外的同步或者協同,這個類都能表現出正確的行爲,那麼就稱這個類是線程安全的。 無狀態對象(即這個類不包含任何域也

原创 數組中至多有一個出現次數大於數組長度一半元素,找出這個元素

用一個HashMap就可以很簡單的解決這個問題,用HashMap的key存儲這個元素,用value存儲這個元素出現的次數,遍歷數組,每遍歷到一個數組就把他put進map,在put之前先檢查map中是否已有這個元素,有的話取出value並加

原创 給定K個整數,找出由這K個整數組成的最小的數字

思路:先找出這幾個整數元素所有的全排列,然後比較哪一個最小即可,全排列的求法可以看我的這篇博客:http://blog.csdn.net/zx582727090/article/details/52171084 代碼如下:import j

原创 判斷一棵二叉樹是不是另一棵二叉樹的子樹

定義:父樹包含子樹的所有節點,注意,空樹不是任何數的子樹。 父樹:A  子樹:B 解法:用遞歸來實現,從A樹的根節點開始,判斷其所有的節點是不是依次和樹B相同,如不同,遞歸調用函數,繼續判斷樹A當前節點的左子樹的所有節點或右子樹的所有節點