1.概述

2016.09.06 晚参加了 CVTE C++ 岗的在线笔试。笔试题型分为不定向选择题和编程题,总共 27 题。其中不定项选择题为 25 道,编程题 2 道。其特点是不定项选择题不告诉你是单选还是多选,编程题不能复制黏贴,不用线上编译验证代码的正确性,提交代码即可!

运气不佳,浏览器中途退出,吐槽一下,CVTE 考试系统没有时时保存功能,导致我的最后一道编程内容丢失,最终时间不够,没能写完。(不能给自己找借口,下次不能再出现这种情况,考试,要争分夺秒,把握时间!)

下面将能够回忆起的有疑问的题目列出来与大家分享。

2.笔试内容

2.1 选择题

(1)进程调度中,进程切换(上下文切换)时,被换出的进程的上下文保存在哪里?

首先说一下什么是进程调度。因用户进程数一般都多于CPU数或CPU核数,这将导致它们互相争夺CPU资源,因此操作系统需要进行进程调度,合理的安排CPU资源的分配,安排的方法就是进程调度算法。

因进程的调度,所以就需要将进程从CPU中换入和换出,这就是进程切换,也叫上下文切换(Context Switch)。进程的上下文由PCB(进程控制块)表示,它包括进程状态,CPU寄存器的值,中断位置,堆栈上的内容等,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

关于PCB的位置,PCB Wikipedia描述如下:

Since PCB contains the critical information for the process, it must be kept in an area of memory protected from normal user access. In some operating systems the PCB is placed in the beginning of the kernel stack of the process since that is a convenient protected location。

PCB保存在内存中,一般存储在内核栈的开始位置,便于阻止用户访问,保护PCB不被修改。所以,被换出的进程的上下文保存在内存中,便于频繁进程间的切换,如果存储在磁盘中,那切换的速度将无法忍受。

(2)宏定义#define SIX 2*3和#define SIX 2 * 3有区别吗?
宏定义的格式:

#define 标识符 字符串

宏定义只是简单的文本替换,字符串中当然可以有空格,所以题目中的宏定义是没有区别的。测试代码如下:

#define SIX 2*3
cout<<SIX<<endl;#define SIX 2 * 3
cout<<SIX<<endl;

程序输出:

6
6

(3)驱动程序一定要与具体的硬件设备关联吗?

驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。

按照百度百科对驱动程序的解释,个人觉得驱动程序一定要与具体的硬件设备关联。但听到网友的回复,不一定,可参考虚拟光驱。这个也言之有理,就不深究了,如有错误,请批评指正。

(4)Linux 中,什么配置文件包含主机名到 IP 地址和映射?

A etc/networks
B etc/hosts
C etc/HOSTNAME
D etc/resolv.conf

答案选择B。
每台主机一定有一个或多个IP地址,一个IP地址可以绑定一个或多个域名,一个IP地址也可以映射成一个或多个主机名。主机名与域名都可以唯一指定一台主机,但主机名与域名是不同的。域名存在于公网,主机名存在于局域网。

主机名的配置文件是etc/hosts,其内容大致如下:
第一部份:网络IP地址;
第二部份:主机名.域名,注意主机名和域名之间有个半角的点,比如 localhost.localdomain;
第三部份:主机名。
例如局域网中的三台主机,每台做不同的事,一台做MAIL服务器,一台做FTP服务器,一台做SMB服务器,那么etc/hosts配置称如下内容。

127.0.0.1 localhost.localdomain localhost
192.168.1.2 ftp.localdomain ftp
192.168.1.3 mail.localdomain mail
192.168.1.4 smb.localdomin smb

(5)TCP/IP网络参考模型有哪几层?
TCP/IP网络参考模型将网络层级结构分为四层,简介如下。

名称 功能 协议
应用层(Application Layer) 负责实现一切与应用程序相关的功能,对应OSI参考模型的上三层(应用层,表示层和会话层) FTP(文件传输协议)
HTTP(超文本传输协议)
DNS(域名系统)
SMTP(简单邮件传输协议)
NFS(网络文件系统协议
传输层(Transport Layer) 为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。对应于OSI参考模型的第四层——传输层。 TCP(控制传输协议)
UDP(用户数据报协议)
网际层(Internet Layer) 负责网络间的寻址、数据传输,对应OSI参考模型的第五层——网络层 IP(网际协议)
ICMP(互联网控制报文协议)
IGMP(互联网组管理协议)
ARP(地址解析协议)
RARP(反向地址解析协议)
网络接入层(Network Access Layer) 负责实际数据的传输,对应OSI参考模型的下两层(数据链路层和物理层) HDLC(高级链路控制协议)
PPP(点对点协议)
SLIP(串行线路接口协议)

注意: ARP和RARP在OSI参考模型中属于数据链路层,而非网络层。

(6)Linux 内核配置命令是什么?
Linux内核的配置系统由三个部分组成,分别是:
**Makefile:**分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;
**配置文件:**给用户提供配置选择的功能;
**配置工具:**包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于Make config、Make menuconfig 和 make xconfig)。

所以Linux内核配置命令是 Make config、Make menuconfig 和 make xconfig。

(7)FAT32文件系统最大支持的文件大小?
常见文件系统情况如下:
FAT16(Windows):支持最大分区2GB,最大文件2GB;
FAT32(Windows):支持最大分区128GB,最大文件4GB;
NTFS(Windows):支持最大分区2TB,最大文件2TB;
HPFS(OS/2):支持最大分区2TB,最大文件2GB;
EXT2EXT3(Linux):支持最大分区4TB,最大文件2GB;
JFS(AIX):支持最大分区4P(block size=4k),最大文件4P;
XFS(IRIX):这是个正经的64位的文件系统,可以支持9E(2的63次方)的分区;

知其然,更要知其所以然,那么FAT32为什么最大只支持4G的文件呢?
FAT32(32bits File Allocation Table)是Windows系统硬盘分区格式的一种,这种格式采用32位的文件分配表,即FAT32文件系统寻址单位为32位,因为FAT32规定文件长度一项属性占4个字节,所以单个文件最大只能是4GB-1。

2.2 编程题

编程题难度不大,最重要的是不要出现浏览器意外关闭,注意把握好时间,切记切记,这是在考试,不是平时的编程!就像国乒男队教练刘国梁对藏獒张继科在里约奥运会上说的:“醒醒吧,这是在比赛。”

题目:
编程实现大整数相加,大整数范围是[−10100-10^{100}−10100,1010010^{100}10100]。比如
6666666666+1111111111=7777777777;
-5555555555+2222222222=-3333333333。

思路
将大整数字符串按数位转换称相应的数值存储到数组中,然后再对数组进行运算,例如大整数字符串"66666688",转换到int数组就是 int array={8,8,6,6,6,6,6,6}。

实现代码参考如下:

#include <iostream>
#include <string>
using namespace std;/**********************
*@brief:检查输入的合法性
*@ret:0:合法;-1:非法
**********************/
int check(const string& bigInt1,const string& bigInt2){//为空报错if(bigInt1==""||bigInt2=="")       return -1;//包含除'-'和'0'-'9'字符外的字符且'-不能出现在其它位置'for(int i=0;i<bigInt1.length();++i)  if(bigInt1[i]!='-'&&(bigInt1[i]<'0'||bigInt1[i]>'9'))return -1;else if(i>0&&bigInt1[i]=='-')return -1;for(int i=0;i<bigInt2.length();++i)if(bigInt2[i]!='-'&&(bigInt2[i]<'0'||bigInt2[i]>'9'))return -1;else if(i>0&&bigInt2[i]=='-')return -1;//最高数字位不能为0if(bigInt1[0]=='-'&&bigInt1[1]=='0'||bigInt1[0]=='0')return -1;if(bigInt2[0]=='-'&&bigInt2[1]=='0'||bigInt2[0]=='0')return -1;return 0;
}/**********************
*@brief:检查输入的合法性
*@ret:成功返回对应的大整数字符串,错误返回空串
**********************/
string bigIntegerAdd(const string& bigInt1,const string& bigInt2){if(check(bigInt1,bigInt2))    return "";int maxLen=bigInt1.length()>bigInt2.length()?bigInt1.length():bigInt2.length();int* num1=new int[maxLen+1];int* num2=new int[maxLen+1];memset(num1,0,sizeof(int)*(maxLen+1));memset(num2,0,sizeof(int)*(maxLen+1));int j=0;for(int i=bigInt1.length()-1;i>=0;--i)if(bigInt1[i]!='-')num1[j++]=bigInt1[i]-'0';j=0;for(int i=bigInt2.length()-1;i>=0;--i)if(bigInt2[i]!='-')num2[j++]=bigInt2[i]-'0';//两数位正数if(bigInt1[0]!='-'&&bigInt2[0]!='-'){j=0;while(bigInt2[j]){      //将num2加到num1if(num1[j]+num2[j]>=10){num1[j]=num1[j]+num2[j]-10;num1[j+1]+=1; //进位}elsenum1[j]+=num2[j];++j;}j=0;string res;while(num1[j])res=to_string(num1[j++])+res;return res;}//两负数相加if(bigInt1[0]=='-'&&bigInt2[0]=='-'){j=0;while(bigInt2[j+1]){    //将num2加到num1if(num1[j]+num2[j]>=10){num1[j]=num1[j]+num2[j]-10;num1[j+1]+=1; //进位}elsenum1[j]+=num2[j];++j;}j=0;string res;while(num1[j])res=to_string(num1[j++])+res;return "-"+res;}//两数一正一负string negativeBigInt=bigInt1[0]=='-'?bigInt1:bigInt2;string positiveBigInt=bigInt1[0]!='-'?bigInt1:bigInt2;string negativeBigIntAbs=negativeBigInt.erase(0,1);j=0;for(int i=negativeBigIntAbs.length()-1;i>=0;--i)num1[j++]=negativeBigIntAbs[i]-'0';j=0;for(int i=positiveBigInt.length()-1;i>=0;--i)num2[j++]=positiveBigInt[i]-'0';if(negativeBigIntAbs.length()>=positiveBigInt.length()&&negativeBigIntAbs>positiveBigInt){ //负数绝对值大于正数j=0;while(positiveBigInt[j]){ //将num2加到num1if(num1[j]-num2[j]<0){num1[j]=num1[j]+10-num2[j];num1[j+1]-=1;  //借位}elsenum1[j]-=num2[j];++j;}j=0;string res;while(num1[j])res=to_string(num1[j++])+res;return "-"+res;}else{                                   //负数绝对值大于正数j=0;while(negativeBigIntAbs[j]){    //将num2加到num1if(num2[j]-num1[j]<0){num2[j]=num2[j]+10-num1[j];num2[j+1]-=1;  //借位}elsenum2[j]-=num1[j];++j;}j=0;string res;while(num2[j])res=to_string(num2[j++])+res;return res;}
}// 测试代码
int main(){string res;res=bigIntegerAdd("0066666666666","7"); //输入非法,结果:空串res=bigIntegerAdd("-6-6666666666","7"); //输入非法,结果:空串res=bigIntegerAdd("66666666666a","7"); //输入非法,结果:空串res=bigIntegerAdd("66666666666a","0"); //输入非法,结果:空串res=bigIntegerAdd("66666666666","1111111111"); //结果:67777777777res=bigIntegerAdd("-66666666666","-1111111111"); //结果:-68888888888res=bigIntegerAdd("66666666666","-7"); //结果:66666666659
}

上面的实现加入了严格的输入合法性检查,代码稍显冗余,有兴趣者可重构。按照上面的思路读者可给出自己的实现,而无需痛苦的看我那杂乱的代码。

3.小结

京东和 CVTE 两场笔试,有诸多不顺,均未达到自己的预期。不泄气,不放弃,继续努力,再接再厉,校招注定是个持久战。


参考文献

[1] Linux操作系统的主机名Hostname详细介绍
[2] ARP 属于哪层协议

CVTE 2017 秋季校招笔试题回忆(C++后台)相关推荐

  1. 华为 2017 秋季校招笔试题(C++ 后台)

    文章目录 1.删除字符串中的指定字符 1.1 问题描述 1.2 问题求解 2.成绩排名 2.1 问题描述 2.2 问题求解 3.字符串变换最小费用 3.1 问题描述 3.2 递归法求解 3.2 动态规 ...

  2. CVTE 2017 秋季校招一面(C++ 后台)

    文章目录 0.前言 1.找出数组中第 k 大的数(手写代码) 2.从n个数中找出最小的k个数(n>>k),最优平均时间复杂度是多少 4.C 如何模拟实现 C++ 的类? 5.TCP 与 U ...

  3. 2017京东校招笔试题

    题目内容来自牛客网https://www.nowcoder.com/ta/2017test 1.进制均值 题目描述 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机 ...

  4. 暴风影音2017年校招笔试题-选择题

    1.静态变量通常存储在进程的哪个区?() A.栈区. B.全局区 C.堆区 D.代码区 2.已知一棵二叉树,如果中序遍历的节点顺序是3415726,后序遍历是3147625,则先序遍历结果是:() A ...

  5. 02 2018美团机器学习职位秋季校招笔试题及解答

    目录 一.逻辑题 01. 第一题 02. 第二题 03. 第三题 04. 第四题 05. 第五题 06. 第六题 07. 第七题 08. 第八题 09. 第九题 10. 第十题 11. 第十一题 12 ...

  6. 凑硬币(58同城2017校招笔试题)

    凑硬币(58同城2017校招笔试题) 暴力破解,循环递归实现,代码如下: /** * 暴力破解,循环递归,找出了所有可能的组合并进行了存储,* 在循环递归的时候,因为选取的分类相互是有重叠的,生成的递 ...

  7. 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...

    原标题:2017美团点评的运维岗校招笔试题,测测你会几题? 1.数据库:以下哪项不是HASH索引的特征? A MySQL不能确定在两个值之间大约有多少行 B 不能使用hash索引来加速ORDER BY ...

  8. 数据分析真题日刷 | 欢聚时代2018校招笔试题-产品经理/数据分析/游戏运营/市场专员 A卷

    今日真题 欢聚时代2018校招笔试题-产品经理/数据分析/游戏运营/市场专员 A卷(来源:牛客网) 题型 客观题:单选5道,不定项选择10道 主观题:问答4道 完成时间 90分钟 牛客网评估难度系数 ...

  9. 美团2023年春招在线前端笔试题回忆版

    提示:题目不一定完全正确,只能说给大家参考会考察哪些知识点. 文章目录 前言 一.单选(计算机基础知识) 二.专项选择 三.编程题 1. 某地有一个火车站如下图所示,小红很好奇火车是怎么驶进驶出的,然 ...

最新文章

  1. 2022-2028年中国BOPET薄膜行业市场全景调查及投资前景预测报告
  2. python、C++ 中通过OpenCV的DNN模块使用YoloV4
  3. [jillzhang]ExtJs与WCF交互:生成树 --数据库版补充
  4. struts2 的struts.properties配置详解
  5. 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
  6. Visual Studio图形调试器详细使用教程(基于DirectX11)
  7. 使用Zuul和Spring Boot创建API网关
  8. oracle下载配置文件,oracle 11G、12C BBED 配置和库文件下载!
  9. oracle中的数据对象
  10. c语言b20等于多少,C语言程序:温度DS19B20显示
  11. debug跳出循环_Java基础-第04章:循环结构「云图智联」
  12. 锁屏界面_强迫症必爱!iPhone怎样隐藏锁屏界面的手电筒、相机图标?
  13. 基于Nodejs的前端灰度发布方案_20190228
  14. 时光倒流我这么学java
  15. android logo在线生成工具,在线生成logo
  16. 14个最常用的app测试工具推荐,拿走不谢!
  17. 微信小程序:上传的图片显示旋转问题
  18. js可以打开mat文件吗_企业微信最大可以传多大文件?企业微信发送文件有限制吗?...
  19. base64编码类------源代码(C#)
  20. 19-Linux计划任务

热门文章

  1. 开源服务器 Jenkins 曝漏洞,可用于发动 DDoS 攻击
  2. Jenkins 文档特别兴趣小组
  3. Chronos首页、文档和下载 - 作业调度器 - 开源中国社区
  4. Dalvik虚拟机的内存管理
  5. OpenJudge 2972(确定进制)
  6. 专家教你如何设置无线路由器 享受无线乐趣
  7. C/C++位域知识小结
  8. awk '/#BEGIN/,/#END/{next}1' 1是什么意思?-转
  9. 蓝桥杯 ALGO-160 算法训练 P0104
  10. [Java] 蓝桥杯ALGO-103 算法训练 完数