获得徽章 1
- 二月二十三日 打卡day42
#青训营笔记创作活动#
sql的执行流程:①先将SQL发送给SQL接口,SQL接口会对SQL语句进行哈希处理。
②SQL接口在缓存中根据哈希值检索数据,如果缓存中有则直接返回数据。
③缓存中未命中时会将SQL交给解析器,解析器会判断SQL语句是否正确:
错误:抛出1064错误码及相关的语法错误信息。
正确:将SQL语句交给优化器处理,进入第④步。
④优化器根据SQL制定出不同的执行方案,并择选出最优的执行计划。
⑤工作线程根据执行计划,调用存储引擎所提供的API获取数据。
⑥存储引擎根据API调用方的操作,去磁盘中检索数据(索引、表数据....)。
⑦发生磁盘IO后,对于磁盘中符合要求的数据逐条返回给SQL接口。
⑧SQL接口会对所有的结果集进行处理(剔除列、合并数据....)并返回。展开评论点赞 - #青训营笔记创作活动#
二月二十二日 打卡day41
分组交换的思想源于报文交换,也采用存储转发的原理,但不同的是分组交换的最小信息单位是分组,而报文交换则是一个个报文。分组加速了数据在网络中的传输,一个分组的存储与前一个分组转发可以并行,所以本质分组交换也是存储转发,可以说让报文更加有组织,转发也更加迅速。展开评论点赞 - #青训营笔记创作活动#
二月二十一日 打卡day40
本地锁失效是因为无法锁住各个应用的读写请求,失效的根本原因就是其他的服务无法感知到是否已经有请求上锁了,即无法共享锁信息。
分布式锁,其实也就是将加锁的这一个操作,单独的抽取出来了,让每个服务都能感知到。展开评论点赞 - #青训营笔记创作活动#
二月二十日 打卡day39
isPresent() 是判断这个包装类是否为空, get() 是获取到被包装的对象。isPresent() 还可以接受一个 Consumer(消费者) 参数,如果对象不是空的,就对执行传入的 Lambda 表达式.展开评论点赞 - #青训营笔记创作活动#
二月十九日 day38
Jedis 是一个优秀的基于 Java 语言的 Redis 客户端
Jedis 在实现上是直接连接 Redis-Server,在多个线程间共享一个 Jedis 实例时是线程不安全的,如果想要在多线程场景下使用 Jedis,需要使用连接池,每个线程都使用自己的 Jedis 实例,当连接数量增多时,会消耗较多的物理资源。展开评论点赞 - #青训营笔记创作活动#
二月十八日 打卡day37
分库分表是什么?为什么要进行分库分表?它的核心就是对数据的分片(Sharding)并相对均匀的路由在不同的库、表中,以及分片后对数据的快速定位与检索结果的整合。评论点赞 - 二月十七日 打卡day36
综合来看,时间戳的问题是没法防止60s内的攻击,而随机数的问题在于要做到全局唯一,而且要存储很多 nonce ,耗费空间大,所以我们其实可以结合两者客户端生成时间戳和随机数,并且作为sign的加密参数,传递给服务端服务端先判断时间戳是否合法,若不合法,则直接返回【省去存储随机数的开销】
若时间戳合法,再将 nonce 存储到redis里边,并且设置 1min过期。展开评论点赞 - #青训营笔记创作活动#
二月十六日 day35
debug代码是一个常用而且很常见的技能,但是不是每个人都能很有效率的debug代码,有一些idea隐藏的debug方式,虽然一些人不关注,但是有用并且能极大提升效率。文章主要介绍一些一些在实际项目中相对有用的可以提升debug能力的一些经验。展开评论点赞 - #青训营笔记创作活动#
二月十五日 打卡day34
今天学习了卡夫卡,一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个 ZooKeeper 集群,如图所示。其中 ZooKeeper 是 Kafka 用来负责集群元数据的管理、控制器 的选举等操作的。Producer 将消息发送到 Broker,Broker 负责将收到的消息存储到磁盘中,而 Consumer 负责从 Broker 订阅并消费消息。展开评论点赞 - #青训营笔记创作活动#
二月十四日 打卡day33
TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。展开评论点赞