c++后台面试知识点
hahachenchen789
后台开发,专注容器、k8s、云原生。
展开
-
cpp—多态性,抽象基类
多态性是OOP的一个重要特征,也就是所谓的一个名字多个实现。多态性分两类:静态多态性:函数重载和运算符重载实现的多态性属于静态,又称为编译时的多态性动态多态性:在程序运行过程中才动态确认操作所针对的对象,又称为运行时多态性,通过虚函数实现 虚函数在同一类中是不能定义两个名字相同,参数个数和类型都相同的函数的。但是在类的继承中,是可以出现名字相同,参数个数和类型都相同的...原创 2018-10-15 11:40:09 · 681 阅读 · 0 评论 -
后台面试经典问题-shell命令的执行
shell分为内建命令和外部命令 内建命令,由shell解释程序内建,由shell直接执行,不需要派生新的进程常见的内建命令:bg、cd、continue、echo、exec、exit、export、fg、jobs、pwd、read、return、set、shift、test、times 外部命令分两种:二进制代码和shell脚本shell执行外部程序时,会创建一个新的...原创 2018-10-22 17:18:22 · 463 阅读 · 0 评论 -
后台面试经典问题-fork exec函数
Pid_t fork(void); 返回值:在子进程中返回0,在父进程中返回子进程id。出错返回-1。原因在于:任何子进程只有一个父进程,且子进程总是可以通过调用getppid取得父进程的进程ID。而相反,父进程可以有许多子进程,而且无法获取各个子进程的进程ID。父进程中调用fork之前打开的所有描述符在fork返回之后由子进程分享。可以看到网络服务器利用了这个特性:父进程调用...原创 2018-10-22 17:22:08 · 404 阅读 · 0 评论 -
后台面试经典问题-gcc生成动态库和静态库
gcc生成静态库:第一步:生成test.o目标文件,使用gcc -c test.c -o test.o第二步:使用ar将test.o打包成libtest.a静态库,ar rcs -o libtest.a test.o第三步:ar t libtest.a可查看静态库包含哪些文件。第四步:使用libtest.a,链接时-llibtest.a即可。 gcc生成动态库:第...原创 2018-10-22 17:22:48 · 741 阅读 · 0 评论 -
后台面试经典问题-Epoll的两种触发方式
水平触发LT和边缘触发ET 其中LT就是与select和poll类似,当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wait()时,它还会通知你在上次没读写完的文件描述符上继续读写 ET:当被监控的文件描述符上有可读写事件发生时,epoll_wait()会...原创 2018-10-22 17:31:37 · 3184 阅读 · 0 评论 -
后台面试经典问题-Union
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。 union foo{/*“共用”类型“FOO”*/ int i; /*“整数”类型“i”*/ char c; /*“字符”类型“C”*/ double k; /*“双”精...原创 2018-10-22 17:32:31 · 605 阅读 · 0 评论 -
typedef 函数指针
typedef 与 define类似,都是一种替代。但不同点在于,typedef是在编译时进行替代,而define是在预编译阶段进行替代。 本文详细描述了typedef在函数指针方面的应用,其他typedef的应用相对而言更为简单,不做描述。 typedef函数指针的用法如下:typedef int (*MYFUN)(int, int); 这种用法一般用在给函数定义别名的...原创 2018-10-20 16:53:21 · 1693 阅读 · 0 评论 -
后台面试经典问题-手写LRU算法
LRU,Least Recently Used,最近最久未使用。常用于页面置换算法。是为虚拟页式存储管理服务的。对于在内存中又不用的数据块,称为LRU,操作系统会根据哪些数据属于LRU而将其移出内存。 对于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的的热点。而内存的虚拟存储管理,是现在最通用最常见的方式--在内存有限的情况下,扩展一部分外存作为虚拟内...原创 2018-10-24 10:14:01 · 6637 阅读 · 0 评论 -
后台面试经典问题-class和struct区别
1.C++中,class和struct的区别:成员访问权限:class的成员访问权限是private,而struct是public默认的继承方式,class的默认继承方式private,struct是public 2.struct在c和c++之间的区别c中,struct是用户自定义数据类型,c++中是抽象数据类型。支持成员定义函数c中的struct没有权限设置的,在c++中给...原创 2018-10-24 10:15:13 · 286 阅读 · 0 评论 -
后台面试经典问题-extern作用
1.extern用来声明或者引用一个全局变量。 比如两个文件中同时定义了int a若两个文件一起链接时就会报错,表示重复定义了,也就是说各个文件的全局变量名不可相同。 那么如果在文件a中定义了一个全局变量,在b中直接使用该变量://A.cppInt I;//B.cppInt main(){I = 1;//企图使用A中定义的全局变量} 这样也会...原创 2018-10-24 10:23:11 · 510 阅读 · 0 评论 -
后台经典面试题-二叉树非递归遍历
前序遍历:void Disp(Node* root){ if(root==nullptr) return; stack<Node*> p; p.push(root); while(!p.empty()) { Node* node=p.top(); p.pop(); cout<<node.data<<endl; if(...原创 2018-10-24 10:25:43 · 237 阅读 · 0 评论 -
后台面试经典问题-string类实现
class String{public: String(const char *str=NULL); String(const String &str); ~String(); String& operator=(const String &str);private: char* data; size_t length;};String::S...原创 2018-10-24 10:30:09 · 194 阅读 · 0 评论 -
c++面试经典问题-四种强制类型转换
Static_cast和Dynamic_cast放在一起比较容易记,一动一静 Static_cast是静态转换,也就是编译时转换,可以完成基础类型的转换,然后任意类型指针与void指针的转换,还可以完成同一个继承体系中类型的转换。 Dynamic_cast是运行时转换,用于将基类的指针或引用安全的转换成派生类的指针或引用。也就是所谓的downcast,向下转换,因为向上转换upca...原创 2018-10-22 17:16:48 · 746 阅读 · 0 评论 -
面试经典问题-TCP连接经典问题
1.为什么建立连接是三次握手,而关闭连接却是四次握手呢?因为服务端的listen状态下的socket当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,SYN同步作用)放在一个报文中发送。但关闭连接时,当收到对方的FIN报文时,仅仅表示对方想要断开连接,但未必你想,因为不会马上关闭socket,因此过段时间再发送FIN报文给对方表示断开连接。因此ACK和FIN是分开发送的。...原创 2018-10-22 17:05:29 · 703 阅读 · 0 评论 -
cpp-指针和引用的区别
复合类型:指基于其他类型定义的类型。c++有几种复合类型,其中最为熟悉的两种就是:引用和指针 引用:为对象起了另外一个名字:int a=10, int &b=a; b=15;相当于a=15.这时b完全代表a,引用并不是对象,只是为一个已经存在的对象起的另外一个名字。 引用的定义:int &b=a; int &...原创 2018-10-15 11:41:12 · 4840 阅读 · 0 评论 -
cpp—const限定符
希望定义一种变量,其值不会被改变,可以用const关键字对变量的类型加以限定Const int a =512;这样a就是一个常量,任何试图改变其值的行为都不允许。const对象必须初始化。因为一旦创建无法修改Const int i=42;Const int a; //错误 默认状态下,const对象仅在文件内有效,当多个文件中出现同名的const变量时,相当于在不...原创 2018-10-15 11:41:57 · 188 阅读 · 0 评论 -
cpp—new malloc
0. 属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。1. 参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。2. 返回类型new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类...原创 2018-10-15 11:45:03 · 472 阅读 · 0 评论 -
cpp—空类
一个空类,如果不实例化的话,有什么函数。答案:什么都没有若实例化了,则编译器会自动添加,构造函数,析构函数,拷贝构造函数,赋值运算符,取地址运算符 一个空类,sizeof该类,大小为1,表示地址若类中只有一个成员函数,然后实例化一个对象,sizeof该对象,大小仍然为1,因为是静态绑定,也就是编译器在编译时就将该函数绑定给了该对象, 所以不占额外地址。...原创 2018-10-15 11:46:19 · 307 阅读 · 0 评论 -
后台开发—归并排序
将已有的子序列比较合并,得到完全有序的序列。 归并过程:比较有序序列a[i]和b[j]的大小,若a[i]<=b[j],则将a[i]复制到新序列空间r[k]中,i++,k++。否则将b[j]复制到r[k],j++,k++.如此循环,直到其中一个序列取完,然后将剩下那个序列的所有值复制到r[k]即可。 优点:归并是稳定的排序,相等的元素的顺序不会改变,这也是比快速排序优势的地...原创 2018-10-15 11:47:39 · 126 阅读 · 0 评论 -
cpp—快速排序
快速排序是对冒泡的一种改进 基本思想:通过一趟排序将数据分为两个部分,一部分的所有数据要比另一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个过程可通过递归实现。 实现过程:对于数据A[0],….A[n-1],首先任意选取一个数据(通常选第一个)作为关键数据,将所有比它小的防到它前面,大的放在后面,这一趟称为快速排序一趟排序的过程:1.设置两个变量...原创 2018-10-15 11:48:44 · 3121 阅读 · 0 评论 -
各种排序的比较
快速排序在同数量级的O(nlogn)的排序算法中平均性能最好的,时间复杂度较少,在数组已有序的情况下,为最坏时间复杂度为O(n^2),且空间复杂度为O(1),常数级别,考虑到递归的话最多也就是O(n),且为不稳定排序。冒泡排序和插入排序的平均时间复杂度均为O(n^2),最好为O(n),最差为O(n^2),空间复杂度消耗很小,均为O(1),且都是稳定排序。归并排序的时间平均复杂度为...原创 2018-10-15 11:50:45 · 152 阅读 · 0 评论 -
查找算法—二分查找
假设表中元素是有序的,将表的中间位置的关键字与所需的关键字比较,相等则成功,否则分为前后两个子表,若所需的值大于中间元素,则在后半部分查找,否则在前半部分查找。重复上述过程,直到查询到结果。 优点:比较次数少,速度快缺点:要求待查表为有序表。 时间复杂度:O(h)=O(log2n) c/c++代码实现:方法一:循环 int binsearch(SeqLis...原创 2018-10-15 11:53:07 · 593 阅读 · 0 评论 -
查找算法—BFS宽度优先遍历算法
BFS属于一种盲目搜寻法,也就是说彻底的搜索整张图,并不考虑结果的可能位置。列出所有结果。 实际应用:BFS在求解最短或者最长路径或者最短最长步数上有很多应用。比如迷宫。 例子:在一个n*n的矩阵中,从原点(0,0)走到终点(n-1.n-1),只能上下左右走,求最短步数,n*n是01矩阵,0表示该格子没有障碍,1表示有障碍。 int mazeArr[maxn][maxn]...原创 2018-10-15 11:54:11 · 207 阅读 · 0 评论 -
TCP面试知识点
最主要的特点:1.TCP是面向连接的运输层协议2.TCP是点对点的3.TCP提供可靠交付的服务4.TCP提供全双工通信。允许通信双方的应用进程在任何时候都能发送数据。5.面向字节流,这个和UDP不同,UDP是面向报文的。流指的是流入到进程或者从进程流出的字节序列。也就是说TCP和UDP在发送报文时所采用的方式完全不同,TCP并不关心应用程序一次把多长的报文发送到TCP缓存中,而...原创 2018-10-22 16:46:37 · 348 阅读 · 0 评论 -
面试经典问题-大规模并发通信问题
C10K问题,即单机1万个并发连接问题早期的腾讯QQ也同样面临C10K问题,只不过他们是用了UDP这种原始的包交换协议来实现的,绕开了这个难题,当然过程肯定是痛苦的。如果当时有epoll技术,他们肯定会用TCP。众所周之,后来的手机QQ、微信都采用TCP协议。 实际上当时也有异步模式,如:select/poll模型,这些技术都有一定的缺点:如selelct最大不能超过1024、poll...原创 2018-10-22 16:55:45 · 1722 阅读 · 0 评论 -
面试经典问题-浏览器输入一个网址后发生什么
1.输入网址,键盘的终端输入的数据流2.浏览器通过DNS查找域名的IP地址DNS查找过程如下:1.浏览器缓存-浏览器会缓存DNS记录一段时间2.系统缓存-若在浏览器中没有找到需要的记录,浏览器会做一个系统调用,利用gethostbyname,获得系统的缓存中的记录3.路由器缓存,若系统缓存没有,则会将查询请求发送至路由器,它一般会有自己的DNS缓存。4.ISP DNS缓存-...原创 2018-10-22 16:57:40 · 2492 阅读 · 0 评论 -
2018互联网实习&秋招回顾(BATM+MS+Intel+NE+DJI)
先介绍本人在2018年的暑期实习和秋招拿到的offer:实习:阿里(c++后台研发),微软(c++后台开发),网易游戏(基础架构研发),大疆(测试开发),地平线(嵌入式软件开发),微策略(c++后台研发),寒武纪(嵌入式软件开发),招商银行信用卡中心(c++后台开发)。秋招:百度(c++后台研发,白菜),腾讯(c++后台研发,sp),美团(java后台研发,小sp),intel(c++后台...原创 2018-11-22 11:38:41 · 5282 阅读 · 9 评论