Linu系统开发面试常见问题及学习路线

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源码刨析》

计算机网络

  • 介绍下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.

数据结构相关

  • hash处理冲突的方法
  • 二分查找及其变种
  • 数组与链表的区别
  • redis数据结构用过哪些,了解跳表?
  • 红黑树比平衡二叉树有哪些优点
  • 二叉树,b+树,hash,二叉查找树区别
  • 说说红黑树的特性
  • 各种树,排序的时间复杂度
  • 数据库索引,事务,事务级别
  • 不考虑事务的隔离性会出现什么问题
  • 事务隔离级别
  • 索引的类型
  • AC自动机时间复杂度

数据结构书籍 《大话数据结构》

数据库相关

  • 如何提高查询速度?

  • 加了索引就快了?

  • 数据库索引底层结构

  • mysql与memcache的区别

  • mysql常见三种存储引擎的

  • MySQL B+Tree索引和Hash索引的区别?

  • B+树索引和哈希索引的明显区别是:

  • 非关系型数据库和关系型数据库区别,优势比较?

  • mysql常见查询优化方案

mysql书籍推荐:《mysql必知必会》,《高性能Mysql》,《mysql45讲》

操作系统

  • 进程与线程的区别
  • 多进程与多线程区别,应用场景
  • volatile和原子变量的区别
  • proc文件系统
  • 自旋锁与普通锁的区别
  • 虚拟内存
  • 进程的内存分布
  • 栈内存为什么由系统自动分配和释放
  • 守护进程如何创建
  • 进程间的通信方式及其区别,应用场景
  • 死锁条件和解除
  • 进程调度方式
  • 对编译连接的理解
  • 共享内存实现原理
  • 僵尸进程是什么,如何处理
  • 自旋锁在单cpu与多cpu下的使用
  • 用户态与内核态

操作系统推荐书籍:《深入理解操作系统》,《Linux内核设计与实现》

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详解

大数问题

  • 有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

手撕算法

  • 链表有无环判断
  • 实现一个单例模式
  • 给一个字符串判断单词数
  • 开方算法
  • 青蛙跳台阶
  • 常用排序(快排和归并要写吐)
  • 反转链表
  • 两个链表,寻找公共节点
  • 查找字符串中不重复的最长子串
  • LRU
  • 手写求树的深度的代码
  • 手写生产者消费者
  • 编程实现string类
  • 两个数组A,B,A有的B都有,求B-A;
  • 输入一个字符串,输出它的全排列
  • 统计完全二叉树多少个节点
  • memcpy实现

算法学习书籍推荐《剑指offer》
leetcode分专栏练习几题,不在多,在于精。

你可能感兴趣的:(Linu系统开发面试常见问题及学习路线)