面试经历

C++知识

1.构造函数、析构函数、拷贝构造函数

构造函数:初始化对象的数据成员

析构函数:析构函数在对象消亡时即自动被调用,清理对象

拷贝构造函数:复制构造函数参数为类对象本身的引用,用于根据一个已存在的对象复制出一个新的该类的对象,一般在函数中会将已存在对象的数据成员的值复制一份到新创建的对象中

2.构造函数和析构函数的执行顺序

情况一:类B继承类A

结论一:定义变量时:先调用父类的构造函数,再调用派生类的构造函数;变量销毁时:先调用派生类的析构函数,再调用父类的析构函数。

情况二:在类B中使用类A类型的变量作为成员变量

结论二:定义变量时:先调用A中的构造函数,再调用B中构造函数;变量销毁时:先调用B的析构函数,再调用A的析构函数。

https://www.cnblogs.com/qkqBeer/articles/10726173.html

3.STL

标准模板库,有四个组件,算法(algorithm)、容器(container)、迭代器(iterator)和函数

在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>

4.vectorlist的区别

  1.vector和数组相似,拥有一段连续的地址空间,支持随机存取;但插入和删除时涉及到内存块的拷贝

  2.list是双向链表实现的,内存空间不连续,无法随机存取,但支持高效的插入和删除

  https://www.cnblogs.com/shijingjing07/p/5587719.html

5.newmalloc的区别

1、new 是c++中的操作符,malloc是c 中的一个函数

2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数

3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。

4、new可以认为是malloc加构造函数的执行,new出来的指针是直接带类型信息的,而malloc返回的都是void指针(void是空类型指针)。

6.newmalloc申请的内存是在栈里吗?

  申请的内存在堆区

7.C++的特性:封装、继承、多态

封装抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对象的使用者和设计者分开,以提高软件的可维护性和可修改性

继承:新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或父类,产生的新类称为派生类或子类,子类继承基类后,可以创建子类对象来调用基类函数,变量等

多态:可以简单概括为“一个接口,多种方法”,即用的是同一个接口,但是效果各不相同,多态有两种形式的多态,一种是静态多态,一种是动态多态

https://www.cnblogs.com/qianqiannian/p/6037520.html

数据结构知识

1.栈和队列

栈后进先出,队列先进先出

2.平衡二叉树

  它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

3.dfsbfs

  dfs深度优先遍历:采用递归深度遍历每一个非空节点,当遍历到空节点后进行回溯

  bfs广度优先遍历:采用层次遍历的方法将每一层的节点送入队列输出

操作系统

1.多线程

  线程是程序中独立运行的程序片段,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

  多线程就是把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程。

2.多线程编程

计算机网络

1.三次握手

发送端发出连接请求报文段(规定不能携带数据,但要消耗序号,以便识别应答报文段)先将报文段首部的同步位SYN = 1, 并选择一个初始序号seq = x, 发出此报文段(发送端口&目的端口等也要设置好),进入SYN-SENT(同步请求已发送)状态。

接收端收到连接请求报文段后,若同意连接(就像服务器允许访问,不允许就返回错误码),向发送端发送确认连接报文段:同样 同步位SYN = 1,确认位 ACK = 1(表明确认报文段有效/这是有效回答报文段), 同样需要选择报文序号 seq = y, 应答号ack = x+1(表明是对序号x的请求报文段的确认应答),向原发送端发出此报文段(端口要绑定好),进入SYN-RCVD(同步接受)状态。

接收端收到确认连接报文段后,再次向接收端给出确认:已经达到了同步,于是此报文段就不再需要SYN,直接确认ACK = 1seq=x+1ack=y+1,发送报文段,发送端进入ESTABLISHED(运输连接已建立)状态。

2.四次挥手

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

  https://www.cnblogs.com/bj-mr-li/p/11106390.html

3.socket编程

  Socket入门博客:

  https://www.cnblogs.com/kefeiGame/p/7246942.html

数据库

1.增删改查操作

查询select

SELECT column1, column2, columnN FROM table_name;

插入insert

INSERT INTO [TABLE_NAME] (column1, column2, column3,...columnN) 
VALUES (value1, value2, value3,...valueN);

修改update

UPDATE [table_name]
SET column1 = value1, column2 = value2...., columnN = valueN

删除delete

DELETE FROM [table_name]
WHERE [condition];

详细内容位于博客:

https://www.cnblogs.com/yangming1996/p/10416499.html

posted @   我的QQ昵称  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示