不会飞的章鱼

熟能生巧,勤能补拙,静能养慧;莫向外求,念念不忘,必有回响

Hello World

在 Java 中,所有的代码都必须写在类里面,所以,我们定义一个 HelloWorld 类。main() 函数是程序执行的入口。main() 函数中调用了 Java 开发包 JDK 提供的打印函数 System.out.println() 来打印 hello world 字符串。除此之外,Java 中有两种代码注释方式,第一种是“// 注释…”双斜杠,表示后面的字符串都是注释,第二种是“/* 注释…*/”,表示中间的内容都是注释。

1
2
3
4
5
6
/*hello world程序*/
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello World"); //打印Hello World
}
}

基本数据类型

  • 整型类型:byte(字节)、short(短整型)、int(整型)、long(长整型)

  • 浮点类型:float(单精度浮点)、double(双精度浮点)

  • 字符型:char

  • 布尔型:boolean

阅读全文 »

直播介绍

直播嘉宾: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 层的数字三角形,你该如何解决这个问题呢?

数学归纳法思想

阅读全文 »