06 2023 档案

摘要:1 前言 这节我们来看看 TCP 的连接断开哈,经典的四次挥手。 2 TCP 四次挥手过程是怎样的? 天下没有不散的宴席,对于 TCP 连接也是这样, TCP 断开连接是通过四次挥手方式。 双方都可以主动断开连接,断开连接后主机中的「资源」将被释放,四次挥手的过程如下图: 客户端打算关闭连接,此时会 阅读全文
posted @ 2023-06-29 06:48 酷酷- 阅读(5908) 评论(2) 推荐(6) 编辑
摘要:1 前言 这节我们来看看 TCP 头部的序列号的变化过程哈,在看连接、传输、挥手之前先把这个看了哈,了解一下序列号和确认号的变化,才能更好的理解哈。比如数据传输中 TCP 序列号和确认号的变化你知道么? 我们来瞅瞅,TCP 序列号和确认号是如何变化的? 三次握手中 TCP 序列号和确认号的变化 数据 阅读全文
posted @ 2023-06-28 07:56 酷酷- 阅读(1065) 评论(0) 推荐(1) 编辑
摘要:1 前言 这节我们来看看 TCP 的连接建立哈,经典的三次握手。 2 TCP 三次握手过程是怎样的? TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图: 一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处 阅读全文
posted @ 2023-06-27 07:25 酷酷- 阅读(1848) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看 TCP 的基本知识哈。 2 TCP 头格式 我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大 阅读全文
posted @ 2023-06-27 06:42 酷酷- 阅读(245) 评论(0) 推荐(1) 编辑
摘要:1 前言 这节我们看个源码相关的东西,就是我们平时写的 Mapper 接口是怎么注入到 Spring 中呢? 我们会去想: 比如Mapper接口在启动时是如何被发现的? Mapper接口我们知道肯定是会创建代理的,那么代理对象又是如何创建的呢? 我们接下来就来看看。 1.1 入口分析 我们的 Map 阅读全文
posted @ 2023-06-26 16:41 酷酷- 阅读(1006) 评论(0) 推荐(0) 编辑
摘要:1 前言 平时我们打开网页,比如购物网站某宝。都是点一下「列表商品」,跳转一下网页就到了「商品详情」。 从 HTTP 协议的角度来看,就是点一下网页上的某个按钮,前端发一次 HTTP请 求,网站返回一次 HTTP 响应。这种由客户端主动请求,服务器响应的方式也满足大部分网页的功能场景。 但有没有发现 阅读全文
posted @ 2023-06-26 09:28 酷酷- 阅读(74) 评论(0) 推荐(0) 编辑
摘要:1 前言 我想起了我刚工作的时候,第一次接触 RPC 协议,当时就很懵,我 HTTP 协议用的好好的,为什么还要用 RPC 协议? 于是就到网上去搜。 不少解释显得非常官方,我相信大家在各种平台上也都看到过,解释了又好像没解释,都在用一个我们不认识的概念去解释另外一个我们不认识的概念,懂的人不需要看 阅读全文
posted @ 2023-06-26 08:26 酷酷- 阅读(61) 评论(0) 推荐(0) 编辑
摘要:1 前言 HTTP/3 还没正式推出,不过自 2017 年起,HTTP/3 已经更新到 34 个草案了,基本的特性已经确定下来了,对于包格式可能后续会有变化。 所以,这次 HTTP/3 介绍不会涉及到包格式,只说它的特性。 2 美中不足的 HTTP/2 HTTP/2 通过头部压缩、二进制编码、多路复 阅读全文
posted @ 2023-06-26 08:11 酷酷- 阅读(43) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看HTTP2,一起来看看 HTTP/2 牛逼在哪? 2 HTTP/1.1 协议的性能问题 我们得先要了解下 HTTP/1.1 协议存在的性能问题,因为 HTTP/2 协议就是把这些性能问题逐个攻破了。 现在的站点相比以前变化太多了,比如: 消息的大小变大了,从几 KB 大小的消 阅读全文
posted @ 2023-06-26 08:04 酷酷- 阅读(87) 评论(0) 推荐(0) 编辑
摘要:1 前言 由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议,给应用数据套了个「保护伞」,提高安全性的同时也带来了性能消耗。 因为 HTTPS 相比 HTTP 协议多一个 TLS 协议握手过程,目的是为了通过非对称加密握手协商或者交换出对称加密密钥,这个过程最长可以花费掉 2 RTT 阅读全文
posted @ 2023-06-26 07:51 酷酷- 阅读(117) 评论(0) 推荐(0) 编辑
摘要:1 前言 HTTPS 常用的密钥交换算法有两种,分别是 RSA 和 ECDHE 算法。 其中,RSA 是比较传统的密钥交换算法,它不具备前向安全的性质,因此现在很少服务器使用的。而 ECDHE 算法具有前向安全,所以被广泛使用。 上节我们看了了 RSA 握手的过程,这节我们来看看 ECDHE 算法。 阅读全文
posted @ 2023-06-26 07:37 酷酷- 阅读(126) 评论(0) 推荐(0) 编辑
摘要:1 前言 本节我们来看看HTTP的握手过程,用实战抓包的方式,带大家再来窥探一次 HTTPS。 2 TLS 握手过程 HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。 所以安全上存在以下三个风险: 窃听风险,比如通信链路上 阅读全文
posted @ 2023-06-26 07:09 酷酷- 阅读(141) 评论(0) 推荐(0) 编辑
摘要:1 前言 问你一句:「你知道 HTTP/1.1 该如何优化吗?」 我们可以从下面这三种优化思路来优化 HTTP/1.1 协议: 尽量避免发送 HTTP 请求(缓存); 在需要发送 HTTP 请求时,考虑如何减少请求次数; 减少服务器的 HTTP 响应的数据大小; 下面,就针对这三种思路具体看看有哪些 阅读全文
posted @ 2023-06-26 06:42 酷酷- 阅读(60) 评论(0) 推荐(0) 编辑
摘要:1 前言 本节我们来看看HTTP 和 HTTPS的区别哈。 2 HTTP 与 HTTPS 有哪些区别? HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传 阅读全文
posted @ 2023-06-26 06:24 酷酷- 阅读(153) 评论(0) 推荐(0) 编辑
摘要:1 前言 本节我们来看看HTTP的一些特性,了解一下它的优缺点。 到目前为止,HTTP 常见到版本有 HTTP/1.1,HTTP/2.0,HTTP/3.0,不同版本的 HTTP 特性是不一样的。 这里先用 HTTP/1.1 版本给大家介绍,其他版本的后续也会介绍。 2 HTTP/1.1 2.1 HT 阅读全文
posted @ 2023-06-25 07:40 酷酷- 阅读(255) 评论(0) 推荐(0) 编辑
摘要:1 前言 本节我们来看看HTTP中的缓存技术。 2 HTTP 缓存有哪些实现方式? 对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了,这样的话 HTTP/1.1 的性能 阅读全文
posted @ 2023-06-25 07:01 酷酷- 阅读(70) 评论(0) 推荐(0) 编辑
摘要:1 前言 本节我们来看看HTTP中的两大请求方法:GET和POST的区别。 2 GET 和 POST 有什么区别? 根据 RFC 规范,GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII, 阅读全文
posted @ 2023-06-25 06:49 酷酷- 阅读(59) 评论(0) 推荐(0) 编辑
摘要:1 前言 本节我们来看看HTTP的一些基础知识哈,报文格式以及常见的状态码。 2 报文格式 2.1 请求格式 (1)请求方法,GET和POST是最常见的HTTP方法,初次以外还包括 DELETE、HEAD、OPTIONS、PUT、TRACE (2)请求对应的URL地址,他和报文头的Host属性,组合 阅读全文
posted @ 2023-06-25 06:38 酷酷- 阅读(267) 评论(0) 推荐(0) 编辑
摘要:1 前言 很多时候,我们观察程序是否如期运行,或者是否有错误,最直接的方式就是看运行日志,当然要想从日志快速查到我们想要的信息,前提是程序打印的日志要精炼、精准。 但日志涵盖的信息远不止于此,比如对于 nginx 的 access.log 日志,我们可以根据日志信息分析用户行为。 什么用户行为呢?比 阅读全文
posted @ 2023-06-21 16:57 酷酷- 阅读(430) 评论(0) 推荐(0) 编辑
摘要:1 前言 Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层、传输层、网络层和网络接口层,共四层组成,每一层都有各自的职责。 应用程序要发送数据包时,通常是通过 socket 接口,于是就会发生系统调用,把应用层的数据拷贝到内核里的 socket 层,接着由网络协议 阅读全文
posted @ 2023-06-20 10:30 酷酷- 阅读(241) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看一致性哈希是什么,使用场景,解决了什么问题? 2 如何分配请求? 大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。 但是问题来了,现在有那么多个节点(后面统称服务器为节点,因为少一个字),要如何分配 阅读全文
posted @ 2023-06-20 07:27 酷酷- 阅读(52) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看 Reactor 和 Proactor 这两个高性能网络模式。 别小看这两个东西,特别是 Reactor 模式,市面上常见的开源软件很多都采用了这个方案,比如 Redis、Nginx、Netty 等等,所以学好这个模式设计的思想,不仅有助于我们理解很多开源软件,而且也能在面试 阅读全文
posted @ 2023-06-20 06:59 酷酷- 阅读(90) 评论(0) 推荐(1) 编辑
摘要:1 前言 我们以最简单 socket 网络模型,一步一步的到 I/O 多路复用,具体细节每个系统调用的参数的这里不说哈。 2 最基本的 Socket 模型 要想客户端和服务器能在网络中通信,那必须得使用 Socket 编程,它是进程间通信里比较特别的方式,特别之处在于它是可以跨主机间通信。 Sock 阅读全文
posted @ 2023-06-20 06:59 酷酷- 阅读(135) 评论(0) 推荐(0) 编辑
摘要:1 前言 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。 这次,我们就以「文件传输」作为切入 阅读全文
posted @ 2023-06-20 06:58 酷酷- 阅读(40) 评论(0) 推荐(0) 编辑
摘要:1 前言 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入A 字母时,操作系统期间发生了什么吗」? 那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输入输出设备」的,等了解完这个后,我们再来看看这个问题,你就会发现问题已经被迎刃而解了。 2 设备 阅读全文
posted @ 2023-06-19 08:00 酷酷- 阅读(63) 评论(0) 推荐(0) 编辑
摘要:1 前言 文件的读写方式各有千秋,对于文件的 I/O 分类也非常多,常见的有 缓冲与非缓冲 I/O 直接与非直接 I/O 阻塞与非阻塞 I/O VS 同步与异步 I/O 接下来,分别对这些分类讨论讨论。 2 缓冲与非缓冲 I/O 文件操作的标准库是可以实现数据的缓存,那么根据「是否利用标准库缓冲」, 阅读全文
posted @ 2023-06-19 07:27 酷酷- 阅读(86) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题就是:为什么线程崩溃崩溃不会导致 JVM 崩溃的问题。 本文分以下几节来探讨 线程崩溃,进程一定会崩溃吗 进程是如何崩溃的-信号机制简介 为什么在 JVM 中线程崩溃不会导致 JVM 进程崩溃 openJDK 源码解析 我们开始。 2 线程崩溃,进程一定会崩溃吗? 一般来 阅读全文
posted @ 2023-06-19 07:20 酷酷- 阅读(91) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个问题就是:一个进程最多可以创建多少个线程? 不同的操作系统和不同位数的操作系统,虚拟内存可能是不一样多。 Windows 系统我不了解,我就说说 Linux 系统。 在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的系统,地址 空间的范 阅读全文
posted @ 2023-06-19 07:10 酷酷- 阅读(643) 评论(0) 推荐(0) 编辑
摘要:1 前言 在编程世界里,「锁」可以说是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。 如何用好锁,也是程序员的基本素养之一了。 高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则性能会降低。 所以,知道各种锁的开销,以及应用场景是很有必要的。 接下来,就谈一谈常见的这几 阅读全文
posted @ 2023-06-19 07:01 酷酷- 阅读(68) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节,我们来系统地聊聊死锁的问题。 死锁的概念; 模拟死锁问题的产生; 利用工具排查死锁问题; 避免死锁问题的发生; 2 死锁的概念 在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就 阅读全文
posted @ 2023-06-16 15:43 酷酷- 阅读(67) 评论(0) 推荐(0) 编辑
摘要:1 前言 对于共享资源,如果没有上锁,在多线程的环境里,那么就可能会发生翻车现场。这节我们来看看操作系统中避免多线程资源竞争的互斥、同步的方法。 2 竞争与协作 在单核 CPU 系统里,为了实现多个程序同时运行的假象,操作系统通常以时间片调度的方式,让每个进程执行每次执行一个时间片,时间片用完了,就 阅读全文
posted @ 2023-06-16 15:09 酷酷- 阅读(177) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看进程间的通信方式哈。 每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。 Linux 内核提供了不少进程间通信的机制,我们来一起瞧瞧有哪些? 2 管道 管道分两种类型:匿名管道、命名管道 如果你学过 Li 阅读全文
posted @ 2023-06-16 07:42 酷酷- 阅读(70) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看进程、线程的一些基础知识哈。 2 进程 我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」(Process)。 现在我们 阅读全文
posted @ 2023-06-16 06:57 酷酷- 阅读(197) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们整体来深入梳理下Linux 虚拟内存哈。 我们日常开发中创建的类,调用的函数,在函数中定义的局部变量以及 new 出来的数据容器(Map,List,Set .....等)都需要存储在物理内存中的某个角落。 而我们在程序中编写业务逻辑代码的时候,往往需要引用这些创建出来的数据结构,并 阅读全文
posted @ 2023-06-15 15:06 酷酷- 阅读(704) 评论(0) 推荐(0) 编辑
摘要:1 前言 今天给大家讲讲如何查看电脑的WI-FI密码哈。 2 Windows系统 2.1 netsh命令获取WIFI密码 netsh 是 Windows 下的网络配置命令,直接输入该命令并回车,即可进入一个交互式的命令行。运行 netsh wlan show profile 即可获取当前系统中保存的 阅读全文
posted @ 2023-06-15 13:37 酷酷- 阅读(639) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看内存的另一个问题哈,就是如何避免预读失效和缓存污染,其实这两个问题都是考量如何改进 LRU 算法。 因为传统的 LRU 算法存在这两个问题: 「预读失效」导致缓存命中率下降 「缓存污染」导致缓存命中率下降 MySQL 和 Linux 操作系统是通过改进 LRU 算法来避免「预 阅读全文
posted @ 2023-06-15 06:30 酷酷- 阅读(119) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看内存的另一个问题哈,「在 4GB 物理内存的机器上,申请 8G 内存会怎么样?」 这个问题在没有前置条件下,就说出答案就是耍流氓。这个问题要考虑三个前置条件: 操作系统是 32 位的,还是 64 位的? 申请完 8G 内存后会不会被使用? 操作系统有没有使用 Swap 机制? 阅读全文
posted @ 2023-06-14 09:38 酷酷- 阅读(98) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看一个极端情况,就是当内存满了,接下来会发生什么呢?大家可以猜一下,类似我们的jvm oom然后是不是会进行垃圾回收呢,其实都是一样的道理,我们来看看。 2 内存分配的过程是怎样的? 应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存 阅读全文
posted @ 2023-06-14 08:17 酷酷- 阅读(720) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来实际看看一次内存分配的过程,就以 malloc 动态内存分配为切入点,我在文中也做了小实验: malloc 是如何分配内存的? malloc 分配的是物理内存吗? malloc(1) 会分配多大的内存? free 释放内存,会归还给操作系统吗? free() 函数只传入一个内存地 阅读全文
posted @ 2023-06-14 07:49 酷酷- 阅读(296) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看内存管理里的虚拟内存哈,内存管理还是比较重要的一个环节,理解了它,至少对整个操作系统的工作会有一个初步的轮廓。 2 虚拟内存 如果你是电子相关专业的,肯定在大学里捣鼓过单片机。 单片机是没有操作系统的,所以每次写完代码,都需要借助工具把程序烧录进去,这样程序才能跑起来。 另外 阅读全文
posted @ 2023-06-14 07:26 酷酷- 阅读(150) 评论(0) 推荐(0) 编辑
摘要:1 前言 Windows 和 Linux 可以说是我们比较常见的两款操作系统的。 Windows 基本占领了电脑时代的市场,商业上取得了很大成就,但是它并不开源,所以要想接触源码得加入 Windows 的开发团队中。 对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可 阅读全文
posted @ 2023-06-14 06:33 酷酷- 阅读(552) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看个有意思的东西,就是关于数字是如何在系统中记录的,或者 为什么负数要用补码表示? 十进制小数怎么转成二进制? 计算机是怎么存小数的? 0.1 + 0.2 == 0.3 吗? 别看这些问题都看似简单,但是其实还是有点东西的这些问题。 2 为什么负数要用补码表示? 十进制转换二进制 阅读全文
posted @ 2023-06-13 07:12 酷酷- 阅读(112) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们看看操作系统中的一个重要概念:中断哈。 2 中断是什么? 先来看看什么是中断?在计算机中,中断是系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。 这样的解释可能过于学术了,容易云里雾里,我就举个生活中取外 阅读全文
posted @ 2023-06-13 06:54 酷酷- 阅读(160) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们看看 CPU 是根据什么来选择当前要执行的线程。 2 任务分类 在 Linux 内核中,进程和线程都是用 task_struct 结构体表示的,区别在于线程的 task_struct 结构体里部分资源是共享了进程已创建的资源,比如内存地址空间、代码段、文件描述符等,所以 Linux 阅读全文
posted @ 2023-06-13 06:15 酷酷- 阅读(196) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们看了存储器的层次结构,知道CPU中有多级缓存,有共享的也有私有的,那么不可避免的一个问题就是缓存的一致性,这节我们来看看哈。 2 CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU 阅读全文
posted @ 2023-06-12 10:25 酷酷- 阅读(749) 评论(0) 推荐(0) 编辑
摘要:1 前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能。 CPU 内部嵌入了 CPU Cache(高速缓存),它的存储容量很小,但是离 CPU 核心很近,所以缓存的读写速度是极快的, 阅读全文
posted @ 2023-06-12 08:17 酷酷- 阅读(64) 评论(0) 推荐(0) 编辑
摘要:1 前言 大家如果想自己组装电脑的话,肯定需要购买一个 CPU,但是存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,比如你除了要买内存,还要买硬盘,而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。 相信大家都知道内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢失的,而硬盘则不会, 阅读全文
posted @ 2023-06-12 07:58 酷酷- 阅读(154) 评论(0) 推荐(0) 编辑
摘要:1 前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么? CPU 看了那 阅读全文
posted @ 2023-06-12 07:26 酷酷- 阅读(405) 评论(0) 推荐(0) 编辑
摘要:1 前言 上节我们看了主从模式,这节我们来看看哨兵模式哈。 2 为什么要有哨兵机制? 在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave)进行数据同步了。 这时如果要恢复服务的话,需要人工 阅读全文
posted @ 2023-06-12 07:12 酷酷- 阅读(162) 评论(0) 推荐(0) 编辑
摘要:1 前言 前面我们看了持久化的两种方式 AOF 和 RDB,这两个持久化技术保证了即使在服务器重启的情况下也不会丢失数据(或少量损失)。 不过,由于数据都是存储在一台服务器上,如果出事就完犊子了,比如: 如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的; 如果这台服务 阅读全文
posted @ 2023-06-12 06:52 酷酷- 阅读(79) 评论(0) 推荐(0) 编辑
摘要:1 前言 通常针对服务器的访问速度越来越差,基本性能瓶颈是在数据库,那么我们通常会给服务器加上 Redis,让其作为数据库的缓存或者本地缓存,这样,在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。 缓存无非就是对数据的一份Copy 阅读全文
posted @ 2023-06-08 08:15 酷酷- 阅读(98) 评论(0) 推荐(0) 编辑
摘要:1 前言 用户的数据一般都是存储于数据库,数据库的数据是落在磁盘上的,磁盘的读写速度可以说是计算机里最慢的硬件了。 当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃的了,所以为了避免用户直接访问数据库,会用 Redis 作为缓存层。 因为 Redis 是内存数据库,我们可以将数据库 阅读全文
posted @ 2023-06-07 07:35 酷酷- 阅读(73) 评论(0) 推荐(0) 编辑
摘要:1 前言 我们都知道Redis中的key是可以设置过期时间的,那么问题来了,比如到期后是怎么被删除的呢?就是Redis 的「内存淘汰策略」和「过期删除策略」,这两个机制虽然都是做删除的操作,但是触发的条件和使用的策略都是不同的。我们这节就来看看哈。 2 过期时间 如何设置过期时间? 先说一下对 ke 阅读全文
posted @ 2023-06-07 07:10 酷酷- 阅读(74) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看持久化中需要关注的一个问题哈,即Redis 的大 Key 对持久化有什么影响。 2 大 Key 对 AOF 日志的影响 先说说 AOF 日志三种写回磁盘的策略 Redis 提供了 3 种 AOF 日志写回硬盘的策略,分别是: Always,这个单词的意思是「总是」,所以它的意 阅读全文
posted @ 2023-06-07 06:32 酷酷- 阅读(34) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看持久化方式中的RDB哈。 2 RDB 快照 虽说 Redis 是内存数据库,但是它为数据的持久化提供了两个技术。 分别是「 AOF 日志和 RDB 快照」。 这两种技术都会各用一个日志文件来记录信息,但是记录的内容是不同的。 AOF 文件的内容是操作命令; RDB 文件的内容 阅读全文
posted @ 2023-06-06 23:33 酷酷- 阅读(136) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看持久化方式中的AOF哈。 2 AOF 日志 试想一下,如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它,这不就相当于恢复了缓存数据了吗? 这种保存写操作命令到日志的持久化方式,就 阅读全文
posted @ 2023-06-06 23:15 酷酷- 阅读(64) 评论(0) 推荐(0) 编辑
摘要:1 前言 Redis为什么快呢?除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。 因此,这次我们就来好好聊一下 Redis 数据结构。 注意,Redis 数据结构并不是指 String(字符串)对象 阅读全文
posted @ 2023-06-06 17:31 酷酷- 阅读(222) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们简单来看看Linux 系统是如何收发网络包的哈。 2 网络模型 为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model 阅读全文
posted @ 2023-06-06 08:11 酷酷- 阅读(114) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来讨论下「当键入网址后,到网页显示,其间发生了什么」,我们以下图较简单的网络拓扑模型作为例子,探究探究其间发生了什么? 2 孤单小弟 —— HTTP 浏览器做的第一步工作是解析 URL 首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的请求信息。 阅读全文
posted @ 2023-06-06 07:56 酷酷- 阅读(89) 评论(0) 推荐(0) 编辑
摘要:1 前言 首先大家知道为什么要有 TCP/IP 网络模型吗? 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议。 这个网络协议是分层的,每一层 阅读全文
posted @ 2023-06-06 06:32 酷酷- 阅读(197) 评论(0) 推荐(0) 编辑
摘要:1 前言 TCP 是面向字节流的协议,UDP 是面向报文的协议?这里的「面向字节流」和「面向报文」该如何理解。我们这节来看看哈。 2 如何理解字节流? 之所以会说 TCP 是面向字节流的协议,UDP 是面向报文的协议,是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同,也就是问题原因在发送 阅读全文
posted @ 2023-06-05 23:28 酷酷- 阅读(229) 评论(0) 推荐(1) 编辑
摘要:1 前言 第一次接触RPC协议,当时就很懵,我HTTP协议用的好好的,为什么还要用RPC协议?于是就到网上去搜。 不少解释显得非常官方,我相信大家在各种平台上也都看到过,解释了又好像没解释,都在用一个我们不认识的概念去解释另外一个我们不认识的概念,懂的人不需要看,不懂的人看了还是不懂。 这种看了,又 阅读全文
posted @ 2023-06-05 23:06 酷酷- 阅读(27) 评论(0) 推荐(0) 编辑
摘要:1 前言 TCP 是一个可靠的传输协议,那它一定能保证数据不丢失吗?这次,就跟大家探讨这个问题。 2 数据包的发送流程 首先,我们两个手机的绿皮聊天软件客户端,要通信,中间会通过它们家服务器。大概长这样。 但为了简化模型,我们把中间的服务器给省略掉,假设这是个端到端的通信。且为了保证消息的可靠性,我 阅读全文
posted @ 2023-06-05 22:07 酷酷- 阅读(374) 评论(0) 推荐(1) 编辑
摘要:1 前言 我们都知道 Redis 提供了丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。 随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增) 阅读全文
posted @ 2023-06-05 18:05 酷酷- 阅读(340) 评论(1) 推荐(1) 编辑
摘要:1 前言 这节我们来看看常见的加密算法的分类以及每个分类下常用的一些算法哈。 2 分类 加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。 2.1 不可逆加密 常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-224、SHA-256、SHA-384,和 阅读全文
posted @ 2023-06-05 07:55 酷酷- 阅读(152) 评论(0) 推荐(0) 编辑
摘要:1 前言 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。 2 概述 SSL证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,要从经销商购买。 证书 阅读全文
posted @ 2023-06-05 07:15 酷酷- 阅读(61) 评论(0) 推荐(0) 编辑
摘要:1 前言 HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。 本文介绍 HTTP 协议的历史演变和设计思路。 2 HTTP/0.9 HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间 阅读全文
posted @ 2023-06-05 07:03 酷酷- 阅读(23) 评论(0) 推荐(0) 编辑
摘要:1 前言 话说,UDP比TCP快吗?大部分的人可能都会认为:"是"。这要追问为什么,估计大家也能说出个大概。但这也让人好奇,用UDP就一定比用TCP快吗?什么情况下用UDP会比用TCP慢?我们今天就来聊下这个话题。 2 使用socket进行数据传输 作为一个程序员,假设我们需要在A电脑的进程发一段数 阅读全文
posted @ 2023-06-05 06:33 酷酷- 阅读(65) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看MySQL 的 Buffer Pool哈。 2 为什么要有 Buffer Pool? 虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。 要想提升查询性能,加个缓存就行了嘛。所以,当数据从磁盘中取出后,缓存到内存中,下次查询同样 阅读全文
posted @ 2023-06-02 07:43 酷酷- 阅读(347) 评论(0) 推荐(0) 编辑
摘要:1 前言 这节我们来看看MySQL里的各种日志哈。 2 概述 之前我们知道了一条查询语句经历的过程,这属于「读」一条记录的过程,如下图: 那么,执行一条 update 语句,期间发生了什么?,比如这一条 update 语句: UPDATE t_user SET name = 'xxx' WHERE 阅读全文
posted @ 2023-06-02 07:31 酷酷- 阅读(347) 评论(0) 推荐(0) 编辑
摘要:1 前言 最近碰上个需求,因为那个报表工具只能写SQL,所以需要用SQL计算每条数据占总和的百分比,比如下边这样,要对每个人的分数计算占总和的百分比。 2 问题思路 我们首先要有个思路: 每行后边要先统计一个总数(用以求出占比) 占比存在取舍,会导致总的占比和大于或者小于100%,所以这里我们需要用 阅读全文
posted @ 2023-06-01 15:29 酷酷- 阅读(202) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示