C++ 后台开发面试时一般考察什么? |
您所在的位置:网站首页 › 哈希表的实现和常见操作c语言 › C++ 后台开发面试时一般考察什么? |
总体来说,C++面试中,对这门语言本身内容的考察并不多,更多考察的是 C++ 背后的技术栈,更多倾向考察一些原理性和基础性的问题,高级岗位会考察一些工作经历和经验。 总结起来一句话:初级看基础,高级看经验。 1 C/C++ 语言基础对于初级岗位如果在基础问题上答不好,面试挂的几率就比较大。举个例子,对于一个初级岗位来说,假设有如下面试题: //下列代码输出结果是啥? #include int main() { char p = 'A'; std::cout 连接server ->收发数据;服务器端创建socket -> 绑定ip和端口号 -> 启动侦听 ->接受客户端连接 ->与客户端通信收发数据】即可)、TCP 与 UDP的区别等等。对于工作经验三年以内的社会人士或者一些中级面试者一般会问一些稍微重难点问题,如 select 函数的用法,非阻塞 connect 函数的写法,epoll 的水平和边缘模式、阻塞socket与非阻塞socket的区别、send/recv函数的返回值情形、reuse_addr选项等等。Windows 平台可能还会问 WSAEventSelect 和 WSAAsyncSelect 函数的用法、完成端口(IOCP模型)。 对于三年以上尤其是“号称”自己设计过服务器、看过开源网络通信库代码的面试者,面试官一般会深入问一些问题,这类问题要么是实际项目中常见的难题或者网络通信细节,根据我的经验,一般有这样一些问题: nagle算法; keepalive选项; Linger选项; 对于某一端出现大量CLOSE_WAIT 或者 TIME_WAIT如何解决; 通讯协议如何设计或如何解决数据包的粘包与分片问题; 心跳机制如何设计;(可能不会直接问问题本身,如问如何检查死链) 断线重连机制如何设计; 对 IO Multiplexing 技术的理解; 收发数据包正确的方式,收发缓冲区如何设计; 优雅关闭; 定时器如何设计; epoll 的实现原理。 举个例子,让读者感受一下,笔者曾去BiliBili被问过这样一个问题:如果A机器与B机器网络 connect 成功后从未互发过数据,此时其中一机器突然断电,则另外一台机器与断电的机器之间的网络连接处于哪种状态? 推荐书籍:《tcp/ip详解卷一卷二卷三》 5 数据库数据库知识一般在大的互联网企业对应届生不做硬性要求,对于小的互联网企业或社会人士一般有一定的要求。其要求一般包括: 熟悉基本 SQL 操作 包括增删改查(insert、delete、update、select语句),排序 order,条件查询(where 子语句),限制查询结果数量(LIMIT语句)等 稍微高级一点的 SQL 操作(如Group by,in,join,left join,多表联合查询,别名的使用,select 子语句等) 索引的概念、索引的原理、索引的创建技巧 数据库本身的操作,建库建表,数据的导入导出 数据库用户权限控制(权限机制) MySQL的两种数据库引擎的区别 SQL 优化技巧 以上属于对开发的基本的数据库知识要求,你可以找一本相关入门级的数据库图书学习即可。 高级开发除了以上要求还要熟悉高可用 MySQL、主从同步、读写分离、分表分库等技术,这些技术的细节一定要清楚,它们是你成为技术专家或者高级架构的必备知识。我们在实际面试时,在讨论高可用服务服务方案时,很多面试者也会和我们讨论到这些技术,但是不少面试者只知道这些技术的大致思想,细节往往说不清楚,细节不会就意味着你的高可用方案无法落地,企业需要可以落地的方案。 这些技术我首推《高性能 MySQL》这本书,这本书高级开发者一定要通读的。 6 内存数据库/缓存技术时下以内存数据库为技术实现的缓存技术被广泛地应用于各个大小应用,所以缓存技术通常是基本要求,这里通常指的就是 Redis。 第一层面一般是对 Redis 的基础用法的考察 如考察 redis 支持的基础数据类型、redis的数据持久化、事务等。 第二层面不仅考察 redis 的基础用法,还会深入到 Redis 源码层面上,如 Redis 的网络通信模型、Redis 各种数据结构的实现等等。 Redis 高可用、RDB/AOF 存储、cluster、哨兵策略等。 无论是从找工作应付面试还是从提高技术的角度,Redis 是一个非常值得学习的开源软件,希望广大读者有意识地去了解、学习它。 7 项目经验除了社会招聘和一些小型的企业,一般的大型互联网公司对应届生不会做过多的项目经验要求,而是更希望应届生算法与数据结构等基础扎实、动手实践能力强即可。 对于一般的小公司,对于应届生会要求其至少熟练使用一门编程语言以及相应的开发工具,号称熟悉 Linux C++ 开发的面试者,不熟悉 GDB 调试基本上不是真正的熟悉 Linux C++ 开发,基本是说不过去的。 这里给一些学历不算好,学校不是非常有名,尤其是二本以下的广大想进入 IT 行业的同学一个建议,在大学期间除了要学好计算机专业基础知识以外,一定要熟练使用一门编程语言以及相应的开发工具。 关于项目经验,许多面试者认为一定要是自己参与的项目,其实你的项目经验也可以来源于你学习和阅读他人源码或开源软件的源码,如果你能理解并掌握这些开源软件中的思想和技术,在面试的时候能够与面试官侃侃而谈,面试官也会非常满意的。 c++后台开发考察的内容就介绍完了,技术还不够完善的小伙伴,可以来看看以下的视频教程,助你快速完善自己的技术栈。 部分视频:(更多视频资料加群812855908免费分享) 高并发场景3种锁方案:自旋锁、互斥锁、原子操作的优缺点 手写一个epoll组件,为tcp并发实现epoll 5种内存泄漏检测方式,让你重新理解C++内存管理 手把手实现线程池(120行),实现异步操作,解决项目性能问题 2.7w行nginx源码,这样读会节省很多时间 最后分享一个c/c++后台开发完整的学习路线图供大家查漏补缺 网页详情版(C/C++Linux服务器开发/高级架构师 学习路线) 编辑切换为居中 添加图片注释,不超过 140 字(可选) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |