后台
Section1 C++
1. 指针引用的区别和联系
从用法和实现来说明:用法上引用不能为空,引用相当于顶层const指针。
2. 解释多态
提示:一个接口多种调用;编译时多态:函数重载,模板;运行时多态:虚函数。
3. 虚析构函数
提示:父类调用析构函数时能够正确析构子类,如base->~Base()时会调用子类析构函数,防止内存泄露。
4. c++中的 cast
见static_cast, dynamic_cast, reinterpret_cast, const_cast的用法,同时注意智能指针中对应的cast版本,如std::dynamic_pointer_cast、std::static_pointer_cast等。
5. 虚函数的实现原理
虚表和虚表指针
6. new和malloc的区别,同时注意operator new的作用
7. struct和class的区别和联系
8. const和define的区别
9. 友元类,友元函数
10. 右值引用和移动语义,智能指针
通用引用、引用折叠的含义,完美转发的含义和作用
11. 智能指针
shared_ptr、unique_ptr、weak_ptr的作用,以及auto_ptr被弃用的原因;了解make_shared和shared_ptr()构造的区别
12. lambda
lambda函数的定义,C++函数闭包,C++使用ClosureType对lambda的实现,capture的内部实现方式等,同时了解函数指针,std::function的含义和用法
Section2 Python
1. 整数除法
2. 引用计数:Number,String
3. __init__与__new__
4. global与nonlocal
5. 闭包
6. GIL
7. 懒求值,迭代器
8. 元类
Section3 数据结构
1. 栈和队列的异同
2. 最大堆最小堆的实现
3. 二叉树的三种遍历方式
4. 二叉搜索树、平衡二叉搜索树(AVL树、B树、红黑树)
5. 可查看栈中最大/最小元素的栈(O(1)的时间复杂度,O(n)的空间复杂度)
多维护一个栈用于保存当前最大或者最小元素
Section4 算法
1. 字符串片段翻转(**AB** -> **BA**,注意AB长度不一定相等)最优解时间复杂度O(n),空间复杂度O(1)
先将A翻转,再翻转B,最后AB一同翻转即可
2. 背包问题,可重复背包问题,有限次重复背包问题
3. 最短路算法
SPFA,Dijkstra,Floyd-warshall:复杂度以及适用情况
Section5 编程实践(手写代码)
1. 快速排序
2. k个有序链表合并成1个有序链表
3. 找到两个链表的公共节点
4. 设计模式:单例模式等
Section6 Linux/OS
1. 常用终端指令:find, grep, less, tail, head, cat, 重定位、管道
2. 删除pyc
find . -name "*.pyc" -exec rm {} \;
3. $PATH的含义
执行命令时可执行文件的查找路径
4. 读取大文件(单位GB)的倒数二十行到倒数十行
tail large-file -n 20 | head - -n -10
5. IPC
提示:管道、命名管道、消息队列、共享内存、信号、socket等
6. I/O模型
同步异步、阻塞非阻塞、多线程、事件驱动、select、epoll等
Section7 数据库
1. SQL用法:一张访问记录表(记录user_id和访问时间)和一张用户表,找出某天内访问量前十的用户信息
WHERE、GROUP BY、ORDER BY、LIMIT、INNER JOIN
2. ACID及相关技术
锁、时间戳、崩溃恢复日志等
3. 索引技术
索引的数据结构、如何针对查询建索引、索引覆盖查询等
4. 查询优化基本思想
哪些操作上提、利用附加的哈希字段等
5. 范式和反范式
第一二三范式的含义,反范式的优点和适用场景