Arki 的每日 BUG 观察
41 subscribers
78 photos
1 video
3 files
228 links
分享每天写的bug
以前端为主
Download Telegram
分享一个 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
#js
js 函数默认参数允许在没有值或 undefined 被传入时使用默认形参
const test =  (a=1) => a
test() // 1
test(null) // null
test(undefined) // 1
#tips #js
// map 返回默认值
const map = new Map ([
[1, 'foo'], // default
[2, 'bar'],
[3, 'baz'],
]);

const mapProxy = new Proxy(map, {
get: function(target, id) {
// Cast id to number:
id = +id;
return target.has(id) ? target.get(id) : target.get(1);
},
});
console.log( mapProxy[3] ); // baz
console.log( mapProxy[10] ); // foo

references:https://stackoverflow.com/questions/36947150/how-to-return-a-default-value-from-a-map
#tips #js
// 快速创建多维数组
const arr = new Array(i).fill(0).map(a => new Array(j).fill(0))
#git
git 默认对文件名大小写不敏感,因此在项目中修改文件名大小写时务必谨慎(已经重命名了的可能需要删除后重新添加
// 配置git对大小写敏感
git config core.ignorecase false
#好文推荐
wjndante的“概率与随机”三部曲之其一——如何用计算机生成“真随机”
http://bbs.ngacn.cc/read.php?tid=8477978&_fp=6
Forwarded from 荔枝木
🤣 JavaScript 的圣三位一体