获得徽章 12
- #青训营笔记创作活动#
2023.01.30_Day18![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【SQL优化思路】
开门见山地说,SQL调优,大厂面试必问。
大概分为以下几个方面:
1.慢SQL优化思路。
1.1 慢查询日志记录慢SQL
1.2 explain查看分析SQL的执行计划
1.2.1 type
1.2.2 rows
1.2.3 filtered
1.2.4 extra
1.2.5 key
1.3 profile 分析执行耗时
1.4 Optimizer Trace分析详情
1.5 确定问题并采用相应的措施
2. 慢查询经典案例分析
2.1 案例1:隐式转换
2.2 案例2:最左匹配
2.3 案例3:深分页问题
2.4 案例4: in元素过多
2.5 order by 走文件排序导致的慢查询
2.5.1 rowid排序
2.5.2 全字段排序
2.5.3 如何优化order by的文件排序
2.6 索引字段上使用(!= 或者 < >),索引可能失效
2.7 索引字段上使用is null, is not null,索引可能失效
2.8 左右连接,关联的字段编码格式不一样
2.9 group by使用临时表
2.9.1 group by执行流程
2.9.2 group by可能会慢在哪里?
2.9.3 如何优化group by呢
2.10 delete + in子查询不走索引!展开评论点赞 - #青训营笔记创作活动#
2023.01.29_Day17![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【MySQL全解(二)】
从诞生到全链路;
本文的大体目录如下:
一、一条SQL是如何诞生的?
二、一条SQL执行前会经历的过程
2.1、数据库连接池的必要性
2.2、SQL执行前会发生的事情
三、一条SQL语句在数据库中是如何执行的?
3.1、一条查询SQL的执行过程
SQL接口会干的工作
解析器中会干的工作
优化器中会干的工作
存储引擎中会干的工作
3.2、一条写入SQL的执行过程
缓冲区中会做的工作
写操作时的日志
四、一条SQL执行完成后是如何返回的?
4.1、读类型的SQL返回
4.2、写类型的SQL返回
4.3、执行结果是如何返回给客户端的?
五、SQL执行篇总结
先mark一下,等需要系统学习的时候就来看。展开赞过11 - #青训营笔记创作活动#
2023.01.28_Day16![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【502问题】
首先文章介绍了HTTP状态码,其中5xx的状态码是服务器有问题。
但是这个时候服务端是不可能给客户端返回状态码的,一般情况下5xx的状态码其实并不是服务器返回给客户端的,它们是由网关返回的,常见的网关,比如Nginx。
Nginx屏蔽掉具体有哪些服务器的代理方式就是所谓的反向代理。
接着,文章介绍了502的常见产生原因。
502 (Bad Gateway) 状态代码表示服务器在充当网关或代理时,在尝试满足请求时从它访问的入站服务器接收到无效响应。后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
最后,解决方法是,如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。展开赞过11 - #青训营笔记创作活动#
2023.01.27_Day15![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【优秀后端都应该具备的开发好习惯】
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构
3. 不在循环里远程调用、或者数据库操作,优先考虑批量进行。
4. 封装方法形参
5. 封装通用模板
6. 封装复杂的逻辑判断条件
7. 保持优化性能的嗅觉
8. 可变参数的配置化处理
9. 会总结并使用工具类。
10. 控制方法函数复杂度
11. 在finally块中对资源进行释放
12.把日志打印好
13. 考虑异常,处理好异常
14. 考虑系统、接口的兼容性
15. 代码采取措施避免运行时错误展开赞过11 - #青训营笔记创作活动#
2023.01.26_Day14![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【网络原理】
网络原理,How and Why?
单机→互联:本质是通信!
数据传输方式:电路交换、报文交换、分组交换;
其中一个重要的思想:转发&标识思想,它们是网络设计的核心问题,因为它们是一个网络扩大的基础。
结点&链路: 从计算机、集线器,交换机、路由器;
网络的边界:个人区域网、局域网、城域网、广域网、互联网展开赞过评论1 - #青训营笔记创作活动#
2023.01.25_Day13![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【MySQL全解(一)】
MySQL整体结构浅析
从上往下看,依次会分为网络连接层、系统服务层、存储引擎层、以及文件系统层,往往编写SQL后,都会遵守着MySQL的这个架构往下走。
连接层:主要是指数据库连接池,会负责处理所有客户端接入的工作。
服务层:主要包含SQL接口、解析器、优化器以及缓存缓冲区四块区域。
存储引擎层:这里是指MySQL支持的各大存储引擎,如InnoDB、MyISAM等。
文件系统层:涵盖了所有的日志,以及数据、索引文件,位于系统硬盘上。
更进一步地,
网络连接层中有数据库连接池;
系统服务层中有SQL接口、解析器、优化器、缓存&缓冲;
存储引擎层;
文件系统层中有日志模块、数据模块。展开赞过评论1 - #青训营笔记创作活动#
2023.01.24_Day12![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
为什么没能抓到包
这其实是因为他访问的是HTTPS协议的baidu.com。HTTP协议里的Host和实际发送的request body都会被加密。
正因为被加密了,所以没办法通过http.host进行过滤。
但是虽然加密了,如果想筛选还是可以筛的。
HTTPS握手中的Client Hello阶段,里面有个扩展server_name,会记录你想访问的是哪个网站,通过下面的筛选条件可以将它过滤出来。
然后需要解密数据包,得到pre_master_key,最后通过设置SSLKEYLOGFILE环境变量,再让curl或chrome会请求HTTPS域名。展开赞过评论1 - #青训营笔记创作活动#
2023.01.23_Day11![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【代码书写】
1、规范命名
2、规范代码格式
3、写好代码注释
4、try catch 内部代码抽成一个方法
5、方法别太长
6、抽取重复代码
7、多用return
8、if条件表达式不要太复杂
9、优雅地参数校验
10、统一返回值
11、统一异常处理
12、尽量不传递null值
13、尽量不返回null值
14、日志打印规范
15、统一类库
16、尽量使用工具类
17、尽量不要重复造轮子
18、类和方法单一职责
19、尽量使用聚合/组合代替继承
20、使用设计模式优化代码
21、不滥用设计模式
22、面向接口编程
23、经常重构旧的代码
24、null值判断
25、pojo类重写toString方法
26、魔法值用常量表示
27、资源释放写到finally
28、使用线程池代替手动创建线程
29、线程设置名称
30、涉及线程间可见性加volatile
31、考虑线程安全问题
32、慎用异步
33、减小锁的范围
34、有类型区分时定义好枚举
35、远程接口调用设置超时时间
36、集合使用应当指明初始化大小
37、尽量不要使用BeanUtils来拷贝属性
38、使用StringBuilder进行字符串拼接
39、@Transactional应指定回滚的异常类型
40、谨慎方法内部调用动态代理的方法
41、需要什么字段select什么字段
42、不循环调用数据库
43、用业务代码代替多表join
44、装上阿里代码检查插件
45、及时跟同事沟通
展开赞过评论1 - #青训营笔记创作活动#
2023.01.22_Day10![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【UDP&TCP】
本文主要介绍了:
使用socket进行数据传输
对于异常情况的处理
重传机制
流量控制机制
滑动窗口机制
拥塞控制机制
分段机制
乱序重排机制
连接机制
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。
展开赞过评论1 - #青训营笔记创作活动#
2023.01.21_Day9![[咖啡]](//lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)
【English Learning】
Q: How to solve the problem when I can't search on the Chinese Internet?
A: Search on the English Internet, and use Stack Overflow, or you can use MSDN, Fresheye, Yandex, NAVER...
Q: When I read an English document, is the Chinese translation fuzzy?
A: You can use many different translation engines and compare them.
Q: How can I find a useful English document?
A: Use English in the search engine.
Q: How can I understand complex English sentences?
A: Divide and rule it.展开评论点赞
![[咖啡]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_140.6908619.png)