腾讯,迅雷,完美等公司的一些笔试题整理

这篇博客整理了腾讯、迅雷和完美公司等企业在笔试中出现的编程题目,涉及C++内存管理、内联函数、函数重载、数据结构、TCP关闭过程、算法等多个方面,旨在帮助读者理解和掌握这些知识点。
摘要由CSDN通过智能技术生成

迅雷:

1.A *pa = new A[10];
delete pa;
则类A的构造函数和析构函数分别执行了几次()
答案是10,1

分析:如果要删除数组则应该使用delete [] pa,当调用delete pa时,实际上是调用析构函数,析构一个A对象。

2.关于内联函数正确的是()
A、类的私有成员函数不能作为内联函数
B、在所有类说明中内部定义的成员函数都是内联函数
C、类的保护成员函数不能作为内联函数
D、使用内联函数的地方会在运行阶段用内联函数体替换掉

答案是B

分析:因为已知类内部定义的成员函数都是内联函数,所以A、C是错误的,而D:应该是使用内联函数的地方会在编译阶段替换。内联与宏有点类似,但区别在于宏是用预处理器,而内联函数时通过编译器来控制的。

3、下列对函数double add(int a , int b)进行重载,正确的是()
A、int add(int a ,int b ,int c)
B、int add(double a , double b)
C、double add(double a , double b)
D、int add(int a , int b)

答案是ABC。这里正好复习下overload(重载)和override(重写)的区别。

重载:

两个重载函数的名字是相同的,但对于它们的函数参数来说:参数类型,个数,顺序至少有一个不相同,不能重载只有返回值不同的函数,存在父类,子类及同类之间。

重写:

参数类型,个数,顺序都是相同的。

存在于父类和子类之间(即用虚函数实现重写)

注意:子类函数不能缩小父类的访问权限,不能比父类抛出更多异常。

4、请问以下说法,哪个是正确的()
A、每个类都有一个无参数的构造函数
B、每个类都有一个拷贝构造函数
C、每个类能有多个构造函数
D、每个类能有多个析构函数

答案:C

注意:虽然每个类都会生成无参数的构造函数和拷贝构造函数,但只有调用到它们时才会自动生成,所以A,B不完全正确(见effective c++)。

5、某棵完全二叉树上有699个节点,则该二叉树的叶子节点数为()
A、349             B、350              C、188                D、187

答案:350

分析:其实是一道痕基本的题,但刚开始自己的思路有问题。因为完全二叉树的节点规律是:第一次 1个,第二层个数为2.第三层为4,。。。那到第9层总的节点个数为1+2+$+*+16..+256 = 511,所以第十层有(699-511) = 188个节点,但注意这不是最后的答案,因为第九层中没有子节点的也算为叶子节点,个数为(256-188/2)=162,所以总共的数目为(162+188) = 350。

查了一下,网上还有个更方便的公式:(699+1)/2 = 350

6、看以下代码:

#include <iostream>
#include <string>

using namespace std;

class parent{
public:
	virtual void output();
};

void parent::output(){
	cout<<"parent!"<<endl;
}

class son : public parent{
public:
	virtual void output();
};

void son::output(){
	cout<<"son"<<endl;
}


int main(){
	son s;
	memset(&s,0,sizeof(s));
	parent &p =s;
	p.output();
	system("PAUSE");
	return 0;
}
输出时:

A、parent!       B、son!       C、son!parent!           D、没有输出结果,程序运行出错

答案D。

解析:关键是memset将s置为空,这样会破坏虚函数指针,导致调用失败。

腾讯:

1、程序的完整编译过程分为是:预处理,编译,汇编等,如下关于编译阶段的编译优化的说法中不正确的是()

A、死代码删除指的是编译过程直接抛弃掉被注释的代码;
B、函数内联可以避免函数调用中压栈和退栈的开销
C、For循环的循环控制变量通常很适合调度到寄存器访问
D、强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令

答案A。

死代码指的是永远不可能执行到的代码,而编译器在某些情况下会判断某些代码根本不影响输出,从而去消除。而D,强度削弱指的是用执行时间短的命令来等价代替一个操作,比如左移代替乘法

2、为了某项目需要,我们准备构造了一种面向对象的脚本语言,例如,对所有的整数,我们都通过Integer类型的对象来描述。在计算“1+2”时,这里的“1”,“2”和结果“3”分别为一个Integer对象。为了降低设计复杂度,我们决定让Integer对象都是只读对象,也即在计算a=a+b后,对象a引用的是一个新的对象,而非改a所指对象的值。考虑到性能问题,我们又引入两种优化方案:(1)对于数值相等的Integer对象,我们不会重复创建。例如,计算“1+1”,这里两个“1”的引用的是同一个对象——这种设计模式叫做()。

答案:享元模式

享元模式(英语:Flyweight Pattern)是一种设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。可以看到,关键是两个1共享同一个对象。

3、在下图的多边形ABCDE中从哪一点出发,可以遍历图上的每条边一次,而且仅遍历一次。


答案是:E或B。

分析:设计到欧拉通路的概念,图中通过中所有边一次且仅一次行遍图中所有顶点的通路称

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值