C++ 笔试题纠错

网易2018实习生笔试题:

    1.printf以及cout都是从右向左编译,从左向右输出

    

    

    2.初始化列表的的执行顺序是变量的声明顺序

    3.欲实现出virtual函数,对象必须携带某些信息,主要用来在运行期决定哪一个virtual函数被调用,这份信息通常由所谓的一个vptr(virtual table pointer)指出,vptr指向一个由函数指针构成的数组vbtl(virtual table)。每一个带有virtual函数的class都有一个相应的vbtl。当对象调用某一virtual函数,实际被调用的函数取决于该对象的vptr所指的那个vbtl——编译器在其中寻找适当的函数指针。指针大小对应电脑位数,类空间大小是成员中内存最大值的最小整数倍。

    4.数组名作为函数的参数退化为指针

    

    

    5.关于MYSQL索引:哈希索引是memory引擎表的默认索引类型,memory也支持btree。索引将随机I/O变为顺序I/O

    6.在Linux系统中,可以用来查找可执行文件的是:whereis、locate、which、type、find。

    8.理解阻塞的概念:时间片用完—>执行变为就绪;I/O请求,执行变为堵塞等待事件;被调度—>就绪变为执行

    11.HTTP1.0 与 HTTP1.1主要区别

         长连接:

         HTTP1.0需要使用keep-alive参数告知服务器要建立长连接,HTTP1.1默认支持长连接。HTTP是基于TCP/IP协议的,创建一个TCP连接需要经过三次握手,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用一个长连接来发送多个请求。

         节约带宽:

         HTTP1.1只发送header信息,不带任何body信息,如果服务器认为客户端有权限请求服务器,则返回100.否则返回401.客户端如果接受100,才开始把请求body发送到服务器。这样当服务器返回401时,客户端就可以不用发送请求body了,节约带宽。另外HTTP还支持传送内容的一部分,这样当客户端已经有一部分资源后,只需要跟服务器请求另外的部分资源即可,这是支持文件断点续传的基础。

         HOST域:

         现在可以web server例如tomcat,设置虚拟站点是非常常见的,web server上的多个虚拟站点可以共享同一个ip和端口。HTTP1.0没有host域,HTTP1.1支持该参数

         HTTP1.1   与  HTTP 2.0主要区别

         多路复用:

         HTTP2.0使用了多路复用技术,同一个连接并发处理多个请求。当然HTTP1.1也可以多建立几个TCP连接,来支持并发请求,但是创建TCP连接本身有开销。TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,再慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应会变慢。

         数据压缩:

         HTTP2.0使用HPACK算法对header的数据进行压缩

         服务器推送:

         我们对支持HTTP2.0的web server请求数据时,服务器会把一些客户端需要的资源一起推送到客户端。这种方式非常适合加载静态资源。

    19.哈希算法在信息安全中的应用:

         文件校验:

         文件传送后的校验,将得到的目标文件计算md5 checksum与源文件的md5 checksum比对,统计两个文件的每一个码元是完全相同的。

         数字签名,鉴权协议。

网易2018校招C++开发工程师笔试卷:

1.linux下查看系统内存使用情况命令:

        (1)top

        (2)free

        (3)cat /proc/meminfo

区别命令:

        (1)ps 对进程进行检测和监控,ps是显示瞬间进程的状态,并不动态连续。如果想对进程进行实时监控应该用top命令。

        (2)df 用于显示磁盘分区上可用的磁盘空间

2. 什么是事物的ACID

    (1)原子性(Atomic)事务中各项操作,要么全做要么全不做,任何一项的失败都会导致整个事务的失败

    (2)一致性(Consistent)事务结束后系统状态是一致的

    (3)隔离性(Isolated)并发执行的事务彼此无法看到对方的中间状态

    (4)持久性(Durable)事务完成后所做的改动都会被持久化,通过日志和同步备份可以在故障发生后重建数据。

    幻读:事务A重新执行一个查询,返回一系列符合查询条件的行,发现其中插入了被事务B提交的行

    不可重复读:事务A重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务B修改过了

    脏读:A事务读取B事务尚未提交的数据并在此基础上操作,而B事务执行回滚,那么A读取道德数据就是咱数据

3. 复合索引:Mysql从左到右使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分。复合索引为idx——A_B_C,所以查询条件只能是在a,ab,abc,ac才算使用到索引idx_A_B_C

2017网易游戏雷火盘古实习生招聘笔试真题

1.在一条无限长的跑道上,有N匹马在不同的位置上出发开始赛马。当开始赛马比赛后,所有的马开始以自己的速度一直匀速前进。

每匹马的速度都不一样,且全部是同样的均匀随机分布。在比赛中当某匹马追上了前面的某匹马时,被追上的马就出局。 请问按以

上的规则比赛无限长的时间后,赛道上剩余的马匹数量的数学期望是多少?

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		double ans = 0;
		for (int i = 1; i <= n; ++i)
		{
			ans += (1.0 / i);
		}
		cout << setiosflags(ios::fixed) << setprecision(4) << ans << endl;
	}
	return 0;
}

PS:全排列求期望超时,注意不是通过每种排列进行计算,而是根据每匹马能存活的概率计算。

2.头文件#include <iomanip>

     主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecision等等。它是I/O流控制头文件,就像C里面的格式化输出一样。

▲setw(n)用法: 通俗地讲就是预设宽度    ▲setbase(int n) : 将数字转换为 n 进制

▲ setprecision用法 
使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。 
如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。 

setiosflags(ios::fixed)是用定点方式表示实数,如果与setiosflags(ios::scientific)合用, 可以控制指数表示法的小数位数。

3.推箱子

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int m,n,x,y,bx,by,tarx,tary;
int st[10][10][10][10];
vector<vector<char>> store;
bool valid(int x, int y)
{
	if (x >= 0 && x < m&&y >= 0 && y < n&&'#' != store[x][y])
	{
		return true;
	}
	return false;
}
int main()
{
	cin >> m >> n;
	store = vector<vector<char>>(m, vector<char>(n,' '));
	for (int i = 0; i < m; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			char temp;
			cin >> temp;
			if ('X' == temp)
			{
				x = i;
				y = j;
				//cout <<x<<" "<<y<<endl;
			}
			if ('*' == temp)
			{
				bx = i;
				by = j;
			}
			if ('@' == temp)
			{
				tarx = i;
				tary = j;
			}
			store[i][j] = temp;
		}
	}
	//输入完成
	vector<vector<int>> move = { {1,0},{-1,0},{0,1},{0,-1} };
	queue<vector<int>> que;
	st[x][y][bx][by] = 1;
	que.push({x,y,bx,by});
	while (false == que.empty())
	{
		vector<int> temp = que.front();
		que.pop();
		int x = temp[0], y = temp[1], bx = temp[2], by = temp[3];
		for (int i = 0; i < 4; ++i)
		{
			int nx = x + move[i][0], ny = y + move[i][1];
			int nnx = nx + move[i][0], nny = ny + move[i][1];
			if (valid(nx, ny) && (bx != nx || by != ny) && 0 == st[nx][ny][bx][by])
			{
				que.push({nx,ny,bx,by});
				st[nx][ny][bx][by] = st[x][y][bx][by] + 1;
				continue;
			}
			else if ((bx == nx && by == ny) && valid(nnx, nny) && 0 == st[nx][ny][nnx][nny])
			{
				if (tarx == nnx && tary == nny)
				{
					cout << st[x][y][bx][by] << endl;
					return 0;
				}
				else
				{
					st[nx][ny][nnx][nny] = st[x][y][bx][by] + 1;
					que.push({ nx,ny,nnx,nny });
				}
			}
		}
	}
	cout << -1 << endl;
	return 0;
}

爱奇艺2018秋季校招C++工程师(第二场)

1.有一个算法的递推关系式为:T(n) = 9 T(n / 3) + n,则该算法的时间复杂度为()(^符号是幂的意思)

​​​​​​​牛客网:

1.类数组有多少个元素,就有多少个类对象,就会调用相应次数的类构造函数。指向类的指针数组,存放了对应元素个数的类对象的指针,不指向任何对象,也不调用构造函数。

2.*p++和*(p++)都是将p进行解引用后,在自增。

3.公有继承中,基类公有成员在派生类是公有,基类保护成员在派生类是保护,那么一个保护的成员在类的对象中可以访问吗?自然是不能的呀,只有public成员才能类外被访问,这里的类外包括类的对象。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值