Tips: 如果您已经充分理解问题是什么,请直接跳到 #问题出在哪里 一节。

字符串和编码

先从概念说起,字符串和它的编码是两个不同的概念:

  • 字符串是一段文字本身,可以是中文可以是英文,以及各种语言
  • 字符串的编码是计算机存储、处理字符串的方式;作为一种数据,它和其他数据一样,都是以一串0和1组成的,通常我们用字节数组来表示它。

字符串经过编码(encode) 就成为了一堆数据,反过来,数据经过解码(decode) 就变回我们认识的字符串。

阅读全文 »

Bandit 是什么?

Bandit 是一个用来检查 Python 代码中常见安全问题的工具,它会处理各个源代码文件,解析出 AST(抽象语法树),然后对 AST 节点执行一组对应的插件。当 Bandit 完成检查之后,它能生成一封安全报告。

安装说明:参见 GitHub 项目主页

阅读全文 »

一不小心拿到了天池阿里中间件性能大赛的冠军,准确的说还有个 24 小时即刻挑战赛(个人赛)的亚军。

Emmm... 过去太久了,不知道说什么感言了。以下是是比赛的题目以及我的解答,备忘。

阅读全文 »

测试方案:

  1. 主线程将一个 Integer 对象发到 Channel 0
  2. 线程 i 将对象从 Channel i 不断搬运到 Channel i+1
  3. 最后一个线程从 Channel N-1 中拿到对象,做加和

为了保证公平,Go 中自行封装一个 Integer 而不是用 int 型;考虑到实际中大多数情况下 channel 里走的都是对象而非基本类型,这样是合理的。

阅读全文 »

经过一个月的学习,成功通过了 AWS 考试认证。不得不说相比从零开始闷声摸索,学习带来的收获还是很大的,避免了一些 AWS 的大坑,也了解了一些 best practice 的系统设计。

可惜这个博客并不是在 AWS 上(原因可能是贫穷)。

以下是我看过的学习资料:

阅读全文 »

找到这篇文章是在阅读 Kafka 文档时,一个名为 “Don't fear the filesystem!”的段落中提到的。文档指出,我们总是思维定势地以为磁盘很慢,内存很快。然而今天的计算机体系结构中,并非这么简单:

  • 因为操作系统 PageCache 的存在,磁盘操作可能很快
  • 虽然磁盘 IOPS 难以提高,但吞吐量在不断上升;换句话说,顺序读写磁盘非常快
  • CPU Cache 常常被忽略了,了解 CPU Cache 对提升内存读写性能至关重要

原文链接

当你开始深入 Varnish 的源代码后,应该会发觉它与你日常所见的一般应用软件有着明显不同,而这绝非偶然。

多年以来我的绝大部分时间花费在 FreeBSD 的内核开发上,而每每涉足用户空间编程,却总是毫无例外地发现那里的人们还在以1975年的方式工作。

阅读全文 »

题目:https://www.hackerrank.com/contests/w31/challenges/spanning-tree-fraction 一张连通图G=(V,E)上,每条边有a和b两个整数,求一个生成树使得Sum(a) / Sum(b) 最大,输出这个最大值的分数形式 p/q

\(\frac{\sum{a\_i}}{\sum{b\_i}} \ge c\) ,经过变换可得,\(\sum{(a\_i - b\_i c)} \ge 0\),这种形式下 ai - bi * c 就退化为一条边的 cost,能方便得用 Prim 或 Kruskal 算法求出 cost 最大的生成树。

阅读全文 »

SQS - Simple Queue Service

SQS 是 AWS 的消息队列服务,用于暂存消息并等待接收者处理。

  • 不保证 FIFO,可能乱序到达
  • Visibility Timeout 最长 12 小时
  • 保证每条消息至少被传递一次(At least once),这意味着某些情况下可能传递多次,所以你写程序的时候要注意处理重复的消息
  • 每条消息最大 256 KB
    • 然而,依据 64 KB 的 Chunk 数量计费
    • 所以一个 256 KB 的消息可能产生 4 次费用:4 * 64 KB chunks
  • SQS 的消息没有优先级;如果你需要优先级,最佳实践是创建多个 SQS 队列
阅读全文 »
0%