数据库的事务 R
10月 22, 2021
请思考一个我在工作中遇到的一个场景:假设用户参加了一个优惠活动,买了一个30 天的会员卡,然后活动又送了一个 7 天的体验卡,最终我要交付给用户 37 天的会员权益时间。如果这两笔订单同时请求系统进行交付,那如何能够一直正确的交付 37天,并正确计算各订单的开始结束时间?(公司 MySQL 的隔离级别是 RC) 进阶问题:用户在下单之前已经是生效的会员了,又该如何解决? 此时我们必须要借助事务才能 …
数据库的锁 R
10月 16, 2021
数据库里的锁根据范围和维度都有不同的实现和叫法,如果我这样列出来你可能会很焦虑:GAP 锁,记录锁,显式锁定,表级锁,行级锁,页级锁,咨询锁,间隙锁,共享锁,排他锁,互斥锁,自旋锁,读写锁,悲观锁,乐观锁,因为当初我也是这种感觉,现在我重新整理一遍,希望对你也有帮助。 锁是一种并发控制手段,相对的还有其他的并发控制手段比如:MVCC(多版本并发控制),这个以后再说。 悲观锁(Pessimistic …
交替打印 1-100 之间的奇数和偶数
10月 2, 2021
题目:两个 goroutine 交替打印1-100之间的奇数和偶数。 方法一# 利用非缓冲 channel 的阻塞。 package main import ( "fmt" "sync" ) func main() { ch := make(chan struct{}) var wg sync.WaitGroup wg.Add(2) go func() { …
推荐下双拼输入法
9月 30, 2021
问题# 最近打字聊天的工作比较多,发现我在拼类似【能不能】这种词语的时候经常打错成类似 negnbuneng 或者 nengnbuneng(见下图)这种有需要在两个字母之间来回切换的,还有就是 ang、eng、ong、iong 、uang这种拼音,非常不值得敲那么多遍。 那么我要解决的就是这种问题,减少每个字敲键盘的次数,同时也并不需要立刻全部采用双拼,只要像这种通过 ng 就能打印出【能】这个字 …
JS 加号运算符的运用
9月 18, 2021
一元运算符# 语法: + Expression 说明: + 号运算符作为一元运算符时,Expression将进行 ToNumber 操作。 argument类型 返回值 Undefined return NaN Null return +0 Boolean true return 1; false return 0; Number return value String 若字符串为纯数字时返回转换 …
JS 非空判断
9月 11, 2021
在 js 中,有一个富有哲学意味的问题:「什么是空」?先看下面代码: function main(a) { if (!a) { console.log("空"); } else { console.log("非空"); } } main(0); main(null); main(); main("") main(undefined) …
跨域相关问题 R
8月 21, 2021
本文先从 CSRF 攻击的介绍开始,说明了跨域存在的问题,然后引入浏览器同源策略的概念,明白了要限制跨域的原因后,再给出了标准的跨域请求方案:CORS,所以总体上就三部分:CSRF、同源策略、CORS,文章有点长但不用慌,按顺序看就可以了。 跨站请求伪造(CSRF)# CSRF 跨站请求伪造(Cross-site request forgery, 通常缩写为 CSRF 或 XSRF),是一种挟制用 …
了解下 MobX 概念
7月 19, 2021
基本概念# observable 函数 定义状态值 action 函数 用于修改状态值 接受一个函数,返回一个签名相同的函数,提供触发时调用。 derivations 派生,有两种:autorun 和 computed reactions - autorun() 接受一个函数 状态值发生改变后要执行的响应操作。 computed value - computed() 接受一个函数,返回计算值对象。 …
了解下 Redux 概念
6月 24, 2021
Redux 用来进行复杂的状态管理,Redux 的思想继承自 Flux,并进行了更加简洁的抽象。 store store.dispatch(action) 是 View 发出 Action 的唯一方法,接受一个 Action 对象作为参数,将它发送出去。 store 允许使用 store.subscribe() 方法设置监听函数,一旦 State 发生变化,就自动执行这个函数。subscribe …
浏览器中的 HTTP 缓存使用策略
6月 12, 2021
浏览器使用缓存数据有非常多的好处,很多情况下静态资源会比 js 代码更大,同时修改的频率又非常低,通过对静态资源使用缓存,可以有效减少重复请求,从而节省网络带宽、降低服务器的请求压力。 浏览器的缓存数据一般指的是通过 Get 方法向服务器发送请求获得的数据,其他方法不会缓存。浏览器如何使用这些缓存数据,有不一样的策略,一方面服务器指定了这些策略,同时浏览器在默认情况下也会有自己的做法,下面就开始详 …