后台开发面试问题总结

今天看了几篇关于后台开发的面试经验贴,感受到了来自面试官的满满恶意。 主要考察领域:

C++、Linux、算法、数据结构、网络编程、海量数据处理、数据库。

C++:

析构函数原理以及步骤; 类对象的内存存储形式; STL各种容器的特点和实现方式; c++进程内存空间分布(注意栈从高到低分配,堆从低到高分配); 虚函数以及虚函数的作用(简单来说是多态,本质是为了封装)(哪些是编译时确定、哪些是运行时确定); makefile编译; gdb调试; 如何定位内存泄露; 动态链接和静态链接的区别; 32位系统一个进程最多多少堆内存; 写一个c程序辨别系统是64位 or 32位; 写一个c程序辨别系统是大端 or 小端字节序; 宏定义和展开; 位操作; 内存分配; 哪些库函数属于高危函数?为什么?(strcpy等等); 一个String类的完整实现必须很快速写出来(注意:赋值构造,operator=是关键); sizeof一个类求大小,变量、对象、指针、类等等; 指针和引用的区别; 多重类构造和析构的顺序(对称); stl各容器的实现原理(必考); extern c 是干啥的(必须将编译器的函数名修饰的机制解答的很透彻); volatile是干啥用的,(必须将cpu的寄存器缓存机制回答的很透彻); static const等等的用法;

Linux:

linux中各种I/O模型原理——select和epoll; 阻塞和非阻塞I/O区别; linux系统文件机制; 多进程同步方式; 使用过哪些进程间通讯机制,并详细说明(重点); linux系统的各类异步机制; 信号:列出常见的信号,信号怎么处理? i++是否原子操作? exit() _exit()的区别? 如何实现守护进程? linux的内存管理机制是什么? linux的任务调度机制是什么? 系统如何将一个信号通知到进程? 什么是死锁?如何避免死锁? 共享内存的使用实现原理; 多线程和多进程的区别(从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回答。哪些东西是一个线程私有的?答案中必须包含寄存器); 标准库函数和系统调用的区别?

算法:

设计一个算法将两个字符串合并按字母排序:遍历一次统计各字符出现次数,直接按字母顺序输出,O(n)。

数据结构:

排序、查找、二叉树、图; 哈希和B树各自特点; 链表归并排序; 大根堆的实现,快排(如何避免最糟糕的状态?),bitmap的运用; hash(例如为什么一般hashtable的桶数会取一个素数?如何有效避免hash结果值的碰撞);

网络:

netstat tcpdump ipcs ipcrm命令; cpu 内存 硬盘 等等与系统性能调试相关的命令; 设置修改权限chmod; tcp网络状态查看; 各进程状态; 抓包tcpdump; awk sed了解; tcp与udp的区别; udp调用connect有什么作用? tcp连接中时序图,状态图,必须非常非常熟练; socket服务端的实现,select和epoll的区别(必问); epoll哪些触发模式,有啥区别?(详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认); 大规模连接上来,并发模型怎么设计? tcp结束连接怎么握手,time_wait状态是什么,为什么会有time_wait状态?哪一方会有time_wait状态,如何避免? time_wait状态占用资源(必须回答的详细)? tcp头多少字节?哪些字段?(必问) 什么是滑动窗口?(必问) connect会阻塞,怎么解决?(必考必问,提示:设置非阻塞,返回之后用select检测状态); 如果select返回可读,结果只读到0字节,什么情况? keepalive 是什么东东?如何使用? 列举你所知道的tcp选项,并说明其作用。 socket什么情况下可读?

海量数据处理:

1、请统计100W个不等长字符串中各字符串的出现次数:建立哈希表,遍历一遍让等长的字符串映射到同一位置,里面可以再哈希链表。有两种情况:一种哈希链表中没出现过就存储该字符串并将对应的计数器设为0,有出现过的就+1。遍历一遍就完成统计。然后遍历哈希链表的计数器输出就行了。

2、设计数据结构可以快速返回0~10亿中哪些数出现了or没出现。这题和一面的一样,而且更简单,125M的bitmap就够了。

3、一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?

数据库:

sql; 服务器数据库大规模数据怎么设计; db各种性能指标;

原文发布于微信公众号 - 高性能服务器开发(easyserverdev)

原文发表时间:2018-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

巧用SQL:Oracle中实现split相关方法总结

尚世波 从事数据库方面工作多年,专注于pl/sql开发、数据库设计、优化方面的研究,喜欢挑战 前文回顾:巧用SQL:oracle pl/sql split函...

3865
来自专栏海说

深入理解计算机系统(3.2)---数据格式、访问信息以及操作数指示符

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer14.html

1325
来自专栏FreeBuf

逆向工厂(二):静态分析技术

* 本文原创作者:追影人,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 [逆向工厂]第一章节中介绍了逆向技术的相关基础知识,其中提到逆向的两种形式:...

4368
来自专栏编程

java基础思维图解

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。J...

2129
来自专栏屈定‘s Blog

设计模式--模板方法模式的思考

模板方法同样也是一种很实用的方法,目的是提高代码复用,并且统一大体的算法流程,比如一个一台电脑主机,定义好放置CPU,硬盘,内存等空位后,就形成了一个骨架,那么...

1694
来自专栏技术小黑屋

你的Java代码对JIT编译友好么?

本文为 InfoQ 中文站特供稿件,首发地址为:你的Java代码对JIT编译友好么?。如需转载,请与 InfoQ 中文站联系。

2692
来自专栏青玉伏案

设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

今天是五.四青年节,祝大家节日快乐。看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火。这两道菜大部分人都应该吃过,特别是醋溜土豆丝,...

1769
来自专栏熊二哥

GOF设计模式快速学习

这段时间,学习状态比较一般,空闲时基本都在打游戏,和研究如何打好游戏,终于通过戏命师烬制霸LOL,玩笑了。为了和"学习"之间的友谊小船不翻,决定对以往学习过的G...

2009
来自专栏佳爷的后花媛

h文件和c文件的区别include本身只是一个简单的文件包含预处理命令,即为把include的后面文件放到这条命令这里,除此之外,没有其它的用处(至少我也样认为).

其实在H文件里写函数也无所谓,只是不符合习惯而已。只要按照以上的格式写,一个H文件添加多少次都无所谓,

2142
来自专栏北京马哥教育

Redis 数据结构使用场景

一、redis 数据结构使用场景   原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码。目前目标...

3974

扫码关注云+社区

领取腾讯云代金券