原创 this逃逸

Executor 框架是Java5之後引進的,在Java 5之後,通過 Executor 來啓動線程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用線程池實現,節約開銷)外,還有關鍵的一點:有助於避免 thi

原创 notify不立刻釋放鎖

當方法wait()被執行後,鎖自動被釋放,但執行完notify()方法後,鎖不會自動釋放。必須執行完notify()方法所在的synchronized代碼塊後才釋放。 當線程呈wait狀態時,對線程對象調用interrupt方法會出現

原创 Leetcode79單詞搜索

給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。 單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。 示例: board = [ [‘

原创 LeetCode198打家劫舍

輸入: [1,2,3,1] 輸出: 4 解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。 偷竊到的最高金額 = 1 + 3 = 4 。 class Solution { public in

原创 LeetCode213打家劫舍二

你是一個專業的小偷,計劃偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味着第一個房屋和最後一個房屋是緊挨着的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警

原创 LeetCode83刪除鏈表中重複的數字

給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。 示例 1: 輸入: 1->1->2 輸出: 1->2 示例 2: 輸入: 1->1->2->3->3 輸出: 1->2->3 /** * Definition for

原创 select/poll/epoll

epoll重大改進: 支持一個進程打開的socket描述符不受限 IO效率不會隨着FD的數目增加而線性下降 使用mmap加速內核與用戶空間的消息傳遞 api更加簡單

原创 ThreadLocal內存泄漏

爲什麼使用弱引用? key 使用強引用:引用的ThreadLocal的對象被回收了,但是ThreadLocalMap還持有ThreadLocal的強引用,如果沒有手動刪除,ThreadLocal不會被回收,導致Entry內存泄漏。 k

原创 LeetCode19 刪除鏈表的倒數第 n 個節點

給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5. /** * Definition

原创 LeetCode64最小路徑和

給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和爲最小。 說明:每次只能向下或者向右移動一步。 示例: 輸入: [ [1,3,1], [1,5,1], [4,2,1] ] 輸出: 7 解

原创 LeetCode300 最長上升子序列

給定一個無序的整數數組,找到其中最長上升子序列的長度。 示例: 輸入: [10,9,2,5,3,7,101,18] 輸出: 4 解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。 class Solution {

原创 LeetCode199二叉樹的右視圖

給定一棵二叉樹,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。 示例: 輸入: [1,2,3,null,5,null,4] 輸出: [1, 3, 4] 解釋: 1 <— / 2

原创 LeetCode53最大子序和

給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大,

原创 Leetcode32最長有效括號

給定一個只包含 ‘(’ 和 ‘)’ 的字符串,找出最長的包含有效括號的子串的長度。 示例 1: 輸入: “(()” 輸出: 2 解釋: 最長有效括號子串爲 “()” class Solution { public int lo

原创 count(*)和count(字段名)和count(1)

1,比較count(*)和count(字段名)的區別:前者對行的數目進行計算,包含null,後者對特定的列的值具有的行數進行計算,不包含null,得到的結果將是除去值爲null和重複數據後的結果。 2.count(1)跟count(主