随笔分类 - 公共
一些不知道怎么分类的, 嘿嘿
摘要:前提 最近在公司代码review过程中, 看到同事的代码中大量使用了goto, 我给出了"不用 goto"的建议. 但其给出的理由是使用goto更简单. 确实, 使用goto可以使得逻辑更简单直接, 但前提是不乱用goto, 而在公司的项目中又很难保证这一点. 问题 使用goto带来的最直观的问题就
阅读全文
摘要:通过网站 https://regex101.com/ 可以测试正则表达式的匹配结果及匹配过程. 本文章抛开各个编程语言实现差异, 仅做正则本身的介绍, 会尽量将正则这玩意说明白, 使得你看完这边文章后对正则基本可以运用自如. 温馨提示, 这篇文章会比较长, 大致浏览即可. 正确的方式是收藏起来, 等
阅读全文
摘要:# 前言 相信对于软件工程师来说, CPU并不陌生. 人工智能以及机器学习带火了GPU. 经常听到的就是, GPU计算比CPU快, 但具体是怎么快的却从未刨根问底. 之前在听到GPU的时候, 我有过这样的疑问: 1. GPU是什么? 2. 为什么比CPU快? 快在哪里? 如果各方面碾压那CPU不就淘
阅读全文
摘要:是什么 什么是零拷贝呢? 这个词想必听过不止一次了吧, 但一直没有认真的研究一下这到底是个什么玩意. 在很久之前, 一次IO 操作的流程大致是这样的: 假设, 这里的 IO 设备是磁盘, 那么磁盘的一次read操作流程如下: CPU向磁盘发起 IO 请求 磁盘将数据放入磁盘控制器缓冲区(上图步骤1)
阅读全文
摘要:我们应该遇到过很多次类似的题目了吧: 如何将一个递归函数使用非递归的方式实现.. 今天突然想到一个通用解, 就是可以在循环中模拟函数调用的方式来实现. 调用栈 以计算 1~n 的和举例, 递归实现如下(Python为例): def add_up(n): if n <= 1: return n ret
阅读全文
摘要:为了满足好奇心吧, 简单介绍下HTTP的各个版本. 了解HTTP协议是如何一步步发展至今的. 这篇文章不会涉及太多原理 HTTP/0.9 HTTP/0.9 诞生于1991年, 甚至都没有RFC标准, 就是一个简单的文档. 这个版本的HTTP协议, 只是简单规定了: 请求内容为: GET /a/b/c
阅读全文
摘要:一直以来都有一个疑问? 为什么我的身份证号最后一位是个字母嘞? 别人都是数字的呀? 为了搞懂这个问题, 我专门研究了一下身份证号码的组成. 身份证号码组成 我找到了在1999年9月30号发布国务院公报, 其中第16页对公民身份证号码有这样一段介绍: 公民身份号码按照GB11643-1999《公民身份
阅读全文
摘要:前言 我现在工作的公司是在毕业前实习的公司, 实习结束后直接转正, 因此也是我任职过的唯一一家公司. 在日常工作进行 HTTP 接口的开发时, 发现了一个疑惑, 只用到了POST和GET请求, 但我们知道 HTTP还有PUT/DELETE等等, 为什么不用呢? 并且, 接口的响应码也只有200, 接
阅读全文
摘要:前言 最近在进行性能调优的时候, 碰到了这样的一段代码(为了展示问题而简化的代码): <?php // 第一次运行 $start = microtime(true); for ($i = 0; $i < 100; $i++) { for ($j = 0; $j <1000; $j++) { for
阅读全文
摘要:前言 当前操作系统大部分采用分时的进程调度, 既每个进程运行一小段时间, 然后切换到下一个进程运行, 依次往复. 当进程运行的时候是独占CPU的, 此时操作系统是无法强行介入的, 为了将执行权让出来, 就需要硬件的配合了. 硬件每个一个时钟周期(比如10ms), 就会产生一个时钟中断, 而这个时钟中
阅读全文
摘要:问题 碰到了这样一段代码(经过简化的): #include "stdio.h" #include "unistd.h" #include "sys/wait.h" int main(){ fork(); printf("1\n"); fork(); printf("1\n"); wait(NULL)
阅读全文
摘要:前言 在编写shell脚本的时候, 可能这种命令经常写: command > ./a.log. 这段很容易理解, 就是将command命令的输出写入到a.log文件中. 但有时还需要处理输入流 或者错误流. 甚至于又时看到别人写的命令, 也有种看不懂的感觉, 比如 : command 1>&- 2>
阅读全文
摘要:前言 在编程中经常需要使用到互斥. 互斥就是, 这个事情只能有一个人干, 我正在做着的时候, 别人要想做这件事就得等我做完了. 互斥的实现是通过锁的机制, 也就是我把这块锁上了, 别人就进不来了, 等我做完再把锁释放掉. 但是, 前辈们已经证明了, 要想单纯的在软件层面上实现锁的机制是很难的, 即使
阅读全文
摘要:引出 众所周知, ASICC编码共127个, 使用了7个bit进行编码. 而文件在存储的时候是以 字节为单位, 也就是8bit. 这就难免导致有一部分编码是没有定义在ASICC编码中的. 而在网络中传输二进制数据的时候(字符串本质上也是二进制数据嘛), 如果直接传输比特流, 倒也不是不可以, 只是肉
阅读全文
摘要:背景 为什么需要OAuth授权呢? 最典型的应用场景就是第三方登录了, 我们开发了一个网站希望用户可以QQ登录, 但是怎么能拿到用户的 QQ 信息呢? 用户将 账号密码告诉我们当然可以, 但是这样有如下隐患: 我们拿到了用户的密码, 这样很不安全. 而且任意一个应用被黑, 所有相关站点均受影响 QQ
阅读全文
摘要:前言 在编写C程序的时候, 通过fork函数来创建新的进程, wait函数来等待子进程结束. 那么就有一个问题了, 什么情况下父进程需要等待子进程结束后继续执行呢? 如果需要等待子进程结束, 那直接将操作放到父进程执行不就行了么? 反正等着也是等着. 当然, 还有一种情况, 任务A 和任务 B 是后
阅读全文
摘要:最近在写配置的时候, 发现很多配置文件都是用yaml语法, 比如docker-composer k8s等等. 因此整理一下yaml语法以备后续翻阅. 其实很简单, 一眼看上去和json类似. 可以通过网站校验yaml语法是否符合规则: https://www.bejson.com/validator
阅读全文
摘要:前言 之前简单介绍过虚拟内存是如何与物理内存进行地址映射的: 虚拟内存分页机制的地址映射, 但是仅仅地址映射是不够的, 在地址映射说过会有缺页的情况, 此时就需要操作操作系统将缺少的页加载到内存中. 但是, 如果内存满了怎么办呢? 毕竟虚拟内存一般都要大于物理内存的, 不可能将所有虚拟内存中的内容都
阅读全文
摘要:概述 在之前的文章虚拟内存对分页机制做了简单的介绍. 还有一个疑问, 那就是如何将虚存中的逻辑地址映射为物理地址呢? 今天就来简单分析一下. 对于一个分页的地址来说, 一般包含两个元素: 页号: 第几页 偏移量: 当前页的第几个字节 以下以 addr_virtual(p, o)表示一个逻辑地址, 以
阅读全文
摘要:前言 最近看到一个大佬, 开源了一款博客小插件, 地址. 可以将pixiv网站的日榜放到博客侧边栏. 看上去很炫酷. 于是我也引入到了自己的博客中. 在此向大佬表示感谢. 但是在使用过程中, 经常遇到访问很慢的情况, 查看之后才发现, 大佬的服务器架设在韩国, 难怪访问比较慢, 都走国际带宽了. 于
阅读全文