- 博客(107)
- 收藏
- 关注
原创 VM-Ubantu中使用vscode头文件报错——解决办法
VM-Ubantu中使用vscode头文件报错——解决办法。使用快捷键shift+ctrl+p,点击Edit Config(JSON),并将下面的代码复制进去即可
2024-09-21 23:37:01 388
原创 MySQL 事务——读提交,读未提交,可重复读,串行化,不可重复读、幻读、不可重复读
读提交,读未提交,可重复读,串行化,不可重复读、幻读、不可重复读
2024-07-22 15:11:22 702
原创 Effective-C++学习记录——条款2-3
const_cast —— 完成const 向 non-const。(inline更像是一种建议,建议编译器替换,对于较长的代码是不会进行替换的)static_cast —— 将*this 从原始类型。define 会在预处理阶段进行替换,程序的可读性会很差。const_cast —— 去除const属性。,只有调用函数的实例的属性不一样,作为程序员。static_cast —— 普通的类型转换。,就可以满足在一个类中定义常量的需求(达到既在类内,又能定义数组的目的。
2024-06-07 11:35:58 321
原创 git基本使用——回退,撤销add,commit,合并分支
回退,撤销add,commit , 合并分支等这是一个非常好用web端笔记画图软件,解决了typora画图不方便的问题。表示需要回退的地方,也就是使用命令之后会改变的地方。
2024-06-02 22:17:14 314
原创 udp/tcp错误总结
如果只有一个线程,线程如果阻塞在send线程,也就是需要从标准输入中读取才能进行发送,那么就无法进行recv;如果写成单线程,可能会出现服务端只为一个服务,另一个发送消息显示不出来的情况;:将一个接收和发送作为一个任务,一个线程一直做这一个工作,知道客户端关闭,线程结束。:将一个接收和发送作为一个任务,一个套接字执行一个任务之后立即释放。:为什么要将执行函数封装进去,可不可以在Task类中进行执行。中,如果在子线程中还需要考虑访问套接字冲突的问题。,这样在使用的时候就可以像执行函数一样执行了。
2024-04-24 09:51:13 1258 17
原创 进程等待+替换
再切割出字符串进行返回时,他返回的也是局部的字符串中的字符所对应的地址,这样一来就出现问题了,我们知道所有的程序最终运行起来,都会变成进程,进程在运行时可能会。,而Linux操作系统会将程序当时的内存状态记录下来,v——将命令使用参数以数组的形式传参,一定是。getenv函数——获得当前环境的环境变量。putenv函数——设置当前环境的环境变量。,这样一来就找不到切割好的字符串了——,虽然他的工作路径已经更改了,但是。,就会出现一个很神奇的现象,你的。下的以core开头的文件。e——可以传递环境变量。
2024-03-31 16:15:14 827 4
原创 阻塞队列提升+线程池反思——c++线程库
当生产者生产一个就会通知消费者,生产者消费者等待的是不同的条件变量,就能比上面的要高效。,他们在抢食物的时候,需要先抢到锁,然后才能去拿食物,也就是说,这里的。为了应对面试的手撕线程池,需要掌握一个简化版的线程池。的时候,由于生产者的竞争能力强于消费者,那么。,然后放到线程池中,让多个线程抢一个任务——,只要他们的两个计算成员和运算符对,他的。原来的空间,这样就造成了内存访问异常。,最开始没有任何任务,消费者被阻塞。,就能很好的避免内存访问冲突的问题。,每次生产任务都加入队列——,将线程统一管理起来——
2024-03-31 15:49:14 1428 14
原创 线程(二)——互斥锁的补充+条件变量+信号量总结
互斥锁+条件变量+信号量,pthread_cond_wait为什么需要两个参数;基于生产者消费者模型的循环队列;伪唤醒,唤醒丢失;条件变量和信号量的基本使用
2024-03-21 19:17:57 688 1
原创 观察主线程退出对子线程的影响
exit——进程退出pthread_exit线程退出主线程——主函数:return直接退出,子函数:退出函数子线程——return退出线程pthread_cancel——线程退出,不能自己杀死自己,可以子杀父
2024-03-10 14:53:02 450 1
原创 线程(一)
功能:创建一个新的线程thread:返回线程ID ,pthread_t类型attr:设置线程的属性,attr为NULL表示使用默认属性start_routine:是个函数地址,线程启动后要执行的函数arg:传给线程启动函数的参数返回值:成功返回0;失败返回错误码传递的参数为void*类型,表示可以传递任意类型的参数多个线程各自有一个栈,共有一个堆线程包含cpu现场,但是线程只是进程中的一个执行流,执行的是程序中的一个片段代码,多个线程完整整体程序的运行。
2024-03-03 14:39:01 861
原创 多态——细致讲解
1.静态多态:函数重载和运算符重载2.动态多态:继承和虚函数1. 父类的指针/引用调用虚函数2. 调用的虚函数必须是子类重写的虚函数这样就能在指针调用相应的对象函数的时候使用相应的成员函数,具体看示例——返回值,函数名,参数个数,参数位置,参数类型都要完全一样,虚函数之后的const也要一样修饰虚函数——不能背重写override虚函数的返回值可以不一样,只能出现不可以一个返回指针,一个返回引用释放看的是类型。
2024-03-02 22:28:02 979 2
原创 进程间通信——管道错误总结
管道是通过read,write系统调用进行通信的,存在用户态和内核态的转变,但是共享内存是不需要系统调用,直接使用链接上的共享内存就行。,共享内存的删除操作并非直接删除,而是拒绝后续映射,只有在当前映射链接数为0时,表示没有进程访问了,才会真正被删除。B错误,共享内存的操作是非进程安全的,多个进程同时对共享内存读写是有可能会造成数据的交叉写入或读取,造成数据混乱。,共享内存生命周期随内核,只要不删除,就一直存在于内核中,除非重启系统(当然这里指的是非手动操作,可以手动删除)(并且共享内存可以提供较大空间)
2024-02-25 10:10:54 411
原创 匿名+有名管道
在使用的时候会将磁盘数据加载进内存,每个进程创建一个struct_file,共用一份内存数据;文件打开必须是一个已经存在的文件,可以是一个绝对路径,也可以是相对路径。命名管道由mkfifo函数创建,打开用open。读取是将字符读出,然后清空;fd[0]表示读端, fd[1]表示写端。匿名管道由pipe函数创建并打开。,不写自身是没有\0这个符号的。使用方法都和文件一样。
2024-02-24 19:42:34 371
原创 system_v
IPC_EXCL——一般和IPC_CREAT组合使用。不存在创建,存在错误返回;保证了共享内存是最新的。共享内存不提供同步机制,需要控制控制同步——管道。IPC_CREAT——不存在就创建,存在就获取。shmid 用户使用;key 旨在内核中标识shm的唯一性。一共有3种选项,这里就说两种方法。标识将shmid进行挂接,
2024-02-24 14:02:37 388
原创 c++11
如果只有构造函数,那么只跟构造函数参数个数进行比对如果只有,可以使用任意参数进行传参如果两个都有,则使用最匹配的进行赋值int aa;int bb;int cc;aa = *it++;bb = *it++;cc = *it++;int main()// 构造函数进行初始化return 0;
2024-02-23 10:34:41 370 2
原创 Linux——动静态库
直接写明是告诉编译器怎么做,在运行的时候是告诉系统库文件的位置——需要在系统上设置库文件的位置。-I(大写i)——如果头文件不在目录下,会报错;这个命令告诉编译器头文件位置。设置环境变量—— export PATH=…删除变量内容—— unset PATH。-l(小写L)——库文件名称。2. 指明库文件的位置。头文件放到工作目录下。进行刷新,必要时使用。
2024-02-11 20:00:34 671
原创 Linux文件
当需要使用文件的时候,OS创建struct file,将描述信息添加进pcb的struct files_struct 中使用数组进行管理,使用数组下角标进行标识文件。whence——偏移类型(三选一)(PS :offest可正负).:该文件的偏移量设为其。,从而达到重定向的作用。:该文件的偏移量设为。当前值加offset。:该文件的偏移量设为。
2024-02-06 21:49:14 416
原创 智能指针——浅析
在异常产生进行跳转时,通过栈帧回收进行内存释放,防止内存泄漏基于RAII思想可以创建出只能指针RAII(Resource Acquisition Is Initialization)——是一种利用对象控制空间生命周期的技术这种技术好处就在于可以自动化的释放资源智能指针——使用如指针,支持->和**针对内置数据类型->针对自定义数据类型先介绍一个对象管理一份资源。
2024-01-31 21:45:05 752
原创 异常——浅析
1.异常规范有两点:一、抛出异常类型都`继承自一个基类`。二、函数是否抛异常、抛什么异常,都使用 `func() throw();`的方式规范化。2.异常可能造成内存泄漏,人们为了解决这个问题就产生了——智能指针
2024-01-31 15:56:10 395
原创 stack,queue和prioriy_queue
因为可能只有左节点,没有右节点,对于这种情况,当满足交换的调价的时候也是需要交换的。需要注意的是依赖的容器一定是一个随机访问的容器,支持[]的容器。的时候,执行需要做的语句;选择适配器的宗旨是要能达到预想的功能。,如果要进行交换最起码先进去吧。对于仿函数,需要理解当判断为。Iterator传的是一个。queue——只能使用。stack——可以使用。不能将while条件。_con的迭代器构造。
2024-01-16 20:42:40 449
原创 vector实现
可以将vector理解为一个动态数组,使用时要使用vector.h头文件mystl封装——就是只暴露接口,并且在实现的时候一定要谨记这个函数的功能是什么,绝不超过它范围的实现,不要想着给他多来点儿功能,这不是一件好事儿,反而会对后面的函数使用留下不可估量的后患。
2023-12-25 21:21:04 869
原创 继承易错总结
1.继承会将所有的成员继承下来,但是继承方式限定的是继承下来成员的可见类型(如果是private继承,那么他不论哪里都是不可见的;派生类的构造函数,不写会调用默认的构造函数,但是如果自己写,就要自己调用父类的构造函数(在调用父类的构造函数时,要将父类当成一个整体)当父类的指针/引用接收子类的地址/对象时,因为是继承会进行切割,将子类的父类那部分切出来,剩下的就是去虚表中找地址进行调用就行了。虚函数指针如果进行了拷贝,那么父类对象的虚函数表指针会发生改变,当使用父类对象调用父类的虚函数时,就会发生错误。
2023-12-24 23:42:25 433
原创 虚拟地址+进程地址空间
在父进程数据拷贝给子进程的时候,会将页表权限rw->r,因为子进程是父进程的拷贝,页表也会单独有一份,父进程和子进程的页表都会发生改变;如果他们是同一块儿空间,为什么打印的结果却不一样呢,我们知道肯定是父进程先跑完,在子进程进程输出的时候a应该是1才对——我们看到的只是。,子进程继承父进程的pcb里的大部分内容,地址空间,页表,并且继承的时候每个页表对应的权限默认为只读的状态)他们通过。因为这个命令记录的是最后一次的退出情况,我们明白命令也是一种程序,echo是正常运行的,所以返回0。
2023-12-08 15:13:01 901
原创 进程详解
从图中看到子进程和父进程都是被创建出来了,并且父进程和子进程的状态都是s+,可是他为什么是s+状态呢,他们都是正在运行的呀,原因就是进程确实是在运行,计算机计算速度非常的快,运行完打印之后,会有2秒的休眠,那么就知道了,程序的大部分时间都处于sleep状态。d深度睡眠——(不可中断睡眠)当资源紧张时,系统准备杀死进程,但是进程是一个重要的进程,不能被删除,就需要d状态来躲避。bash是命令行解释器,所有的进程都是由bash创建的。在计算机中,资源是有限的,对于所有的进程,需要进行排队,进行有次序的运行。
2023-12-06 15:11:56 82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人