算法-设计数据结构
双向队列,跳表等
双向队列,跳表等
level,多层级
了解一下leveldb的WAL是怎么做的
了解一下leveldb的WAL是怎么做的
长成这样,真是看不出这是个跳表
挺恶心的位运行
扒开go源码,看看http2在go里的实现
func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) func deferproc(siz int32, fn *funcval)
level,多层级
go怎么用的epoll
写在字节4面后
mtr
字节面试问到了,留个记录
一颗红黑树,一个就绪句柄链表,一个进程等待队列,少量的内核cache
200. 岛屿数量 200. 岛屿数量 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 func numIslands(grid [][]byte) int { m, n := len(grid), len(grid[0]) bfs := func(i, j int) { // 从[i, j]位置开始扩散 q := [][]int{{i, j}} for len(q) != 0 { e := q[0] q = q[1:] x, y := e[0], e[1] if x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1' { grid[x][y] = '0' q = append(q, []int{x+1, y}) q = append(q, []int{x-1, y}) q = append(q, []int{x, y+1}) q = append(q, []int{x, y-1}) } } } cnt := 0 for i := 0; i < m; i++ { for j := 0; j < n; j++ { if grid[i][j] == '0' { continue } bfs(i, j) // 为什么找到了一块陆地就可以增加一个岛屿数呢, // 是因为在bfs方法中会将跟这块陆地相连的其他陆地染色,不会再次重复计算 cnt++ } } return cnt } 301....
22. 括号生成 22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 func generateParenthesis(n int) []string { ans := []string{} var dfs func(lb, rb int, s string) dfs = func(lb, rb int, s string) { if lb > rb { return } if lb == 0 && rb == 0 { // 括号用完了,并且是合法的 if isValid(s) { ans = append(ans, s) } return } if lb != 0 { dfs(lb - 1, rb, s + "(") } if rb !...
hash表也算是刷题中的老常客了
经典面试题了属实是