公共
文章平均质量分 86
烟草的香味.
这个作者很懒,什么都没留下…
展开
-
为什么不建议使用goto
最近在公司代码review过程中, 看到同事的代码中大量使用了goto, 我给出了"不用 goto"的建议. 但其给出的理由是使用goto更简单. 确实, 使用goto可以使得逻辑更简单直接, 但前提是不乱用goto, 而在公司的项目中又很难保证这一点.原创 2024-11-08 23:48:56 · 485 阅读 · 0 评论 -
GPU扫盲
这篇文章不涉及GPU的具体原理, 仅做大概描述, 将其与CPU区别说明白就好.原创 2023-07-08 16:50:26 · 472 阅读 · 0 评论 -
零拷贝简介
什么是零拷贝呢? 这个词想必听过不止一次了吧, 但一直没有认真的研究一下这到底是个什么玩意.在很久之前, 一次IO 操作的流程大致是这样的:假设, 这里的 IO 设备是磁盘, 那么磁盘的一次操作流程如下:在上面的数据获取的过程中, 发生了3次数据的拷贝, 其中2次是 CPU 全程参与的. 而这个过程, CPU 忙于拷贝数据, 无暇做其他工作.为了减轻 CPU 的压力, 应运而生.做的事情, 简单说来就是上图步骤2. 数据从 IO 设备缓冲区到内核缓冲区的拷贝工作, 不需要CPU 参与, 也就腾出一定的时间来原创 2023-04-08 17:53:23 · 648 阅读 · 0 评论 -
使用非递归来实现递归
今天突然想到一个非递归实现递归函数的通用解原创 2023-02-07 23:01:25 · 997 阅读 · 0 评论 -
HTTP发展历程
为了满足好奇心吧, 简单介绍下HTTP的各个版本. 了解HTTP协议是如何一步步发展至今的.这篇文章不会涉及太多原理。原创 2022-12-14 23:29:12 · 390 阅读 · 0 评论 -
RESTful API规范
我现在工作的公司是在毕业前实习的公司, 实习结束后直接转正, 因此也是我任职过的唯一一家公司.在日常工作进行 HTTP 接口的开发时, 发现了一个疑惑, 只用到了和请求, 但我们知道 还有等等, 为什么不用呢?并且, 接口的响应码也只有200, 接口是否出错, 会在响应体中额外添加字段来标识. 当然, 偶尔也会碰到之类的响应码, 不过他们都还没有到业务层就返回了, 因此并不是我们主动涉及的响应码. 但是, HTTP 响应码辣么多, 为什么不用呢?就在我苦苦思索仍不得其解的时候, 我去翻看了一下 HTTP 协原创 2022-07-10 21:57:20 · 370 阅读 · 0 评论 -
CPU的分支预测
最近在进行性能调优的时候, 碰到了这样的一段代码(为了展示问题而简化的代码):其中的两次运行操作基本一致, 均完成了十亿次循环. 按理说他们的运行时间应该是一样的呀. 但是, 浅看结果:虽然每次运行的时间都不一样, 但是, 第二种方式每次都要比第一种多出来2-3秒.what? why? 于是我想, 有没有可能是运行顺序的原因. 因此我将第二种放到前面运行, 结果也相应的颠倒了.因此, 得出结论. 多层遍历时, 相比于由大到小(外圈大, 内圈小), 由小到大要运行的快一些. 上一边子去, 这算哪门子结论.原创 2022-06-10 09:17:31 · 1032 阅读 · 0 评论 -
进程切换时是如何保存上下文的
前言当前操作系统大部分采用分时的进程调度, 既每个进程运行一小段时间, 然后切换到下一个进程运行, 依次往复.当进程运行的时候是独占CPU的, 此时操作系统是无法强行介入的, 为了将执行权让出来, 就需要硬件的配合了. 硬件每个一个时钟周期(比如10ms), 就会产生一个时钟中断, 而这个时钟中断会将执行权强行交给操作系统的调度进程, 然后由调度进程进行后续处理.以上, 就是我在第一遍看操作系统时留下的印象, 但有几个问题当时没有搞明白:如何保存进程的上下文? 在将进程暂停后, 为了之后再次运行,原创 2022-05-22 13:09:41 · 2607 阅读 · 0 评论 -
printf缓冲区踩坑
问题碰到了这样一段代码(经过简化的):#include "stdio.h"#include "unistd.h"#include "sys/wait.h"int main(){ fork(); printf("1\n"); fork(); printf("1\n"); wait(NULL); return 0;}这里我们简单算一下, 结果会打印几个1嘞?进程数: 2, line: 6进程数: 2, line: 7 打印数: 2进程数原创 2022-05-14 18:09:22 · 335 阅读 · 0 评论 -
shell重定向
前言在编写shell脚本的时候, 可能这种命令经常写: command > ./a.log. 这段很容易理解, 就是将command命令的输出写入到a.log文件中. 但有时还需要处理输入流 或者错误流.甚至于又时看到别人写的命令, 也有种看不懂的感觉, 比如 :command 1>&- 2>/dev/null &cat >1.txt<<EOF文件内容EOF在经历了一段时间的困惑后, 决定好好看看重定向的具体方式.介绍先来简单介绍在重原创 2022-05-09 16:36:57 · 2429 阅读 · 0 评论 -
自旋锁与互斥锁
前言在编程中经常需要使用到互斥. 互斥就是, 这个事情只能有一个人干, 我正在做着的时候, 别人要想做这件事就得等我做完了.互斥的实现是通过锁的机制, 也就是我把这块锁上了, 别人就进不来了, 等我做完再把锁释放掉.但是, 前辈们已经证明了, 要想单纯的在软件层面上实现锁的机制是很难的, 即使是简单的一条加1的操作, 在CPU执行时也需要如下几步:将变量从内存读到寄存器寄存器中的值加1将寄存器中的值写回内存而中间任何一步发生切换, 都可能导致锁机制的失败. 因此, 在软件层面的实现代价是很原创 2022-05-04 13:52:12 · 422 阅读 · 0 评论 -
常用搜索引擎及语法
在平常需要进行搜索的时候是不是只知道Google Baidu ?? 他们其实是全文搜索引擎, 还有一些特定领域的搜索引擎. 而且, 搜索时可以添加特定语法, 让你的搜索事半功倍.本文整理各种场景下使用的搜索引擎, 以及各个搜索引擎支持的语法, 不定期进行更新.如果你知道其他搜索引擎, 也欢迎在下方留言告诉我呦~汇总搜索引擎类型名称地址备注全文搜索引擎谷歌https://www.google.com/全文搜索引擎谷歌一家独大百度https://www.baidu原创 2022-04-22 10:47:12 · 609 阅读 · 0 评论 -
base64编码原理
引出众所周知, ASICC编码共127个, 使用了7个bit进行编码. 而文件在存储的时候是以 字节为单位, 也就是8bit. 这就难免导致有一部分编码是没有定义在ASICC编码中的.而在网络中传输二进制数据的时候(字符串本质上也是二进制数据嘛), 如果直接传输比特流, 倒也不是不可以, 只是肉眼难以识别造成不便. 比如你在调试HTTP接口的时候, 对面传输的是一段字符串, 你抓包看到的都是一堆方块, 什么心情. 而且一些特殊的编码会影响对数据的解析, 造成解析错误.而ASICC编码是最通用的, 故而原创 2022-03-26 12:41:11 · 323 阅读 · 0 评论 -
OAuth2.0介绍
为什么关于OAuth出现的背景, 在上一篇OAuth1.0介绍 中已经写过了, 而2.0的提出必然是为了解决1.0中出现的问题. 感兴趣的可以去看看.2.0针对1.0的问题提出了解决方案, 将协议升级为HTTPS 同时取消了secret加密签名. 对非 web 应用也进行了支持.介绍OAuth是什么呢? 在RFC 文档中是这样介绍的.The OAuth 2.0 authorization framework enables a third-party application to obtain原创 2022-02-19 21:02:14 · 349 阅读 · 0 评论 -
OAuth1.0介绍
背景为什么需要OAuth授权呢?最典型的应用场景就是第三方登录了, 我们开发了一个网站希望用户可以QQ登录, 但是怎么能拿到用户的 QQ 信息呢? 用户将 账号密码告诉我们当然可以, 但是这样有如下隐患:我们拿到了用户的密码, 这样很不安全. 而且任意一个应用被黑, 所有相关站点均受影响QQ 需要支持密码登录, 但是单纯密码登录并不安全. 因此进而影响 QQ 的安全问题我们拿到密码之后, 就相当于拥有了用户的所有信息, 这样无法进行权限限制可能只是希望授权用户名和头像, 但是连着好友列表一起原创 2022-02-19 21:01:56 · 3593 阅读 · 0 评论 -
wait函数的作用
前言在编写C程序的时候, 通过fork函数来创建新的进程, wait函数来等待子进程结束.那么就有一个问题了, 什么情况下父进程需要等待子进程结束后继续执行呢? 如果需要等待子进程结束, 那直接将操作放到父进程执行不就醒了么? 反正等着也是等着.当然, 还有有一种情况, 任务A 和任务 B 是后续操作的前提条件, 并且两个任务可以并行进行, 此时确实可以父进程执行一个, 子进程执行一个, 然后父进程等待子进程完成后继续操作. 但是, 我还是觉得这个解释并不是那么完美. 这完全可以通过进程通信实现啊.原创 2022-01-03 22:07:35 · 1933 阅读 · 0 评论 -
虚拟内存分页机制的页面置换
前言之前简单介绍过虚拟内存是如何与物理内存进行地址映射的: 虚拟内存分页机制的地址映射, 但是仅仅地址映射是不够的, 在地址映射说过会有缺页的情况, 此时就需要操作操作系统将缺少的页加载到内存中. 但是, 如果内存满了怎么办呢? 毕竟虚拟内存一般都要大于物理内存的, 不可能将所有虚拟内存中的内容都加载到物理内存中.当需要加载虚拟内存中的内容时, 发现物理内存已经没有空闲空间了. 肿么办嘞? 淘汰一个旧页面, 就可以腾出空间来加载新的页面了. 既然涉及到淘汰, 那么淘汰哪一个页面就是一个问题了. 这篇文章原创 2021-12-02 22:12:41 · 550 阅读 · 0 评论 -
虚拟内存分页机制的地址映射
概述在之前的文章虚拟内存对分页机制做了简单的介绍. 还有一个疑问, 那就是如何将虚存中的逻辑地址映射为物理地址呢? 今天就来简单分析一下.对于一个分页的地址来说, 一般包含两个元素:页号: 第几页偏移量: 当前页的第几个字节以下以 addr_virtual(p, o)表示一个逻辑地址, 以addr_real(p, o)表示一个物理地址(物理地址也是分页的).页表第一步先想一下, 如果要根据一个逻辑地址找到对应的物理地址, 那么这个对应关系必然是存放在某个地方的, 因为映射是没有规律的嘛.原创 2021-11-21 19:38:45 · 1283 阅读 · 0 评论 -
pixiv小控件
前言最近看到一个大佬, 开源了一款博客小插件, 地址. 可以将pixiv网站的日榜放到博客侧边栏. 看上去很炫酷. 于是我也引入到了自己的博客中. 在此向大佬表示感谢.但是在使用过程中, 经常遇到访问很慢的情况, 查看之后才发现, 大佬的服务器架设在韩国, 难怪访问比较慢, 都走国际带宽了.于是, 我就在北京搭了一个, 如果需要的话可自行引入. 效果可到主页查看. 地址: https://fun.hujingnb.com/pixiv/i使用我使用的是WordPress, 就以WordPress为例原创 2021-09-30 00:26:08 · 193 阅读 · 0 评论 -
阿里云定时任务并自动释放
前言最近写了一个爬虫脚本, 脚本跑在一台北京的 ecs 上. 但奈何因某种未知力量, 需要连接代理才能访问目标网站.本来想着自己搭代理, 但是太贵了, 就暂时搁置了. 直到我发现了这个:阿里云香港的服务器, 一个小时才5分钱. 如果脚本直接跑在香港服务器上不就可以了咩, 按照这个价格, 我每天使用一个小时, 一个月也就不到两块(流量另付).窥探我的基本思路是这样的:北京 ecs 定时任务, 创建并启动香港 ecs在香港 ecs 上执行任务任务执行完成后, 将香港 ecs 删除说干就干原创 2021-09-27 00:12:20 · 800 阅读 · 0 评论 -
WordPress架构简单剖析
前言最近在搭建自己的博客站点时, 选择了网站使用较多的WordPress, 随着慢慢的使用, 它灵活的插件和主题令我折服. 基本上任何想要实现的功能, 都可以在上面通过插件的形式进行添加. 无论是在访问前的缓存、访问后的统计、访问中的过滤、各种流程的修改等等, 几乎都能够以插件的形式进行修改. 我觉得这太酷了, 如果在我平常业务上能够将架构写成这样, 还有什么需求变化能难倒我?基于这个原因, 我对WordPress进行了简单的分析, 这就是开源的好处嘛. 我从index.php文件一步步跟踪了整个请求的原创 2021-08-07 11:48:56 · 1314 阅读 · 0 评论 -
计算机是如何进行时间同步的
WHY在网络世界中, 各个计算机之间要想协同工作, 时间同步是一个十分重要的基础. 在计算机内部是有自己的时间的, 这个时间通过内部的晶体振荡器差生的固定频率, 来模拟时间流逝进行计算. 虽然频率十分稳定, 但也是有误差的, 虽然现在的工艺水平误差已经十分小了. (关于震荡的具体原理, 在此不表)既然本地时间会产生误差, 那么就会造成两台服务器的时间不一致. 要消除不一致, 就需要有一个统一的时间标准, 然后大家都以这个标准为基准时间并对自己的本地时间进行校准, 既协调国际时(UTC), 关于这个时间是原创 2021-07-24 17:02:21 · 864 阅读 · 3 评论 -
nginx 配置文件的匹配规则
引出之前在对php-fpm 进行nginx代理时, 为了对后台限定 IP 访问, 添加了如下配置:location ^~ /admin { allow 127.0.0.1; deny all;}结果呢? 所有admin路径下的php文件, 全都没有解析, 变成文件下载了. 当时我不知道是什么问题, 不过将这段配置去掉之后, 问题就消失了. 所以, 我可以肯定的是, 一定是这段路径匹配的问题, 导致没有走php-fpm的解析.探究为了探究原因, 我查找资料并做了尝试. 如果想直接原创 2021-06-26 11:58:07 · 821 阅读 · 0 评论 -
搭建个人博客
一直都想着搞一个自己的个人博客, 拖着这么久, 最近终于开始动手了. 故留下一篇完整的记录, 若你也刚好有相同的需要, 那这篇文章应该恰好能够帮助到你.准备云服务器个人域名如果没有云服务器, 将应用跑在自己的电脑上, 通过内网穿透大概也能达到效果, 但是个人电脑实在没有稳定性可言, 万一停个电断个网啥的就挂了. 所以, 一个云服务器还是很有必要的.如果没有个人域名, 直接通过 IP 访问也可以, 但是毕竟不够友好, 而且确定 IP 就意味着你无法更换服务器. 比如你想将服务器从内地挪到香港,原创 2021-06-20 22:33:54 · 799 阅读 · 3 评论 -
git 操作二进制文件
平常用git进行项目管理已经稀松平常了, 今天咱来点不一样的.平常管理的都是普通的文本文件, 如果是二进制文件, git能够处理么? 比如word文档. 测试一下.新建一个项目, 在其中创建test1.docx, test2.txt两个空文件并提交. 之后编辑文件并添加标题, git diff看一下效果:效果很明显, 文本文档能够清除的看到变动, 而二进制文件只能看到. 这对于需要对这种二进制文件进行版本管理的需求来说, 有些不尽人意. 如此, 这版本管理有和没有也没什么两样, 你也不知道在那次修改原创 2021-06-05 14:25:28 · 1880 阅读 · 0 评论 -
路径.git下的文件
用了这么久的git, 可以毫不谦虚地说对git是一无所知. 每天用来用去的就是commit, add, merge 等几个有限的命令, 这不符合我这刨根问底的性格啊. 不行, 得研究研究, 从哪里下手呢? 别的咱先不说, 所有 git 项目都有这么一个文件夹.git, 不如就从它入手 ? 那咱就看看这个文件夹下都有些什么妖魔鬼怪.先来想一想, .git文件夹下保存了git仓库的所有信息, 那么就包括:提交历史暂存内容当前分支远程分支路径等等好, 来看一看都有些什么:内容都在这了, 好原创 2021-05-23 15:10:23 · 794 阅读 · 1 评论 -
软件工程模型
你在工作中, 软件的开发流程是怎样的? 你是否想过, 除了你当前使用的流程, 还存在其他怎样的流程? 现在的流程有哪些问题, 又能够如何解决? 别说, 前辈们已经给出了一些项目流程的模型, 既软件工程. 可以简单了解一下, 带动一下我这生了锈的脑子.在很久以前, 一个软件的从想法到落地, 还没有什么可供参考的流程, 基本上就是边提需求边开发, 毫无章法. 对于当时的项目来说, 因为规模不大, 这种方式就已经 OK 了. 但随着后面功能越来越复杂, 项目越来越大, 就逐渐暴露出了一些问题, 整个项目开发流程原创 2021-05-01 19:28:17 · 159 阅读 · 0 评论 -
函数式编程
工作以来, 在编写程序的时候一直使用面向对象的思想. 当然, 对函数式编程也有所耳闻, 但也仅仅是有所耳闻, 从来没有上手写过.最近没事的时候就找些资料看看, 同时也尝试自己写一些函数式编程思想的代码. 毕竟这也是一种编程思想嘛, 虽然应用没有面向对象这么广泛(当然, 也可能仅仅是我觉的, 毕竟我在使用中全部都是面向对象), 但了解其编程思想, 对于解决问题也提供一种新的思路不是.以下简单总结一下我最近对函数式编程的体验.最开始, 我以为将面向对象中的类为基本单位, 换成函数为基本单位, 就是函数式编原创 2021-04-16 23:08:38 · 107 阅读 · 0 评论 -
虚拟内存
引出众所周知, 在早期, 操作系统还没有分时的概念, 当时都是单进程执行, 只有一个进程结束了, 才能执行后一个进程. 但是这样的执行很容易想到的一个问题, 若进程在空闲状态, 则 CPU 就空下来了, 造成无谓的浪费. 后来为了解决这个问题, 于是进程可以主动申请轮换, 将当前时间交由其他进程. 但若是一个进程一直不出让控制权的话, 又退回到之前的情况了. 于是有了现在的分时系统, 即每个进程执行一小段时间, 然后强制切换到另一个进程执行, 由于切换的时间很短, 视觉上造成了很多进程同时执行的错觉.但原创 2021-01-23 18:35:01 · 188 阅读 · 0 评论 -
变量的作用域
起因最近闲来无事, 在 Python 官网上看到了2.0版本, 是2001年的.打算装起来体验一下最初发布的版本, 但是发现只有 Windows 版本, 所以我就装了个 Windows10的虚拟机, 就在我打算安装的时候, 发现:这激起了我的好胜欲, 于是我就依次安装了Windows 8, Windows 7, Windows XP, 功夫不负有心人, 终于在XP系统上装上了. (现在的很多网站, 在XP系统的 ie 上已经打不开了. )想必大家没怎么见过Python 2.0的安装过程 吧, 在原创 2021-01-16 17:05:52 · 174 阅读 · 0 评论 -
浮点数运算丢失精度
今天碰到了这样一个情况, 使我又去翻阅了原来课本, 在Pthon中如果输入下面这段程序:print(sys.float_info.max - 1.0)print(sys.float_info.max)结果如下:结果发现, 这数字根本没有变化. 本来这没什么, 看这数字, 10的308次方, 也就是说, 减去的1是在308位之后了, 这里没有变化很正常嘛.但是下面的现象就不能解释了:a = sys.float_info.max - 1.0b = sys.float_info.maxprin原创 2021-01-01 22:22:19 · 875 阅读 · 0 评论 -
Hello IPv6
前言IPv4 大家都不陌生, 就是我们平常使用的32位网络地址. 但是, 因为可能在其发展初期, 并没有考虑的十分全面, 故而其存在一些缺陷:32位二进制仅支持约43亿个设备, 还不到全球的人口数量. (故而现在依赖于各种局域网转换技术, 比如 NAT. 否则地址早就不够用了. 但是 NAT 转换, 可以让你访问互联网的设备, 但是外面的设备不能访问你. )不支持 Qos. 简单说就是语音通话的数据包优先级要高于文件下载数据包的优先级. 不同的数据流采用不同的优先级来保证信息的及时到达.ARP 欺原创 2020-11-14 11:57:21 · 208 阅读 · 0 评论 -
git 子模块在项目中的使用
在公司的项目中, 经常会遇到一些公共的内容, 多个项目中间通用的, 不可能每次都将整个代码复制一遍, 遇到这种情况有很多不同的解决方案, 一般来说, 项目是通过 git 来管理的, 巧了, git 也同样支持子模块.创建子模块git submodule add git@gitee.com:hujingnb/submodule_son.git submodule_son指定子项目地址, 后面的参数可以更改子模块的路径. 这步操作可给当前项目添加一个子模块.克隆新项目当团队加入新人时, 需要原创 2020-10-31 17:26:22 · 468 阅读 · 0 评论 -
IP 数据报首部分析
来来来, 爷们. 不是一直说纸上得来终觉浅么. 今咱就抓个数据报具体看一看真实网络中的 IP 报首部.操作方法很简单, 使用wireshark进行抓包. 抓包后随便找个包看一下就行, 毕竟所有通信的包都需要经过网络层.(同时,wireshark会对协议的相关信息给出标识, 更方便我们查看)其中数据链路层的首部信息在整个数据的最前面, 其后跟着的是网络层, 传输层, 最后剩下的是传输的数据内容. 这个很好理解, 数据从上到下, 每过一层, 都会添加对应的头部信息, 先过传输层就先加上咯.咱们.原创 2020-10-25 15:21:33 · 2330 阅读 · 0 评论 -
计算机网络-信道复用技术
还记得计算机网络中的信道复用技术么? 来来来, 一起复习一下.why问: 什么是信道复用. 在回答这个问题之前先看这样一个场景:其中u1u2是两个用户, 如果这两个用户之间连通的信道在他们使用过程中, 被他们完全占用了, 其他人就只能等着了. 那有人说了, 那就多架设信道不就好了. 如果说AB之间的信道可以满足20G 流量的传输, 而u1u2在通信的过程中, 只使用了其中的千分之一, 这就造成了资源的极度浪费, 不管从哪方面考虑, 都应该充分利用其传输的性能.而这个时候, 为了...原创 2020-10-17 09:33:53 · 2606 阅读 · 0 评论 -
有了 elseif 为什么还要 switch case
引出你有没有想过既然有了if elseif, 为什么还要设计一个switch case的语法出来呢? 按理说, 一个语言的设计角度来说, 关键词越少越好吧, 而且多出来一种选择分支也没有看出太大用处. 以下几种switch case均可以写成if else的形式(java 代码):// 形式一switch(a){ case 1: break; case 2: break; default: break;}if(a == 1){}else if(a ==原创 2020-07-04 01:53:11 · 460 阅读 · 1 评论 -
设计模式故事会
想着用讲故事的方式对各个设计模式进行一个稍微形象一些的描述. 当然, 某些因为没有想到特别好的例子, 可能比喻的并不是那么的恰当, 望赐教. 绞尽脑汁啊, 尽力贴近设计模式其本来的意图. 主要为了加强一些自己对设计模式的理解. 进入正题:小王是一名心怀梦想的90后青年, 他独自创办了太原现代科技公司, 并召集了一帮志同道合的小伙伴, 梦想改变世界.单例模式太原现代科技公司接到了一个项目, 这时就需要大家发挥各种聪明才智了. 于是, 每个人都将自己的想法记录下来, 然后等到每天开会的时候把每个人的新想法原创 2020-06-27 18:52:49 · 221 阅读 · 0 评论 -
随机数是如何生成的
引出在现实中, 会有抛硬币猜正反的操作, 硬币要么是正, 要么是反, 在揭晓之前, 我们谁也不知道它现在的状态. 而这, 是因为其中存在着很大的不确定因素, 如抛硬币的力度、抛硬币的角度、接硬币的力度和角度、硬币的重量、当前风速等等.但是在计算机中, 要想生成一个随机数, 就需要通过一个算法来实现, 那么生成随机数的算法是如何实现的呢? 简单想一下这个事情, 通过确定的输入, 确定的步骤, 输出不确定的值? 这还是计算机干的事情吗?当然不是, 所以一直都在说函数生成的是伪随机数而不是真正的随机数. 伪原创 2020-06-15 14:08:15 · 2272 阅读 · 0 评论 -
TCP 三次握手的意义
概述在网络的传输层协议中, 存在着两大悍将:TCP和UDP. 从前, 我傻傻的以为自己对他们虽谈不上精通, 但还是知道的, 但是, 我错了, 我被自己问住了, 我傻了. 啥也不是.UDP(这里为了介绍简单, 就不提数据在传输过程中的失真(纠错码)等情况了. 简单介绍一下,TCP才是今天的主角)UDP 就是, 我把数据发给你了, 我不管你有没有收到, 反正我发出去了, 任性. 就比如我要给我的女神表白, 但是我又不好意思, 所以我托我的好兄弟马六帮我给女神带句话, 但是这个马六也脸皮...原创 2020-06-13 01:59:22 · 2604 阅读 · 0 评论 -
计算机全加器简单实现
概述用了这么久计算机, 都知道计算机有一个核心部件叫 CPU, 而 CPU中有一个小部件叫做全加器. 它是用来做什么的呢? 看名字就知道了, 做加法运算用的. 那么如何实现一个全加器呢?你以为这又是一篇计算机内部原理的文章? 不, 放开那个女孩, 和我一起走进中学物理的课堂.问题先把问题抛出来, 我们的全加器大概就长这样.输入端放进来两个数字, 然后输出端返回两个数字的和.抛开全加器不说, 首要问题是: 用什么来标识输入和输出的数字呢?输入输出当然了, 输出输出端都是导线原创 2020-05-19 22:24:06 · 2377 阅读 · 0 评论