获得徽章 1
#青训营笔记创作活动#
2月18日day30
Java 8 引入了一个十分实用的 Optional 类,它主要是为了解决空指针异常(NullPointerException)。
本质上,Optional 类是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。

展开
评论
#青训营笔记创作活动#
2月16日day29
瞬时高并发场景设计思路
1.页面静态化
2.CDN加速
3.负载均衡
4.防重
5.缓存
6.异步
7.熔断、限流
8.分布式锁
分层过滤,分而治之
展开
评论
#青训营笔记创作活动#
2月14日day28
new和make的区别

new 的作用是初始化一个指向类型的指针 (*T) 。new 函数是内建函数,函数定义:func new(Type) *Type。使用 new 函数来分配空间。传递给 new 函数的是一个类型,不是一个值。返回值是指向这个新分配的零值的指针。

make 的作用是为 slice,map 或 chan 初始化并返回引用 (T)。make 函数是内建函数,函数定义:func make(Type, size IntegerType) Type;第一个参数是一个类型,第二个参数是长度;返回值是一个类型。

展开
评论
#青训营笔记创作活动#
2月13日day27
Hertz框架进行JWT认证
demo
使用命令行工具 hz 生成代码
使用 JWT 扩展完成登陆认证和授权访问
使用 Gorm 访问 MySQL 数据库
展开
评论
#青训营笔记创作活动#
2月11日day26
本地锁失效是因为无法锁住各个应用的读写请求,失效的根本原因就是其他的服务无法感知到是否已经有请求上锁了,即无法共享锁信息。

分布式锁,其实也就是将加锁的这一个操作,单独的抽取出来了,让每个服务都能感知到。
展开
评论
#青训营笔记创作活动#
2月10日day25
跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。
评论
#青训营笔记创作活动#
2月9日day24
实现方法
步骤:

获取注解参数
获取当前请求的ip和请求的方法
生成key
获取redis中该key的访问次数
判断次数是否超过范围
若超出范围,则拒绝访问,返回提示,并将TTL重置为注解上的等待时间
若没有超过范围,则允许访问,并将访问次数+1
若查询不到该key,则往redis中进行添加,将值设置为1,将TTL设置为注解上的值
展开
评论
#青训营笔记创作活动#
2月8日day23
缓存穿透
是指用户在不断访问一个缓存和数据库中都没有的数据。缓存无法命中,从而导致一直请求数据库,流量过大就会导致数据库的崩溃.
缓存雪崩
Redis挂掉了,请求全部走数据库。
缓存击穿
和缓存穿透其实非常类似,但是缓存击穿说的是数据在缓存中没有,但是在数据库中有的数据。
展开
评论
#青训营笔记创作活动#
2月7日day22
由本地缓存到集中式缓存(redis)到多级缓存,解决数据一致性问题,减少浪费,提升系统性能。
评论
#青训营笔记创作活动#
2月6日day21
秒杀系统的9个细节
瞬时高并发、页面静态化、秒杀按钮、读多写少、缓存问题、库存问题、分布式锁、mq异步处理、如何限流
评论
#青训营笔记创作活动#
2月5日day20
为什么用公钥加密,却不能用公钥解密?

因为大数取模运算是不可逆的,因此他人无法暴力解密。但是结合欧拉定理,我们可以选取出合适的p(公钥), q(私钥), N(用于取模的大数),让原本不可逆的运算在特定情况下,变得有那么点“可逆”的味道。数学原理决定了我们用公钥加密的数据,只有私钥能解密。反过来,用私钥加密的数据,也只有公钥能解密。
展开
评论
#青训营笔记创作活动#
2月4日day19
总结:
1.跳表是可以实现二分查找的有序链表
2.每个元素插入时随机生成它的 level
3.最底层包含所有的元素
4.如果一个元素出现在 level(x),那么它肯定出现在 x 以下的 level 中
5.每个索引节点包含两个指针,一个向下,一个向右
6.跳表查询、插入、删除的时间复杂度为 O(log n),与平衡二叉树接近
为什么不选择红黑树来实现
插入元素

删除元素

查找元素

有序输出所有元素

查找区间内的所有元素

其中前 4 项红黑树都可以完成,且时间复杂度与跳表一致,但是最后一个红黑树的效率就没有跳表高了。在跳表中,要查找区间的元素,只要定位到两个区间端点在最低层级的位置,然后按顺序遍历元素就可以了,非常高效。

展开
评论
#青训营笔记创作活动#
2月3日day18
Bytebase是一款实用的数据库管理及变更工具,让我们在没有客户端的情况下也能方便地进行数据库管理,它的SQL审核功能可以避免开发人员对数据库的误操作。
评论
#青训营笔记创作活动#
2月2日day17
慢SQL优化思路。

慢查询日志记录慢SQL

explain分析SQL的执行计划

profile 分析执行耗时

Optimizer Trace分析详情

确定问题并采用相应的措施

展开
评论
#青训营笔记创作活动#
1月31日day16
HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。

客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。

后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。

如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。

展开
评论
#青训营笔记创作活动#
1月29日day15
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构
3.不在循环里远程调用、或者数据库操作,优先考虑批量进行。
4.封装方法形参
5.封装通用模板
6.封装复杂的逻辑判断条件
7.保持优化性能的嗅觉
8.可变参数的配置化处理
9.会总结并使用工具类。
10.控制方法函数复杂度
11. 在finally块中对资源进行释放
12. 把日志打印好
13. 考虑异常,处理好异常
14. 考虑系统、接口的兼容性
15. 代码采取措施避免运行时错误
展开
评论
#青训营笔记创作活动#
1月28日day14
从计算机网络对网络原理进一步的理解加深
数据传输方式:电路交换、报文交换、分组交换
评论
#青训营笔记创作活动#
1月26日day13
一套流程看下去
《自顶向下深入剖析MySQL整体架构!》

《一条SQL语句从诞生至结束的多姿多彩历程!》

《库表设计篇:五大范式、BC范式与反范式详解!》

《MySQL索引分类与B+树索引的深入思考与原理剖析》

《MySQL-MVVC并发控制与行锁、表锁、间隙锁机制探讨》

《MySQL事务篇:ACID原则与事务机制深入剖析》

《InnoDB与MyISAM存储引擎的技术内幕》

《MySQL日志篇之undo-log、bin-log、redo-log等傻傻分不清!》

《MySQL内置函数与常用命令大全!》

《SQL优化篇之如何成为一个写SQL的高手!》

《单机MySQL索引、表结构优化及激进调优方案详解》

《MySQL高可用篇之主备读写分离与数据一致性思考》

《MySQL高可用篇之双主双写多活架构剖析!》

《MySQL在海量数据下分库分表的正确姿势》

《MySQL分库分表之MyCat中间件实战》

《MySQL分库分表之Sharding-JDBC实战》

《MySQL分库分表后产生的分布式事务问题!》

《MySQL慢查询、死锁、数据错乱等线上问题排查指南!》

《MySQL8.x新版本的特性及与MySQL5.x版本之间的差异!》

展开
评论
#青训营笔记创作活动#
1月24日day12
抓包baidu的数据包
HTTPS会对HTTP的URL和Request Body都进行加密,因此直接在filter栏进行过滤http.host == "baidu.com"会一无所获。
HTTPS握手的过程中会先通过非对称机密去交换各种信息,其中就包括3个随机数,再通过这三个随机数去生成对称机密的会话秘钥,后续使用这个会话秘钥去进行对称加密通信。如果能获得这三个随机数就能解密HTTPS的加密数据包。
三个随机数,分别是客户端随机数(client random),服务端随机数(server random)以及pre_master_key。前两个,是明文,第三个是被服务器公钥加密过的,在客户端侧需要通过SSLKEYLOGFILE去导出。
通过设置SSLKEYLOGFILE环境变量,再让curl或chrome会请求HTTPS域名,会让它们在调用TLS库的同时导出对应的sslkey文件。这个文件里包含了三列,其中最重要的是第二列的client random信息以及第三列的pre_master_key。第二列client random用于定位,第三列pre_master_key用于解密。
展开
评论
#青训营笔记创作活动#
1月23日day11
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、及时跟同事沟通
展开
评论
下一页