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

server/2024/12/26 13:36:34/

阿里巴巴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实现这个算法的伪代码

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


http://www.ppmy.cn/server/153328.html

相关文章

网站服务器被攻击了怎么办?

当网站服务器被攻击时&#xff0c;可能会出现各种问题&#xff0c;如服务中断、数据泄露、恶意软件感染等。如果不及时采取措施&#xff0c;可能会给企业带来严重的损失。因此&#xff0c;当网站服务器被攻击时&#xff0c;企业需要采取以下措施来应对&#xff1a; 一、快速定…

MYSQL 架构

MySQL 架构设计灵活&#xff0c;采用模块化的分层架构&#xff0c;分为三大层次&#xff1a;连接层、服务层 和 存储引擎层。这种设计让 MySQL 能够适应不同的使用场景并支持多种存储引擎&#xff0c;以下是对其架构的详细解析&#xff1a; 1. 连接层&#xff08;Connection La…

Vue3中使用Router进行路由配置(图文详情)

Vue3中使用Router进行路由配置 Vue Router 简介 Vue Router 是 Vue.js 官方的路由管理器&#xff0c;它允许您在单页面应用程序&#xff08;SPA, Single Page Application&#xff09;中实现导航和页面切换&#xff0c;而无需重新加载整个页面。通过 Vue Router&#xff0c;您…

undefined reference to `vtable for错误

QT构建报错&#xff1a; D:\code\QGraphicsScaleTest\main.cpp:-1: error: undefined reference to vtable for ResizableSvgViewVS编译报错&#xff1a; 1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl Resi…

大模型讲师叶梓分享前沿论文:ChatDoctor——基于大模型的医疗聊天机器人

人工智能咨询培训老师叶梓 转载标明出处 人工智能讲师培训咨询老师叶梓分享前沿技术&#xff1a;基于大模型的医疗聊天机器人 大模型在医疗领域的应用仍相对有限&#xff0c;通用领域模型在提供医疗建议时常常出现错误。为了解决这一问题&#xff0c;Li等人提出了一个名为ChatD…

Java全栈项目 - 智能考勤管理系统

项目介绍 智能考勤管理系统是一个基于 Java 全栈技术开发的现代化企业考勤解决方案。该系统采用前后端分离架构&#xff0c;实现了员工考勤、请假管理、统计分析等核心功能&#xff0c;旨在帮助企业提高人力资源管理效率。 技术栈 后端技术 Spring Boot 2.6.xSpring Securi…

golang实现yaml配置文件的解析

原文地址&#xff1a;golang实现yaml配置文件的解析 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 代码 需要建立3个文件&#xff0c;目录结构如下&#xff1a; 配置文件 conf.yaml redis: host: "127.0.0.1"port: 6379db: 11 …

后端接口返回文件流,前端下载(java+vue)

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的专栏 总结 | 提效 | 拓展&#xff0c;在这个系列专栏中记录了博主在学习期间总结的大块知识点&#xff0c;以及日常工作中遇到的各种技术点 ┗|&#xff40;O′|┛ ?? 内容速览 后端获取前端下载 本身前端是可以直接通过文…