0%

一、背景

作为一个软件开发工程师,日常很多机会和英文打交道。
特别是上一份工作,做全球支付项目,需要用到英文与国际友人沟通。
奈何自己的英语水平捉襟见肘,于是经常会有意地去收集相关的文章。

今天心血来潮,再次看了一下之前收藏的相关文章,感觉收获不少。
于是就想写一篇文章归集一下相关的内容,方便日后翻阅,顺便分享给有需要的人。

二、资源

复旦大学中文系教授严峰

Read more »

零、背景

在压测过程中发现有部分 redis cluster 节点内存占用比其它节点高(来自监控)

内存倾斜的隐患

  1. 更早达到容量瓶颈,触发淘汰策略
  2. 承担更多的负载( 读 / 写 ),导致节点压力增大,可能触发宕机。

一、问题

redis cluster slot 分配不均匀
redis cluster 集群内存分配算法的缺陷
问题算法:单节点内存 = 集群总内存 / 节点数

合理算法:单节点内存 = (集群总内容 / slot 数量) * 当前节点 slot 数量

二、排查

2.1 key 分布问题?

Read more »

一、背景

最近在看代码,发现一个 Date 格式化为 String 的方法。

1
2
3
public String dateFormatString() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date);
}

看到这个方法想到

  • 每次都 new 一个 format 会快么(非线程安全,得每次都 new)?
  • SimpleDateFormat 格式化快么?
  • “yyyy-MM-dd HH:mm:ss.SSS” 改成静态常量会不会快点?

带着以上三个疑问,就想着做个对比测试。
恰巧最近在 perfma 社区看 jvm 相关内容时,刷到了『性能调优必备利器之 JMH』

优点:不用自己写相关统计代码,而且统计方式有多种

二、结论

性能从低到高

  • Java.text.SimpleDateFormat
  • org.apache.commons.lang.time.DateFormatUtils
  • org.joda.time.DateTime
Read more »

一、结论

JDK8 因未指定 MetaSpace 大小,程序启动过程中元空间不够用,触发 full gc。

详细如下:
JDK8 因未指定 MetaSpace 大小,默认初始大小约 21M
程序启动,元空间大小占用稳定在 90M
因为超过了默认元空间大小,导致元空间扩容(每次扩容会 full gc)
从 GC 日志来看,每次元空间扩容都是增加 20M 左右,所以程序启动时 full gc 4 次

二、问题

应用启动时出现 full gc;

gc日志重点:GC (Metadata GC Threshold) [PSYoungGen: 354024K->15340K(1376256K)

三、排查过程

Read more »

一、中断的解释

网络

中断(Interrupt)是指 处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。

软中断 (form 《UNIX 操作系统设计》)

内核在收到软中断信号的进程上下文中处理软中断信号,因此进程必须运行以便处理信号。
处理软中断信号的方式:

  1. 进程忽略软中断信号;
  2. 进程收到软中断信号后退出;
  3. 进程收到信号后执行一个特殊的(用户)函数;

二、Java 的中断

Java API 中线程相关的方法主要有三个:

Read more »

零、背景

在近两年高并发系统 DevOps 的过程中,
遇到了很多底层的问你题,eg: 网络、硬件、虚拟机等,
有些现象虽然知其然,但是不知其所以然,书到用时方恨少!
抱着深入学习的心态这两年看了一些相关书籍:

《计算机网络:自顶向下方法》
《操作系统精髓与设计原理》
《Java性能优化权威指南》
《Redis运维与开发》
《性能之巅》

收获甚大 所以想继续深入学习
误打误撞,看到了之前在 GitHub 关注的一个『自学计算机科学』仓库,很赞同下面这个观点

软件工程师分为两种:

  1. 一种充分理解了计算机科学,从而有能力应对充满挑战的创造性工作;
  2. 另一种仅仅凭着对一些高级工具的熟悉而勉强应付。

这两种人都自称软件工程师,都能在职业生涯早期挣到差不多的工资。
然而,随着时间流逝,第一种工程师不断成长,所做的事情将会越来越有意义且更为高薪,
不论是有价值的商业工作、突破性的开源项目、技术上的领导力或者高质量的个人贡献。

一、资源

1.1 摘要

Read more »

零、摘要

响应国家就地过年的号召,今年第一次在外过年。
弹指一挥间,12 天的假期已经成为过去。
期间还是有不少的收获,最主要的是看了 4 本书。
以及在微博上面看到了不少的人和事,甚是触动。

找到自己的兴趣,追求精进,坚持做对的事情。

一、阅读

1.1 《 UML 和模式应用》0113~0207

这本书是 leader 推荐给大家的
基于职责去做设计的理念确实很棒,值得观摩实践。

Read more »

零、背景

本文灵感来自《人人都是产品经理 2.0》
位置:7.4.2 如何做一个让 Ta 们讨厌的人

作为一个研发,工作过程中如果能及时发现如下场景,
及时给对方负反馈,否则受伤的是整个团队。
看了这本书之后,感觉对产品有新的认知,
知道他们在做什么,怎么做,后续可以更好的与他们沟通。
而且里面的内容对于研发来讲也是适用的。

一、开始实施之前

1.1 不说清需求价值

技术问”为什么要做”时:
1、时支支吾吾
2、这是老板(XXX)要的,假装自己是个传话筒
3、我接的是二手需求,什么都不知道
随说:其实正确的做法是追溯这个需求的初衷,有利于评估 ROI (投入产出比),以及排优先级,以及增进对业务的理解。

1.2 不去想细节功能

Read more »

一、背景

由于某种原因,需要手工处理错误日志提取某些信息。
下载下来的日志文件是压缩包

1.1 文件信息

1
2
3
4
system_error.log.2020-11-01.20201105200433.zip
system_error.log.2020-11-01.20201105195953.zip
system_error.log.2020-11-01.20201105200830.zip
...省略

1.2 压缩包信息

1
2
3
4
5
6
7
$ unzip -v system_error.log.2020-11-01.20201105200830.zip
Archive: system_error.log.2020-11-01.20201105200830.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
4495560 Defl:N 78526 98% 11-01-2020 23:43 504551c6 system_error.log.2020-11-01
-------- ------- --- -------
4495560 78526 98% 1 file

压缩包文件名不一样,但是压缩包中的文件有一样的名字。
例如:system_error.log.2020-11-01

尝试使用如下方式,提示有重复,需要挨个选择如何处理,极度不便。
于是想使用 shell 来解决( 之前没写过 shell )

1.2 尝试过程

Read more »

一、常见单位

单位英文全称中文全称转换
bbit-
BByte字节1B=8b
KBKilo Byte千字节1KB=1024B
MBMega Byte兆字节1MB=1024KB
GBGiga Byte千兆1GB=1024MB
TBTrillion Byte万亿字节1TB=1024GB
PBPeta Byte千万亿字节1PB=1024TB
EBExa Byte百亿亿字节1EB=1024PB
ZBZetta Byte十万亿亿字节1ZB=1024EB
YBYotta Byte一亿亿亿字节1YB=1024ZB
BBBronto Byte一千亿亿亿字节1BB=1024YB
NBNona Byte1NB=1024BB
DBDogga Byte1DB=1024NB
CBCorydon Byte1CB=1024DB
进制除了 Byte 与 bit 之间是 8,其它的都是 1024,但是目前很多时候习惯用 1000,比如 1T ≈ 1000G;

二、带宽/网速

2.1 带宽

运营商(ISP)带宽宣传常见的有:50M、100M、500M、1000M…
注意:这是传输速率,而不是下载速度。

Read more »