Arki 的每日 BUG 观察
41 subscribers
78 photos
1 video
3 files
228 links
分享每天写的bug
以前端为主
Download Telegram
init commit
Channel photo updated
分页
前端请求的分页参数一般由 1 开始
而后端的数据库分页往往是从 0 开始计数
这就导致后端处理分页请求的时候必须对前端的请求 -1 才能查到正确的数据。
这个 bug 坑在难排查,不管
打断点 还是 打印 sql 预编译语句 都一切正常,如果没有踩过必须花很久才能找到原因。
正确的代码(java jpa 风格)
java
page = userRepo.findUser(uid, new PageRequest(number - 1, size));
分享一个 0 和 1 翻转的小技巧
num ^= 1
1 ^ 1 = 0
0 ^ 1 = 1
顺便提一下我在知道这个技巧前都是这么干的 num = (num + 1) % 2 (笨死了
#python
list.sort() 是原地排序,且永远返回 None
python
# wrong
listA = list(A).sort() # listA == None

# right
listA = list(A)
listA.sort()

# or
listA = sorted(list(A))
#备忘
向上取整 ceil
向下取整 floor
四舍五入 round
#css
在div中包裹图片,会发现img下面有几像素的空隙
原因:
默认 img 的 displayinline
默认对齐方式 vertical-alignbaseline 基线对齐,并不是与div的真实底部对齐,因此留有空隙
解决方式:
- 修改 img display img { display: block; }
- 修改 img 对齐方式为 bottom/middle/top img { vertical-align: bottom; }
- 修改 div div { line-height: 0; }div { font-size: 0; }
#js
!!new Boolean(false) == true
#python #小技巧
使用内建函数 zip 将多个数组打成元组
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
list(zipped)
>>> [(1, 4), (2, 5), (3, 6)]
# 数据库死锁
#数据库
本篇讨论的不是程序造成的死锁,而是因意外(强行中断程序等)导致的数据表被锁住

## 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 的默认排序是按照字母序递增排序,即使数组中全都是数字
[2, 10, 1].sort() // [1, 10, 2]
// 按数字大小排序
[2, 10, 1].sort((x, y) => x - y) // [1, 2, 10]
#js #tips
# js 数组去重
js 数组本身没有带去重的函数
可以用一个简单的函数实现
const array = [1, 1, 2]
// 多次使用
Array.prototype.unique = function() {
return this.filter( (value, index, self) => {
return self.indexOf(value) === index
})
}
array.unique()
// 单次使用
array.filter((v, i, arr) => arr.indexOf(v) === i)
#python #tips
# python list 去重
py 数组同样没有自带去重函数,但它的去重更简单
#  先将数组转为无重复元素的 set 再转回 list
list(set(array)) # uniq