Forwarded from Arki 的每日 BUG 观察
分页
前端请求的分页参数一般由 1 开始
而后端的数据库分页往往是从 0 开始计数
这就导致后端处理分页请求的时候必须对前端的请求 -1 才能查到正确的数据。
这个 bug 坑在难排查,不管
正确的代码(java jpa 风格)
前端请求的分页参数一般由 1 开始
而后端的数据库分页往往是从 0 开始计数
这就导致后端处理分页请求的时候必须对前端的请求 -1 才能查到正确的数据。
这个 bug 坑在难排查,不管
打断点 还是 打印 sql 预编译语句 都一切正常,如果没有踩过必须花很久才能找到原因。正确的代码(java jpa 风格)
java
page = userRepo.findUser(uid, new PageRequest(number - 1, size));
分享一个 0 和 1 翻转的小技巧
1 ^ 1 = 0
0 ^ 1 = 1
顺便提一下我在知道这个技巧前都是这么干的
num ^= 11 ^ 1 = 0
0 ^ 1 = 1
顺便提一下我在知道这个技巧前都是这么干的
num = (num + 1) % 2 (笨死了#python
list.sort() 是原地排序,且永远返回 Nonepython
# wrong
listA = list(A).sort() # listA == None
# right
listA = list(A)
listA.sort()
# or
listA = sorted(list(A))
#css
在div中包裹图片,会发现img下面有几像素的空隙
原因:
默认 img 的
解决方式:
- 修改 img display
在div中包裹图片,会发现img下面有几像素的空隙
原因:
默认 img 的
display 为 inline
默认对齐方式 vertical-align 为 baseline 基线对齐,并不是与div的真实底部对齐,因此留有空隙解决方式:
- 修改 img display
img { display: block; }
- 修改 img 对齐方式为 bottom/middle/top img { vertical-align: bottom; }
- 修改 div div { line-height: 0; } 或 div { font-size: 0; }# 数据库死锁
#数据库
本篇讨论的不是程序造成的死锁,而是因意外(强行中断程序等)导致的数据表被锁住
## BUG定位
对异常表的任何增删操作 java 报异常
并且尝试对异常表表执行简单增删操作时操时总是提示
## 解决方法
- kill 阻塞的连接 使用
- kill 所有该数据库连接
- 重启数据库(简单粗暴)
#数据库
本篇讨论的不是程序造成的死锁,而是因意外(强行中断程序等)导致的数据表被锁住
## BUG定位
对异常表的任何增删操作 java 报异常
org.hibernate.exception.LockAcquisitionException 并且尝试对异常表表执行简单增删操作时操时总是提示
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
说明数据库可能被某个未提交的session阻塞了## 解决方法
- kill 阻塞的连接 使用
show processlist; 找到阻塞的连接,然后使用 kill $ID 干掉- kill 所有该数据库连接
sql然后运行生成的语句
-- 查询数据库的所有的进程并拼接kill语句
SELECT
concat( 'kill ', id, ';' )
FROM
information_schema.PROCESSLIST t
WHERE
t.db = '$LOCKED_DB';
- 重启数据库(简单粗暴)
#js
js 的默认排序是按照字母序递增排序,即使数组中全都是数字
js 的默认排序是按照字母序递增排序,即使数组中全都是数字
[2, 10, 1].sort() // [1, 10, 2]
// 按数字大小排序
[2, 10, 1].sort((x, y) => x - y) // [1, 2, 10]
#js
js 函数默认参数允许在没有值或 undefined 被传入时使用默认形参
js 函数默认参数允许在没有值或 undefined 被传入时使用默认形参
const test = (a=1) => a
test() // 1
test(null) // null
test(undefined) // 1
