ARTS挑战打卡第四周

 坚持就是胜利

Algorithm-一周至少一道算法题

Review-阅读并点评至少一篇英文技术文章

Tip-学习至少一个技术技巧,总结和归纳在日常工作中所遇到的知识点

Share-分享一篇有观点和思考的技术文章

01-Algorthm

———————

leetcode-349: https://leetcode.com/problems/interp-of-two-arrays/

思路:空间换时间

使用Map/Set保存第一个数组的数字,遍历第二个数组,如果数字在Map存在,说明是交集,加入返回集合

leetcode-350: https://leetcode.com/problems/interp-of-two-arrays-ii/

思路:与第一题类似,但是这里重复的数也要算上。排序后,维护两个下标,同时遍历两个数组,如果相等,加入返回集合,否则,移动较小值对应的下标

02-Review

——————

https://programmingisterrible.com/post/176657481103/repeat-yourself-do-more-than-one-thing-and

DRY-Don't Repeat Yourself,不仅仅是不写重复的代码块,更重要的是不写重复功能/职责的代码块。要反复地去优化代码,抽象代码块。

代码模块化不仅仅是简单的按功能将一个大的代码拆分为几个小函数,或将相同的功能分布在一起,而是研究如何使方法保持分离并限制整个代码库间的协调。即知道哪些代码块需要互相交互,哪些需要共享资源,哪些需要共同承担职责,更重要的是,存在哪些外部约束。

关于重写

一项重写工作如果三个月了都没有下文,大概率就是永远都不会去做了。

重写代码一直都是一个很难的话题,因为业务需要快速发展,代码会越来越多,想优化的东西又太多,但是却想这些优化快速完成,不要重写代码的含义应该是“不要追求快速的重写”。

03-Tip

——————

MySQL的四种事务隔离级别:

  • RU(Read UnCommitted):读未提交,允许出现脏读,幻读

  • RC(Read Committed):读提交,不允许脏读,只读取已经提交事务的数据,多次读取会出现不一样的结果,称为不可重复读。

  • RR(Repeatable Read):可重复读,同样的select,多次读取的结果一样,可能会出现幻读

  • SERIALIZABLE:序列化,读操作完全串行化,加了隐形的读共享锁,避免了脏读、不可重复读和幻读的问题

隔离级别的问题

隔离级别脏读不可重复读幻读
读未提交可以出现可以出现可以出现
读提交不允许出现可以出现可以出现
可重复读不允许出现不允许出现可以出现
序列化不允许出现不允许出现不允许出现

MySQL的锁类型:

  • 共享锁(S锁):允许事务读取一行数据

  • 独占锁(X锁):允许事务删除或更新一行数据

S 锁和 S 锁是兼容的,X 锁和其它锁都不兼容。

为了实现多粒度的锁机制,InnoDB 还有两种内部使用的意向锁,由 InnoDB 自动添加,且都是表级别的锁。

意向共享锁(IS):事务即将给表中的各个行设置共享锁,事务给数据行加 S 锁前必须获得该表的 IS 锁。

意向排他锁(IX):事务即将给表中的各个行设置排他锁,事务给数据行加 X 锁前必须获得该表 IX 锁。

InnoDB 存储引擎使用三种行锁的算法用来满足相关事务隔离级别的要求。

Record Locks

该锁为索引记录上的锁,如果表中没有定义索引,InnoDB 会默认为该表创建一个隐藏的聚簇索引,并使用该索引锁定记录。

Gap Locks

该锁会锁定一个范围,但是不包括记录本身。可以通过修改隔离级别为 READ COMMITTED 或者配置 innodb_locks_unsafe_for_binlog 参数为 ON。

Next-key Locks

该锁就是 Record Locks 和 Gap Locks 的组合,即锁定一个范围并且锁定该记录本身。InnoDB 使用 Next-key Locks 解决幻读问题。

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。在MySQL中,就是两个或两个以上的事务在互相等待。

04-Share

—————

Blog-为什么需要分布式系统(见推送第二篇文章)

参考链接

Innodb中的事务隔离级别和锁的关系

https://tech.meituan.com/2014/08/20/innodb-lock.html

MySQL 事务隔离级别和锁

https://www.ibm.com/developerworks/cn/opensource/os-mysql-transaction-isolation-levels-and-locks/index.html

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,顺手点个在看吧,谢谢

更多精彩内容,请关注个人公众号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值