Month August 2025

系统设计总结

系统设计的题目,感觉不用做非常多,但要善于总结,相似的问题可以总结成一类,用一个模板来解答,然后加一些小细节加以区分。 如何将一个信息同时传播给多个关注该事务的client 定时任务 Event Sourcing Event sourcing就是说我们不存最后的状态,而是把每一个action都存起来,然后需要结果的话,我们得到所有的action,然后derive出最后的状态是什么。那什么时候需要event sourcing呢?跟钱打交道的时候,比如说Auction system需要我们prove为什么是这个人赢得了最后的bid等。另一个就是,如果很多人都在竞拍一个产品,如果我们只存最终结果(在这种情况下是update Auction表里的winner),在高并发的情况下会一直修改同一个数据,这要比往bid table里不停append给bid table的的性能要差很多。 Lease机制 Lease机制是facebook设计memcached的时候,为了解决数据一致性的问题解决的,非常适合高并发场景。那么是如何工作的呢?– 同一个cache key,memcached维护一个当前有效的lease token,不管多少请求都拿到这个token– server A和server B都来读取数据,拿到相同token,然后server A先过来更新– Memcached对比了token,有效,就把对应的值改掉,lease token也发生了变化– server B再过来更新的时候因为token invalid,所以更新被拒绝 确保任务不会被重复执行 这是经典的分布式系统并发控制问题。例如,a cluster of worker nodes会不停的扫描数据库来发现下一个要做的task。如何保证node A take该task之后,别的node不会重复去执行呢? 这是悲观锁方案 这是乐观锁方案,用的CAS, 基于version。也可以基于时间戳,设一个last_modified column。 两个方案各有利弊。如果是高冲突环境下,悲观锁比较好,skip locked可以避免无效等待,每次查询基本都可以获得结果,不需要不停的retry。低冲突环境下,乐观锁比较好,没有锁开销,并发读取效率比较高。…

JavaScript

JS特性 JavaScript代码能放在哪里? 也可以将javascript代码写入一个外部的js文件当中,然后通过script标签进行导入。写入外部文件的好处是不同的html页面都可以引用它,也可以利用到浏览器的缓存机制。是比较推荐的一种方式。 注意:script标签一旦用于引入外部文件,就不能在标签体里面写js代码了,即使写了浏览器也会忽略的。如果头铁,非得写,那就在新建一个script标签。 注释 注释有单行注释或者多行注释 数据类型 六种基本的数据类型: 前五种为基本数据类型,而Object属于引用数据类型。 判断一个变量的类型,可以用typeof来检查。 Number.MAX_VALUE -> JS数字的最大值,超过该值就会显示Infinity。NaN -> Not a number,如果用typeof来检查,还是会显示为number。Number.MIN_VALUE -> 0以上的最小的数字,表示正的最小数。null专门用来表示一个为空的对象。如果用typeof检查,会返回“object”。当申明一个变量但不给变量赋值时就是undefined,用typeof检查就是”undefined”。 强制类型转换 将其他数据类型转换为String 将其他数据类型转换为Number 逻辑运算符 取反 ! 用!对非布尔值进行取反操作,则先将该值转换为布尔值,再进行取反操作。 与运算 对非布尔值进行运算的时候,会将其转换为布尔值,然后再运算,并返回原值 或运算 如果第一个值为true,则直接返回第一个值,如果第一个值为false,则返回第二个值 全等/不全等 ===和==类似,但不同的是全等不会做自动类型转换,如果类型不同,直接返回false。不全等同理。 流程控制语句 if…else if…else if…else 该语句中,只有一个代码块会被执行,一旦代码块执行了,则直接结束语句。 switch…case… 在执行时会依次将case后的表达式的值和switch后的条件表达式的值进行全等比较,如果比较结果为true,则从当前case处开始执行代码。当前case后的所有代码都会执行,因此我们可以在case的后面跟一个break关键字来跳出switch语句。如果比较结果为false,则继续向下比较。如果所有的比较结果都为false,则执行default里的语句。 对象…

Data Structure

TreeMap Heap PriorityQueue Insert() log(n) log(n) log(n) Delete() log(n) log(n) O(n) Pop() log(n) log(n) log(n) Find() log(n) log(n) Not support Modify() log(n) log(n) Not support Min / Max log(n) O(1) O(1) Upper / Lower log(n) Not support Not support Lower…

动态规划

什么题适合动态规划? 什么题不适合动态规划? 动规四要素 顺带回忆一下递归三要素 动态规划只能记录一种最优方案 练习题目: