您的位置:百味书屋 > 试题答案 > 2017阿里巴巴实习生(移动客户端)在线笔试题 正文 本文移动端:2017阿里巴巴实习生(移动客户端)在线笔试题

2017阿里巴巴实习生(移动客户端)在线笔试题

2017-05-03 05:52:47 来源网站: 百味书屋

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

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

答案:B 动态链接库和静态链接库的区别

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。如果在当前工程中有多处对dll文件中同一个函数的调用,那么执行时,这个函数只会留下一份拷贝。但是如果有多处对lib文件中同一个函数的调用,那么执行时,该函数将在当前程序的执行空间里留下多份拷贝,而且是一处调用就产生一份拷贝。

静态链接库与静态链接库调用规则总体比较如下:

1、 静态链接库(比较简单):

首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。生成库的.h头文件中的extern "C" 函数返回类型 函数名(参数表); 在调用程序的.cpp源代码文件中如下:

#include "../lib.h"

#pragma comment(lib,"..//debug//libTest.lib")//指定与静态库一起链接

//文件:lib.cpp 其次因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接静态链接库(Lib) 在VC++6.0中new一个名称为libTest的static library工程,并新建lib.h和lib.cpp两个文件,lib.h//文件:lib.h #ifndef LIB_H #define LIB_H extern "C" int add(int x,int y);//声明为C编译、连接方式的外部函数 #endif 库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要! 声明格式如下: 和lib.cpp的源代码如下:

#include "lib.h" int add(int x,int y) { return x + y; } 编译这个工程就得到了一个.lib文件,这个文件就是一个函数库,它提供了add的功能。将头文件和.lib文件提交给用户后,用户就可以直接使用其中的add函数了。

标准Turbo C2.0中的C库函数(我们用来的scanf、printf、memcpy、strcpy等)就来自这种静态库。 下面来看看怎么使用这个库,在libTest工程所在的工作区内new一个libCall工程。libCall工程仅包含一个main.cpp文件,它演示了静态链接库的调用方法,其源代码如下:

#include <stdio.h> #include "../lib.h"//不可丢失 #pragma comment( lib, "..//debug//libTest.lib" ) //指定与静态库一起连接 int main(int argc, char* argv[]) { printf( "2 + 3 = %d", add( 2, 3 ) ); }

静态链接库的调用就是这么简单,或许我们每天都在用,可是我们没有明白这个概念。代码中#pragma comment( lib , "..//debug//libTest.lib" )的意思是指本文件生成的.obj文件应与libTest.lib一起连接

2、 态链接库: 动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。 首先我们必须先注意到DLL内的函数分为两种: 1) 外部函数,可供应用程序调用; 2) DLL内部函数,只能在 DLL 程序使用,应用程序无法调用它们。 因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。

动态库函数的调用,可以采用静态链接的方式,主要步骤如下:

1) 包含DLL中导出的头文件。

2) 采用#pragma comment(lib,"..//debug//libTest.lib")导入动态库生成的*.lib头文件。或在projectàsettingsàLinkeràInput的Additional Dependencies中加入lib文件。

3) 将动态库生成的*.dll文件放到EXE或DLL的同一目录下。

也可以采用动态加载的方式调用,步骤如下:

Another.dll有一个int Add(int x,int y) 函数。则完整的调用过程如下:

typedef int (* FunPtr)(int,int); //定义函数指针

FunPtr funPtr;

Handle handle =LoadLibrary("Another.dll");

funPtr =(FunPtr)GetProcAddress(handle ,"Add");

funPtr(2,3); // 2+3;

FreeLibrary(handle);// 释放载入的动态库

二、 LIB文件 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。

静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。 动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。

导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。

这也是实际上很多开源代码发布的惯用方式:

1、 预编译的开发包:包含一些.dll文件和一些.lib文件。其中这里的.lib就是导入库,而不要错以为是静态库。但是引入方式和静态库一样,要在链接路径上添加找到这些.lib的路径。而.dll则最好放到最后产生的应用程序exe执行文件相同的目录。这样运行时,就会自动调入动态链接库。

2、 用户自己编译:下载的源代码,按照readme自己编译。生成可能也是.dll + .lib(导入库)的库文件

3、 如果你只有dll,并且你知道dll中函数的函数原型,那么你可以直接在自己程序中使用LoadLibary调入DLL文件,GetProcAddress获取函数地址,然后调用。

三、DLL文件 动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。

动态链接与静态链接的不同之处在于它允许可执行模块(.dll 文件或 .exe 文件)仅包含在运行时定位 DLL 函数的可执行代码所需的信息。在静态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。

使用动态链接代替静态链接有若干优点。DLL 节省内存,减少交换操作,节省磁盘空间,更易于升级,提供售后支持,提供扩展 MFC 库类的机制,支持多语言程序,并使国际版本的创建轻松完成。1 静态链接库的优点

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

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

2 动态链接库的优点 (1) 更加节省内存并减少页面交换; (2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

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

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

3 不足之处

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

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

答案:E

1.最简单的方法:将

n

个数排序,排序后的前k个数就是最大的k个数,这种算法的复杂度是O(nlogn)

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

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

答案:81

答案: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

篇二:阿里巴巴 2015 2014年移动客户端开发在线笔试题

阿里巴巴 2015 移动客户端开发 在线笔试题

卷首语:该试卷共有两部分构成:必做题,20道单选题, 40分钟;附加题,3道大题,80分钟;共计120分钟。

一、必做题部分

1、

选第4个

2、

选第4个

3、

答案选的第三个 不确定

4、程序出错在什么阶段______?

int main(void)

{

cout<< “welcome to taobao"<<endl;

}

预处理阶段出错

编译阶段出错

汇编阶段出错

链接阶段出错

运行阶段出错

程序运行正常

答案选预处理阶段出错

5、下列描述中,唯一正确的是______。

本题没有正确选项

本题有多个正确选项

D和E都不正确

B和C有一个正确

C不正确

E和F有一个正确

6、某足球队有四名外援,分别来自巴西、荷兰、意大利和美国。他们分别擅长前锋、后卫或守门,其中:

① 美国外援单独擅长守门;

② 意大利外援不擅长前锋;

③ 巴西外援和另外某个外援擅长相同的位置;

④ 荷兰外援擅长的位置和巴西外援不同。

以上条件可以推出巴西外援擅长的位置是______。

前锋

守门

后卫

前锋或守门

后卫或守门

前锋或后卫

答案选择后卫

7、每台物理计算机可以虚拟出20台虚拟机,假定一台虚拟机发生故障当且仅当它所宿主的物理机发生故障。通过5台物理机虚拟出100台虚拟机,那么关于这100台虚拟机的故障的说法正确的是:______?

单台虚拟机的故障率高于单台物理机的故障率。

这100台虚拟机发生故障是彼此独立的。

这100台虚拟机单位时间内出现故障的个数高于100台物理机单位时间内出现故障的个数。

无法判断这100台虚拟机和100台物理机哪个更可靠。

如果随机选出5台虚拟机组成集群,那么这个集群的可靠性和5台物理机的可靠性相同。

可能有一段时间只有1台虚拟机发生故障。

答案选择第三个

8、用6块1×2的完整瓷砖,铺满2×6的地面,一共有______种不同的铺法(不允许将瓷砖划分成小块)。

13

15

22

24

25

26

答案选13

9、一个函数定义的返回值是float,它不能在

return语句中返回的值的类型是:______。

char

int

float

long

double

以上皆可以

答案选double

10、Linux系统中某个可执行文件属于root并且有setid,当一个普通用户mike运行这个程序时,产生的进程的有效用户和实际用户分别是______?

root mike

root root

mike root

mike mike

deamon mike

mike deamon

11、在32位操作系统中,下列类型占用8个字符的为______。

short int

int C long

unsigned int

long long

char

int

答案选择 int

12、关于IP地址下列说法错误的是______。

IP地址采用分层结构,它由网络号与主机号两部分组成

根据不同的取值范围IP地址可以分为五类

202.112.139.140属于B类地址

每个C类网络最多包含254台主机

IPv6采用128位地址长度

A类,B类和C类地址为内部私有地址

13、设m和n都是int类型,那么以下for循环语句,______。

for(m=0,n=-1;n=0;m++,n++)n++;

循环体一次也不执行

循环体执行一次

是无限循环

有限次循环

循环结束判断条件不合法

运行出错

14、已知一个二叉树的前序遍历结果是(ACDEFHGB),中序遍历结果是(DECAHFBG),请问后序遍历结果是______。

HGFEDCBA

EDCHBGFA

BGFHEDCA

EDCBGHFA

BEGHDFCA

BGHFEDCA

15、在一个请求页式存储管理中,一个程序的页面走向为3、4、2、1、4、5、3、4、5、1、2,并采用LRU算法。设分配给该程序的存储块数S分别为3和4,在该访问中发生的缺页次数F是______。

S=3,F=6; S=4,F=5

S=3,F=7; S=4,F=6

S=3,F=8; S=4,F=5

S=3,F=8; S=4,F=7

S=3,F=10; S=4,F=8

S=3,F=11; S=4,F=9

16、中关村电子城某卖手机的店铺给客人报价,如果按照底价500元(成本价)报出,那么客人就一定会选择在该店铺购买;价格每增加1元,客人流失的可能性增加1%。那么该店铺给客人报出的最优价格是:______?

500元

510元

520元

530元

540元

以上都不对

17、在一个童话世界里,任意两个人之间要么是朋友关系,要么是敌人关系,不存在其他关系及没有关系的情况。并且,如果A和B是朋友关系,B和C是朋友关系,那么A和C必然是朋友关系。那么关于这个童话世界中的人群的说法错误的是:______?

可能只有1个人群,这个人群内部是朋友关系。

可能有2个人群,人群内部是朋友关系,人群之间是敌人关系。

可能有3个及以上个人群,人群内部是朋友关系,人群之间是敌人关系。 如果存在多个人群,并且人群内部是朋友关系,人群之间是敌人关系,那么这些人群必然是差不多大小的。

选项B中的情况可以是其中一个人群只有一个人,另外一个人群可以由很多人。 这样一个世界里朋友关系是比较不容易发生变化的。

18、针对以下代码,const char str1[] = "abc";

const char str2[] = "abc";

const char *p1 = "abc";

const char *p2 = "abc";判断下列说法哪个是正确的:______。

str1和str2地址不同,P1和P2地址相同。

str1和str2地址相同,P1和P2地址相同。

str1和str2地址不同,P1和P2地址不同。

str1和str2地址相同,P1和P2地址不同。

4个地址都相同

篇三:阿里巴巴2014实习生招聘笔试题


2017阿里巴巴实习生(移动客户端)在线笔试题》出自:百味书屋
链接地址:http://www.850500.com/news/142918.html
转载请保留,谢谢!
相关文章
  • 2017阿里巴巴实习生(移动客户

    阿里巴巴2017实习生笔试题(二)阿里巴巴2017实习生笔试题(二)答案:B动态链接库和静态链接库的区别静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时...

推荐范文