自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(219)
  • 收藏
  • 关注

原创 TCP三次握手和自连接的条件和缺点

客户端临时端⼝号的范围由 /proc/sys/net/ipv4/iplocalport_range。「确认号」字段指定了对端(客户端)下次发送 段的序号,这里等于客户端 ISN 加一。服务端收到客户端的 SYN 段以后,将 SYN 和 ACK 标记都置位。重传总时间:63s = 1s+2s+4s+8s+16s+32s。⽂件决定,只要服务端监控的端⼝号不在这个范围内就可以了。让服务监听的端⼝与客户端临时端⼝号不可能相同即可。源端⼝号和⽬标端⼝号都是⾃⼰可能吗?当出现⾃连接的时候,主动关掉连接。

2023-07-04 17:47:00 466

原创 TCP之延时Nagle算法实验详解

Nagle 算法是应用在发送端的,简而言之就是,对发送端而言:• 当第一次发送数据时不用等待,就算是 1byte 的小包也立即发送• 后面发送数据时需要累积数据包直到满足下面的条件之一才会继续发送数数据包达到最大段大小MSS接收端收到之前数据包的确认 ACK。

2023-07-04 13:20:24 825

原创 Spark入门

回顾:Hadoop主要解决,海量数据的存储和海量数据的分析计算。Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。

2023-06-12 18:35:22 634

原创 毫米波雷达IWR1642和DCA1000 EVM环境搭建

mmWaveStudio GUI设计用于表征和评估TI Radar器械。mmWaveStudio通过SPI向mmWave设备发送命令来配置和控制mmWave设备。使用DCA 1000 EVM或TSW 1400 EVM板捕获ADC数据,并在Matlab中处理数据,结果显示在GUI中。mmWaveStudio GUI利用C DLL和一组API通过FTDI FT 4232 H设备从GUI通信到设备。FT 4232 H是一款USB 2.0高速(480 Mb/s)转UART IC。

2023-06-07 13:04:55 2929

原创 内存泄露的循环引用问题

通常意义上我们说的垃圾回收器(Garbage Collector,GC),和多数同学的理解会有出入。你可能认为 GC 是做内存回收用的模块,而事实上程序语言提供的 GC 往往是应用的实际内存管理者。刚刚入门咱们就遇到了一个容易出现理解偏差的问题,所以 GC 是值得花时间细学的。如上图所示,一方面 GC 要承接操作系统虚拟内存的架构,另一方面 GC 还要为应用提供内存管理。GC 有一个含义,就是 Garbage Collection 内存回收的具体动作。

2023-05-29 08:49:40 811

原创 LRU 该用什么数据结构

我们讨论的频次较高、频次较低,是基于历史的。历史在未来并不一定重演。比如读取一个大型文件,无论如何操作都很难建立一个有效的缓存。甚至有的时候,最近使用频次最低的数据被缓存,使用频次最高的数据被置换,效率会更高。比如说有的数据库设计同时支持 LRU 缓存和 MRU( Most Recently Used)缓存。MRU 是 LRU 的对立面,这看似茅盾,但其实是为了解决不同情况下的需求。这并不是说缓存设计无迹可寻,而是经过思考和预判,还得以事实的命中率去衡量缓存置换算法是否合理。

2023-05-27 09:26:11 873

原创 一个程序最多能占用的内存大小

目前我们主要都是在用 64bit 的机器。因为 264 数字过于大,即便是虚拟内存都不需要这么大的空间。因此通常操作系统会允许进程使用非常大,但是不到 264 的地址空间。通常是几十到几百 EB(1EB = 106TB = 109GB)。

2023-05-25 08:58:36 1076

原创 HTTP中 Connection: keep-Alive与TCP中keepalive有什么区别?

由于 HTTP 是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应,至此「请求-应答」的模式就完成了,随后就会释放 TCP 连接。TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接。这样做,连接就不会中断,而是保持连接。

2023-05-23 13:06:01 601

原创 socket编程

这⾥需要注意的是,服务端调⽤ accept 时,连接成功了会返回⼀个已完成连接的 socket,后续⽤来传输数据。成功连接建⽴之后,双⽅开始通过 read 和 write 函数来读写数据,就像往⼀个⽂件流⾥⾯写东⻄⼀样。

2023-05-22 08:53:43 439

原创 单例模式(Binary Search)及实现的几种方式

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台算机可以有若干个打印机,但只能有一个 Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态。

2023-05-17 10:19:13 246

原创 select poll epoll有什么区别

最基础的 TCP 的 Socket 编程,它是阻塞 I/O 模型,基本上只能一对一通信,那为了服务更多的客户端,我们需要改进网络 I/O 模型。比较传统的方式是使用多进程/线程模型,每来一个客户端连接,就分配一个进程/线程,然后后续的读写都在对应的进程/线程,这种方式处理 100 个客户端没问题,但是当客户端增大到 10000 个时,10000 个进程/线程的调度、上下文切换以及它们占用的内存,都会成为瓶颈。

2023-05-16 17:03:39 412

原创 【Linux是如何发送网络包的?】

电脑与电脑之间通常都是通过网卡、交换机、路由器等网络设备连接到一起,那由于网络设备的异构性,国际标准化组织定义了一个七层的 OSI 网络模型,但是这个模型由于比较复杂,实际应用中并没有采用,而是采用了更为简化的 TCP/IP 模型,Linux 网络协议栈就是按照了该模型来实现的。TCP/IP 模型主要分为应用层、传输层、网络层、网络接口层四层,每一层负责的职责都不同,这也是 Linux 网络协议栈主要构成部分。

2023-05-16 13:11:47 591

原创 BIO NIO AIO 的区别

我们从 3 个方面讨论了 I/O 模型。第一个是编程模型,阻塞、非阻塞、异步 3 者 API 的设计会有比较大的差异。通常情况下我们说的异步编程是异步转同步。异步转同步最大的价值,就是提升代码的可读性。可读,就意味着维护成本的下降以及扩展性的提升。第二个在设计系统的 I/O 时,另一件需要考虑的就是数据传输以及转化的成本。传输主要是拷贝,比如可以使用内存映射来减少数据的传输。但是这里要注意一点,内存映射使用的内存是内核空间的缓冲区,因此千万不要忘记回收。

2023-05-14 20:17:04 689

原创 rm / -rf指令的作用是?

pwd指令查看工作目录。cd指令切换工作目录。which指令查找一个执行文件所在的路径。ls显示文件信息。rm删除文件。touch修改一个文件的时间戳,如果文件不存在会触发创建文件。vi和nano可以用来编辑文件。cat查看完成的文件适合小型文件。moreless查看一个文件但是只读取用户看到的内容到内存,因此消耗资源较少,适 合在服务器上看日志。headtail可以用来看文件的头和尾。grep指令搜索文件内容。grep是global regular pattern的组合。

2023-05-14 13:26:36 4347

原创 虚拟化技术介绍-VMware和Docker的区别

顾名思义,虚拟是相对于现实而言。虚拟化(Virutualization)通常是指构造真实的虚拟版本。不严谨地说,用软件模拟计算机,就是虚拟机;用数字模拟价值,就是货币;用存储空间模拟物理存储,就是虚拟磁盘。VMware 和 Docker 是目前虚拟化技术中最具代表性的两种设计。VMware 为应用提供虚拟的计算机(虚拟机);Docker 为应用提供虚拟的空间,被称作容器(Container)。VMware在 1998 年诞生,通过 Hypervisor 的设计彻底改变了虚拟化技术。

2023-05-12 15:05:43 1900

原创 对称加密和非对称加密的区别

对称加密用同样的密钥,安全系数不够。非对称加密,用公钥 + 私钥的方式加强了安全系数。那么是不是我们所有的加密的应用都应该用非对称加密呢?通常情况,非对称加密需要更多的运算资源。因此很多协议使用非对称加密解决最核心的安全问题,再用对称加密解决其他问题。以 HTTPS 协议为例,客户端和服务器之间会先用非对称加密交换临时对称加密密钥,然后之后的通信会以对称加密执行,直到连接结束。也就是非对称加密仅仅存在于 HTTPS 连接建立后,用于交换密钥(对称加密密钥)的少数几次传输中。

2023-05-11 17:12:23 777

原创 TCP之滑动窗口和流量控制

TCP 利用发送字节数和接收字节数,这个二元组的唯一性保证顺序。讨论下保证顺序的具体算法,以及如何在保证顺序的基础上,同时追求更高的吞吐量。——TCP 的滑动窗口算法。TCP 作为一个传输层协议,最核心的能力是传输。传输需要保证可靠性,还需要控制流速,这两个核心能力均由滑动窗口提供。而滑动窗口中解决的问题,是你在今后的工作中可以长期使用的,比如设计一个分布式的 RPC 框架、实现一个消息队列或者分布式的文件系统等。

2023-05-11 09:55:56 745

原创 Tunel技术是什么?

IPv4 用 32 位整数描述地址,最多只能支持 43 亿设备,显然是不够用的,这也被称作 IP 地址耗尽问题。为了解决这个问题,有一种可行的方法是拆分子网。拆分子网,会带来很多问题,比如说内外网数据交互,需要网络地址转换协议(NAT 协议),增加传输成本。再比如说,多级网络会增加数据的路由和传输链路,降低网络的速度。理想的状态当然是所有设备在一个网络中,互相可以通过地址访问。为了解决这个问题,1998 年互联网工程工作小组推出了全新款的 IP 协议——IPv6 协议。

2023-05-10 14:45:23 793

原创 什么是零拷贝?

零拷贝指的是,从一个存储区域到另一个存储区域的copy任务无需CPU参与就可完成。零拷贝的底层是通过DMA总线技术实现的。零拷贝与具体的编程语言无关,完全依赖于OS,OS支持就可使用,不支持设置了也不起作用。DMA(Direct Memory Access,直接内存访问)是一种计算机系统内部的数据传输技术,需要DMA总线(硬件的体系结构)的硬件支持。其整个数据传输过程是在DMA控制器下完成的。零拷贝在计算机内部数据拷贝及网络传输中都大量使用,用于减少CPU消耗和内存带宽占用,减少用户。

2023-05-09 13:31:56 1267

原创 Linux权限划分的原则

考察的不仅是一个具体的指令,还考察对技术层面的认知。如果对 Linux 权限有较深的认知和理解,那么完全可以通过查资料去完成具体指令的执行。更重要的是,认知清晰的程序员可以把 Linux 权限管理的知识迁移到其他的系统设计中。

2023-05-09 09:52:42 1400

原创 【TCP为什么需要粘包和拆包】

TCP 协议的设计像一台巨大而严密的机器,每次我重新温习 TCP 协议,都会感叹“它庞大,而且很琐碎”。每一个细节的设计,都有很深的思考。比如 Sequence Number 和 Acknowledge Number 的设计,就非常巧妙地利用发送字节数和接收字节数解决了顺序的问题。TCP 协议是如何恢复数据的顺序的,TCP 拆包和粘包的作用是什么?解析】TCP 拆包的作用是将任务拆分处理,降低整体任务出错的概率,以及减小底层网络处理的压力。拆包过程需要保证数据经过网络的传输,又能恢复到原始的顺序。

2023-05-05 18:48:58 723

原创 epoll为什么用红黑树?

总结一下,Socket 既是一种编程模型,或者说是一段程序,同时也是一个文件,一个双向管道文件。你也可以这样理解,Socket API 是在 Socket 文件基础上进行的一层封装,而 Socket 文件是操作系统提供支持网络通信的一种文件格式。在服务端有两种 Socket 文件,每个客户端接入之后会形成一个客户端的 Socket 文件,客户端 Socket 文件的文件描述符会存入服务端 Socket 文件。

2023-04-14 13:07:40 845

原创 TCP 协议为什么握手是 3 次,挥手却是 4 次?

TCP 协议为什么握手是 3 次,挥手却是 4 次?

2022-11-11 20:07:48 599 1

原创 力扣 | 226. 翻转二叉树

【代码】力扣 | 226. 翻转二叉树。

2024-04-15 23:24:34 73 1

原创 力扣 | 148. 排序链表

和数组里面的归并排序思想一致。

2024-04-14 23:41:00 204

原创 力扣 | 24. 两两交换链表中的节点

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。输入:head = 1->2->3->4->5->NULL。输出:2->1->4->3->5->NULL。两两交换链表中的节点。

2024-04-14 11:37:01 382

原创 力扣 |142. 环形链表 II

因为相遇的点只能是在2、0、-4这几个点,c的长度并不一定是一个next就可以。向前走,刚好在入环的节点处相遇!注意:b和c交界的点不一定是从例如-4这个节点处,根据推出的表达式:slow和fast相遇的时候,让slow和位于头节点的p同时。重点是理解a b c的关系!

2024-04-13 22:38:37 190

原创 力扣 | 234. 回文链表

【代码】力扣 | 234. 回文链表。

2024-04-13 21:57:09 198

原创 力扣 | 160. 相交链表

【代码】力扣 | 160. 相交链表。

2024-04-13 19:41:25 195

原创 力扣 | 54. 螺旋矩阵

注意按照顺时针方向进行访问元素,以及每次触发的条件只会满足一个!

2024-04-12 22:07:25 214

原创 力扣 | 141. 环形链表

【代码】力扣 | 141. 环形链表。

2024-01-26 12:53:07 259

原创 力扣 | 240. 搜索二维矩阵 II

不难想到二分查找的思想,但是这道题目还可以利用有序大大减少代码量。

2024-01-24 15:58:35 621

原创 力扣 | 73. 矩阵置零

【代码】力扣 | 73. 矩阵置零。

2024-01-24 15:00:24 446

原创 力扣 | 56. 合并区间

【代码】力扣 | 56. 合并区间。

2024-01-23 17:16:47 386

原创 力扣 | 238. 除自身以外数组的乘积

【代码】力扣 | 238. 除自身以外数组的乘积。

2024-01-23 10:22:41 426

原创 力扣 | 560. 和为 K 的子数组

【代码】力扣 | 560. 和为 K 的子数组。

2024-01-23 08:53:26 643

原创 力扣 | 438. 找到字符串中所有字母异位词

在s里面控制一个p字符串长度的滑动窗口,统计该滑动窗口中的每种字符出现的次数。

2024-01-19 18:36:02 396

原创 力扣 | 15. 三数之和

【代码】力扣 | 15. 三数之和。

2024-01-19 08:54:44 373

原创 力扣 | 11. 盛最多水的容器

双指针解法–对撞指针。

2024-01-18 14:27:12 538

原创 力扣 | 49. 字母异位词分组

这里使用HashMap。

2024-01-15 19:47:44 395

空空如也

空空如也

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

TA关注的人

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