- 博客(30)
- 收藏
- 关注
原创 Linux(操作系统)面经——part2
io复用使得一个程序能监听多个文件描述符,提高程序的性能。Linux系统实现io复用的技术有select,poll,epoll死锁:两个或几个进程在运行时由于资源争夺处于互相等待的过程,如无外力干涉,它们都不会有改变。产生的原因:系统资源不足、资源分配不合理、进程运行推进方式不合理必要条件:互斥条件——一个资源每次只能给一个进程使用请求与保持条件——一个进程在请求资源时,对已获得的资源保持不变不可剥夺条件——对于已获取资源的进程,不可强行剥夺其资源。
2023-12-15 19:53:31
1418
原创 Linux(操作系统)面经——part 1(持续更新中......)
小端——整数的低位存在低地址,高位存在高地址大端——整数的低位存在高地址,高位存在低地址判断:在32为平台下,int占4个字节,char类型的指针占1个字节,先用char类型的取一个字节,再用int取四个,再把int强转成char就只能取出一个字节了,如果两个一样说明是小端,不一样就是大端。孤儿进程——父进程已经释放,子进程还在(被init,进程号为1的进程收养),孤儿进程一般无危害。
2023-12-14 20:44:02
1234
原创 牛客后端开发面试题3
友元本质上是破坏了C++的封装性的,但是在不暴露数据安全的情况下,让函数和类访问它,实现了可扩展性和安全性,也提供了便捷。有友元类和友元函数。友元类是在类中声明为友元的另一个类。友元函数是在类中声明了一个非成员函数,友元类和友元函数都可以访问该类的私有和保护成员。class AA(){}//A把B添加到自己的通讯录了,把B当朋友,B可以访问A里面的所有成员函数和私有成 员、保护成员。但是A不可以访问B的私有成员保护成员。
2023-12-13 18:16:54
690
原创 堆排序——C/C++
已经在根节点上了,这时把根节点的值和最后一个节点(数组0下标和n-1下标)交换,这样就破坏了这个小根堆,然后继续把它调整成小根堆,这次调整的时候就不带上n-1下标这个值了,然后又可以找出整个数组的。之前总是想不通堆排序因为很抽象,抽象的地方在于,它要排序的是一个数组,物理上排序的动作确是在二叉树上(准确地来说是平衡二叉树)。堆排序要做的首先是要构造出一个小根堆(小根堆的特点就是根节点小于左右子树)或者大根堆。,以此类推就可以找到第三小值......第n-1小值,就不用再调整了这时就剩一个最大值了。
2023-12-12 22:06:30
445
原创 牛客后端开发面试题2
类的对象都有一个指向虚函数表的虚函数指针,虚函数表中存放该类的虚函数地址,创建一个新对象时,虚函数指针被初始化为指向该类的虚函数表的虚函数指针。计算每个三角形的面积,并且累加面积,得到凸多边形的总面积。在继承关系中,子类继承父类的虚函数表,子类可以覆盖父类的虚函数。当父类虚函数在子类中重写时,父类虚函数表中父类的函数地址也会被替换为子类的。由于虚函数的使用需要额外的空间和运行时开销,因此在不需要多态时尽量用普通函数代替虚函数,以提高程序执行效率。连接传送的数据,无差错,不丢失,不重复,且按序到 达;
2023-12-12 17:14:35
1391
原创 2.排列树和子集树、快速排序及其优化
设 R ={r1,r2,r3 ...,rn}是要进行排列的n个元素,Ri = R - {ri)。集合X中元素的全排列记为perm(X)。(ri)permx)表示在全排列permX)的每一个排列前加上前ri得到的排列。R的全排列可归纳定义如下 :当 n=1 时,perm (R) = (r) ,其中r是集合R中唯一的元素;当n>1时,perm (R) 由 (ri) perm(R1), (r2) perm(R2) ,..., (ri) perm(Ri) 构成.
2023-07-12 22:22:46
895
原创 BST--二叉排序树,二叉搜索树
2.左子树如果不空,左子树上所有节点的值都小于根节点。3.右子树如果不空,右子树上所有节点的值都大于根节点。5.按照中序遍历,是从小到大排好序的。二叉排序树(BST)(二叉搜索树)1.要么是空树,要么有下面性质。4.左右子树分别又是BST。6.最左边的孩子一定是。7.最右边的孩子一定是。注意:有可能有重复的。
2023-04-23 11:34:42
142
原创 Linux文件目录结构,基础权限,常用命令
1.常见目录/bin 存放命令/lib 库文件 printf库函数 c库/home 普通用户家目录/root 管理员家目录/boot 内核/etc 存放系统配置文件2.绝对路径与相对路径绝对路径:从系统(/)根目录到指定位置的路径 /home/sally/c2202相对路径:从当前位置(.)到指定位置的路径(..表示当前位置的上一层目录) ./main.c3.家目录所有用户都在“/home”下以自己的用户名创建一个目录,/home/sally就是我的家目录。
2023-04-12 14:50:19
158
原创 C++实现二叉树及相关操作
二叉树的定义:是一种树形结构,特点是每个节点最多有两棵子树并且有左右之分二叉树的五种形态:空树,只有一个根,一个根和一个左子树,一个根和一个右子树,根和左右子树二叉树的特性:1.第i层最多有2的(i-1)次方个节点2.深度为h的二叉树最多有2的(h-1)次方个节点3.对一个完全二叉树进行顺序编号,对于编号为i的结点,i=1,为根;i%2=0说明 有该结点的父节点有一个左子树,i%2>0说明有左右子树。
2023-04-09 12:53:25
672
2
原创 Linux--跨越主机的进程之间的通信
1.网络编程:主机字节序列和网络字节序列主机字节序列分为大端字节序和小端字节序大端:手机,网络 2.互联网3.ip地址:一台主机唯一标识4.端口:5.网络协议:计算机网络中进行数据交换而建立的规则、标准或约定的集合6.tcp传输层:面向连接可靠的流式服务7.TCP/IP协议有sockaddr_in和sockaddr_in6两个专用socket地址结构体,分别用于IPV4和IPV610.套接字地址:ip+port*socket(int domin,int type,int protocol);创建套接字,成功
2023-04-06 20:24:29
136
原创 模板和标准模板库STL
reserve--设置vector最小元素容量大小。begin--指向容器第一个元素的迭代器。end--指向最后一个元素的下一个迭代器。assign--对vector中元素赋值。rfind():返回最后一个出现的位置。resize--改变元素数量大小。swap--交换两个vector。front--返回第一个元素。back--返回最后一个元素。erase--删除指定元素。push_back--尾插。capacity--容量。pop_back--尾删。insert--插入。
2023-03-30 20:50:58
84
原创 C/C++程序内存布局分配
这是由于系统是用链表来存储的空闲内有地址的,自然是不连续的而链表的遍历方向是由低地址向高地址,堆的大小受限于计算机系统中有效的虑拟内存,由此可见,堆获得的空间比较灵活,也比较大。在Windows下,找是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的在WINDOWS下,栈的大小是2M(也有的是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。4、文字常量区:常量字符串就是放在这里的,程序结束后由系统释放。
2023-03-23 20:07:33
103
原创 RTTI--运行时类型信息
3.typeid可用于动态类型,也可以用于静态类型,分别是在运行时和编译时。typeid ----返回指针或引用所指向的对象的实际类型。typeid(变量).name()4.对于非引用,typeid是在。1.typeid--运算符。2.运行时获得了变量类型。识别的,只有引用类型在。
2023-03-23 19:58:08
74
原创 继承的笔试题
确保在派生类中声明的重写函数与基类的虚函数有相同的签名,同样也明确表明将会重写基类的虚函数,还可以防止因疏忽把本来想重写的虚函数声明成隐藏。既可以保证重写虚函数的正确性,又能提高代码可读性。如果修饰函数,只能修饰虚函数,要放在类或函数后面。静态:对象名加“.”成员选择运算符,去调用对象虚函数,则被调用的虚函数是在编译和链接时确定的。3)如果要求只能创建一个对象,要将拷贝构造函数和赋值删除,static成员函数要加引用。不能定义基类(将基类的构造,拷贝构造,赋值protected),但是可以定义子类对象。
2023-03-23 19:50:03
117
原创 Linux--信号量知识点总结
不相关的进程可以通过它访问一个信号量,它代表程序可能要使用的某个资源,程序对所有信号量的访问都是间接的,程序先通过调用semget()函数并提供一个键,再由系统生成一个相应的信号标识符(semget()函数的返回值),只有semget()函数才直接使用信号量键,所有其他的信号量函数使用由semget()函数返回的信号量标识符。第三个参数,shmflg是权限标志,它的作用与open函数的mode参数一样,如果要想在key标识的共享内存不存在时,创建它的话,可以与IPC_CREAT做或操作。
2023-03-20 19:21:16
370
原创 Linux-信号
5.三种响应方式:默认方式(signal(SIGINT,sig_DFl)0),忽略(signal(SIGINT,sig_IGN)1),自定义(自定义一个函数:signal(SIGINT,sig_fun))3.过程:发送信号--进程--响应。4.用ctrl+C发送信号。2.kill()杀死进程。1.pid:信号的代号。
2023-03-20 09:28:34
62
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人