1-2 牢固基础——必要知识点

1. 岗位考点技能树(C++后台开发)

专刊希望能为读到的同学提供相对较为全面的知识梳理,本节将C++后台开发岗位的必备技能梳理成脑图,为同学们提供面试准备的全局视野和自身不足的检视。同时在下文每部分的知识点进行梳理总结。
图片说明

同学们可以放大网页查看上图中展示的C++后台开发技能树,点开图片似乎并不容易放大

互联网公司对于后台开发岗位候选人的首要要求都是基础牢固。基础不仅仅是对程序设计语言的语法、特性以及发展动态要熟悉,而且要求对于后台开发涉及到的内容 (例如:语言基础、数据结构、操作系统、计算机网络、数据库、设计模式、软件工程、分布式) 均具有较为扎实的基础。互联网大厂的面试一般会进行多个轮次,如果基础不过关,根本不会有机会去展示自己所做的项目、参与的竞赛或者发表的学术成果。

ps: 记得我第一次面试时,面试官问:请你介绍一下TCP的滑动窗口。我甚至回答:我对计算机网络不太熟悉。结果也就是自己熟悉的内容都没有展现的余地,就挂了。

2. C++语言基础要点

2.1 C++基本语法与特性

  • C语言与C++语言的区别
  • 指针与引用的特性与区别
  • 野指针的概念以及如何避免
  • static、const、volatile、extern关键字的作用
  • C++的四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast
  • inline内联函数与#define宏定义的区别
  • C++的异常处理机制
  • C++程序编译、链接机制、静态链接与动态链接库的制作方法与区别

2.2 C++面向对象三大特性

  • 封装:构造函数/析构函数的作用、explicit关键字、初始化列表的优点与成员变量顺序
  • 继承:继承访问控制、虚继承与菱形继承
  • 多态: 虚函数作用与实现机制、静态多态:函数重载与模板机制

2.3 C++内存管理

  • new/delete操作符与malloc/free函数的关联与区别
  • 野指针的概念,如何避免和检测野指针
  • 进程的内存分区情况与功能
  • 内存泄漏如何检测和避免
  • 智能指针的设计思想、实现原理

2.4 C++多线程与并发编程

  • C++11标准库提供的<thread>线程库 std::thread</thread>
  • future异步任务与线程同步机制 std::future std::condition_variable
  • 原子类型与原子操作 std::atomic
  • C++的锁机制 std::mutex

2.5 C++泛型编程

  • 类模板与函数模板
  • 模板特化、偏特化与萃取机

2.6 C++11新特性

  • 关键字及新语法:auto类型推导、nullptr关键字、for循环新语法
  • std::chrono时钟库、Lambda表达式、
  • 右值引用与移动语义
  • 可变参数模板

2.7 STL容器与算法

  • sequence-containers: vecotr、list、queue、stack
  • associative-containers: set、map、unordered_set、unordered_map
  • 容器迭代器与分配器
  • 常见的选择算法find、排序算法sort、堆算法make_heap等

同学们可以阅读专刊相对应的内容进行学习,同时这部分内容推荐阅读书籍:《C++ Primer》、《STL源码剖析》、《Effective C++》、《深度探索 C++ 对象模型》。

3.数据结构与算法

3.1 线性数据结构

  • 数组:一维数组与多维数组的基本概念和内存模型
  • 链表:单链表、双向链表、循环链表的基本概念和内存模型
  • 栈与队列:栈与队列的内存模型、联系与区别
  • 算法:几种常见排序算法、2分查找、链表中的快慢指针等

3.2 树形数据结构

  • 二叉树:二叉树、完全二叉树、二叉搜索/排序树的基本概念;叶子节点与非叶子节点的计算公式;二叉树的遍历方式;
  • AVL树、红黑树、B树与B+树的基本概念、联系与区别
  • 算法:哈夫曼树与哈夫曼编码问题

3.3 图形结构

  • 图、有向图、无向图的基本概念与内存模型;
  • 图的深度优先遍历算法、广度优先遍历算法、最小生成树算法、最短路径算法。

3.4 哈希表

  • 哈希表的基本概念与内存模型;散列函数概念;哈希冲突解决方法;rehash的过程。

4. 操作系统基础要点

4.1 进程管理

  • 进程与线程的概念、区别
  • 进程间/线程间通信的机制
  • 进程运行状态、调度算法
  • 进程间同步模型(生产者消费者模型、读者写者模型、哲学家就餐模型)
  • 死锁的定义与避免算法

4.2 内存管理

  • 内存碎片:外碎片与内碎皮的定义
  • 虚拟内存的定义、设计目的、实现方式
  • 页表及内存映射机制
  • 页面置换算法

4.3 磁盘管理

  • 磁盘寻道调度算法
  • 磁盘高速缓存的概念

4.4 I/O管理

  • 中断及DMA的概念
  • 同步、异步I/O、I/O复用(select、poll和epoll)

4.5 Linux系统基础

  • linux基本命令:文件管理相关命令(cat、find、mv、chmod、awk)、文档编辑及传输命令(grep、sed、scp)、磁盘管理及维护命令(cd、mkdir、tree)、网络监听级通讯命令(netstat、traceroute、ping、telnet)、进程及系统管理命令(ps、kill、top)
  • Shell脚本写法
  • 僵尸进程及孤儿进程
  • makefile写法、GDB调试

同学们可以阅读专刊相对应的内容进行学习,同时这部分内容推荐阅读书籍:《深入理解计算机系统》、《鸟哥的linux私房菜》、《Unix环境高级编程》

5. 计算机网络基础要点

5.1 应用层协议

  • HTTP报文组成结构、状态码含义、请求方式
  • cookie/session的定义与区别
  • HTTPS的加密过程、认证与完整性保护机制
  • HTTP1.1和2.0相关特性

5.2 传输层协议

  • TCP/UDP协议的特点、首部组成结构、端口的定义
  • TCP建立连接与断开连接过程、状态转换、报文分组与MSS
  • 3次握手建立连接的意义
  • 4次挥手断开连接的意义,以及维持CLOSE_WAIT和TIME_WAIT状态的意义
  • TCP提供可靠传输的机制:流量控制与拥塞控制
  • UDP如何实现可靠传输

5.3 网络层协议

  • IP数据报文格式、子网划分、IP分片
  • ICMP报文的两个应用:ping与trace route
  • ARP协议的过程

5.4 数据链路层与物理层协议

  • 帧的定义
  • MAC地址与以太网的定义
  • 交换机与路由协议

最后,综合网络协议栈的各层协议,弄清楚:(1)网页解析URL过程中各层协议如何工作才使得浏览器可以得到网页内容; (2)网络泛洪攻击原理(syn_flood)及防御方法。

同学们可以阅读专刊相对应的内容进行学习,同时这部分内容推荐阅读书籍:《计算机网络:自顶向下方法》、《TCP/IP详解卷1:协议》

6. 数据库原理基础要点

6.1 SQL语法

  • 创建-删除-修改库表结构、增删改查记录、DISTINCT、LIMIT、排序、条件逻辑、通配符、统计计算、函数、文本截取、时间字段处理、数值函数、子查询、连接查询(内连接、外连接)、组合查询
  • SQL的存储过程、触发器
  • 关系型数据库设计范式

6.2 MySQL

  • MySQL常用存储引擎:Innodb和Myisam的特点与区别
  • MySQL的索引底层存储结构、索引选择原则、Explain计划
  • Innodb引擎:事务的概念与ACID特性
  • Innodb引擎:事务的四个隔离级别
  • Innodb引擎:锁机制与多版本并发控制

6.3 MySQL集群

  • 分库分表、读写分离设计原则
  • MySQL主从复制过程

7 中间件与架构设计

消息中间件是后台架构设计中不可或缺的重要组件,候选人如果能够掌握1个或多个消息中间件,不仅能够在面试中大放异彩,而且在日后工作中也会提供很大帮助。

7.1 redis-数据缓存组件

  • redis的基本用法、redis的数据结构和内部原理
  • redis的工作原理、数据持久化与事务机制
  • redis的线程和进程模型,学习好性能server的设计架构

7.2 etcd-分布式一致性存储

  • etcd的基本用法、etcd API语法、etcd集群的部署方式
  • etcd的数据版本号机制、lease机制、watch机制
  • raft分布式一致性协议的工作过程

此外,学习nginx-Web服务器和MQ消息队列也是不错的选择。

8 设计模式

8.1 单例模式

  • 单例模式原理与作用;懒汉与饿汉模式下的线程安全问题;

8.2 工厂模式

  • 工厂方法、简单工厂、抽象工厂的概念

8.3 迭代器、解释器

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务