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开始存放)为:
内存地址 | 小端模式存放内容 | 大端模式存放内容 |
0x4000 | 0x34 | 0x12 |
0x4001 | 0x12 | 0x34 |
大端按顺序两个两个读,小端按逆序量两个两个读
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个)
管道 或 消息队列 或 信号量 或 共享内存 或 套接字
数据结构 | search | insert | delete |
数组 | 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,即
-
x + (x-1) + (x-2) + ... + 1 >= 100
-
(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")