热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++面试高频题

作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我





作者:守望者1028
链接:https://www.nowcoder.com/discuss/55353
来源:牛客网

面试高频题:

校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我也忘记了,如果您看到有些熟悉,那么可能就是您的,如果您觉得侵权,请告诉我,我撤回。


1语言基础(C++)


(1) 指针和引用的区别


(2) 堆和栈的区别


(3) new和delete是如何实现的,new 与 malloc的异同处


(4) C和C++的区别


(5) C++、Java的联系与区别,包括语言特性、垃圾回收、应用场景等(java的垃圾回收机制)


(6) Struct和class的区别


(7) define 和const的区别(编译阶段、安全性、内存占用等)


(8) 在C++中const和static的用法(定义,用途)


(9) const和static在类中使用的注意事项(定义、初始化和使用)


(10) C++中的const类成员函数(用法和意义)


(11) 计算下面几个类的大小:


class A {};: sizeof(A) = 1;


class A { virtual Fun(){} };: sizeof(A) = 4(32位机器)/8(64位机器);


class A { static int a; };: sizeof(A) = 1;


class A { int a; };: sizeof(A) = 4;


class A { static int a; int b; };: sizeof(A) = 4;


(12) 给一个代码,求输出结果


class A


{


public:


A(int x){}


}


问:A a = 1;是否正确, 如果正确, 那么它调用了哪些函数?


这类题目更常见的是在基类和子类有不同实现方法。(虚函数相关,栗子很多,不多说了)


(13) C++的STL介绍(这个系列也很重要,建议侯捷老师的这方面的书籍与视频),其中包括内存管理allocator,函数,实现机理,多线程实现等


(14) STL源码中的hash表的实现


(15) STL中unordered_map和map的区别


(16) STL中vector的实现


(17) vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因。


(18) C++中的重载和重写的区别:


(19) C ++内存管理(热门问题)


(20) 介绍面向对象的三大特性,并且举例说明每一个。


(21) 多态的实现(和下个问题一起回答)


(22) C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理(热门,重要)


(23) 实现编译器处理虚函数表应该如何处理


(24) 析构函数一般写成虚函数的原因


(25) 构造函数为什么一般不定义为虚函数


(26) 构造函数或者析构函数中调用虚函数会怎样


(27) 纯虚函数


(28) 静态绑定和动态绑定的介绍


(29) 引用是否能实现动态绑定,为什么引用可以实现


(30) 深拷贝和浅拷贝的区别(举例说明深拷贝的安全性)


(31) 对象复用的了解,零拷贝的了解


(32) 介绍C++所有的构造函数


(33) 什么情况下会调用拷贝构造函数(三种情况)


(34) 结构体内存对齐方式和为什么要进行内存对齐?


(35) 内存泄露的定义,如何检测与避免?


(36) 手写实现智能指针类(34-37我没遇见过)


(37) 调试程序的方法


(38) 遇到coredump要怎么调试


(39) 内存检查工具的了解


(40) 模板的用法与适用场景


(41) 成员初始化列表的概念,为什么用成员初始化列表会快一些(性能优势)?


(42) 用过C11吗,知道C11新特性吗?(有面试官建议熟悉C11)


(43) C++的调用惯例(简单一点C++函数调用的压栈过程)


(44) C++的四种强制转换


2计算机网络(TCP/IP)


(1) 建立TCP服务器的各个系统调用


(2) 继上一题,说明socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?


(3) 对路由协议的了解与介绍。内部网关协议IGP包括RIP,OSPF,和外部网关协议EGP和BGP.


(4) 路由协议所使用的算法。


(5) TCP和UDP的区别


(6) TCP和UDP相关的协议与端口号


(7) TCP(UDP,IP)等首部的认识(http请求报文构成)


(8) 网页解析的过程与实现方法


(9)    在浏览器中输入URL后执行的全部过程(如www.baidu.com)


(10) 网络层分片的原因与具体实现


(11) TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题)


(12) TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)


(13) 为什么使用三次握手,两次握手可不可以?


(14) TIME_WAIT的意义(为什么要等于2MSL)


(15) 超时重传机制(不太高频)


(16) TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?


(17) 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?


(18) tcp滑动窗口协议


(19) 拥塞控制和流量控制的区别


(20) TCP拥塞控制,算法名字?(极其重要)


(21) http协议与TCP联系


(22) http/1.0和http/1.1的区别


(23) http的请求方法有哪些?get和post的区别。


(24) http的状态码


(25) http和https的区别,由http升级为https需要做哪些操作


(26) https的具体实现,怎么确保安全性


(27) http中浏览器一个URL的流程,这个过程中浏览器做了什么,URL包括哪三个部分?


(28) 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?


(29) 对称密码和非对称密码体系


(30) 数字证书的了解(高频)


(31) 客户端为什么信任第三方证书


(32) RSA加密算法,MD5原理(MD5不算加密算法)


(33) 单条记录高并发访问的优化


(34) 介绍一下ping的过程,分别用到了哪些协议


(35) TCP/IP的分片粘包过程


(36) 有没有抓过TCP包,描述一下


(37) 一个ip配置多个域名,靠什么识别?


(38) 服务器攻击(DDos攻击)


3数据库(MySQL)


数据库我自身不是特别熟,面试的时候一般也都坦言了,所以面试官都只是问一些基础题目。


(1) 关系型和非关系型数据库的区别(各自优点)


(2) 常用SQL语句(DDL,DML,DCL,TCL)


(3) 数据库中join的类型与区别(inner join, outer join, cross join, natural join, self join),注意适用场景和sql语句的编写


(4) 数据库的索引类型


(5) 聚集索引和非聚集索引的区别(叶节点存储内容)


(6) 唯一性索引和主码索引的区别


(7) 索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点)


(8) 索引的底层实现(B+树,为何不采用红黑树,B树)


(9) B树和B+树具体实现


(10) 索引最左前缀问题


(11) Mysql的优化(高频,索引优化,性能优化)


(12) 数据库引擎介绍,innodb和myisam的特点与区别


(13) 数据库中事务的ACID(四大特性都要能够举例说明,理解透彻,比如原子性和一致性的关联,隔离性不好会出现的问题)


(14) 数据库隔离性设置不同会出现的问题(脏读、不可重复读、丢失修改、幻读)


(15) 数据库的隔离级别,mysql和Oracle的隔离级别分别是什么


(16) 数据库连接池的作用


(17) Mysql的表空间方式,各自特点


(18) 分布式事务


(19) 数据库的范式


(20) 数据的锁的种类,加锁的方式


(21) 视图的作用与使用方法(如何删除等)


(22) 分库分表,主从复制,读写分离。(我不会,也没碰到过)


(23) 项目中哪里用到了数据库,怎么用的


4Linux基础


Linux这一块如果不太熟,可以直接说,但是因为开发岗位一般都是在Linux平台下的,所以几个基础问题还是要会的。


(1) Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要)


(2) 文件系统的理解(EXT4,XFS,BTRFS)


(3) 文件处理grep,awk,sed这三个命令必知必会


(4) IO复用的三种方法(select,poll,epoll)深入理解,包括三者区别,内部原理实现?


(5) Epoll的ET模式和LT模式(ET的非阻塞)


(6) 查询进程占用CPU的命令(注意要了解到used,buf,cache代表意义)


(7) linux的其他常见命令(kill,find,cp等等)


(8) shell脚本用法


(9) 硬连接和软连接的区别


(10) 文件权限怎么看(rwx)


(11) 文件的三种时间(mtime, atime,ctime),分别在什么时候会改变


(12) Linux监控网络带宽的命令,查看特定进程的占用网络资源情况命令


5操作系统


(1) 进程与线程的区别和联系


(2) 一个进程可以创建多少线程,和什么有关


(3) 一个程序从开始运行到结束的完整过程(四个过程)


(4) 进程通信方法(Linux和windows下),线程通信方法(Linux和windows下)


(5) 进程调度方法详细介绍


(6) 页面置换方法详细介绍


(7) 能否实现一个LRU算法


(8) 死锁的必要条件(怎么检测死锁,解决死锁问题)


(9) 哲学家就餐,银行家,读者写者,生产者消费者(怎么加锁解锁,伪代码)


(10) 海量数据的bitmap使用原理


(11) 布隆过滤器原理与优点


(12) 布隆过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题


(13) 同步IO和异步IO


(14) 文件读写使用的系统调用


(15) 线程池的了解、优点、调度处理方式和保护任务队列的方式


(16) 怎么回收线程


(17) 僵尸进程问题


(18) 多线程同步(尤其是如果项目中用到了多线程,很大可能会结合讨论)


(19) memcache了解


(20) 异常和中断的区别


(21) 一般情况下在Linux/windows平台下栈空间的大小


6设计模式和算法


设计模式一般都不会考太多,除非你明确说自己懂。我基本上就不涉及到设计模式的东西,所以只是简要说说。当然,单例模式和简单工厂模式的概念和使用场景还是要知道的。


(1) 介绍熟悉的设计模式(单例,简单工厂模式)


(2) 写单例模式(饿汉模式和懒汉模式),线程安全版本


(3) MVC设计模式


算法这一块太过庞大,几乎都有可能,牛油们最好还是去刷剑指offer(level 1),leetcode(如果能够刷到最高难度,算法对你来说已经不是什么了,或者说面试对你来说简直就是吃饭喝水的难度),左神的书《程序源代码面试指南》(字符串,数组,dp,海量数据问题,搞定它们也就搞定面试的一半)。


下面还是简单的列举一些吧(包括一些数据结构题目,只列举简单的,面试的算法一半不会太难,但是现在一般都是需要比较好的思维,或者曾经接触过这方面的题,建议就是多刷题,做题感觉是刷出来的)


(1) 红黑树的了解(平衡树,二叉搜索树),使用场景


(2) 红黑树在STL上的应用


(3) 了解并查集吗?(低频)


(4) 贪心算法和动态规划的区别


(5) 判断一个链表是否有环,如何找到这个环的起点


(6) 实现一个strcpy函数(或者memcpy),如果内存可能重叠呢


(7) 实现一个循环队列


(8) 排序算法(写快排,归并排序,堆排序),算法的时间复杂度,空间复杂度,是否稳定等


(9) 快排存在的问题,如何优化


(10) 反转一个链表


(11) Top K问题(可以采取的方法有哪些,各自优点?)


(12) Bitmap的使用,存储和插入方法


(13) 二叉树的先序、中序、后序遍历(非递归实现)


(14) 二叉树的公共祖先(简单地说,剑指offer上的题大都是高频题)


(15) 1-n中有多少个1


(16) 字典树的理解以及在统计上的应用


(17) 数组的全排列


(18) N个骰子出现和为m的概率


(19) 海量数据问题(可参考左神的书)


(20) 一致性哈希


7智力题


我特别把智力题单独拿出来讲,是因为这一块其实有些公司很看重(例如腾讯),但是我基本上也没刷过这类题目,接触不多,牛油们自行补充吧。


(1) 100层楼,只有2个鸡蛋,想要判断出那一层刚好让鸡蛋碎掉,给出策略(滴滴笔试中两个铁球跟这个是一类题)


(2) 毒药问题,n拼毒药,要快速找出哪一瓶有毒,需要几只小白鼠


(3) 博弈论问题


(4) 先手必胜策略问题:n本书,每次能够拿X-X本,怎么拿必胜


(5) 放n只蚂蚁在一条树枝上,蚂蚁与蚂蚁之间碰到就各自往反方向走,问总距离或者时间。


(6) 瓶子换饮料问题:多少个瓶子能够换1瓶饮料,问最多能喝几瓶





推荐阅读
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上安装和配置Grafana,包括必要的依赖项安装、插件管理以及服务启动等步骤。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
author-avatar
yangxin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有