原创 Go的定時器之Time.Ticker

一、引子 面試官問了一道題:每秒鐘調用一次proc並保證程序不退出。 package main func main() { } func proc() { panic("ok") } 這道題考察的知識點主要有: 定時執行任

原创 Go的WaitGroup源碼分析

WaitGroup 是開發中經常用到的併發控制手段,其源代碼在 src/sync/waitgroup.go 文件中,定義了 1 個結構體和 4 個方法: WaitGroup{}:結構體。 state():內部方法,在 Add()、Wait

原创 Go的Select

Go 的通道有兩種操作方式,一種是帶 range 子句的 for 語句,另一種則是 select 語句,它是專門爲了操作通道而存在的。這裏主要介紹 select 的用法。 一、select的語法 select 語句的語法如下: select

原创 Go的Channel發送和接收

先來看一道面試題: 對已經關閉的 chan 進行讀寫,會怎麼樣?爲什麼? 在上一篇學習 Go 協程的文章中,知道 go 關鍵字可以用來開啓一個 goroutine 進行任務處理,但多個任務之間如果需要通信,就需要用到通道(channel)

原创 Go的Waitgroup和鎖

學 Go 的時候知道 Go 語言支持併發,最簡單的方法是通過 go 關鍵字開啓 goroutine 即可。可在工作中,用的是 sync 包的 WaitGroup,然而這樣還不夠,當多個 goroutine 同時訪問一個變量時,還要考慮如何保

原创 圖解大頂堆的構建、排序過程

這兩天在複習大頂堆和小頂堆,比起兩年前的懵懵懂懂,這次理解起來就容易了一些。又翻看了一下自己之前的筆記數據結構與算法之PHP排序算法(堆排序),發現自己這次查閱資料,和之前的思路不太一樣,遂寫下這篇筆記,算是和以前的筆記做一個對照。 一、什

原创 LeetCode#442-Find All Duplicates in an Array-數組中重複的數字

一、題目 給定一個整數數組 a,其中1 ≤ a[i] ≤ n (n爲數組長度), 其中有些元素出現兩次而其他元素出現一次。 找到所有出現兩次的元素。 你可以不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎? 示例: 輸入: [4,3

原创 PHP循環引用會遇到的坑

今天遇到這樣一個問題: 如果foreach循環一個數組,引用去對它的元素做一些操作,會有什麼問題嗎? 比如 [1, 2, 3],foreach循環的時候,引用給每個元素 * 2,再去foreach輸出,結果會是怎麼樣的? 先上代碼,你可

原创 LeetCode#160-Intersection of Two Linked Lists-相交鏈表

一、題目 編寫一個程序,找到兩個單鏈表相交的起始節點。 如下面的兩個鏈表: 在節點 c1 開始相交。 示例 1: 輸入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,

原创 《MySQL實戰45講》學習筆記4——MySQL中InnoDB的索引

索引是在存儲引擎層實現的,且在 MySQL 不同存儲引擎中的實現也不同,本篇文章介紹的是 MySQL 的 InnoDB 的索引。 下文將以這張表爲例開展。 # 創建一個主鍵爲 id 的表,表中有字段 k,並且在 k 上有索引。 create

原创 LeetCode#66-Plus One-加一

一、題目 給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。 最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 示例1: 輸入: [1,2,3] 輸出: [1

原创 LeetCode#141-Linked List Cycle-環形鏈表

一、題目 給定一個鏈表,判斷鏈表中是否有環。 爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。 示例 1: 輸入:head = [3,2,0,-

原创 LeetCode#2-Add Two Numbers-兩數相加

一、題目 給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 您可以假設除了數字 0 之

原创 LeetCode#203-Remove Linked List Elements-移除鏈表元素

一、題目 刪除鏈表中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 二、題解 解法1:哨兵節點。 初始化一個哨兵節點 solider,並將

原创 LeetCode#35-Search Insert Position-搜索插入位置

一、題目 給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 你可以假設數組中無重複元素。 示例1: 輸入: [1,3,5,6], 5 輸出: 2 示例2: 輸入: [