自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NAT和正向代理是什么?区别和联系是什么?

NAT(Network Address Translation,网络地址转换)和正向代理(Forward Proxy)都是网络中的技术概念,它们在实现原理和功能上有一定的联系,但也有明显的区别。

2023-10-09 10:34:27 418

原创 终于理解正向代理和反向代理的联系和区别啦~

正向代理(forward proxy):是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。反向代理(reverse proxy):是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

2023-08-16 14:34:23 264

原创 高并发是Golang语言最大的亮点

高并发是Golang语言最大的亮点。对比JAVA的多线程和GO的协程实现,明显更直接、简单。这就是GO的魅力所在,以简单、高效的方式解决问题,关键字go,或许就是GO语言最重要的标志。

2022-10-14 12:47:47 601 1

原创 通俗解释操作系统和cpu的关系

通俗解释操作系统和cpu的关系

2022-10-13 15:52:13 3066

原创 消息中间件:RocketMQ详讲

自创建以来,Apache RocketMQ因其简单的体系结构、丰富的业务功能和极高的可伸缩性而被许多企业开发人员和云供应商广泛采用。经过十多年的大规模场景打磨,RocketMQ已成为行业共识,成为金融级可靠业务消息的首选解决方案,广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。

2022-10-10 20:29:07 1212

原创 Golang配置环境变量

Golang配置环境变量

2022-09-29 14:29:01 1238

原创 tcp和udp有什么区别

tcp和udp的区别详讲

2022-09-15 19:54:40 92

原创 c++的static关键字的作用

c++的static关键字的作用

2022-09-15 19:24:16 89

原创 结构体和类的区别详细讲解

C的结构体和C++结构体的区别,C++的结构体和C++类的区别

2022-09-14 15:55:15 519

转载 C++带头单链表的排序——冒泡排序

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>struct Node{ int id; Node* next;};//初始化头节点Node* init_m_head(){ Node* temp = (Node*)malloc(sizeof(Node)); temp->id = 0; temp->next = NULL;

2022-04-06 09:16:28 375

原创 牛客网经典例题:汉诺塔问题的打印,打印n层汉诺塔从最左边移动到最右边的全部过程

题目内容:汉诺塔问题的打印打印n层汉诺塔从最左边移动到最右边的全部过程关于 n 个盘子的汉诺塔问题,需要移动的盘子的次数为f(n) = 2 * f(n - 1) + 1#include <stdio.h>#include <iostream>using namespace std;void move(int n, char* pos1, char* pos3){ printf("Move %d from %s to %s\n", n, pos1, po

2022-01-15 10:27:56 568

原创 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

题目描述:删除公共字符输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。#include <string>#include <queue>#include <iostream>using namespace std;int main(){ string s1; string s2; str.

2022-01-13 18:47:32 1192

原创 setsockopt函数,用于任意类型、任意状态套接口的设置选项值。getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。

setsockopt函数setsockopt函数,用于任意类型、任意状态套接口的设置选项值。#include <sys/types.h>#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);sockfd:标识一个套接口的描述字。level:选项定义的层次;支持SOL_SOCK

2022-01-06 17:30:51 827

原创 Linux:何为信号?一文介绍信号的一生(产生、安装、等待、处理)

信号是一种软件中断,用来处理异步事件。内核递送这些异步事件到某个进程,告诉进程某个特殊事件发生了。这些异步事件,可能来自硬件,比如访问了非法的内存地址,或者除以0了;可能来自用户的输入,比如shell终端上用户在键盘上敲击了Ctrl+C;还可能来自另一个进程,甚至有些来自进程自身。信号的本质是一种进程间的通信,一个进程向另一个进程发送信号,内核至少传递了信号值这个字段。实际上,通信的内容不止是信号值。信号的本质是一种进程间的通信。进程之间约定好:如果发生了某件事情T(trigger),就向目标进程(d

2021-12-27 21:45:43 522

原创 如何产生一个僵尸进程,以及如何避免产生僵尸进程?

僵尸进程(Zombie)如同生命体一般,进程也有开始和结束。进程退出时会进行内核清理,释放进程所有的资源,这些资源包括内存资源、文件资源、信号量资源、共享内存资源,或者引用计数减一,或者彻底释放。不过,进程的退出其实并没有将所有的资源完全释放,仍保留了少量的资源,比如进程的PID依然被占用着,不可被系统分配。此时的进程不可运行,事实上也没有地址空间让其运行(因为大部分资源已经被回收),进程进入僵尸状态。为什么进程退出之后不将所有的资源释放,反而保留了少量资源, 进入僵尸状态呢?看看僵尸进程依.

2021-12-25 15:18:18 1590 1

原创 如何使一个进程变成daemon进程(守护进程)?

daemon进程又被称为守护进程,一般来说它有以下两个特点:生命周期很长一旦启动,正常情况下不会终止,一直运行到系统退出。但凡事无绝对:daemon进程其实也是可以停止的,如很多daemon提供了stop命令,执行stop命令就可以终止daemon,或者通过发送信号将其杀死,又或者因为daemon进程代码存在bug而异常退出。这些退出一般都是由手工操作或因异常引发的。在后台执行,并且不与任何控制终端相关联。即使daemon进程是从终端命令行启动的,终端相关的信号如SIGINT、SIGQUIT和SI

2021-12-24 10:13:42 1525

原创 Linux内核:每cpu变量(per cpu)的作用

每cpu变量的作用为什么要定义每cpu变量?  这其实和linux内部的同步有关,因为如果我们把变量定义成所有cpu都可以访问的,那么就必须用同步机制来保证cpu对这个变量的互斥访问,很明显这是要花费时间的。  Linux内核为了能够减少这种时间开销,就在每个cpu都定义了一个一模一样的变量,这样每个cpu都使用自己的变量,而不会去访问其它cpu上的变量,也就没有了同步的开销。  不过在使用每cpu变量时,必须保证禁用内核抢占。因为内核抢占还是会使每cpu变量产生竞争条件,例如一个内核控制路径获.

2021-12-22 10:24:09 571

原创 RapidJSON入门:手把手教入门实例介绍

RapidJSON优点跨平台编译器:Visual Studio、gcc、clang 等架构:x86、x64、ARM 等操作系统:Windows、Mac OS X、Linux、iOS、Android 等容易安装只有头文件的库。只需把头文件复制至你的项目中。独立、最小依赖不需依赖 STL、BOOST 等。只包含 <cstdio>, <cstdlib>, <cstring>, <inttypes.h>, <new>, &.

2021-12-21 16:15:05 8216 1

原创 cmake入门:手把手教入门实例介绍

1、单个源文件例如,假设现在我们的项目中只有一个源文件 add.c ,该程序的用途是计算两数之和。# Ly @ centos in ~/Project [10:55:23]$ lsadd.c步骤1:编写CMakeLists.txt首先编写 CMakeLists.txt 文件,并保存在与 add.c 源文件同个目录下。文件内容如下:# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (AddFun)#

2021-12-20 11:16:54 435

原创 原反补码的相互转换、补码加减法计算规则及例题

补码加法公式[x] 补 + [y] 补 = [x + y] 补 特点:不需要事先判断符号,符号位与码值位一起参加运算。符号位相加后若有进位,则舍去该进位数字。补码减法公式[x - y] 补 = [x] 补 - [y] 补 = [x] 补 + [-y] 补 特点:两数差的补码等于两数补码的差由下面例题可知,最终还是转化为补码加法来计算。...

2021-11-25 11:16:40 4893

原创 DNS域名解析,域名的解析过程图解

域名解析域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析的流程:...

2021-11-20 21:09:05 1139

原创 MTU、MSS的介绍和图示,以及对TCP、UDP传输数据的影响

MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小对于以太网数据帧:其中长度/类型字段,当这个值<1518时,那么代表了数据字段的长度;如果这个值>1518,则表示该以太网帧中的数据属于哪个上层协议,例如0x800,代表IP数据包;0x806,代表ARP数据包等。所以以太网EthernetII最大的数据帧是1518字节。MTU = 1518 - 以太网帧头(14) - 帧尾(4) = 150.

2021-11-20 18:17:18 3025

原创 网桥、网关、网卡之间的区别

网桥数据链路层互联的设备是网桥(bridge),在网络互联中它起到数据接收、地址过滤与数据转发的作用,用来实现多个网络系统之间的数据交换。工作在数据链路层。以太网中处理以太头部,在接收到以太帧之后,检查二层头部里的目的mac,随后查看本地的mac转发表(也可以叫二层转发表),找到匹配的mac地址条目对应的端口,不对二层头部作任何修改从端口转发出去。网桥的特点:网桥在数据链路层上实现局域网互连;网桥能够互连两个采用不同传输介质与不同传输速率的网络网桥以接收、存储、地址过滤与转发的方式实现互连.

2021-11-20 11:07:19 7851

原创 基于SSL的HTTPS协议:身份验证问题(CA认证)、数据安全问题(加密处理)

在 HTTP 协议中可能出现:1 通信使用明文(不加密),内容可能会被窃听2 不验证通信方的身份,因此有可能遭遇伪装3 无法证明报文的完整性,所以有可能已遭篡改使用 HTTPS 通信机制可以有效地防止这些问题,通常,HTTP 直接和 TCP 通信。当使用 SSL时,则演变成先和 SSL通信,再由 SSL和 TCP 通信了。针对信息窃听通信加密,用 SSL建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了:对称密钥加密(共享密钥加密)发送和接收数据的双方必须使用相同的密钥对.

2021-11-18 13:45:28 1068

原创 【刷题】剪花布条 其中涉及循环跳出条件以及int、unsigned int的区别

剪花布条题目:一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?输入:abcde a3aaaaaa aa输出:03//答案1int main(){ string str1, str2; while (cin >> str1 >> str2) { int len1 = str1.size(); int len2 = .

2021-11-17 21:43:46 97

原创 HTTP协议各版本差异以及图示

HTTP协议超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。HTTP使用的默认端口号是80端口HTTPS使用的默认端口是443端口HTTP协议发展http协议目前有4个版本,其中1.0和1.1版本在互联网上被广泛使用,2.0版本目前应用很少,是下一代的http协议。http/0.9版本:1991年,原型版本,功能简陋,只有一个命令GET,服务器只能

2021-11-17 10:58:03 4561

原创 【刷题】美国节日、蔡勒公式(一个推算周几的计算公式)

题目:和中国的节日不同,美国的节假日通常是选择某个月的第几个星期几这种形式,因此每一年的放假日期都不相同。具体规则如下:1月1日:元旦1月的第三个星期一:马丁·路德·金纪念日2月的第三个星期一:总统节5月的最后一个星期一:阵亡将士纪念日7月4日:美国国庆9月的第一个星期一:劳动节11月的第四个星期四:感恩节12月25日:圣诞节现在给出一个年份,请你帮忙生成当年节日的日期。蔡勒公式:蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。.

2021-11-16 10:31:08 566

原创 0-1背包问题、完全背包问题、多维背包问题详讲及代码示例

0-1背包问题有 N 件物品和一个容量为 V 的背包。放入第 i 件物品耗费的费用是 Ci(即占用背包的空间容量),得到的价值是 Wi。求解将哪些物品装入背包可使价值总和最大。这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。二维数组0-1背包问题的状态转移方程:F[i, v] = max{F[i − 1, v], F[i − 1, v − Ci] + Wi}一维数组0-1背包问题的状态转移方程(优化后节省了空间):F[v] = max{F[v], F[v − Ci]

2021-11-15 12:17:09 6472 1

原创 【C语言】常见转义字符表

C语言中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符转义字符释义\?在书写连续多个问号时使用,防止他们被解析成三字母词\’用于表示字符常量’\"用于表示一个字符串内部的双引号\\用于表示一个反斜杠,防止它被解释为一个转义序列符\a警告字符,蜂鸣\b退格符\f进纸符\n换行\r回车\t水平制表符\v垂直制表符\dddddd表示1~3个八进制.

2021-09-14 09:37:05 2039

原创 【操作系统】为什么TCP会粘包、UDP不会粘包?

TCP协议面向字节流发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。UDP协议面向数据报而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据,这一点和TCP是很不同的。怎样.

2021-08-27 13:52:03 3401

原创 网络层IP协议:IP网段划分(A类 B类 C类 D类 E类)

IP地址分类(A类 B类 C类 D类 E类)IP地址由四段组成,每个字段是一个字节,8位,最大值是255。IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。IPv4的地址长度为32位,共4个字节,但实际中我们用点分十进制记法。IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。全0和全1的都保留不用。A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF00

2021-08-26 22:02:14 9022

原创 【操作系统】TCP的三次握手过程、四次挥手断开连接过程

TCP握手协议 :在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。1、第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)2、第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;3、第三次握手:客户端收到服务器的S.

2021-08-25 18:32:39 565

转载 【操作系统】会话跟踪技术cookie和session的区别

常用的会话跟踪技术是Cookie与SessionCookie通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。而Web应用程序是使用HTTP协议传输数据的。H.

2021-08-24 20:35:32 151

转载 【操作系统】TCP流式传输、UDP数据报传输

tcp是流式传输假设A给B通过TCP发了200字节, 然后又发了300字节, 此时B调用recv(设置预期接受1000个字节),那么请问B实际接受到多少字节?根据tcp粘包特性,可知, B端调用一次recv,接受到的是500字节。所谓流式传输, 说白了, 就是管道中的水, 第一次给你发了200斤的水, 第二次给你发了300斤的水, 然后你在对端取的时候, 这200斤和300斤的水, 已经粘在一起了, 无法直接分割, 没有界限了。udp是数据报传输假设A给B通过udp发了200字节, 然后又.

2021-08-21 14:54:26 738

原创 【操作系统】进程间通信IPC——共享内存

共享内存的概念共享内存就是物理内存空间的一块缓冲区。共享内存是多个正在运行的进程之间共享和传递数据的一种非常有效的方式。共享内存实现进程间通信的原理:在物理内存空间申请一块缓冲区作为共享内存,多个进程将这一块物理内存通过自身的页表连接到自己的虚拟地址空间中,通过各自的虚拟地址对其进行访问,进而实现数据共享。共享内存不存在同步与互斥特性。共享内存的生命周期随内核。共享内存的使用头文件 <sys/shm.h>1、shmget()函数用来创建共享内存int shmge.

2021-08-12 16:40:11 171

原创 【Latex】txfonts与mathptmx宏包——mathcal字体问题

那么我们可以用下面的方法修正一下:\usepackage{txfonts}\let\mathbb=\varmathbb\DeclareSymbolFont{letters}{OML}{ztmcm}{m}{it}对于mathptmx包则用:\usepackage{mathptmx}\DeclareMathAlphabet{\mathcal}{OMS}{cmsy}{m}{n}\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}即可..

2021-08-10 15:38:58 5276 2

原创 【操作系统】shell内建命令,与可执行文件的区别

所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件。例如,用于进入或者切换目录的 cd 命令,虽然我们一直在使用它,但如果不加以注意很难意识到它与普通命令的性质是不一样的:该命令并不是某个外部文件,只要在 Shell 中你就一定可以运行这个命令。可以使用 type 来确定一个命令是否是内建命令:[root@localhost ~]# type cdcd is a Shell builtin[root@localhost ~]# type ifconfi

2021-08-07 14:54:53 232

转载 【操作系统】虚拟地址空间和物理地址空间的映射关系

打个比方,比如上课记笔记。某个笔记本有100张纸,课程有语文、数学、英语三门。对于这个笔记本的使用如下:分段式内存管理你从本子的第一张纸开始用,并且事先在本子上做划分:第2张到第30张纸记语文笔记,第31到60张纸记数学笔记,第61到100张纸记英语笔记。最后在第一张纸做个列表,这张纸称为段表。记录着三门笔记各自的范围。这就是分段管理。分段式存储的优点在分段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段…。这样每个进程有一个二维地址空间,相互独立,

2021-08-05 16:31:35 696

原创 【操作系统】环境变量——父子进程的传递性

// 查看环境变量 很简单的代码// 文件名:env.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){ char* env1 = getenv("MYVAL1"); if (env1 == NULL) printf("not found MYVAL1"); else printf("%s\n", env1); // 死循环,方便查看进程 while.

2021-08-05 09:51:33 451

原创 【操作系统】形象地解释并发和并行

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发。你吃饭吃到一半,电话来了,你停止吃饭接电话说了两句,然后放下电话继续吃饭,然后又放下饭碗接着打电话,一直循环下去…这说明你支持并发。两个人同时一起吃饭,说明两个人组成的系统支持并行。并发的关键是你有处理多个任务的能力,轮询处理方式。并行的关键是你有同时处理多个任务的能力,前提是多核CPU。...

2021-08-04 13:31:18 66

空空如也

空空如也

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

TA关注的人

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