Lever's Castle

Lever

痕迹
没有过去,就没法认定现在的自己

Redis 6.0 的一些新特性

July 16, 2021

多线程io Redis 一直是单线程的架构,虽然有些命令可以直接用后台线程或者子线程(比如数据删除,生成快照,AOF 重写),但是,从网络 io 到实际的读写命令处理,都是由单线程执行的。 随着网络硬件的性能提升,redis 的性能瓶颈可能会出现在网络 io…

并查集

July 14, 2021

关于并查集的维基百科文章 今天学习了一下并查集这种数据结构。主要可以用于: 维护无向图的连通性,判断两个节点是否在一个集合内 判断无向图中是否有环,或者增加一条边是否形成环 相关的编程题: 684. 冗余连接 并查集一般会有…

697. 数组的度

February 21, 2021

https://leetcode-cn.com/problems/degree-of-an-array/ 使用语言:Golang…

Counting Unival Subtrees

September 25, 2020

This problem was asked by Google. A unival tree (which stands for “universal value”) is a tree where all nodes under it have the same value…

36. 有效的数独

June 22, 2020

https://leetcode-cn.com/problems/valid-sudoku/ 使用语言 Go 题解: 其实解题思路挺简单,想清楚怎么检查每个元素是否合法即可。对于数独来讲,横竖每个数字只能出现一次,每个 3x3 九宫格只能出现一次。我直接定义了一个 map…

34. 在排序数组中查找元素的第一个和最后一个位置

May 06, 2020

https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/ 解: 思路: 题目中一看到时间复杂度要求为 O(logn…

33. 搜索旋转排序数组

May 05, 2020

https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ 解: 解题思路 先看到一些题目中的关键信息:有序,O(logn…

32. 最长有效括号

May 04, 2020

https://leetcode-cn.com/problems/longest-valid-parentheses…

「译」Scheduling In Go Part III - Concurrency

May 01, 2020

阅读原文: https://www.ardanlabs.com/blog/2018/12/scheduling-in-go-part3.html…

31. 下一个排列

April 15, 2020

https://leetcode-cn.com/problems/next-permutation/ 解: 题目不太好理解,看了几遍才搞明白是啥意思。这种题目描述也不好描述,我觉得可以把它类比成一个 n…

30. 串联所有单词的子串

April 14, 2020

https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words…

29. 两数相除

March 31, 2020

https://leetcode-cn.com/problems/divide-two-integers/ 解: 题目中要求不能使用乘法、除法、mod…

「译」Scheduling In Go Part II - Go Scheduler

March 29, 2020

原文地址: https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part2.html 简介 在本系列的 第一部分 中,我重点介绍了操作系统调度程序中我认为很重要并且对理解 Go…

28. 实现 strStr()

March 27, 2020

https://leetcode-cn.com/problems/implement-strstr/ 解: 题目比较简单,就是边界条件不好处理。用 i 和 j 分别控制 haystack 和 needle 的遍历进度,并挨个比较。相等的话两者继续向后比较,不相等,就重置 j…

27. 移除元素

March 26, 2020

https://leetcode-cn.com/problems/remove-element/ 解: 题目很简单,使用 slice 的相关操作将匹配到的元素移除即可。

26. 删除排序数组中的重复项

March 25, 2020

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 解: 题目很简单,按照题目要求,我们要限制空间复杂度,因此不能用 map…

25. K 个一组翻转链表

March 24, 2020

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 解: 假设这个链表长度与 k 一致,则该函数的实际行为是把这个链表反转。这样我们就把这个问题分解成如何反转列表,于是就有了上面的 reverseListNode…

24. 两两交换链表中的节点

March 23, 2020

https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 解: 题目比较简单,遍历链表并交换前后节点即可。这里我使用了递归的方式,这样不需要区分奇偶节点,每次只交换 head 和 head.Next,后面的链表递归到下一轮做。

「译」Scheduling In Go Part I - OS Scheduler

March 23, 2020

原文地址: https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html 简介 Go 调度程序的设计使我们的多线程 Go 程序更有效率和性能。 这要归功于 Go 调度程序通过操作系统(OS…

23. 合并K个排序链表

March 20, 2020

https://leetcode-cn.com/problems/merge-k-sorted-lists/ 解法一: 这种方法,每次遍历找出列表中最小的链表头,将其加入到新链表中,并重复此过程,直到所有链表都遍历完。 假设列表长度为 n,链表长度为 m,则时间复杂度为 O(n…

22. 括号生成

March 17, 2020

RocketMQ 的 NameServer

March 17, 2020

在 RocketMQ 中,client 是通过 NameServer 找到对应的 Broker 的。 NameServer 与 Broker 通信来更新 NameServer 中记录 Broker 信息,包括 topic、queue 的对应关系,topic、Broker…

Kafka 和 RocketMQ 如何进行消息复制

March 01, 2020

如何保证消息不丢? 客户端配合请求确认机制,来保证服务端确实收到了消息;服务端通过集群中多节点的消息复制和持久化来保证消息不丢失。 消息复制面临什么问题? CAP…

kafka 消费模型要点

February 29, 2020

一个消费者实例一定属于一个 ConsumerGroup ConsumerGroup 中的 consumer 实例可以消费一个或多个 Partition 在同一个 ConsumerGroup 中,同一时刻每个 Partition 只能有一个 consumer…

21. 合并两个有序链表

February 24, 2020

力扣 使用语言:Go 解: 思路: 要合并两个链表,必然要遍历两个链表,同时作比较。线性的办法就是同时遍历两个链表,根据值的大小判断哪个链表往后走。

20. 有效的括号

February 19, 2020

https://leetcode-cn.com/problems/valid-parentheses/ 使用语言:Go…

19. 删除链表的倒数第N个节点

February 18, 2020

https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 使用语言:Golang 解: 思路 可以先简化下问题,题目中要删除的是从最后一个开始数的第 N…

18. 四数之和

February 04, 2020

https://leetcode-cn.com/problems/4sum/ 暴力法: 用暴力法可以简单直接的解决问题,时间复杂度 O(n^4)。另外上面的解法中缺失了去重的逻辑,应该需要再增加个 map 结构来检查是否已经有该解。 双指针法: 时间复杂度:O(n^3)。num…

程序如何完成域名解析?

January 06, 2020

应用程序通过调用 glibc(GNU c库,linux 操作系统的一个重要组成部分) 中提供的 getaddrinfo、getnameinfo 等函数来获取域名对应的真实地址。 而 getaddrinfo 这些函数,会调用解析器(图中的 resolver code…

17. 电话号码的字母组合

December 17, 2019

https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/ 使用语言:Go 题目很简单,构造一个 map 存储数字到字符串的映射,然后递归即可。

16. 最接近的三数之和

December 17, 2019

https://leetcode-cn.com/problems/3sum-closest/ 使用语言:Go 直接三层循环进行计算、比较就可以了。

「译」Go 内存管理和分配

December 14, 2019

阅读原文: https://medium.com/a-journey-with-go/go-memory-management-and-allocation-a7396d430f44 本文基于 Go 1.13。 当分配的内存不再被使用时,Go…

15. 三数之和

December 13, 2019

https://leetcode-cn.com/problems/3sum/ 使用语言:Go 三数之和要求等于 0,我们只要确定两个数,第三个数其实也就确定了,所以我们只需要遍历前两个数的全部组合,并找到其中第三个数也存在的情况即可。我在这里用 set 存放了 nums…

14. 最长公共前缀

December 11, 2019

https://leetcode-cn.com/problems/longest-common-prefix/ 使用语言:Go 解: 题目很简单,拿第一个字符串作为比较对象,对后面的每个字符串进行比较,找到一致的前缀。

「译」Go 垃圾回收器如何监视你的应用程序

December 07, 2019

原文链接: https://medium.com/a-journey-with-go/go-how-does-the-garbage-collector-watch-your-application-dbef99be2c35 本文基于 Go 1.13 Go…

企业的竞争优势

December 07, 2019

13. 罗马数字转整数

December 06, 2019

https://leetcode-cn.com/problems/roman-to-integer/ 使用语言:Go…

12. 整数转罗马数字

December 06, 2019

https://leetcode-cn.com/problems/integer-to-roman/ 使用语言:Go 解: 这个题目很简单。这里我偷懒只是把所有可能的情况列出来放到一个 map 里,然后通过不断的寻找 num 的加数,来组合出罗马数字。

11. 盛最多水的容器

December 04, 2019

https://leetcode-cn.com/problems/container-with-most-water/ 使用语言:Go…

10. 正则表达式匹配

November 30, 2019

https://leetcode-cn.com/problems/regular-expression-matching/ 使用语言:Go 解: 这道题目的难点在于 “ ” 的处理上。如果没有 “ ” 我们就只需要考虑 s 和 p 的每个字符是否相等,或者 p…

9. 回文数

November 25, 2019

https://leetcode-cn.com/problems/palindrome-number/ 使用语言:Go 题目很简单,回文数的特征就是反过来与之前的数相等。因此,只需要从原数中分割每一位,并重新做进位计算,就能够得到反过来之后的数字,再与原数相比,就能得到答案。

8. 字符串转换整数 (atoi)

November 24, 2019

https://leetcode-cn.com/problems/string-to-integer-atoi/ 使用语言:Go 题目比较简单,按照题目过滤掉不符合条件的字符就可以了,这里复习了一下各种字符的 ASCII 表示 。跟…

Let's Create a Simple Load Balancer With Go

November 23, 2019

原文: https://kasvith.github.io/posts/lets-create-a-simple-lb-go…

7. 整数反转

November 19, 2019

https://leetcode-cn.com/problems/reverse-integer/ 使用语言:Golang 题目很简单,反转方式就是原数不断除以 10,新数不断乘以 10,再加上原数除以 1…

6. Z 字形变换

November 06, 2019

https://leetcode-cn.com/problems/zigzag-conversion/submissions/ 使用语言:Golang 这道题目没什么难度,只要找到规律,程序很好写。

5. 最长回文子串

November 03, 2019

https://leetcode-cn.com/problems/longest-palindromic-substring/ 使用语言:Golang…

4. 寻找两个有序数组的中位数

October 27, 2019

https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 使用语言:Golang O((m + n)/2) 解法: 此解法比较直接简单,同时遍历 nums1 和 nums…

2. 两数相加

October 19, 2019

https://leetcode-cn.com/problems/add-two-numbers/ 使用语言:Golang 解题思路: 最简单,最直接的办法:分别遍历两个链表,算出对应的十进制数字,对结果进行加法运算,再将运算结果转成链表。 这种方法非常直观,不太容易写出 bug…

js 中的 Number 类型

October 05, 2019

0.1 + 0.2 !== 0.3 ? 在初学编程的时候,数字类型总是把我整的一头雾水,C 里的各种 int, float, double 等等用起来好麻烦,数字就是数字,分那么细干嘛,写代码太累了。当我开始接触 js…

去中心化身份 ID (DIDs)

July 14, 2019

今天去参加 ArcBlock 的区块链漫游指南讲座,还是比较有收获。比较引起我兴趣的主要有两个内容,一个是讲座中提到的 Decentralized Identifiers(DIDS),即去中心化身份,另一个则是基于 Forge 的 DApp 开发。讲真,在这之前对 DApp…

MySQL schema 设计原则

July 05, 2019

任何小而简单的东西就是最好的,不要让问题过度复杂化,解决问题的最好办法是先简化问题。 简单列举一些设计原则: 避免过度设计。每一个表都要保持尽量简单,尽量不要设计出列很多的表,列太多就说明你的领域不够清晰,该先想清楚怎么把领域划分清楚了。表结构越简单,MySQL…

1. 两数之和

June 17, 2019

https://leetcode-cn.com/problems/two-sum/

GOPATH 是用来干嘛的?

June 10, 2019

GOPATH 是 Go 语言的工作目录,他的值可以是一个目录路径,也可以是多个目录路径,每个目录都代表 go 语言的一个工作区。 我们开发 Golang 项目时,需要依赖一些别的代码包,这些包的存放路径就与 GOPATH 有关。 在 v1.1…

rust 状态机设计模式

June 08, 2019

什么是状态机 状态机无处不在,像我们常用的 tcp、http、regexp 等等本质上都是状态机。 状态机是由状态和状态间的转换构成的。 拿红绿灯来举个简单的例子,红绿灯会处于 3 个状态:红、绿、黄,这几个状态之间有确定的转换路径: 如果用 rust…

328. 奇偶链表

April 29, 2019

https://leetcode-cn.com/problems/odd-even-linked-list/ 使用语言 Golang…

3. 无重复字符的最长子串

April 12, 2019

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 使用语言:golang 我先构造了一个 map 结构用来记录字符出现的位置,用 start…

437. 路径总和 III

March 23, 2019

https://leetcode-cn.com/problems/pa-sum-iii/ 使用语言 Golang…

Let's code a TCP/IP stack, 4 - TCP Data Flow & Socket API

January 26, 2019

阅读原文: http://www.saminiir.com/lets-code-tcp-ip-stack-4-tcp-data-flow-socket-api/ 这篇文章中,我们将研究 TCP…

35. 搜索插入位置

January 23, 2019

https://leetcode-cn.com/problems/search-insert-position/ 使用语言:Golang…

为什么国家会专门打击商人定价过高的行为呢?

January 20, 2019

事务的隔离级别

January 17, 2019

1.事务的概念是什么? 事务就是要保证一组数据库操作,要么全部成功,要么全部失败 2.事务隔离级别有哪些?各是什么意思? SQL 标准的事务隔离级别: 读未提交 - read uncommitted - 一个事务还没有提交,其修改内容就可以被别的事务读到 读提交 - read…

Let's code a TCP/IP stack, 3 - TCP Basics & Handshake

January 16, 2019

阅读原文: http://www.saminiir.com/lets-code-tcp-ip-stack-3-tcp-handshake/ TCP 运行在 OSI 模型的第 4 层 —— 传输层上,TCP…

297. 二叉树的序列化与反序列化

January 08, 2019

https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/ 使用语言:Python/JavaScript 看了一遍题目之后,想到的最简单的办法就是 JSON.stringify()/JSON…

关于交易费用

December 29, 2018

MySQL 索引调整引发的事故

December 29, 2018

前因 昨晚有个同事对线上某个数据库做了索引优化。那个表大概 1000 万左右的数据吧,操作是删除一个索引,然后给另一个字段加索引。MySQL 版本 5.6,使用了 Online DDL…

Let's code a TCP/IP stack, 2 - IPv4 & ICMPv4

December 28, 2018

原文地址: http://www.saminiir.com/lets-code-tcp-ip-stack-2-ipv4-icmpv4/ ICMP: 互联网控制消息协议,它用于 TCP/IP 网络中发送控制消息,提供可能出现在通讯过程中的各种问题反馈,ping 就是基于 ICMP…

929. 独特的电子邮件地址

December 25, 2018

https://leetcode-cn.com/problems/unique-email-addresses/ 使用语言:Golang 本周随机出来的题比较简单,直接构造了一个 map 来存放实际的 email,也顺便避免了去重的问题。主要熟悉了一下 Golang…

科斯定理

December 23, 2018

科斯定理:在交易费用为…

Let's code a TCP/IP stack, 1 - Ethernet & ARP

December 23, 2018

原文链接 http://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/ TCP 中最重要的部分: TCP header parsing - TCP 报头压缩 state machine…

并发控制

December 21, 2018

583. 两个字符串的删除操作

December 21, 2018

https://leetcode-cn.com/problems/delete-operation-for-two-strings/ 使用语言: Golang 解题思路 最少删除数 = 两个字符串的字符总数 - 2 * 最大公共子字符数 有多少个字母相同,长度 *…

695. 岛屿的最大面积

December 09, 2018

https://leetcode-cn.com/problems/max-area-of-island/ 使用语言: Golang…

301. 删除无效的括号

December 02, 2018

https://leetcode-cn.com/problems/remove-invalid-parentheses/submissions/ 使用语言: Golang…

Code Review Best Practices

November 24, 2018

原文链接 https://medium.com/palantir/code-review-best-practices-19e02780015f 为什么要做 code review ? 作为 commit…

99. 恢复二叉搜索树

November 21, 2018

https://leetcode-cn.com/problems/recover-binary-search-tree/ 使用语言: Golang 解题思路 首先,你要了解遍历一棵树有哪些方式: https://zh.wikipedia.org/wiki/%E6%A0%91%E…

关于日志的那些事

November 19, 2018

今天刚好看到了 MySQL 中日志系统的设计,谈谈自己的理解。 mysql 中有两个十分重要的日志模块 —— redo log 和 binlog。 redo log 顾名思义,是重做日志。redo log 是由 InnoDB 引擎实现的。 当有一条记录需要更新时,InnoDB…

时间管理小技巧

November 18, 2018

ABCDE法 首先要明确一点,事情是永远做不完的,不要期望能够处理完所有事情,应该按照轻重缓急给每个任务标记分类。我最近在实践 ABCDE 法。 A 类任务是很重要,必须要完成的事情,其中又可以按照优先顺序分为 A-1, A-2… B 类任务没有 A…

Teach Yourself Programming in Ten Years

November 18, 2018

原文链接: http://norvig.com/21-days.html A language that doesn’t affect the way you think about programming, is not worth knowing. 编程谏言: http…

451.根据字符串出现频率排序

November 18, 2018

https://leetcode-cn.com/problems/sort-characters-by-frequency/ 使用语言:Golang 学习总结: golang map 结构使用 声明一个 map 结构 KeyType 可以是任意可比较的类型,ValueType…

从零开始设计一个断路器

December 05, 2017

最近我们在尝试搞微服务,根据以往大家进行微服务化的一些经验,我们预见了这样一个问题:微服务之间不可避免的会有一些相互依赖,比如一个微服务 A 依赖于微服务 B,如果微服务 B 整个挂掉了,或者出了些问题,势必会影响到所有依赖它的其他服务,而这些依赖 B 的服务由于受到 B…

相似度分析

November 23, 2017

最近了解了几个相似度分析相关的算法,整理一下。 曼哈顿距离(Manhattan Distance…

「译」Node.js Streams 你应该知道的事情

September 08, 2017

阅读本文需要一定的 Node.js 基础,如果文中出现了一些不太理解的地方,记得用搜索引擎或者 Node 官方文档来解惑。 生产者消费者问题: https://zh.wikipedia.org/zh-hans/%E7%94%9F%E4%BA%A7%E8%80%85%E6%B…

「译」理解 Node.js 事件驱动机制

August 15, 2017

学习 Node.js 一定要理解的内容之一,文中主要涉及到了 EventEmitter 的使用和一些异步情况的处理,比较偏基础,值得一读。 阅读原文 大多数 Node.js 对象都依赖了 EventEmitter 模块来监听和响应事件,比如我们常用的 HTTP requests…

「译」用 Node.js 搭建 API Gateway

August 09, 2017

我们团队的后端服务中,一开始只有一个大服务,所有的东西都往里面写,可以想象下,当这个服务变得不断的庞大,将会变得多么难以维护。后来逐渐把一些数据服务抽离成单独的 API…

Haskell小白之 区分 ($) 和 (.) 两个函数

June 03, 2017

每次看 Haskell 代码,看到一堆 ($) 和 (.) 混杂在一块儿,总是让人一下子摸不着头脑。像我这样的半吊子选手,经常一段时间不看,这两位就又分不清了。算了,这次就把他俩的区别写一写,理理清楚,彻底搞明白这俩大兄弟。 按照了解一个 Haskell…

「译」从不同的抽象层次理解单一职责原则

June 03, 2017

在二十世纪初的某个地方,广为人知的 Uncle Bob —— 罗伯特·马丁(Robert C. Martin)第一次提出了面向对象设计的五大原则 —— SOLID 原则。SOLID 是这五大原则单词首字母的缩略词,其中的每个字母代表着不同的原则: S - Single…

从 Generator 开始学习 Koa

May 21, 2017

Koa是最近比较火的一款基于Node的web开发框架。说他是一个框架,其实他更像是一个函数库,通过某种思想(或者说某种约定),将众多的中间件联系在一起,从而提供你所需要的web服务。 Koa做了两件很重要的事: 封装node的request和response对象到Context…

奇怪的querySelector和querySelectorAll

February 15, 2017

W3C在07年的Selectors API中新增了两个API —— querySelector 和 querySelectorAll 。这两个API在文档中的描述如下: 从接口定义中就可以看出, Document , DocumentFragment 和 Element…

「译」使用Haskell创业4年的感受

January 15, 2017

我想说的: 最近在学习Haskell…

「译」React应用性能优化

October 30, 2016

这段时间对自己写的React应用的性能做了一些分析以及优化,发现项目中产生性能问题的原因主要来自两个方面: 大量的数据渲染使组件进行不必要的diff过程,导致应用卡顿; 部分交互操作频繁的组件中使用了一些不必要的DOM操作,以及在处理比如scroll事件,resize…

「译」JSX:硬币的另一面

February 23, 2016

React框架刚刚发布的时候,JSX颠覆了很多人的想法。习惯了HTML标签与JavaScript代码分离的前端工程师们,看到JSX大概都会不禁吐槽:“这些奇怪的标签出现在JavaScript里是要干啥?!”我们一向贯彻的关注点分离原则呢?Facebook…