笔试选择题汇总(随缘更新)

AOP面向切面编程?

简言之、这种在运行时,编译时,类和方法加载时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

就是python的装饰器,,,,

 

 

感觉这个常考:连通图的问题,

①n个顶点的连通无向图, 最多n(n-1)/2 条边, 最少n-1条边

②n个顶点的强连通有向图, 最多n(n-1) 条边,最少n条边

③n个顶点的弱连通有向图, 最多n(n-1)条边, 最少n-1条边

 

 

例1  假设系统中有m个同类的互斥资源,当n个进程共享这m个互斥资源时,每个进程的最大需求数是w。在下列情况中,系统可能会产生死锁的是______。

A.m=4,n=3,w=2

B.m=4,n=2,w=3

C.m=5,n=2,w=3

D.m=5,n=3,w=2

答案是B。

就是个估算问题,给每个进程分配资源。如A, 先给3个进程分给1个资源,总资源还剩一个,这种情况不会死锁。

对于B, 先给2个进程每个分配1个资源, 还剩两个, 再分配一次, 系统没资源了,但是进程需求是3, 进程会发生抢占现象。

 

或者用公式:
m >= n(w-1)+1 才不会出现死锁, 翻译下就是,资源总数 >= 进程数 * (每个进程需求资源数-1) +1

 

例2 m个进程共享n个互斥资源,则每个进程最多申请__个资源时, 系统才不会死锁?

根据m >= n(w-1)+1 求出w,   w<= (m+n-1) / m

 

关注Java3y公众号的概率是5%,收藏Java3y的文章概率是20%,收藏Java3y的文章后会关注Java3y的公众号的概率是20%,已知某开发者看到Java3y公众号之后关注了。那么该开发者收藏过Java3y的文章概率是多少?

通俗解析:

  • 1、关注概率=5%。
  • 2、关注有两种情况,收藏关注,不收藏关注 。
  • 3、收藏关注概率=0.2*0.2=0.04,那么不收藏关注的概论是0.01
  • 4、在已知用户购买的情况下:收藏的概率是0.04/(0.01+0.04)=80%

公式解析:

  • 设A为关注,B为收藏。 已知P(A)=5%, P(B)=20%, P(A|B) = 20%。,所以P(B|A)=P(AB)/P(A) = P(A|B)P(B)/P(A) = 80%.

 

 

假设基准值为数组首元素的快速排序,要使得数组满足非降序排列,下列数据分布导致快排算法效率最低的是____。

  • 2-6-3-7-5-1-4
  • 6-2-3-5-4-1-7
  • 7-5-3-2-4-1-6
  • 1-5-7-2-4-6-3
  • 1-2-3-4-5-6-7
  • 4-1-3-7-5-6-2

解析:基本有序的情况下:快排最慢。所以选择的是1-2-3-4-5-6-7

 

关与线程和进程,描述正确的是(多选):

  • A:同一个进程的线程之间共享内存,包括堆和栈
  • B:线程在资源消耗上通常要比进程轻量
  • C:进程的隔离性要好于线程
  • D:进程间有途径共享大量内存中的数据

解析:选择BCD

  • A选项:栈数据是线程自有的
  • B选项:引出线程就是因为(管理/切换/创建/销毁进程)进程消耗资源太多了
  • C选项:进程之间的资源是独立的,子进程使用copy_on_write技术复制父进程的资源;而同一个进程中的线程共享资源,每个线程拥有自己的栈和相应的寄存器;
  • D选项:用于进程间通讯(IPC)的四种不同技术:
    • 一、 消息传递(管道,FIFO,posix和system v消息队列)
    • 二、 同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯)
    • 三、共享内存区(匿名共享内存区,有名Posix共享内存区,有名System V共享内存区)
    • 四、 过程调用(Solaris门,Sun RPC)

 

var x= 1;

var y = 0;

function add(n){

        n = n+1;

}

y = add(x);

  • A. 1
  • B. 2
  • C. 3
  • D. undefined

解析:选择D

  • 没有明确的return,返回的是undefined

 

下列哪些是JSON格式结构(多选)

  • A. {id:'1',name:'do1'}
  • B. ['java','javascript']
  • C. {'java','javascript'}
  • D. [id:'1',name:'do1']

解析:选择AB

类似pyhon的字典和列表, 不过这个字典的键没有引号。

  • JSON建构于两种结构:
    • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
    • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

 

 

下列对正则表达式描述正确的是:

  • A. \D匹配一个数字字符
  • B. \s匹配任何不可见字符,包括空格,制表符,换页符等等
  • C. \t匹配一个换页符
  • D. \n匹配回车换行符

解析:选择B

  • \D匹配一个非数字字符
  • \s匹配任何不可见字符,包括空格、制表符、换页符等等
  • \t匹配一个制表符。
  • \n匹配一个换行符。
    • \r匹配一个回车符

 

 

 

Linux解压的命令(多选)

  • A. tar zxvf filename.tar
  • B. gzip -d filename.gz
  • C. gzip filename
  • D. tar czxf filename.tar

解析:选择AB

  • 考察Linux的解压命令

 

 

有一亿条记录,每条记录有id,ip,时间组成。设计一个系统能够快速查询以下内容:给定ip和时间段(精确到分钟)统计ip的访问次数,请写出创建SQL的语句

答:首先,1000亿条记录全部放到内存肯定不够,那就是分成小文件了,然后整合;
公共的时间段,因为精确到分钟,我们把这每一分钟建成一个小文件,每个小文件肯定会有许多重复的ip,url;
现在统计每个小的文件中url的访问量和ip的访问次数,方法就是建立索引;
(建立索引的目的是为了减少查询次数,但是随着索引级数增多也会造成花更多的时间在建立索引上);
建立url的索引,假如是www.nowcoder.com/question,可以分别给www.nowcoder.com和question建立索引,那么来了一条url,先看一级索引是不是匹配,匹配再看二级索引,相同的话就是我们要的url目标;
ip的索引也是一样,ip分成4段建立索引;
所以这里影响效率的就是在索引建立这块,索引建立好那就是查询的事了的,就会变得非常快。
假定给定了某个时间段,找出url的访问量,那么先找到给定的时间段,对应着刚开始分割的小的文件(每一个分钟)中搜索,通过索引找到相同的url之后,开始统计,直到搜索完所有的给定时间段内的所有的小的文件;
求ip的访问次数也是一样,按照给定的时间段,找到对应的小的文件,通过索引找到相同的ip后统计,直到搜索完了给定时间段内的所有的小的文件。

 

92^500 除以 11 的余数是 ()

92^500   除以11的余数 与 4^500 除以11的余数相同

4^500 = 16 ^250 除以11的余数与 5^250除以11的余数相同

5^250 = 25^125 除以11的余数与 3^125除以11的余数相同

3^125 = 243^25 除以11的余数与 1^25  除以11的余数相同 

答案是1

 

在TCP连接中,主动断开的一方发出了FIN包之后,socket处于什么状态?()

CLOSE_WAIT

 

使用nginx将http请求转发请求到后端服务,后端服务不可用的时候会返回什么状态码?(502)

400 - Bad Request,请求无效,说明请求没有提交到后台服务中;

404 - Not Found,无法找到服务器;

500 - Not Implemented,服务器不支持当前请求所需要的某个功能;

502 - Bad Gateway,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应网关错误。是由于对用户访问请求的响应超时造成的

 

 

下面哪种排序算法对序列[8,10,35,27,87] 最快?()

当给定序列接近有序时,用冒泡和插入排序比较快。

 

 

5个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是()。

程序段最多允许三个进程进入,则表示资源的数目为3,因此,信号量初值为3,每进入一个进程,信号量的值减1,当信号量的值减为0时,表示三个进程均进入程序段,此时若再有一个进程请求进入执行P操作,则信号量的值减为-1,进程阻塞。一共有五个进程,所以信号量的值最小为-2。因此信号量的值取值范围为3,2,1,0,-1,-2

 

 

假设 A = 0x123456 ,在大端模式下首字节为 0x12 ,在小端模式下首字节为 0x56。

例子16bit宽的数0x1234在两种模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址小端模式存放内容大端模式存放内容
0x40000x340x12
0x40010x120x34

大端按顺序两个两个读,小端按逆序量两个两个读

 

 

1. 假设某一虚拟存储系统采用先进先出(FIFO)页面淘汰算法,有一个进程在内存中占3页(开始时内存为空),当访问如下页面序列号后1,2,3,1,2,4,2,3,5,3,4,5,6会产生  6 次缺页。

访问1,缺页,调入1,内存中1

访问2,缺页,调入2,内存中1,2

访问3,缺页,调入3,内存中1,2,3

访问1,不缺页,内存中1,2,3

访问2,不缺页,内存中1,2,3

访问4,缺页,调入4,淘汰1,内存中4,2,3

访问2,不缺页,内存中4,2,3

访问3,不缺页,内存中4,2,3

访问5,缺页,调入5,淘汰2,内存中4,5,3

访问3,不缺页,内存中4,5,3

访问4,不缺页,内存中4,5,3

访问5,不缺页,内存中4,5,3

访问6,缺页,调入6,淘汰3,内存中4,5,6

 

 

在局域网上执行 ping www.qiniu.com 没有涉及到的网络协议是?(TCP)

ARP
DNS
TCP
ICMP

255.255.254.0 网段最多能支持 _____ 台主机? ()

255.255.254.0 的二进制:
11111111 11111111 11111110 00000000

由二进制可以得出主机数为 9 个二进制位 (2^9)   因为有9个0

因为在每个网段中都包括一个广播地址 和 一个网络地址   任何情况都减掉2个
所以实际子网可容纳主机数为:2^9 - 2 = 512 - 2 = 510                 

 

5 个骰子,六个面分别标有1-6,现在将五个同时随机投掷,五个点数之和概率最大的点数是

参考答案
(1) 17, 18。

单个骰子的期望为 :
1*1/6 + 2*1/6 + 3*1/6 + 4*1/6 + 5*1/6 + 6*1/6 = 3.5 
5个骰子相互独立,期望就是3.5*5=17.5,17或18为最接近的点数。

 

验证远端服务器(IP:180.97.72.166)的 1935 端口是否开启的命令是

telnet 180.97.72.166 1935

 

(简答题)一个单向链表从头到尾遍历每个节点只会访问到一次,则为无环链表,如果存在节点会被重复遍历,则为有环链表。试解答:

(1)如何判断一个单向链表是否存在环?(4分)

(2)如果链表有环,如何找到环的入口节点?(8分)

(3)如何计算环的长度?(3分)

1)用pFast, pSlow 两个指针去遍历链表,pFast 每次移动两次,pSlow每次移动一次。pFast 追上pSlow 代表有环,如果直接遇到空指针退出,则无环

(2)当pFast 和 pSlow 相遇的时候,一定是pFast 领先了pSlow 一圈,则说明pSlow此时到环起点的距离,与环起点和head 指针间的距离相等。将pFast 放置在head 节点,并且与pSlow 同等速度移动。最终相遇地点为环的入口节点。

(3)在环上任意移动,回到当前节点即可计算出环的长度

 

Linux的进程通信方式有哪些 1(至少给出3个)

 管道 或 消息队列 或 信号量 或 共享内存 或 套接字

 

 

各种数据查找擦插入和删除的操作时间
数据结构searchinsertdelete
数组O(n), 有序数组O(logn)O(1)O(q)
双向链表O(n)O(1)O(1)
排序二叉树O(logn)O(logn)O(logn)
哈希表O(1)O(1)O(1)
B+ 树插入操作平均时间复杂度是O(logn),最坏时间复杂度是O(nlogn)

 

一个20个顶点的连通无向图,其边的个数最少,最多分别为(19, 190)

对图中任意顶点u、v,都存在路径使u、v连通。对于最少边数,由于是无向图故为n-1;对于最多边数,先考虑有向图,全出现为n(n-1),由于是无向图,故为n(n-1)/2.

 

 

数据库的并发操作有可能带来以下哪些不一致性问题?()

并发操作带来的数据不一致性主要有丢失修改,不可重复读,读“脏”数据。

 

两人相约见面,约定第一人到达后,等15分钟不见第二人来就可以离去。假设他们都在14点至14点半的任一时间来到见面地点,则两人能见面的概率是

 

有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。(假设每次摔落时,如果没有摔碎,则不会给鸡蛋带来损耗)

我们先假设最坏情况下,鸡蛋下落次数为x,即我们为了找出N,一共用鸡蛋做了x次的实验。 那么,我们第一次应该在哪层楼往下扔鸡蛋呢?先让我们假设第一次是在第y层楼扔的鸡蛋, 如果第一个鸡蛋在第一次扔就碎了,我们就只剩下一个鸡蛋,要用它准确地找出N, 只能从第一层向上,一层一层的往上测试,直到它摔坏为止,答案就出来了。 由于第一个鸡蛋在第y层就摔破了, 所以最坏的情况是第二个鸡蛋要把第1到第y-1层的楼都测试一遍,最后得出结果, 噢,原来鸡蛋在第y-1层才能摔破(或是在第y-1层仍没摔破,答案就是第y层。) 这样一来测试次数是1+(y-1)=x,即第一次测试要在第x层。OK, 那如果第一次测试鸡蛋没摔破呢,那N肯定要比x大,要继续往上找,需要在哪一层扔呢? 我们可以模仿前面的操作,如果第一个鸡蛋在第二次测试中摔破了, 那么第二个鸡蛋的测试次数就只剩下x-2次了(第一个鸡蛋已经用了2次)。 这样一来,第二次扔鸡蛋的楼层和第一次扔鸡蛋的楼层之间就隔着x-2层。 我们再回过头来看一看,第一次扔鸡蛋的楼层在第x层,第1层到第x层间共x层; 第1次扔鸡蛋的楼层到第2次扔鸡蛋的楼层间共有x-1层(包含第2次扔鸡蛋的那一层), 同理继续往下,我们可以得出,第2次扔鸡蛋的楼层到第3次扔鸡蛋的楼层间共有x-2层, ……最后把这些互不包含的区间数加起来,应该大于等于总共的楼层数量100,即

  1. x + (x-1) + (x-2) + ... + 1 >= 100

  2. (x+1)*x/2 >= 100

得出答案是14。

即我先用第1个鸡蛋在以下序列表示的楼层数不断地向上测试,直到它摔破。 再用第2个鸡蛋从上一个没摔破的序列数的下一层开始,向上测试, 即可保证在最坏情况下也只需要测试14次,就能用2个鸡蛋找出从哪一层开始, 往下扔鸡蛋,鸡蛋就会摔破。

14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99, 100

 

 

X=+0111001,Y=+1001101,求[X-Y]补=

[X-Y]补 = [X]补 + [-Y]补

 

[X]=00111001,[Y]=11001101(符号位正数为0,负数为1)

[Y]反=10110010,(符号位不变,其它位取反)

[X]补=00111001,(正数的补码等于它本身,也就是原码)

[Y]补=10110011,(负数在反码的基础上+1)

相加得 11101100

 

以数据集{1,6,8,2,9,4}为权值构造一棵赫夫曼树,其带权路径长度为

 

组成数字1到1234的所有数字的各位的总和是

千位上出现数字和为1*235=235       1000-1234    (1234-1000+1)=235 

百位上出现数字和为45*100+1*100+2*35=4670    100-999  100个1. 100个2, 100个3...-->45*100,  1100-1199  100个1,  1200-1234, 35个2

十位上出现数字和为45*120+1*10+2*10+3*5=5445

个位上出现数字和为123*45+4+3+2+1=5545

235+4670+5445+5545=15895

 

 

关于CPU load的说法,哪个是正确的:(2)

是当前系统的进程数量
是当前系统中所有ready和running状态的进程数量
是当前系统中running状态的进程数量

CPU load可以这样来理解:

假设一个单核单处理器的CPU是一条单向车道,车太多了的话所有车都排成一条线通过

如果别人需要知道这条路上的流量到底是多少,一个相当好的指标就是某一时间有多少车在等待:

如果没有车在等待,那么新来的车可以直接通过,如果有车在排队了,新来的车就要延迟通过

所以我们用CPU load来表示这条车道上的车流量:

0.00 表示路上没有任何流量,事实上0.00 到1.00 之间的值都表示这条公路上没有任何阻塞

1.00 表示这条路刚好达到最大容量,如果再多一辆车,就要排队了

排队的车就是ready,路上的车就是running

 

 

于虚拟内存的说法,正确的是:()

正确答案: A D   

虚拟内存隔离了各个进程的内存空间
虚拟内存就是swap空间
虚拟内存就是物理内存
虚拟内存可以防止应用程序直接访问物理地址。

 

 

桌上有1到1000号,1号右手边是2号,左手边是1000号。1号开枪打死2号,把枪交给3号,3号打死4号交给5号。。999号打死1000号后把枪交给1号,继续循环。最后留下来的是几号?

 

说着个叫做约瑟夫环,

1, 剩下两个人,拿枪的1活下来,

2, 剩下4个人, 1活下来,

3, 剩下8个人, 1活下来,

4,也就是说, 当拿到枪时,剩下的人是2^n, 那么他就能活下来,

5,所以2^9=512个人时, 拿到枪的, 才能活下来。死掉了488人, 那么他时2*488+1=977

 

ping 程序所使用的协议是

ICMP

 

假设在某个系统中,24*13=334成立,那么该系统采用的进制是_进制

设进制数为x;接下来就是解一个一元二次方程:(2x+4)*(x+3) = 3x^2+3x+4;算出答案x=8

3x^2+3x+4 是334对应的进制数。

 

 

盒子A有2个红球和3个蓝球, 盒子B有3个红球和1个蓝球。按照以下方式选择一个球:

1) 选择一个盒子。选择盒子A和盒子B的概率分别是1 / 3, 2 / 3

2) 从上一步选的盒子里选择一个球。该盒子里所有球被选择的概率是相等的。

如果最后选出来的球是红球,那它是从盒子A中选出来的概率是()

P(A|B)=P(A∩B)/P(B)

P(A|红)=P(红|A)*P(A)/P(红)

P(红|A)=2/5

P(A)=1/3

P(红)=1/3*2/5+2/3*3/4

 

在intel CPU上,以下多线程对int型变量x的操作,哪几个不是原子操作,假定变量的地址都是对齐的。()

正确答案: A B C  

x=y
x++
++x
x=1

 

IPV4中,数据包传播方式包括以下的(  A B D      )   任播是IPV6加入的新技术。

广播
单播
任播
组播

 

2、 已知关系模式:

S (SNO,SNAME) 学生关系。SNO为学号,SNAME为姓名;

C (CNO,CNAME,CTEACHER) 课程关系。CNO为课程号,CNAME为课程名,CTEACHER为任课教师;

SC(SNO,CNO,SCGRADE)选课关系。SCGRADE为成绩。

1)   找出没有选修过“李明”老师讲授课程的所有学生姓名;

2)   列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩;

3)   列出既学过课程名为“1”的课程,又学过课程名为“2”的课程的所有学生姓名;

4)   列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩。

1)select SNAME from S where not exit (selcet S.SNAME from S inner join SC on S.SNO=SC.SNO inner join C on C.CNO=SC.CNO where C.CTEACHER="李明");

 

2.select s.sname, avg(sc.scgrate) from s inner join sc on s.sno=sc.sno group by s.sno having count(if (sc.scgrade < 60,1,0)) >=2;

3 select s.sname from s inner join sc on s.sno = sc.sno inner join sc as s1 on sc.sno = s1.sno
where c.cname="1" in (select * from s inner join sc on s.sno = sc.sno inner join sc as s1 on sc.sno = s1.sno
where c.cname="2")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值