而当时在网上搜索资料的时候,这方面的资料真的是少的可怜,所以,我有幸前两年接触了这方面的知识,我觉得我应该把我知道的记录下来,虽然写的不一定很好,但是希望能给需要帮助的人多个参考。...我们假设网络很通畅且速率稳定,而且处理包的速度忽略不计,这样一个包发送到对端的时间永远都是一样的,将这个时间记为t。那么很明显,如果超过两倍的t还没有收到对端的回复,我们就可以肯定超时了。...答案很明显不是,因为太长会人为的减少通信的速率,对于通信这种有时候一点点速率的提高都让人欣喜若狂了,如果你还人为的浪费时间那真是暴殄天物了。 那么如果这个时间设置的太短会怎样呢?...所以很多计算重传时间的算法就被设计出来。 调的一手好参数 TCP把一个包从发送端发送出去到接收到这个包的回复这段时间称之为RTT,学名round-trip time。...之间,为什么这样取,我也不知道,我至今也没有找到原因。
继之前的mysql夺命连环之后,我发现我这个标题被好多套用的,什么夺命zookeeper,夺命多线程一大堆,这一次,开始面试题系列MQ专题,消息队列作为日常常见的使用中间件,面试也是必问的点之一,一起来看看...生产者丢失 生产者丢失消息的可能点在于程序发送失败抛异常了没有重试处理,或者发送的过程成功但是过程中网络闪断MQ没收到,消息就丢失了。...RocketMQ默认是需要消费者回复ack确认,而kafka需要手动开启配置关闭自动offset。...而消息在master和slave之间的同步是根据raft协议来进行的: 在broker收到消息后,会被标记为uncommitted状态 然后会把消息发送给所有的slave slave在收到消息之后返回ack...响应给master master在收到超过半数的ack之后,把消息标记为committed 发送committed消息给所有slave,slave也修改状态为committed 你知道RocketMQ为什么速度快吗
ChatGPT出来半年多了,用GPT编码的程序员有多少?虽然没有数据支撑,但我感觉用AI编码程序员并不多。我问过几个朋友,他们的回复是,AI没办法完成他想要完成的任务,最终还是得靠自己去写。...我感觉不是。但为什么会造成这样现象?我总结有2个原因 prompt的问题,比如把需求描述的不够细,AI在不了解细节的情况下只能猜。如果你没办法把需求描述清楚,AI肯定是没办法帮你完成任务的。...而且这个时间我相信并不会太长。 对AI期望太高,很多AI回复的代码并不能立马运行,在这个过程中很可能出现报错。这样就需要来来回回跟AI沟通,才能搞定。...但用GPT,一分钟不到,初版的程序就写好了。虽然第一次返回的结果里有个小BUG,但就一句话,改完后就能正常运行了。 总用时不到5分钟。...作者:键盘老师 它会根据你的提问让你补充细节,这样来来回回几次,你就能写出更好的提示词了。
在多次的面试和笔试当中也收获了许多的经验,日后如果有时间,我也将分享一些有意思的东西。 好了,废话少说,回归到今天的主题。今天想要分享的是内联函数和宏定义。在我的某次笔试中也出现过一次。...题目大意问的是在C语言和C++中分别用什么来处理一段短小、反复被调用的代码。我虽然回答出来了,但其实我当时并不是特别了解内联函数,只是听过而已。今天就来稍微理一理。...宏定义相信大家都很清楚了,即使是初学者,也知道宏定义有个好处是可以批量的替换一些变量啊或者一小段代码,提高程序的移植性。但是内联函数可能不是大家都知道。...为什么要引入内联函数呢?主要是为了消除函数调用时的系统开销,以提高运行速度。...这里使用的是C++,本来想用C的,但是在我的vscode上好像不支持inline,干脆就用C++了。 既然宏定义和内敛函数都可以完成替换,为什么还要引入内联函数呢?
,但这不是本文关注的重点。...所以这个流程是这样的: 客户端执行主动关闭,发送FIN报文,告诉服务端,我没有数据要发送了,我要关闭连接,当然了,你有啥数据要给我,我随时候着 服务端收到后,必须及时告诉客户端我收到了,因此先回复客户端一个...但是服务端可能还有未发送完的数据,因此它可以将自己未完成的数据进行发送,发送完成之后,再发送给客户端FIN报文,表明我也没啥要发送的了,关闭吧 客户端收到后,也回复ACK响应,最终关闭连接 因而整个过程需要四次挥手...为什么要TIME_WAIT状态 TIME_WAIT也称为2MSL等待时间。MSL为报文最大生存时间,它是任何报文在被丢弃前存在于网络内的最长时间。这个时间在不同类型的系统中可能有所不同,但这不是关键。...那么为什么又说是为了避免收到老的重复报文呢?
特殊配列 GH60 键盘设计组装笔记 上次用 XD60 制作了一块特殊配列的键盘。虽然用着非常满意,但是终究不是用 GH60 的标准制作的。因此,心里一直很痒痒,希望用 GH60 再做一块键盘。...一般来说是没有问题的。但如果出了问题。。。。赶紧退货呀!!~~~ 安装平衡轴 平衡的安装虽然很简单,但是我想很多人第一次安装,还是比较费劲的。...开始焊机械轴体 具体怎么使用电洛铁我就不详细说明了。我感觉这东西比较简单,尝试两下就应该没问题了。 需要注意的是,送焊锡不要省,焊点饱满就可以了。另外,时间不要太长,容易把旁边的电阻什么的搞坏。...毕竟不是什么太精密的玩意儿。 [焊点完成] 这是我的作品。自我感觉良好。 焊发光二极管 因为这块键盘是送人的,不知道他喜欢什么样的灯光布局,所以我就没焊上,让他自己去焊。...GH60 机械键盘完成成品欣赏 [GH60 机械键盘完成成品1] 因为 1.75x 的键帽还没收到,所以先用一个键帽代替了。 [GH60 机械键盘完成成品2] 键帽已经到了,现在看上去完美了一些。
特殊配列 GH60 键盘设计组装笔记 上次用 XD60 制作了一块特殊配列的键盘。虽然用着非常满意,但是终究不是用 GH60 的标准制作的。因此,心里一直很痒痒,希望用 GH60 再做一块键盘。...一般来说是没有问题的。但如果出了问题。。。。赶紧退货呀!!~~~ 安装平衡轴 平衡的安装虽然很简单,但是我想很多人第一次安装,还是比较费劲的。我这里拍了几张照片,仅供参考 ?...开始焊机械轴体 具体怎么使用电洛铁我就不详细说明了。我感觉这东西比较简单,尝试两下就应该没问题了。 需要注意的是,送焊锡不要省,焊点饱满就可以了。另外,时间不要太长,容易把旁边的电阻什么的搞坏。...毕竟不是什么太精密的玩意儿。 ? 这是我的作品。自我感觉良好。 焊发光二极管 因为这块键盘是送人的,不知道他喜欢什么样的灯光布局,所以我就没焊上,让他自己去焊。...GH60 机械键盘完成成品欣赏 ? 因为 1.75x 的键帽还没收到,所以先用一个键帽代替了。 ? 键帽已经到了,现在看上去完美了一些。不过这套键帽是我手上一堆键帽里面挑出来的,颜色搭配不是很好。
《不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT》 《不为人知的网络编程(四):深入研究分析TCP的异常关闭》 《不为人知的网络编程(五):UDP的连接性和负载均衡...到C10M高性能网络应用的理论探索》 《简述传输层协议TCP和UDP的区别》 《为什么QQ用的是UDP协议而不是TCP协议?》...与此同时,会 ACK x+1,告诉客户端“已经收到了 SYN,可以发送数据了”; 客户端收到服务器的 SYN 后,回复一个 ACK y+1,这个 ACK 则是告诉服务器,SYN 已经收到,服务器可以发送数据了...不是说,一个端口只能绑定一个 socket 吗?其实这个说法并不够准确。 前面我说的TCP 通过端口号来区分数据属于哪个进程的说法,在 socket 的实现里需要改一改。...终止符的方案虽然要求我们对数据进行扫描,但是如果我们可能从任意地方开始读取数据,就需要这个终止符来确定哪里才是消息的开头了。 当然,这两个方法不是互斥的,可以一起使用。
如上图,obj5,obj6,obj7,虽然互相关联,但是和GC Roots是不可达的,可以认为他们是可回收对象.接下来我们说一下HotSpot的算法实现....安全点 那是不是每一条指令生成OopMap呢,显然不是这样的,不然GC的空间成本将会变得很高。...,所以安全点的选定,基本就是以程序“是否具有让程序长时间执行的特征”为标准选定的,因为每条指令执行时间都非常短暂,程序不太可能因为指令流长度太长这个原因为过长的时间运行(开始看到这不是很明白,其实就是这句话的意思是说...,方法调用后,方法临返回前,抛异常的位置)....线程在进入 Safe Region 的时候先标记自己已进入了 Safe Region,等到被唤醒时准备离开 Safe Region 时,先检查能否离开,如果 GC 完成了,那么线程可以离开,否则它必须等待直到收到安全离开的信号为止
[p4.png] 溢出考虑不全 这位大佬说我的代码在防止int64溢出时不够安全,难道溢出不是这样判断吗?...得有测试 大佬还指出了另一个问题,兄弟,你写的代码得有有测试啊! [p8.png] 虽然我给开源项目提交代码不多,但也知道这点,为什么这次没写呢?...这段代码在上述溢出判断加之前执行,一定是失败的,溢出判断加了之后,则可正常执行。 接下来就是等待回复,等了很久很久,Go的研发周期是以半年记,等得我都差点忘了这件事了,直到一天邮件提醒我。...所以我们是不是全程的计算都用float64更合理呢? 测试了下,float64范围大的离谱,感兴趣可以试试,就不贴数据了,太长!...最后说一句 虽然这次提交比较失败,但还是有点收获,等我忙完这阵,抽空出来再改改,说不定就被Merge了,大家祝我好运吧,今天的分享到这,我们下期再见!
面向字节流 虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。...此时,客户端等待 2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。...第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗? 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!...如果主机1直接 关闭,由于IP协议的不可靠性或者其他网络原因,导致主机2没有收到主机1最后回复的 ACK。...参考内容 知乎-TCP 为什么是三次握手,而不是两次或四次?
不必考虑如果自己的表达与C语言编辑软件的表达要求不一致会影响代码的正确性。其实编辑软件遇到注释标志符号就会跳过相应的语句,所以讲解没有任何的标准,只要能够表达出意思就可以,但也不能太长。...大括号里的每一行代码的结尾都有分号,这个分号是英语中的分号,不是中文的分号,是C语言中一条语句(代码)的结束标志。告诉编译器该行的代码(功能)到此截止。...虽然可以把多行的语句放在一行,中间也有分号告诉编辑器这是多条语句,但是一行语句太长的话不方便查看。 如果仔细的看代码的话,会发现第五和第六行的语句前面有空格,没有从改行的开头编写。...一眼便能看出什么是语句块,什么是函数的开头部分(大括号的前后部分分别为函数的开始和结束标志)。一般想分隔清楚的话用两个空格分开,或者一个Tab键(在键盘的左上角)。...这是变量的特性。 如果有问题的可以在公众号回复栏中写出问题描述发给我,我看到的话会进行相应的回复。如果发现文章有问题,也欢迎在公众号回复栏中提问,我会查阅资料进行确认并做出修改和回复。
虽然你可以使用手机和应用程序来关注所有事情,但在家中放置一个大型低功耗显示器以显示家人的日程不是更好吗?电子墨水日程表刚好满足!...image.png 硬件 这个项目是作为假日项目开始,因此我试着尽可能多的旧物利用。其中包括一台已经闲置了太长时间树莓派 2。由于我没有电子墨水屏,因此我需要购买一个。...我没有添加 USB 键盘,而是选择了一种更简单的解决方案,并购买了一个类似于在 这篇文章 中所描述 1x4 大小的键盘。这使我可以将键盘连接到树莓派中的某些 GPIO 端口。...最后,我需要一个相框来容纳整个设置。虽然背面看起来有些凌乱,但它能完成工作。 image.png 软件 我从 一个类似的项目 中获得了灵感,并开始为我的项目编写 Python 代码。...我可以专注于设计用户界面,其中包括每个人的周历和每个人的日历,以及允许使用小键盘来选择日程。并且我花时间又添加了一些额外的功能,例如特殊日子的自定义屏幕保护程序。
公众号Python爬虫系列文章基础写完了,所以就有了一些实战题目,有兴趣的可以来去围观一下.,为什么要进行Python项目实战 项目实战第二季 你真的会用Python做一些事情吗?来试试!...作业1 基础题目1 目标:掌握Python基础部分1 题目太长,这里展示不方便,请后台回复 Python基础部分1 作业2 基础题目2 目标:掌握Python基础部分2,偏对理论的一些动手能力 将一个列表的数据复制到另一个列表中...从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。 输出 9*9 乘法口诀表。...scrapy取B站web端数据,并下载高清视频 目标:学会使用scrapy进行大规模抓取数据 标题: 图片: 时长: 作者: 播放量: 然后代码打包压缩提交到星球,并放出效果图, 我会审核, 所有题目做完后我都会做一个总结...,把相关知识点整理一下,方便大家熟练掌握,然后代码也会给出来,代码不一定是我写的,也可能是你写的,但所有代码我都会进行审阅!
问题1:为什么要区分前台进程和后台进程呢??为什么前台进程只能有一个呢?? ——>为了区别又谁来获取键盘输入的资格!! 问题2:ctrl+c为什么能杀死前台进程呢??...2.3.4 模拟实现kill命令 2.4 异常(硬件条件) 2.4.1 除0异常和野指针的解析 除0错误收到了8号信号 野指针收到了11号信号(段错误) 问题1:OS是怎么知道进程的内部出现除0错误的...所以必须向该进程发送强制终止的信号 ——>OS是通过不同的寄存器或者寄存器里不同的标记位来判断是哪种异常的,所以异常是首先表现在硬件上,然后由OS识别过后再发送相关的信号给当前正在cpu上运行的进程!...(土一点说,异常捕获不是为了让你不死,而是为了让你死个明白,或者死之前托付一些重要的事情。) 问题8:OS明明可以直接干掉进程,他狠起来连自己都可以干,可他为什么不这样做呢??...——>所以我们会发现OS虽然像个皇帝一样高高在上,但他的行为其实也是要受到约束的,不能无脑地去行事!! 2.5 软件条件 异常并不是只会由硬件产生!
大家好,又见面了,我是你们的朋友全栈君。...由于TCP 通信中,数据以“流”的形式传输,数据之间没有边界,如下图所示: 虽然接收到的数据无法确认边界,但是将每次接收到的数据拼接在一起,它们的字节顺序跟发送方发送数据的顺序一致,这就是TCP通信中数据的...,通过对比结果就可知道该帧标志所在的请求帧有没有得到服务端回复。...如异步连接的回调函数启动异步接受,异步接受的回调函数中启动下一个异步接受,中间发生异常则视为通信断开,以此达到循环接受数据的目的。...数据传输如下图所示: UDP 通信中虽然数据报的传输是无序的,但是对于每一次发送的数据而言,接收方接收到的数据顺序跟发送时的顺序相同。
面向字节流 虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应该程序传送的数据块太长,TCP就可以把它划分短一些再传送。...第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗? 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!...在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了,如果是两次,那将无法确定。 2. 为什么要四次挥手?...: 如果主机1直接 关闭,由于IP协议的不可靠性或者其他网络原因,导致主机2没有收到主机1最后回复的 ACK。...参考内容 知乎-TCP 为什么是三次握手,而不是两次或四次?
这里提醒一些,这里发送的报文都是采用 UDP 报文,而不是 TCP 报文哈,下同。...报文来作为自己的 ip,一般是选择最先收到的 offer 报文,选择好之后,会给对应的 DHCP 服务器次发送一个 request 报文,意在告诉它,我看中了你的报文。...DHCP 收到 request 报文之后,会给它回复一个 ACK 报文,并且把这个分配出去的 ip 进行登记(例如把这个 ip 标记为已使用状态)。...如果服务器判断客户端可以继续使用这个 IP 地址,就回复 ACK 报文,通知客户端更新租约成功。如果此IP地址不能再分配给客户端,则回复 NAK 报文,通知客户端续约失败。...最后 这个过程中,涉及到听多种报文,为了篇幅不要太长,我有些报文没有详细说,这里为了方便大家查看,我把所有报文都总结了一下 报文类型 描述 Discove DHCP客户端请求地址时,会在本地网络内以广播方式发送请求报文
当然,我们自己定制化键盘,对于我来说,最重要的是实现自己希望的配列,而不是其他。或者,你是为了灯效? 客制化键盘组装 在淘宝下单之后就进入了漫长的等待过程。然后,就收到包裹啦!...要知道,我上一次使用电洛铁还是16年前上高中的时候。这都多少年了呀。 没关系,咱就是胆大心细。耐心的来,焊锡的注意点主要就是,不能焊太长的时间。从结果上来说,就是不能虚焊。...可以先安装 Caps 灯,因为这个灯是可以直接按键点亮的。我们先不用焊,而是连接上电脑测试一下,看看有没有问题,一般来说,虽然会接触不良,但是拨动一下,还是能够点亮的。...是不是有点素? 嘿嘿,其实我就是喜欢这个调调的。 键盘组装好了,但是,使用的时候会发现,配列和我设计的完全不是一会事儿呀。 我们还需要最后一步,刷配列。...不过这一步可能不同的商家会有不同的方案,虽然都是开源的,但是可能会出现一些修改,商家肯定会给你刷的教程的。我就不再重复了。 如果你也希望有一个自己独特的键盘,强烈推荐你入坑客制化键盘。