算法与数据结构
- 二叉树
- 二叉搜索树如何删除某个节点,先说思路后写代码 (今日头条)。
- 二叉树之字形层次遍历,(正反正反)。
- 链表
- 一个链表,如何依次输出第一个,倒数第一个,第二个,倒数第二个(今日头条)。
- 原址:变换为奇数在前 偶数在后,相对顺序不变。
- 链表求和。
- 查找
- 给一个 float 数,如何求算术平方根.(今日头条)
- 哈希
- 要实现一个哈希表应该怎么做(根据要哈希的内容选择合适的哈希函数和冲突解决方案)。
- 排序
- 一个 0-1 矩阵,每一排都是 0 在前 1 在后,问哪一排的 1 最多?(二分法)问有没有更简单的方法(每一排记录当前的最左边的 1 的位置,下一排的时候直接忽略右边的)问时间复杂度,猜测是 O(m+n)。
- 搜索
- 描述迪杰斯特拉算法。
- 描述 dfs 和 bfs, 分别怎么实现?(栈和队列)。
- 动态规划
- 动态规划是什么, 动态规划和带记忆的递归有什么区别?(自顶而下和自底而上)
- 0-1 背包问题的动态规划递归式怎么写?
- 三角数堆,只能往左下或者右下走,从堆顶到堆底和最小是多少。(dp)
- 其它
- 若干个长度不同的数组,求最小区间,让每个数组都有数字在这个区间内?
- 三种砖块,分别是 11,12,13,拼成 1N,有多少种拼法?时间复杂度多少?(今日头条)
- 斐波那契数列。
- 描述 KMP 算法。
- 写代码:两个有序数组的合并。
编程语言相关问题
- Python
- 一个 python 的 dict,按照 key-value 存储,如何按照 value 排序。
- static 的类有什么用。
- 如何实现一个只能实例化一次的类。
- 模板类是什么?
- 纯虚函数和虚函数的区别是什么?
- C++
- 一个 dict,如果是 C++怎么做?一个 map,怎么按照 value 排序?
看了这么多题目,哪些会做哪些不会也就有一个明晰的了解。那么如何为年后的春招做准备呢?2018 年中山大学郑永川构建了一个准备秋招/春招的学习笔记:CS-Notes。该项目包含了计算机科学的大量精要知识与教程,目前该项目已经有超过 45K 的收藏量。
CS-Notes 项目从基础排序算法到编程理念展示了计算机科学的应知应会,该项目对机器学习开发者及入门读者也非常有用,例如 Linux 系统、面向对象的编程、Git 工具和代码可读性等。这些笔记都是作者根据对各类书籍的理解,并记录重要知识点而完成。
项目地址:https://github.com/CyC2018/CS-Notes
该项目的主体内容可分为 9 部分,其中算法介绍了基础的栈和队列、并查集、排序和查找等,操作系统介绍了现代计算机系统与 Linux 系统。其它如介绍了设计模式和基本思想的面向对象编程、世界上最先进的分布式版本控制系统 Git、以及 Java 和编程实践等都有涉及。
算法
- 剑指 Offer 题解(目录根据原书第二版进行编排)
- Leetcode 题解(做了一个大致分类,并对每种分类题型的解题思路做了总结)
- 算法(排序、并查集、栈和队列、红黑树、散列表)
操作系统
- 计算机操作系统(进程管理、内存管理、设备管理、链接)
- Linux(基本实现原理以及基本操作)
网络
- 计算机网络(物理层、链路层、网络层、运输层、应用层)
- HTTP(方法、状态码、Cookie、缓存、连接管理、HTTPs、HTTP 2.0)
- Socket(I/O 模型、I/O 多路复用)
面向对象
- 设计模式(实现了 Gof 的 23 种设计模式)
- 面向对象思想(三大原则(继承、封装、多态)、类图、设计原则)
数据库
- 数据库系统原理(事务、锁、隔离级别、MVCC、间隙锁、范式)
- SQL(SQL 基本语法)
- Leetcode-Database 题解(Leetcode 上数据库题目的解题记录)
- MySQL(存储引擎、索引、查询优化、切分、复制)
- Redis(五种数据类型、字典和跳跃表数据结构、使用场景、和 Memcache 的比较、淘汰策略、持久化、文件事件的 Reactor 模式、复制)
Java
- Java 基础(不会涉及很多基本语法介绍,主要是一些实现原理以及关键特性)
- Java 容器(包含容器源码的分析)
- Java 虚拟机(运行时数据区域、垃圾收集、类加载)
- Java 并发(线程使用方式、两种互斥同步方法、线程协作、JUC、线程安全、内存模型、锁优化)
- Java I/O(NIO 的原理以及实例)
系统设计
- 系统设计基础(性能、伸缩性、扩展性、可用性、安全性)
- 分布式(分布式锁、分布式事务、CAP、BASE、Paxos、Raft)
- 集群(负载均衡、Session 管理)
- 攻击技术(XSS、CSRF、SQL 注入、DDoS)
- 缓存(缓存特征、缓存位置、缓存问题、数据分布、一致性哈希、LRU、CDN)
- 消息队列(消息处理模型、使用场景、可靠性)
- 分布式问题分析(分布式事务、分布式锁、分布式 Session、负载均衡)
工具
- Git(一些 Git 的使用和概念)
- Docker(Docker 基本原理)
- 构建工具(构建工具的基本概念、主流构建工具介绍)
- 正则表达式(参考 正则表达式必知必会)
编码实践
- 代码可读性(参考 编写可读代码的艺术)
- 代码风格规范(Google 开源项目的代码风格规范)
- 代码风格规范(Google 开源项目的代码风格规范)