Blog

背景 近期线上接口频繁超时, 通过日志收集工具发现, 在请求量没有大幅增加时这个接口频繁超时. 定位问题 我首先去确认了这些请求的请求内容是不是特别大. 果然, 好家伙一次请求了1000多个资源, 这不慢才怪. 但是即使是请求了这么多资源也是业务的正常需求, 需要支持! 咋办? 优化呗! 使用Arthas定位耗时节点 其实我很希望能在线上环境运行Arthas, 但是由于权限不足,...

年初去 ThoughtWorks 参加道长的镀金玫瑰重构实践里面接触了一个有趣的重构工具–ApprovalTests 不了解这个工具的可以看一下这几个视频: 镶金玫瑰-重构-Part 1_3 -建立安全网 镶金玫瑰-重构-Part 2_3- 使用“条件语句上移对逻辑进行重构 镶金玫瑰-重构-Part 3_3 - 使用“多态”代替“条件语句” 一句话说明它的好处: 可在没...

俺滴面经

真心希望这种船货崇拜的行业现行尽快改变. 现实就是这样, 无奈于现状, 想进大厂、高薪资就需要走这条路. Java JVM JVM 内存区划分 堆: 线程共享的, 存储所有的实例对象, 也可能存储逃逸分析后的局部变量 方法区: 线程共享的, 存储类信息、常量、静态变量 虚拟机栈: 线程私有的, 每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的J...

负面清单

查库之前的IN参数要判断空, 轻则抛异常, 重则全表查询 Mysql Server 和 connection 必须有一处指定时区, 否则更新时间类型时时间会不正确 消费binlog时DDL只有库名,没有表名, spilt后单取表名会数组越界 JDBC批量更新前要对唯一键/主键排好序, 否则不同事务中并发更新会导致死锁 日志要配置roll策略, 防止日志突增把机器磁盘打满...

FizzBuzz - 越简单的问题越容易出问题

老板: 嘿! 我是你的老板, 我非常有钱, 我要雇你写一段 FizzBuzz 需求List 你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有200名学生在上课。游戏的规则是: 1.让所有学生拍成一队,然后按顺序报数。 2.学生报数时,如果所报数字是3的倍数,那么不能说该数字,而要说Fizz;如果所报数字是5的倍数,那么要说Buzz。 澄清需求...

mvn -test 导致事务死锁

起因 写完测试类之后, Junit 跑通了全部的测试类, 在执行 mvn test 的时候执行了有10分钟, 然后有几个测试类失败了, 都是由于事务超时关闭, 我就觉得很奇怪, 为什么 Junit 跑没问题, 而用 Maven 跑就会出问题呢? 报错信息 Error flushing statements. Cause: org.apache.ibatis.executor...

OOM的排查与反思

接到上游系统报警, 商品服务不可用了. 为什么服务不可用 通过日志排查发现应用抛OOM异常了, 到监控页面进一步确认后证实确实是抛OOM了 线上一共有两台机器, 一台机器OOM了, 一台机器内存完全正常 为了不影响上游服务, 组长重启的OOM的那台机器 为什么OOM 通过日志聚合并没有发现在某个时间段有大量请求 希望能从dump文件中看看有什么问题, 于是开始下载d...

翻译-实践测试金字塔

原文链接: https://martinfowler.com/articles/practical-test-pyramid.html 实践测试金字塔 “测试金字塔”是一个隐喻,它告诉我们将软件测试分到不同粒度的组中。 它还给出了在每个组中应该写多少测试。 尽管“测试金字塔”的概念已经存在了一段时间,但团队仍在努力将其正确实施。本文回顾了“测试金字塔”的原始概念,并展示了如何将其付...

单例模式引出的知识点

WHY 对于频繁使用的对象,可以省略创建对象所花费的时间, 这对于那些重量级对象而言,是非常可观的一笔系统开销; 由于 new 操作的次数减少,因而对系统内存的使用频率也会降低, 这将减轻 GC 压力,缩短 GC 停顿时间。 HOW Eager Singleton public class Singleton { private st...

HTTPS流程

图片来自 ImportNew 1. ClientHello TCP建立连接之后, TLS握手的第一步由客户端发起, 发送ClientHello的消息到服务器. ClientHello消息包含: 客户端支持的SSL/TLS版本 客户端支持的加密套件(Cipher Suites) session id(如果有的值的话, 服务器端会复用对应的握手信息, 避免短时间内重复握手) ...