诺瓦笔试

1 逻辑题

1门外三个开关,门内三个灯,门外看不见门内,只能进一次门,确定灯和开关对应关系

假如有K1、K2、K3三个开关
先打开K1、K2等一段时间后, 关掉K2.
然后进门,这时有一个亮着的灯就是K1控制,再有手去摸下不亮的两个灯,有发热的就是K2控制,不热的就是K3控制

2 A抛n次硬币,Bn+1次,求A的正面次数不小于B的概率。

50%把,想想如果两人同时掷N次,概率都相同,甲多抛一次这一次有一半多几率是正面,所以就有一半多机会掷多比乙多

2 计算机系统

1计算机系统的资源有哪些

计算机系统资源包括程序和数据等软件资源、CPU、输入/输出设备和存储器

3 网络技术

cookie的作用

作用:可以利用cookies跟踪bai统计用du户访问该网站的习惯,比如什么zhi时间访问,访问了哪些页面,dao在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。

用途:存储用户在特定网站上的密码和 ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将利用计算机硬驱上的少量空间来储存这些首选项。这样,每次登录该网站时,浏览器将检查是否有cookie。如果有,浏览器将此 cookie 随网页的请求一起发送给服务器。

4 数据结构

已知完全二叉树的节点数,求深度和叶节点数。

题目如题
定义:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

假设完全二叉树中,度为0的节点(即叶节点)数目为n0,度为1的节点数为n1,度为2的数目为n2,总数为n
首先我们得知道两个公式
n = n0 + n1 + n2

n - 1 = 0n0 + 1n1 + 2*n2

n-1减去的是根节点。

得n0 = n2 + 1 = (n-1 - n1)/2
但我们还是不能求出叶子节点数,我们还少了个条件,

如果节点总数是偶数,则n1 = 1

如果节点总数是奇数,则n1 = 0
由此

n0 = (n-1 - (n+1) % 2) / 2
假设n = 2019
则n0 = (2018 - 0)/2 = 1009

5 OO

1类静态数据的特点

(1)该类的所有对象共享访问该静态数据成员的一份复制品,而不是每个对象都有该成员的复制
(2)静态数据成员存储在全局数据区
(3)它与普通数据成员一样遵从public、protected、private访问规则
(4)static成员变量的初始化是在类外,此时不能再带上static关键字。类的 静态数据成员在 类内只能声明,定义和初始化必须在类外

2 类访问普通函数和虚函数谁快

类中的虚函数是通过动态改变虚函数表,访问虚函数表中的某一个函数,动态生成的。

但是普通的成员函数是在编译的时候就分配了内存空间,静态生成,存在静态区。

普通函数更快.普通函数的地址在编译期就已经确定了,调用这个函数只需要直接用对应的地址就可以了.调用虚函数时,首先要找到该对象的地址,然后找到该对象虚函数表指针(VPTR)的位置(为了提高查找速度,通常就是该对象的地址),而对象的构造是要到运行时才开始的,这个虚函数表指针也是在运行时才有的,所以虚函数地址是运行期确定的,找到VPTR后根据其指向的虚函数函数指针表得到具体需要调用的函数的地址,相比于普通函数,这个过程复杂,会比较慢.

6 改错

1 枚举类型

https://www.runoob.com/w3cnote/cpp-enum-intro.html

2 explicit

explicit 是避免构造函数的参数自动转换为类对象的标识符

#include 
using namespace  std;

class A
{
public:

	 explicit A(int a)
	{
		cout<<"创建类成功了!"<<endl;

	
	}
	
	

};
int main()
{

	A a=10;
	return 0;
}

上面的代码编译不成功,原因是当显式地定义了一个带一个参数的构造函数( 带explicit),必须要显示地调用构造函数,

A a(10);

如果不加 explicit的话

A a=10;

实际的转换过程如下:
相当于直接调用A(10);

(1)

explicit

此关键字只能对用户自己定义的对象起作用,不对默认构造函数起作用
此关键字只能够修饰构造函数。而且构造函数的参数只能有一个。。

(2)何时用explicit

当我们不希望自动类型转换的时候用,其实标准库好多构造函数都是explicit的

比如说vector ivec(10); //这种定义看起来一目了然

不能写成vector ivec=10;//此种定义让程序员感到疑惑

(3)何时不用explicit

当我们需要隐式转换的时候

比如说String类的一个构造函数

String(const char*);

定义成这样的好处,在需要隐式转化的时候编译器会自动地帮我们转换,标准库里面的String就是一个好的证明。

具体来说:

我们可以这样String str=“helloworld”;//直接调用构造函数

String str=“hello”+str+“world”;

调用重载的+操作符号,此过程相当于:
String temp(“hello”); //调用构造函数

String str=temp+str;

String t(“world”);//调用构造函数

String str=str+t;

明白隐式转换在我们自己写类的时候,尤其是些操纵内存的类的时候很有用。

你可能感兴趣的:(诺瓦笔试)