搜狐 2021 C++工程师面试题

小编:管理员 1401阅读 2021.09.27

第1题:

 一、单选题

1、假设整数0x12345678 存放在内存地址0x0开始的连续四个字节中 (即地址0x0到 0x3). 那么在以Little Endian字节序存储的memory中,地址0x3的地方存放的字节是:      

A、0x12

B、0x34

C、0x56

D、0x78



 1、A

a) Little-Endian就是低位字节排放在内存的低地址端,   高位字节排放在内存的高地址端。

b)  Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

c)   网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

如果是 Little-Endian:0x0-0x3内存分别存放的是:0x78、0x56、0x34、0x12;       

如果是        Big-Endian     :0x0-0x3内存分别存放的是:0x12、0x34、0x56、0x78;          



第2题:

 2、以下代码输出的是__?

int foo(int x,int y)

{

    if(x<=0||y<=0)  return 1;

    return 3*foo(x-1,y/2);

}

cout<

A、81

B、27

C、9

D、3



 2、B

递归:3*3*3*f(0,0)=3*3*3*1=27。



第3题:

 3、给定下列程序,那么执行printf("%\n",foo(20,13)); 的输出结果是多少?

int foo (int x,int y )

{

    if (x<=0││y<=0)

        return 1;

    return 3*foo(x-6,y/2);

}    

A、3

B、9

C、27

D、81



 3、D



第4题:

 4、如果x=2021,下面函数的返回值是()

int fun(unsigned int x)

{

     int n=0;

     while((x+1))

     {

         n++;

         x=x|(x+1);

     }

     return n;

}         

A、20

B、21

C、23

D、25



 4、C

返回值为:23

2021对应的二进制为:0000 0000 000 0000 0000 0111 1101 1110

而x|(x+1)的作用是对一个数中二进制0的个数进行统计

例如本题:

第一次循环:0000 0000 000 0000 0000 0111 1101 1110 |0000 0000 000 0000 0000 0111 1101 1110 =0000 0000 000 0000 0000 0111 1101 1111

第二次循环:0000 0000 000 0000 0000 0111 1101 1111 |0000 0000 000 0000 0000 0111 1110 0000 =0000 0000 000 0000 0000 0111 1111 1111

.

.

.

每循环一次0的数量减一 ,直到溢出 

所以2021二进制中一共有23个0则返回值为23



第5题:

 5、以下代码的输出是()

int a[5]={1,2,3,4,5};

int *ptr=(int*)(&a+1);

printf("%d,%d",*(a+1),*(ptr-1));

A、1,2

B、2,5

C、2,1

D、1,5



 5、B

a 代表的是int * 每次步长为一个int

&a 代表的是 int[]* 每次步长为所指向的数组的大小

ptr 指向的是数组a最后一个元素的下一个元素

所以ptr-1指向的是数组a的最后一个元素

a+1指向的是数组a的第二个元素

所以正确答案是B



第6题:

 6、在linux下64位c程序,请计算输出的三个sizeof分别是()

void func(char str_arg[100])

{

     cout<

}

int main(int argc,char* argv[])

{

     char str[]="Hello";

     char *p=str;

     cout<

     cout<

     func("test");

     return 0;

}     

A、5,5,8

B、6,6,4

C、6,8,4

D、6,8,8



 6、D 
这里主要是区分sizeof运算符的测量对象
sizeof(str)测量的是字符数组的占用长度,注意字符串后还有个\0,所以是6
sizeof(p)测量的是指针的占用长度,64位系统下是8字节
sizeof(str_arg)测量的是指针长度,因为这里是形参。



第7题:

 7、下面关于迭代器失效的描述哪个是错误的()       

A、vector的插入操作不会导致迭代器失效

B、map的插入操作不会导致迭代器失效

C、vector的删除操作只会导致指向被删除元素及后面的迭代器失效

D、map的删除操作只会导致指向被删除元素的迭代器失效



 7、A

因为由 Vector 的 iterator 和 listIterator  方法所返回的迭代器是快速失败的 :如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add  方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。



第8题:

8、函数fun的声明为int fun(int *p[4]),以下哪个变量可以作为fun的合法参数()      

A、int a[4][4];

B、int **a;

C、int **a[4]

D、int (*a)[4];



8、B
可以看出fun函数的形参是一个指针数组,也就是指针指向一个地址,地址中存放的内容也是指针。
A,二维数组,不符合
B,二级指针,也就是指针指向的内容也还是存放指针的,符合
C,二级指针数组,数组的内容是二级指针,不符合
D,数组指针,不符合



第9题:

 9、下面说法正确的是()          

A、C++已有的任何运算符都可以重载

B、const对象只能调用const类型成员函数

C、构造函数和析构函数都可以是虚函数

D、函数重载返回值类型必须相同



 9、B

A 不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。   
不能重载 ?: ,因为这个运算符对于类对象来说没有实际意义,相反还会引起歧义 

还有::

C 构造函数 不能是虚函数。 

D 函数重载只跟 参数类型 和参数个数 有关。



第10题:

 10、典型的创建Windows窗口过程的流程为()         

A、注册窗口类->创建窗口->显示窗口->更新窗口->消息循环

B、注册窗口类->创建窗口->更新窗口->显示窗口->消息循环

C、创建窗口->注册窗口类->更新窗口->显示窗口->消息循环

D、创建窗口->注册窗口类->显示窗口->更新窗口->消息循环



 10、A
在屏幕上显示一个窗口的过程一般有以下步骤,这就是主程序的结构流程:
(1)得到应用程序的句柄(GetModuleHandle)。
(2)注册窗口类(RegisterClassEx)。在注册之前,要先填写RegisterClassEx的参数WNDCLASSEX结构。
(3)建立窗口(CreateWindowEx)。
(4)显示窗口(ShowWindows)。
(5)刷新窗口客户区(UpdateWindow)。
(6)进入无限的消息获取和处理的循环。首先获取消息(GetMessage),如果有消息到达,则将消息分派到回调函数处理(DispatchMessage),如果消息是WM_QUIT,则退出循环。



第11题:

 11、下面哪个API返回的不属于windows内核对象()            

A、CreateFile

B、CreateSemaphore

C、CreateDC

D、eateEvent



 11、C
ABD选项是内核对象:事件对象HANDLE CreateEvent();文件对象HANDLE CreateFile();信号量对象HANDLE CreateSemaphore();
C选项是GDI对象。设备上下文(HDC)  CreateDC



第12题:

 12、用户双击鼠标时产生的消息序列,下面正确的是()            

A、WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDOWN,WM_LBUTTONUP

B、WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONUP,WM_LBUTTONDBLCLK

C、WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDOWN,WM_LBUTTONDBLCLK

D、WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK,WM_LBUTTONUP



 12、D
双击即点击左键两下,第一次触发LBUTTONDOWN和LBUTTONUP,第二次点击时触发双击事件LBUTTONDBLCLK(doubleclick),放掉再触发LBUTTONUP



第13题:

 13、以下关于线程以下描述正确的是()

1.windows线程创建时,默认绑定在1个特定的CPU上

2.可采用SetThreadAffinityMask接口设置线程与某个cpu绑定

3._beginthreadex比CreateThread创建线程安全是因为使用_beginthreadex会创建一个_tiddata,在调用一些诸如strtok函数时会将需要保护的数据存入_tiddata

4.使用_beginthread创建线程时,线程执行函数必须为_cdecl约束规范,而_beginthreadex指定的线程执行函数必须为_stdcall   

A、1,2

B、1,3

C、1

D、以上都不正确



 13、D

解释:1:不正确。windows线程创建时,不会绑定在特定的CPU上,需要手动绑定,或者调用   SetThreadAffinityMask接口进行绑定;

           2:正确。参考    http://blog.csdn.net/beyond_cn/article/details/15813361

           3:不正确。参考2的链接。欢迎各位纠正。

           4:正确。参考msdn: 

            _beginthread 函数可创建在 start_address 开始执行例程的线程。    start_address 中的例程必须使用        __cdecl     (用于本机代码)或        __clrcall     (用于托管代码)调用约定,并且应没有返回值。

            传递给    _beginthreadex          的       start_address       中的例程必须使用       __stdcall      (用于本机代码)或       __clrcall      (用于托管代码)调用约定,并且必须返回线程退出代码。

            所以,通过1,就能选出D。



14题:

 14、以下哪些线程同步锁可以为递归锁
1.信号量  2.读写锁   3.互斥量   4.事件   5.临界区(Critical Section)      

A、1,3,4,5

B、5

C、3,5

D、1,3,5



 14、C

进程/线程同步方法

常见的进程/线程同步方法有互斥锁(或称互斥量Mutex)、读写锁(rdlock)、条件变量(cond)、信号量(Semophore)等。

在windows系统中,临界区(Critical Section)和事件对象(Event)也是常用的同步方法。

递归锁/非递归锁

Mutex可以分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。  递归锁也叫可重入锁(reentrant mutex),非递归锁也叫不可重入锁(non-reentrant mutex)。

二者唯一的区别是:

同一个线程可以多次获取同一个递归锁,不会产生死锁。

如果一个线程多次获取同一个非递归锁,则会产生死锁。

Windows下的Mutex和Critical Section是可递归的。

Linux下的pthread_mutex_t锁是默认是非递归的。可以通过设置PTHREAD_MUTEX_RECURSIVE属性,将pthread_mutex_t锁设置为递归锁。



第15题:

 15、关于sendmessage和postmessage的区别,下面的说法错误的是()            

A、postmessage发出消息后,将消息放到消息队列中,马上返回

B、sendmessage发出消息后,一直等到该消息执行完毕,才返回

C、用sendmessage给其他线程创建的窗口发送消息时,消息也会进消息队列

D、用2个函数只能给当前进程的窗口发送消息



 15、D

A:PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。

B:SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。

C:当某线程调用sendmessage给别的线程创建的窗口时,发送的消息首先追加到接收线程的发送消息队列,发送线程处于空闲状态,等待接收线程处理完他的消息返回给发送线程的应答队列,等到后发送线程被唤醒取得应答队列的消息   (就是处理完消息的返回值),继续执行。

D:sendmessage和postmessage都可以给其他线程发送消息



第16题:

 16、关于WM_COPYDATA消息的处理,下面描述错误的是()         

A、可以在不同进程之间传递少量只读数据

B、只能通过sendmessage方式来发送该消息

C、只能在窗口过程函数中处理该消息

D、可以在消息队列或窗口过程函数中处理该消息



 16、C

A:WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。

B;该消息只能由SendMessage()来发送,而不能使用PostMessage()。因为系统必须管理用以传递数据的缓冲区的生命期,如果使用了PostMessage(),数据缓冲区会在接收方(线程)有机会处理该数据之前,就被系统清除和回收。

D:可以在消息队列或窗口过程函数中处理该消息



第17题:

 17、常用的windows进入点函数wWinMain共有四个参数,其中不包括以下哪种类型的参数()        

A、int

B、char*

C、PWSTR

D、HINSTANCE



 17、C
WinMain 函数的原型声明如下:

int WINAPI WinMain(

 HINSTANCE hInstance , // handle to current instance

 HINSTANCE hPrevInstance , // handle to previous instance

 LPSTR lpCmdLine , // command line

 int nCmdShow // show state

 );

第一个参数 hInstance 表示该程序当前运行的实例的句柄,这是一个数值。
第二个参数 hPrevInstance 表示当前实例的前一个实例的句柄。
第三个参数 lpCmdLine 是一个以空终止的字符串,指定传递给应用程序的命令行参数。 
第四个参数 nCmdShow 指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。



第18题:

 18、下列windows消息中,优先级相对较低的是哪一个()    

A、WM_MOUSEMOVE

B、WM_TIMER

C、WM_CHAR

D、WM_WINDOWPOSCHANGED



 18、B

WM_TIMER消息的优先级最低,所以在有其他消息的情况下,WM_TIMER消息得不到处理

A:WM_MOUSEMOVE消息在鼠标移动时被发送至已获焦点的窗口

B:Windows定时器是一种周期性的消息产生装置,它会每隔一段指定时间发送一次定时消息WM_TIMER。

C:未经输入法而直接送人程序中的字符会响应WM_CHAR消息

D:发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数



第19题:

 19、最小堆[0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是()       

A、[3,2,5,7,4,6,8]

B、[2,3,5,7,4,6,8]

C、[2,3,4,5,7,8,6]

D、[2,3,4,5,6,7,8]



 19、C
根据堆的删除规则,删除操作只能在堆顶进行,也就是删除0元素。
然后让最后一个节点放在堆顶,做向下调整工作,让剩下的数组依然满足最小堆。
删除0后用8填充0的位置,为[8,3,2,5,7,4,6]
然后8和其子节点3,2比较,结果2最小,将2和8交换,为:[2,3,8,5,7,4,6]
然后8的下标为2,其两个孩子节点下标分别为2*2+1=5,2*2+2=6
也就是4和6两个元素,经比较,4最小,将8与4交换,为[2,3,4,5,7,8,6]
这时候8已经没有孩子节点了,调整完成。



第20题:

 20、对一个由A,B,C,D随机组成的序列进行哈弗曼编码,据统计,各个元素的概率分别为:P(A)=0.4,P(B)=0.35,P(C)=0.2,P(D)=0.05,请问该编码的平均期望编码长度为()bits?

A、1.45

B、1.7

C、1.85

D、1.92



 20、C

首先要建立哈夫曼树,然后计算平均期望编码长度:0.4*1 + 0.35*2 + 0.2*3 + 0.05*3 = 1.85



第21题:

 21、设有递归算法如下,

int x(int n)

{

 if(n<=3)

     return 1;

 else

     return x(n-2)+x(n-4)+1;

}

试问计算x(x(8))时需要计算()次x函数。      

A、8

B、9

C、16

D、18



 21、D

x(8)=x(6)+x(4)+1  递归计算x(8)第一次调用

x(6)=x(4)+x(2)+1  递归计算x(6)第二次调用

x(4)=   x(2)+x(0)+1    递归计算x(4)第三次调用

x(4)=   x(2)+x(0)+1     递归计算x(4)第四次调用  

之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9

接着计算x(9)

x(9)=x(7)+x(5)+1  递归计算x(9)第一次调用

x(7)=x(5)+x(3)+1  递归计算x(7)第二次调用

x(5)=x(3)+x(1)+1  递归计算x(5)第三次调用

x(5)=x(3)+x(1)+1  递归计算x(5)第四次调用

之后再调用x()计算黑体部分的结果(5次,加上前面4次,一共9次),最后x(8)返回值为9  


所以总共调用x()的次数是9+9=18



第22题:

 22、设一组初始记录关键字序列(Q,H,C,Y,P,A,M,S,R,D,F,X),则按字母升序的第一趟冒泡排序结束后的结果是()

A、F,H,C,D,P,A,M,Q,R,S,Y,X

B、P,A,C,S,Q,D,F,X,R,H,M,Y

C、A,D,C,R,F,Q,M,S,Y,P,H,X

D、H,C,Q,P,A,M,S,R,D,F,X,Y



 22、D

第一趟冒泡:从数组第一个元素到最后一个元素扫描,比较相邻的元素,如果后一个元素小于前一个,则交换位置。第一趟结束时,最大元素到达最后一个元素位置



第23题:

23、堆排序的空间复杂度是(),堆排序中构建堆的时间复杂度是()。 

A、O(logn),O(n)

B、O(logn),O(nlogn)

C、O(1),O(n)

D、O(1),O(nlogn)



23、C

“空间复杂度”指占内存大小,堆排序每次只对一个元素操作,是就地排序,所用辅助空间O(1),空间复杂度是O(1)

在构建堆的过程中,完全二叉树从最下层最右边的非终端结点开始构建,将它与其孩子进行比较和必要的互换,对于每个非终端结点来说,其实最多进行两次比较和互换操作,因此整个构建堆的时间复杂度为O(n)。
在正式排序时,第i次取堆顶记录重建堆需要用O(logi)的时间(完全二叉树的某个结点到根结点的距离为?log2i?+1),并且需要取n-1次堆顶记录,因此,重建堆的时间复杂度为O(nlogn)。



第24题:

 24、若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别0和3。当从队列中删除一个元素,再加入两 个元素后,rear和front的值分别为()

 A、2和4

B、1和5

C、4和2

D、5和1



 24、A
因为出队时,front=front+1/MAXSIZE,rear不变,所以front=4
入队时,rear=rear+1/MAXSIZE,front不变,所以rear=2;



第25题:

 25、如下表是用户是否使用某产品的调查结果() 

UID     年龄     地区     学历     收入     用户是否使用调查产品     

1     低     北方     博士     低     是     

2     高     北方     本科     中     否     

3     低     南方     本科     高     否     

4     高     北方     研究生     中     是         
请计算年龄,地区,学历,收入中对用户是否使用调查产品信息增益最大的属性(Log23≈0.63)        

A、年龄

B、地区

C、学历

D、收入



 25、C
不用算一眼就能看出来,所有本科学历都不使用调查产品,所有非本科学历都使用了调查产品。这种可以确定的划分导致信息熵为0,信息增益最大



第26题:

 26、假设某算法的计算时间可用递推关系式T(n)=2T(n/2)+n表示,则该算法的时间复杂度为() 

A、O(logn)

B、O(n*logn)

C、O(n)

D、O(n^2)



 26、B

T(n)=2^k*(T(n/(2^k)))+k*n

2^k = n,k = log(n)   (以2为底)

T(n) = n*T(1)+n*log(n)<= c*n*log(n)  (c为常数)

所以是O(n*logn)



第27题:

 27、基于统计的分词方法为()        

A、正向最大匹配法

B、逆向最大匹配法

C、最少切分

D、条件随机场



 27、D
目前的分词方法归纳起来有3 类:
第一类是基于语法和规则的分词法。其基本思想就是在分词的同时进行句法、语义分析, 利用句法信息和语义信息来进行词性标注, 以解决分词歧义现象。因为现有的语法知识、句法规则十分笼统、复杂, 基于语法和规则的分词法所能达到的精确度远远还不能令人满意, 目前这种分词系统还处在试验阶段。
第二类是机械式分词法(即基于词典)。机械分词的原理是将文档中的字符串与词典中的词条进行逐一匹配, 如果词典中找到某个字符串, 则匹配成功, 可以切分, 否则不予切分。基于词典的机械分词法, 实现简单, 实用性强, 但机械分词法的最大的缺点就是词典的完备性不能得到保证。据统计, 用一个含有70 000 个词的词典去切分含有15 000 个词的语料库, 仍然有30% 以上的词条没有被分出来, 也就是说有4500 个词没有在词典中登录。
第三类是基于统计的方法。基于统计的分词法的基本原理是根据字符串在语料库中出现的统计频率来决定其是否构成词。词是字的组合, 相邻的字同时出现的次数越多, 就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映它们成为词的可信度。
最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描,这是基于词典分词的方法
1.正向最大匹配法 
2.逆向最大匹配法
3.最少切分法:使每一句中切出的词数最小,这也是基于词典分词的方法
条件随机场是一个基于统计的序列标记和分割的方法,属于基于统计的分词方法范畴。它定义了整个标签序列的联合概率,各状态是非独立的,彼此之间可以交互,因此可以更好地模拟现实世界的数据.



第28题:

 28、下列哪个不属于CRF模型对于HMM和MEMM模型的优势()            

A、特征灵活

B、速度快

C、可容纳较多上下文信息

D、全局最优



 28、B
隐马尔可夫模型(Hidden Markov Model,HMM),最大熵马尔可夫模型(Maximum Entropy Markov  Model,MEMM)以及条件随机场(Conditional Random Field,CRF)是序列标注中最常用也是最基本的三个模型。
HMM模型是对转移概率和表现概率直接建模,统计共现概率。
MEMM模型是对转移概率和表现概率建立联合概率,统计时统计的是条件概率,但MEMM容易陷入局部最优,是因为MEMM只在局部做归一化。
RF模型中,统计了全局概率,在 做归一化时,考虑了数据在全局的分布,而不是仅仅在局部归一化,这样就解决了MEMM中的标记偏置(label bias)的问题。
CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。特征设计灵活。(与ME一样) ————与HMM比较
同时,由于CRF计算全局最优输出节点的条件概率,它还克服了最大熵马尔可夫模型标记偏置(Label-bias)的缺点。 ­­————与MEMM比较
CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。
CRF需要训练的参数更多,与MEMM和HMM相比,它存在训练代价大、复杂度高的缺点。



第29题:

29、假设一个完整的扑克牌有52张牌,2黑色(黑葵和梅花)和2红色(方块和红心)。如果给你一副完整的牌,和半副牌(1红色和1黑色),则两种情况下抽两种牌都是红色的概率是多少()      

A、1/2,1/2

B、25/102,12/50

C、50/51,24/25

D、25/51,12/25



29、B

第一种情况 26/52 * 25/51 =25/102

第二种情况 13/26 * 12/25=12/50



第30题:

 30、在二分类问题中,当测试集的正例和负例数量不均衡时,以下评价方案哪个是相对不合理的()(假设 precision=TP/(TP+FP),recall=TP/(TP+FN)。)       

A、Accuracy:(TP+TN)/all

B、F-value:2*recall*precision/(recall+precision)

C、G-mean:sqrt(precision*recall)

D、AUC:曲线下面积



 30、A

题目提到测试集正例和负例数量不均衡,那么假设正例数量很少占10%,负例数量占大部分90%。

而且算法能正确识别所有负例,但正例只有一半能正确判别。

那么TP=0.05×all, TN=0.9×all,Accuracy=95%。

虽然Accuracy很高,但正例precision只有50%



第31题:

 31、下面关于ID3算法中说法错误的是()          

A、ID3算法要求特征必须离散化

B、信息增益可以用熵,而不是GINI系数来计算

C、选取信息增益最大的特征,作为树的根节点

D、ID3算法是一个二叉树模型       



 31、D
ID3 算法生成的决策树是一棵多叉树,分支的数量取决于分裂属性有多少 个不同的取值。 



第32题:

 32、圆内接三角形是锐角三角形概率是多少()         

A、1/4

B、1/3

C、1/2

D、2/3



 32、A
三角形的三点在圆上的位置是等概率的。这种任意位置组成的三角形中,最大的那个角必定大于等于60度,因此满是三角形是锐角的变化范围是60-90度,钝角的范围是90-180度



第33题:

 33、六个人排成一排,甲与乙不相邻,且甲与丙不相邻的不同排法数是多少()          

A、216

B、240

C、288

D、360



 33、C

1,首先将甲乙丙拿出来,剩下三个做全排列,有A(3,3)=6种排列,

2,将甲乙两个插入第一步三个人的四个空隙中,有A(4,2)=12种

3,剩下丙插入到前五个人中的六个空隙中,其中甲的左右两侧不符合,

   还有4个符合条件的空隙,C(4,1)=4

4,总共有6*12*4=288



第34题:

 34、在其他条件不变的前提下,以下哪种做法容易引起机器学习中的过拟合问题()

A、增加训练集量

B、减少神经网络隐藏层节点数

C、删除稀疏的特征   S

D、SVM算法中使用高斯核/RBF核代替线性核



 34、B
过拟合就是导致拟合过度,算法的普适性降低
B选项减少神经网络隐层节点数,也就减小了输入层与隐层,隐层与输出层之间的连接矩阵,使其适应性变差



第35题:

 35、计算一个任意三角形的面积,S=√(p(p-a)(p-b)(p-c)),p=(a+b+c)/2,以下等价类测试用例中,不属于无效等价类的是()     

A、a=5,b=3,c=6;

B、a=2,b=3,c=5;

C、a=7,b=3,c=3;

D、a=2,b=6,c=3;



 35、A
选项A满足三角形两边之和大于第三边,两边之差小于第三边,是有效的
选项BCD都不满足两边之和大于第三边,属于等级无效的



第36题:

 二、多选题

36、下列排序算法的常规实现中,哪些空间复杂度是O(1)    

A、冒泡

B、选择

C、归并

D、快排

E、堆排序



 36、A.B.E

冒泡排序,选择排序,堆排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引).

快速排序空间复杂度为logn(因为递归调用了) ,归并排序空间复杂是O(n),需要一个大小为n的临时数组.


关联标签: