原创 使用c3p0封裝jdbc

即使寫了DBUtil感覺還是對數據庫的操作會有點麻煩,還是有一些操作是重複的,所以介紹一個傳智播客弄出來的一個jdbc的封裝,個人覺得簡潔好用。 導包:鏈接:jar提取碼:rdgt 還有一個mysql驅動包,這個包都不知道的話建議

原创 Redis分佈式鎖的演化

使用redis來實現一把分佈式鎖 普通分佈式鎖 一把普通的redis分佈式鎖,原理是setnx只有在第一次設置的時候才生效,等於第一個setnx成功的線程得到了這把鎖,其他線程設置失敗就直接返回了,只有當這個線程執行完畢,把這個鎖

原创 阿里第一輪筆試第二題

第一題完全不會,第二題被自己蠢哭,遞增的字符串只需要判斷前一個的最後一個字符和第二個子串的第一個字符就可以了,我居然寫成了兩個字符串比大小,唉,可能這就是命吧。深搜加記憶性遞歸應該可以滿分(我居然被一個比較函數搞成了零分,心態炸裂

原创 pat1014 Waiting in Line

記錄一下這個隊列操作 思路:有多少個窗口就開多少個隊列,一個隊列和poptime、endtime組成一個新的數據類型,poptime代表對首出隊列的時間,endtime代表隊尾人結束時間。每次循環找出poptime最短的,打表記錄

原创 Syn筆記--jol查看對象頭

jol查看對象頭來分析一波synchronize關鍵字加鎖過程 synchronize在jdk1.5之前就是一個重量級的鎖,是在jvm層面加鎖的一種形式,在字節碼運行的過程中被翻譯成了兩個指令,速度很慢。jkd1.6開始對sync

原创 樹的前中後序

前序就是根左右,中序就是左根右,後序就是左右根 樹結構 /** * Definition for a binary tree node. * public class TreeNode { * int val; *

原创 C++大數乘法

c++版本的大數乘法 #include<iostream> #include<string> #include<algorithm> #include<cstdio> #include<vector> #include<set>

原创 dp模板(01揹包 完全揹包 最長子序列)

01揹包 for(int i=1;i<=n;i++) { for(int c=m;c>=0;c--) { if(c>=w[i]) f[c]=max(f[c],f[c-w[i]]+v[

原创 pat 1044 Shopping in Mars (二分查找)

思路 把鑽石數量累加起來,這樣數組sum[i]就是1到i的值,這樣數組就變成了遞增的,就可以使用二分查找,從1開始循環**sum[mid] - sum[i - 1]**就可以找到最小的i 到 j的值。最後把結果保存起來 #incl

原创 二叉樹的遍歷(中序後序轉層序和前序)

Sample Input: 7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 Sample Output: 4 1 6 3 5 7 2 先轉換成前序,然後在每一個節點帶一個index,最後排序一下就是層序的結果了 #in

原创 Java排序方法

由於之前基本都是用c++寫算法,導致java排序庫函數非常不熟悉,記錄一下java庫函數排序方法 基本數據類型的排序 public static void main(String[] args) { Integer

原创 Nio文件的讀寫

具體思路:打開一個文件,把文件以字節讀到buffer中,再把buffer進行一次flip,就可以把buffer寫入到一個文件中了。如果沒有clear方法會產生死循環,一直把buffer讀到文件中。 不寫clear方法分析:第一次r

原创 java異常類型記錄

Throwable包含看錯誤(Error)和異常(Exception兩類) Exception又包含了運行時異常(RuntimeException,又叫非檢查異常)和非運行時異常(又叫檢查異常) 1、error是程序無法處理了,如

原创 合併 k 個排序鏈表(java)

合併 k 個排序鏈表,返回合併後的排序鏈表。請分析和描述算法的複雜度。 示例: 輸入: [ 1->4->5, 1->3->4, 2->6 ] 輸出: 1->1->2->3->4->4->5->6 public ListNode

原创 正則表達式匹配(Leetcode - java)

給你一個字符串 s 和一個字符規律 p,請你來實現一個支持 ‘.’ 和 ‘*’ 的正則表達式匹配。 ‘.’ 匹配任意單個字符 ‘*’ 匹配零個或多個前面的那一個元素 所謂匹配,是要涵蓋 整個 字符串 s的,而不是部分字符串。 說明