- 博客(25)
- 收藏
- 关注
原创 招银面试项目面经
数据库访问、磁盘io等操作的速度比cpu执行代码的速度慢很多,单线程环境下,这些操作会阻塞程序的执行,导致cpu空转,等待着上述操作完成,因此对于会产生这些阻塞的程序来说,使用多线程可以避免在等待期间cpu的空转,提高cpu的利用率。而协程的调度完全由用户控制,协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作用户空间栈,完全没有内核切换的开销。同时多线程有共享同一地址空间和可用数据的能力,这是多进程没有的。
2023-10-07 14:06:53
2143
原创 HTTP高并发服务器面经总结
池化技术:指提前准备一些资源,在需要时可以重复使用这些预先准备的资源。有两个特点:提前创建和重复利用。(如线程池、连接池、内存池)线程池:类似于操作系统中的缓冲区的概念,流程:先启动若干数量的线程,并让这些线程处于睡眠状态,
2023-10-04 16:28:37
109
原创 C++八股
是一种特殊的函数,会进行类型检查;修饰成员函数:const修饰是为了防止成员函数修改对象的内容(不能修改但是能够访问),const对象不能调用非const函数,但是非const对象可以调用;---------sizeof(p)为指针的大小,而不是动态分配内存大小。--------------32位系统下指针变量大小为4字节。--------字符数组首元素的地址,大小为指针的大小。--------------包含末尾结束符'\0',这些方法的名称相同而参数形式不同,一个方法有多个不同的版本,存在于一个类中。
2023-09-19 22:30:14
111
原创 中望龙腾面经C++
虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数并且可以通过基类指针或引用来访问派生类中的同名函数。虚函数必须是其所在类的成员函数,而不能是友元函数,也不能是静态成员函数,因为虚函数的调用要靠特定的对象来决定该激活哪个函数。虚函数的实现机制:虚函数通过虚函数表实现虚函数的地址保存在虚函数表中,在类的对象所在的内存空间中,保存了指向虚函数表的指针(称为“虚表指针”),通过虚表指针可以找到类对应的虚函数表。
2023-08-24 21:54:18
190
原创 蚂蚁面经整理
就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用(返回内存地址中对应的变量的值)就是去访问了一个不确定的地址,所以结果是不可知的。影响:如果进程不调用 wait / waitpid 的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。
2023-04-05 17:26:30
80
原创 面试随笔-计网(4.3)
答:服务器第一次收到客户端的SYN之后,就会处于SYN_RECD状态,此时双方还没有完全建立连接。服务器会把这种状态下的请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有一个全连接队列,就是已经完成三次握手,建立起来连接的就会放在全连接队列中,如果队列满了就有可能出现丢包现象。
2023-04-03 11:11:08
79
原创 剑指Offer
由于pTemp是一个局部变量,但程序运行到If外面就出了该变量的作用域,就会自动调用pTemp的析构函数,把pTemp.m_pData所指向的内存释放掉,由于pTemp.m_pData所指向的内存就是实例之前的内存,相当于用析构函数释放了实例的内存。
2023-03-31 14:38:20
35
原创 日常记录(三)
虚函数是实现多态的一个技术之一。在c++中,动态联编通过指针和引用来实现。但是,想一想,正常来说我们不允许程序将一种类型的指针指向另外一种类型的地址。但是在类中却可以这样做,派生类的指针指向基类对象的地址(派生类对象的地址赋给基类指针),而且不用进行显式转换。派生类的指针指向基类对象的地址(派生类对象的地址赋给基类指针)称为向上转型,c++允许隐式向上转型。将子类指向父类,向下转换则必须强制类型转换。然后我们就可以用父类的指针指向其子类的对象,然后通过父类的指针调用实际子类的成员函数。
2023-03-25 10:51:14
52
原创 日常记录(二)
VS是1.5,k=2 每次扩展的新尺寸必然刚好⼤于之前分配的总和,之前分配的内存空间不可能被使⽤,这样对于缓存并不友好,采⽤1.5倍的增⻓⽅式可以更好的实现对内存的重复利⽤。priority_queue(优先队列):也是配接器,其内的元素不是按照被推⼊的顺序排列,⽽是⾃动取元素的权值排列,确省情况下利⽤⼀个max-heap完成,后者是以vector—表现的完全⼆叉树。负责空间的配置与管理。好处:避免“vector的重新配置,复制,释放”的轮回,维护连整体连续的假象,并提供随机访问的接⼝。
2023-03-25 10:17:32
61
原创 日常记录(一)
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。构造函数不需要,虚函数的调用是在部分信息下完成工作的机制,允许我们只知道接口而不知道对象的确切类型。析构函数需要,当派生类对象中有内存需要回收时,如果析构函数不是虚函数,不会触发动态绑定,只会调用基类的析构函数,导致派生类资源无法释放,造成内存泄漏。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,static变量。将内存分配封装在类中,构造函数分配内存,析构函数释放内存;
2023-03-24 15:35:02
58
原创 进程和信号
让僵尸进程的父进程来回收,父进程每隔一段时间来查询子进程是否结束并回收,调用 `pid_t wait(int *status)` 或者 `pid_t waitpid(pid_t pid, int *status, int options)` ,通知内核释放僵尸进程;父进程创建一个子进程后,文件表项中的引用计数器加1变成2,当父进程作close操作后,计数器减1,子进程还是可以使用文件表项,只有当计数器为0时才会释放文件表项;孤儿进程:父进程结束,子进程就成为孤儿进程,会由init进程领养;
2023-03-21 22:01:27
56
原创 IO及文件系统
lstat](#lstat) 函数类似于stat,但是当命名的文件是一个符号链接时,lstat返回该符号链接的相关信息而不是该符号引用的文件信息;如果请求的IO操作阻塞,且他不是真正阻塞IO,而且让其中一个函数等待,在这期间,IO可以进行其它操作;| 4 | 字符特殊文件(chatacter special file) | S_ISCHR() || 1 | 普通文件(regular file) | S_ISREG() || 2 | 目录文件(directory file) | S_ISDIR() |
2023-03-21 21:04:22
81
原创 C++左值引用和右值引用
非常量左值引用只能绑定到非常量左值上;常量左值引用可以绑定到非常量左值、常量左值、非常量右值、常量右值等所有的值类型。右值引用:其实也是绑定到右值的引用,通过&&来获得右值引用。
2023-03-16 16:27:53
199
原创 ACM模式构建二叉树
二叉树可以有两种存储方式,一种是 链式存储,另一种是顺序存储。顺序存储,就是用一个数组来存二叉树,方式如图所示。链式存储,就是熟悉的二叉树,用指针指向左右孩子。
2023-03-15 17:26:42
578
原创 设计模式(C++)
Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。结构图:在 Singleton 模式的结构图中可以看到,我们通过维护一个 static 的成员变量来记录这个唯一的对象实例。
2023-03-14 21:19:45
43
原创 C/C++链接MySQL
链接:https://pan.baidu.com/s/14t2MTbyB3A72H7NcNBLcjQ提取码:e6o0解压破解补丁中简体中文64位文件夹下的内容放到Navicat安装文件的目录下。
2023-03-14 20:35:26
80
原创 printf,fprintf,sprintf,scanf,fscanf,sscanf区别与使用
三个函数的头文件均是stdio.h的指针sprintf只比printf多了一个charfscanf是读文件的,那对应的fprintf当然是写文件的了,注:"w"写之前会清空文件里的内容简单一点:把数据写入文件(但是文件流不只是文件,c++可以定义文件流,
2023-03-14 16:08:47
434
原创 epoll IO复用
文件描述符(file descriptor)就是内核为了高效管理这些已经被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符来实现。Linux内核对所有打开的文件有一个文件描述符表格,里面存储了每个文件描述符作为索引与一个打开文件相对应的关系,简单理解就是下图这样一个数组,文件描述符(索引)就是文件描述符表这个数组的下标,数组的内容就是指向一个个打开的文件的指针。event:操作事件的首地址(文件描述符中某个操作元素的首地址)
2023-03-13 17:25:56
72
原创 Nginx线程池与互斥量
所谓的并发编程是指在同一台计算机上“同时”处理多个任务。并发是在同一个实体上的多个事件。①忙于漫长的CPU密集型处理②读取文件,但文件尚未缓存,从硬盘中读取较为缓慢③不得不获取某个资源:硬件驱动、互斥锁、等待同步方式调用的数据库响应、网络上的请求和响应。单个进程或线程同时只能处理一个任务,如果有很多请求需要同时处理怎么办?解决方案①创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际的用户请求的时间和资源多得多;
2023-03-10 22:21:28
97
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人