美团后台开发2017 年笔试小题

美团后台开发2017 年笔试小题

1.下述解决死锁的方法中,属于死锁预防策略的是?

A.银行家算法

B.资源有序分配法

C. 资源分配图化简法

D. 撤消进程法

答案:B
解析:
银行家算法:避免死锁
资源有序分配法:预防死锁
资源分配图化简法:检测死锁
撤销进程法:解决死锁
避免是在分配时的检测,预防是就按照这样分配。 两个起作用的时间不一样

2.下面代码输出的结果是?
public class NULL {

public static void print(){
System.out.println(“MTDP”);
}
public static void main(String[] args) {
try{
((NULL)null).print();
}catch(NullPointerException e){
System.out.println(“NullPointerException”);
}
}
}

A.NullPointerException

B.MTDP

C.都不输出

D.无法正常编译

答案:B
解析:
null不是对象,它可以看成是指向不确定对象的引用。
赋值时,基本类型赋初值不能为null,如int=0只能是这种,换而言之,int也没有为空这一说法,如果非要勉强说有,那就是0。
而对象赋初值可以将其设为null。
本列,null是java的关键字,故不用事先声明它,直接把null作为NULL对象的一个引用,调用print()方法。

3.下列代码的输出结果是(),
boolean result=false?false:true==false?true:false;
System.out.println(""+result+"");

A.true

B.null

C.false

D.空字符串

答案:C
解析:
三目运算符的运算顺序是自右向左。
result=false?false:truefalse?true:false;
可以写成 result={false?false:[(true
false)?true:false]};

4.进程和线程是操作系统中最基本的概念,下列有关描述错误的是?
A.进程是程序的一次执行,而线程可以理解为程序中运行的一个片段

B.由于线程没有独立的地址空间,因此同一个进程的一组线程可以访问该进程资源,这些线程之间的通信也很高效

C.线程之间的通信简单(共享内存即可,但须注意互斥访问的问题),而不同进程之间的通信更为复杂,通常需要调用内核实现

D.线程有独立的虚拟地址空间,但是拥有的资源相对进程来说,只有运行所必须的堆栈,寄存器

答案:D
解析:
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程

5.从装有3只红球,2只白球的盒子中任意取出两只求,则其中有并且只有一只红球的概率为?
A.1/2

B.1/5

C.3/5

D.2/5

答案:C
解析:
取2次,其中只有一个红球的组合

  1. 第一次为白球,第二次为红球 (2/5)*(3/4)=(3/10)
  2. 第一次为红球,第二次为白球 (3/5)*(1/2)=(3/10)
    结果为(3/10)+(3/10)=(3/5)

6.1024! 末尾有多少个0?
A.297

B.253

C.243

D.238

答案:B
解析:
末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。
是5的倍数的数有: 1024 / 5 = 204个
是25的倍数的数有:1024 / 25 = 40个
是125的倍数的数有:1024 / 125 = 8个
是625的倍数的数有:1024 / 625 = 1个
所以1024! 中总共有204+40+8+1=253个因子5。
也就是说1024! 末尾有253个0。
25包含了两个5,算5的时候只算了一个,所以要再算一次。125要再算一次。

7.从n个数中找出最小的k个数(n >> k),最优平均时间复杂度是?
A.O(nlogk)

B.O(klogk)

C.O(nlogn)

D.O(n2)

答案:A
解析:
1.先直接排序,再取排序后数据的前k个数。排序算法用最快的堆排序,复杂度也会达到O(NlogN)。当k接近于N时,可以用这种算法。
2.先排序前k个数,对于后面N-k个数,依次进行插入。时间复杂度为O(k
n)。当k很小时,可以用这种算法。
3.对前k个数,建立最大堆,对于后面N-k个数,依次和最大堆的最大数比较,如果小于最大数,则替换最大数,并重新建立最大堆。时间复杂度为O(N*logk)。当k和N都很大时,这种算法比前两种算法要快很多。

8.HTTP的会话有四个过程,请选出不是的一个?

A.建立连接

B.发出响应信息

C.发出请求信息

D.传输数据

答案:D
解析:
Http会话的四个过程:
建立连接,发送请求,返回响应,关闭连接。
传输数据的过程 封装在请求和相应的session中

9.下面哪些是interface中合法方法定义?

A.public static void main(String [] args);

B.boolean setFlags(Boolean [] results);

C.private float get(int x);

D.static int getCount();

答案:B
解析:
static方法在interface中要有body,故A、D错误
private修饰的方法不可以出现在interface中,故C错误
选择B(java 1.8 亲测)

10.一台主机安装了1GB的内存,操作系统为支持MMU的32位Linux发行版,现在运行了abc三个进程,以下哪些使用内存的方式是可以实现的?

A.abc各申请1GB

B.a申请500MB b申请500MB c申请25MB

C.abc一共申请256GB

D.abc各申请2.5GB

答案:A.B
解析:
有虚拟内存,可以申请大于物理内存的内存空间,但是32位系统最多只能寻址4GB空间。
在这里插入图片描述
11.下面代码输出的结果是?
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
print();
}
};
t.run();
System.out.print(“MT”);
}
static void print() {
System.out.print(“DP”);
}

A.DPMT

B.MTDP

C.MTDP和DPMT都有可能

D.都不输出

答案:A
解析:
start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。因此在启动一个线程的时候一定要使用start()而不是run()。

12.关于以下程序,正确的说法是?

  • String s1=“abc” + “def”;
  • String s2=new String(s1);
  • if(s1 == s2)
  • System.out.println(“=succeed=");
  • if(s1.equals(s2))
  • System.out.println(“=equals() succeed=");

A.行4与行6都执行

B.行4执行,行6不执行

C.行4不执行,行6执行

D.行4不执行,行6不执行

答案:C
解析:
s1,s2存储的位置不同。 s1存储在常量池中,s2存储在堆中。当调用"=="比较时,比较的是内存地址; 当调用"equals()"方法时,比较的是值。

13.关于实模式和保护模式的描述正确的是?

A.实模式下的地址是计算公式是:段值*16+偏移,其中段值16位,偏移16位,访问的地址范围1MB,如果程序访问超过1MB的地址,系统会发生异常

B.决定实模式与保护模式的关键是CR1寄存器中的PE位,当为0时为实模式,为1位保护模式

C.在保护模式下,通过调用门,可以实现不同特权级之间的代码转移

D.保护模式下,共有4个特权级别,0特权级的任务访问3特权级的段时会触发常规保护错误(#GP)

答案:C
解析:(计算机组成原理知识)
A:超过1MB会取模运算。
B:CR0寄存器的PG和PE位。PG是否分页,PE是否保护。
D : 0特权等级最高,可以任意访问.

14.下列需要使用队列做辅助存储空间的操作是?

A.查找哈希表

B.先序遍历二叉树

C.广度优先搜索图

D.深度优先搜索图

答案:C
解析:
广搜用队列,深搜用栈。
深度优先搜索,首先选择一个起始顶点并需要遵守三个规则:
(1) 如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。
(2) 当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。
(3) 如果不能执行规则1和规则2,就完成了整个搜索过程。
广度优先搜索:
在深度优先搜索中,算法表现得好像要尽快地远离起始点似的。相反,在广度优先搜索中,算法好像要尽可能地靠近起始点。它首先访问起始顶点的所有邻接点,然后再访问较远的区域。它是用队列来实现的。

15.关于数据库索引,以下说法正确的是?

A.针对某些字段建立索引,能够有效的减少相关数据库表的磁盘空间占用

B.针对某些字段建立索引,能够有效的提升相关字段的读与写的效率

C.常见数据库管理系统,通常使用hash表来存储索引

D.数据库索引的存在,可能导致相关字段删除的效率降低

答案:D
解析:
A:增加索引会增加磁盘占用
B:建立索引可以提升查询速度,即读速度;但在一定程度上降低写速度
C:数据库一般使用B*树作为索引
D:删除数据需要调整索引,所以会降低效率

16.把60个糖果分给5个小朋友,每个小朋友至少分到10个糖果,请问有几种分法?

A.126

B.330

C.1001

D.2973
答案:C
解析:
这道题答案的确是1001(C(14,4)即14个中取4个),这是排列组合中的挡板法得到的结果。 先拿出45(5*9) 个糖果每人平分。那么题目要求就变成15个糖果分给5人,每人最少一个,也就是在14个位置中放入4个 挡板,最后如结果1001。
切记不能像我开始一样,每人平分10个,最后再10个分给5人,每人最少0个,然后11个位置(加上1前面和10后面那两个位置)放4个挡板。如果这样分,中间三个人不可能出现得到0的情况,只有两边边上的才能得到0个糖果。

17.下列算法的时间复杂度是int fun(int n){
if(n<2){
return 1;
}
return n*fun(n-2);
}

A.0(nlog2n)

B.0(n)

C.0(n2)

D.0(log2n)

答案:B
解析:
这个函数一共只会执行约n/2次 操作。所以是o(n) ,带个数,比如6带进去算一下,就知道程序能执行几次了。

18.下面对于cookie的描述中错误的是?

A.用于实现session跟踪技术

B.Cookie是由服务器保存在客户端的文本文件,大小限制在4kb左右

C.Cookie在服务端与客户端之间往返时通过HTTP Headers进行传输

D.HTTP请求中的Cookie是加密传递的

答案:D
解析:
Cookie是客户端保存用户状态,Session是服务器端保存用户状态
在HTTP请求中的cookie是明文传递的,所以安全性成问题。(除非用HTTPS)

19.进程间的通信方式
1.管道
2.信号量
3.消息队列
4.信号
5.共享内存
6.套接字

第一个:1,extends 不是 extend。2,String 是 public final class String 无法继承。

第二个:1,this 只能在对象的方法里用,不能在 static 里面用,static 方法是这个类的方法,是静态的方法里面不能用 this。同理 getDiscountRate() 方法是对象的方法,如果要调用只能先 new 一个对象出来,然后使用这个对象的方法。或者将这个方法改成 static。

第三个:这是 Object 的 equals 方法,这里返回的 boolean 不是 Boolean

public boolean equals(Object obj) {
    return (this == obj);
}

21.下面java concurrent包下的4个类中差别最大的一个是?

A.CountDownLatch

B.Future

C.Semaphore

D.ReentrantLock

答案:B
解析:
A、Semaphore:类,控制某个资源可被同时访问的个数;
B、ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
C、 Future:接口,表示异步计算的结果;
D、 CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。

22.哪些设计模式能够提高系统扩展性?

A.singleton

B.abstract factory

C.adapter

D.Decorator

答案:BCD
解析:
A单例模式没有提高扩展性
B工厂方法实现松耦合,可以提高扩展性
C适配器模式可以将一个接口转换成另一个接口,方便引入外部接口
D装饰者模式可以扩展接口功能

23.下面对多线程和多进程编程描述正确的是?

A.线程的数据交换更快,因为他们在同一地址空间内

B.线程因为有自己的独立栈空间且共享数据,不利于资源管理和保护

C.多进程里,子进程可获得父进程的所有堆和栈的数据;

D.进程比线程更健壮,但是进程比线程更容易杀掉。

答案:ACD
解析:

24.有四个整数,用8位补码分别表示为r1=FEH, r2=F2H, r3=90H, r4=F8H。运算结构存入8位寄存器中,不会溢出的是?

A.r1*r2

B.r2*r3

C.r1*r4

D.r4*r2
答案:ACD
解析:
用补码表示时8位寄存器所能表示的整数范围为-128到+127。
r 1 =(15×16+14)-256=-2;
r 2 =(15×16+2)-256=-14;
r 3 =(9×16+0)-256=-112;
r 4 =(15×16+8)-256=-8;
则r 1 ×r 2 =28,r 2 ×r 3 =1568,r 1 ×r 4 =16,r 2 ×r 4 =112,只有r 2 ×r 3 结果溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值