北京合众思壮科技股份有限公司2月招聘面试题103道2020216

已知一个数列从0项开始的前3项为0,0,1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数proc 的功能是:计算并输出该数列前n项的和sum。n的值通过形参传人。例如,当n=20时,程序的输出结果应为42762.000000。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动maiil函数,不得增行或删行,也不得更改程序的结构。 试题程序: include<stdlib.h> include<conio.h> include<stdio.h> double proc(int n) { double sum,s0,s1,s2,s; int k; sum=1.0; if(n<=2) sum=0.0; s0=0.0; s1=0.0; s2=1.0; //****found**** for(k=4;k<n;k++) } { s=s0+s1+s2; sum+=S: s0=s1; s1=s2; //****found**** s2=s; return sum; } void main { int n; system("CLS"); printf("Input N="); scanf("%d",&n J; printf("%f\n",proc(n)); }


正确答案:

(1)错误:for(k=4;k<n;k++)
正确:for(k=4;k<=11;k++)
(2)错误:s2=S;
正确:s2=s;)
【解析】题目中要求计算数列前n项的和,包括第n项,因此“for(k=4;k<n;k++)”中的“k<n”应改为“k<=n”;根据C语言的语法规则,for循环体中的多条语句必须在大括号“{”和“}”之间,因此,要在语句s2=s;后加上)。


使用VC6打开考生文件夹下的工程test11_1,此工程包含一个源程序文件test11_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:

ch1=7 ch2=9

源程序文件test11_1.cpp清单如下:

include<iostream.h>

class Sample

{

/**************** found ***************/

char ch1,ch2

public:

/************** found ***************/

friend void set(Sample s, char c1,char c2)

{

s.ch1=c1;

s.ch2=c2;

}

void print() {cout<<"ch1="<<" ch2="<<ch2<<end1;}

};

void main()

{

Sample obj;

/************* found ****************/

obj.set(obj,'7','9');

obj.print();

}


正确答案:(1)错误:char ch1ch2 正确:char ch1ch2; (2)错误:friend void set(Sampleschar c1char c2) 正确:friend void set(Sample &schar c1char c2) (3)错误:obj. set(obj'7''9'); 正确:set(obj'7''9');
(1)错误:char ch1,ch2 正确:char ch1,ch2; (2)错误:friend void set(Samples,char c1,char c2) 正确:friend void set(Sample &s,char c1,char c2) (3)错误:obj. set(obj,'7','9'); 正确:set(obj,'7','9'); 解析:(1)主要考查考生对于变量定义格式的掌握,结尾应该使用“;”;
(2)主要考查考生对于传值调用与引用调用区别的掌握,为了改变对象的值,在这里应该使用引用调用;
(3)主要考查考生对于友元函数概念的理解,友元函数而不是当前类的成员函数,而是独立于当前类的外部函数,在使用时应该直接调用不需要使用对象访问。


使用VC6打开考生文件夹下的工程test33_1,此工程包含一个源程序文件test33_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:

Number=1,2,3

sum=16

源程序文件test33_1.cpp清单如下;

include <iostream.h>

class Num

{

public:

/***************** found *****************/

void Num(int a,int b, int c);

void PrintNumber();

void PrintSum();

private:

int x,y,z;

static int sum;

};

/***************** found *****************/

int sum=10;

Num::Num(int a,int b, int c)

{

x=a;

y=b;

z=c;

sum=sum+x+y+c;

}

void Num::PrintNumber()

{

cout<<"Number="<<x<<","<<y<<","<<z<<end1;

}

void Num::PrintSum()

{

cout<<"sum="<<sum<<end1;

}

void main( )

{

Num m(1,2,3),*n;

n=&m;

m. PrintNumber();

/***************** found *****************/

n. PrintSum();

}


正确答案:(1) 错误:void Num(int aint bint c); 正确:Num(int aint bint c); (2) 错误:int sum=10; 正确:int Num::sum=10; (3) 错误:n.PrintSum(); 正确:n->PrintSum();
(1) 错误:void Num(int a,int b,int c); 正确:Num(int a,int b,int c); (2) 错误:int sum=10; 正确:int Num::sum=10; (3) 错误:n.PrintSum(); 正确:n->PrintSum(); 解析:(1)函数Num为构造函数,构造函数不指定返回类型,其隐含有返回值,由系统内部使用;
(2)由于静态数据成员sum是类Num的成员,因此在初始化时必须使用作用域运算符限定其所属的类;
(3)n为指向类Num对象的指针,其访问公有成员函数需使用“->”,而不能使用“.”。


请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中含有一个源程碍文件 projl.epp。其中位于每个注释“//ERROR ****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: ConstruCtor Called. The value is 10 Copy ConstruCtor Called. The value is 10 DestruCtor Called. DestruCtor Called. 注意:只修改注释“//ERROR ****found****”的下一行语句,不要改动程序中的其他内容。 //pwjl.Cpp inClude<iostream> ’using namespaCe std; Class MyClass{ publiC: //ERROR**********found********** MyClass(int i) {value=i;Cout<<”ConstruCtor Called.” <<endl;} //ERROR**********found********** MyClass(eonst MyClass P) { value = P.value; eout<<”Copy ConstruCtor Called.”<<endl; } void Print {Cout<<”The value is” <<value<<endl;} //ERROR**********found********* void-MyClass {Cout<<”DestruCtor Called.”<<endl;} private: int value; }; int main { MyChas objl owl.Print; MyClmss obj2(owl); obj2.Print; retum 0;


正确答案:
(1)MyClass(int i=10)
(2)MyClass(eonst MyClass&P)
(3)~MyClass


请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,该工程含有一个源程序文件pn,jl.cpp。其中位于每个注释“//ERROR 木}}水found}}水木”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value is 10 注意:只修改注释“//ERROR **** found****”的下一行语句,不要改动程序中的其他内容。 //pmjl.cpp include<iostream> using namespace std; class MyClass{ int value; public: //ERROR********found********* void MyClass(int val):value(val){} int GetValueconst{return value;} void SetValue(int val); }; //ERROR********found******** inline void SetValue(int val){value=val;} int main MyClass obj(O); obj.SetValue(10); //ERROR********found********下列语句功能是输出obj的成员value的值 tout<<”The value is”<<obj.value<<endl: return 0; }


正确答案:
(1)MyClass(int val):value(val){}
(2)void MyClass::SetValue(int val){value=val;}
(3)cout“”The value is”“obj.GetValue“end1;


北京合众思壮科技股份有限公司2月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1:常见的HTTP状态码有哪些?可用的回答 : 200 OK 301 Moved Permanently 302 Found 304 Not Modified 307 Temporary Redirect 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 410 Gone 500 Internal Server Error 501 Not Implemented 问题 Q2:一行代码实现1-100之和?可用的回答 :使用sum函数。sum(range(1, 101)问题 Q3:、isinstance作用以及应用场景?可用的回答 : isinstance(obj, cls) 检查一个obj是否是cls的一个对象 问题 Q4:Python中的命名空间是什么?可用的回答 : 在Python中,引入的每个名称都有一个存在的地方,可以被连接起来。这称为命名空间。 它就像一个框,其中变量名称映射到放置的对象。每当搜索到变量时,将搜索此框以获取相应的对象。 问题 Q5:def func(a,b=) 这种写法有什么坑?可用的回答 : def func(a,b=): b.append(a) print(b) func(1) func(1) func(1) func(1) 如:看下结果 1 1, 1 1, 1, 1 1, 1, 1, 1 函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储, 所以三次执行的结果就是 1, 1, 1 ,想每次执行只输出1 ,默认参数应该设置为None。 问题 Q6:IO多路复用的作用?可用的回答 : 基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。 IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。 (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。 (5)如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。 与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小, 系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。 问题 Q7:AJAX是什么,如何使用AJAX?可用的回答 : jax(异步的javascript 和xml) 能够刷新局部网页数据而不是重新加载整个网页。 第一步,创建xmlhttprequest对象, var xmlhttp =new XMLHttpRequest(); XMLHttpRequest对象用来和服务器交换数据。 第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。 第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。 第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使 用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数。 问题 Q8:什么又是yield from呢?可用的回答 :简单地说,yield from generator 。实际上就是返回另外一个生成器。问题 Q9:深拷贝和浅拷贝有什么区别?可用的回答 :在创建新实例类型时使用浅拷贝,并保留在新实例中复制的值。浅拷贝用于复制引用指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也将影响它的原始副本。浅拷贝允许更快地执行程序,它取决于所使用的数据的大小。深拷贝用于存储已复制的值。深拷贝不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。原始副本中所做的更改不会影响使用该对象的任何其他副本。由于为每个被调用的对象创建了某些副本,因此深拷贝会使程序的执行速度变慢。问题 Q10:提到Python中局部变量和全局变量的规则是什么?可用的回答 :局部变量:如果在函数体内的任何位置为变量赋值,则假定它是本地的。全局变量:仅在函数内引用的那些变量是隐式全局变量。算法题面试官常问到的一些算法题目整理如下(大概率会机考):算题题 A1:相乘最大的子数组题目描述如下:Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.Example 1:Input: 2,3,-2,4Output: 6Explanation: 2,3 has the largest product 6.Example 2:Input: -2,0,-1Output: 0Explanation: The result cannot be 2, because -2,-1 is not a subarray.给一个数组,找出其中连续的子数组中,相乘最大的一组。这个算法和 maximum subarray 很相似,那个每个点的状态是 负数的话就可以断开,这个的话不行。但也是一样的,一开始的思路是遇到负数不断开,遇到负数会乘原来的数,然后把自己加进去也作为因子。1.看下面注释掉的写法。这种写法对于负数并不多的可以很有效。但对付负数较多的则力不从心。184个测试跑到183个就TLE了。2. 基于 1. 的改进,1. 中主要是会一直加一直加,导致最差将时间复杂度升高到 O(n)。但对于每个点来说其实只需要保留两种状态:第一种个状态是其中的最大值,还有一个是最小值。2, -5,

如果程序里有叫obj1和obj2的对象,当使用语句“obj2=obj1;”时的结果是( )。

A.在obj2中的实例变量被赋予obj1中相同的值

B.obj2和obj1被认为是同一个变量

C.obj2的值赋给了obj1,而obj2为空

D.以上都不对


正确答案:B
解析:运算符“=”并不将值从一个对象复制到另一个对象中。相反,它把两个变量指向同一个对象。


下列给定程序中,函数proc的功能是计算正整数m 各位上数字的平方和。

例如,输入498,则输出应该是161。

请修改程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include<stdlib.h>

include<stdio.h>

include<conio.h>

long proc(10ng m)

{

//****found****

long sum=1;

do

{

sum+=(m%10)*(m%10);

m/=l0;

//****found****

}

while(m)

return(sum);

}

void main

{

long n;

system("CLS");

printf("Please enter a number:");

scanf("%1d",&n);

printf("\n%ld\n",proc(n));

}


正确答案:

(1)错误:long sum=1;
正确:long sum=0;
(2)错误:while(m)
正确:while(m);
【解析】由函数proc可知,变量sum中存放正整数m 的各位上数字的平方和,其初始化为0。因此,“long sum= 1;”应改为“long sum=0;”。按照C语言的语法规则,语句都以分号结束,应在do-while语句最后加上分号。因此,“while(m)”应改为“while(m);”。


在前后两个(或多个)相连的问题中,被调查者是否回答后一个(或后几个)问题,要由他对前一个问题的回答结果来决定.前一个问题称作(),后一个问题则称作()


参考答案:过滤性问题,相倚性问题


设有函数TSum(Tx,Ty){returnx+y;},其中T为模板类型,则下列语句中对该函数错误的使用是()

A、Sum(1,2);

B、Sum(3.0,2.2);

C、Sum(‘A’,‘C’);

D、Sum("A","C");


参考答案:D


对于函数定义:func add(args ...int) int { sum := 0 for _, arg := range args { sum += arg } return sum}下面对add函数调用正确的是()

A. add(1, 2)

B. add(1, 3, 7)

C. add([]int{1, 2})

D. add([]int{1, 3, 7}...)


参考答案:ABD

更多 “北京合众思壮科技股份有限公司2月招聘面试题103道2020216” 相关考题
考题 单选题创建一个对象obj,该对象包含一个名为"name"的属性,其值为"value"。以下哪一段JavaScript代码无法得到上述的结果()Avar obj = new Object();obj[name] = value;Bvar obj = new Object();obj.prototype.name = value;Cvar obj = {name : value};Dvar obj = new function() {  this.name = value;}正确答案:A解析:暂无解析

考题 若有一个MyClass类,则执行语句“MyClass obj1,obj2[2],*p;”后,自动调用该类的构造函数( )次。A.2B.3C.4D.5正确答案:B解析:本题考核构造函数的调用。C++在创建一个对象时,会自动调用类的构造函数, 在构造函数中可以执行初始化成员变量的操作。语句“MyClass obj1,obj2[2],*p;”创建了3个对象。obj1、obj2[0]、obj2[1]和一个对象指针。在创建。obj1、 obj2[0]、obj2[1]对象时系统会调用类的构造函数。但在创建对象指针p时,不调用类的构造函数,因为指针p本身不定义类对象,而是定义了p可以指向一个MyClass的对象。

考题 使用VC6打开考生文件夹下的工程test41_1,此工程包含一个源程序文件test41_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:7源程序文件test41_1.cpp清单如下:include<iostream.h>class myclass{int a, b;public:/***************** found *****************/int sum(myclass x);void set_ab(int i, int j);}:/**************** found ****************/void myclass:set_ab(int i, int j){a=i;b=j;}int sum (myclass x){/***************** found ***************/x.a+x.b;}void main ( ){myclass n;n.set_ab (3, 4);cout <<sum(n)<<endl;}正确答案:(1) 错误:int sum(myclass x);正确:friend int sum(myclass x);(2) 错误:void myclass:set_ab(int iint j)正确:void myclass::set_ab(int iint j)(3) 错误:x.a+x.b;正确:return x.a+x.b;(1) 错误:int sum(myclass x);正确:friend int sum(myclass x);(2) 错误:void myclass:set_ab(int i,int j)正确:void myclass::set_ab(int i,int j)(3) 错误:x.a+x.b;正确:return x.a+x.b; 解析:(1)函数sum中含有对于myclass类的私有数据成员a和b的操作,而普通函数没有这样的权限,所以编译器会报错,只有把sum定义成该类的友元函数,这样根据友元函数可以访问该类的所有元素的规则,就可以正确地实现该函数:(2)函数的参数列表只能用于类的构造函数,对于构造函数,参数列表与在函数体内赋值是等价的,但是一般的类的成员函数只能使用函数体内赋值一种方法;(3)该函数的返回值为int型,所以计算之后的结果应该使用关键字return返回主函数,return返回值可以使用括号,也可以不使用,后面可以是表达式也可以是变量或者常量。

考题 以下代码中能够实现显示对象的选项的是()。A、obj.style.display;’block’;B、obj.style.display=’block’;C、obj.display=’block’;D、obj.style.display;’none’;正确答案:B

考题 编码是指对()进行分组和确定数字代码的过程。A、一个问题的相同回答B、不同问题的相同回答C、一个问题的不同回答D、不同问题的不同回答正确答案:C

考题 使用VC6打开考生文件夹下的工程test3_1,此工程包含一个源程序文件test3_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:A:a=5display1:a=6display2:a=5源程序文件test3_1.cpp清单如下:include<iostream.h>Class A{public:/**********found**********/A (){}void printa(){cout<<"A:a="<<a<<endl;}private:int a;/***********found**********/class B;};class B{public:/*********found**********/void display1(A t){(*t).a++;cout<<"display1:a="<<(*t).a<<endl;}void display2(A t){t.a--;cout<<"display2:a="<<t.a<<end1;}};void main(){A obj1;B obj2;obj1.printa();obj2.display1(&obj1);obj2.display2(obi1);}正确答案:(1)错误:A(){}正确:A(){a=5;}(2)错误:class B;正确:friend class B;(3)错误:void display1(At)正确:void display1(A*t)(1)错误:A(){}正确:A(){a=5;}(2)错误:class B;正确:friend class B;(3)错误:void display1(At)正确:void display1(A*t) 解析:(1)主要考查考生对于缺省构造函数的理解,由主函数的obj1.printa()可知原缺省构造函数定义不完整;(2)主要考查考生对于友元的理解,如果类B不是类A的友元,则类B不能直接调用类A的私有成员,只有友元类和友元函数可以访问类的所有成员;(3)主要考查考生对于指针的概念掌握,由函数体中的使用可以看出,这里的定义应该是对象指针,指针的定义是使用*加上变量名。

考题 单选题反馈式问题的作用是()。A 按照预先设计的标准回答问题B 使得访谈人员可以检查他们是否已经正确理解了访谈对象的话C 开放思路,不受限制地回答问题D 帮助访谈对象回答问题正确答案:A解析:暂无解析

考题 创建一个对象obj,该对象包含一个名为"name"的属性,其值为"value"。以下哪一段JavaScript代码无法得到上述的结果?()A、var obj=new Object();obj["name"]="value";B、var obj=new Object();obj.prototype.name="value";C、var obj={name:"value"};D、var obj=new function(){this.name="value";}正确答案:B

考题 问答题下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun()的功能是:将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并作为函数值返回。  请改正函数fun中的错误,使它能得出正确的结果。  注意:部分源程序在文件MODII.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!  试题程序:#include #include #include typedef struct aa{ int data; struct aa *next;}NODE;int fun(NODE *h){ int sum=0; NODE *p; p=h->next; /*********found*********/ while(p->next) {  if(p->data%2==0)   sum+=p->data;  /*********found*********/  p=h->next; } return sum;}NODE *creatlink(int n){ NODE *h,*p,*s; int i; h=p=(NODE *)malloc(sizeof(NODE)); for(i=1;idata=rand()%16;  s->next=p->next;  p->next=s;  p=p->next; } p->next=NULL; return h;}outlink(NODE *h){ NODE *p; p=h->next; printf("The LIST: HEAD"); while(p) {  printf("->%d",p->data);  p=p->next; } printf("");}main(){ NODE *head; int sum; system("CLS"); head=creatlink(10); outlink(head); sum=fun(head); printf("SUM=%d",sum);}正确答案:(1)错误:while(p->next)正确:while(p)或while(p!=NULL)(2)错误:p=h->next;正确:p= p ->next;解析:错误1:执行p=p->next后,p指针已经指向链表第一个包含数据域的结点。fun函数的while循环判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作,而不是判断p指针的指针域是否为空。  错误2:fun函数的while循环中判断结束后指针指向下一个结点,操作为p=p->next。

考题 创建一个对象obj,该对象包含一个名为"name"的属性,其值为"value"。以下哪一段JavaScript代码无法得到上述的结果()A、 var obj = new Object();obj["name"] = "value";B、 var obj = new Object();obj.prototype.name = "value";C、 var obj = {name : "value"};D、 var obj = new function() {  this.name = "value";}正确答案:B