来自:我是程序员小贱

一 自我介绍二 面试情况三 相关知识点汇总1 c/c++相关2 计算机网络3 数据结构相关4 数据库相关5 操作系统6 Linux基础知识及应用编程(后台必备!)7 大数问题8 手撕算法(递归非递归)9 针对项目相关10 场景题11 架构/分布式/中间件相关12 总结

不走丢,先关注!

一 自我介绍

本人小硕,秋招期间参加了不少安全类相关公司(深信服,绿盟等),另外参加了京东,小米,滴滴等互联网公司面试,同时也面试了几个研究所和一个银行,下面总结下秋招相关情况。

二 面试情况

公司名称 面试岗位 面试情况
小米 Linux内核开发 三面!挂
深信服 c/c++开发 四面   拿到offer
bigo c/c++开发 四面 拿到口头offer
滴滴 网络研发工程师 三面 挂场景
人大金仓 c语言开发工程师 三面 拿offer
京东 c++研发工程师 二面!挂
绿盟科技 防火墙开发工程师 没有去参加二面
浦发 软件开发工程师 拿到offer
中国网安(30所) c防火墙开发 拿到offer
映客直播 后台开发工程师(go) 二面挂(印象很深刻)
鼎桥(网上怎么变成了华为鼎桥。。) c/c++软件开发 拿到offer

这是小蓝整理的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入门到实践》《大型网站技术架构-核心原理与案例分析》

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

Linux后台开发必看!相关推荐

  1. linux后台开发必知的io优化知识总结

    尊重原创版权: https://www.hanzhangsy.com/hot/105435.html 更多内容参考: https://www.hanzhangsy.com/ linux后台开发必知的i ...

  2. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

  3. Linux驱动开发必看详解神秘内核

    I 在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念.我们将学习内核定时器.同步机制以及内存分配方法.不过,我们还是得从头开始这 ...

  4. Linux网络编程必看书籍推荐

    首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...

  5. Linux后台开发应该具备技能

    Linux后台开发应该具备技能 一.linux和os: 1.命令:netstat tcpdump ipcs ipcrm  这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 2.cpu 内存 ...

  6. (转)Linux后台开发应该具备技能

    Linux后台开发应该具备技能 分类: 杂谈 2013-04-14 12:45 741人阅读 评论(0) 收藏 举报 Linux后台开发应该具备技能 一.linux和os: 1.命令:netstat ...

  7. linux后台开发具备能力集锦

    Linux后台开发应该具备技能 一.linux和os: 1.命令:netstat tcpdump ipcs ipcrm  这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 2.cpu 内存 ...

  8. 【珍藏】 2012.NET开发必看资料53个+经典源码77个—下载目录

    2019独角兽企业重金招聘Python工程师标准>>> .NET 是 Microsoft XML Web services 平台.XML Web services 允许应用程序通过I ...

  9. C/C++Linux服务器开发高级架构师/Linux后台开发架构师丨高级进阶学习

    01 课程介绍 [录播]课程介绍(66分钟) 免费试学 [录播]磁盘存储链式的B树与B+树(131分钟) 免费试学 免费学习视频链接点击:C/C++Linux服务器开发高级架构师/Linux后台架构师 ...

最新文章

  1. .NET : 动态生成工作流定义文件并且进行编译
  2. 《STL源码剖析》学习--traits
  3. python 运行java jar包,从Python运行javajar文件的最快方法?
  4. 职场上面你面临的竞争
  5. windows API 开发飞机订票系统 图形化界面 (一)
  6. linux驱动模块开机自动加载,以及应用程序开机自启动
  7. [导入]SQL中的临时表和表变量
  8. 自然语言处理领域的两种创新观念
  9. JSF 2.2在30秒内创建一个自定义Hello World组件
  10. 【转载】小米2进入recovery的方法
  11. python嵌套列表法实现树_在python中创建递归迭代嵌套列表的“数据树”路径
  12. php微信支付回调验证
  13. mysql php sdk_PHP连接MySQL数据库
  14. m3u8手机批量转码_M3U8批量转换app-M3U8批量转换MP4软件下载v1.0 安卓版-西西软件下载...
  15. Excel高级函数应用总结
  16. 简单的Wifi密码破解
  17. 底部版权html5代码,版权设置底部-网页底部版权信息怎么修改?
  18. 卷积系列:Deconvolution(反卷积)/Transpose Convolution(转置卷积)/Fractional convolution
  19. 使用Python rembg库进行抠图:一行命令就搞定
  20. 如何重新启动Windows的Explorer.exe(以及任务栏和“开始”菜单)

热门文章

  1. postman 使用_如何使用Postman实现数据驱动?
  2. centos python2.7升级到3.7_centos系统升级python 2.7.3
  3. 春泥棒(偷春人) — ヨルシカ(MV + 歌词、汉译、罗马音)
  4. 洛谷 - 试炼场(全部题目备份)
  5. 模板 - 最长上升子序列与最长公共子序列
  6. 解题报告:CF1307D Cow and Fields(最短路、最优解不等式化简)
  7. S - Extended Traffic LightOJ - 1074
  8. poj2226(最小顶点覆盖)
  9. C/C++ 静态库和动态库的区别
  10. 即将到来的金三银四,这10道springboot常见面试题你需要了解下