不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

直播介绍

直播嘉宾:Bendy PAN,资深技术猎头。

如何正确地选择工作机会

  • 结合市场趋势和自身优点。
  • 兼顾自己的兴趣爱好,抬头看天,脚踏实地,少走弯路。
  • 对于暂时够不到的位置:定高目标,努力拼搏。
  • 职位推荐渠道的选择:直投,内推和猎头

如何更好地准备面试

阅读全文 »

Successful Remote Working
这篇文章主要探讨如何成功地进行远程工作。

导读:如何逐渐培养阅读习惯,快速抓住文章大意?

文章背景

远程工作这个话题最近比较火。新冠肺炎的疫情爆发之后,为保持社交距离(social distancing),压制病毒传播,很多企业都会要求员工在家办公(work from home)。但是,远程办公其实并不是一个新话题。出于各种目的,例如政府为缓解城市交通压力,企业为减少员工通勤成本(交通费用在其次,更宝贵的是时间)、个人为躲避雾霾等严重污染的环境,远程办公被越来越多的企业所接受。

在开始讲解这篇文章之前,我们来比较一下 work from home 和 work at home 这两个短语的区别。从某种意义上讲,这两个短语的区别其实就是远程工作和自由职业(self-employed)之间的区别。

阅读全文 »

Open Source Benefits to Innovation and Organizational Agility

这篇文章出自 InfoQ 英文站,主要探讨了开源给科技创新能力和组织敏捷性带来的好处。

导读:通过阅读序言段了解文章的背景知识

背景知识

通过这篇文章的序言段,了解一下文章的总体背景。

阅读全文 »

The Product-Minded Software Engineer

导读:背景知识对于理解文章究竟有多重要?

背景知识的重要性

这个标题“The Product-Minded Software Engineer”中有两个关键词,product-minded(产品思维)和 engineer(工程师)。这篇文章的主题是产品思维,那我们就要先去了解一些背景知识。

核心词汇:minded

阅读全文 »

完善测试框架的功能与提示

温故知新,gtest 的输出结果

第一部分,一套单元测试的相关信息:

1
2
3
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from test_is_prime

第二部分,是每个单元测试运行信息的输出:

阅读全文 »

实现测试框架前的准备

初识:Google 测试框架

Google 开发的单元测试框架 Google Test,我们一般称它为 gtest。

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <gtest/gtest.h>

// 判断一个数字 x 是否是素数
int is_prime(int x) {
for (int i = 2; i * i < x; i++) {
if (x % i == 0) return 0;
}
return 1;
}

// 第一个测试用例
TEST(test1, test_is_prime) {
EXPECT_EQ(is_prime(3), 1);
EXPECT_EQ(is_prime(5), 1);
EXPECT_EQ(is_prime(7), 1);
}

// 第二个测试用例
TEST(test2, test_is_prime) {
EXPECT_EQ(is_prime(4), 0);
EXPECT_EQ(is_prime(0), 0);
EXPECT_EQ(is_prime(1), 0);
}

int main() {
return RUN_ALL_TESTS();
}
阅读全文 »

计算器程序的功能设计

一般计算器功能如下:

  • 第一次出现的变量赋值语句,即为变量定义;
  • 计算表达式的值。

这两个功能,看似简单,可实际要考虑的还很多,例如:变量是否有作用域的限制啊,合法变量名的规则,表达式中支持的运算符种类啊,每一种运算符的优先级,等等。这些需要考虑的细节,每一个都会给我们的项目增加一点点难度。

为了把难度控制在一个可以实现的范围,我们对计算器功能做进一步的细致描述,同时也是降低项目实现难度,重新修订的功能定义如下:

阅读全文 »

初识:0/1 背包问题

0/1 背包问题可以说是所有背包问题的基础,它描述的场景是这样的:假设你有一个背包,载重上限是 W,你面前有 n 个物品,第 i 个物品的重量是 wi,价值是 vi,那么,在不超过背包重量上限的前提下,你能获得的最大物品价值总和是多少?

按照动态规划问题的四步走,咱们来分析一下这个问题。

状态定义

关于状态定义,我们首先来分析 0/1 背包问题中的自变量和因变量。

阅读全文 »

任务

数字三角形问题

由上到下,第 i 层由 i 个数字组成,目标从第 1 层开始,每次只能向下走到相邻的两个节点,求走到最后一层路径上面数字的最大和值是多少。就像图中标红的一条线路,就是路径和值最大的一条路线,和值为 39。如果给你的是一个 n 层的数字三角形,你该如何解决这个问题呢?

数学归纳法思想

阅读全文 »

任务

众所周知,在不计算小于 1 元钱的面额的前提下,我国的纸币系统中,曾经拥有如下面值:1 元、2 元、5 元、10 元、20 元、50 元 和 100 元。假设,每一种面值的纸币,我们都有无限张,现在想用这些钱凑出 1000 元,请问你有多少种不同的方案?

这里说的不同方案,是不关注钱币之间的顺序的,例如要凑 7 元钱,可以是 1 元、5 元、1 元,也可以是 1 元、1 元、5 元,这两种方案我们视为同一种。

编码实现

容斥原理

阅读全文 »