1.设x、y、t均为int型变量,则执行语句:t=3; x=y=2; t=x++||++y; 后,变量t和y的值分别为____。
At=1 y=2 Bt=1 y=3 Ct=2 y=2 Dt=2 y=3 Et=3 y=2 Ft=3 y=3
思路:x++||++y执行后的结果是真,即1,然后赋值给t。因为是或运算,所以在判断x++时真后,后面的++y就不再执行了,所以y值没有变还是2。
正解A
2.已知int a[]={1,2,3,4,5};int*p[]={a,a+1,a+2,a+3};int **q=p;表达式*(p[0]+1)+**(q+2)的值是____。
A5 B6 C7 D8 E4 F9
思路:链接:https://www.nowcoder.com/questionTerminal/9e04f5a58b724df5abfb4f974e397339
来源:牛客网
int a[]={1,2,3,4,5};
int*p[]={a,a+1,a+2,a+3};
int **q=p;
*(p[0]+1)+**(q+2)
其中p[0]=a也就是a[0]的地址,这里的p里的每个带a的值,可以理解成是对应a的下标,最开始的a可以理解成下标,p[0]+1=a+1就是a[1]的地址,*(p[0]+1)就是a[1]的值就是2,**q=p --> *q=&p -->表示q保存的是p 的地址,q+2表示p[2]的地址,*(q+2)表示p[2],**(q+2)表示*p[2]表示*(a+2)就是a[2]的值就是3,
所以,*(p[0]+1)+**(q+2)=5
默认为初始为0,所以,q+2就是p[2]
正解A
3.以下是一个有向图,我们从节点B开始进行深度优先遍历(DFS),那么以下5个序列中,所有正确的DFS序列是____。
1、BADECF 2、BADEFC 3、BCAFDE 4、BCFDEA 5、BFDECA
A245 B24 C13 D123 E12345 F12
思路:深度优先遍历,遍历一个分支直到不能继续,然后遍历另一个分支,直到遍历完所有的分支。
正解A
4.对于192.168.0.0到192.168.0.255这个网络来说,以下说法中正确的是____。
A网段内可用来作为主机IP的范围是:192.168.0.0到192.168.0.255
BNetwork IP是192.168.0.255
CBroadcast IP是192.168.0.0
D网段内的主机可以通过网卡对网卡传递数据
E192.168.0.1和192.168.0.2的主机需要使用Router传递数据包
F是class B等级
思路:
链接:https://www.nowcoder.com/questionTerminal/68ec64e960484f2d894fd969eb54392c
来源:牛客网
A. 错: 分配IP地址时关于主机标识要注意。用比特位表示主机地址时,不可以全为0或全为1
全为0:表示对应的网络地址或IP地址不可获知的情况
全为1:表示主机地址通常作为广播地址
这也是C类地址每个网段只能有254(2^8-1)个主机的原因
B. 错: 广播地址是主机位全为1,C类地址主机位占用后面8为,故为192.168.0.255;
C. 错: 网络地址是主机位全为0,故为192.168.0.0。
D. 对
E. 该网段的主机之间可以直接传递数据包,不需要经过路由器
F. 错: 是class C 等级
正解D
5.下列各项技术中,目的与程序的容错(fault-tolerance)最不相关的是____。
Afail fast
Bgraceful degradation
Cbackup
Dsandbox
Echeckpoint
Fwatchdo
思路:
链接:https://www.nowcoder.com/questionTerminal/422f8a3da3b244d9acacca9e64970e5a?toCommentId=23250
来源:牛客网
fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。
fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。
fail-fast是错误机制,不是容错机制。
1.graceful degradation (优雅降级):优雅降级(Graceful degradation)是指电脑,机器,电子系统或者是网络在本身大部分已经毁坏或无效的情况下还能保持有限的功能这种能力。优雅降级的目的是阻止灾难性的失败。理想情况下,有优雅降级特征的系统即使多个组件同时失效也不会引起停机。在优雅降级中,操作的效率和速度随着失效部件的增加逐渐下降。
2.sandbox(沙盒/沙箱) 用于为一些来源不可信、具备破坏力或无法判定程序意图的程序提供试验环境。然而,沙盒中的所有改动对操作系统不会造成任何损失。通常这种技术被计算机技术人员广泛使用,尤其是计算机反病毒行业,沙盒是一个观察计算机病毒的重要环境。 影子系统 即是利用了这种技术的软件之一。
有时沙盒也叫 沙箱 ,英文 sandbox 。在计算机领域指一种 虚拟技术 ,且多用于 计算机安全技术 。其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。当某个程序试图发挥作用时,安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。
3.watchdog:在由 单片机 构成的 微型计算机系统 中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称" 看门狗 "。
看门狗是恢复系统的正常运行及有效的监视管理器。
正解A
6.将整数序列(7-2-4-6-3-1-5)按所示顺序构建一棵二叉排序树a(亦称二叉搜索树),之后将整数8按照二叉排序树规则插入树a中,请问插入之后的树a中序遍历结果是____。
A1-2-3-4-5-6-7-8
B7-2-1-4-3-6-5-8
C1-3-5-2-4-6-7-8
D1-3-5-6-4-2-8-7
E7-2-8-1-4-3-6-5
F5-6-3-4-1-2-7-8
思路:二查搜索树中序遍历一定是有序的
正解A
7.设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。
A三者相同
B只有先序和中序相同,与后序不同
C只有中序和后序相同,与先序不同
D只有先序和后序相同,与中序不同
E视树的情况而定
F三者都不相同
思路:
四种主要的遍历思想为:
前序遍历:根结点 ---> 左子树 ---> 右子树
中序遍历:左子树---> 根结点 ---> 右子树
后序遍历:左子树 ---> 右子树 ---> 根结点
层次遍历:只需按层次遍历即可
例如,求下面二叉树的各种遍历
前序遍历:1 2 4 5 7 8 3 6
中序遍历:4 2 7 5 8 1 3 6
后序遍历:4 7 8 5 2 6 3 1
层次遍历:1 2 3 4 5 6 7 8
从例子看出,叶子节点的顺序是都不变的。
正解A
8.给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
AO(N^2) BO(log N) CO(N) DO(N^3) EO(N^2LogN) FO(N^4)
思路:
链接:https://www.nowcoder.com/questionTerminal/7d79ca5b122c44d59ec9ff77d0b5624d?toCommentId=24090
来源:牛客网
求数列中两两的和,O(N^2);
对刚才求完的这N^2个数排序,O(N^2*log(N^2))=O(N^2*logN);
对排好的序列(N^2个数)找两者的和为sum,从两头向中间凑,O(1);
合计:O(N^2*logN)
正解E
9.A,B,C三位同学都是很聪明的同学,面试官给他们背上依次贴上了数字2,4,8,他们都能看见别人的数字但无法看见自己的数字,现在面试官告诉他们这些数字都是自然数并且构成一个等比数列,让A、B、C同学依次循环回答是否确定自己的数字是多少,每位同学的回答算作一次,经过____次有同学能准确说出自己的数字。
A2 B3 C4 D5 E6 F7
思路:每个人至多看三次就可以说出自己的数字了。
链接:https://www.nowcoder.com/questionTerminal/35a1f4f35a4442c1bcd34b6f50574891
来源:牛客网
1、第一次是A,此时他看到4和8,能判断出来等比是2,自己的数字可能是2或者16。回答不确定
2、第二次是B,此时他看到2和8,此时等比可能是2,那么自己的数字是4;或者等比是4,自己的数字是32。B知道A能看到8和自己的数字,如果自己的数字是4,那么A有两种可能,所以A回答不确定;如果自己的数字是32,那么A仍然有多种可能,所以A仍然可以回答不确定。所以B此时不能通过A的回答排除其中一种可能性。回答不确定
3、第三次是C,此时他能看到2和4,能判断等比是2,自己的数字可能是1或者8。C知道B能看到2和自己的数字,如果自己的数字是1,那么对B来说只能是4,是确定的。但B回答不确定,所以可以排除这种可能。因此C能确定自己的数字是8。
正解B
10.
以下程序在32位机器上运行输出是____。
#include<iostream>
using namespace std;
class animal
{
protected:
int age;
public:
virtual void print_age(void) = 0;
};
class dog : public animal
{
public:
dog() {this -> age = 2;}
~dog() { }
virtual void print_age(void)
{
cout<<"Wang, my age = "<<this -> age<<endl;
}
};
class cat: public animal
{
public:
cat() {this -> age = 1;}
~cat() { }
virtual void print_age(void)
{
cout<<"Miao, my age = "<<this -> age<<endl;
}
};
int main(void)
{
cat kitty;
dog jd;
animal * pa;
int * p = (int *)(&kitty);
int * q = (int *)(&jd);
p[0] = q[0];
pa = &kitty;
pa -> print_age();
return 0;
}
AWang, my age = 2
BWang, my age = 1
CMiao, my age = 2
DMiao, my age = 1
E程序编译报错
F程序运行报错
思路:
这是一个取巧的改变虚表指针的办法,它利用了C++的对象模型的特点。我们知道,一个类有了虚函数后,它会有一个虚表来维护虚函数和一个虚表指针__vptr来指向它,而这个程序利用的即是改变虚指针的指向。它首先&kitty,并且转换为int*,获得cat类的虚表首地址,同样&jd获得dog类的虚表地址,而p[0] = q[0]令指向cat的虚表首地址,一下就变成了指向dog类的虚表首地址,然后基类获取到了这个指向dog类的kitty,调用虚方法则自然调用到了dog的print_age,然后这里的age则依然保留的是cat的,因为你只是改变了虚指针指向的虚表地址,不影响member data.
作者:蓝色
链接:https://www.zhihu.com/question/29256578/answer/43720445
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
正解B
11.假设某棵二叉查找树的所有键均为1到10的整数,现在我们要查找5。下面____不可能是键的检查序列。
A10,9,8,7,6,5 B2,8,6,3,7,4,5 C1,2,9,3,8,7,4,6,5 D2,3,10,4,8,5 E4,9,8,7,5 F以上均正确
思路:
链接:https://www.nowcoder.com/questionTerminal/dfdfc7f18a234a768aabd4021eda3652
来源:牛客网
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根节点点的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。
先看A选项,第一个节点值为10,比要查找的5大,所以要接下来要比较10的左子树,左子树上的值一定比10小,而选项A中的第二个查找值是9,合理。此时,9仍然比待查找的数字5大,要继续查找9的左子树,左子树比9小,而查找的下一位数字为8,合理。依次类推。。。。
所以有:对任意点,后面元素(不管前面)要么全部大于它,要么全部小于它
正解B
12.下面代码在64位Linux系统编译执行,输出结果是____。
#include <stdint.h>
#include <stdio.h>
void print_size(int32_t array[10]){
printf("%d\\n", sizeof(array));
}
int main () {
int32_t myArray[10];
printf("%d ", sizeof(myArray));
print_size(myArray);
}
A20 4 B40 4 C80 4 D40 8 E80 8 F以上均不正确
思路:
链接:https://www.nowcoder.com/questionTerminal/f026e167ca1a4ae0ab49d300794aeaca
来源:牛客网
本题要注意几点:
1、sizeof(数组名),返回的整个数组占据的字节数。在这里,数组长度为10,每个4字节,所以,总共40字节。
2、在64位操作系统中,地址为64位,也就是指针64位,占8字节。
2、通过函数调用后,数组名退化成指针,占8字节。
正解D
13.两个市区C1和C2,其人口比率是1:3,从今年的患病统计来说,C1市区由于污染严重,患癌的概率是0.1%,而C2市的患癌概率是0.02%,现在医院接收到一位患癌病人,他是C1市区来的概率是____。
A62.5% B25% C75% D77.5% E50% F70%
思路:
链接:https://www.nowcoder.com/questionTerminal/55306d46631b4435868a2efb6aaa6b42?from=14pdf
来源:牛客网
这题实际上计算的是条件概率
设患癌为事件A
来自C1且患癌的概率P(A|C1) = 0.1%;
来自C2且患癌的概率P(A|C2) = 0.02%;
来自C1的概率:P(C1 ) = 1/(3+1) = 0.25;
来自C2的概率:P(C2 ) = 3/(3+1) = 0.75;
P(AC1) = P(C1)* P(A|C1) = 0.25 * 0.1%
P(AC2) = P(C2)* P(A|C2) = 0.75 * 0.02%
P(A) = P(AC1) + P(AC2) = 0.04%
现在要求的是P(C1|A) = p(AC1)/P(A) = 62.5%
正解A
14.有8只球队,采用抽签的方式随机配对,组成4场比赛。假设其中有4只强队,那么出现强强对话 (任意两只强队相遇)的概率是____。
思路:
第一个人选择对手有7种可能,第二人选择对手有5种,第三个人选择有3种,剩余两个人为一组对手,共7*5*3
强强不做对手,有4*3*2*1种
故有1-4*3*2*1/(7*5*3)=27/35
正解E
15.以下关于STL的描述中,____是错的。
ASTL容器是线程不安全的
B当容量不够时,vector内部内存扩展方式是翻倍
Cstd::sort是稳定排序
Dstd::bitset不是一个STL容器
Estd::stack默认是用deque实现的
Fstd::string中可以存储多个’\\0’字符
思路:
链接:https://www.nowcoder.com/questionTerminal/e38151104a6447ef83649faa4abe4f68
来源:牛客网
A:“很多程序员希望STL实现是完全线程安全的“。所以不安全。
B:vector的存在可以使开发者不必关心内存的申请和释放。但是,vector的一个缺点就是它的内存分配是按照2的倍数分配内存的。
C:错误。要知道 std::sort 不是稳定的排序算法,它不保证“相等”元素的相对位置,使用 std::stable_sort 来保证这一点
D:STL的容器可以分为以下几个大类:
一:序列容器, 有vector, list, deque, string.
二 : 关联容器, 有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap
三: 其他的杂项: stack, queue, valarray, bitset
E:正确。堆栈是一个线性表,插入删除操作都在一端进行,deque是先进先出的,操作原理和stack是一样的
正解C
16.如下SQL语句中,____可能返回null值。
(1) select count(*) from t1;
(2) select max(col1) from t1;
(3) select concat('max=',max(col1)) from t1;
A(1)可能,(2)和(3)不可能
B(2)可能,(1)和(3)不可能
C(3)可能,(1)和(2)不可能
D(1)不可能,(2)和(3)可能
E都不可能
F都可能
思路:
(1)返回的是表的行数,如果没有记录,应该返回0,不会出现NULL,
(2) 和(3) 正常情况下不会出现NULL,但是如果表里面没有记录,则会出现NULL
正解D
17.下列选项中,识别模式与其他不一样的是____。
A用户年龄分布判断:少年、青年、中年、老年
B医生给病人诊断发病类型
C投递员分拣信件
D消费者类型判断:高消费、一般消息、低消费
E出行方式判断:步行、骑车、坐车
F商家对商品分级
思路:可以理解为,E中的类型划分标准是客观的,不需要不是主观界定的;而其余选项中的界定标准是主观设置的,不同的主管对象设置标准可能会出现不同,所以它们和E中的划分标准不同。
分类和回归的区别。E是清晰的分类问题,其余选项是不清晰的,需要划分范围。 解决回归的办法就是转化为分类。
正解E
18.某开发团队有6位开发同学,需参加5个项目, 每个项目都有人做 ,每位同学需要恰好参加1个项目,那么总共有____ 种不同的分配方案
A7200 B3600 C2700 D1800 E900 F30
思路:
从6个人选出5个人,即要分成两组,5人组(A~E)和1人组(F)。那么,采用组合时(不考虑顺序),先选【五人组(A~E)和1人组(F)】,和先选【1人组(F)和五人组(A~E)】,重复了,所以,需要3600/2=1800。
正解D
19.小赵和小钱二人分别从寝室和图书馆同时出发,相向而行。过了一段时间后二人在中途相遇,小赵继续向图书馆前进,此时:若小钱继续向寝室前进,则当小赵到达图书馆时,小钱离寝室还有600米;若小钱立即折返向图书馆前进,则当小赵到达图书馆是,小钱离图书馆还有150米。那么图书馆与寝室间的距离是____。
A1300m B1250m C800m D1050m E1100m F900m
思路:
正解F
20.用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0。
A6 B8 C10 D12 E14 F16
思路:
链接:https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17
来源:牛客网
对于3进制,3的质因数为3,将30!的每个因子分解成质因数的形式,末尾0的个数就是质因数的3的个数。我们只考虑3的倍数,3、6、12、15、21、24、30每个数贡献1个3,9、18贡献2个3,27贡献个3,因此质因数3的个数为1*7+2*2+3*1=14个
数有几个每个数的因子可以贡献几个3
正解E