零、摘要
响应国家就地过年的号召,今年第一次在外过年。
弹指一挥间,12 天的假期已经成为过去。
期间还是有不少的收获,最主要的是看了 4 本书。
以及在微博上面看到了不少的人和事,甚是触动。
找到自己的兴趣,追求精进,坚持做对的事情。
一、阅读
1.1 《 UML 和模式应用》0113~0207
这本书是 leader 推荐给大家的
基于职责去做设计的理念确实很棒,值得观摩实践。
本文灵感来自《人人都是产品经理 2.0》
位置:7.4.2 如何做一个让 Ta 们讨厌的人
作为一个研发,工作过程中如果能及时发现如下场景,
及时给对方负反馈,否则受伤的是整个团队。
看了这本书之后,感觉对产品有新的认知,
知道他们在做什么,怎么做,后续可以更好的与他们沟通。
而且里面的内容对于研发来讲也是适用的。
技术问”为什么要做”时:
1、时支支吾吾
2、这是老板(XXX)要的,假装自己是个传话筒
3、我接的是二手需求,什么都不知道
随说:其实正确的做法是追溯这个需求的初衷,有利于评估 ROI (投入产出比),以及排优先级,以及增进对业务的理解。
由于某种原因,需要手工处理错误日志提取某些信息。
下载下来的日志文件是压缩包
1 | system_error.log.2020-11-01.20201105200433.zip |
1 | $ unzip -v system_error.log.2020-11-01.20201105200830.zip |
压缩包文件名不一样,但是压缩包中的文件有一样的名字。
例如:system_error.log.2020-11-01
尝试使用如下方式,提示有重复,需要挨个选择如何处理,极度不便。
于是想使用 shell 来解决( 之前没写过 shell )
单位 | 英文全称 | 中文全称 | 转换 |
---|---|---|---|
b | bit | 位 | - |
B | Byte | 字节 | 1B=8b |
KB | Kilo Byte | 千字节 | 1KB=1024B |
MB | Mega Byte | 兆字节 | 1MB=1024KB |
GB | Giga Byte | 千兆 | 1GB=1024MB |
TB | Trillion Byte | 万亿字节 | 1TB=1024GB |
PB | Peta Byte | 千万亿字节 | 1PB=1024TB |
EB | Exa Byte | 百亿亿字节 | 1EB=1024PB |
ZB | Zetta Byte | 十万亿亿字节 | 1ZB=1024EB |
YB | Yotta Byte | 一亿亿亿字节 | 1YB=1024ZB |
BB | Bronto Byte | 一千亿亿亿字节 | 1BB=1024YB |
NB | Nona Byte | 1NB=1024BB | |
DB | Dogga Byte | 1DB=1024NB | |
CB | Corydon Byte | 1CB=1024DB | |
进制除了 Byte 与 bit 之间是 8,其它的都是 1024,但是目前很多时候习惯用 1000,比如 1T ≈ 1000G; |
运营商(ISP)带宽宣传常见的有:50M、100M、500M、1000M…
注意:这是传输速率,而不是下载速度。
最近做压力测试,不同的系统的机器监控数据差异明显
A 系统:CPU 高 load 低
B 系统:CPU 低 load 高
那么是什么导致 A B 系统出现这种情况?
CPU 高了系统肯定跑不动了,那么 load 多高代表系统跑不动呢?
Linux 系统下代表的是 system load averages。
Linux load averages track not just runnable tasks, but also tasks in the uninterruptible sleep state.
Linux 平均负载不仅跟踪可运行的任务,还跟踪处于不可中断睡眠状态的任务。
On Linux, load averages are (or try to be) “system load averages”, for the system as a whole, measuring the number of threads that are working and waiting to work (CPU, disk, uninterruptible locks). Put differently, it measures the number of threads that aren’t completely idle. Advantage: includes demand for different resources.
在 Linux 上,负载平均值是(或试图是)“系统负载平均值” ,对于整个系统来说,测量正在工作和等待工作的线程数(CPU、磁盘、不可中断锁)。换句话说,它测量的是没有完全空闲的线程数量。优势: 包括对不同资源的需求。
In 1993, a Linux engineer found a nonintuitive case with load averages, and with a three-line patch changed them forever from “CPU load averages” to what one might call “system load averages.” His change included tasks in the uninterruptible state, so that load averages reflected demand for disk resources and not just CPUs.
1993年,一位 Linux 工程师发现了一个与平均负载不直观的案例,一个三行补丁永远地将它们从“ CPU 负载平均值”改变为人们可能称之为“系统负载平均值”他的更改包括处于不可中断状态的任务,因此平均负载反映了对磁盘资源的需求,而不仅仅是 cpu。
目前测试机器为 4C8G
两台机器完全处理一样的工作
大部分时间对象朝生夕死,很少进入老年代
CMS 指定了新生代最大 1536M,略微有点浪费
于是设置 G1 自动调节各个区域大小,看看能否有所改善
也因为最近重温了两本 JVM 相关的书籍,找机会进行实践看看
1 | -Xms4096M |
当初这个文档应该是在『科技爱好者周刊』上还是哪里发现的
看这个文档本来的目的是每天坚持阅读英文文档
技术文档一般都比较简洁易懂,英语是一个长期的过程,还得继续坚持阅读~
看的过程中发现,结合一定的场景,和示例
和官方文档相比,没有那么枯燥,也更好理解
甚至有一些之前未曾关注的用法让我感到惊艳
所以推荐一下
很多时候我们调用接口并不是需要接口返回的所有信息;
就像查询数据库很少使用 select * from table; 一样;
为了使现有的存储结构以及代码逻辑改动最少
想办法在最外层的接口对返回的对象进行精简
目的使为了提高接口性能:减少 RPC 传输时间、节省网络带宽、节省序列化开销
前面两种比较呆板,属于定制化开发;
Spring BeanWrapper 方案处理非集合对象比较完美,输出对象小不少;
基本数据类型有默认值,无法去除,不过这种对大小影响不大;
完整代码:github.com
1 | public static void main(String[] args) { |
有个朋友抛出一个问题,明显不符合最左匹配原则的 SQL,居然走索引了
兜兜转转,嘀咕了好几天,期间也和几个朋友讨论了一下
都没有结果,最后还是在 MySQL 的官方文档中找到了原因
记录下,也算是一次不错的探索。
1 | CREATE TABLE `people_new` ( |
1 | mysql> select * from people_new; |
可以看到 Using index
但是 possible_keys null 而 key 显示 index_union
1 | mysql> explain select * from people_new where bob = '2008-08-08' and first_name = 'yuan'; |
面试决定因子:70% 能力、20% 缘分、10% 行情。
软件工程师是条不归路,每天进步一点点,早日走上人生巅峰。
仓库的内容更多是抛砖引玉,提供通用与重要的技术,
真正掌握还得贴合自身需要,花时间持续深入地学习。
基础指引:https://github.com/Snailclimb/JavaGuide
进阶之路:https://github.com/doocs/advanced-java
编程书籍:https://github.com/jobbole/awesome-programming-books
算法小抄:https://labuladong.gitbook.io/algo/
大厂试题:https://github.com/0voice/interview_internal_reference
简历打磨:https://github.com/geekcompany/ResumeSample/blob/master/java.md
后续持续更新,多交流,共同成长。