这份文档包含了小米公司在2020年招聘时为应聘软件开发工程师职位的候选人准备的一系列笔试题目,旨在考察候选人的编程能力、逻辑思维和问题解决技巧。
本资源为2020年小米软件开发工程师的笔试题目一,涵盖了Java、数据结构、算法、数据库及操作系统等多个方面的知识。
1. 设计模式包括装饰器模式、适配器模式、单例模式与简单工厂模式。
- 装饰器模式:不会改变被封装对象接口定义;
- 适配器模式:目的是不更改被适配对象的接口定义;
- 单例模式:采用饿汉方式实现时,该类不能继承;
- 简单工厂模式:可以依据客户端条件动态创建不同类型的对象。
2. 关于算法:
- 时间复杂度最优情况下的平均时间复杂度为O(N)。
- 快速排序中,在第一趟数字移动次数最多的情况下是110, 106, 102, 45, 40, 120, 98和52。
3. 数据结构中的二叉搜索树:
- 能够构成多少种不同的二叉搜索树?答案为C.42。
4. 关于有向无环图(DAG)的描述如下:
- 至少存在一个顶点入度为0;
- 至少有一个顶点出度为0;
- 一定至少有一种拓扑排序方式;
- 可以转换成树结构。
5. 数据结构包括堆栈和队列:
- 堆栈可以使用数组或单向链表来实现,平均复杂度均为O(1)。
- 队列也可以用同样的方法实现,出队与入队的均摊时间复杂度同样为O(1)。
6. 数据库中的唯一索引:
- 作用是确保每一行在该索引上的值都是独一无二的。
7. 关于数据库查询语句LEFT JOIN的结果可能有10种情况。
8. 操作系统的银行家算法用于避免死锁,可以通过增加可用资源、新进程加入或退出系统以及购买新的硬件来实现。
9. C++语言中的const关键字可以应用于变量、函数和指针等声明中,表示被修饰的实体不可改变其值;
10. 对于C++中的int const * const x来说, 这意味着x是一个指向常量整数地址的常量指针。
11. 在定义类时:
- 数据成员应在构造函数内初始化而非直接在类中进行;
- 外部变量声明使用extern关键字,但不会分配存储空间;
- 变量或函数应该避免在头文件中定义以防止重复包含问题;
- const对象可以安全地定义于头文件之中。
12. 虚函数特性如下:
- 必须是非静态成员方法;
- virtual关键字仅限于类体内部声明,不能用于外部定义;
- 基类指针或引用可指向派生类实例。