- 博客(78)
- 收藏
- 关注
原创 git使用
当前我们已经删除了远程的⼏个分⽀,使⽤ git branch -a 命令可以查看所有本地分⽀和远程分⽀,但发现很多在远程仓库已经删除的分⽀在本地依然可以看到。在这种 Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提交到底是 merge 进来的还是正常提交的。在Git中打标签⾮常简单,⾸先,切换到需要打标签的分⽀上。找到一个目录下面执行下面命令。
2025-10-31 00:01:29
886
原创 MySQL内置函数
[在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3735cc88df354cf6b9ac495de444a796.png)
2025-10-23 23:38:11
694
原创 基于protobuf实现网络版本通讯录(protobuf 0基础可看)
message 消息类型名 {} 消息类型命名规范:使⽤驼峰命名法,⾸字⺟⼤写。在 message 中我们可以定义其属性字段,字段定义格式为:字段类型 字段名 = 字段唯⼀编号;字段名称命名规范:全⼩写字⺟,多个字⺟之间⽤ _ 连接。字段类型分为:标量数据类型 和 特殊类型(包括枚举、其他消息类型等)。字段唯⼀编号:⽤来标识字段,⼀旦开始使⽤就不能够再改变。
2025-10-09 23:20:59
669
原创 QT信号与槽
在 Qt 中,用户和控件的每次交互过程称为一个事件。比如 “用户点击按钮” 是一个事件,“用户关闭窗口” 也是一个事件。每个事件都会发出一个信号,例如用户点击按钮会发出 “按钮被点击” 的信号,用户关闭窗口会发出 “窗口被关闭” 的信号。Qt 中的所有控件都具有接收信号的能力,一个控件还可以接收多个不同的信号。对于接收到的每个信号,控件都会做出相应的响应动作。例如,按钮所在的窗口接收到 “按钮被点击” 的信号后,会做出 “关闭自己” 的响应动作;
2025-09-21 22:20:16
1008
原创 MySQL表的约束
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。主键约束:主键对应的字段中不能重复,一旦重复,操作失败。当表创建好以后但是没有主键的时候,可以再次追加主键。
2025-08-20 16:26:35
668
原创 QT基础入门
widget.ui 是窗体界面定义文件,是一个 XML 文件,定义了窗口上的所有组件的属性设置、布局,及其信号与槽函数的关联等。在设计界面时,只需在 UI 设计器里进行可视化设计即可,而不用管 widget.ui 文件是怎么生成的。我们看到,在上面的代码中,作为父对象的 window 会首先被析构,因为它是最后一个创建的对象。这个指针是用前面声明的 namespace Ui 里的 Widget 类定义的,所以指针 ui 是指向可视化设计的界面,后面要访问界面上的组件,都需要通过这个指针 ui 去访问。
2025-08-16 23:49:23
1354
原创 MySQL数据类型
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…当我们添加枚举值时,也可以添加对应的数字编号。该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…enum(‘选项1’,‘选项2’,‘选项3’,…该函数只可以查一个元素是否在集合中。
2025-08-16 15:09:58
892
原创 多路转接select
函数原型:参数说明:永久阻塞(NULL)定时阻塞(指定时间值)非阻塞轮询(零超时)输入:设置最大等待时间输出(Linux特有):返回时更新为剩余时间返回值:其实这个结构就是一个整数数组, 更严格的说, 是一个 “位图”. 使用位图中对应的位来表示要监视的文件描述符.提供了一组操作fd_set的接口, 来比较方便的操作位图.关于timeval结构timeval结构用于描述一段时间长度,如果在这个时间内,需要监视的描述符没有事件发生则函数返回,返回值为0。读就绪写就绪异常就绪总结:内核缓冲区是关
2025-08-15 17:31:05
1174
原创 MySQL库操作(DDL)
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci。
2025-08-14 18:00:18
347
原创 数据库基础
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。创建一个数据库就是在该路径下面创建一个目录,建立表,就是在创建的数据库目录下面建立文件。如果没有写-P 3306 默认是连接3306端口号。
2025-08-13 21:44:54
812
原创 NAT、代理服务、内网穿透
正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问控制等。正向代理代理的是客户端反向代理服务器是一种网络架构模式,其作为Web服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。
2025-08-12 16:10:34
1158
原创 数据链路层
数据链路层用于两个设备(同一种数据链路节点)之间进行传递,与网络层相比网络层负责报文在网络中如何进行路由,当我们的报文经过网络层路由到达目标IP所在的局域网路由器,如何把报文在局域网中把报文交给我们的目标主机,就是我们数据链路层解决的问题。我们知道局域网通信类型有多种如:以太网、无线LAN、令牌环网。下文我们讲解以以太网为例子。
2025-08-08 11:51:30
837
原创 网络层协议IP
意义: 接收方据此确定数据报的结束位置。在数据报需要被分片时,该字段的值也会在分片过程中被修改(每个分片都有自己的总长度值)。如果该数据报在传输过程中因为长度超过某个链路的 MTU 而需要被分片,那么所有属于该原始数据报的分片都共享相同的标识值。每一个路由器都有一个路由表,记录自己处的网络地址以及对外所有路由器的网络地址,还有对内所有路由器的网络地址,以及各个路由器的下一条地址,就是要去哪一个路由器。作用: 指定当前分片所携带的数据在原始未分片数据报的数据部分中的起始位置(相对于数据部分开头)。
2025-08-01 17:21:25
987
4
原创 传输层协议TCP
TCP 全称为"传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制;
2025-07-25 23:58:43
1206
原创 传输层协议UDP
其中"源IP", “源端口号”, “目的IP”, "目的端口号"四元组规定了世界上唯一的两个进程。在TCP/IP 协议中, 用"源IP", “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n 查看);我们注意到, UDP 协议首部中有一个16 位的最大长度. 也就是说一个UDP 能传输的数据最大长度是64K(包含UDP 首部).如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;
2025-07-12 12:35:14
1119
原创 应用层协议HTTP
无论是 HTTP 301 还是 HTTP 302 重定向,都需要依赖 Location 选项来指定资源的新位置。这个 Location 选项是一个标准的 HTTP 响应头部,用于告诉浏览器应该将请求重定向到哪个新的 URL 地址。永久重定向就是会把重定向目标进行缓存下次直接去重定向的资源,临时重定向不会进行缓存每次都要去老的去看看再去重定向目标。
2025-07-06 22:51:41
884
原创 HTTPS 协议原理
加密就是把明文(要传输的信息)进行一系列变换, 生成密文.解密就是把密文再进行一系列变换, 还原成明文.在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为密钥数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
2025-07-06 17:13:35
1079
原创 connect的断线重连
通过本次客户端断线重连我们要理解我们不仅仅可以对我们的服务端进行设计我们的客户端同样如此比如客户端的收发信息我们可以设计为多线程模式等等。
2025-07-04 17:31:57
239
原创 应用层自定义协议与序列化
本文介绍了应用层自定义协议与序列化的概念,并通过网络版计算器的例子展示了如何实现客户端与服务器之间的通信。应用层协议是程序员为解决实际问题而设计的网络程序,协议是双方约定的结构化数据。在网络版计算器中,客户端发送形如"1+1"的字符串或通过序列化将结构体转换为字符串,服务器接收后进行反序列化并返回结果。序列化是将结构化数据转换为字符串,反序列化则是将字符串还原为结构化数据。文章还解释了TCP的全双工特性,即同时支持发送和接收数据,并通过代码展示了如何实现TCP套接字的创建、绑定、监听、接
2025-05-17 12:55:30
1001
原创 Socket 编程 UDP
其中 inet_pton 和 inet_ntop 不仅可以转换 IPv4 的 in_addr,还可以转换 IPv6 的。我们手动进行释放. 那么问题来了, 如果我们调用多次这个函数, 会有什么样的效果呢?man 手册上说, inet_ntoa 函数, 是把这个返回结果放到了静态存储区. 这个时候不需要。inet_ntoa 这个函数返回了一个 char*, 很显然是这个函数自己在内部为我们申请了一块。因为 inet_ntoa 把结果放到自己内部的一个静态存储区, 这样第二次调用时的结果会覆。
2025-05-03 14:56:46
1201
原创 网络基础概念
TCP/IP 协议的本质是一种解决方案TCP/IP 协议能分层,前提是因为问题们本身能分层数据链路层负责通过路由转发网络层负责找到目标主机传输层负责数据传输以及数据丢失处理用户层处理数据使用数据关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
2025-04-27 22:38:20
1586
原创 线程概念与控制
思考⼀下,如果在没有虚拟内存和分⻚机制的情况下,每⼀个⽤⼾程序在物理内存上所对应的空间必须是连续的,如下图:因为每⼀个程序的代码、数据⻓度都是不⼀样的,按照这样的映射⽅式,物理内存将会被分割成各种离散的、⼤⼩不同的块。经过⼀段运⾏时间之后,有些程序会退出,那么它们占据的物理内存空间可以被回收,导致这些物理内存都是以很多碎⽚的形式存在。怎么办呢?我们希望操作系统提供给⽤⼾的空间必须是连续的,但是物理内存最好不要连续。此时虚拟内存和分⻚便出现了,如下图所⽰:把物理内存按照⼀个固定的⻓度的⻚框进⾏分割,有
2025-04-20 17:21:01
679
原创 Ext系列⽂件系统
ln -s <源文件或目录> <目标链接名>rm <链接名>unlink <链接名>软链接是通过名字引⽤另外⼀个⽂件,但实际上,新的⽂件和被引⽤的⽂件的inode不同,应⽤常⻅上可以想象成⼀个快捷⽅式。
2025-04-18 22:18:23
769
原创 Linux基础IO
这是因为我们没进行重定向之前是默认往1号文件描述符打的因此是行刷新,但是重定向到一个文件就是全刷新,因此在进程退出时,我们的库函数才会打印出来。缓冲区其实就是一块存数据的地方,有了·缓冲区可以方便我们用户的操作加快效率,在语言层的缓冲区的建立有利于我们减少调用系统接口的次数,从而减少我们调用系统的成本。可以看到我们的打印缓冲区写入了我们的helloworld但是由于我们打开的文件不是显示器文件因此是全缓冲并不会直接打印,但是们的缓冲区是有的。因此我们的重定向就是修改我们文件描述符表指向的文件。
2025-03-05 22:38:00
1014
原创 Linux进程概念
我们qq发消息的时候其实就是两台冯诺依曼结构在进行数据交流,首先两者都登录qq运行qq,使qq程序以相关代码加载内存,当有一个发消息时就是从输入设备输入信息,qq已经在我们的内存了,就可以用代码读取数据到我们的内存接着通过网络发送到对方输入设备网卡,对方就可以从网卡读取数据从而看到消息。我们知道一个进程是互相独立的,子进程会拷贝一份父进程的虚拟地址表但是页表里面规定了父子进程的权限访问数据只能以只读方式访问,当父子其中有一方想要修改变量,就会出现错误从而发生写实拷贝再更新页表的映射关系即可。
2025-02-12 14:50:23
903
1
原创 Linux基础开发工具(gcc/c++ make/Makefile gdb/cgdb)
vim就是我们写代码来用的可以理解为一个记事本,本质上就是一个多模式的文本编辑器vim有多种模式本文主要介绍命令模式,插入模式以及末行模式控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊插入模式下,或者到 末行模式只有在插入模式下才能进行文字输入,该模式是我们使用最频繁的编辑模式。⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。
2025-01-21 18:13:10
849
1
原创 Linux权限的概念
由上面的讲述我们就可以知道shell从技术上定义就是:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
2025-01-06 19:08:00
652
原创 手把手带你了解Linux基础指令
ls就是对于目录文件来说,就是显示目录文件下所有文件的名字属性,-l就是显示更多的文件属性,-a就是目录下所有的文件,-d就是显示当前目录文件属性而不是当前目录下面的文件属性。cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。来查看一个文件的内容!
2025-01-04 20:57:33
741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅