- 博客(53)
- 收藏
- 关注
原创 C语言 关于内存的一些例题
比如栈空间存放临时变量局部变量,堆空间用来存放malloc申请的空间,静态区(数据段)存放全局和静态变量,常量区(代码段)存放常量字符串等。内存的大部分问题都是跟程序的内存空间有关。
2024-12-03 08:00:00
329
原创 MySQL7 事务(二)
DB_TRX_ID 列用于记录对该行数据进行最后一次修改的事务 ID。每次对数据行进行修改操作时,InnoDB 会将当前执行修改操作的事务 ID 记录到 DB_TRX_ID 列中。该列的值随着事务对数据行的修改而不断更新,始终反映最后一次修改该数据行的事务标识。Undo 日志是一种逻辑日志,它记录了对数据页所做的修改操作的反向操作。也就是说,对于每一个插入、更新或删除操作,InnoDB 都会在 Undo 日志中记录相应的撤销操作,以便在需要时能够回滚事务,将数据恢复到事务开始前的状态。
2024-11-28 08:00:00
882
原创 MySQL5 复合查询
示例:假设有一个名为 employees 的表,其中包含 id、name、department_id 和 manager_id 等列,要查找与每个员工同部门的其他员工,可以使用自连接来实现。
2024-11-25 08:00:00
748
原创 Linux17 Git 指令
例如,git remote add origin https://github.com/user/my_repository.git,这里origin是远程仓库(必须在gitee或者github创建好)的名称(通常使用origin),后面是远程仓库的地址。例如,git pull origin main会从名为origin的远程仓库的master分支拉取更新并合并到本地main分支(前提,必须是本身就处在main分支下,否则可能会与其他分支合并)。,并添加一个提交说明(commit - message)。
2024-11-25 08:00:00
1472
原创 Linux16 多路复用(二)
不同的设备驱动程序会根据自身的特点和功能实现相应的回调函数,例如对于网络套接字的驱动程序,其回调函数会在套接字的状态发生变化时被调用,如数据可读、可写、连接建立、连接断开等情况。当被监听的文件描述符上的事件发生时,例如网络套接字接收到了新的数据,对应的设备驱动程序会检测到这个事件,并自动调用之前注册的回调函数。当使用epoll_ctl向epoll实例中添加一个要监听的文件描述符时,内核会为该文件描述符对应的设备驱动程序注册一个回调函数。epoll是改进的poll,几乎消除了poll的所有缺点。
2024-11-21 00:00:00
643
原创 Linux14 网络层 IP 协议
定义和格式:IP 地址是分配给网络设备的一个唯一标识符,用于在网络中定位该设备。目前主要使用的是 IPv4 和 IPv6 两种地址格式。IPv4 地址是 32 位二进制数,通常以点分十进制表示,例如 192.168.1.1。每个十进制数代表 8 位二进制数,范围是 0 - 255。IPv6 地址是 124 位二进制数,以冒号分隔的十六进制数表示,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334,其目的是为了解决 IPv4 地址资源匮乏的问题,提供了更多的地址空间。
2024-11-20 08:00:00
945
原创 Linux15 数据链路层
以太网” 不是一种具体的网络, 而是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等例如以太网中的网线必须使用双绞线;传输速率有 10M, 100M, 1000M 等以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网, 无线LAN 等。
2024-11-20 08:00:00
1856
原创 Linux13 传输层UDP和TCP协议
在正常的 TCP 通信中,接收方需要对发送方发送的数据进行确认,这个确认过程如果单独进行会产生额外的开销。窗口越大, 网络吞吐量就越大, 传输效率就越高. 我们的目标是在保证网络不拥塞的情况下尽量提高传输效率。如果接收端稍微等一会再应答, 比如等待 200ms 再应答, 那么这个时候返回的窗口大小就是 1M;在这种情况下, 接收端处理还远没有达到自己的极限, 即使窗口再放大一些, 也能处理过来;在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回 1;大量的丢包, 我们就认为网络拥塞;
2024-11-19 08:00:00
1280
原创 Linux12 应用层HTTP协议
URL(Uniform Resource Locator),即统一资源定位符,是用于定位互联网上资源的一种标准地址格式。它就像是互联网资源的 “地址标签”,通过这个地址可以准确地找到网络中的各种资源,如网页、图片、文件、视频等。示例网址:http://example.com:8080/articles/123?协议部分:这是 URL 的开头部分,用于指定访问资源所使用的协议。
2024-11-18 08:00:00
969
原创 算法题 - 图论 - Dijkstra
public://记录从(0,0)到所有点位的耗时//优化每次寻找起点的时间//1. 找起点qe.pop();//2.i<4;i<4;i++)//除开第0个房间,其他房间横竖坐标相加为奇数则额外耗时1,否则额外耗时2public://找列出最小路径dis[n] = 0;qe.pop();continue;
2024-11-17 08:00:00
646
原创 Linux11 Socket编程 - TCP
对于面向连接的协议(如 TCP),这是一个必不可少的步骤,它使得客户端和服务器能够在网络上进行可靠的数据传输。基本功能:send函数主要用于在已经建立连接的套接字上发送数据。对于 UDP 套接字,recv函数会从网络中接收一个数据报,每次接收的是一个完整的数据报,但不保证数据报的顺序和是否能接收到所有发送的数据报,因为 UDP 本身是无连接的、不可靠的。而对于 UDP 套接字,send函数只是简单地将数据报发送出去,不保证数据一定能被接收,也不保证数据的顺序,因为 UDP 是无连接的、不可靠的数据报协议。
2024-11-17 08:00:00
705
原创 Linux10 Socket编程 - UDP
在网络编程中,套接字隐藏了复杂的网络协议和底层硬件细节,使得程序员能够更加方便地进行网络通信相关的编程。, 这个宏表示本地的任意 IP 地址,因为服务器可能有多个网卡,每个网卡也可能绑定多个 IP 地址, 这样设置可以在所有的 IP 地址上监听, 直到与某个客户端建立了连接时才确定下来到底用哪个 IP 地址。它用于从指定的套接字接收数据,并可以获取发送数据的源地址(对于 UDP 等无连接协议很重要)。bind函数是套接字编程中的一个重要函数,它主要用于将一个本地的 IP 地址和端口号与一个套接字相关联。
2024-11-16 08:00:00
738
原创 Linux7 线程(一)
调用该函数的线程将挂起等待,直到id为thread的线程终止。死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。例如一个线程访问队列时,发现队列为空,它只能等待,只到其它线程将一个节点添加到队列中。同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问s题,叫做同步。当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。注意:为什么等待后面要加锁?
2024-11-13 08:00:00
1940
原创 Linux8 线程(二)
其中name是信号量的名字,oflag用于指定打开的方式(如创建新的信号量或者打开已有的信号量)。有名信号量通常用于进程间通信。例如,在一个多进程的服务器应用程序中,不同的进程可能需要协调对共享数据库的访问,就可以使用有名信号量。,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。比如,在一个多线程的图像处理程序中,多个线程可能需要协调对图像缓冲区的访问,此时可以使用无名信号量。
2024-11-13 08:00:00
901
原创 Linux5 文件IO
filename:要打开的文件的名称(包括路径,如果文件不在当前目录下)。例如,“data.txt"是在当前目录下打开名为data.txt的文件,”/home/text.txt"是打开指定路径下的文件。这个位置可以用于记录当前在文件中的读取或写入进度,或者作为fseek函数的参数来回到之前的位置。它可以按照指定的格式和数量从指定的文件流中读取数据,并存储到内存中指定的位置。在files_struct数组中,找到当前没被使用的最小的一个下标,做新的文件描述符。文件的起始就是在磁盘中占几个扇区的问题。
2024-11-12 08:00:00
1032
原创 Linux6 进程间通信(IPC)
消息队列是一个由消息的链表组成的存储区域,操作系统为消息队列维护消息的顺序,并提供插入和删除消息的操作接口。进程可以向消息队列发送消息,也可以从消息队列接收消息,消息队列中的消息具有类型,可以根据消息类型进行有选择性的接收。实现,从使用者的角度是不必关心的,使用者只能调用以下函数来操作sigset_ t变量,而不应该对它的内部数据做。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。信号产生时,内核在进程控制块中设置该信号的未决标志,直到信号递达才清除该标志。
2024-11-12 08:00:00
743
原创 Linux3 进程
这意味着物理内存是由许多 4KB 的页框组成的。父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,数据便以写时拷贝的方式各自一份副本。并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。即:子进程退出,父进程还在运行,父进程一直不读子进程状态,子进程一直是Z状态(无法被kill)当进程状态处于Z时,进程处于僵尸状态(子进程退出,但是父进程没有读到子进程退出的返回码)IO状态信息:包括显示的IO请求,分配给进程的IO设备,被进程使用的文件列表。
2024-11-11 08:00:00
834
原创 Linux4 环境变量
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数Linux存在一些全局设置,表明,告诉命令行解释器,应该去哪些路径下去寻找可执行程序系统中很多的配置,在登录Linux系统的时候,已经被加载到了bash进程当中最开始的环境变量不是在内存中,而是在系统对应的配置文件中(bash_profile)在开机启动时自动载入。
2024-11-11 08:00:00
445
原创 Linux1 指令(一)
可以用来直接创建文件: >文件名(如果文件不存在,直接创建;如果存在,直接清空)从超级用户可以随意切换到普通用户,从普通用户切换到其他需要输入密码。可以用来直接创建文件: >>文件名(如果文件不存在,直接创建)Tab按键可以补齐命令,但输入的要足够接近那个命令。一个点.表示当前路径, 两个点. .表示上级路径。关于man后面的数字。
2024-11-10 08:00:00
1047
原创 Linux2 指令(二)
Linux下gcc/g++出来的二进制程序默认是release模式,debug模式必须在编译时添加-g选项。第一个字母表示文件类型,后面三个字母为一组,分别表示拥有者,所属组,other对此文件的权限。如果需要加一些语言的标准,直接在编译时后面添加 -std=标准(如c++11,c99)Linux默认创建文件权限:普通文件0666,目录文件0777。基础格式:gcc 选项 要编译的文件 选项 目标文件。如:gcc/g++ 要编译的文件 -o 目标文件。-o:指要生成的目标文件。生成可执行文件或者库文件。
2024-11-10 08:00:00
932
原创 14.C++ 特殊类与设计模式
工厂类主要用于创建产品对象,对象的创建和使用分离,使得代码结构清晰。不需要了解产品的具体过程,只需要关系产品的使用。一个类只能创建一个对象,该模式保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。观察者模式定义了对象之间一对多依赖关系,当一个被观察对象状态发生改变时,其他观察者对象会得到通知并自动更新。但尽管如此,由于构造函数是公有,所以还是有方法让这个类型在堆上创建(创建个新类,让A做成员)模版方法定义了一个大致的框架(父类),后续继承的子类可以重新定义这个框架的步骤。
2024-11-08 08:00:00
517
原创 13.C++ 类型转换
(如果出现不能转换的情况,编译失败)static_cast用于非多态类型的转换(静态转换),编译器隐式执行任何类型转换都可以用static_cast,但它不能用于两个不相关类型进行转换。使用(类型)+ 变量的形式进行强制类型转换,例如 (int)3.11强制把浮点转成整数3,这种方式比较简单直接,但可能导致数据丢失。reinterpret_cast通常为操作数的位模式提供较低层次的重新解释,用于一种类型转换成另一种不同类型,非常不安全。,那么dynamic_cast转换就会成功。
2024-11-06 08:00:00
541
原创 11.C++ 11
在C++98中,auto是一个存储类型的说明符,说明变量是局部自动存储类型(在函数内部定义的变量,函数调用时自动分配存储空间,函数调用结束时自动释放空间,通常存储在栈上),但通常系统默认变量为自动存储类型,因此不需要特意声明auto。常见右值:匿名对象,临时对象,常量,表达式返回值,函数返回值,内置类型(纯数字10,1.1),将亡值(作函数返回值的自定义类型),mutable虽然会赋予在函数体内修改外部值的权利,但是并不会修改外部值,它修改的只是一个临时对象。返回的将亡值可以被右值引用。
2024-11-03 08:00:00
804
原创 10.C++ 搜索树
如图在B右侧插入一个节点,B的平衡因子由0变1,A的平衡因子由-1变-2,此时需要对B进行左单旋,再对A进行右单旋。如图在B左侧插入一个节点,B的平衡因子由0变-1,A的平衡因子由1变2,此时需要对B进行右单旋,再对A进行左单旋。如果新插入的节点默认是黑色,那么规则4绝对被打破(每条路径所有黑色结点数量相同),调整的代价比较大。如图在B左侧插入一个节点,B的平衡因子由0变-1,A的平衡因子由-1变-2,此时需要右单旋。如图在B右侧插入一个节点,B的平衡因子由0变1,A的平衡因子由1变2,此时需要左单旋。
2024-11-02 08:00:00
932
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人