摘要:
C++: 1、vector的erase()实现,使用时注意事项,项目中遇到的bug。和remove的区别 2、vector swap()的用于修整空间?为什么不用clear(),因为clear()只是无法保证内存回收。 3、智能指针的用法shared_ptr,unique_ptr,weak_ptr 阅读全文
摘要:
前沿 学习了mysql的next-key-lock后,现在正式进入sort by的学习阶段。有时在项目里会用到sort by语句。我也听说sort by有可能会对mysql造成压力,所以要学习一下sort by的过程,从而才能深刻的了解自己的sort by语句对mysql的压力,避免线上性能低下或者 阅读全文
摘要:
最近学习了mysql的各种锁,有点晕,打算通过文章的方式捋一捋。 在学习了mvcc后,我就想,他已经很好的解决了并发读写了,但我也知道innodb提供了多种类型的锁,所以很好奇这些锁有什么用,为什么这些锁的功能是mvcc做不到的?(本文讨论的都是rr级别下的锁) 我先创建一个表,并插入几行数据,如下 阅读全文
摘要:
Mysql的隔离级别有四个 1、读未提交 2、读提交 3、可重复读 RR 4、串行读 隔离的实现 每次修改对应一个事务ID:row trx id,还对应一个undo log,因此undo log和row trx id是一一对应的。 当我们开始一个事务的时候,会生成一个事务的snap shot,将当前 阅读全文
摘要:
热key问题 问题描述:如果50万的QPS访问同一个key怎么处理? 缓存穿透 问题描述:访问不存在的key,导致每次都去DB查找,从而失去了缓存的意义,也加大了DB的压力。 造成的问题:1、失去了缓存的意义 2、访问这些key频次高的话,会加大DB压力,甚至打崩DB。 解决方案: 1、使用布隆过滤 阅读全文
摘要:
分布式系统中故障不可避免,所以为了提高可用性一定要做弹力设计,也就是容错设计。 常见的容错手段有: 隔离设计 异步通信 幂等设计 隔离设计 隔离分为两种,一种是以服务为种类来做隔离,另一种是以用户为种类来做分离。 服务维度的隔离是指不同的服务种类设计成独立的系统,比如电商平台,将用户注册登陆设计为一 阅读全文
摘要:
主从复制的原理 从库读取主库的binlog,写入从库的relay log。从库有个SQL线程在本地重放。 主从延迟产生的原因 1⃣️由于这些操作是串行,所以会和主库有一些延迟。 2⃣️另一个原因是从库的SQL线程只有一个线程,而主库则是多个SQL线程并发写的。 总结:根本原因是主库的写请求QPS太大 阅读全文
摘要:
Kafka Kafka是如何控制超时的? 如何管理大量的topic,有哪些问题? 零拷贝计数在Kafka中使用会有哪些副作用? 为何大厂大规模实践中很少用Kafka? 和其他MQ的比较:优缺点 多看源码 kafka的broker reblance是怎么做的? kafka的有broker不消费了,重启 阅读全文
摘要:
经典案例 动态规划经常用来求最优解。如何判断一个题目是否能用DP来解决,可以通过画递归树来确定是否存在重复子问题,如果存在,则可以通过存储子问题的解去优化算法,还有就是知道子问题解后,能否得到当前的解。DP最关键的是整理出重叠子问题,从而得到动态转移方程或动态转移表。 如何得到状态转移方程?可以在假 阅读全文
摘要:
TCP 1、三次握手、四次挥手 2、time_wait的两个作用,time_wait过多怎么处理 防止最后一个ack丢失 防止上一次的socket链接的包的干扰2MSL; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接 阅读全文
摘要:
数据库中的每条记录都需要一个ID,即使在分库分表后这个ID需要全局唯一性。因此,分库分表后不能使用Mysql自带的自增ID了。因为不通的库之间的ID可能是一样的。 我们以记录海量的用户信息为例,可能会想到身份证号、电话号码或者email。但是这些信息是会变的。如果用户要修改这些信息,那么ID就失效了 阅读全文
摘要:
什么是同步? 我对同步一直有个误区,以为等待的就是同步,比如http请求。事件发生只能一件一件来,一件结束才能开始下一件。通常下一件事物都处于等待状态,因为他依赖前一件事的结果,比如排队。前面的人没有把事情办好,后一个人就不能办事。对于严重以来前一件事情结果的,或者两件事情资源不能交叉的,那么设计为 阅读全文
摘要:
起源 当多个事务同时执行时,可能会产生脏读、幻读、不可重复读等。为了解决这些问题,所以有了隔离级别。 脏读:事务还没有提交,就被其他事务读到修改值; 幻读:比如你执行update t set field1=newValue where field2=xxxx时,应该是满足field2=xxxx的行都 阅读全文
摘要:
讲redolog和binlog之前,先要讲一下一条mysql语句的执行过程。 1、client的写请求到达连接器,连接器负责管理连接、验证权限; 2、然后是分析器,负责复习语法,如果这条语句有执行过,在缓存内,那么就从缓存去写; 3、缓存没有的话,那就到了优化器部分。负责优化sql读写,选择索引; 阅读全文
摘要:
先讨论单机单表的情况,所有流量都打到一个节点,查询一张表。qps达到2000一般就出现瓶颈了。所以这时候要分库分表。 分库还是分表? 如果是一个库存不下这么多数据,需要多个数据库来存储。 阅读全文
摘要:
工作中经常会用到redis来做缓存,以防止后台db挂掉。但是db数据一般都在10T以上,不可能把mysql中的数据全部放入redis中,所以一般是将一些热key放入redis中。 缓存击穿 一个请求先去redis中查询数据,如果存在则返回,不存在则去mysql中读取,然后回写到redis中,然后配上 阅读全文
摘要:
1、ZK在kafka中的作用 2、Kafka支持优先级队列么 未完待续 阅读全文
摘要:
都说Kafka的吞吐量很大,但是我一直不直到Kafka为何有如此大的吞吐量。最近在看Kafka权威指南,陆陆续续得到了如下结论: 1、分区:Kafka支持分区,这样就支持多个生产者和多个消费者同时请求,每个分区在不同的物理节点上,提高了整个broker集群的吞吐; 2、不支持针对每一条记录做持久化( 阅读全文
摘要:
1、电梯调度问题 2、Mq的时序和消息不重复问题是如何解决的? 3、redis的pipeline 4、观察者模式:设计模式成名和架构层面的应用 5、golang的GC问题以及定位、优化 6、slice的底层原理,你懂的 7、为什么要有服务发现? 8、设计一个网关实现高并发 9、除了中心式调度外还有哪 阅读全文
摘要:
前面已经介绍过golang的GC算法。要是我们的程序在运行是因为GC导致行能下降,该如何定位呢?说实话,工作中由于对go的gc问题不重视,根本没考虑过这个问题,今天特意来补补课。 阅读全文