
获得徽章 1
#青训营笔记创作活动#
2023.2.10 打卡Day16
今日学习
多线程技术虽然能带来一系列的优势,但也因此引发了一个致命问题:线程安全问题,为了解决多线程并发执行造成的这个问题,从而又引出了锁机制,通过加锁执行的方式解决这类问题。
2023.2.10 打卡Day16
今日学习
多线程技术虽然能带来一系列的优势,但也因此引发了一个致命问题:线程安全问题,为了解决多线程并发执行造成的这个问题,从而又引出了锁机制,通过加锁执行的方式解决这类问题。
展开
评论
点赞
#青训营笔记创作活动#
2023.2.9 打卡Day16
今日学习
Activiti 目前是侧重云,他目前的设计会向 Spring Cloud、Docker 这些去靠拢。
Flowable 核心思想还是在做一个功能丰富的流程引擎工具,除了最最基础的工作流,他还提供了很多其他的扩展点,我们可以基于 Flowable 实现出许多我们想要的功能(当然这也是小伙伴们觉得 Flowable 使用复杂的原因之一)。
Camunda 相对于前两个而言比较轻量级,Camunda 有一个比较有特色的功能就是他提供了一个小巧的编辑器,基于 bpmn.io 来实现的(松哥之前已经发文讲过了)。如果你的项目需求是做一个轻巧的、灵活的、定制性强的编辑器,工作流是嵌入式的,那么可以选择 Camunda。
2023.2.9 打卡Day16
今日学习
Activiti 目前是侧重云,他目前的设计会向 Spring Cloud、Docker 这些去靠拢。
Flowable 核心思想还是在做一个功能丰富的流程引擎工具,除了最最基础的工作流,他还提供了很多其他的扩展点,我们可以基于 Flowable 实现出许多我们想要的功能(当然这也是小伙伴们觉得 Flowable 使用复杂的原因之一)。
Camunda 相对于前两个而言比较轻量级,Camunda 有一个比较有特色的功能就是他提供了一个小巧的编辑器,基于 bpmn.io 来实现的(松哥之前已经发文讲过了)。如果你的项目需求是做一个轻巧的、灵活的、定制性强的编辑器,工作流是嵌入式的,那么可以选择 Camunda。
展开
评论
点赞
#青训营笔记创作活动#
2023.2.8 打卡Day15
今日学习
跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,想要解决跨域问题,只需要告诉浏览器“我是自己人,不要拦我”就行。它的常见实现方式有 5 种:通过注解实现局部跨域、通过配置文件实现全局跨域、通过 CorsFilter 对象实现全局跨域、通过 Response 对象实现局部跨域,通过 ResponseBodyAdvice 实现全局跨域。
2023.2.8 打卡Day15
今日学习
跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,想要解决跨域问题,只需要告诉浏览器“我是自己人,不要拦我”就行。它的常见实现方式有 5 种:通过注解实现局部跨域、通过配置文件实现全局跨域、通过 CorsFilter 对象实现全局跨域、通过 Response 对象实现局部跨域,通过 ResponseBodyAdvice 实现全局跨域。
展开
评论
点赞
#青训营笔记创作活动#
2023.2.7 打卡Day14
今日学习
debug代码是一个常用而且很常见的技能,但是不是每个人都能很有效率的debug代码...
有一些idea隐藏的debug方式,虽然一些人不关注,但是有用并且能极大提升效率
文章主要介绍一些一些在实际项目中相对有用的可以提升debug能力的一些经验。最后如果说实在是有问题,但是又没办法进入调试模式,可以考虑arthas的trace和watch。
2023.2.7 打卡Day14
今日学习
debug代码是一个常用而且很常见的技能,但是不是每个人都能很有效率的debug代码...
有一些idea隐藏的debug方式,虽然一些人不关注,但是有用并且能极大提升效率
文章主要介绍一些一些在实际项目中相对有用的可以提升debug能力的一些经验。最后如果说实在是有问题,但是又没办法进入调试模式,可以考虑arthas的trace和watch。
展开
评论
点赞
#青训营笔记创作活动#
2023.2.4 打卡Day13
今日学习
跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,想要解决跨域问题,只需要告诉浏览器“我是自己人,不要拦我”就行。它的常见实现方式有 5 种:通过注解实现局部跨域、通过配置文件实现全局跨域、通过 CorsFilter 对象实现全局跨域、通过 Response 对象实现局部跨域,通过 ResponseBodyAdvice 实现全局跨域。
2023.2.4 打卡Day13
今日学习
跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,想要解决跨域问题,只需要告诉浏览器“我是自己人,不要拦我”就行。它的常见实现方式有 5 种:通过注解实现局部跨域、通过配置文件实现全局跨域、通过 CorsFilter 对象实现全局跨域、通过 Response 对象实现局部跨域,通过 ResponseBodyAdvice 实现全局跨域。
展开
评论
点赞
#青训营笔记创作活动#
2023.2.3 打卡Day12
今日学习
。大数取模运算是不可逆的,因此他人无法暴力解密。但是结合欧拉定理,我们可以选取出合适的p(公钥),q(私钥),N(用于取模的大数),让原本不可逆的运算在特定情况下,变得有那么点“可逆”的味道。数学原理决定了我们用公钥加密的数据,只有私钥能解密。反过来,用私钥加密的数据,也只有公钥能解密。
。HTTPS相当于HTTP+TLS,目前主流的是TLS1.2,基于TCP三次握手之后,再来TLS四次握手。
。TLS四次握手的过程中涉及到两对私钥和公钥。分别是服务器本身的私钥和公钥,以及CA的私钥和公钥。
。TLS四次握手背起来会挺难受的,建议关注三个随机数的流向,以此作为基础去理解,大概就能记下来
了。
2023.2.3 打卡Day12
今日学习
。大数取模运算是不可逆的,因此他人无法暴力解密。但是结合欧拉定理,我们可以选取出合适的p(公钥),q(私钥),N(用于取模的大数),让原本不可逆的运算在特定情况下,变得有那么点“可逆”的味道。数学原理决定了我们用公钥加密的数据,只有私钥能解密。反过来,用私钥加密的数据,也只有公钥能解密。
。HTTPS相当于HTTP+TLS,目前主流的是TLS1.2,基于TCP三次握手之后,再来TLS四次握手。
。TLS四次握手的过程中涉及到两对私钥和公钥。分别是服务器本身的私钥和公钥,以及CA的私钥和公钥。
。TLS四次握手背起来会挺难受的,建议关注三个随机数的流向,以此作为基础去理解,大概就能记下来
了。
展开
评论
点赞
#青训营笔记创作活动#
2023.2.2 打卡Day11
今日学习:后端开发良好习惯
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构
3.不在循环里远程调用、或者数据库操...
4.封装方法形参
5.封装通用模板
6.封装复杂的逻辑判断条件
7.保持优化性能的嗅觉
8.可变参数的配置化处理
9.会总结并使用工具类。
10.控制方法函数复杂度
11.在finally块中对资源进行释放
12.把日志打印好
2023.2.2 打卡Day11
今日学习:后端开发良好习惯
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构
3.不在循环里远程调用、或者数据库操...
4.封装方法形参
5.封装通用模板
6.封装复杂的逻辑判断条件
7.保持优化性能的嗅觉
8.可变参数的配置化处理
9.会总结并使用工具类。
10.控制方法函数复杂度
11.在finally块中对资源进行释放
12.把日志打印好
展开
评论
点赞
#青训营笔记创作活动#
2023.1.25 打卡Day10
今日学习
1、HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
2、客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
3、后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
4、如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。
2023.1.25 打卡Day10
今日学习
1、HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
2、客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
3、后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
4、如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。
展开
评论
点赞
#青训营笔记创作活动#
2023.1.23 打卡Day9
今日学习
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。
2023.1.23 打卡Day9
今日学习
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。
展开
评论
点赞
#青训营笔记创作活动#
2023.1.22 打卡Day8
今日学习
代码的编写规范,格式的优化,设计原则和一些常见的代码优化的技巧等方面总结了了45个小技巧
ps:春节快乐,兔年大吉~
2023.1.22 打卡Day8
今日学习
代码的编写规范,格式的优化,设计原则和一些常见的代码优化的技巧等方面总结了了45个小技巧
ps:春节快乐,兔年大吉~
展开
评论
点赞
#青训营笔记创作活动#
2023.1.20 打卡Day7
今日学习
- 文章开头通过抓包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用于解密。
2023.1.20 打卡Day7
今日学习
- 文章开头通过抓包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用于解密。
展开
评论
点赞
#青训营笔记创作活动#
2023.1.18 打卡Day6
今日学习
笨方法跨越英文障碍的落地方法:
- 遇到的 Bug 百度没有结果怎么办
- 中文翻译文献模棱两可怎么办
- 寻找外文文献的发现过程是什么样的
- 如何解决英文文档中的复杂句子
- 如何结合文档学习语法
2023.1.18 打卡Day6
今日学习
笨方法跨越英文障碍的落地方法:
- 遇到的 Bug 百度没有结果怎么办
- 中文翻译文献模棱两可怎么办
- 寻找外文文献的发现过程是什么样的
- 如何解决英文文档中的复杂句子
- 如何结合文档学习语法
展开
评论
点赞
#青训营笔记创作活动#
2023.1.17 打卡Day5
今日学习
1. TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。
2. 在HTTP1.1里。只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。
3. 对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用websocket协议。
4. websocket和socket几乎没有任何关系,只是叫法相似。
5. 正因为各个浏览器都支持HTTP协议,所以websocket会先利用HTTP协议加上一些特殊的header头进行握手升级操作,升级成功后就跟HTTP没有任何关系了,之后就用websocket的数据格式进行收发数据。
2023.1.17 打卡Day5
今日学习
1. TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。
2. 在HTTP1.1里。只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。
3. 对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用websocket协议。
4. websocket和socket几乎没有任何关系,只是叫法相似。
5. 正因为各个浏览器都支持HTTP协议,所以websocket会先利用HTTP协议加上一些特殊的header头进行握手升级操作,升级成功后就跟HTTP没有任何关系了,之后就用websocket的数据格式进行收发数据。
展开
评论
点赞
#青训营笔记创作活动#
2023.1.16 打卡day4
今日学习
1. 电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
2. DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。如果曾经连过这个网,机器会记录3. 你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。
4. DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。
5. DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。
6. DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。
2023.1.16 打卡day4
今日学习
1. 电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
2. DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。如果曾经连过这个网,机器会记录3. 你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。
4. DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。
5. DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。
6. DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。
展开
评论
点赞
#青训营笔记创作活动#
2023.1.15 打卡day3
今日学习
1、客户端转服务端,最大的挑战不是学一门新语言,而是编程思维的改变,即从“页面驱动设计”到“数据驱动设计”。
2、高效学习一门新的编程语言的制胜法宝——“三刷”官方文档:
1刷从头看到尾,扫清知识盲点,搞清楚概念;
2刷必须手敲,而且要写注释和总结;
3刷先只写注释,不看文档实现功能,遇到问题再和文档比较,加深理解。如果还有余力,就和我一样整理成文章,分享出来帮助大家学习,回馈社区。
3、go学习路线:go语言基础——》SQL,Redis,Linux,Nginx的基础知识点==》有能力开发Web项目——》“微服务”和“DDD”==》进阶
4、编程语言转型:对有基础的同学来说,学习一门新的语言,无外乎就是学习新语言的:数据类型、函数、运算符、错误处理等,再重点攻克一下语言的特点,基本2周时间就能去尝试写简单的demo,开发项目了
2023.1.15 打卡day3
今日学习
1、客户端转服务端,最大的挑战不是学一门新语言,而是编程思维的改变,即从“页面驱动设计”到“数据驱动设计”。
2、高效学习一门新的编程语言的制胜法宝——“三刷”官方文档:
1刷从头看到尾,扫清知识盲点,搞清楚概念;
2刷必须手敲,而且要写注释和总结;
3刷先只写注释,不看文档实现功能,遇到问题再和文档比较,加深理解。如果还有余力,就和我一样整理成文章,分享出来帮助大家学习,回馈社区。
3、go学习路线:go语言基础——》SQL,Redis,Linux,Nginx的基础知识点==》有能力开发Web项目——》“微服务”和“DDD”==》进阶
4、编程语言转型:对有基础的同学来说,学习一门新的语言,无外乎就是学习新语言的:数据类型、函数、运算符、错误处理等,再重点攻克一下语言的特点,基本2周时间就能去尝试写简单的demo,开发项目了
展开
评论
点赞
#青训营笔记创作活动#
12月12日 打卡day2
学习并尝试了IDEA中各种各样插件的使用,涵盖了绝大部分应用场景,平时开发的时候基本上也够用了。不过IDEA插件虽然能增强它的功能,给我们提供一站式的开发体验,但是也不要安装过多,太多了容易卡。
12月12日 打卡day2
学习并尝试了IDEA中各种各样插件的使用,涵盖了绝大部分应用场景,平时开发的时候基本上也够用了。不过IDEA插件虽然能增强它的功能,给我们提供一站式的开发体验,但是也不要安装过多,太多了容易卡。
展开
评论
点赞