小米2019秋招软件开发笔试题A选择部分解析

之前去牛客做了一下,顺手把答案和解析写下。
只是个人的理解,个人水平有限,如果有哪里错了各位可以提醒一下我改一下,非常感谢。
1.哪些语言是面向对象的?(多选)
在这里插入图片描述
很明显,排除法的话:c肯定不是,java肯定是,汇编肯定不是,多选所以选BC。
常见的面向对象语言:Java,C++,python

2.关于栈和队列,下列说法正确的是(多选)
在这里插入图片描述
A选项,双端队列可以模拟栈,只从一边进出就可以模拟栈了;栈也可以模拟队列,用两个栈,进来一个元素就把之前的全部出栈到另一个栈,进来的这元素沉底了再从另一个栈出元素放回这个栈,就可以模拟队列了。
C选项明显不对叭。
D选项明显对叭。
B选项,栈和队列的底层可能是数组或链表,链表很明显不能随机访问,我认为这里不管说是能随机访问还是不能随机访问其实都不太全面。
由于这题是多选题,所以排除法排除A,C后就只剩B,D了;

3.关于快速排序,说法正确的是 (多选)
在这里插入图片描述
这题考对快排的掌握程度,我是条金鱼哦真无语住了,之前写了的这会就忘了。
A选项,排序排序明显要比较,快排在找比基准点大的元素和小的元素的时候不是都和基准点比较大小了吗。
B选项,肯定有分冶的思想,分而治之嘛,每次都在把区间变得越来越小。
C选项,最好情况下全部有序,但是所有元素也得都扫一边,所以最好时间复杂度是O(nlogn),最好的都比O(n)大,没有可能到达O(n)的。
D选项,不止一种,递归,双指针啊都是可以的。

4.有一个名为app的MySQL数据库表,其建表语句如下:(单选)

CREATE TABLE `app` (
`app_id` int(10) DEFAULT '0',//应用ID
`version_code` int(10) DEFAULT '0',//应用的版本号
`download_count` int(10) DEFAULT '0'//当前版本的下载量
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

当前表中数据记录如下,一条记录表示某个应用的某个版本的下载量记录:
±-------±-------------±---------------+
| app_id | version_code | download_count |
±-------±-------------±---------------+
| 1 | 10 | 90 |
| 1 | 11 | 100 |
| 1 | 10 | 20 |
| 2 | 15 | 10 |
| 2 | 16 | 15 |
| 2 | 17 | 30 |
| 2 | 16 | 5 |
| 3 | 2 | 50 |
±-------±-------------±---------------+

问: 下面那个MySQL语句可以查出每个应用中总下载量最大的版本号和次数( )?
在这里插入图片描述
这题目这么长还有这密密麻麻的sql语句给我看麻了都,随手选的一个。
这题做的我很迷,我觉得有问题——所以用navicat复制了一下这个表。

A选项:括号中的t表:
在这里插入图片描述
没有having的部分:在这里插入图片描述
加上having:
在这里插入图片描述
A选项:出错了啊,30是17版本的。
在这里插入图片描述

B选项: 有括号的那一段是:按照app_id和version_code分组,按照下载量的降序排序,将统计下载量总和(总和别名:download_sum)后的app_id,version_code和down_sum作为一张新表t,将t按照版本号分组,在其中选择版本号和最大的下载量。

括号部分:按照app_id和version_code分组,按照下载量的降序排序,将统计下载量总和
在这里插入图片描述
整个sql语句:
在这里插入图片描述
不是一个应用里选一个最大下载量的版本吗?这选了一堆。

C选项:在这里插入图片描述
这数据错的就更明显了。

D选项:
在这里插入图片描述
D选项我觉的没错啊这。

我觉得这个题有问题,官方选B是因为select只选了两项,version_code和max(t.download_sum)吗?其余的都选了app_id。

5.不同级别的用户对同一对象拥有不同的访问权利或某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动,这种情况最好使用什么设计模式。(单选)

在这里插入图片描述
接下来都是各个模式的定义:
A选项:桥接模式:将抽象与实现分离,二者可独立变化。——用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
B选项:工厂模式:可以根据传入的参数返回不同的实例。——定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。
C选项:适配器模式:两个接口不兼容,来个第三者进行适配。——将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
D选项:代理模式:没办法或者最好不要去访问另一个对象,那就找个中介——由于某些原因需要给某对象提供一个代理以控制对该对象的访问。
看题目里的“不能直接操作到”——可知选D。

6.32位的ip地址3232238233转换为字符串的Ip地址正确的是(单选)
在这里插入图片描述
这么大的数一点一点换算成二进制表示,等算完说不定笔试早结束了。
看这个数的最后一位是3,除了2^0=1,不管前面31位上是0还是1它一定是偶数,偶数和偶数相加也是偶数,所以可以得知3232238233转换为二进制后最后一位上肯定是1,二进制最后一位是1,按8位一取最后的肯定也是个奇数,A,B,C选项都是偶数,所以pass。

7.一个栈的入栈顺序为K、L、M、N,则以下哪种出栈顺序不可能发生(单选)
在这里插入图片描述
模拟一下C选项的出栈:
在这里插入图片描述
在这里插入图片描述

8.下列关于一颗深度为K,具有n个节点二叉树的下列诉述正确的是(多选)
在这里插入图片描述
A选项,明显对,代树哪一层算算就知道了
B选项,明显对,最多节点的情况就是整棵树都满了,节点总和可不就是(2^k)-1,代树算下也很明了。
C选项,往A的式子一套,C的意思就是给了个第k层也就是最后一层的最多节点数目,树的k层上头的节点可没算。个人认为最少的节点数应该是(2^(k-1))个。
第k层上面算整个树的节点,最后一层再来一个,所以就是 (2^(k-1))-1+1。
D选项,是公式背一下,是[logn]+1,logn要向下取整。
选A,B嗷。

9.访问 https://www.mi.com/ 会经过哪些协议?(多选)
在这里插入图片描述
A选项:使用IP协议发送报文给服务器。
B选项:HTTP协议的传输层用的是TCP协议,TCP协议建立连接。
C选项:HTTPS在HTTP基础上建立了SSL加密层进行传输数据的加密,保证传输过程中的数据安全。
D选项:没有文件传输嗷,不选D。

10.下列数中,数值最大的是(单选)
在这里插入图片描述
都转十进制:
A:259
B:257
C:258
D:256

11.一个作业系统中有4台打印机,每个作业需要独占2台打印机才能完成,则该系统最多可以同时执行多少作业而保证不会死锁?(单选)
在这里插入图片描述
假设选D,每个作业都分配一台打印机,那么每个作业都在等别的作业释放打印机,但是没有一个作业是能够拿到资源执行完毕的,死锁了。
选C,三个作业每个作业都有一个打印机,还剩一个刚好能够让某个作业完成,之后释放资源,所以不会死锁。
牛客的官方解析的公式:1*x+1<=4

12.关于数据库的描述正确的是(多选)
在这里插入图片描述
D选项:主键不能为空。这错了。选D。
C选项:删表用的关键字不是delete,是drop,drop table “table_name”
B选项:可以拆的,不知道咋解释
A选项:都是悲观锁,共享锁是读锁,排他锁是写锁,加了排他锁其他事务就不能再加锁了。

13.Unix系统中,以下哪些可以用于进程间通信(多选)
在这里插入图片描述
Unix系统中进程通信的方式:
1.管道:半双工,数据单向流动,一般父子进程间使用。本质是内核管理中的一个缓冲区。
2.FIFO管道:半双工,可以没有亲缘关系的进程间用。
3.消息队列:消息的链表,存放于内核。克服了信号传递信息少,管道只能承载无格式字节流和缓存区大小受限的缺点。
4.共享内存:由一个进程创建,其他进程进行访问。最快的通信方式,可与其他方式配合使用。
5.信号量:计数器,用来控制进程对共享资源的访问,锁机制避免该进程访问资源时其他资源也来访问。一般是进程中不同线程间的同步手段。
6.套接字:可用于不同进程或进程之间通信。
7.信号:通知接收进程某个事件已经发生。
所以ABCD都选。

14.对C++中重载(overload)和重写(override)描述正确的有(多选)
在这里插入图片描述
没学过C++不是很懂
但是A,B很显然是对的,定义就是这样的。
D选项构造方法可以重载,有参无参的构造函数体现的就是这一点。
去百度了下析构函数和虚函数:
析构函数:析构函数是特殊的类函数,没有返回类型,没有参数,不能随意调用,也没有重载可以重写。
虚函数:C++里虚函数和多态性息息相关,其实就是重载的另一种表现形式。
所以选ABD。

15.假设把随机分布的整数作为关键字的元素散列到有N个槽的散列表中,以下哪些散列函数是比较好的散列函数?(多选)
在这里插入图片描述
A选项:举个例子,k<N的时候最后哈希值都是0,明显的哈希冲突。
B选项:哈希冲突。
C选项:个人认为分散的还是比较均匀 。
D选项:注意这个Random,有可能同一个元素每次的哈希值不一样,那就查找不到了。
E选项:37是个质数,我记得质数分散的比较均匀,然后同样取余,个人认为会比C选项的散列函数分散的更好。

16.以下描述正确的有(多选)
在这里插入图片描述
A选项:进程有自己独立的堆和栈,都不共享。线程也有自己独立的栈和共享的堆,栈不共享但是堆共享。
B选项:进程是资源分配的最小单位,线程是CPU独立运行和调度的基本单位。
C选项:协程是比线程更轻量级的存在,一个线程可以有多个协程。
D选型:进程线程都是操作系统调度,协程是用户或用户的程序进行调度,协程的切换只在用户态,没有陷入内核态。
所以选A,B,C。

17.在游戏Dota2中,有一位非常强大的英雄卡尔,他有三种属性:冰、火、雷。同时卡尔身上有三个无顺序的属性槽,他可以从三种属性中任意选择三个放入属性槽中,然后通过当前的属性组合召唤技能。每种不同的属性组合都可以为卡尔召唤出不同的技能,共有十种组合:
1、冰冰冰
2、冰冰火
3、冰冰雷
4、冰火火
5、冰火雷
6、冰雷雷
7、火火火
8、火火雷
9、火雷雷
10、雷雷雷
现在我们想继续加强卡尔,如果给卡尔四种属性:冰、火、雷、风,同时给卡尔四个无顺序的属性槽,从而让卡尔可以从四种属性中任意选择四个,则请问卡尔共可以召唤出多少种不同的技能?
在这里插入图片描述

四个卡槽,只要带的是一样的属性不管顺序是否一样都是同样的技能,所以这里要算的是组合数,用C计算。
看作四个箱子(属性),往每个箱子里投球(卡槽):
四个球分散在同一个属性:C41 = 4。
四个球分散在两个属性:
         两种情况:
         1.三个球放在一个箱子,另外一个球放在一个箱子:C42 * C21 = 12
         2.两个球放在一个箱子,另外两个球放在另一个箱子:C42 = 6,因为数目都是2所以不用乘以C21
四个球分散在三个属性:两个球放在一个箱子里,另外两个箱子各放一个球:C43*C31 = 12。
四个球分散在四个属性:每个属性都放一个球:C44 = 1。
加起来是35,选B。
千万别算错了。

18.A和B两人在球场上进行踢点球比赛,两人交换着踢,先进球者获胜。A踢进的概率为0.6,B踢进的概率为0.5。假设A先踢,那么A最后获胜的概率最接近以下哪个选项?(单选)
在这里插入图片描述
其实就算前面最大的几项比如前两项结果就已经是0.72了,只能选D
A可能第一把就赢了:P = 0.6
A可能和B先平局一把再赢:P = 0.4 * 0.5 * 0.6
A可能和B先平局两把再赢:P = 0.4 * 0.5 * 0.4 * 0.5 * 0.6

A可能和B先平局N把再赢:P = (0.4 * 0.5)^N * 0.6
牛客解析很清楚:
在这里插入图片描述
19.假设单链表中节点的结构为{data,next},其中next指向下一个节点。若想删除结点p(p既不是头节点也不是尾结点)的直接后继节点,则应执行下列哪个操作?()
在这里插入图片描述
选C。

20.假设一个无向图中包含 12 个顶点,其中 5 个顶点有 5 个度,7 个顶点有 7 个度,那么这个图有几条边?()
在这里插入图片描述
无向图里一条边连接两个顶点,所以有2边的数量 = 顶点的度数之和。
(5
5+7*7)/2 = 37 = 边的数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值