秋招反思录 | 您所在的位置:网站首页 › csapp难吗 › 秋招反思录 |
C++基础 • 指针和引用的区别 • 堆和栈的区别 • new和delete是如何实现的,new 与 malloc的异同处 • C和C++的区别 • C++、Java的联系与区别,包括语言特性、垃圾回收、应用场景等(java的垃圾回收机制) • Struct和class的区别 • define 和const的区别(编译阶段、安全性、内存占用等) • 在C++中const和static的用法(定义,用途) • const和static在类中使用的注意事项(定义、初始化和使用) • C++中的const类成员函数(用法和意义),以及和非const成员函数的区别 • C++的顶层const和底层const • final和override关键字 • 拷贝初始化和直接初始化,初始化和赋值的区别 • extern "C"的用法 • 模板函数和模板类的特例化 • C++的STL源码(这个系列也很重要,建议侯捷老师的STL源码剖析书籍与视频),其中包括内存池机制,各种容器的底层实现机制,算法的实现原理等) • STL源码中的hashtable的实现 • STL中unordered_map和map的区别和应用场景 • STL中vector的实现 • STL容器的几种迭代器以及对应的容器(输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器) • STL中的traits技法 • vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因。 • C++中的重载和重写的区别 • C++内存管理,内存池技术(热门问题),与csapp中几种内存分配方式对比学习加深理解 • 介绍面向对象的三大特性,并且举例说明每一个 • C++多态的实现 • C++虚函数相关(虚函数表,虚函数指针),虚函数的实现原理(包括单一继承,多重继承等)(拓展问题:为什么基类指针指向派生类对象时可以调用派生类成员函数,基类的虚函数存放在内存的什么区,虚函数表指针vptr的初始化时间) • C++中类的数据成员和成员函数内存分布情况 • this指针 • 析构函数一般写成虚函数的原因 • 构造函数、拷贝构造函数和赋值操作符的区别 • 构造函数声明为explicit • 构造函数为什么一般不定义为虚函数 • 构造函数的几种关键字(default delete 0) • 构造函数或者析构函数中调用虚函数会怎样 • 纯虚函数 • 静态类型和动态类型,静态绑定和动态绑定的介绍 • 引用是否能实现动态绑定,为什么引用可以实现 • 深拷贝和浅拷贝的区别(举例说明深拷贝的安全性) • 对象复用的了解,零拷贝的了解 • 介绍C++所有的构造函数 • 什么情况下会调用拷贝构造函数(三种情况) • 结构体内存对齐方式和为什么要进行内存对齐? • 内存泄露的定义,如何检测与避免? • 手写智能指针的实现(shared_ptr和weak_ptr实现的区别) • 智能指针的循环引用 • 遇到coredump要怎么调试 • 内存检查工具的了解 • 模板的用法与适用场景 • 成员初始化列表的概念,为什么用成员初始化列表会快一些(性能优势)? • 用过C++ 11吗,知道C++ 11哪些新特性? • C++的调用惯例(简单一点C++函数调用的压栈过程) • C++的四种强制转换 • C++中将临时变量作为返回值的时候的处理过程(栈上的内存分配、拷贝过程) • C++的异常处理 • volatile关键字 • 优化程序的几种方法 • public,protected和private访问权限和继承 • class和struct的区别 • decltype()和auto • inline和宏定义的区别 • C++和C的类型安全
操作系统基础 • 进程与线程的区别和联系 • 一个进程可以创建多少线程,和什么有关 • 一个程序从开始运行到结束的完整过程(四个过程) • 进程通信方法(Linux和windows下),线程通信方法(Linux和windows下) • 文件读写使用的系统调用 • 怎么回收线程 • 守护进程、僵尸进程和孤儿进程 • 处理僵尸进程的两种经典方法 • 进程终止的几种方式 • linux中异常和中断的区别 • 一般情况下在Linux/windows平台下栈空间的大小 • 五种IO模型 • 守护进程 • 程序从堆中动态分配内存时,虚拟内存上怎么操作的 • 交换空间与虚拟内存的关系 • 堆和栈的区别;从堆和栈上建立对象哪个快?(考察堆和栈的分配效率比较) • 内存泄漏和内存溢出 • 常见内存分配方式和错误 • 堆内存和栈内存的区别 • 可重入函数和可重入内核 • 操作系统动态内存分配的几种策略 • 内部碎片和外部碎片 • 系统调用进入内核态的过程 • 内核态和用户态的区别 • 常见的进程调度算法以及linux的进程调度 • 中断、陷阱、故障和终止 • 进程通信方法 • 线程互斥和同步的方法 • 内存对齐的规则和作用 • 页面置换算法 • 实现一个LRU页置换算法(或者FIFO置换算法) • 死锁的必要条件(怎么检测死锁,解决死锁问题),银行家算法(死锁避免) • 哲学家就餐,读者写者,生产者消费者(怎么加锁解锁,伪代码) • 海量数据的bitmap使用原理 • 布隆过滤器原理与优点 • 布隆过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题
网络基础 • 网络的几种分层体系结构 • 建立TCP服务器的各个系统调用 • socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的? • MTU和MSS • 对路由协议的了解与介绍 • 路由协议所使用的算法 • 路由表的项目包括哪些 • 地址解析协议ARP的过程 • 网际控制报文协议ICMP的过程 • 动态主机配置协议DHCP的过程 • WAN LAN WLAN VLAN VPN的区别 • 介绍一下VPN(虚拟专用网) • TCP和UDP的区别 • TCP如何保证数据的正确性 • TCP和UDP相关的协议与端口号 • TCP(UDP,IP)等首部的认识(http请求报文构成) • 网络层分片的原因与具体实现 • TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题) • TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态) • 为什么使用三次握手,两次握手可不可以? • TIME_WAIT的意义(为什么要等于2MSL) • 超时重传机制(不太高频) • TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)? • 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)? • TCP滑动窗口协议 • 拥塞控制和流量控制的区别 • TCP拥塞控制,算法名字?(极其重要) • 网页解析的过程与实现方法 • 应用层协议常用的端口号 • http协议与TCP联系 • http/1.0和http/1.1的区别 • http的请求方法有哪些?get和post的区别。 • http的状态码 • http和https的区别,由http升级为https需要做哪些操作 • https的具体实现,怎么确保安全性 • 在浏览器输入一个URL的流程,这个过程中浏览器做了什么(如www.baidu.com) • URL包括哪三个部分? • 长连接与短连接的区别以及使用场景 • 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办? • 介绍一下ping的过程,分别用到了哪些协议 • 对称密码和非对称密码体系 • 数字证书的了解(高频) • 客户端为什么信任第三方证书 • RSA加密算法(非对称加密,用公匙和私匙实现); • MD5原理(MD5是密码散列函数)=> SHA安全散列算法替代 • 单条记录高并发访问的优化 • 数据流和粘包问题 • 一台机器最多可以建立多少tcp连接? • 五种IO模型的过程和比较 • IO多路复用(select,poll,epoll的区别) • 有没有抓过TCP包,描述一下 • 一个ip配置多个域名,靠什么识别? • 服务器攻击(DDos攻击) • 重放攻击,IP欺骗
Linux相关 • Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要) • 文件系统的理解(EXT4,XFS,BTRFS) • 文件处理grep,awk,sed这三个命令必知必会 • IO复用的三种方法(select,poll,epoll)深入理解,包括三者区别,内部原理实现? • Epoll的ET模式和LT模式(ET的非阻塞) • 查询进程占用CPU的命令(注意要了解到used,buf,***代表意义) • linux的其他常见命令(kill,find,cp等等) • shell脚本用法 • 硬连接和软连接的区别 • 文件权限怎么看(rwx) • 文件的三种时间(mtime, atime,ctime),分别在什么时候会改变 • Linux监控网络带宽的命令,查看特定进程的占用网络资源情况命令
数据库基础 • 关系型和非关系型数据库的区别(各自优点) • 常用SQL语句(DDL,DML,DCL,TCL) • 数据库中join的类型与区别(inner join, outer join, cross join, natural join, self join),注意适用场景和sql语句的编写 • 数据库的索引类型 • 聚集索引和非聚集索引的区别(叶节点存储内容) • 唯一性索引和主码索引的区别 • 索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点) • 索引的底层实现(B+树,为何不采用红黑树,B树) • B树和B+树具体实现 • 索引最左前缀问题 • Mysql的优化(高频,索引优化,性能优化) • 数据库引擎介绍,Innodb和Myisam的特点与区别 • 数据库中事务的ACID(四大特性都要能够举例说明,理解透彻,比如原子性和一致性的关联,隔离性不好会出现的问题) • 数据库隔离性设置不同会出现的问题(脏读、不可重复读、丢失修改、幻读) • 数据库的隔离级别,Mysql和Oracle的隔离级别分别是什么 • 数据库连接池的作用 • Mysql的表空间方式,各自特点 • 分布式事务 • 数据库的范式 • 数据的锁的种类,加锁的方式 • 视图的作用与使用方法(如何删除等) • 分库分表,主从复制,读写分离。(我不会,也没碰到过) • 项目中哪里用到了数据库,怎么用的 • Mem***和Redis了解
大数据和分布式 • Hadoop框架下,各个组件的构成及作用 • BASE原则,CAP原则 • 一致性算法Raft的过程 • TIDB原理 • HBase的存储原理 • HDFS运行原理 • Hive的了解 • Spark的了解 • 介绍熟悉的设计模式(单例,简单工厂,观察者模式等等) • 写单例模式(饿汉模式和懒汉模式),线程安全版本 • MVC设计模式 |
CopyRight 2018-2019 实验室设备网 版权所有 |