自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小林coding

公众号:「小林coding」 专注图解计算机基础,期待你的关注!

  • 博客(205)
  • 收藏
  • 关注

原创 当打开 CSDN,到网页显示,其间发生了什么?

前言想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题。还别说,这真是挺常问的这题,前几天坐在我旁边的主管电话面试应聘者的时候,也问了这个问题。这次,小林我带大家一起探究下,一个数据包在网络中的心路历程。每个阶段都有数据包的「心路历程」,我们一起看看它说了什么?正文接下来以下图较简单的网络拓扑模型作为例子,探究探究其间发生了什么?01 孤单小弟 —— HTTP浏览器做的第一步工作是解析 URL首先浏览器做的第一步工作就是要对 URL 进行解析,..

2021-05-14 14:31:28 6352 48

原创 给学弟学妹们写了个 15W 字的图解操作系统!

大家好,我是小林。不知不觉在 CSDN 里写了 23 篇图解操作系统的系列文章,总字数高达 15W 字,而且每篇都配了很多自己手绘的图,也算有个体系了。然后图解操作系统文章也帮助到了很多读者,时不时都会有读者给小林发感谢信,说我的图解文章帮助到他们拿到了心意的 offer,这一点我很庆幸,我的文章也影响了一批人。后来,有些读者跟提了个意见,希望这个图解系统能整理成电子文档,这样方便阅读。既然是读者的请求,作为宠粉的 CSDN 博主,那肯定得整理呀,于是我就连忙搞了几天,最终把图解操作系统整理成了电

2021-05-11 09:18:59 32340 96

原创 小学六年级的读者,自学计算机,会爬虫,搞崩过学校网站,还有 Girlfriend.....

大家好,我是小林。我之前遇到一个很奇怪的读者,他的头像是电影《V字仇杀队》里的面具。感觉上去是一个黑客爱好者,不是一个好惹的家伙,小林看了瑟瑟发抖。结果,他来了这么一句,「哥哥,在吗?」我头顶瞬间冒出一万个问号,怎么跟头像冷酷的感觉完全相反。只听过有的读者叫我小林哥,但是还真没遇到过直接称呼哥哥的,能说出这个称呼的话,感觉对方年纪不大。然后,他请教我关于 kali Linux 安装失败的问题要怎么解决,我没有安装过,所以我也没办法解决他的问题,就让他自己去网上搜搜看看。然后,他还是没解决,

2021-05-07 18:50:33 320415 763

原创 给学妹学弟们的看书小建议!

大家好,我是小林。我在 CSDN 输出了两个图解系列,分别是图解网络和图解系统,每个系列都输出了 15W 字 + 500 张图,收到了很多小伙伴的认可和支持,也经常小伙伴跑来感激小林,说看了我的图解,拿到了大厂的 Offer。这次就跟大家分享下我的看书经验和心得。每隔一段时间,都有些读者跑来请教我学习的心得。他们的困惑可以归类这几点:书看不懂,容易放弃,怎么办?看书的效率很低,怎么办?做了很多笔记,依然过会就忘记,怎么办?这些困惑我曾经也经历过,中途也踩过很多坑,浪费了很多的时间,好

2021-05-06 09:44:00 17019 52

原创 面试官:什么是 Reactor 和 Proactor?

小林,来了。这次就来图解 Reactor 和 Proactor 这两个高性能网络模式。别小看这两个东西,特别是 Reactor 模式,市面上常见的开源软件很多都采用了这个方案,比如 Redis、Nginx、Netty 等等,所以学好这个模式设计的思想,不仅有助于我们理解很多开源软件,而且也能在面试时吹逼。发车!演进如果要让服务器服务多个客户端,那么最直接的方式就是为每一条连接创建线程。其实创建进程也是可以的,原理是一样的,进程和线程的区别在于线程比较轻量级些,线程的创建和线程间切换的成本要小

2021-04-26 22:17:00 12698 25

原创 面试官:为什么 0.1 + 0.2 == 0.300000004 ?

我们在 JavaScript 里执行 0.1 + 0.2,会得到下面这个结果:那今天,我们来思考几个问题:为什么负数要用补码表示?十进制小数怎么转成二进制?计算机是怎么存小数的?0.1 + 0.2 == 0.3 吗?…别看这些问题都看似简单,但是其实还是有点东西的这些问题。为什么负数要用补码表示?十进制转换二进制的方法相信大家都熟能生巧了,如果你说你还不知道,我觉得你还是太谦虚,可能你只是忘记了,即使你真的忘记了,不怕,贴心的小林在和你一起回忆一下。十进制数转二进制采用的是除 2

2021-04-21 09:05:52 30182 117

原创 3 万字 + 100 张图带你彻底搞懂 TCP 面试题(强烈建议收藏)

大家好,我是小林,一个专为大家图解的工具人。不管面试 Java 、C/C++、Python 等开发岗位, TCP 的知识点可以说是必问的了。任 TCP 虐我千百遍,我仍待 TCP 如初恋。过去不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧!所以小林整理了关于 TCP 的面试题型,全文共 3 万字 + 100 张图,跟大家一起探讨探讨。1、 TCP 基本认识2、TCP 连接建立3、 TCP 连接断开4、 Socket 编程5、TCP 重传、滑动窗口、流量控制、拥塞控制

2021-04-19 12:39:59 12660 40

原创 很贴心的一份,适合非科班入门计算机的课程路线

大家好,我是小林。有很多非科班的读者问我,怎么入门计算机呀?不瞒大家说,小林其实也是非科班出身,大学期间的专业是电气自动化,后面由于个人兴趣,从事了开发工作,这期间我也自己补了很多计算机专业的知识。这是最好的时代呀,我们想要学习什么,网上资源都有很多,所以什么非不非科班并不是什么理由,只要真心想学,不愁学不会。大家要充分利用好互联网的资源,有很多可以免费白嫖的基础课程。比如:中国大学 MOOC 网它就是一个很好学习的平台,里面的课程都是国内名校老师录制的精品课程,不管什么专业的都有。小林从中国

2021-04-13 14:59:46 7154 10

原创 答应我,这次搞懂 I/O 多路复用!

这次,我们以最简单 socket 网络模型,一步一步的过度到 I/O 多路复用。但我不会具体细节说到每个系统调用的参数,这方面书上肯定比我说的详细。好了,发车!最基本的 Socket 模型要想客户端和服务器能在网络中通信,那必须得使用 Socket 编程,它是进程间通信里比较特别的方式,特别之处在于它是可以跨主机间通信。Socket 的中文名叫作插口,咋一看还挺迷惑的。事实上,双方要进行网络通信前,各自得创建一个 Socket,这相当于客户端和服务器都开了一个“口子”,双方读取和发送数据的

2021-04-12 13:47:12 17559 24

原创 什么是死锁?怎么排查死锁?怎么避免死锁?

突然发现我的图解系统缺了「死锁」的内容,这就来补下。在面试过程中,死锁也是高频的考点,因为如果线上环境真多发生了死锁,那真的出大事了。这次,我们就来系统地聊聊死锁的问题。死锁的概念;模拟死锁问题的产生;利用工具排查死锁问题;避免死锁问题的发生;死锁的概念在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。那么,当两个线程为了保护两个不同的共享资源而使用了两个

2021-04-01 08:48:43 6146 2

原创 HTTP/3 强势来袭?!

HTTP/3 现在还没正式推出,不过自 2017 年起, HTTP/3 已经更新到 34 个草案了,基本的特性已经确定下来了,对于包格式可能后续会有变化。所以,这次 HTTP/3 介绍不会涉及到包格式,只说它的特性。美中不足的 HTTP/2HTTP/2 通过头部压缩、二进制编码、多路复用、服务器推送等新特性大幅度提升了 HTTP/1.1 的性能,而美中不足的是 HTTP/2 协议是基于 TCP 实现的,于是存在的缺陷有三个。队头阻塞;TCP 与 TLS 的握手时延迟;网络迁移需要重新连接;

2021-03-24 21:58:56 4249 3

原创 一起看看 HTTP/2 牛逼在哪?

不多 BB 了,直接发车!一起来看看 HTTP/2 牛逼在哪?HTTP/1.1 协议的性能问题我们得先要了解下 HTTP/1.1 协议存在的性能问题,因为 HTTP/2 协议就是把这些性能问题逐个攻破了。现在的站点相比以前变化太多了,比如:消息的大小变大了,从几 KB 大小的消息,到几 MB 大小的消息;页面资源变多了,从每个页面不到 10 个的资源,到每页超 100 多个资源;内容形式变多样了,从单纯到文本内容,到图片、视频、音频等内容;实时性要求变高了,对页面的实时性要求的应用越来

2021-03-24 21:56:19 3326 3

原创 再也不怕,缓存雪崩、缓存击穿、缓存穿透

用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层,因为 Redis 是内存数据库,我们可以将数据库的数据缓存在 Redis 里,相当于数据缓存在内存,内存的读写速度比硬盘快好几个数量级,这样大大提高了系统性能。引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透。这三个问题也是面试中很常考察的

2021-03-24 21:36:25 8254 6

原创 HTTP/1.1 有点慢,我想优化下!

问你一句:「你知道 HTTP/1.1 该如何优化吗?」我想你第一时间想到的是,使用 KeepAlive 将 HTTP/1.1 从短连接改成长链接。这个确实是一个优化的手段,它是从底层的传输层这一方向入手的,通过减少 TCP 连接建立和断开的次数,来减少了网络传输的延迟,从而提高 HTTP/1.1 协议的传输效率。但其实还可以从其他方向来优化 HTTP/1.1 协议,比如有如下 3 种优化思路:尽量避免发送 HTTP 请求;在需要发送 HTTP 请求时,考虑如何减少请求次数;减少服务器的 HTT

2021-02-24 15:54:45 3851

原创 Linux 内核和 Windows 内核有什么区别?

微信搜索「小林coding」,更多图解系、网络文章等你来撩哦!Windows 和 Linux 可以说是我们比较常见的两款操作系统的。Windows 基本占领了电脑时代的市场,商业上取得了很大成就,但是它并不开源,所以要想接触源码得加入 Windows 的开发团队中。对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,Linux 最大的魅力在于,全世界有非常多的技术大佬为它贡献代码。这两个操作系统各有千秋,不分伯仲。操作系统核心的东西.

2021-02-20 09:47:23 12703 13

原创 给你代码加个“颜值”吧!

每个程序员只要不犯错,都能写出机器能看得懂的代码,程序能正常跑起来,自然就意味着机器正常识别了程序。但是,真正牛逼的程序员是写出能让人看得懂的代码。不要小看这个,虽说我们写的代码确实是跑给机器的,但是代码是人写的,而通常一个项目的开发,需要多个程序员一同协助开发,这时能写出 human readble 的代码就显得至关重要,因为不仅可以减少后期维护的时间成本,而且还能让后面加入的新同事能更快的上手项目。要能写出干净、整洁并让人易懂的代码,必然离不开一些规则,只要自觉遵守、合理运用这些规则,代码通常都.

2021-02-10 13:18:23 3568 1

原创 为了搞懂 HTTPS,我把大学的数学书拿了出来。。。

HTTPS 常用的密钥交换算法有两种,分别是 RSA 和 ECDHE 算法。其中,RSA 是比较传统的密钥交换算法,它不具备前向安全的性质,因此现在很少服务器使用的。而 ECDHE 算法具有前向安全,所以被广泛使用。我在上一篇已经介绍了 RSA 握手的过程,今天这一篇就「从理论再到实战抓包」介绍 ECDHE 算法。离散对数ECDHE 密钥协商算法是 DH 算法演进过来的,所以我们先从 DH 算法说起。DH 算法是非对称加密算法, 因此它可以用于密钥交换,该算法的核心数学思想是离散对数。是不是

2021-01-23 17:33:49 3729 1

原创 几幅图,拿下 HTTPS

我很早之前写过一篇关于 HTTP 和 HTTPS 的文章,但对于 HTTPS 介绍还不够详细,只讲了比较基础的部分,所以这次我们再来深入一下 HTTPS,用实战抓包的方式,带大家再来窥探一次 HTTPS。对于还不知道对称加密和非对称加密的同学,你先复习我以前的这篇文章「硬核!30 张图解 HTTP 常见的面试题」,本篇文章默认大家已经具备了这些知识。TLS 握手过程HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。所以安

2021-01-13 20:38:34 4209 2

原创 带宽、延时、吞吐率、PPS 这些都是啥?

Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层、传输层、网络层和网络接口层,共四层组成,每一层都有各自的职责。应用程序要发送数据包时,通常是通过 socket 接口,于是就会发生系统调用,把应用层的数据拷贝到内核里的 socket 层,接着由网络协议栈从上到下逐层处理后,最后才会送到网卡发送出去。而对于接收网络包时,同样也要经过网络协议逐层处理,不过处理的方向与发送数据时是相反的,也就是从下到上的逐层处理,最后才送到应用程序。网络的速度往往跟用户体验是挂钩的,那

2020-12-15 15:05:36 9858 6

原创 到现在还搞不懂,索引为什么能提供查询性能?

前言昨天,有个女孩子问我提高数据库查询性能有什么立竿见影的好方法?这简直是一道送分题,我自豪且略带鄙夷的说,当然是加「索引」了。她又不紧不慢的问,索引为什么就能提高查询性能。这还用问,索引就像一本书的目录,用目录查当然很快。她失望地摇了摇头,你说的只是一个类比,可为什么通过目录就能提高查询速度呢。唉,对啊,通过书目可以快速查询,这只是一个现象,真正原因到底是什么呢。那女孩看着诧异且表情僵硬的我,满意而又意味深长的笑笑:原来你这个男程序员也不会,看来我还得靠自己研究了。哎,熬夜又要憔悴了我这该

2020-11-27 15:13:19 3377 2

原创 你不好奇 CPU 是如何执行任务的吗?

前言你清楚下面这几个问题吗?有了内存,为什么还需要 CPU Cache?CPU 是怎么读写数据的?如何让 CPU 能读取数据更快一些?CPU 伪共享是如何发生的?又该如何避免?CPU 是如何调度任务的?如果你的任务对响应要求很高,你希望它总是能被先调度,这该怎么办?…这篇,我们就来回答这些问题。正文CPU 如何读写数据的?先来认识 CPU 的架构,只有理解了 CPU 的 架构,才能更好地理解 CPU 是如何读写数据的,对于现代 CPU 的架构图如下:可以看到,一个 CP..

2020-11-06 17:43:44 5555

原创 学完计组后,我马上在「我的世界」造了台显示器,你敢信?

前言今天的主题十分有趣,我们将在我的世界(Minecraft)这个游戏里,靠一个个逻辑门来组合实现一个简单的七段显示器,可以实现将选择的数字输出在显示器上。我会从最基础的与或非实现开始,亲自画出电路原理图,并且用我的世界来带领大家领略数字电子技术的精妙之处。本文所涉及的数电知识包括电路编码、基本逻辑门、组合电路。当然,由于电路的精密性以及游戏里实现的复杂性,实现完整的电路是非常困难的,也会让人难以看懂,一下子就劝退了,这也就违背了我们学习知识的初衷。所以,我会适当的对电路进行化简,让人看起来简单易

2020-10-30 16:34:34 5379 6

原创 10 张图打开 CPU 缓存一致性的大门

前言直接上,不多 BB 了。正文CPU Cache 的数据写入随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色。CPU Cache 通常分为三级缓存:L1 Cache、L2 Cache、L3 Cache,级别越低的离 CPU 核心越近,访问速度也快,但是存储容量相对就会越小。其中,在多核心的 CPU 里,每个核心..

2020-10-27 18:35:42 6432 5

原创 作为技术人,我们如何画出精美的技术配图?我把我画上百张图片的经验,分享给你们

小林写这么多篇图解文章,你们猜我收到的最多的读者问题是什么?没错,就是问我是使用什么画图工具,看来对这一点大家都相当好奇,那干脆不如写一篇介绍下我是怎么画图的。如果我的文章缺少了自己画的图片,相当于失去了灵魂,技术文章本身就很枯燥,如果文章中没有几张图片,读者被劝退的概率飙飙升,剩下没被劝退的估计看着看着就睡着了。所以,精美的图片可以说是必不可少的一部分,不仅在阅读时能带来视觉的冲击,而且图片相比文字能涵盖更多的信息,不然怎会有一图胜千言的说法呢?这时,可能有的读者会说自己不写文章呀,是不是没有必要了解

2020-10-24 13:08:29 6800 6

原创 如何写出让 CPU 跑得更快的代码

前言代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能。CPU 内部嵌入了 CPU Cache(高速缓存),它的存储容量很小,但是离 CPU 核心很近,所以缓存的读写速度是极快的,那么如果 CPU 运算时,直接从 CPU Cache 读取数据,而不是从内存的话,运算速度就会很快。但是,大多数人不知道 CPU Cache 的运行机制,以至于不知道如何才能够写出能够配合 CPU Cache ..

2020-10-18 17:12:57 17246 27

原创 天啦噜!知道硬盘很慢,但没想到比 CPU L1 Cache 慢 10000000 倍

前言大家如果想自己组装电脑的话,肯定需要购买一个 CPU,但是存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,比如你除了要买内存,还要买硬盘,而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。相信大家都知道内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢失的,而硬盘则不会,因为硬盘是持久化存储设备,同时也是一个 I/O 设备。但其实 CPU 内部也有存储数据的组件,这个应该比较少人注意到,比如寄存器、CPU L1/L2/L3 Cache 也都是属于存储设备,只不过它们能存储的数据非常

2020-10-14 09:39:31 7066 4

原创 CPU 执行程序的秘密,藏在了这 15 张图里

前言代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗?软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么?CPU 看了那么多,我们都知道 CPU 通常分为 32 位和 64 位,你知道 64 位相比 32 位 CPU 的优势在哪吗?64 位 CPU 的计算性能一定比 32 位 CPU 高很多吗?不知道也不用慌张,接下来就循序渐进..

2020-10-10 23:29:52 12381 15

原创 掏心掏肺分享,大学四年我是怎么学操作系统和计算机网络的?

最近收到不少读者留言,关于怎么学「操作系统」和「计算机网络」的留言,小林写这一块的内容也有半年多了,啃非常多的书,也看了很多视频,有好的有差的,今天就掏心掏肺地分享给大家。

2020-09-28 19:34:14 23433 32

原创 原来 8 张图,就可以搞懂「零拷贝」了

前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。这次,我们就以「文件传输」作为切入点,来分析 I/O 工作方式,以及如何优化传输文件的性能。正文为什么要有 DMA 技术?在没有 DMA 技术前,I/O 的过程是这样的:CPU 发出对应的指令给磁盘控制器,然后返回;磁盘控制器收到..

2020-09-23 17:07:44 23758 36

原创 互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等,不同种类的锁自然适用于不同的场景。如果选择了错误的锁,那么在一些高并发的场景下,可能会降低系统的性能,这样用户体验就会非常差了。所以,为了选择合适的锁,我们不仅需要清楚知道加锁的成本开销有多大,还需要分析业务场景中访问的共享资源的方式,再来还要考虑并发访问共享资源时的冲突概率。

2020-09-15 20:22:07 21141 14

原创 进程调度算法/页面置换算法/磁盘调度算法,20 张图一举拿下

前言最近,我偷偷潜伏在各大技术群,因为秋招在即,看到不少小伙伴分享的大厂面经。然后发现,操作系统的知识点考察还是比较多的,大厂就是大厂就爱问基础知识。其中,关于操作系统的「调度算法」考察也算比较频繁。所以,我这边总结了操作系统的三大调度机制,分别是「进程调度/页面置换/磁盘调度算法」,供大家复习,希望大家在秋招能斩获自己心意的 offer。正文进程调度算法进程调度算法也称 CPU 调度算法,毕竟进程是由 CPU 调度的。当 CPU 空闲时,操作系统就选择内存中的某个「就绪状态」的进程,..

2020-09-08 10:59:05 15103 5

原创 键盘敲入A 字母时,期间发生了什么?

前言键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入A 字母时,操作系统期间发生了什么吗」?那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输入输出设备」的,等了解完这个后,我们再来看看这个问题,你就会发现问题已经被迎刃而解了。正文设备控制器我们的电脑设备可以接非常多的输入输出设备,比如键盘、鼠标、显示器、网卡、硬盘、打印机、音响等等,每个设备的用法和功能都不同,那操作系统是如何把这些输入输出设备统一管理的呢?为了屏蔽设备之间的差异,..

2020-08-23 20:34:53 11970 9

原创 一口气搞懂「文件系统」,就靠这 25 张图了

前言不多 BB,直接上「硬菜」。正文文件系统的基本组成文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。Linux 文件系统会为每个..

2020-08-13 21:48:43 57516 72

原创 凉了!张三同学没答好「进程间通信」,被面试官挂了....

前言开场小故事炎炎夏日,张三骑着单车去面试花了 1 小时,一路上汗流浃背。结果面试过程只花了 5 分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波 1 小时回去。面试五分钟,骑车两小时。你看,张三因面试没准备好,吹空调的时间只有 5 分钟,来回路上花了 2 小时晒太阳,你说惨不惨?所以啊,炎炎夏日,为了能延长吹空调的时间,我们应该在面试前准备得更充分些,吹空调时间是要自己争取的。很明显,在这一场面试中, 张三在进程间通信这一块没复习好,虽然列出了进程间通信的方式,但这只是..

2020-07-29 23:33:12 16344 27

原创 看我稳住「多线程」翻车的现场!

前言先来看看虚构的小故事已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕。没办法这段时间公司业绩增长中,需求自然也多了起来,加班自然也少不了。天气变化莫测,这时窗外下起了蓬勃大雨,同时闪电轰鸣。但这一丝都没有影响到小明,始料未及,突然一道巨大的雷一闪而过,办公楼就这么停电了,随后整栋楼都在回荡着的小明那一声撕心裂肺的「卧槽」。此时,求小明的心里面积有多大?等小明心里平复后,突然肚子非常的痛,想上厕所,小明心想肯定是晚上吃的某堡王有问题。整栋楼都停了电,..

2020-07-20 18:34:17 16657 19

原创 进程、线程基础知识全家桶,30 张图一套带走

前言先来看看一则小故事我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了。城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人家让你休息就休息,让你工作就工作,毕竟摊位不多,每个人都要占这个摊位来工作,城里要工作的人多着去了。所以城管为了公平起见,它使用一种策略(调度)方式,给每个人一个固定的工作时间(时间片),时间到了就会通知你去休息而换另外一个人上场工作。另外,在休息时候你也不能偷懒,要记住工作到哪了,不然下次到你工作..

2020-07-12 21:27:32 7893 16

原创 20 张图揭开「内存管理」的迷雾,瞬间豁然开朗

每日英语,每天进步一点点前言之前有不少读者跟我反馈,能不能写图解操作系统?既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。学操作系统的时候,主要痛苦的地方,有太多的抽象难以理解的词语或概念,非常容易被劝退。即使怀着满腔热血的心情开始学操作系统,不过 3 分钟睡意就突然袭来。。。该啃的还是得啃的,该图解的还是得图解的,万众期待的「图解操作系统」的系列来了。本篇跟大家说说内存管理,内存管理还是

2020-06-30 14:40:44 33902 49

原创 细说 TCP 内核参数

TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操心系统提供的内核参数的理解与应用。

2020-06-08 19:57:15 23572 11

原创 你知道跟 TCP三次握手息息相关的半连接队列和全连接队列吗?

前言网上许多博客针对增大 TCP 半连接队列和全连接队列的方式如下:增大 TCP 半连接队列的方式是增大 /proc/sys/net/ipv4/tcp_max_syn_backlog;增大 TCP 全连接队列的方式是增大 listen() 函数中的 backlog;这里先跟大家说下,上面的方式都是不准确的。“你怎么知道不准确?”很简单呀,因为我做了实验和看了 TCP 协议栈的内核源码,发现要增大这两个队列长度,不是简简单单增大某一个参数就可以的。接下来,就会以实战 + 源码分析,带大家

2020-05-30 22:27:39 4551 5

原创 实战!我用 Wireshark 让你「看得见」 TCP

每日一句英语学习,每天进步一点点:前言为了让大家更容易「看得见」 TCP,我搭建不少测试环境,并且数据包抓很多次,花费了不少时间,才抓到比较容易分析的数据包。接下来丢包、乱序、超时重传、快速重传、选择性确认、流量控制等等 TCP 的特性,都能「一览无云」。没错,我把 TCP 的"衣服扒光"了,就为了给大家看的清楚,嘻嘻。正文显形“不可见”的网络包网络世界中的数据包交互我们肉眼是看不见的,它们就好像隐形了一样,我们对着课本学习计算机网络的时候就会觉得非常的抽象,加大了学习的难度。还别说,

2020-05-20 20:51:19 5098 5

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除