获得徽章 11
#青训营笔记创作活动#
1月18日,day13打卡,今日学习《(一)全解MySQL之架构篇:自顶向下深入剖析MySQL整体架构!》
MySQL中常见的数据文件类型:

db.opt文件:主要记录当前数据库使用的字符集和验证规则等信息。
.frm文件:存储表结构的元数据信息文件,每张表都会有一个这样的文件。
.MYD文件:用于存储表中所有数据的文件(MyISAM引擎独有的)。
.MYI文件:用于存储表中索引信息的文件(MyISAM引擎独有的)。
.ibd文件:用于存储表数据和索引信息的文件(InnoDB引擎独有的)。
.ibdata文件:用于存储共享表空间的数据和索引的文件(InnoDB引擎独有)。
.ibdata1文件:这个主要是用于存储MySQL系统(自带)表数据及结构的文件。
.ib_logfile0/.ib_logfile1文件:用于故障数据恢复时的日志文件。
.cnf/.ini:MySQL的配置文件,Windows下是.ini,其他系统大多为.cnf。
展开
评论
#青训营笔记创作活动#
1月17日打卡,day12今日学习《为什么我抓不到baidu的数据包》,文章开头通过抓包baidu的数据包,展示了用wireshark抓包的简单操作流程。
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月16日打卡,day11今日学习《写出漂亮代码的45个小技巧》,其中学习以下几个有用到的技巧:
1. 当成员变量值无需改变时,尽量定义为静态常量 2. 尽量使用基本数据类型,避免自动装箱拆箱和空指针的判断 3. 尽量使用函数内的基本类型临时变量 4. 尽量不使用反射赋值对象 5. 把跟类成员变量无关的方法声明成静态方法 6. 协议方法参数值非空,避免不必要的空指针判断 7. 尽量减少方法的重复调用 8. 尽量避免不必要的方法调用 9. 尽量使用位移来代替正整数乘除 10. 对于多常量选择分支,尽量使用 switch 语句而不是 if-else 语句 11. 不要使用 ""+ 转化字符串 12. 尽量使用 Arrays.asList 转化数组为列表 13. 直接迭代需要使用的集合 14. 不要使用 size 方法检测空,必须使用 isEmpty 方法测空 15. 非随机访问的 List,尽量使用迭代代替随机访问 16. 尽量使用 HashSet 判断值存在 17. 避免先判断存在再进行获取 18. 直接捕获对应的异常 19. 尽量使用线程池减少线程开销 21. 工具类中屏蔽构造函数 22. 返回空数组和集合而非 null 23. 优先使用常量或者确定值调用 equals 方法 24. 使用通用工具函数 Objects.equals() 25. 使用通用工具函数 CollectionUtil.isEmpty()
展开
评论
#青训营笔记创作活动#
1月15日,day10打卡,今日学习》《动图图解 | UDP就一定比TCP快吗?》

TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。
展开
评论
#青训营笔记创作活动#
1月14日,day09打卡,今日学习《我只是用了个“笨”方法,一个月后不再惧怕英文文档》,今日学习到如何解决日常写码中的一些寻找bug遇到的问题,查找、分解的方法。总的来说大概几个方面,包括了:
搜索
翻译
找文献
分解复杂句子
查找语法知识
展开
评论
#青训营笔记创作活动#
1月2日,day07打卡,今日学习《Kafka 科普》
在 Kafka 中还有两个特别重要的概念——主题(Topic)与分区(Partition)。Kafka 中的消息以 topic 题为单位进行归类,生产者负责将消息发送到特定的 topic (发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。
主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序而不是主题有序。
如上图(左)所示,主题中有 3 个分区,消息被顺序追加到每个分区日志文件的尾部。Kafka 中的分区可以分布在不同的服务器(broker)上,也就是说,一个主题可以横跨多个 broker,以此来提供比单个 broker 更强大的性能。
每一条消息被发送到 broker 之前,会根据分区规则选择被存储到哪个具体的分区。如果分区规则设定得合理,所有的消息都可以均匀地分配在不同的分区中。如果一个主题只对应一个文件,那么这个文件所在的机器 I/O 将会成为这个主题的性能瓶颈,而分区解决了这个问题。 在创建主题的时候可以通过指定的参数来设置分区的个数,当然也可以在主题创建完成之后去修改分区的数量,通过增加分区的数量可以实现水平扩展。
展开
1
#青训营笔记创作活动#
1月1日,day07打卡
今日学习《为什么有HTTP协议,还要有websocket协议?》
TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。
在HTTP1.1里。只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。
对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用websocket协议。
websocket和socket几乎没有任何关系,只是叫法相似。
正因为各个浏览器都支持HTTP协议,所以websocket会先利用HTTP协议加上一些特殊的header头进行握手升级操作,升级成功后就跟HTTP没有任何关系了,之后就用websocket的数据格式进行收发数据。
展开
评论
#青训营笔记创作活动#
12月30日,day06打卡
今日学习《刚插上网线,电脑怎么知道自己的IP是什么?》
电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。如果曾经连过这个网,机器会记录你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。
DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。
DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。
DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。
展开
评论
#青训营笔记创作活动#
12月29日打卡,day05
今日学习《羊了个羊》第二关的运行原理:
主要的原理是生成指定个数得Block块,(一组7个Block,三组为起点,因为三个相同的Block才会消失,(后续的生成也必须围绕3的倍数来生成对应的组),存放到Block盒中。
覆盖逻辑,Block的渲染从第一个开始,到最后一个结束。也就是按照数组的顺序,那么层级关系也就很明显了,优先渲染的Block会被下一次渲染的Block覆盖掉(重叠的话会被覆盖,如果两个Block离得很远,就不会被覆盖)我们就判断当前Block的后面的所有元素 是否有和我重叠(重叠逻辑比较复杂,后面有详细讲解)的,如果有就被遮挡,否则不遮挡。例如:[1,2,3,4,5] 我们判断3是否被遮挡,我们需要去和 4,5去进行对比,1,2是在我们下面的,所以不会遮挡我们,只会被我们遮挡
当点击上方的Block块时,根据x,y定位 移动到对应的收集盒的位置
当点击Block块,如果发现在收集盒已经存在相同的Block时,那么就将当前点击的Block插入到相同的Block位置,后面的Block依次向后移动一个Block的宽度
当出现三个一起的Block时,触发清除,删除Dom上的Block块的实例Dom,并将收集盒中空余的位置后面的元素诺到前面(比如中间的三个删除了,那么就需要把后面的挪到这里来,因为这里已经空了)
当收集盒中元素已经满了且无法清除时,表示游戏结束
当收集盒和Block盒都为空时,表示游戏胜利
展开
评论
#青训营笔记创作活动#
12月23日打卡,day04今日学习到了微服务相关知识
微服务
微服务的特点如下,大家先有个整体的概念,后面我会使用go-micro和go-zero框架带大家进行微服务项目的实践。
1. 单一职责
DDD思想指导我们对业务逻辑进行拆分,明确各自边界,形成不同的领域,不同的领域对应不同的微服务,这就是单一职责。
2. 团队独立
不同的领域对应不同的业务团队,也对应着不同的技术团队,彼此之间是解耦的。
3. 技术独立
不同的领域,不同的团队可以使用不同的开发语言,各自独立,只要按规范提供服务即可。
4. 数据库分离
每个领域(每个服务)都拥有自己的数据源。
5. 独立部署
每个领域(每个服务)都是独立的组件,可复用,可替换,降低耦合,易维护,易集群Docker部署服务
展开
评论
#青训营笔记创作活动#
12月22日打卡,day03
今日学习MySQL相关知识,三种不同情况下的计算,可以看出,InnoDB三层B+树情况下的数据存储量范围为 一百二十多万条 到 将近5亿条,这个跨度还是非常大的,同时我们也计算了一张博客信息表,可以存储 约一千万条 数据。
所以啊,我们在做项目考虑分表的时候还是得多关注一下表的实际情况,而不是盲目的认为两千万数据就是那个临界点。
展开
评论
#青训营笔记创作活动#
12月21日,打卡day02
今日学习安装了一些非常有用的IDEA的插件
Key Promoter X 是一款帮助你快速学习IDEA快捷键的插件,当你在IDEA中用鼠标点击某些功能时,它会自动提示你使用该功能的快捷键。它能让你更轻松地摆脱使用鼠标功能,从而只使用键盘来开发,这大概是刚开始使用IDEA的程序员最需要的插件了。
Lombok目前已经是开发Java应用的标配了,不仅SpringBoot默认支持它,连IDEA也内置了Lombok插件,无需安装即可使用。Lombok是一款Java代码功能增强库,通过Lombok的注解,你可以不用再写getter、setter、equals等方法,Lombok将在编译时为你自动生成。
展开
评论
#青训营笔记创作活动#
12月20日打卡,打卡day01
今日学习 “流量的常用限流方式”,根据限流作用范围,可以分为单机限流和分布式限流;根据限流方式,又分为计数器、滑动窗口、漏桶限令牌桶限流Tomcat 可以设置最大线程数(maxThreads),当并发超过最大线程数会排队等待执行;而 Nginx 提供了两种限流手段:一是控制速率,二是控制并发连接数。
对于 Java 语言,我们其实有相关的限流组件,比如大家常用的 RateLimiter,其实就是基于令牌桶算法,大家知道为什么唯独选用令牌桶么?
对于 Go 语言,也有该语言特定的限流方式,比如可以通过 channel 实现并发控制限流,也支持第三方库 httpserver 实现限流,详见这篇 《Go 限流的常见方法》。
在实际的限流场景中,我们也可以控制单个 IP、城市、渠道、设备 id、用户 id 等在一定时间内发送的请求数;如果是开放平台,需要为每个 appkey 设置独立的访问速率规则。
[飞吻]
展开
评论
#JUEJIN FRIENDS 好好生活计划#
ASOUL二周年快乐
BIGBOSSyifi于2022-12-14 08:16发布的图片
评论
#JUEJIN FRIENDS 好好生活计划#
距离考研还有10天
BIGBOSSyifi于2022-12-13 00:11发布的图片
评论
#JUEJIN FRIENDS 好好生活计划#
干净的天空
BIGBOSSyifi于2022-12-12 07:07发布的图片
评论
#JUEJIN FRIENDS 好好生活计划#
我最期待的,要来了
BIGBOSSyifi于2022-12-11 17:08发布的图片
评论
下一页
个人成就
文章被点赞 76
文章被阅读 22,813
掘力值 746
收藏集
3
关注标签
0
加入于