A must-see for Linux background development!

1. Self-introduction 2. Interview situation 3. Summary of related knowledge points 1 C/C++ related 2 Computer network 3 Data structure related 4 Database related 5 Operating system 6 Basic knowledge of Linux and application programming (required in the background!) 7 Large number problems 8 Hand tearing algorithm (Recursive and non-recursive) 9 Project related 10 Scenario questions 11 Architecture/distributed/middleware related 12 Summary

Don't get lost, pay attention first!

I introduce myself

I, Xiaoshuo, participated in many security-related companies (Shenfu, NSFOCUS, etc.) during the autumn recruitment period. I also participated in interviews with Internet companies such as JD.com, Xiaomi and Didi. I also interviewed several research institutes and a bank. Summarize the relevant situation of the next autumn recruitment.

2. Interview situation

company name Interview position Interview situation
Xiaomi Linux kernel development Three sides! hang
Convinced c/c++ development Get the offer
failed c/c++ development Get oral offers from all sides
Didi Network R&D Engineer Three-sided hanging scene
Renda Jincang c language development engineer Three-sided offer
Jingdong c++ R&D engineer Two sides! hang
NSFOCUS Firewall development engineer Did not go to the two sides
Pufa Software Development Engineer Get an offer
China Net Security (30 institutes) c firewall development Get an offer
Inke Live Back-end development engineer (go) Two-sided hanging (very impressive)
TD Tech (How did the Internet become Huawei TD Tech...) c/c++ software development Get an offer

This is a high-frequency question for Linux back-end development interviews organized by Xiaolan (except for the language part, the other parts should not be much different), and provide books or video resources of related knowledge.

Three related knowledge points summary

1 c/c++ related

  • C++ virtual function principle

  • Smart pointer

  • How to implement c++ objects and private members in c language

  • C++ polymorphism implementation

  • The difference between new and malloc and the underlying implementation principle

  • How to expand the vector in STL

  • The initialization process of virtual function pointer

  • Introduction to c++11 atomic variables

  • What are the features of c++11, say used

  • How to understand overloading and rewriting

  • How to understand the static keyword in C++

  • 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 总结

以上是技术面试中秋招常遇到的相关题目,希望对大家有帮助。所有书籍资料,扫描下面二维码直接领取。

0bd149e730217f040363301797fa5344.jpeg


Guess you like

Origin blog.51cto.com/14984904/2545751