阿里2017 JAVA实习笔试错题

阿里2017实习笔试错题集(一)

第一天 2019/4/12 从今天开始,for me,for yy,为了我们以后的未来~加油吧

第一题:动态链接库

在这里插入图片描述
1 静态链接库的优点
(1) 代码装载速度快,执行速度略比动态链接库快;
(2)
只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。

2 动态链接库的优点

(1) 更加节省内存并减少页面交换;
(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性
(3)不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;
(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

3 不足之处

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

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

第二题:最小算法复杂度

在这里插入图片描述
1.最简单的方法:将n个数排序,排序后的前k个数就是最大的k个数,这种算法的复杂度是O(nlogn)

2 .O(n)的方法:利用快排的patition思想,基于数组的第k个数来调整,将比第k个数小的都位于数组的左边,比第k个数大的都调整到数组的右边,这样调整后,位于数组右边的k个数最大的k个数(这k个数不一定是排好序的)

3.O(nlogk)的方法:先创建一个大小为k的最小堆,接下来我们每次从输入的n个整数中读入一个数,如果这个数比最小堆的堆顶元素还要大,那么替换这个最小堆的堆顶并调整。

第三题 :哈夫曼树(带权路径长度)

关于哈夫曼树:https://blog.csdn.net/xueba8/article/details/78477892

在这里插入图片描述

在这里插入图片描述

第四题:计算在这里插入图片描述

第一个位置1是固定的,只需要考虑后三位的排列。
分两种情况分析:

1.如果两个重复的数字是1,1的位置有3中情况,剩下两个数字不能是1并且不能重复,分别是9种和8种,所以这种情况下的总得可能数是389。

2.如果两个重复的数字不是1,则先选择要重复的数字是9种,剩下一个数字是8种(除了1和选择的重复的数字),三个数字全排列,其中有两个重复的数字可能性是A(3,3)/A(2,2)=3,所以这种情况下的可能性是983。

综上所述,总的数字个数是983+983=432。

第五题:选球概率问题

在这里插入图片描述
在这里插入图片描述

第六题:读取磁盘上多个顺序数据块时的效率问题

在这里插入图片描述
答案选C,通道方式。

(1)程序直接访问方式跟循环检测IO方式,应该是一个意思吧,是最古老的方式。CPU和IO串行,每读一个字节(或字),CPU都需要不断检测状态寄存器的busy标志,当busy=1时,表示IO还没完成;当busy=0时,表示IO完成。此时读取一个字的过程才结束,接着读取下一个字。
(2)中断控制方式:循环检测先进些,IO设备和CPU可以并行工作,只有在开始IO和结束IO时,才需要CPU。但每次只能读取一个字。
(3)DMA方式:Direct Memory Access,直接存储器访问,比中断先进的地方是每次可以读取一个块,而不是一个字。
(4)通道方式:比DMA先进的地方是,每次可以处理多个块,而不只是一个块。

第七题:进程间的通信方式在这里插入图片描述

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

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

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

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

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

回调:是一种编程机制。

第八题:字节存储

在这里插入图片描述

在这里插入图片描述

第九题:TCP/IP 三次握手

在这里插入图片描述

在这里插入图片描述

第十题:union sizeof()

在这里插入图片描述
在这里插入图片描述

union:当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union);
它有以下特点:
(1)它是一个结构;
(2)它的所有成员相对于基地址的偏移量都为0;
(3)此结构空间要大到足够容纳最"宽"的成员;
(4)其对齐方式要适合其中所有的成员
综上
而分配给union的实际大小不仅要满足是对齐大小的整数倍,同时要满足实际大小不能小于最大成员的大小。
本题目中
注意第一行,#pragma pack(2)
首先考虑没有这句话时,我们在类、结构或者union补齐字节的时候,找它们的成员数据中找字节最大的那个数去衡量如何对齐,假设为z;
但是有了这句话以后,对齐方式是取 pack(n)中n和z的最小值去对齐;
可见本题中对齐字节数为2;
之后往下看 int number; 占4个字节
接下来考虑union大小
union UBffer
{
char buffer[13]; // 13
int number; // 4
}ubuf; buffer 是13个字节,number 是4个字节,取最大的
为13,注意还要字节对齐,对齐字节数为2,所以Union大小为14,既满足buffer的对齐 也满足number的对齐。
void foo(){} 不占
typedef char*(f)(void); 不占
enum{hdd,ssd,blueray}disk; 4个字节 枚举占4个字节
综上,总大小为14+4+0+0 +4=22

第十一题:系统调用

在这里插入图片描述

调用的程序,运行在用户态,被调用的过程,运行在内核

第十二题:合并空闲空间

在这里插入图片描述

在分区分配方案中,回收一个分区时有几种不同的邻接情况,在各种情况下应如何处理? 答:有四种:上邻,下邻,上下相邻,上下不相邻。
(1)回收分区的上邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(2)回收分区的下邻分区是空闲的,需要将两个相邻的空闲区合并成一个更大的空闲区,然后修改空闲区表。
(3)回收分区的上、下邻分区都是空闲的(空闲区个数为2),需要将三个空闲区合并成一个更大的空闲区(空闲区个数为1
),然后修改空闲区表、

(4)回收分区的上、下邻分区都不是空闲的,则直接将空闲区记录在空闲区表中。

第十三题:VLAN

在这里插入图片描述

VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。

虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN就是一个广播域,VLAN之间的通信是通过第3层的路由器来完成的。与传统的局域网技术相比较,VLAN技术更加灵活,它具有以下优点:

网络设备的移动、添加和修改的管理开销减少;可以控制广播活动;可提高网络的安全性。

计算机网络中,一个二层网络可以被划分为多个不同的广播域,一个广播域对应了一个特定的用户组,默认情况下这些不同的广播域是相互隔离的。不同的广播域之间想要通信,需要通过一个或多个路由器。这样的一个广播域就称为VLAN。

第十四题:等车问题(公倍数)

5和7的最小公倍数是35,35min内A来了7趟,B来了5趟,共12趟,平均35/12min来一趟。
在这里插入图片描述

第十五题:概率抽小球问题

在这里插入图片描述

最开始是0个球,第一次不管怎么选都会选一个和以前不同颜色的球,所以第一次选择颜色不同的球概率为1;

第一次选择之后,还剩14个球,其中 被第一次选走的那个颜色只有4个,剩下的两种颜色的球个数不变,都为5,

然后选一个与第一次颜色不同的球的概率是:10/14, 这是第二次选择

第二次选择之后,还剩13个球,其中被第一次和第二次选中的球,各有4个,剩下的没选到颜色的球还是5个,这次选中
还没选到的这个颜色的球的概率是:5/13

所以选择三个不同颜色总的概率为:1*(10/14)*(5/13) = 25/91.

第十六题:指针 运算

在这里插入图片描述
两个点:
1.在初始化中只有地址才能赋值给指针,因此*int p=0是指p指向地址0x00。
2.int型数占4个字节,因此加6表示偏移了24个字节,结果的地址应为0x18,即是24.

第十六题:协议与数据链路层在这里插入图片描述

HTTP FTP在应用层
TCP UDP在传输层
ICMP,IGMP,IP,ARP在网络层
VPN协议在很多层都有,虚拟专用网VPN,
数据链路层VPN,
网络层VPN,
SSL‐VPN

第十八题:堆排序

在这里插入图片描述
在这里插入图片描述
如果堆的有序状态因为某个节点变得比它的父节点更大而打破,那么就需要通过交换它和它的父节点来修复堆。从最后一个非叶结点逐渐往上浮,直到有序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值