自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Docker镜像制作实战

场景用法可变参数程序固定命令ENTRYPOINT简单默认命令CMD👉 Docker 容器的本质:容器 ≈ 一个进程(PID 1)👉 你写 CMD / ENTRYPOINT,本质就是在决定:谁是 PID 1Docker 是C-S 架构Client(你执行的机器)当你执行:👉 最后的就是build context(构建上下文)= 控制“哪些文件参与构建”的过滤器👉 本质是优化 build context,而不是 COPY 行为内容单阶段多阶段gcc✅❌。

2026-04-10 23:05:12 513

原创 Docker 核心技术和实现原理

当官方镜像无法满足特定需求时,需要自定义镜像,常见原因包括:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]mkdir -p /data/maxhou/commitimagecd /data/maxhou/commitimage#include <stdio.h>int main() {printf("hello docker!\n");return 0;}docker run -it --name mycpp

2026-04-10 10:46:38 605

原创 docker使用

主要技术:chrootJailVServer特点:主要解决隔离问题应用场景有限没有形成生态容器技术发展逻辑:1979chroot(文件隔离)↓2006cgroups(资源隔离)↓2008LXC(真正容器)↓2013Docker(容器生态)↓2014Kubernetes(容器编排)↓现在云原生生态一句话总结:Docker 解决:如何运行容器。

2026-04-06 14:11:45 595

原创 MySQL事务和锁

锁的情况下,也就是只对当前修改⾏加了独占⾏锁(X),这时记录前的间隙没有被锁定,其他的事 务就可以向这个间隙中插⼊记录,就会导致⼀个问题:事务A查询了⼀个区间的记录得到结果集A,事 务B向这个区间的间隙中写⼊了⼀条记录,事务A以当前读的方式再查询这个区间的结果集时会查到事务B新写⼊的记 录得到结果集B(快照读是没问题的,看不见插入数据),两次查询的结果集不⼀致,这个现象就是"幻读"。在插⼊数据 时会在表上加⾃增锁,并⽣成⾃增值,同时阻塞其他的事务操作,以保证值的唯⼀性。⽽不是在不同的位置编写多个类似的。

2026-03-08 21:56:51 353

原创 windows连接服务器免密

将私钥下载下来,然后移动到windows的ssh配置路径下,后面再去进行config的配置。:客户端用的是私钥,服务器需要的是公钥,配置的是客户端方的config文件,加入私钥的路径。那个字符串是个标识,无所谓,然后连续三个空格即可,在默认路径下生成了私钥和公钥。文件的权限必须是600才可以。上创建或修改SSH配置文件(:在本地生成SSH密钥对()的内容复制到服务器的。

2025-12-25 23:06:43 515

原创 C++11介绍

左值就是可以进行取地址的变量,一般左值就是有名变量。右值就是不能取地址的变量,像临时变量、匿名变量都是右值,它们都是无名变量左值引用可以引用左值,const 左值引用可以引用左值和右值,右值引用只能引用右值,不能引用左值,会直接报错int main()return 0;编译器会将10隐式创建一个临时int变量,然后rr1其实引用的是那个临时int变量x+y同理,会将结果3.3创建一个临时double变量,然后rr2引用的其实是临时double变量。

2025-12-21 14:45:33 818

原创 C++哈希表设计

第一个模板参数是键值类型,第二个模板参数是映射值类型,这就是unordered_map的元素的键值和映射值类型,第三个模板参数是仿函数类,可以将键值计算为对应哈希值,第四个参数忽略,第五个参数空间配置器类型。

2025-12-16 22:23:08 886

原创 C++的map和set

1、对搜索树性质的验证看中序是不是有序的2、对平衡树性质的验证检查每个节点的平衡因子绝对值不超过1即可。

2025-12-11 17:42:00 1015 1

原创 二叉搜索树

或者是具有以下性质的二叉树:将该数组按顺序进行插入,得到以下二叉搜索树1.a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b、最多查找高度次,走到空,还没找到,这个值不存在。2.插入的具体过程如下:a.b.3. 二叉搜索树的删除a.b.c.d.

2025-12-08 12:25:43 351

原创 C++多态

等到使用基类的引用或指针调用重写过的虚函数时,编译器不会直接确定要执行的函数,而是取对象头部的虚函数表指针,如果实际对象是基类对象,那么这个虚函数表指针指向的应该是基类的虚函数表,如果实际对象是派生类对象,那这个虚函数表指针指向的应该是派生类的虚函数表,然后去虚函数表中找到对应的虚函数地址,然后执行。当一个类继承了一个有虚函数的基类或者自身定义了虚函数,那么该类对象中就有虚函数表指针,虚函数表同样编译器在编译期生成存在只读数据段里,里面存的是虚函数表指针,虚函数表用来实现多态。

2025-12-07 15:49:00 1013

原创 C++继承

机制是面向对象程序设计。

2025-12-06 21:41:57 704

原创 stack和queue

第一个模板参数是元素类型,第二个模板参数是底层容器类型,第三个模板参数是一个仿函数类型,operator()重载是子节点与父节点应该满足的比较规则,比如less底层就是重载operator()进行小于号比较,其实就是子节点应该小于父节点,该种比较规则下建的堆是大堆。

2025-12-05 22:47:37 1070

原创 list模拟实现

一个指向哨兵头结点的指针,一个有效节点个数。其底层为带头双向循环链表,其链表节点有三个成员,其中一个值,是数据域,两个指针一前一后,是指针域。

2025-12-02 14:10:46 438

原创 STL库vector模拟实现

T* _start, T* _finish,T* _end_of_storage,分别是指向第一个有效元素,最后一个有效元素的下一个位置,可容纳元素中最后一个元素的下一个位置。当_start== _finish时,有效元素个数为0。

2025-12-01 23:57:54 496

原创 STL和string实现

标准模板库。

2025-11-30 21:05:18 1152

原创 C/C++内存管理

内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。

2025-11-29 21:12:20 849

原创 C++类和对象

如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。,当编译器编译调用成员函数的代码时,会自动将对象地址作为实参传递给 this形参。结构体总大小为:最大对齐数(成员的对齐数中的最大值)的整数倍。体大小就是最终最大对齐数(含嵌套结构体的对齐数)的整数倍。一样的东西,指明了类有哪些成员,定义出一个类其实。在类内声明,类体外定义成员函数时,需要使用。其他成员的偏移量应是对应对齐数的整数倍。C,而c中结构体的成员是可以直接访问的),类的所有成员都在类的作用域中。

2025-11-27 21:23:24 525

原创 C++入门

为函数的。

2025-11-26 20:01:29 656

原创 Reactor反应堆模式

如果我们往发送缓冲区中一次写很多数据,那么很可能最后只能写入一部分,然后write会返回写入发送缓冲区的数据的字节数,如果写是非阻塞的,那么当发送缓冲区满了的时候,write会直接返回-1,设置errno为EAGAIN。上面的代码中,当对接受缓冲区中的数据接收并处理过之后,会将结果数据保存在另一个缓冲区中,然后启动可写事件监控,当结果数据没了之后,那就关闭可写事件监控。的文件描述符,如果已有对应文件描述符则添加失败。已监控文件描述符的事件(覆盖式)epoll_ctl有三种操作。

2025-11-21 20:03:44 456

原创 IP 分片和组装的具体过程

在ip层,会检查IP报文的MF和片偏移是否全都是0,如果全都是0说明不是分片ip报文,那就直接解包后交给上层,否则该ip报文就是分片ip报文,查找四元组{上层协议,16位标识,源ip,目的ip}为键值的分片链表,如果有就将有效载荷加入到分片链表中,如果没有那就创建对应的四元组标识的分片链表,当接收到MF为1且片偏移为0的首个分片IP报文时,需要将该报文的ip头也用四元组映射起来,首分片ip报文的报头中会保存有ip的选项信息,当分片链表接收齐有效载荷分片后就组装出上层报文,然后交付给上层。

2025-11-18 12:56:48 361

原创 TCP 全连接队列与tcpdump 抓包

服务器进程退出,会释放进程资源,监听套接字本身就是无连接的,所以直接全部释放即可。对于监听套接字的全连接队列中已建立连接但未accept的套接字,会直接向对应客户端发送RST包,然后释放全连接队列中的struct sock结构。对于已经accept的通信套接字,会释放struct file 和struct socket,保留struct sock,并发送FIN包,开始四次挥手。

2025-11-17 15:22:59 1122

原创 HTTP cookie 与 session

1.username指明用户,expires是该持久cookie的失效时间,path和domain作为限制,只有url请求的是该路径的文件或子目录、发送的是特定的域名,那浏览器进程才会在http报头的选项中加上cookie。如果设置了secure,那么只有https请求,才会加上cookie,http就不行了2.Cookie中每个属性都以分号(;)和空格( )分隔, 属性的名称和值之间使用等号(=)分隔。注意。

2025-11-15 22:53:58 897

原创 进程间关系与守护进程

1、shell解析命令行,创建子进程后子进程设置为新进程组,仍处于同一会话2、如果是管道命令,多个子进程异步执行,通过管道来执行作业,这几个进程处于同一个进程组。

2025-11-13 22:13:00 786

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

自定义应用层协议处理tcp粘包问题,使用jsoncpp库实现数据序列化和反序列化,实现网络计算器。

2025-11-12 15:41:43 764

原创 connect 的断线重连

【代码】connect 的断线重连。

2025-11-11 22:14:14 281

原创 网络命令ping、netstat、pidof

其中TTL就是目的主机到ping进程主机所剩余的跳数,IP层报头里的TTL从64减为了53,序号的话ICMP报头里有,从ICMP响应报文有效载荷中读出发送请求时的时间戳,再和接收到响应报文的时间戳做减法,最后得到往来时间,ping进程将字符串write写进标准输出也就是从设备,然后终端驱动将从设备数据写进主设备,终端模拟器读出后显示出来。2.ping发送请求到目标主机,目标主机通过硬件中断和协议栈函数就处理了该请求,根本就没涉及套接字,但是ping进程一方必须有套接字帮助,只有硬件中断不行。

2025-11-10 21:02:20 1300

原创 网络基础概念

物理层由网卡、以太网的双绞线、wifi的电磁波来负责•。

2025-11-10 12:45:59 932

原创 线程同步和互斥

互斥量的封装。

2025-11-07 16:47:19 848

原创 线程概念与控制

Linux线程概念Linux线程概念什么是线程•⼀个程序⾥会有多个执行线路,其中的⼀个执⾏路线就叫做线程(thread)。•⼀个进程⾄少都有⼀个线程•线程在进程内运⾏,本质是在进程地址空间内运⾏•在CPU眼中,看到的线程的PCB都要⽐传统的进程更加轻量化•线程之间共享进程地址空间,可以看到进程的⼤部分资源,将进程资源合理分配给每个执⾏流,就形成了线程执⾏流分⻚式存储管理虚拟地址和⻚表的由来我们希望操作系统提供给进程使用的空间连续的,但是实际物理内存最好不要连续。

2025-11-02 21:05:28 568

原创 Linux进程信号

信号处理函数如果是自定义信号处理函数,内核在处理该信号时,就需要切换到⽤⼾态执⾏这个处理函数。

2025-10-29 23:25:34 880

原创 进程间通信

进程间通信方式1、管道匿名管道pipe命名管道2、共享内存system V共享内存posix 共享内存管道•管道是Unix中最古⽼的进程间通信的形式。•我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个“管道”匿名管道站在⽂件描述符⻆度-深度理解管道。

2025-10-24 20:01:17 863

原创 动静态库制作和原理

got是全局偏移量表,有自己特定的节,如.got.plt,位于数据段,可读写plt是过程连接表,同样有自己的节,.plt是PLT桩代码,.plt.sec是PLT表项,位于代码段,可读可执行。

2025-10-20 11:33:19 982

原创 Linux的Ext系列文件系统

1、扇区是磁盘存储数据的基本单位,一个扇区通常512字节磁盘存储结构下扇区的定位方法---CHS地址定位C:cylinder,确定一个柱面H: header, 确定一个磁头,也就确定了磁道S: sector, 确定扇区凭借(c,h,s)就可以定位一个扇区注意编号的起始值:​​柱面(Cylinder)编号​​:从0开始。​​磁头(Head)编号​​:从0开始。​​扇区(Sector)编号​​:从1开始(注意,扇区编号不是从0开始)。磁道是扇区的一维数组,柱面是扇区的二维数组,但二维数组的本质也是一维

2025-10-16 20:15:31 844

原创 MySQL架构和存储引擎

MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器,也就是API。整体架构图如下所⽰:•为使⽤MySQL服务的编程语⾔平台,提供了访问接⼝,可以根据⾃⼰实际使⽤的编程语⾔到官⽹下载地址下载。•:是⼀个⾼级客⼾端和代码编辑器,以组件的形式提供,需要单独安装。

2025-10-14 22:25:37 706

原创 Linux基础IO详解

想弄得更好点就把当前mycat可执行程序的路径加到PATH环境变量下这三个是glibc标准库下定义的三个FILE*全局变量,在stdio.h中有extern声明,在程序中加上头文件后,在链接时就能找到这三个变量stdin & stdout & stderr分别指向0/1/2文件描述符对应的文件的FILE。

2025-10-13 16:49:01 309

原创 文件的二进制读写和文本读写

根据数据的组织形式,数据⽂件被称为⽂本⽂件或者⼆进制⽂件。数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制⽂件。如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。

2025-10-12 14:48:04 270

原创 linux进程控制

fork函数初识在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进程为⽗进程。

2025-10-11 13:19:26 719

原创 myshell编写及细节点说明

c语言在设计environ变量时,并没有将其定义在头文件中,不然每包一次该头文件,都会有一个新的全局char** environ被定义,最后程序链接的时候就会重命名出错,所以environ是定义在c的标准库中的,所有用到environ的地方都应该是extern char** environ声明,这样等到最后链接的时候就不会有问题。

2025-10-11 13:18:48 948

原创 MySQL服务器配置与管理

MySQL Server 有以下⼏种⽇志,可以记录服务器正在发⽣的活动1、Linux下默认开启错误⽇志和⼆进制⽇志2、在服务器运⾏期间可以控制⼀般查询和慢查询⽇志的禁⽤与开启,也可以更改⽇志⽂件名3、⼀般查询⽇志和慢查询⽇志记录可以写⼊⽇志表、⽇志⽂件或两者同时写⼊4、默认情况下,所有启⽤的⽇志都会写⼊数据⽬录的日志文件中,可以通过刷新⽇志强制服务器关闭并重新打开⽇志⽂件5、通过 FLUSH LOGS 语句刷新⽇志来强制服务器关闭并重新打开⽇志⽂件,也可以使⽤。

2025-10-08 10:30:46 662

原创 linux进程详解

pcb中的那套寄存器是用来实现进程调度的,cpu从进程的内核栈中的恢复的那套寄存器才是返回到用户态的。

2025-10-07 16:12:38 586

空空如也

空空如也

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

TA关注的人

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