小米2020校招软件开发工程师笔试题一

1. 下列关于设计模式说法错误的是(B

A. 装饰器模式在实现过程中一般不会更改被封装对象的接口定义
B. 适配器模式以不改变被适配对象的接口定义为目的对其进行改造
C. 用饿汉方式实现的单例模式是不能够被继承的
D. 简单工厂模式可以实现按客户端条件动态创建对象的效果

解析:
适配器模式将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
单例模式的构造函数为private,所以不能被继承

2. 从尚未排序的N名学生的考试分数中挑出排名第K的分数,平均时间复杂度最优可以达到多少?(C

A. O(N*K)
B. O(N*logN)
C. O(N)
D. O(N^2)

解析:
快排思想

3. 在下列序列中,若以最后一个数字为基准进行快速排序(升序),第一趟数字被移动次数最多的是?(B

A. 102, 106, 98, 52, 40, 45, 120, 110
B. 102, 106, 110, 120, 52, 45, 40, 98
C. 110, 106, 102, 45, 40, 120, 98, 52
D. 52, 40, 45, 102, 110, 106, 98, 120

解析:
A 1次 第一趟之后为102, 106, 98, 52, 40, 45, 110, 120
B 7次 第一趟之后为40,45,52,98,120,110,106,102
C 5次 第一趟之后为40, 45, 52, 102, 106, 120, 98, 110
D 0次 第一趟之后为52, 40, 45, 102, 110, 106, 98, 120

4. 1,2,3,4,5 五个数字,能组成多少种不同的二叉搜索树的结构?(D

A. 32
B. 36
C. 40
D. 42

解析:
满足卡特兰数:h(n)=C(2n,n)/(n+1) (n=0,1,2,…)
h(n) = C(10, 5) / 6 = 252 / 6 = 42

5. 下面关于有向无环图说法错误的是?(D

A. 有向无环图至少有一个顶点入度为0
B. 有向无环图至少有一个顶点出度为0
C. 有向无环图至少有一个拓扑排序
D. 有向无环图可以转换成树

解析:
因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。

6. 以下说法正确的有(A B D

A. 1个堆栈可以通过1个数组或者1个单向链表来实现,出栈和入栈的均摊复杂度均为O(1)
B. 1个先进先出队列可以通过1个数组或者1个单向链表来实现,出队和入队的均摊复杂度均为O(1)
C. 1个堆栈可以通过2个先进先出队列来实现, 出栈和入栈的均摊复杂度均为O(1)
D. 1个先进先出队列可以通过2个堆栈来实现,出队和入队的均摊复杂度均为O(1)

解析:
堆栈和队列都是在头尾元素上进行操作,所以利用数组的出入复杂度均为O(1)
由于队列为先进先出,两个先进先出模拟的也还是先进先出,所以实现不了堆栈的先进后出

7. UNIQUE惟一索引的作用是(C

A. 保证惟一索引不能被删除
B. 保证各行在该索引上的值不得为NULL
C. 保证各行在该索引上的值都不得重复
D. 保证参加惟一索引的各列,不得再参加其他的索引

解析:
唯一索引和普通索引的区别是什么,什么时候需要建唯一?
链接:https://www.cnblogs.com/xinruyi/p/11335482.html

8. 数据库表a主键为id,共10行,表b存在关联列aid,共5行,以下查询可能的结果为(B
select count(1) from a left join b on a.id = b.aid

A. 5
B. 10
C. 15
D. 50

解析:
左连接不论是否为null 都保存左表的结构, 即保存a表的结构, 10行

9. 在一个真实的计算机系统中,资源会损坏或被替换,新的进程会进入和离开系统,新的资源会被购买和添加到系统中。如果用银行家算法控制死锁,下面哪些变化是安全的(不会导致可能的死锁)?(A D

A. 增加可用资源(新的资源被添加到系统)
B. 减少可用资源(资源被从系统中永久性地移出)
C. 增加一个进程的Max(进程需要更多的资源,超过所允许给予的资源)
D. 减少一个进程的Max(进程不再需要那么多资源)

解析:
导致死锁的原因为系统可以使用的资源不满足进程所需资源。所以可以增加可用资源或者减少进程所需资源

10. 在一个真实的计算机系统中,可用的资源和进程命令对资源的要求都不会持续很久是一致的长期(几个月)。资源会损坏或被替换,新的进程会进入和离开系统,新的资源会被购买和添加到系统中。如果用银行家算法控制死锁,下面哪 些变化是安全的(不会导致可能的死锁)?(A D

A. 增加可用资源(新的资源被添加到系统)
B. 减少可用资源(资源被从系统中永久性地移出)
C. 增加一个进程的Max(进程需要更多的资源,超过所允许给予的资源)
D. 减少一个进程的Max(进程不再需要那么多资源)

解析:
同上,但是牛客网的两题答案都是BC,不太理解

11. 在C++中,声明 int const** const * const x 表示x是什么类型?(C

A. 一个const数组,每个成员都是一个const二维int类型const数组
B. 一个const指针,指向一个const双层指针,指向一个int
C. 一个const指针,指向一个const指针,指向一个普通指针,指向一个const int
D. 一个const指针,指向一个const指针,指向一个const int,它存着一个指针

解析:
int const * (* const)(* const) x

12. 以下问题错误的是(B

A. 类不是在类定义里定义数据成员时初始化数据成员,而是通过构造函数控制初始化。
B. extern double pi=3.14 此声明没有分配及初始化存储空间
C. 变量或函数的定义尽量不要放在头文件中。因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义
D. const对象可以定义在头文件中

解析:
若extern double pi = 3.14,这就变成定义了。extern可以声明且定义,但只能是在函数体之外,即变量是全局变量。

13. 下面关于虚函数的描述中,正确的是(A B C

A. 虚函数必须是非静态成员函数。
B. 对于虚函数,virtual关键字只能出现在类定义中的函数原型声明中,不能出现在类体外的函数定义中.
C. 根据类型兼容规则,基类指针(或引用)可以指向其派生类的实例,但在非虚函数的情况下,通过基类指针(或引用)却只能调用基类的函数成员,无法调用其所指实例(派生类)的函数成员。
D. 对于多态类,应该将构造函数和析构函数都声明为虚函数。

解析:
参考链接:https://blog.csdn.net/u013102349/article/details/79278828

14. 下面STL容器中,哪些是有序的(B D

A. vector
B. map
C. stack
D. set

解析:
参考链接:https://blog.csdn.net/jason_cuijiahui/article/details/79023228

15. 下列程序有错误的是?(A B C

A.

abstract class Something {
	private abstract String doSomething ();
}

B.

public class Something {
	void doSomething () {
		private String s = "";
		int l = s.length();
	}
}

C.

abstract class Name {
	private String name;
	public abstract boolean isSomething(String name){};
}

D.

public class Something {
	public static void main(String[] args) {
		Thing t = new Thing();
		new Something().addOne(t);
	}
	public void addOne(final Thing t) {
		t.i++;
	}
}

class Thing {
	public int i;
}

解析:
抽象方法不能用private修饰, 抽象方法不能有方法体,private属性声明要在方法体的外面

16. Java虚拟机里提供了哪些调用字节指令?(A B C

A.invokestatic
B. invokespecial
C. invokevirtual
D. invokemethod

解析:
参考链接:https://blog.csdn.net/boling_cavalry/article/details/76384425

17. 在Python 3中,对于字符编码叙述正确的是?(B

A. str为unicode字符(内部编码utf-16),byte编码为utf-8
B. str为unicode字符(内部编码utf-16),byte无编码
C. str编码为utf-16,byte为utf-8
D. str编码为utf-8,byte无编码

18. 编译程序目标代码生成阶段主要任务是(D

A. 把高级语言翻译成汇编语言
B. 把高级语言翻译成机器语言
C. 把汇编语言翻译成机器语言
D. 把中间代码变换成依赖具体机器的目标代码

19. 在X86平台上,C语言函数调用时,通过以下哪种方式传递参数?(C

A. 寄存器
B. 内存
C. 堆栈
D. 变量地址

解析:
调用函数时,实际上是从某一函数跳转到了被调用函数,这个时候,程序当前运行时所用的参数如果不进行保存的话,那么当执行完被调用函数跳转回原先的函数时,缺少必要的参数,程序就无法正常执行。因此,在调用函数之前,需要先保存现场信息,即先把参数压栈,然后再返回地址
参考链接:https://blog.csdn.net/qq_39642794/article/details/82789526

20. 编译程序不仅包含词法分析、语法分析、中间代码生成、目标代码生成,还包括(A B D

A. 代码优化
B. 表格管理
C. 源代码优化
D. 出错处理

解析:
小米2020校招软件开发工程师笔试题一_第1张图片

你可能感兴趣的:(笔试面试题)