阿里笔试题整理1

1.下面哪一个不是动态链接库的优点?(B)
A.共享
B.装载速度快
C.开发模式好
D.减少页面交换

知识补充
1)动态链接库:
a.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
b.使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
c.动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。
https://baike.baidu.com/item/动态链接库/100352?fr=aladdin#4

2)动态链接库的优缺点
a. 更加节省内存并减少页面交换;
b. DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;
c.不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;
d.适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
e. 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息。而使用运行时动态链接,系统不会终止,但由于DLL中的导出函数不可用,程序会加载失败;速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

3)静态链接库:
所谓静态链接库,说白了就是在你把写好的代码编译的时候,就把你引用的库一起给编进去了,从此后你编出来的执行程序跟外面都不再有任何关系,即使这个库更新了,你也搭不上边儿,其次,如果系统中许多类似的程序都需要用到这个库,那么各自在编译的时候都需要把这个库给编进去,浪费存储空间(加载到内存里应该也是浪费内存空间的)。linux系统中静态库的名字一般叫xxx.a, 所以如果你看到一个以 .a结束的文件那么它多半就是一个静态链接库文件。

4)静态链接库的优缺点:
a.代码装载速度快,执行速度略比动态链接库快;
b.只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱等问题。
c.使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;

2.n个数值选出最大m个数(3<m<n)的最小算法复杂度是(A)
A.O(n)
B.O(nlogn)
C.O(logn)
D.O(mlogn)
E.O(nlogm)
F.O(mn)
知识补充:
1)最简单的方法:将n个数排序,排序后的前k个数就是最大的k个数,这种算法的复杂度是O(nlogn)。
2)O(n)的方法:利用快排的patition思想,基于数组的第k个数来调整,将比第k个数小的都位于数组的左边,比第k个数大的都调整到数组的右边。
3)O(nlogm)的方法:先创建一个大小为m的最小堆,接下来我们每次从输入的n个整数中读入一个数,如果这个数比最小堆的堆顶元素还要大,那么替换这个最小堆的堆顶并调整。
4)部分快排 时间复杂度 O(N) ,存储复杂度 O(N);堆排序 时间复杂度 O(NlogM) 空间复杂度 O(M) 。如果数组能存下的话,O(N) 是最小时间复杂度。但是你可能面临从(文件)流中读取数据,O(N) 的空间复杂度超过内存限制的情况,这种情况下就该用优先队列了。

3.由权值分别为1、12、13、4、8的叶子节点生成一颗哈夫曼树,它的带权路径长度为(F)
A.12
B.68
C.43
D.6
E.25
F.81
知识补充:
1)哈弗曼树
a.给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值