Linux 后台开发面试总结
来自:我是程序员小贱
一 自我介绍
本人小硕,秋招期间参加了不少安全类相关公司(深信服,绿盟等),另外参加了京东,小米,滴滴等互联网公司面试,同时也面试了几个研究所和一个银行,下面总结下秋招相关情况。
二 面试情况
三 相关知识点汇总
1 c/c++相关
c++虚函数原理
智能指针
c 语言如何实现 c++对象以及私有成员
c++多态实现
new 和 malloc 的区别以及底层实现原理
STL 中的 vector 怎么扩容
虚函数指针的初始化过程
c++11 原子变量介绍
c++11 特性有哪些,说用过的
怎么理解重载与重写
怎么理解 c++中的 static 关键字
vector 和 list 的区别
c++的内存分配
map 与 set 的底层实现
类静态变量的初始化
析构函数可以是虚函数?为什么
深拷贝与浅拷贝
指针常量,常量指针的区别
c 语言语法推荐书籍: 《c 专家编程》《c 与指针》
c++语言语言推荐书籍:《c++ primer》《effect c++》
c++语言 stl 底层原理:《STL 源码剖析》
2 计算机网络
介绍下 proactor 和 reactor
reactor 的组成
TIME_WAIT 危害
TIME_WAIT 时长,为什么?
IP 为什么要分片
项目中说用到线程池,开多大,为什么运用线程池?
select 和 epoll 区别
select 什么情况返回 0
epoll 可读情况有哪些
什么时候需要 TCP 四次挥手?
如何设置非阻塞
什么是零拷贝?
tcp 与 udp 的区别以及应用场景
如何设计一个可靠的 udp
粘包如何解决
讲一下拥塞控制和流量控制
http 和 https 区别
是否了解中间人劫持原理
http 协议格式,几种方法,功能是什么
chunked 块了解?介绍下
有 chunked 的时候 contentlength 是什么样子
半连接在哪个阶段
三次握手四次握手详细过程,越详细越好
libevent 结构,内部实现
tcp 的可靠性体现在哪里
ARP 协议工作流程
epoll 中的 ET 和 LT 模式
介绍下滑动窗口
指针与引用的区别
Accept 发生在三次握手哪个阶段
Udp 的接收缓冲区和发送缓冲区和 tcp 的区别
http 长连接与短连接的区别
udp 包长度
一次 url 访问会经历哪些过程
数据包乱序会处理?
seq 为 1000,发送了 1000 个数据,下一个 seq 是多少?
syn 如果丢了,重传多少次
tcp/ip 相关推荐书籍:《tcp/详解:1》
熟悉使用 wireshark 捕包工具,加深印象可以使用 python 的一个库,scapy/dpkt.
3 数据结构相关
hash 处理冲突的方法
二分查找及其变种
数组与链表的区别
redis 数据结构用过哪些,了解跳表?
红黑树比平衡二叉树有哪些优点
二叉树,b+树,hash,二叉查找树区别
说说红黑树的特性
各种树,排序的时间复杂度
数据库索引,事务,事务级别
不考虑事务的隔离性会出现什么问题
事务隔离级别
索引的类型
AC 自动机时间复杂度
数据结构书籍《大话数据结构》
极客时间王大佬/谭大佬专栏
4 数据库相关
如何提高查询速度?
加了索引就快了?
数据库索引底层结构
mysql 与 memcache 的区别
mysql 常见三种存储引擎的
MySQL B+Tree 索引和 Hash 索引的区别?
B+树索引和哈希索引的明显区别是:
非关系型数据库和关系型数据库区别,优势比较?
mysql 常见查询优化方案
mysql 书籍推荐:《mysql 必知必会》,《高性能 Mysql》,《mysql45 讲》
5 操作系统
进程与线程的区别
多进程与多线程区别,应用场景
volatile 和原子变量的区别
proc 文件系统
自旋锁与普通锁的区别
虚拟内存
进程的内存分布
栈内存为什么由系统自动分配和释放
守护进程如何创建
进程间的通信方式及其区别,应用场景
死锁条件和解除
进程调度方式
对编译连接的理解
共享内存实现原理
僵尸进程是什么,如何处理
自旋锁在单 cpu 与多 cpu 下的使用
用户态与内核态
操作系统推荐书籍:《深入理解操作系统》,《Linux 内核设计与实现》
6 Linux 基础知识及应用编程(后台必备!)
如何查看进程打开的文件
介绍下 nm 与 ldd 命令
shell 命令查内存,端口 ,io 访问量,读写速率
awk grep 具体应用
硬链接与软连接,目录可不可以用硬链接
常见命令 netstat iptable tcpdump top
makefile 介绍下(cmake 介绍下)
gdb 查看堆栈中所有遍历
gdb 查看 shared_ptr
指向的内容
gdb 如何调试多进程多线程
g++和 gcc 编译出来有什么区别
死锁怎么调试
core 文件中是什么,gdb 调试 core 文件
如何读取一个 10G 文件,cat 一个 10g 文件会发生什么
Linux 基础命令推荐书籍:《Linux 就该这么学》
Linux 应用编程推荐书籍:《后台开发核心技术与应用实践》《Linux 多线程服务端编程》《高性能 Linux 服务器编程》 《linux 环境编程:从应用到内核》《unix 高级环境编程》
补充资料:gdb 手册和 makefile 详解
7 大数问题
有 200 亿 qq,但实际只有 25 亿用户,找到重复的 qq
25 亿 qq 占用内存多大
1-100 万,计算找出所有的质数(计算密集型任务),用单线程与多线程怎么处理
1 个 G 的文件写程序,从 A 机器发送到 B 机器,怎么发?
100G 的文本,每行 80k 还是 80 字符,提示用多个机器,多进程,多线程,求出重复最多的行。一个机器内存 8G,计算每个机器大概分多少?能读取 100G 的文本吗?找重复率前十的文本
三个有序的序列,查找公共的部分,第一次我说用哈希表,他说序列太大,空间复杂度要低点,我说了二分查找,他问三个序列查找的顺序和时间复杂度。(时间复杂度为 N*logN *logN)
100WURL,如何存储
10 台服务器,100w 用户,如何进行负载均衡,如何有个服务器挂掉了咋办
10000 个数据查找最小的 100 个?时间复杂度?
场景题:QQ 的服务器会保存登录用户的 QQ 号,只要有登录,文件里面就会有记录,现在需要统计哪些 QQ 号登录过,怎么做?(先说了分治用小文件,他说除了这个了,我说 bit 数组,他就问需要多大内存?)
大数问题通常的套路是 hash,分治,布隆,bitmap,如果推荐的话还是上面数据结构相关资料.当然如果能了解下比如 hdfs 文件系统,mapreduce,spark/flink 流式计算最佳哈
8 手撕算法(递归非递归)
链表有无环判断
实现一个单例模式
给一个字符串判断单词数
开方算法
青蛙跳台阶
常用排序(快排和归并要写吐)
反转链表
两个链表,寻找公共节点
查找字符串中不重复的最长子串
LRU
手写求树的深度的代码
手写生产者消费者
编程实现 string 类
两个数组 A,B,A 有的 B 都有,求 B-A;
输入一个字符串,输出它的全排列
统计完全二叉树多少个节点
memcpy 实现
算法学习书籍推荐《剑指 offer》,建议三遍哈。
leetcode 分专栏练习几题,不在多,在于精。
9 针对项目相关
介绍一个你做的比较的项目,几个人做的,担任什么角色
项目的技术点在哪里
项目不足在哪里
你在项目中学到了什么
让你优化项目中的一点,如何做
项目什么架构
测过系统性能吗,挂掉怎么办?
最好是自己做过的项目,即时不是也需要弄明白其架构,为什么这么做,有什么优点,什么优化方案?
10 场景题
给一个场景,设计一下定时对 url 进行爬虫,比如对新浪 1 个小时爬虫 n 次,然后某些博客可能 1 个星期爬虫 1 次。
给一个场景,设计服务器实现爬虫的 url 去重,如何让多个服务器对一个 url 爬虫指定次数
好多小文件,设计一个服务器来实现如何存储
设计两地高效传文件
11 架构/分布式/中间件相关
常用负载均衡策略
一致性 hash 原理
缓存容灾中数据一致性问题
了解 cap 理论吗
介绍下高可用,高性能,可伸缩基本概念。。
了解微服务?docker?k8s?
Nginx 了解到什么程度,nginx 配置更新实现,事件模型
推荐书籍:《redis 设计与实现》《从 0 开始学架构》《docker 入门到实践》《大型网站技术架构-核心原理与案例分析》
12 总结
以上是技术面试中秋招常遇到的相关题目,希望对大家有帮助。
推荐自己的Linux、C/C++技术交流群960994558 整理了一些个人觉得比较好的学习书籍、大厂面试题、和热门技术教学视频资料共享在里面,有需要的可以自行添加哦!~
评论