获得徽章 1
- #青训营笔记创作活动#
1月29日 打卡day50
Hertz 是一个超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点。Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景中,相较于 go net,Hertz 在 QPS、时延上均具有一定优势。在内部实践中,某些典型服务,如框架占比较高的服务、网关等服务,迁移 Hertz 后相比 Gin 框架,资源使用显著减少,CPU 使用率随流量大小降低 30%—60% 。反向代理在计算机网络中是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如 Web 服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的 IP 地址,而不知道在代理服务器后面的服务器集群的存在。展开评论点赞 - #青训营笔记创作活动#
1月28日 打卡day49
意向锁则是InnoDB中为了支持多粒度的锁乐观锁更加适用于读大于写的业务场景,频繁写库的业务则并不适合加乐观锁。评论点赞 - #青训营笔记创作活动#
1月27日 打卡day48
为全局请求添加 TraceId ,看日志再也不懵逼如果想快速的定位到问题,就要实现对日志的快速搜索ELK 是 ES、Logstash、Kibana 的总称,其核心功能就是实现数据的收集、搜索、可视化。展开评论点赞 - #青训营笔记创作活动#
1月25日 打卡day47
如何防止重放攻击?原理其实很简单,就是让合法的请求,只能被执行一次,保证每次请求的唯一性时间戳+随机数评论点赞 - #青训营笔记创作活动#
1月24日 打卡day46
死锁检测算法 - wait-for graph当MySQL发现了这种等待闭环时,就会强制介入,回滚结束其中一个事务,强制打破该闭环,从而解除死锁问题。会选择Undo量最小的事务回滚wait-for graph算法被启用后,会要求MySQL收集两个信息:锁的信息链表:目前持有每个锁的事务是谁。事务等待链表:阻塞的事务要等待的锁是谁。在业务允许的情况下,尽量缩短一个事务持有锁的时间、减小锁的粒度以及锁的数量。一般的锁机制都是基于持有标识+等待队列实现的,而MySQL则是略微有些不一样。写操作加排他锁,读操作不加锁!RU级别解决脏写问题RU级别 一个事务中,不允许读另一个事务还未提交的数据写操作加排他锁,读操作加共享锁《MVCC机制》,在每次select查询数据时,都会生成一个ReadView快照,然后依据这个快照去选择一个可读的数据版本。对于RC级别的底层实现,对于写操作会加排他锁,而读操作会使用MVCC机制。RC级别中 查询时,对目标数据加上临键锁,即读操作执行时,不允许其他事务改动数据。一个事务中只生成一次ReadView快照。写操作加排他锁,对读操作依旧采用MVCC机制,但RR级别中,一个事务中只有首次select会生成ReadView快照。Serializable级别 所有写操作加临键锁(具备互斥特性),所有读操作加共享锁。因此在Serializable级别中,只有读-读场景可以并发执行。RU级别:读操作不加锁,写操作加排他锁。RC级别:读操作使用MVCC机制,每次SELECT生成快照,写操作加排他锁。RR级别:读操作使用MVCC机制,首次SELECT生成快照,写操作加临键锁。序列化级别:读操作加共享锁,写操作加临键锁。展开评论点赞 - #青训营笔记创作活动#
1月23日 打卡day45
cat基础命令 展示这个文件里面的所有内容。tail基础命令 动态追加查看日志文件的一个命令。不用动态更新查看日志就可以使用cat查询文件内有没有该内容这个可以、如果需要动态的看新日志进入到文件就使用tail监听着文件的进入。展开评论点赞 - #青训营笔记创作活动#
1月22日 打卡day44
减小查询的数据量、提升SQL的索引命中率即可多表查询时一定要以小驱大 先查小表,再用小表的结果去大表中检索数据在下一道工序开始前尽量缩小数据量,为下一道工序尽可能提供更加精准的数据。不要使用like左模糊和全模糊查询当出现基于字段做空值判断的情况时,会导致索引失效,因为判断null的情况不会走索引同时如果想为空的字段,可以设计一个0、""这类空字符代替,展开评论点赞 - #青训营笔记创作活动#
1月21日 打卡day43
搜索Github选一些自己感兴趣的开源库查看Issues在完成了一些开发时,我们可以开始git 一键三连git statusgit add [YOUR FILE]git commit -m [YOUR COMMIT MESSAGE]git push origin [YOUR BRANCH]把修改merge到自己的开发分支。添加原始仓库作为upstream仓库git remote add upstream [HTTPS]复制代码获取原始仓库的变更git fetch upstream复制代码合并更改git merge upstream/main复制代码解决冲突并push到自己的开发分支展开评论点赞 - #青训营笔记创作活动#
1月20日 打卡day42
数据的插入,查询时长较长后续业务需求的扩展 在表中新增字段 影响较大表中的数据并不是所有的都为有效数据 需求只查询时间区间内的性能之所以会变差,是因为维护索引的B+树结构层级变得更高了,查询一条数据时,需要经历的磁盘IO变多,因此查询性能变慢。如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录数 =16k/1k =16.我们假设主键ID为bigint类型,长度为8字节(面试官问你int类型,一个int就是32位,4字节)指针大小在InnoDB源码中设置为6字节,所以就是8+6=14字节,16k/14B =16*1024B/14B = 1170一棵高度为2的B+树,能存放1170 * 16=18720条这样的数据记录。同理一棵高度为3的B+树,能存放1170 *1170 *16 =21902400一个表最多只能有1024个分区。如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。采用hash取模和range方案结合 既可以避免热点数据的问题,也有利于将来对数据的扩容分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。分表重点是存取数据时,如何提高mysql并发能力上;而分区呢,如何突破磁盘的读写能力,从而达到提高mysql性能的目的。冷热归档降低单表数据量,树的高度变低,查询经历的磁盘io变少,则可以提高效率展开评论点赞 - #青训营笔记创作活动#
1月19日 打卡day41
如果说Debug的位置是网关入口,那么流量会很大,各种类型的请求都会走到这个断点里面,如果不能按照条件进入断点,会非常影响我们的效率。Debug断点只生效一次,同时不阻塞系统有什么办法,可以在调试的时候不阻塞剩余的请求吗?1、默认只断点一次; 2、断点的时候不挂起整个系统;静态断点,只是想看程序会不会运行到这里来(类似于动态日志)分组管理断点(系统不同链路的断点远程服务器Debug展开评论点赞