自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 传输层协议UDP和TCP

传输层协议UDP和TCP是网络通信中常用的两种协议。UDP(用户数据报协议)是一种无连接、不可靠的协议,适用于对实时性要求较高的场景,如视频流、在线游戏等。UDP通过端口号标识应用程序,报文结构简单,具有自描述字段,能够解包和分用数据,但不保证数据顺序和完整性。TCP(传输控制协议)则是一种面向连接、可靠的协议,适用于需要数据完整性和顺序的场景,如文件传输、网页浏览等。TCP通过确认应答机制保证数据的可靠传输,具有发送和接收缓冲区,能够控制数据的发送和接收。两者的主要区别在于连接的建立、可靠性和数据传输的控

2025-05-09 08:12:05 1443 2

原创 Linux总目录

这里是Linux教学总目录,建议按照顺序观看。

2025-03-08 18:00:06 387

原创 C++教学总目录

C++教学总目录,对于每一篇按照顺序都有链接。

2024-04-18 18:04:41 413 1

原创 MongoDB入门指南:环境安装与基本操作

本文摘要介绍了在Ubuntu系统上安装MongoDB的详细步骤,包括导入公钥、创建文件列表、安装MongoDB Community Server等。文章还涵盖了MongoDB的基本概念、优势、应用场景及其与传统RDBMS的区别,并提供了常用操作命令如查看帮助文档、服务器状态、数据库连接地址以及数据备份与恢复的方法。此外,文中还包含一个生成测试数据的示例脚本,展示了MongoDB的灵活性和易用性。

2025-06-11 21:52:11 1159 1

原创 Golang——10、日志处理和正则处理

本文介绍了go-zero框架中的日志处理包logx和Golang正则处理包regexp的使用方法。 logx日志处理部分: 概述logx的特点:统一日志格式、自动切割、多输出模式、链路追踪等 详细说明LogConf配置项及各参数含义 提供常用日志方法示例(Info/Error/Debug等) 演示日志初始化和panic捕获 正则处理部分: 介绍正则表达式基本语法 展示MatchString基本匹配用法 说明MustCompile和FindAllString等常见函数 提供字符串匹配数字等实用示例 全文通过代

2025-06-07 13:22:36 813 1

原创 MySQL——8、索引特性

介绍MySQL中索引的原理和概念。

2025-06-07 10:46:18 786

原创 Redis——1、服务端高并发分布式结构演进之路

本文主要介绍服务端高并发分布式架构演进的过程。

2025-06-06 15:57:14 1407

原创 Golang——9、反射和文件操作

本文介绍了Go语言中的反射机制和文件操作相关内容。反射部分主要讲解了reflect包的使用,包括: 通过reflect.TypeOf获取变量类型信息,区分Name和Kind 通过reflect.ValueOf获取变量值信息,并进行类型转换和值修改 结构体反射的应用,包括获取字段信息和方法信息 反射可以获取和修改结构体字段值,调用结构体方法 文件操作部分简要提及了读取文件内容的实现方式。反射机制是Go语言中处理动态类型的重要工具,能够实现运行时类型检查和动态调用等功能,为程序提供了更大的灵活性。

2025-06-05 16:28:58 1146 1

原创 Golang——8、协程和管道

本文介绍了Go语言中的协程(goroutine)和管道的使用。协程是轻量级线程,相比传统线程占用内存更少、切换开销更小。文章通过示例演示了如何使用sync.WaitGroup实现主线程等待协程完成,以及如何启动多个协程并行处理任务。在素数统计案例中,协程将计算时间从12秒缩短至3秒。 管道是Go语言中协程间的通信机制,遵循先进先出原则。文章讲解了管道的创建、发送接收数据等基本操作,并指出管道类似队列结构。通过协程和管道的配合,可以实现高效的并发编程。这些特性使Go语言在处理高并发任务时具有显著优势。

2025-06-05 10:36:24 988

原创 Golang——6、指针和结构体

介绍Golang中指针和结构体的使用。

2025-06-04 14:47:15 1114 1

原创 Golang——7、包与接口详解

介绍Golang中包的定义和导入,介绍interface的使用。

2025-06-04 14:46:26 872

原创 Golang——5、函数详解、time包及日期函数

Go语言函数详解摘要 本文系统介绍了Go语言中函数的定义与使用:1) 函数定义使用func关键字,支持参数类型简写和可变参数;2) 函数支持多返回值,可对返回值命名;3) 通过type可定义函数类型,函数可作为参数和返回值;4) 演示了排序算法、map处理等实例。关键点包括:可变参数用...标识,返回值命名可直接使用,函数类型实现高阶函数特性。全局/局部变量作用域规则与常规语言一致。

2025-06-02 15:38:46 953 1

原创 Golang——4、数组、切片和map

本文介绍了Go语言中的数组、切片和map的基本概念与使用方式。数组是固定长度的同一类型元素集合,长度是类型的一部分;切片是可变长度的序列,基于数组封装,支持自动扩容。文章详细讲解了数组的定义、初始化、遍历、值类型特性以及多维数组;切片的定义、nil值处理、遍历及基于数组的切片创建。这些基础数据结构在Go语言中具有重要作用,数组提供快速索引,而切片则更加灵活。理解这些概念有助于掌握Go语言的核心数据结构和内存管理机制。

2025-06-02 10:24:22 838

原创 Golang——3、流程控制语句

本文介绍了Go语言中的主要流程控制语句,包括if-else分支、for循环、for range遍历和switch-case分支。重点讲解了if-else的多种写法、for循环的不同形式(包括无限循环和嵌套循环),以及switch-case的分支处理和穿透特性。此外,文章还通过多个编程练习(如求最大值、阶乘计算、九九乘法表等)演示了这些流程控制语句的实际应用。Go语言的流程控制设计简洁高效,如省略括号、不允许省略花括号等特性体现了其规范化的编程风格。

2025-06-01 10:36:52 630 1

原创 Golang——2、基本数据类型和运算符

Go语言数据类型分为基本类型和复合类型。基本类型包括整型(int8/int16/int32/int64及无符号版本)、浮点型(float32/float64)、布尔型(bool)和字符串(string)。文章通过代码示例演示了各类型的使用方法,包括类型转换、数字字面量语法、浮点数精度问题、布尔型特性以及字符串操作(拼接、分割、索引等)。特别指出浮点数运算存在精度损失问题,建议使用第三方库解决;字符串采用UTF-8编码,支持多行反引号语法和丰富的内置操作方法。

2025-05-30 23:10:26 1374 1

原创 Golang——1、环境搭建与入门

本文介绍了Go语言的基本概念、环境搭建及入门知识。首先,Go语言由Google开发,旨在提供高效、简洁的编程体验,结合了C语言的高性能和Python的开发速度。接着,详细说明了如何下载和安装Go语言,并通过命令行验证安装成功。文章还介绍了如何在VSCode中配置Go开发环境,并创建和运行简单的Go项目。此外,文章对比了Go语言中的打印函数(Print、Println、Printf)及其区别,并介绍了常用的占位符。最后,文章详细讲解了Go语言中变量的声明、初始化、类型推导、短变量声明法以及匿名变量的使用。通过

2025-05-22 20:34:26 647

原创 MySQL——7、复合查询和表的内外连接

本文介绍了SQL查询中的复合查询技术,包括基本查询、多表查询、自连接、子查询和合并查询。基本查询部分涵盖了条件查询、排序、聚合统计等操作,如查询工资高于500或岗位为MANAGER的雇员,并按部门号和工资排序。多表查询部分通过笛卡尔积展示了如何联合查询来自不同表的数据,如显示雇员名、工资及部门名。自连接部分解释了如何在同一张表内进行连接查询,如查询员工的上级领导信息。子查询部分详细介绍了单行、多行、多列子查询的使用场景,如查询与SMITH同部门的员工。最后,合并查询部分介绍了使用UNION和UNION AL

2025-05-19 10:35:21 752

原创 MySQL——6、内置函数

本文介绍了多种内置函数的使用方法,主要包括日期函数、字符串函数、数学函数和其他函数。日期函数部分涵盖了获取当前日期、时间、时间戳、日期时间,以及日期加减、日期差计算等操作。字符串函数部分包括字符集获取、字符串连接、查找、大小写转换、截取、长度计算、替换、去除空格等操作。数学函数部分涉及绝对值、进制转换、取整、格式化、取模、随机数生成等操作。其他函数部分介绍了查询当前用户、MD5摘要、显示当前数据库、空值处理等功能。这些函数在数据处理和操作中具有广泛的应用,能够有效提升开发效率。

2025-05-18 16:52:01 577

原创 MySQL——5、基本查询

本文介绍了数据库表的增删改查(CURD)操作,重点讲解了Create(创建)和Retrieve(读取)部分。在Create部分,详细说明了如何向表中插入数据,包括单行全列插入、多行指定列插入、插入冲突时的更新操作以及替换操作。在Retrieve部分,介绍了如何查询数据,包括全列查询、指定列查询、查询字段为表达式、为查询结果指定别名、结果去重等操作。此外,还详细讲解了where条件的使用,包括比较运算符、NULL值的判断、以及复杂条件的组合查询。通过这些操作,用户可以灵活地管理和查询数据库中的数据。

2025-05-18 14:34:39 1225

原创 MySQL——4、表的约束

表的约束用于确保数据的合法性和正确性,常见的约束包括空属性(NULL/NOT NULL)、默认值(DEFAULT)、列描述(COMMENT)、零填充(ZEROFILL)、主键(PRIMARY KEY)、自增长(AUTO_INCREMENT)和唯一键(UNIQUE KEY)。空属性用于指定字段是否允许为空,默认值用于为字段提供预设值,列描述用于为字段添加注释,零填充用于在数字前补零,主键用于唯一标识表中的记录,自增长用于自动生成唯一值,唯一键用于确保字段值的唯一性。这些约束共同作用,确保数据的完整性和一致性。

2025-05-17 18:39:30 862

原创 MySQL——3、数据类型

本文详细介绍了MySQL中的数据类型,包括数值类型、字符串类型、日期和时间类型等。数值类型中,重点讲解了tinyint、bit、float和decimal的使用方法及其取值范围,强调了MySQL对数据合法性的严格约束。字符串类型部分,对比了char和varchar的存储方式及适用场景,指出char适合定长字符串,而varchar适合变长字符串。日期和时间类型则简要介绍了其基本概念。通过具体示例,展示了如何创建表、插入数据以及处理数据类型约束,帮助开发者更好地理解和使用MySQL中的数据类型。

2025-05-16 19:28:07 862

原创 MySQL——2、库的操作和表的操作

本文介绍了数据库和表的基本操作,包括创建和删除数据库、字符集和校验规则的设置、校验规则对数据库的影响、数据库的备份与恢复、以及表的创建。通过示例展示了如何查看和修改数据库的字符集和校验规则,并说明了不同校验规则对数据查询和排序的影响。此外,还介绍了如何备份和恢复数据库,以及创建表时的存储引擎选择。这些操作是数据库管理的基础,帮助用户更好地管理和维护数据库系统。

2025-05-16 12:52:15 742

原创 MySQL——1、数据库基础

本文介绍了MySQL数据库的基础知识,包括安装步骤、数据库概念、使用案例、架构与SQL分类以及存储引擎。首先,详细说明了如何在Linux系统上安装和配置MySQL,包括更新软件包、安装MySQL服务、启动服务以及配置mysqld.cnf文件。接着,解释了数据库的基本概念,如MySQL的客户端和服务端、数据库的存储结构及其与文件系统的关系。文章还通过一个简单的案例展示了如何创建数据库、表以及插入和查询数据。

2025-05-15 15:44:24 1160

原创 《深入浅出Git:从版本控制原理到高效协作实战》​

但是随着版本的不断增多,维护好版本是很有挑战的。而且各自版本修改的内容我们不一定能记得了。所以就需要版本控制器:记录每次修改以及版本迭代的一个管理系统。目前最主流的就是Git。Git可以控制电脑上的所有格式的文档,对于我们开发人员来说可以控制项目中的源代码文档。

2025-04-27 20:50:56 850 1

原创 《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​

Protobuf从安装到使用保姆级教学。

2025-04-25 21:46:31 1002

原创 Linux高级IO

如何更好的理解IO,什么叫作高效的IO?

2025-04-21 18:54:37 896

原创 NAT、代理服务、内网穿透

对原始报文中的源IP地址进行替换,替换成途径路由器的WAN口IP的过程,我们称之为NAT(Network Address Translation)网络地址转换。只要发出去消息,出入口路由器NAPT一旦构建,就相当于在各自的路由器打了一个洞,可以让外部通过这个洞口进来,这就叫做内网打洞。很显然,服务器端打印的IP地址和我们的内网IP地址是不一样的。学校里的主机就好像远程访问到了家里的这台主机,这种技术我们称为内网穿透。你的主机访问云服务器,服务器上打印出来的IP地址并不是你的内网IP。

2025-04-17 08:48:18 1314

原创 数据链路层

现在发送数据,在网络层通过目标IP进行路由,查找路由表,找到下一跳或者缺省路由,获取下一跳IP地址,而下一跳和当前主机一定在同一个子网中,当前主机发起ARP请求获取下一跳的MAC地址,然后就向下交付给数据链路层封装MAC帧,转发给下一个主机。上面的图中就是转发给路由器,然后路由器网卡向上交付给数据链路层,进行解包分用,交付给网络层,根据目的IP继续查找路由表,同样找到下一跳IP地址然后发起ARP获取MAC地址,向下封装就可以继续转发。当数据丢包了,或者某个路由器挂掉了,那么发送方长时间得不到应答,传输层TC

2025-04-16 17:21:56 762

原创 网络层IP协议

现在如果陕西省内的一台主机192.168.1.201想要访问www.google.com网站,假设目标IP地址为1.2.3.4,并且假设不存在墙。那么当前主机首先会将目标IP地址与自己的子网掩码255.255.255.0进行按位与,然后跟自己所在的目标网络进行比较,发现不是当前所在的目标网络,该主机也不知道这个IP地址是谁,但是可以肯定的是绝对不在当前子网,所以转发给家用路由器。家用路由器和运营商的出入口路由器在同一个子网中,家用路由器拿着目标IP地址再与WAN口IP的子网掩码进行按位与操作,得到1.2.3

2025-04-16 10:14:52 877

原创 HTTPS协议原理

加密就是把明文(要传输的信息)进行一系列变换,生成密文。解密就是把密文再进行一系列变换,还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。如图,今天我的明文数据是123456,经过密钥加密后就变成XXXXYYYY的密文。然后密文经过密钥解密同样也可以还原出明文。数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。

2025-04-15 17:38:32 1000

原创 应用层协议HTTP

虽然说,应用层协议是程序员自己定的,但是已经有大神定义了一些现成的,可供我们直接使用。HTTP协议——超文本传输协议就是其中之一。在互联网世界中, HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。 HTTP 协议是一个无连接、无状态的协议,即每

2025-04-15 11:35:32 1072 1

原创 应用层自定义协议与序列化

应用层自定义协议与序列化反序列化。

2025-04-06 08:45:53 813

原创 Socket编程TCP

如果不关闭文件,那么fd的值就会一直增加,而fd属于有用的、有限的资源,如果不关闭就会导致fd泄漏问题。另外如果客户端很多的话那fd不是会一直增加吗,如果fd只有32、64那不就不够用了吗?确实如此,Linux是支持对文件描述符个数进行扩展的,默认云服务器的fd数量是比较多的。

2025-04-05 09:09:31 1173

原创 Socket编程UDP

首先给出EchoServer目录结构:服务器的类我们实现在UdpServer.hpp中,然后在UdpServerMain.cc中启动服务器。客户端相关代码我们就直接在UdpClientMain.cc中实现了,如果有兴趣后续你可以自己在UdpClient.hpp中封装,常用的部分我们放在Common.hpp中,然后将直接写的策略模式日志拿过来方便测试,最后使用make/makefile来自动化构建项目。1、创建套接字:使用socket创建套接字,第一个参数domain表示域或协议家族,AF_INET表示网

2025-04-02 14:30:38 931

原创 网络基础概念

传输层网络层都是对所有协议的统称,传输层有很多协议比如:TCP、UDP,网络层也有很多,那么这么多协议操作系统要不要管理呢?当然要管理,如何管理?——先描述,再组织。所以协议就是结构体。操作系统使用C语言写的,而网络属于操作系统,因此TCP/IP网络也是用C写的。而Windows和Linux操作系统的源代码是不一样的,但是它们网络部分的代码必须是一样的。那么今天windows上有一个协议struct protocol,里面三个整形变量a,b,c。主机A定义了一个数据data赋值10、20、30。

2025-03-31 20:14:55 980

原创 Linux线程同步与互斥

线程互斥与同步,以及线程安全问题。

2025-03-30 15:06:25 432

原创 Linux线程概念与控制

线程是进程内部的一个执行分支。线程的执行粒度比进程要细。

2025-03-27 14:16:09 878

原创 Linux进程信号

信号的发送本质就是给进程的PCB发送,因此进程PCB内部必定要有结构来保存信号。为什么要保存信号?因为进程收到信号之后可能不会立即处理这个信号。那么信号从发送给进程到开始被处理就会存在一个时间窗口,所以需要保存信号。也就是说task_struct里面会有保存信号的结构,实际上这个结构是个位图,如下图:通过位图来管理信号,上图的第一个位置为1,表示的就是进程收到了1号信号。1、比特位的内容是0还是1,表明进程是否收到了信号。2、比特位的位置(第几个),表示信号的编号。

2025-03-25 16:17:56 677

原创 Linux进程间通信

介绍进程间通信的方式:管道、共享内存、消息队列、信号量。

2025-03-23 12:04:32 850

原创 Linux基础IO(终)——动静态库和进程地址空间

介绍动静态库的制作和使用,如何解决动态库加载问题,进程地址空间。

2025-03-21 11:25:47 1064

空空如也

空空如也

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

TA关注的人

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