获得徽章 5
- #青训营笔记创作活动#
1月9日 打卡day22
跳表是可以实现二分查找的有序链表
每个元素插入时随机生成它的 level
最底层包含所有的元素
如果一个元素出现在 level(x),那么它肯定出现在 x 以下的 level 中
每个索引节点包含两个指针,一个向下,一个向右
跳表查询、插入、删除的时间复杂度为 O(log n),与平衡二叉树接近展开评论点赞 - #青训营笔记创作活动#
1月8日 打卡day21
聚簇索引:逻辑上连续且物理空间上的连续。
非聚簇索引:逻辑上的连续,物理空间上不连续。
当然,这里的连续和数组不同,因为索引大部分都是使用B+Tree结构存储,所以在磁盘中数据是以树结构存放的,所以连续并不是指索引节点,而是指索引数据和表数据,也就是说聚簇索引中,索引数据和表数据在磁盘中的位置是一起的,而非聚簇索引则是分开的,索引节点和表数据之间,用物理地址的方式维护两者的联系。展开评论点赞 - #青训营笔记创作活动#
1月7日 打卡day20
其实这个跳跃性扫描机制,只有在唯一性较差的情况下,才能发挥出不错的效果,如果你联合索引的第一个字段,是一个值具备唯一性的字段,那去重一次再拼接,几乎就等价于走一次全表。评论点赞 - #青训营笔记创作活动#
1月6日 打卡day19
Bytebase确实是一款实用的数据库管理及变更工具,让我们在没有客户端的情况下也能方便地进行数据库管理,它的SQL审核功能可以避免开发人员对数据库的误操作。评论点赞 - #青训营笔记创作活动#
1月5日 打卡day18
有点深,不怎么熟悉这块
SQL优化思路:group by使用不当,很容易就会产生慢SQL问题。因为它既用到临时表,又默认用到排序。有时候还可能用到磁盘临时表。
如果执行过程中,会发现内存临时表大小到达了上限(控制这个上限的参数就是tmp_table_size),会把内存临时表转成磁盘临时表。
如果数据量很大,很可能这个查询需要的磁盘临时表,就会占用大量的磁盘空间。
可以有这些优化方案:
group by 后面的字段加索引
order by null 不用排序
尽量只使用内存临时表
使用SQL_BIG_RESULT展开评论点赞 - #青训营笔记创作活动#
1月4日 打卡day17
就算与客户端断开了连接,MySQL中创建的线程并不会销毁,而是会放入到MySQL的连接池中,等待其他客户端复用当前连接。一般情况下,一条线程在八小时内未被复用,才会触发MySQL的销毁工作。展开评论点赞 - #青训营笔记创作活动#
1月3日 打卡day16
作者的总结:
HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。展开评论点赞 - #青训营笔记创作活动#
1月2日 打卡day15
优秀后端的开发好习惯:
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构
3. 不在循环里远程调用、或者数据库操作,优先考虑批量进行。
4. 封装方法形参
5. 封装通用模板
6. 封装复杂的逻辑判断条件
7. 保持优化性能的嗅觉
8. 可变参数的配置化处理
9. 会总结并使用工具类
10. 控制方法函数复杂度
11. 在finally块中对资源进行释放
12.把日志打印好
13. 考虑异常,处理好异常
14. 考虑系统、接口的兼容性
15. 代码采取措施避免运行时错误展开评论点赞 - #青训营笔记创作活动#
1月1日 打卡day14
网络原理:传输方式和结点、转发和标识思想、结点和链路、网络的边界
新年第一天打卡yepyep评论点赞 - #青训营笔记创作活动#
12月31日 打卡day13
2022年最后一天啦
MySQL的整体架构:MySQL网络连接层、系统服务层、存储引擎层、文件系统层评论点赞