Rancho

爱和死亡留给上帝

2021面试合集

Interview 2021

前言八月份出去面试了一波,本文整理了上海一二线主流公司的面经(Golang后端)。 面经仅提供部分问题的答案,自行按需查阅资料。 B站B站一面 gRPC连接的四种模式 简单RPC 服务端流式RPC 客户端流式RPC 双向流式RPC 如何做超时控制 context.WithTimeout/context.WithDeadline + time.After context.With......

Golang Context的好坏与使用建议

Golang Context Tips

context的设计在Golang中算是一个比较有争议的话题。context不是银弹,它解决了一些问题的同时,也有不少让人诟病的缺点。本文主要探讨一下context的优缺点以及一些使用建议。 缺点由于主观上我也不是很喜欢context的设计,所以我们就从缺点先开始吧。 到处都是context根据context使用的官方建议,context应当出现在函数的第一个参数上。这就直接导致了代码中到处......

算法进阶(07) - DFS、BFS

Adcanced Algoritm - DFS & BFS

DFS VS BFSDFS更适合搜索树形状态空间 递归本身就会产生树的结构 可以用一个全局变量维护状态较为复杂的信息(子集/排列) 不需要队列, 节省空间 BFS适合求最小代价、最少步数之类的题目 BFS是按层次序搜索, 任意时刻队列中至多只有两层 在状态空间为一般的图时(需要判重), DFS/BFS均可 实战电话号码的字母组合LeetCode 给定一个仅包含数字......

算法进阶(06) - 树、图

Advanced Algorithm - Tree And Graph

树二叉树的中序遍历LeetCode 12345678910111213141516171819202122/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func ......

算法进阶(05) - 递归、分治

Advanced Algorith - Recursion And Divide

基础知识递归的时间复杂度 指数型: k^n (子集, 大体积背包问题) 排列型: n! (全排列, 旅行商, N皇后) 组合型: n!/(m!(n-m)!) (组合选数) 递归子集LeetCode 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 解题思路按数组index递归找出子......

算法进阶(04) - 哈希、集合、映射

Advanced Algorithm - Hash/Set And Map

基础知识哈希表的原理哈希表(Hash Table)又称散列表, 是一种可以通过关键码(key)直接进行访问的数据结构. 它由两部分组成 一个数据结构, 通常是链表、数组 Hash函数, 输入关键码, 返回对应数据的索引 对外表现可以通过关键码直接访问, 如 hash_table[key] = value 实际上是对key进行了一次哈希运算之后, 从数据结构中定位到value d......

Redis中的高性能IO模型

IO Module In Redis

本文主要探讨一个Redis中的经典问题: 为什么单线程的Redis能这么快? 首先, 要厘清一个事实, 我们通常所说的Redis是单线程, 主要是指Redis的网络IO和键值对读写都是由一个线程来完成的. 而Redis的其他功能, 比如持久化、异步删除、集群数据同步等, 其实是由额外的线程执行的. 所以, 严格来说Redis并不是单线程的 Redis为什么用单线程多线程的开销日常写程序, 经......

算法进阶(03) - 前缀和、差分、双指针扫描

Advanced Algorithm - Prefix-sum And Double Pointer Scanning

前缀和对于一维数组A 前缀和数组: S[i] = S[i - 1] + A[i] 字段和: Sum[l, r] = S[r] - S[l - 1] 当A中元素都是非负数时, 前缀和数组S单调递增 统计「优美子数组」LeetCode 给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这......

算法进阶(02) - 栈、队列

Advanced Algorithm - Stack And Queue

时间复杂度栈/队列 push(入栈/入队): O(1) pop(出栈/出队): O(1) access(访问栈顶/访问队头): O(1) 双端队列 队头/队尾的插入/删除/访问, 都是O(1) 优先队列 访问最值: O(1) 插入: 一般是O(logN), 一些高级的数据结构可以做到O(1) 取最值: O(logN) ......

Redis中的数据结构

Data Structure In Redis

Redis为什么这么快?时至今日, 可以选择的数据库有很多, 为什么Redis能有这么突出的表现呢一方面是因为它是内存数据库, 所有的操作都在内存上完成. 另一方面, 这要归功于它的数据结构.Redis一共支持五种数据类型, 包括String(字符串), List(列表), Hash(哈希), Set(集合)和Sorted Set(有序集合). 而它们的底层实现数据结构其实有六种, 分别是简......