
获得徽章 3
- #青训营笔记创作活动#
01月31日 打卡day24
高并发下秒杀商品,你必须知道的9个细节
秒杀活动下的技术细节真不少啊,但是针对这种场景的特点仔细分析,还是出现了很多解决方案,让人不得不感慨人的强大。之前我都是参与活动的用户,现在我要转变成设计活动的后台程序员了。展开评论点赞 - #青训营笔记创作活动#
1月30日 打卡day23
今天学习——为什么用公钥加密却不能用公钥解密?
因为大数取模运算是不可逆的,因此他人无法暴力解密。但是结合欧拉定理,我们可以选取出合适的p(公钥), q(私钥), N(用于取模的大数),让原本不可逆的运算在特定情况下,变得有那么点“可逆”的味道。数学原理决定了我们用公钥加密的数据,只有私钥能解密。反过来,用私钥加密的数据,也只有公钥能解密。展开评论点赞 - #青训营笔记创作活动#
juejin.cn
01月29日 打卡day22
今天学习——刨根问底 Redis, 面试过程真好使
总结:
跳表是可以实现二分查找的有序链表
每个元素插入时随机生成它的 level
最底层包含所有的元素
如果一个元素出现在 level(x),那么它肯定出现在 x 以下的 level 中
每个索引节点包含两个指针,一个向下,一个向右
跳表查询、插入、删除的时间复杂度为 O(log n),与平衡二叉树接近
为什么不选择红黑树来实现
首先来分析下 Redis 的有序集合支持的操作:
插入元素
删除元素
查找元素
有序输出所有元素
查找区间内的所有元素
其中前 4 项红黑树都可以完成,且时间复杂度与跳表一致,但是最后一个红黑树的效率就没有跳表高了。在跳表中,要查找区间的元素,只要定位到两个区间端点在最低层级的位置,然后按顺序遍历元素就可以了,非常高效。展开评论点赞 - #青训营笔记创作活动#
1月28日 打卡day21
今天学习--本篇中就对MySQL的索引机制有了全面认知,从索引的由来,到索引概述、索引管理、索引分类、唯一/全文/联合/空间索引的创建与使用等内容,进行了全面概述,
聚簇索引、非聚簇索引、唯一索引、主键索引、联合索引、全文索引、单列索引、多列索引、复合索引、普通索引、二级索引、辅助索引、次级索引、有序索引、B+Tree索引、R-Tree索引、T-Tree索引、Hash索引、空间索引、前缀索引......
展开评论点赞 - #青训营笔记创作活动#
1月27日 打卡day20
今天学习——(五)MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!
对数据库整体来说,索引带来的优势会大于劣势。不过也正由于索引存在弊端,因此索引不是越多越好,合理建立索引才是最佳选择。
回表是指一条SQL语句在MySQL内部,要经过两次查询过程才能获取到数据
①经常频繁用作查询条件的字段应酌情考虑为其创建索引。
②表的主外键或连表字段,必须建立索引,因为能很大程度提升连表查询的性能。
③建立索引的字段,一般值的区分性要足够高,这样才能提高索引的检索效率。
④建立索引的字段,值不应该过长,如果较长的字段要建立索引,可以选择前缀索引。
⑤建立联合索引,应当遵循最左前缀原则,将多个字段之间按优先级顺序组合。
⑥经常根据范围取值、排序、分组的字段应建立索引,因为索引有序,能加快排序时间。
⑦对于唯一索引,如果确认不会利用该字段排序,那可以将结构改为Hash结构。
⑧尽量使用联合索引代替单值索引,联合索引比多个单值索引查询效率要高。
❶值经常会增删改的字段,不合适建立索引,因为每次改变后需维护索引结构。
❷一个字段存在大量的重复值时,不适合建立索引,比如之前举例的性别字段。
❸索引不能参与计算,因此经常带函数查询的字段,并不适合建立索引。
❹一张表中的索引数量并不是越多越好,一般控制在3,最多不能超过5。
❺建立联合索引时,一定要考虑优先级,查询频率最高的字段应当放首位。
❻当表的数据较少,不应当建立索引,因为数据量不大时,维护索引反而开销更大。
❼索引的字段值无序时,不推荐建立索引,因为会造成页分裂,尤其是主键索引。展开评论点赞 - #青训营笔记创作活动#
1月26日 打卡day19
Bytebase确实是一款实用的数据库管理及变更工具,让我们在没有客户端的情况下也能方便地进行数据库管理,它的SQL审核功能可以避免开发人员对数据库的误操作。
评论点赞 - #青训营笔记创作活动#
1月25日 打卡day18
今天学习——SQL优化思路+经典案例分析
慢查询日志记录慢SQL
explain分析SQL的执行计划
profile 分析执行耗时
Optimizer Trace分析详情
确定问题并采用相应的措施展开评论点赞 - #青训营笔记创作活动#
1月24日 打卡day17
今天学习--一条SQL语句从诞生到结束
不论是查询SQL还是还是写入SQL,大致都会经过查询,解析,优化,存取等步骤,SQL在各个层面都有非常大的优化空间。评论点赞 - 1月23日 打卡day16
今天学习——502问题怎么排查?
HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。 #青训营笔记创作活动#展开评论点赞 - #青训营笔记创作活动#
1月22日 打卡day15
今天学习——优秀后端都应该具备的开发好习惯
注释尽可能全面,写有意义的方法注释
项目拆分合理的目录结构
不在循环里远程调用、或者数据库操作,优先考虑批量进行。
封装方法形参
封装通用模板
封装复杂的逻辑判断条件
保持优化性能的嗅觉
可变参数的配置化处理
会总结并使用工具类。
控制方法函数复杂度
在finally块中对资源进行释放
把日志打印好
考虑异常,处理好异常
考虑系统、接口的兼容性
代码采取措施避免运行时错误展开评论点赞