周报 #五月 - Week 19, 2023

前言

本篇是对 2023-05-08 到 2023-05-14 这周生活的记录与思考。

生活

不背单词新一轮组队打卡开始了，继续背单词。

有位很厉害、来公司很久了的同事被优化了，目前算是正式开始了，看看我能挺到第几轮吧。

本周食谱

早餐

燕麦酸奶杯

一层酸奶，一层燕麦，提前做好放冰箱里面密封冷藏一晚上，第二天早上直接带到公司吃。又方便又好吃。

贝果 + 干酪

贝果切半，密封袋冷冻保存。空气炸锅 180 度 5 分钟，涂抹干酪，可以再加个煎鸡蛋。

煎鸡排 + 煎鸡蛋

晚上提前用奥尔良腌料腌制鸡腿排，保鲜膜封上放冰箱。早上用黄油煎至两面表层熟了后，加水盖上锅盖闷几分钟。

修改 xLog 全局字体设置
Copy
@import url("https://cdnjs.cloudflare.com/ajax/libs/lxgw-wenkai-screen-webfont/1.7.0/lxgwwenkaiscreenr.css");

:root {
--font-fans: "LXGW WenKai Screen R";
}

手欠把扫粉刷卷到磨豆机磨盘里面了，结果拆磨盘的时候又把调节杆弄断了，难受...

学习

英语

Attend 和 attempt 的区别

Attend 意为 “照顾、照料”, 也含有 “出席” 的意思。当表示 “尽力” 完成某事时，它侧重于以关注和努力的心态对待该事情。

Attempt 意为 “尝试、试图”, 表示为达到某目标或完成某事而采取的行动。它强调实际采取的行动和努力。

总结如下：

Attend 强调以积极主动的心态对待某事。

Attempt 强调实际采取的行动和努力。

Attend 比较静态，Attempt 则比较动态。

两者在某些情况下可以互换，但 attend 着眼于心态，attempt 着眼于行为。

Hit the ground running

固定搭配，意思是 “立即开始迅速行动”。

表示立即进入一个新环境 (新的工作岗位、项目等) 后迅速开始行动，而不会耽搁或推迟。它表示一种积极主动和行动迅速的心态。

Fall prey to sth

通常描述一方由于 Comparatively 弱小或不注意而受到更强大一方的侵袭、利用或影响的状态。

Wishful thinking

意为一厢情愿的想法，指一种不切实际的或者过于乐观的思维方式。

Multiplication table

乘法表。

Stay put

意思是留在原来所在的位置，不离开那里或动身到其他地方。它表示静止不动或不采取行动。用于建议或告知某人继续呆在目前的位置，暂时不要离开或前往其他地点。

这通常是为了安全考虑，防止混乱或在等待进一步指示的情况下。它也可用于表示由于各种原因如工作需要而无法离开当前位置。

技术

MySQL

索引

数据问题需要修改数据库，select 查出来有 36 条数据，相同条件用 update 语句却影响了全表 100 多万行数据。联系 DBA 新增索引后，update 语句正常执行。

Copy
UPDATE `库`.`表` SET `字段a` = 'name' WHERE `字段b` = 'message' AND `字段a` = 'default'

-- 新增索引
-- idx_a_b `字段a`, `字段b` NORMAL BTREE

原因

https://xiaolincoding.com/mysql/lock/update_index.html

InnoDB 存储引擎的默认事务隔离级别是「可重复读」，但是在这个隔离级别下，在多个事务并发的时候，会出现幻读的问题，所谓的幻读是指在同一事务下，连续执行两次同样的查询语句，第二次的查询语句可能会返回之前不存在的行。

因此 InnoDB 存储引擎自己实现了行锁，通过 next-key 锁（记录锁和间隙锁的组合）来锁住记录本身和记录之间的 “间隙”，防止其他事务在这个记录之间插入新的记录，从而避免了幻读现象。

当我们执行 update 语句时，实际上是会对记录加独占锁（X 锁）的，如果其他事务对持有独占锁的记录进行修改时是会被阻塞的。另外，这个锁并不是执行完 update 语句就会释放的，而是会等事务结束时才会释放。

在 update 语句的 where 条件没有使用索引，就会全表扫描，于是就会对所有记录加上 next-key 锁（记录锁 + 间隙锁），相当于把整个表锁住了。

总结

Update 语句必须满足如下条件之一才能执行成功：

使用 where，并且 where 条件中必须有索引列；

使用 limit；

同时使用 where 和 limit，此时 where 条件中可以没有索引列；

Delete 语句必须满足如下条件之一才能执行成功：

使用 where，并且 where 条件中必须有索引列；

同时使用 where 和 limit，此时 where 条件中可以没有索引列；

如果 where 条件带上了索引列，但是优化器最终扫描选择的是全表，而不是索引的话，我们可以使用 force index([index_name]) 可以告诉优化器使用哪个索引，以此避免有几率锁全表带来的隐患。

收藏

tldr Simplified and community-driven man pages.

Vim Adventures 在线学习使用 Vim 的小游戏。