ClassNotFoundException & NoClassDefFoundError
两个异常都和找不到类有关,但引发这两个异常的原因有所不同。
ClassNotFoundException
是在我们主动使用类名加载类时找不到对应类文件抛出的异常,这是一个Exception
,需要我们显式捕获处理。参考ClassNotFoundException
的JavaDoc:Thrown when an application tries to load in a class through its string name using:
- The forName method in class Class.
- The findSystemClass method in class ClassLoader .
- The loadClass method in class ClassLoader.
but no definition for the class with the specified name could be found.
正则表达式使用分享
管理成就生活 读书笔记
概述
本书关注的焦点:管理效能
- 管理:将资源转化为结果并创造价值
- 效能Effective:做正确的事
- vs 效率Efficiency:正确的做事
为什么需要管理
- 驾驭复杂性
- 技术变革和社会变迁带来复杂性的爆炸式增长
- 复杂性科学
- 系统学、控制论、仿生学
- 复杂性的两面性,危险与机遇
查看JAVA应用内存占用
物理内存占用
Committed & Reserved & RSS
Committed
Address ranges that have been mapped with something other than
PROT_NONE
. They may or may not be backed by physical or swap due to lazy allocation and paging.
已分配的内存,但不一定占用物理内存或swap
Reserved
The total address range that has been pre-mapped via
mmap
for a particular memory pool.
和Committed
的区别在于Reserved
包含PROT_NONE
(一定不占用物理内存)的映射
RSS
Resident set size, the non-swapped physical memory that a task has used (in kiloBytes)
实际占用的物理内存(不包括已Committed但未分配的,以及swap-out的)
参考:RSS != JVM committed
|
|
2019新西兰南岛自驾行程分享
MySQL锁机制分析
两种读取方式
快照读(snapshot read)
MVCC实现,无锁,高性能但数据不实时,事务中首次
select
时确定快照版本select ...
当前读(current read)
加锁实现:next-key
12345select ... lock in share modeselect ... for updateinsertupdatedelete
锁机制
2PL:Two-Phase Locking
锁操作分为两个阶段:加锁阶段与解锁阶段,并且保证加锁阶段与解锁阶段不相交
锁模式
- Shared(S) and Exclusive(X) Locks
- select … lock in share mode / lock table … read 加S锁
- select … for update / insert update delete / lock table … write 加X锁
- Intention Locks
- 表级锁,IS/IX锁表明事务有意图获取表中某一行的S或X锁
- 规则:事务在获取行锁之前必须获取到相同或更高级别的表级意向锁
- 用途:加表级锁时无需遍历全表查找是否存在行级锁
- 意向锁兼容性(用于判断是否允许加锁,以下锁类型均为表级锁)
Code Review 约定
- 统一的代码格式
- 使用统一的配置文件,提交前进行格式化(不属于review内容)
- 编程风格,可读性和可维护性
- 变量命名是否做到简洁、清晰无歧义(clear,precise)
- 方法是否进行了合理的抽象,避免为了复用而复用(方法vs代码块)
- 方法抽象层次是否合理(同级方法都在同一个抽象层次上)
- 方法是否只做了一件事,是否和命名相符,是否有副作用
- 是否遵循OOP原则(SOLID),类是否内聚,是否使用了合适的设计模式解耦
- 是否有其他坏味道(参考重构、Clean Code、编写可读代码的艺术)
单元测试规范
基本原则
- 测试任何可能失败的事物。测试主执行路径很好,而且很需要做;但测试异常处理可能更重要。
- 测试先行。在写任何代码之前,必须先写一个失败的测试。
- 为还没有实现的测试代码抛出一个异常。这就避免了该测试通过,而且会提醒你必须实现其代码。
- 不应该依赖于任何不可控的外部服务,如xingng,使用mock替代
- 不应该依赖于外部的数据(即不要依赖数据库中现有数据等,以保证数据库变更等不会影响到测试结果),可以在单元测试中自己准备数据
- 例如班车刷卡:依赖于班车数据,junit中输入某个班车卡号,单数据库中不存在,导致系统报错
- 这里表现出两点问题:
- 程序不完善,卡号不存在报null point
- 依赖于外部已存在的数据,预期数据不存在导致测试失败
捷克无人机法规
概述
- 非商业飞行不需要许可
- 无人机重量应小于20kg,其中0.91kg以上需要有failsafe机制(例如失控返航)
- 最高飞行高度100m(也有说300m的,安全起见取最低的说法)
- 无人机需要时刻保持在视野内,不允许超视距/仅依赖GPS飞行,玩FPV需要另一个人帮助观察
- 与云层保持300m垂直,1500m水平距离
- 机场5500m范围内禁飞,其他禁飞区见AisView