不会飞的章鱼

熟能生巧,勤能补拙;静能生慧,为而不争;莫向外求,但求心觅;念念不忘,必有回响。

转眼间新工作已经入职了三周,接手了一个没有文档没有注释的项目,不过bug较少,前期先熟悉。

写这篇文章也算是梳理一下目前的资源,以及对未来半年做一个简单的规划。

目前个人终于可以hold住一些中小型的项目(代码量大概在一万行以下),但高并发、分布式、微服务、消息队列、云原生这块还是很薄弱的,正好入职的新公司在研发分布式云存储系统,可以好好提升一下。在保质保量完成工作的同事,计划跟一些实战项目,以及一些有深度的技术专栏,在学习完它们之后,提炼自己的感受,做好总结。

目前的规划

核心就三点:算法+系统设计+英语。

阅读全文 »

如果在噩梦中睁眼

直面着残忍的世界

风拨动了谁的心弦

留恋却来不及告别

如果结局仅剩惨烈

阅读全文 »

题目描述

力扣_509. 斐波那契数

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

1
2
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给你 n ,请计算 F(n) 。

阅读全文 »

秒杀系统架构设计都有哪些关键点

秒杀其实主要解决两个问题,一个是并发读,一个是并发写。

秒杀的整体架构可以概括为“稳、准、快”几个关键字。

所谓“稳”,就是整个系统架构要满足高可用,流量符合预期时肯定要稳定,就是超出预期时也同样不能掉链子,你要保证秒杀活动顺利完成,即秒杀商品顺利地卖出去,这个是最基本的前提。

所谓“准”,就是秒杀 10 台 iPhone,那就只能成交 10 台,多一台少一台都不行。一旦库存不对,那平台就要承担损失,所以“准”就是要求保证数据的一致性。

阅读全文 »

题目描述

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:
输入:nums = [], target = 0
输出:[-1,-1]
 

提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums 是一个非递减数组
-109 <= target <= 109
阅读全文 »

题目描述

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1


提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。

题目解析

中规中矩的一道专门考察二分查找的题目,直接上代码,注释写的很详细了。

阅读全文 »

golangci-lint 基本介绍

golangci-lint 是一个 Go linters 聚合器。

特征

⚡ 非常快:并行运行 linter,重用 Go 构建缓存并缓存分析结果。
⚙️ 基于 Yaml 的配置。
🖥 与 VS Code、Sublime Text、GoLand、GNU Emacs、Vim、Atom、GitHub Actions 的集成。
🥇 包含 48 个linters,无需安装。
📈 由于调整了默认设置,误报的最小数量。
🔥带有颜色、源代码行和标记标识符的漂亮输出。

golangci-lint 各配置项介绍

阅读全文 »