目录

在Java里,如果我们创建了Integer类和Number类,并且IntegerNumber的子类。那么List<Integer>类也是List<Number>类的子类吗?

我们可以写一段代码来找到这个问题的答案。现在我们有一个求List<Number>类最大值的方法,它的输入是List<Number>类的实例。若List<Integer>类也是List<Number>类的子类,那么下面的代码应该是合法的。

阅读全文 »

目录

Java 泛型

我们为什么需要泛型

自从Java SE 1.5引入泛型(Generics) 之前,Java程序员想要写出通用的代码有点难度。比如想要得到Java某个集合(Collection)的最大值,在没有泛型的情况下,我们需要针对每个特定类型去写特定的求最大值方法。

比如针对Number集合我们需要实现

1
public static Number max(NumberCollection coll, NumberComparator comp)

针对Integer集合我们需要实现

1
public static Integer max(IntegerCollection coll, IntegerComparator comp)

显而易见,这样实现起来是非常没有效率的。我们需要为每个不同的类型实现重复的逻辑,重复在编程中是非常罪恶的。当然,为了减少重复,我们也可以有这样的实现

1
public static Object max(ObjectCollection coll, ObjectComparator comp)

因为Java所有的类都是Object的子类。当然这样实现的坏处就是需要做对象转型(Casting)

1
Integer maxInterger = (Integer) max(coll, comp)

然而对象转型也是非常罪恶的,因为一旦错误地使用了对象转型,代码只有到运行阶段(runtime) 才会报错。所以我们要尽可能的避免对象转型。

而有了泛型以后,我们只需要实现

阅读全文 »

文章目录

背景

几年前在实习时,我完全没有接触过设计评审。当时的团队采用Scrum开发过程。开发团队采取一个架构师(Architect)和三到四个开发者(Developers)的配置。为了保证开发速度,冲刺订单(Spring backlog)里的大多数任务(Ticket)都有架构师写的详细开发步骤。架构师在团队里负责了大多数的软件设计任务,开发者则专注于将架构师的想法实现。

参加工作后,由于开发领域,开发过程,甚至是公司文化都与我实习过的公司有很多不同。在此期间,我也接触到了相当多的设计文档和设计评审。

2019年,我在开发团队里承担的设计任务也越来越多,写过的设计文档有二三十个。参加的设计评审则是更多。一年下来,我对设计评审,这个软件开发中的一个流程,有了自己的一些看法,下面则是我对设计评审的一个小总结。

阅读全文 »

目录

简短的介绍

request-pullPull Request的名称如此相似,但是他们的功能是完全不同的。

request-pull是git的命令,它用于生成发送到邮件列表的待处理的更改的摘要。默认情况下,GitHub没有集成这个功能。

Pull Request是GitHub特有的一项功能(简称PR)。它用于向Github托管的某一项目中的某一分支提出合并请求。项目管理者则可以在github的web界面上合并来自不同分支的代码,解决合并冲突,做代码审查或对代码进行评论。

Git request-pull

使用目的

Generates a summary of pending changes

生成待处理的更改的摘要

阅读全文 »

目录

翻译自:Latency Numbers Every Programmer Should Know


操作 延迟(纳秒) 延迟(微秒) 延迟(毫秒) 参考
CPU L1 级缓存访问 0.5 ns
分支预测错误* 5 ns
CPU L2 级缓存访问 7 ns 14x L1 cache
互斥体Mutex 加锁/解锁 25 ns
内存访问 100 ns 20x L2 cache, 200x L1 cache
用Zippy压缩1K字节 3,000 ns 3 us
在1 Gbps速率的网络上发送1K字节 over 10,000 ns 10 us
从SSD读取4K长度的随机数据 150,000 ns 150 us ~1GB/sec SSD
从内存读取连续的1 MB长度数据 250,000 ns 250 us
在同一数据中心内的来回通讯延迟* 500,000 ns 500 us
从SSD读取连续的1 MB长度数据 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
磁盘寻址 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
从磁盘读取连续的1 MB长度数据 20,000,000 ns 20,000 us 20 ms 80x memory, 20X SSD
发送数据包 California->Netherlands->California 150,000,000 ns 150,000 us 150 ms
阅读全文 »

目录

第一印象

大约在20天前,我在亚马逊上冲动的购买了这个东西

树莓派3的官方Desktop Starter Kit,其实也就是树莓派3开发板+16GB miroSD装机卡+壳子+充电器套装。不过这样一套买下来,上手把玩树莓派要方便许多,机子到手第一天我就按照说明书安装了树莓派定制Debian的发型版Raspbian系统。第一感觉还挺好用,通过HDMI连接上显示器,再用4个USB接口中的两个连接键盘和鼠标就可以当做桌面电脑使用了。如果要通过个人电脑远程连接树莓派的话,ssh和VNC Viewer都很好用。

远程连接

通过ssh

注意,以下步骤均在个人电脑上完成,不是在树莓派上

阅读全文 »