2020-3-9刷题

以下代码输出什么?  B

int a =1,b =32 ;
printf("%d,%d",a<<b,1<<32);

1,1

B  1,0

C  0,0

D  0,1

 
<< 左移 用来将一个数的各二进制位全部左移N位,高位舍弃,低位补0。
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。
左移运算符(<<)将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数。

a的二进制值:0000 0001

b的二进制值:0010 0000

a<<b:a左移32位,得到结果1。

进行探索,

当a左移1位,printf("%d",a<<1); 打印结果是:2

当a左移2位,printf("%d",a<<2); 打印结果是:4

......

当a左移30位,printf("%d",a<<30); 打印结果是:1073741824

当a左移31位,printf("%d",a<<30); 打印结果是:-2147483648

当a左移32位,printf("%d",a<<30); 打印结果是:1

当a左移33位,printf("%d",a<<30); 打印结果是:2

当a左移34位,printf("%d",a<<30); 打印结果是:4

......

当a左移34位,printf("%d",a<<30); 打印结果是:4

...

当a左移62位,printf("%d",a<<30); 打印结果是:1073741824,得到:a<<30  ==  a<<62,30和62相差32

当a左移63位,printf("%d",a<<30); 打印结果是:-2147483648,得到:a<<31  ==  a<<63,31和63相差32

当a左移64位,printf("%d",a<<30); 打印结果是:1,得到:a<<32  ==  a<<64,32和64相差32

从表象来看,每左移32位便相当于没有移位的结果,猜到可能跟int类型占32位有关,事实的确这样:sizeof(int) = 4字节(b) = 32比特(bit)

通过以上推理得到公式:int a << b 可以理解为 int a << (b%32)

按照题意:int a =1,b =32,a<<b = a<<(32%32) = a<<0 = 1

而1<<32就是0000 0001 左移32位,高位舍弃,低位补0,最终则得到结果:0

 

(ps:个人目前的想法,可能不严谨,尚未找到权威答案,后续补充,欢迎提意见。其中部分思路来源于int类型左移位数超过32位的问题,比如1左移50位结果是什么


具有相同类型的指针类型变量p与数组a,不能进行的操作是: D

 

A  p=a;

 

B  *p=a[0];

 

C  p=&a[0];

 

D  p=&a;
 
a是二级指针,直接赋值给指针变量P会出现问题。

以下序列中不可能是一棵二叉查找树的后序遍历结构的是: B
A  1,2,3,4,5
3,5,1,4,2
C  1,2,5,4,3
5,4,3,2,1

上网的时候发现网页不能访问,QQ使用正常,出现此问题最可能的原因是

A  网线问题
B  DNS问题
C  IP地址冲突
D  网关错误
 
可能原因:网页本身的错误;浏览器故障;系统故障;
系统故障1:DNS服务器出错 2.HTTP代理错误 3.winsock恶意篡改

 有9个球,其中一个的质量与其他的不同,有一个天平,通过最多几次可以找出那个质量不一样的球? B

A  2

B  3

C  4

D  5

 

链接:https://www.nowcoder.com/questionTerminal/2b1ac592b56745b2969672c1c4e0d2c5?orderByHotValue=0&done=0&pos=3&mutiTagIds=602&onlyReference=false
来源:牛客网

此题说的是最多几次,如果是最少的话的,一次就有可能 如果一开始拿了8球分摊,如果相等,则剩下的就只有一个球,则这个球就是答案。
现在异常的球的质量为b,正常的球的质量是a。(a!=b)
选择6个球,放在天平上进行称量,每边都是三个。
1.如果天平没有倾斜,则表示这6个球都是正常的,即另外3个球中有一个球是b,则只需要拿其中一个球称量与另外两个球分别称量一次即可。如果两次都倾斜,则表示你拿的是异常的,反之,只有另一种可能,一次没有倾斜,一次倾斜,则一次没有倾斜的肯定都是a,剩余的就一定是b。
2.如果天平发生了倾斜,则表示这6个球中有一个是异常的。假设为a,a,a与a,b,a。拿另外3个替换左边3个或右边3个,如果天平没有倾斜,则可以得出替换掉的3个中有一个是异常的,如果倾斜,也可得到没有替换的3个中有一个是异常的,同时也可以得到a与b之间的关系(自己想一想)。知道有异常球的3个后,只要再任意拿其中2个,进行比较一次,如果相等,则另外一个是异常的,否则的话可以根据a与b之间的大小判定异常球!
总共才3次称量。

给字母重新进行二进制编码,以使得"MT-TECH-TEAM"(包含连字符,不包含引号)的长度最小.并能够根据编码,解码回原来的字符串.请问最优编码情况下该字串的长度是多少bit?   B
A  12
B  33
C  36
D  84
E  96

以下哪个ip不和10.11.12.91/28处于同一个子网  D
A  10.11.12.85/28
B  10.11.12.88/28
C  10.11.12.94/28
D  10.11.12.97/28

对进程和线程的描述,以下正确的是(  D )

A  父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间
B  改变进程里面主线程的状态会影响到其他线程的行为,改变父进程的状态不会影响到其他子进程
C多线程会引起死锁,而多进程不会
D  其他选项都不正确
 
A 答案错误 只有线程才能使用共同的父进程的地址空间 而子进程会会拥有自己的独立地址空间
https://segmentfault.com/q/1010000008695285/a-1020000008697506

B 答案错误 主进程的行为会影响子进程

C答案错误 多进程也会引起死锁

开发C代码时,经常见到如下类型的结构体定义:

typedef struct list_t{
    struct list_t *next;
    struct list_t *prev;
    char data[0];
}list_t;

请问在32位系统中,sizeof(list_t)的值为?   B

A  4byte
B  8byte
C  5byte
D  9byte

以下哪个属于在预编译阶段执行____,以下哪些指令属于操作符___C

a:malloc;  b:++;  c:#pragma;  d:sizeof;   e:#define

A  预编译c,e 操作符a,b
B  预编译c,d 操作符b,e
C  预编译c,e 操作符b,d
D  预编译a,d 操作符b,d

假设在x86平台上,有一个int型变量,在内存中的内部由低到高分别是:0x12,0x34,0x56,0x78当通过网络发送该数据时,正确的发送顺序是( B )
A  0x12,0x34,0x56,0x78
B  0x78,0x56,0x34,0x12
C  0x34,0x12,0x78,0x56
D  0x56,0x78,0x12,0x34
 
网络发送中是大端模式,低位高地址。

一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足?  C
A  所有的结点均无左孩子
B  所有的结点均无右孩子
C  只有一个叶子结点
D  是一棵满二叉树
 
先序遍历序列与后序遍历序列正好相反的树,结构如下:
 

先序遍历序列:ABCDE
中序遍历序列:EDCBA
后序遍历序列:EDCBA
这棵树的特点:
①先序和中序遍历序列正好相反
②中序和后序遍历序列一样


 

另一个树,不符合本题描述,作为补充扩展。

 

 

 

先序遍历序列:ABCDE
中序遍历序列:ABCDE
后序遍历序列:EDCBA
这棵树的特点:
①先序和中序遍历序列一样
②中序和后序遍历序列正好相反


 具有7个顶点的有向图至少应有多少条边才可能成为一个强连通图? B

A  6
B  7
C  8
D  12

由A地到B地,中间有一段扶梯,总路程和扶梯长度是固定的,为赶时间全程都在行走(包含扶梯上),中途发现鞋带松了,需要停下来绑鞋带.请问在扶梯上绑鞋带和在路上绑鞋带两种方式比较(  B )

A  路上绑鞋带,全程用时短
B  扶梯上绑鞋带,全程用时短
C  用时一样
D  和扶梯长度,绑鞋带具体用时有关
 

 HTTPS是使用( C  )来保证信息安全的.

A  SET
B  IPSEC
C  SSL
D  SSH

mysql数据库中一张user表中,其中包含字段A,B,C,字段类型如下:A:int,B:int,C:int根据字段A,B,C按照ABC顺序建立复合索引idx_A_B_C,以下查询语句中使用到索引idx_A_B_C的语句有哪些?A B D

A  select *from user where A=1 and B=1

B  select *from user where 1=1 and A=1 and B=1

C  select *from user where B=1 and C=1

D  select *from user where A=1 and C=1


C++中构造函数和析构函数可以抛出异常吗?  C
A  都不行
B  都可以
C  只有构造函数可以
D  只有析构函数可以

在x86系统下,sizeof如下结构体的值是多少? C

struct{ 
    char a[10];
    int b;
    short c[3];
}
A  20
B  22
C  24
D  26

开发C代码时,经常见到如下类型的结构体定义: 

typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;

最后一行char data[0];的作用是?  AB

A  方便管理内存缓冲区

B  减少内存碎片化

C  标识结构体结束

D  没有作用


以下关于linux操作系统中硬链接和软链接的描述,正确的是? B

A  硬链接和软链接指向的inode的编号是一样的
B  可以建立一个空文件的软链接
C  linux操作系统可以对目录进行硬链接
D  硬链接指向inode节点

将7723810的各位数字打乱排序,可组成的不同的7位自然数的个数是?  B
A  1080
B  2160
C  3240
D  4320
E  5040

对于满足SQL92标准的SQL语句:

select foo,count(foo)from pokes where foo>10group by foo having count (*)>5 order by foo 

其执行顺序应该是? A

A  FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

B  FROM->GROUP BY->WHERE->HAVING->SELECT->ORDER BY

C  FROM->WHERE->GROUP BY->HAVING->ORDER BY->SELECT

D  FROM->WHERE->ORDER BY->GROUP BY->HAVING->SELECT


以下哪些jvm的垃圾回收方式采用的是复制算法回收 A C D

A  新生代串行收集器

B  老年代串行收集器

C  并行收集器

D  新生代并行回收收集器

E  老年代并行回收收集器

F  cms收集器


HTTP中的POST和GET在下列哪些方面有区别?( ABCDE  )

A  数据位置

B  明文密文

C  数据安全

D  长度限度

E  应用场景


 

我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在1到40克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量?  B

A  3
B  4
C  5
D  6
E  7

链接:https://www.nowcoder.com/questionTerminal/1ed7b4017caf4e79ab0621089b4e3d0d?orderByHotValue=0&done=0&pos=1&mutiTagIds=602&onlyReference=false
来源:牛客网

此题可以看成用多少个数可以表示1-40之间任何一个数。砝码有三种状态,放在物体同侧,放在物体另一侧,并不使用。 所以这些数之间可以加可以减,也可以不计算在内。考虑用对称三进制来计算,即,-1,0,1三个状态。40可以用1111来表示,所以最多只用四个砝码就可以表示1-40之间所有数。


在linux系统中,有一个文件夹里面有若干文件,通常用哪个命令可以获取这个文件夹的大小: B

A  ls -h
B  du -sh
C  df -h
D  fdish -h

下列关于线程调度的叙述中,错误的是( C )

A  调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会
B  调用线程的yeild()方法,只会使与当前线程相同优先级的线程获得运行机会
C  具有相同优先级的多个线程的调度一定是分时的
D  分时调度模型是让所有线程轮流获得CPU使用权

Java的线程调度是基于优先级的抢先式调度,它总是选择高优先级的线程先执行。所以选项C正确。Thread提供了如下的基本线程控制方法:sleep (),线程暂停,让出CPU,使低优先级的线程运行;yield(),线程暂停,让出CPU,使同优先级的其他线程运行。如果不存在有机会运行的线程,yield()方法将直接返回,线程继续;join(),当前线程暂停,等待线程类对象运行结束。所以选项A和B正确。相同优先级的线程有可能采用分时调度也有可能是线程逐个运行,由具体JVM而定。


 

两个线程并发执行以下代码,假设a是全局变量,那么以下输出__ABCD__哪个是可能的?

int a=1;
void foo(){
    ++a;
    printf("%d",a);
}

A  3 2

B  2 3

C  3 3

D  2 2

 

链接:https://www.nowcoder.com/questionTerminal/c3c9998a7c1c4dc4a705a89066f85cd9
来源:牛客网

假设线程x和y同时执行,x和y可随时被抢占,a的初始值为1


A:3, 2
y先执行++a,a为2;
y再执行printf,a入栈,在打印到终端之前切换到x
x执行++a,a为3;
x执行printf,输出3;再切换到y
y执行打印,输出2

B:2 3
x先执行++a,a为2;
x再执行printf,输出2;切换到y
y执行++a,a为3;
y执行printf,输出3;

C:3 3
x先执行++a,a为2;切换到y
y执行++a,a为3;
y执行printf,输出3;切换到x
x执行printf,输出3

D:2 2

类似C, 执行++a操作但没有写回到内存

这里关键有两点:
(1)两个线程可随时被抢占
(2)++a和printf不是原子指令,可随时被打断;特别注意函数printf,a作为参数压栈后,a再变化则不会影响输出(printf实际打印的是压栈的参数,是值拷贝的栈变量)


 

在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章? C

A  应用层
B  表示层
C  会话层
D  传输层
E  网络层

 

posted @ 2020-03-09 12:59  厸清扬  阅读(340)  评论(0编辑  收藏  举报