阿里巴巴2017实习生笔试题(二)

阿里巴巴2017实习生笔试题(二) 2024/12/25

1.下面哪一个不是动态链接库的优点? B

A.共享

B.装载速度快

C.开发模式好

D.减少页面交换

解析

1 静态链接库的优点

(1) 代码装载速度快,执行速度略比动态链接库快;

(2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

2 动态链接库的优点

(1) 更加节省内存并减少页面交换;

(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

3 不足之处

(1) 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;

(2) 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

2.n个数值选出最大m个数(3<m<n)的最小算法复杂度是O(n)

解析

使用快速选择(Quickselect)算法,可以找到第m大的元素,平均复杂度为O(n),最坏情况下为O(n^2)。一旦找到第m大的元素,我们可以通过一次遍历将前m个元素选出。这种方法的复杂度为O(n)。

使用快速排序来寻找第m大的元素可以通过一种变体的算法,通常称为快速选择或。这个算法的基本思想如下:

  1. 分区(Partition):选择一个枢轴(pivot),将数组分成两部分,左边部分的元素都小于等于枢轴,右边部分的元素都大于枢轴。

  2. 递归选择

    • 如果枢轴的索引正好是我们想要的m(或n-m+1,如果我们要找第m小的元素),我们就找到了目标元素。
    • 如果枢轴的索引大于m(或n-m+1),则在枢轴左边的子数组中继续寻找。
    • 如果枢轴的索引小于m(或n-m+1),则在枢轴右边的子数组中继续寻找。

下面是使用Python实现这个算法的伪代码

python 复制代码
import random

def quickselect(arr, m):
    if len(arr) == 1:
        return arr[0]
    
    # 选择一个随机的枢轴
    pivot = random.choice(arr)
    
    # 分区
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    # 选择下一个递归的子数组
    if m <= len(right):
        return quickselect(right, m)
    elif m > len(arr) - len(left):
        return quickselect(left, m - (len(arr) - len(left)))
    else:
        return pivot

# 示例:从数组中找出第5大的元素(即第(n-5)小的元素)
arr = [3, 2, 1, 5, 6, 4]
m = 5
print(f"第 {m} 大的元素是: {quickselect(arr, m)}")

3.由权值分别为1、12、13、4、8的叶子节点生成一颗哈夫曼树,它的带权路径长度为(81)

4.阿里巴巴国际站的股票代码是1688,这个数字具有这样的特性,首先是个首位为1的4位数,其次恰巧有且仅有1个数字出现了两次。类似的数字还有:1861,1668等。这样的数字一共有(432)个。

解析

(1)若这个四位数的重复数字为1,那么首先从三个空位中选出一个给1,第二步从剩下9个可选数字中选出2个有序的排列到剩下的两个空位中去,那么有C(1,3)*A(2,9)=3*(9!/(9-2)!)=3*9*8=216种可能;

(2)若这个四位数的重复数字不为1,那么首先从9个可选数字中选出一个作为重复数字(C(1,9)),并放到三个空位中的两个(这两个数字相同,故只涉及组合)(C(2, 3)),然后从剩下8个数字中选出一个(它的位置在重复数字确定后就自然固定了,不可选)即可,故有C(1,9)*C(2, 3)*C(1, 8)=216种可能。

总共:216+216=432

5.工程师M发明了一种游戏:M将一个小球随机放入完全相同的三个盒子中的某一个,玩家选中装有球的盒子即获胜;开始时M会让玩家选择一个盒子(选择任何一个获胜概率均为1/3);玩家做出选择后,M会打开没有被选择的两个盒子中的一个空盒,此时M会询问玩家是否更改选择(可以坚持第一次选择,也可以选择另一个没有打开的盒子),下列叙述正确的是(选择另一个没有被打开的盒子获胜概率更高)。

解析

三门问题-蒙特卡洛问题

情况一:我选中了有球的盒子,我更换的话将失败,不更换的话将成功。

情况二:我选中了没球的盒子,我更换的话将成功,不更换的话将失败。

情况三:我选中了没球的盒子,我更换的话将成功,不更换的话将失败。

综上,我们发现更换了成功的概率是2/3;二不更换成功的概率是1/3。

6.以下哪种方式,在读取磁盘上多个顺序数据块时的效率最高?C

A.中断控制方式

B.DMA方式

C.通道方式

D.程序直接访问方式

E.循环检查I/O方式

F.以上访问方式都一样

解析

(1)程序直接访问方式跟循环检查I/O方式,应该是一个意思吧,是最古老的方式。CPU和IO串行,每读一个字节(或字),CPU都需要不断检测状态寄存器的busy标志,当busy=1时,表示IO还没完成;当busy=0时,表示IO完成。此时读取一个字的过程才结束,接着读取下一个字。

(2)中断控制方式:循环检测先进些,IO设备和CPU可以并行工作,只有在开始IO和结束IO时,才需要CPU。但每次只能读取一个字。

(3)DMA方式:Direct Memory Access,直接存储器访问,比中断先进的地方是每次可以读取一个块,而不是一个字。

(4)通道方式:比DMA先进的地方是,每次可以处理多个块,而不只是一个块。

7.下列不是进程间的通信方式的是(B)

A.管道

B.回调

C.共享内存

D.消息队列

E.socket

F.信号量

解析

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

8.已知IBM的PowerPC是big-endian字节序列而Intel的X86是little-endian字节序,如果在地址啊存储的整形值时0x04030201,那么地址为a+3的字节内存储的值在PowerPC和Intel X86结构下的值分别是? 1 4

9.在TCP/IP建立连接过程中,客户端或服务器的状态转移说法错误的是(D)

A.经历SYN_RECV状态

B.经历SYN_SEND状态

C.经历ESTABLISHED状态

D.经历TIME_WAIT状态

10.已知一棵二叉树的先序和中序遍历序列如下:先序:A、B、C、D、E、F、G、H、I,J中序:C、B、A、E、F、D、I、H、J、G其后序遍历序列为:C、B、F、E、I、J、H、G、D、A

11.设有四个元素A、B、C、D顺序进栈,在进栈过程中可以出栈,出栈次序错误的排列是DCAB

12.问题描述:

|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | #pragma pack(2) class BU { ``int number; ``union UBffer ``{ ``char buffer[13]; ``int number; ``}ubuf; ``void foo(){} ``typedef char``*(*f)(``void``*); ``enum``{hdd,ssd,blueray}disk; }bu; |

sizeof(bu)的值是(22)

解析

#pragma pack(2)表示对齐设定为2字节

union的大小取决于它所有的成员中,占用空间最大的一个成员的大小,并且需要内存对齐,这里因为#pragma pack(2),所以union的大小为14,如果不写#pragma pack(2),那么union大小为16【因为与sizeof(int)=4对齐】 void foo(){} //0 typedef char*(*f)(void*); //0 enum{hdd,ssd,blueray}disk; // 4 }bu;

因此sizeof(union) = 4+14 +0 +0 +4 = 22

13.同一个进程中的线程不共享的部分是(F)

A.信号

B.堆

C.文件描述符

D.进程组id

E.代码段

F.栈空间

14.下面关于虚拟局域网VLAN的叙述错误的是(D)

A.VLAN是由局域网网段构成的与物理位置无关的逻辑组

B.利用以太网交换机可以很方便地实现VLAN

C.每一个VLAN的工作站可处在不同的局域网中

D.不同VLAN内的用户可以相互之间直接通信

E.VLAN可以强化网络安全和网络管理

F.VLAN能灵活控制广播活动

解析

VLAN的主要目的之一就是隔离网络流量,不同VLAN之间的通信需要通过路由器或者配置了VLAN间路由功能的设备(如三层交换机)来实现。直接通信是不可能的,除非这些设备配置了相应的路由策略或使用了如VTP(VLAN Trunking Protocol)这样的协议来管理VLAN间的通信。

15.刚毕业的小王上班有两路公交车都可以从家到公司。如果只等A车,平均需要5分钟才等到;如果只等B车,平均需要7分钟才能等到。假定两辆车运行时间独立,那么小王平均需要等多长时间才能等到A车或B车? 2分55秒

解析

16.一个黑色袋子中装有5个红球,5个蓝球,5个黄球,从中抽取三次,每次抽一个球,取完不放回,则每种颜色球各得一个的概率是(25/91)

17.以下程序的输出结果是(24)

|-------------|------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | #include <stdio.h> int main() { ``int``* pint = ``0``; ``pint += ``6``; ``printf(``"%d\n"``, pint); } |

解析

第一句的意思是将pint指针指向0地址处,由于指针类型是int,每次加1相当于移动四个字节,(在int为四个字节的机器上)

18.某种5号(AA)充电电池在充满电之后的电量是900毫安时和1100毫安时的可能性各为1/2。如果将将电池串联使用,常常会因为其中一部分电池先放电完毕,而且其它电池还有100毫安时以上的电量时,引起先放完电的电池损坏。那么以下说法正确的是:C

A.如果两节这样的电池串联使用,那么必然有1节电池会损坏。

B.如果有许多节这样的电池串联使用,则至少会有1节电池会损坏。

C.如果放电电量控制在900毫安时以内,则不会有电池损坏

D.当有2n节电池串联使用时,至多会有n节电池会损坏

E.当串联的电池个数是奇数时,不会有电池损坏。

F.电量少的电池一定会损坏。

19.下面哪种协议在数据链路层?F

A.ARP

B.ICMP

C.FTP

D.UDP

E.HTTP

F.VPN

解析
复制代码
ICMP、ARP是网络层,UDP是传输层,FTP和HTTP是应用层

20.一组记录排序码为(5 11 7 2 3 17),则利用堆排序方法建立的初始堆为(17 11 7 2 3 5)

21.甲乙丙三人是阿里巴巴开发人员,ABC三人是阿里巴巴测试人员,每个开发都有对应的测试人员。主管介绍说:"A对应的开发是乙的好友,并在三个开发中最年轻;丙的年龄比C对应的开发大。"则开发和测试的对应关系为(甲-A,乙-C,丙-B)。

22.某机器人可以说真话或者假话。某程序设定其周末(周六周日)说真话,周四说谎话,其他日期随机。某测试打算验证该功能。他连续七天,每天问机器人"你在哪里出生的?",在前六天得到了这样的答案:阿里,淘宝,阿里,淘宝,天猫,淘宝。那么第七天,机器人的回答应该是(阿里)

相关推荐
wenchm9 分钟前
细说STM32F407单片机IIC总线基础知识
stm32·单片机·嵌入式硬件
嵌入式lover43 分钟前
STM32项目之环境空气质量检测系统软件设计
stm32·单片机·嵌入式硬件
kenwblack1 小时前
STM32 SPI读取SD卡
stm32·单片机
兰_博2 小时前
51单片机驱动1602液晶显示
单片机·嵌入式硬件·51单片机
深圳市青牛科技实业有限公司 小芋圆2 小时前
开关电源特点、分类、工作方式
前端·科技·单片机·物联网·分类·数据挖掘·新能源
我qq不是451516522 小时前
单片机优先级
单片机·嵌入式硬件
相醉为友4 小时前
在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题
单片机·嵌入式硬件·51单片机
1101 11015 小时前
STM32-笔记10-手写延时函数(SysTick)
笔记·stm32·单片机
极客小张5 小时前
基于STM32的智慧农业控制系统设计:python可视化、UART、I2C、TCP/HTTP技术
python·stm32·单片机·物联网·tcp/ip·毕业设计·课程设计
wenchm5 小时前
细说STM32F407单片机通过IIC读写EEPROM 24C02
stm32·单片机·嵌入式硬件