笔试题记录

一、*TVE在线笔试

三个测试,c++软件工程师的测试感觉不难,反而前面的行测题因为漫不经心地做,最后发现题量略多,做不完,也是醉了。。。
下面凭借印象记一下几个不大确定的题目,仅当做个人的自我反省,毕竟是第一次啊,准备各种不充分。

1、IOS七层模型中各层的相关协议

网际层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。
传输层协议:TCP协议、UDP协议。
应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。

2、TCP与UDP的类似之处

3、中断响应时间是指什么

中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前必须先记住当前正在做的事情,然后去处理发生的事情,处理这个过程的时间,叫做中断响应时间。
注意:是“处理”中断的时间。

4、析构函数

析构函数不返回任何值,没有函数类型,也没有函数参数,也不能重载。

5、传值

 void sub(int x,int y,int*z) 
{
 *z=y-x;
}
 main()
 {
  int a,b,c;
  sub(10,5,&a);
  sub(7,a,&b);
  sub(a,b,&c); 
  printf("%4d,%4d,%4d\n",a,b,c); 
 }
答:
sub (10,5,&a); // a=5-10
sub(7,a,&b); // b= (-5)-7
sub(a,b,&c); // c= (-12)-(-5)
sub函数的三个参数前两个是传值的,对原来的变量不会修改,第三个参数是指针,对它的修改就是修改原来main函数里的变量。基础题目,差点搞错了。
函数传参:传值、传址、传引用
传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。
传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。
如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。
因而如果int,char等固有类型,而是你自己定义的类或结构等,都建议传指针或引用,因为他们不会创建新的对象。

6、linux显示一个文件最后几行的命令tail

tail -n 行数
注意:是tail不是less,差点又搞错了

7、微机中存储速度最快的当然是——内存啦!

8、排序算法的空间复杂度:快排最大

9、基本有序序列排序最快的是——插入或者冒泡!

排序方法     比较次数       移动次数     稳定性   辅助空间
                   最好    最差    最好  最差                   最好   最差
冒泡排序     n        n^2        0      n^2        是          1          1
快速排序 nlogn    n^2     logn      n          否        logn       n
堆排序     nlogn  nlogn    nlogn  nlogn     否           1         1
 
而当待排序列已基本有序时,对冒泡排序来说是最好情况,对快速排序来说就是最差情况,而堆排序则最好最差都一样。因此本题答案是冒泡排序。

10、三叉树的度数

度数,可理解为子树个数,二叉树结点最多有两个子树,所以二叉树结点的度数最大为2。
题目给出0度和2度的节点个数,求1度的节点个数(貌似)
类似的题目如下:
在—棵度为3的树中,若有2个度为3的结点,有1个度为2的结点,则有__(9)__个度为0的结点。
A.4   B.5    C.6   D.7
因为三叉树中所有结点的度数均不大于3,所以结点总数(记为n)应等于0度结点数、1度结点(记为n1)、2度结点数(n2)和3度结点数(n3)之和:
                     n=no+n1+n2+n3 (式子1)
     另一方面,1度结点有一个孩子,2度结点有两个孩子,3度结点有三个孩子,故三叉树中孩子结点总数是:
                      nl+2n2+3n3
  树中只有根结点不是任何结点的孩子,故二叉树中的结点总数又可表示为:
                      n=n1+2n2+3n3+1 (式子2)
  由式子1和式子2得到:
                      no=n2+2n3+1
选C

二、*VTE软件工程师笔试

三、*易CC语言TTT笔试

第一次霸笔,忘了带简历,还用草稿纸徒手写了一份简历.....

1、事物四个特性:

原子性(Atomicity[ætə'mɪsɪti])原型atomic、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
忘了俩,只写了俩,醉了。

2、linux进程查看和调度命令

1)进程查看命令是ps和top
ps -- 查看前台进程(当前活动进程)
top -- 是动态显示系统状态的信息(正在运行进程)
 2)进程调度命令有at,crontab,batch,kill
Kill + 进程号  -- 这个命令是杀死进程,如果杀不死的话,还可以使用Kill -9 + 进程号 强制删除进程
at -- 是设置某一个命令某个时间一次性完成
cron服务,提供定时器的功能,可执行重复性的和周期性的操作
batch:不需要指定时间,自动在系统空闲的时候执行指定的任务。其他用法与at相似

3、执行main函数之前

main函数执行之前主要是初始化系统资源
1、设置栈指针。
2、初始化static静态和global全局变量,即data段内容。
3、将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容。
4、运行全局构造器,估计是C++中构造函数之类的吧
5、将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数
至此,我们可以总结出:定义在main( )函数之前的全局对象、静态对象的构造函数在main( )函数之前执行。

4、深拷贝个浅拷贝


1)浅拷贝:

就是对象的数据成员之间的简单赋值,如你设计了一个没有类而没有提供它的复制构造函数,当用该类的一个对象去给令一个对象赋值时所执行的过程就是浅拷贝,如:
class A { public: A(int _data) : data(_data){} A(){}
private: int data; };
int main() { A a(5), b = a; // 仅仅是数据成员之间的赋值 }

 在某些状况下,类内成员变量需要动态开辟堆内存,如果实行位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指向同一块内存。这就出现了问题:当B把内存释放了(如:析构),这时A内的指针就是野指针了,出现运行错误。

2)深拷贝:

指的就是当拷贝对象中有对其他资源(如堆、文件、系统等)的引用时(引用可以是指针或引用)时,对象的另开辟一块新的资源,而不再对拷贝对象中有对其他资源的引用的指针或引用进行单纯的赋值。


  深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。下面举个深拷贝的例子。

5、判断cpu大小端

1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

#include <stdlib.h>  
int main()  
{  
  
    int a=0x1234;  
    char b=*(char*)&a; //char型指针转换 
    if(b==0x12)  
        printf("big end\n");  
    else  
        printf("little end\n");  
    return 0;  
    }  

6、数据库操作

1)case函数

表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列,否则C。

select A,B,C,
     (case when A > B then A else B end) as D,
     (case when B > C then B else C end) as E
from testTb

2)子查询




7、C++虚基类和虚拟继承
下面程序的输出结果是(    C   )
#include <iostream>
using namespace std;
class Base 
{
  public:
     Base(int i) { cout << i; }
     ~Base () { }
};
class Base1: virtual public Base 
{
  public:
     Base1(int i, int j=0) : Base(j) { cout<< i; }
     ~Base1() {}
};
class Base2: virtual public Base 
{
  public:
     Base2(int i, int j=0) : Base(j) { cout<< i; }
     ~Base2() {}
};
class Derived : public Base2, public Base1 
{
  public:
     Derived(int a, int b, int c, int d) :mem1(a), mem2(b), Base1(c), 
                                        Base2(d), Base(a) 
    { cout << b; }
  private:
     Base2 mem2;
     Base1 mem1;
};
void main() { Derived objD (1, 2, 3, 4); }
A)134122      B)123412       C)14302012     D)143212
下面程序的输出结果是(    C   )
分析:
建立Derived类对象objD(1, 2, 3, 4),首先调用构造函数Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), Base2(d), Base(a) { cout << b; }
在构造函数Derived中先调用虚基类Base的构造函数,即Base(a),将a的值1传给i,(Base(int i) { cout << i;)输出i值为1
然后根据声明顺序(class Derived : public Base2, public Base1 )Base2在前,接着调用Base2(d),将d的值传给i,(Base2(int i, int j=0) : Base(j) { cout << i; })输出i值为4,由于Base为虚基类,只有最远端派生类构造函数Derived才能调用虚基类的构造函数,该派生类的其他基类对虚基类构造函数的调用被忽略,所以系统不会做 : Base(j)
再调用Base1(c), 将c的值传给i,(Base1(int i, int j=0) : Base(j) { cout << i; }),输出i值为3,同理系统不做: Base(j)
然后根据对象成员声明顺序(Base2 mem2; Base1 mem1;)先做mem2(b), 即调用构造函数Base2(int i, int j=0) : Base(j) { cout << i; },在Base2构造函数中需要先调用Base构造函数,把j=0传值给i,(Base(int i) { cout << i;)输出i值为0,再将b=2的值传给构造函数Base2中的i,输出i值为2
接着做mem1(a),同mem2(b),调用Base1构造函数时先调用Base构造函数,输出i值为0,再将,a=1的值传给构造函数Base1中的i,输出i值为1
最后做构造函数Derived中的{ cout << b; },输出b值为2
结果:14302012
8、DNA逆序对

四、*讯软件测试在线考
1、linux文件名解析

我们以lsfile.sh为例:

2408949 -rwxr-xr-x 1 root root    7 04-21 12:47 lsfile.sh

inode 的值是:2408949
文件类型:文件类型是-,表示这是一个普通文件; 关于文件的类型,
d 目录;- 普通 ;l 链接

文件权限:文件权限是rwxr-xr-x ,表示文件属主可读、可写、可执行,文件所归属的用户组可读可执行,其它用户可读可执行;

硬链接个数: lsfile.sh这个文件没有硬链接;因为数值是1,就是他本身;
文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root;
文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组;
文件大小:文件大小是7个字节;
访问可修改时间 :这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的

2、ip头、tcp头,mtu,计算ip包长度

3、何时需要进程调度

 调度什么时候发生?即:schedule()函数什么时候被调用?
1)主动式
当进程需要等待资源等而暂时停止运行时,会把状态置于挂起(睡眠),并主动请求调度,让出cpu。

2)被动式(抢占)
 有更高优先级的进程抢占cpu,当有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程 。

访问临界资源算不算?

4、10.10.2.98/24求主机号
属于A类地址,子网掩码为255.0.0.0,则主机号为10.2.98

5、TCP慢启动时间求解
拥塞控制:慢启动、拥塞避免、快重传

慢启动:如果带宽为W,那么经过RTT*log2W时间就可以占满带宽。

6、会进入windows系统消息队列的消息
鼠标、键盘等驱动,首先将事件转换为消息放置在系统消息队列中,然后系统又通过窗口来确定将其放入到哪个线程消息队列中。

7、sql授权test用户针对student表的select、update指令

1)授权命令 grant,语法格式(SQL语句不区分大小写):
Grant  <权限>  on  表名[(列名)]  to  用户 With  grant  option

或 GRANT <权限> ON <数据对象> FROM <数据库用户>  

2)回收权限 revoke
REVOKE <权限> ON <数据对象>  FROM <数据库用户名>

8、数据库索引、保证数据库同一时间不被多个用户修改是事物还是数据库锁

9、计算99999的1的个数

10、main函数中fork()输出
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
    1)在父进程中,fork返回新创建子进程的进程ID;
    2)在子进程中,fork返回0;
    3)如果出现错误,fork返回一个负值;

11、访问cache 3000次,访问主存200次,求cup平均访问时间

12、给定进程数以及相应需要资源,求不死锁的最小资源数
组合所需资源+进程数 > 每个进程需要的资源之和(一般已知)

13、(a+b)>c&&b= =c后c的值是多少
看错题了,应该是求表达返回值,涉及到短路求值,需注意
a+b>c&&b!=c (a=3,b=4,c=5)
 => (3 + 4 > 5) && ( 4 != 5)
 => (7 > 5) && (4 != 5)
 => 7 > 5 为 true 那么就会去比较 4 != 5(&&->如果是false那么就不会去判断后面的条件)
 => 4 != 5 也为 ture
 => 表达式的值就为 ture

结果:表达式a+b>c&&b!=c的值为 ture
14、64位windows下htonl(1)
1——0x00000001
htonl(1)——0x01000000

在网络编程里,网络字节序是big-endian的,而大部分的PC的系统都是X86处理器系列,X86采用的是little-endian,所以需要将

网络数据流转换成本地数据流的话,需要进行字节序的转换。

标准库里提供了hlton()和nthl()两个函数来支持转换。

hston(unsigned short), hlton(unsigned long)  将本地字节序转换为网络字节序

ntohl(unsigned long), ntohs(unsigned short)  将网络字节序转换为本地字节序

int main()
{
   printf("%d /n",htons(16));
      return 0;
}
得到的结果是4096,初一看感觉很怪。

    解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。 由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。如果用IBM等大尾端机器,则没有这种字节顺序转换,但为了程序的可移植性,也最好用这个函数。


15、**++cp 二维数组

16、给定带宽、tcp窗口和延迟,求吞吐量

举例 :tcp的收发窗口大小为1024Byte,网络的链路带宽是1Mb/s,往返时延RTT是50ms,问最大吞吐率?
带宽1Mb/S=125000 Byte/s  
Packet =1024+20+20+14+12+8+4=1102Byte
线速的话125000/1102≈113pps   因往返时延50ms,所以1s内packet为1000ms/50ms=20次往返,小于线速113pps,于是最大吞吐率=(1102Byte*20)/125000Byte/s=17.632%

17、abcd*4 = dcba
——>abcd = 2178
四位数×4=四位数
所以千位没有对万位进位,a=1或2;
又因为整数乘以4的末位不会是1,所以a=2;
d×4末位是2,那么d=3或者8,因为a=2,所以d=8;
2bc8×4=8cb2,百位对千位也没有进位,所以b=0,1,2
因为c×4的末位是偶数,d(8)×4进到十位的数字为3,偶数+3只能是奇数,所以b只能是奇数,b=1;
21c8×4=8c12,
个位8×4的进位是3,结果的十位是1,所以c×4的末位是11-3=8,所以c=2或7;
百位1×4结果是4,加上c×4+3的进位,仍等于c,那么c只能是7

18、先序遍历和中序遍历相同
空或者左子树为空

19、tcp端口映射

20、tcp短连接参数配置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值