美团2018校园招聘 研发工程师(一)

1.单选题
在网络应用测试中,网络延迟是一个重要指标。以下关于网络延迟的理解,正确的是?
A.指响应时间
B.指报文从客户端发出到客户端接收到服务器响应的间隔时间
C.指报文在网络上的传输时间
D.指从报文开始进入网络到它开始离开网络之间的时间
答:网络延迟是指在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间。所以选D。


2.单选题
一个栈的入栈序列是a,b,c,d,e,f,则栈的不可能的输出序列是()
A.fedcba
B.defbca
C.defcba
D.abcdef
答:根据栈先进后出的规则。所以选B。


3.单选题
0, 6, 24,60, 120, ?
A.186
B.200
C.210
D.220
答:数字推理,因为0=13-1,6=23-2,24=33-3,60=43-4,120=53-5,则 ?=63-6 可知 ?=210。


4.单选题
设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S。若每个元素出栈后立即进入推列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是?
A.1
B.2
C.3
D.4
答:根据栈先进后出和队列先进先出的规则。所以选C。


5.不定项选题
对于一个分布式计算系统来说,以下哪三个指标不能同时完成?
A.一致性
B.可用性
C.安全性
D.分区容错性
答:CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得 ,CAP原则是NOSQL数据库的基石。
因为要在分布式系统中,所以我们优先保障可分区性,即P,此时C和A只能保证一个:
如果保证了一致性,则我们的每次操作,都要求完全一致后才成功,这会严重影响可用性,
如果保证了可用性,则无法保证一致性。

好像分布式系统中最常用的是最终一致性。所以选ABD。


6.单选题
操作系统中关于竞争和死锁的关系下面描述正确的是?
A.竞争一定会导致死锁
B.死锁一定由竞争引起
C.竞争可能引起死锁
D.预防死锁可以防止竞争
答:

产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划。处理死锁:1.预防死锁 2.避免死锁 3.检测死锁 4.解除死锁。所以选C。


7.单选题
如果某系统15*4=112成立,则系统采用的是几进制?
A.6
B.7
C.8
D.9
答:设使用的是p进制,则15*4=112等价于:(p + 5) * 4 = p^2 + p + 2,解出来p=-3(舍去)和p=6。所以选A。


8.单选题
现有二叉搜索树(BST)前序遍历结果序列为abdefgc,中序遍历结果序列为debgfac,请问后序遍历结果序列?
A.debgfac
B.edgfbca
C.edgbfca
D.degbfac
答:根据先序遍历知道a是根节点,那么根据中序遍历a的位置,知道debgf在左枝,c在右枝;再对根据bdefg的先序遍历可知b为左枝的根节点……以此类推。所以选B。


9.单选题
以下设计模式中,哪一项不属于结构性模式?
A.适配器模式
B.代理模式
C.命令模式
D.装饰模式
答:

扫描二维码关注公众号,回复: 5984558 查看本文章

1.创建型模式:
前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:

简单工厂模式(Simple Factory);

工厂方法模式(Factory Method);

抽象工厂模式(Abstract Factory);

创建者模式(Builder);

原型模式(Prototype);

单例模式(Singleton)。

说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。


2.结构型模式

:在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

外观模式(Facade);

适配器模式(Adapter);

代理模式(Proxy);

装饰模式(Decorator);

桥模式(Bridge);

组合模式(Composite);

享元模式(Flyweight)。


3.行为型模式:

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

模板方法模式(Template Method);

观察者模式(Observer);

状态模式(State);

策略模式(Strategy);

职责链模式(Chain of Responsibility);

命令模式(Command);

访问者模式(Visitor);

调停者模式(Mediator);

备忘录模式(Memento);

迭代器模式(Iterator);

解释器模式(Interpreter)。所以选C。


10.单选题
一副扑克(52张,不含大小王),抽出两张牌,一红一黑(不考虑先后顺序)的概率是多少?
A.1/2
B.26/51
C.1/3
D.25/51
答:概率题,p=C(26,1)*C(26,1)/C(52,2)=26/51。或者,第一次抽到的肯定是红的或黑的,则第二次抽到另一种颜色的可能性就是26/51,第一次抽了一张,剩下51张,若第一张抽到的是红牌,则黑牌有26张,故答案为26/51。所以选B。

11.单选题
假设一段公路上,1小时内有汽车经过的概率为96%,那么,30分钟内有汽车经过的概率为?
A.48%
B.52%
C.80%
D.96%
答:1小时有车的概率 = 1 - 1小时没车的概率 = 1 - 2个0.5小时都没车的概率 = 1 - (1 - 0.5小时有车的概率)^2。
故,1-(1-x)^2=0.96,解得x = 0.8。所以选C。


12.单选题
当n=5时,下列函数的返回值是:
int foo(int n){
if(n<2){
return n;
}
else
return 2*foo(n-1)+foo(n-2);
}
A.5
B.11
C.29
D.10
答:简单的递归。所以选C。


13.不定项选题
下面哪个是版本控制工具?
A.safari
B.svn
C.git
D.xcode
答:本地版本控制系统(RCS)、集中化的版本控制系统(CVCS)例如Svn、分布式版本控制系统(DVCS) 例如Git。参考链接:https://blog.csdn.net/it_laobai/article/details/81625857。所以选B、C。


14.不定项选题
下列能实现一个正整数N对256求余运算的代码是:
A.N%256
B.N<<8
C.N>>8
D.N & 0xFF
答:对256取余,255表示为0xFF(11111111),只需取出N低8位部分,其他位置为0,故使用运算符&。>>8和<<8是移位处理,会将N缩小或放大2的8次方倍,缩小时会失去低8位即余数。所以选A、D。


15.不定项选题
我们用a^b 来表示a的b次幂,那么下列算是判断正确的是?
A. 2.1^3.1>3.1^2.1
B. 2.1^3.1<3.1^2.1
C. 2.1^4.1>4.1^2.1
D. 2.1^4.1<4.1^2.1
答:

1:2.1^3.1 < 3.1^2.1

只需证 ln2.1 / 2.1 < ln3.1 / 3.1
只需证 ln2.1 / 2.1 < ln3.15 / 3.15 (f = lnx/ x 当 x > e 时为严格减函数,因此已有ln3.15/3.15 < ln3.1/3.1)
只需证 3*ln2.1 < 2*ln3.15
只需证 2.1^3 < 3.15^2
实际上,2.1^3 = 9.261 < 9.925 = 3.15^2
故原式成立


2:2.1^4.1 > 4.1^2.1
只需证 ln2.1/ 2.1 > ln4.1 / 4.1
只需 ln2.05/2.05 > ln4.1 / 4.1(类似1,f=lnx/ x 当 x < e 时为增函数,因此必有ln2.1 / 2.1 > ln2.05 / 2.05)
只需 2*ln2.05 > ln4.1,即2.05^2 > 4.1。
实际上,2.05^2 = 4.2025 > 4.1
上式成立
所以选B、C。


16.单选题
进行数据库提交操作时使用事务(Transaction)是为了?
A.提高效率
B.保证数据一致性
C.网络安全
D.归档数据文件
答:

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。所以选B。


17.单选题
下面的程序执行输出几个hello?
#include<stdio.h>
#include <unistd.h>
int main( ) {
fork( );
fork( );
fork( );
printf(“hello\\n”);
return 0;
}
A.3
B.4
C.6
D.8
答:fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

fork(); //2个进程
fork(); //4个进程
fork(); //8个进程
printf(“hello\n”);
所以选D。


18.不定项选题
下面哪些机制可以用于进程间通信?
A.Socket
B.Named pipe
C.Named event
D.Critical Section
E.Shared memory
F.Virtual memory
答:进程间通信:
1.管道(pipe)及有名管道(named pipe)2.信号(signal)
3.消息队列(message queue)4.共享内存(shared memory)5.信号量(semaphore)6.套接字(socket)。所以选A、B、E。
拓展:

Linux进程间通信:管道、信号、消息队列、共享内存、信号量、套接字(socket)

Linux线程间通信:互斥量(mutex),信号量,条件变量

Windows进程间通信:管道、消息队列、共享内存、信号量 (semaphore) 、套接字(socket)

Windows线程间通信:互斥量(mutex),信号量(semaphore)、临界区(critical section)、事件(event)

猜你喜欢

转载自www.cnblogs.com/parzulpan/p/10755833.html