摘要: 一、秒杀业务为什么难做 1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部, 阅读全文
posted @ 2021-12-29 11:52 Clovran-Wong 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 1.代码 Debug Xcode调试工具Instruments 2.网络方面: 网络接口调试--Postman Postman 就是一种模拟 http 请求的工具,同时也可以进行网络抓包。我们可以用来很方便的模拟 get 或者 post 或者其他方式的请求来调试接口。 网络拦截-- Charles 阅读全文
posted @ 2021-12-25 19:47 Clovran-Wong 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 1.什么是事务? 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 2.事务四大特性(ACID) 原子性(Atomicity) ·  阅读全文
posted @ 2021-12-25 18:54 Clovran-Wong 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 1.编译预处理 读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理, 伪指令主要包括以下四个方面 (1)宏定义指令,如#define Name TokenString,#undef等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量 阅读全文
posted @ 2021-12-25 17:20 Clovran-Wong 阅读(204) 评论(0) 推荐(0) 编辑
摘要: C++20 的编译器支持 适应新特性的最简单方法是试用它们。那么接下来我们就面临着这个问题:哪些编译器支持 C++20 的哪些特性?一般来说,http://cppreference.com/compiler_support_能提供在核心语言和库方面的答案。 简单来说,全新的 GCC、Clang 和 阅读全文
posted @ 2021-12-24 14:50 Clovran-Wong 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 在x86的计算机系统中,内存空间中的栈主要用于保存函数的参数,返回值,返回地址,本地变量等。一切的函数调用都要将不同的数据、地址压入或者弹出栈。因此,为了更好地理解函数的调用,我们需要先来看看栈是怎么工作的。 栈是什么? 简单来说,栈是一种LIFO形式的数据结构,所有的数据都是后进先出。这种形式的数 阅读全文
posted @ 2021-12-24 14:42 Clovran-Wong 阅读(3957) 评论(0) 推荐(3) 编辑
摘要: 加锁或消耗资源,会造成线程阻塞。 那在并发处理中,有没有不加锁的方式,来达到线程安全的? 1. 什么是CAS原子操作 在研究无锁之前,我们需要首先了解一下CAS原子操作——Compare & Swap ,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。 操 阅读全文
posted @ 2021-12-23 22:43 Clovran-Wong 阅读(800) 评论(0) 推荐(0) 编辑
摘要: 临界区(Critical section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任何时候只允许一个线程访问共享资源,如果有多个线程访问,那么当有一个线程进入后,其他试图访问共享资源的线程将会被挂起,并且等到进入临界区的线程离开,临界在被释放后,其他线程才可以抢占 阅读全文
posted @ 2021-12-22 19:24 Clovran-Wong 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 一致性Hash是一种特殊的Hash算法,由于其均衡性、持久性的映射特点,被广泛的应用于负载均衡领域。 非常简单的Hash算法Group = Key % N来实现请求的负载均衡,通过对集群数量 N 取模,得到该 key 应该查找、存储的服务器节点 问题1:当缓存服务器数量发生变化时,会引起缓存的雪崩, 阅读全文
posted @ 2021-12-21 18:11 Clovran-Wong 阅读(73) 评论(0) 推荐(0) 编辑
摘要: BFS 典型搜索树示意图 // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { std::queue<Node> q; // 核心数据结构 std::set<Node> visited; // 避免走回头路 q.push 阅读全文
posted @ 2021-12-21 01:38 Clovran-Wong 阅读(29) 评论(0) 推荐(0) 编辑