C/C++面试题总结(2)
C++部分:
1.static(静态)变量有什么作用?
2.virtual关键字用法
3.const有哪些作用 或《王道程序员求职宝典》P95
4.new/delete与malloc/free的区别是什么(注:malloc无返回类型,记一下原函数)
5.内存分配形式有哪些?
6.内联函数的作用?内联函数里面可以写for循环吗?
7.什么是内存泄漏?
8.为什么会内存泄漏?如何确定内存泄漏?怎么定位?
9.野指针?空指针?
10.typedef 和 define有什么区别
11.C++中宏定义与内联函数有什么区别
12.定义常量谁更好? #define还是const?
13.重载、覆盖、隐藏有什么区别?
14.全局变量和静态变量有什么异同
15.空类中自带哪些函数?
16.构造函数可以为virtual吗?为什么?
17.基类的析构函数为何要设置为虚函数?
18.抽象类和接口类的区别?
19.C++中虚函数是如何实现的?
20.STL 的考察,比如迭代器和指针的区别,迭代器失效,容器,迭代器,算法之间的关系。
21.map 和 set 的区别和使用
22.C++中的 STL 中vector是怎么样实现动态增长的(实现机制)
23.直接手写代码:实现一个动态数组
24.deque和queque的区别?deque(双端队列)应用场景是什么?
25.指针和引用的区别(《王道程序员求职宝典》P133下半页)
26.怎么实现内存池?(联系std::allocator)
数据结构与算法部分:
深度优先搜索代码:
广度优先搜索代码:
1.实现二分查找(注意 mid赋值时,尽量写m id=L+(R-L)/2取代mid=(L+R)/2,因为(L+R)计算时有可能产生溢出)
2.快速排序的实现
3.堆排序实现?应用场景?
4.判断两个链表是否有公共节点
5.链表的环(《王道程序员求职宝典》P200)
6.头插法,尾插法插入结点
7.判断链表是否有环
8.链表和二叉排序树的相互转换
9.找链表倒数第k个结点
10.怎么针对链表进行快速排序?
11.合并两个有序数组到一个中
12.二叉树的前、中、后序非递归遍历代码实现
13.树的相关概念,比如平衡二叉树,线索二叉树,二叉树的查找和排序,红黑树等等
14.手写代码:n*n的棋盘,初始点x,y。有个马走日,看它是否能不重不漏地走完棋盘上所有点。
15.如果文件特别大,不能装到内存里,怎么办?
Linux部分:
1.锁、信号量
2.怎么调试段错误(gdb),使用gdb怎么调试多线程程序
3.Linux 下的 fork 函数怎么理解,它会产生哪些值(三种),分别是什么含义
4.Linux 下中断的理解, SIGPIPE、SIGINT 等等。
5.Linux 下的僵尸进程和孤儿进程的概念,怎么预防和处理他们
6.Linux 下的阻塞和非阻塞,同步与异步的区别
7.Linux 下的 I/O 复用,select、poll、epoll 的区别,其中 epoll 有哪两种形式(LT,ET),他们的区别与联系
8.操作系统中进程的互斥和死锁,进程间通信的通讯有哪几种,说出你用的最多的几种
9.如何确定一个进程应该开多少线程
10.什么是不可重入函数?如何编写不可重入函数?
设计模式:
1.设计模式有哪些(23 种),你熟悉的单例模式的优缺点是什么?
2.手写实现单例模式,确保其实线程安全的
网络编程部分:
1.TCP三次握手、四次挥手 过程,为什么?
1)tcp基于连接的,udp基于无连接的
2)tcp对系统资源要求多,udp要求少
3)udp程序结构简单
4)tcp是流模式,udp是数据报模式
5)tcp保证正确性,udp可能丢包;tcp保证数据顺序,udp不能保证
2.TCP能够设置的选项有哪些?各自的意义是什么?
SO_REUSEADDR
SO_REUSEPORT
SO_KEEPALIVE
TCP_NODELAY
TCP_CORK
3.TCP通过下列方式提供可靠性:
A 将数据截断成合理长度(应用程序被分割成TCP认为合适的发送的数据块)
B 超时重传(TCP发送一个段后,启动定时器,等待目的端确认收到这个报文段,没有确认,重发)
C 确认应答(收到数据后,会做一个确认,推迟几分之一秒,为了校验)
D 数据校验(首部和数据的校验和,有差错,丢弃不确认)
E 乱序重排(在IP的基础上传输,有可能乱序)
F 重复丢弃(IP重复)
G 流量控制(TCP连接的每一方都有固定大小缓冲区,防止较快主机致使较慢主机缓冲区溢出,滑动窗口)
4.Time_wait状态的作用
(1)保证TCP协议的全双工连接能够可靠关闭:要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
(2)保证这次连接的重复数据段从网络中消失:由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。
5.怎么用udp实现可靠的传输协议?
6.http的工作过程
http://www.cnblogs.com/fakis/archive/2011/02/25/1976568.html
7.HTTP协议中GET方法与POST方法的区别
区别一:
get重点在从服务器上获取资源,post重点在向服务器发送数据;
区别二:
get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,
并用"?"连接,多个请求数据间用"&"连接,如 http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见 的;
post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;
区别三:
Get传输的数据量小,因为受URL长度限制,但效率较高;
Post可以传输大量数据,所以上传文件时只能用Post方式;
区别四:
get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;
post较get安全性较高
8.HTTP状态码?
1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
200 - 请求成功
3xx:重定向--要完成请求必须进行更进一步的操作。
301 - 资源(网页等)被永久转移到其它URL
4xx:客户端错误--请求有语法错误或请求无法实现。
400 (Bad Request/错误请求)
400 (SC_BAD_REQUEST)指出客户端请求中的语法错误。
401 (Unauthorized/未授权)
401 (SC_UNAUTHORIZED)表示客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面。这个响应必须包含一个WWW-Authenticate的授权信息头。例如,在本书4.5部分中的“Restricting Access to Web Pages./限制访问Web页。”
403 (Forbidden/禁止)
403 (SC_FORBIDDEN)的意思是除非拥有授权否则服务器拒绝提供所请求的资源。这个状态经常会由于服务器上的损坏文件或目录许可而引起。
404 (Not Found/未找到)请求的资源(网页等)不存在
5xx:服务器端错误--服务器未能实现合法的请求。
500 - 内部服务器错误
9.http和https的区别
10.怎么提高服务器的并发处理能力?
答:涉及的方面有以下几种:
A. 提高CPU并发计算能力
(1)多进程&多线程
(2)减少进程切换,使用线程,考虑进程绑定CPU
(3)减少使用不必要的锁,考虑无锁编程
(4)考虑进程优先级
(5)关注系统负载
(6)关注CPU使用率,除了用户空间和内核空间的CPU使用率以外,还要关注I/O wait
B. 减少系统调用的使用
C. 考虑减少内存分配和释放
(1)改善数据结构和算法复杂度
(2)使用内存池
(3)考虑使用共享内存
D. 考虑使用持久连接
E. 改进I/O模型
(1)DMA技术
(2)异步I/O
(3)改进多路I/O就绪通知策略,epoll
(4)sendfile
(5)内存映射
(6)直接I/O
F. 改进服务器并发策略
(1)一个进程处理一个连接,非阻塞I/O,使用长连接
(2)一个进程处理多个连接,异步I/O, 使用长连接
操作系统部分:
1.进程和线程的区别(《王道程序员求职宝典》P325例5)
2.进程间通信方式(偶尔考)
3.死锁,产生死锁的四个条件(《王道程序员求职宝典》P329)有时候 也会给定一个死锁场景,问如何做才能解除死锁。
4.如何实现无锁编程?
5.除了协程如何避免频繁线程切换
数据库部分:
1.索引怎么建立,索引有什么优点缺点
2.如何提高数据库查询速度?有哪些优化技巧?
https://www.jianshu.com/p/fea61b518dc4
3.如何获取一个表的前N条记录?
4.事务的特性ACID:
原子性(atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的默认规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性(isolation):当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的相互关系。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性(durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。
其他:
1.你的项目讲一下?遇到的困难?
2.你们部门有哪些组?都干什么?
C/C++面试题总结(2)的更多相关文章
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- C++常考面试题汇总
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- .NET面试题系列[4] - C# 基础知识(2)
2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...
- 我们公司的ASP.NET 笔试题,你觉得难度如何
本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
随机推荐
- OSI模型第三层网络层-初识路由协议
1.路由协议: 顾名思义就是路由器所使用的协议. 分类: (1)按照作用范围分类,IGP(类型)内部网关协议(rip,ospf,isis),EGP(类型)边界路由协议(bgp) 把互联网比作整个世界土 ...
- [ubuntu]安装adobe air
修改安装文件为可执行权限: sudo ./AdobeAIRInstaller.bin 提示错误: <code> Adobe AIR could not be installed. Inst ...
- PAT 1057. 数零壹(20)
给定一串长度不超过105的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0.多少1.例如给定字符串“PAT ...
- 7.Django模型类的定义和管理
Django的模型类是给ORM层服务的 1.每个数据模型都是django.db.models.Model的子类. 2.它的父类Model包含了所有必要的和数据库交互的方法,并提供了定义数据库字段的语法 ...
- react create app ,nginx服务器配置
server{ listen 80; server_name www.domain.com domain.com; location ~* \.js$ { root /home/hard/Projec ...
- RZ11 系统配置参数
SAP系统配置参数详解[转] SAP 系统参数设置 path: /usr/sap/PRD/SYS/profile profile: PRD_DVEBMGS00_sapapp 如果您想查看所有的参数及当 ...
- 数据分析R语言(1)
无意中发现网上的一个数据分析R应用教程,看了几集感觉还不错,本文做一个学习笔记(知识点来源:视频内容+R实战+自己的理解),视频详细的信息请参考http://www.itao521.com/cours ...
- ubuntu 安装 phpstorm
phpstorm是用JAVA开发的,所以在安装之前需要先安装jdksudo apt-get install default-jdk从官网上下载phpstorm 的linux版本 http://www. ...
- jenkins实现自动部署
主机A搭建gitlab.gitlab下载:https://www.gitlab.cc/downloads/ (gitlab中文网) 主机B搭建jenkinsjenkins下载:https://j ...
- Tornado--基于H5图片的上传
日记 好久没有分享过东西,一直在学习状态,学的并不好很多东西都没有,也写了很多demo,后续整理出来在分享,就不分享了,不为什么因为今天周六,好不容易双休,大早上的一个人醒来,刷刷知乎,听音乐.分享一 ...