linux C/C++服务器后台开发一百多道面试题总结
ccwgpt 2024-10-26 08:33 35 浏览 0 评论
一、编程语言
1.根据熟悉的语言,谈谈两种语言的区别?
① C 和 C++的特点与区别?
C 语言特点:
1) 作为一种面向过程的结构化语言,易于调试和维护;
2) 表现能力和处理能力极强,可以直接访问内存的物理地址;
3) C 语言实现了对硬件的编程操作,也适合于应用软件的开发;
4) C 语言还具有效率高,可移植性强等特点。
C++语言特点:
1) 在 C 语言的基础上进行扩充和完善,使 C++兼容了 C 语言的面向过程特点,又成为了一种面向对象的程序设计语言;
2) 可以使用抽象数据类型进行基于对象的编程;
3) 可以使用多继承、多态进行面向对象的编程;
4) 可以担负起以模版为特征的泛型化编程。
②浅谈下C/C++和PHP语言的区别:
1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互联网开发公司的主流web后台开发语言,主要框架为mvc模型,如smarty,yaf,升级的PHP7速度较快,对服务器的压力要小很多,在新浪微博已经有应用,对比很明显。
2)C/C++开发语言,C语言更偏向硬件底层开发,C++语言是目前为止我认为语法内容最多的一种语言。C/C++在执行速度上要快很多,毕竟其他类型的语言大都是C开发的,更多应用于网络编程和嵌入式编程
2.volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻),使用实例有哪些?(重点)
3.static const等等的用法,(能说出越多越好)(重点)
4.extern c 作用
5.指针和引用的区别
6. 关于静态内存分配和动态内存分配的区别及过程
7. 头文件中的 ifndef/define/endif 干什么用?
8. 宏定义求两个元素的最小值
9. 分别设置和清除一个整数的第三位?
10. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒
11. 预处理器标识#error的目的是什么?
12. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
13. 用变量a给出下面的定义
14. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt
15. memcpy函数的实现
16. Strcpy函数实现
17. strcat函数的实现
18.strncat实现
19. strcmp函数实现
20. strncmp实现
21.strlen函数实现
22. strpbrk函数实现
23. strstr函数实现
24. string实现(注意:赋值构造,operator=是关键)
25. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
26. 用struct关键字与class关键定义类以及继承的区别
27.派生类与虚函数概述
28. 虚函数与纯虚函数区别
29.深拷贝与浅拷贝
30. stl各容器的实现原理(必考)
31.哪些库函数属于高危函数,为什么?
32.STL有7种主要容器:vector,list,deque,map,multimap,set,multiset
33.你如何理解MVC。简单举例来说明其应用。
34.C++特点是什么,多态实现机制?(面试问过)多态作用?两个必要条件?
35. 多重继承有什么问题? 怎样消除多重继承中的二义性?
36.求两个数的乘积和商数,该作用由宏定义来实现
37.什么叫静态关联,什么叫动态关联
38.什么叫智能指针?常用的智能指针有哪些?智能指针的实现?
39.枚举与#define 宏的区别
40.介绍一下函数的重载
41.派生新类的过程要经历三个步骤
42.面向对象的三个基本特征,并简单叙述之?
43.多态性体现都有哪些?动态绑定怎么实现?
44.虚函数,虚函数表里面内存如何分配?
45. 纯虚函数如何定义?含有纯虚函数的类称为什么?为什么析构函数要定义成虚函数?
46. C++中哪些不能是虚函数?
47. 类型转换有哪些?各适用什么环境?dynamic_cast转换失败时,会出现什么情况(对指针,返回NULL.对引用,抛出bad_cast异常)?
48. 如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
49. 为什么要用static_cast转换而不用c语言中的转换?
50. 操作符重载(+操作符),具体如何去定义?
51. 内存对齐的原则?
52. 内联函数与宏定义的区别?
53. 动态分配对象和静态分配对象的区别?
54. explicit是干什么用的 ?
55. 内存溢出有那些因素?
56. new与malloc的区别,delete和free的区别?
57. 必须使用初始化列表初始化数据成员的情况
58.深入谈谈堆和栈
59.内存的静态分配和动态分配的区别?
60. 模版怎么实现?模版作用?
61. 多重类构造和析构的顺序
62. 迭代器删除元素的会发生什么?
63. 静态成员函数和数据成员有什么意义?
64.sizeof一个类求大小(注意成员变量,函数,虚函数,继承等等对大小的影响)
65.请用C/C++实现字符串反转(不调用库函数)”abc”类型的
66.写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数
67.析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,还有其他需考虑的因素吗?
68. 拷贝构造函数作用及用途?什么时候需要自定义拷贝构造函数?
69. 100万个32位整数,如何最快找到中位数。能保证每个数是唯一的,如何实现O(N)算法?
70. OFFSETOF(s, m)的宏定义,s是结构类型,m是s的成员,求m在s中的偏移量。
71. C++虚函数是如何实现的?
72. C++的虚函数有什么作用?
73.动态链接库的两种使用方法及特点?
二、服务器编程
1.多线程和多进程的区别(重点 必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)!
1)进程数据是分开的:共享复杂,需要用IPC,同步简单;多线程共享进程数据:共享简单,同步复杂
2)进程创建销毁、切换复杂,速度慢 ;线程创建销毁、切换简单,速度快
3)进程占用内存多, CPU利用率低;线程占用内存少, CPU利用率高
4)进程编程简单,调试简单;线程 编程复杂,调试复杂
5)进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉
6)进程适应于多核、多机分布;线程适用于多核
线程所私有的:
线程id、寄存器的值、栈、线程的优先级和调度策略、线程的私有数据、信号屏蔽字、errno变量、
2. 多线程锁的种类有哪些?
3. 自旋锁和互斥锁的区别?
4.进程间通信和线程间通信
5.多线程程序架构,线程数量应该如何设置?
6.什么是原子操作,gcc提供的原子操作原语,使用这些原语如何实现读写锁?
7.网络编程设计模式,reactor/proactor/半同步半异步模式?
8.有一个计数器,多个线程都需要更新,会遇到什么问题,原因是什么,应该如何做?如何优化?
9.如果select返回可读,结果只读到0字节,什么情况?
10. connect可能会长时间阻塞,怎么解决?
11.keepalive 是什么东西?如何使用?
12.socket什么情况下可读?
13.udp调用connect有什么作用?
14. socket编程,如果client断电了,服务器如何快速知道?
三、liunx操作系统
1.熟练netstat tcpdump ipcs ipcrm
netstat:检查网络状态,tcpdump:截获数据包,ipcs:检查共享内存,ipcrm:解除共享内存
2.共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?
将一块内存映射到两个或者多个进程地址空间。通过指针访问该共享内存区。一般通过mmap将文件映射到进程地址共享区。
存在于进程数据段,最大限制是0x2000000Byte
3.进程内存空间分布情况
4.ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意未初始化的数据放在bss段)
5.动态链接和静态链接的区别?
6.32位系统一个进程最多有多少堆内存
7.写一个c程序辨别系统是64位 or 32位
8.写一个c程序辨别系统是大端or小端字节序
9.信号:列出常见的信号,信号怎么处理?
10.i++ 是否原子操作?并解释为什么?
11.说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁(每个技术面试官必问)
12、exit() _exit()的区别?
13、如何实现守护进程?
14、linux的任务调度机制是什么?
15、标准库函数和系统调用的区别?
16、系统如何将一个信号通知到进程?
17. fork()一子进程程后父进程的全局变量能不能使用?
18. 请画出socket通信连接过程
19. 请用socket消息队列实现“同步非阻塞”和“异步阻塞”两种模式,并指出两者的差别和优劣
四、网络编程
1. TCP头大小,包含字段?三次握手,四次断开描述过程,都有些什么状态。状态变迁图。TCP/IP收发缓冲区(2次)
头部大小是20字节,包含数据如下:
三次握手:
四次释放:
状态变迁图:
收发缓冲区:
2. 使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而 udp无法保证?
3. epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)
4. tcp与udp的区别(必问)为什么TCP要叫做数据流?
5.流量控制和拥塞控制的实现机制
6. 滑动窗口的实现机制
7.epoll和select的区别?
8. 网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道?
9. TTL是什么?有什么用处,通常那些工具会用到它?ping? traceroute? ifconfig? netstat?
10.linux的五种IO模式/异步模式.
1)同步阻塞I/O
2)同步非阻塞I/O
3)同步I/O复用模型
4) 同步信号驱动I/O
5) 异步I/O模型
11. 请说出http协议的优缺点.
12.NAT类型,UDP穿透原理。
13.大规模连接上来,并发模型怎么设计
五、算法和数据结构
1.给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的最后一个元素将被返回。
解决问题方法思路如下:
方法一、如果我们知道链表的长度n,查找倒数第m个元素,也就是查找正序的第(n - m)个元素(这里的序号只是为了分析,可能跟题目不一定正确的符合)。那么这样来说就简单很多。首先遍历链表得到链表长度,然后重新遍历一次,查找正数第(n-m)个元素。时间复杂度大约是O(2n)。
方法二、我们是不是可以提供一个辅助存储空间,是的我们在遍历到链表结束的时候可以回溯到倒数第m个元素。比如用一个支持随机访问的容器记录链表每一个节点的地址。那么这样的就可以只遍历一次链表就能得到结果。时间复杂度大约是O(n),但是我们是用空间换取时间的,辅助存储空间的大小由m决定,如果m过大也是不可取的。
方法三、头结点指针为当前指针,尾节点指针为拖后指针。开始的时候当前指针和拖后指针初始化为链表的头结点,首先我们让当前指针遍历到第m个元素,拖后指针不变;然后同步更新当前指针和拖后指针;直到当前指针为链表结尾。这样我们就能保证当前指针和拖尾指针之间的距离是m。
代码如下:
Node* FindMToLastNode(Node* pHead, int m) {
// 查找到第m个元素
Node* pCurrent = pHead;
for (int i = 0; i < m; ++i)
{
if (pCurrent)
{
pCurrent = pCurrent->next;
}
else
{
return NULL;
}
}
Node* pFind = pHead;
while (pCurrent) {
pFind = pFind->next;
pCurrent = pCurrent->next;
}
return pFind;
}
2. 给定一个单向链表(长度未知),请遍历一次就找到中间的指针,假设该链表存储在只读存储器,不能被修改
3. 将一个数组生成二叉排序树
4. 查找数组中第k大的数字?
5. 红黑树的定义和解释?B树的基本性质?
6. 常见的加密算法?
7. https?
8.有一个IP库,给你一个IP,如何能够快速的从中查找到对应的IP段?不用数据库如何实现?要求省空间
9.简述一致性hash算法。
10.描述一种hash table的实现方法
11、各类树结构的实现和应用
12、hash,任何一个技术面试官必问(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞)
13.什么是平衡二叉树?
14.数组和链表的优缺点
15.最小堆插入,删除编程实现
16. 4G的long型整数中找到一个最大的,如何做?
17. 有千万个string在内存怎么高速查找,插入和删除?
18.100亿个数,求最大的1万个数,并说出算法的时间复杂度
19.设计一个洗牌的算法,并说出算法的时间复杂度。
20.请分别用递归和非递归方法,先序遍历二叉树
21.其他各种排序方法
22.哈希表冲突解决方法?
六、系统架构
1.设计一个服务,提供递增的SessionID服务,要求保证服务的高可靠性,有哪些方案?集中式/非集中式/分布式
2.多台服务器要执行计划任务,但只有拿到锁的任务才能执行,有一个中心服务器来负责分配锁,但要保证服务的高可靠性。
3.如何有效的判断服务器是否存活?服务器是否踢出集群的决策如何产生?
4.两个服务器如何在同一时刻获取同一数据的时候保证只有一个服务器能访问到数据?
5. 编写高效服务器程序,需要考虑的因素
6.QQ飞车新用户注册时,如何判断新注册名字是否已存在?(数量级:几亿)
=======================================================
注:需要C/C++ Linux服务器开发学习资料私信“资料”(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等),免费分享
相关推荐
- 用Deepseek扩写土木工程毕业论文实操指南
-
用Deepseek扩写毕业论文实操指南一、前期准备整理现有论文初稿/提纲列清楚论文核心框架(背景、现状、意义、方法、数据、结论等)梳理好关键文献,明确核心技术路线二、Deepseek扩写核心思路...
- 985学霸亲授,DeepSeek也能绘6大科研图表,5分钟就出图
-
在实验数据处理中,高效可视化是每个科研人的必修课。传统绘图软件操作复杂、耗时费力,而智能工具DeepSeek的出现彻底改变了这一现状。本文将详解如何用DeepSeek一键生成六大科研常用图表,从思维导...
- AI写论文刷屏?大学生正在丢掉的思考力
-
一、宿舍深夜:当论文变成"Ctrl+C+V"凌晨两点的大学宿舍,小王对着电脑屏幕叹气。本该三天前开始写的近代史论文,此刻还一片空白。他熟练打开某AI写作网站,输入"论五四运动的...
- Grok在辅助论文写作上能不能既“聪明”又“可怕”?!
-
AcademicIdeas-学境思源AI初稿写作随着人工智能技术的飞速发展,论文写作这一学术任务正迎来新的助力。2025年2月18日,美国xAI公司推出了备受瞩目的Grok3模型,其创始人埃隆·...
- 大四论文沟通场景!音频转文字难题听脑AI来化解
-
大四学生都知道,写论文时和导师沟通修改意见,简直是“过关斩将”。电话、语音沟通完,想把导师说的修改方向、重点要求记下来,麻烦事儿可不少。手写记不全,用普通录音转文字工具,转完还得自己慢慢找重点,稍不注...
- 论文写作 | 技术路线图怎么画?(提供经典优秀模板参考)
-
技术路线图是一种图表或文字说明,用于描述研究目标、方法和实施计划。它展示了研究的整体框架和步骤,有助于读者理解研究的逻辑和进展。在课题及论文中,技术路线图是常见的一部分,甚至是一个类似心脏一样的中枢器...
- 25年信息系统项目管理师考试第2批论文题目写作建议思路框架
-
25年信息系统项目管理师考试第2批论文题目写作建议思路框架--马军老师
- 微信购物应尽快纳入法律框架(微信购物管辖)
-
符向军近日,甘肃省工商行政管理局发布《2016年上半年信息分析报告》。报告显示,微信网购纠纷迅猛增长,网络购物投诉呈上升趋势。投诉的主要问题有出售的商品质量不过关、消费者通过微信付款后对方不发货、购买...
- 泛珠三角区域网络媒体与腾讯微信签署《战略合作框架协议》
-
新海南客户端、南海网7月14日消息(记者任桐)7月14日上午,参加第四届泛珠三角区域合作网络媒体论坛的区域网络媒体负责人及嘉宾一行到腾讯微信总部座谈交流,并签署《战略合作框架协议》(以下简称《框架协...
- 离线使用、植入微信-看乐心Mambo手环如何打破框架
-
从2014年开始智能手环就成功进入人们的生活,至今已经演变出数据监测、信息推送、心率监测等诸多五花八门的功能,人们选择智能手环并不指望其能够改变身体健康情况,更多的是通过数据来正视自身运动情况和身体健...
- 华专网络:如何零基础制作一个网站出来?
-
#如何零基础制作一个网站出来?#你是不是觉得网站建设很复杂,觉得自己是小白,需求不明确、流程搞不懂、怕被外包公司坑……这些问题我都懂!今天华专网络就用大白话给你捋清楚建站的全流程,让你轻松get网站制...
- WAIC2024丨明日上午9点,不见不散!共同探讨智能社会与全球治理框架
-
大咖云集,硕果闪耀WAIC2024世界人工智能大会智能社会论坛将于7月5日9:00-12:00与你相约直播间WAIC2024上海杨浦同济大学哔哩哔哩多平台同步直播探讨智能社会与全球治理框架WAIC...
- 约基奇:森林狼换来戈贝尔时大家都在嘲笑 他们的阵容框架很不错
-
直播吧5月4日讯西部季后赛半决赛,掘金将迎战森林狼,约基奇赛前接受采访。约基奇说道:“当蒂姆-康纳利(森林狼总经理、前掘金总经理&曾选中约基奇)做了那笔交易(换来戈贝尔)时,每个人都在嘲笑他...
- 视频号带货为什么一个流量都没有?顶级分析框架送给你
-
视频号带货为什么一个流量都没有?遇到问题,一定是步步来分析内容,视频号带货一个流量都没有,用另外一个意思来讲,就可以说是零播放。为什么视频号带货一个流量都没有?跟你说再多,都不如来个分析框架。1、是否...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)