Gorm加悲观锁的最新用法

因为google了“gorm for update”或者是“gorm 开启排他锁”出来的文章清一色的使用着如下用法来开启表的行/表锁

1
tx.Set("gorm:query_option", "FOR UPDATE").First(&employee, id)

但是经过测试,我加了没有作用,搜索gorm官方文档,结果用法已经变成如下

1
2
3
4
5
6
7
8
db.Clauses(clause.Locking{Strength: "UPDATE"}).Find(&users)
// SELECT * FROM `users` FOR UPDATE

db.Clauses(clause.Locking{
Strength: "SHARE",
Table: clause.Table{Name: clause.CurrentTable},
}).Find(&users)
// SELECT * FROM `users` FOR SHARE OF `users`

果然有问题先找官方文档。😂

slice使用append的小坑

今天在刷一道算法题的时候遇到了一个关于slice在使用append的小细节问题。这个算法题可以参考路径总和II
题意很简单,就是从一个二叉树中所有由根到叶子节点的路径中找到所有的满足路径和等于target的路径。

Read more

两种翻转slice的方式对比

刷题时,遇到一个需求如下:对一个slice进行翻转。
在实现的过程使用了两种方式:

  • 每次插入新元素时,使用append左插入的方式
  • 先正常append右插入,最后再对这个slice进行翻转
Read more

面试16种代码模式总结(1) - 滑动窗口

本系列文章是对Grokking the Coding Interview: Patterns for Coding Questions课程的总结,编程语言使用Go。读者如果想要更细致的了解,请自行购买课程学习。

问题背景

在处理数组和链表的时候,我们经常会需要找出满足某些条件的连续子列, 比如子列的和最大等,这个时候就可以使用滑动窗口的思想来进行解答。这里注意的是子列可以是固定大小也可以是可变大小,两种情况有相应的处理方式。

Read more