java 2017腾讯面试题_腾讯2017刁难面试题,是不是大神就看你会做几题

原标题:腾讯2017刁难面试题,是不是大神就看你会做几题

一.今日头条2017笔试题(决策问题)

现在有两堆石子,小今与小条玩游戏,2个人都足够聪明,两个人规定:每次每人只能从其中一堆中取走1个或2个或3个石子,最后将石子全部取完的人胜利。现在两堆石子的个数为8和9,请问如何安排才能让小今必胜?

A. 让小今先取 B. 让小条先取 C. 没有策略让小今必胜 D. 以上说法都不对

答案是: 让小今先取。

其实这里是有规律可循的,可归结为 “取余制胜” 。详解如下:

一 取余制胜(取棋子,报数游戏)

1.每次取1~n个棋子,总数,取最后一个赢 策略:总数÷(1+n)

有余则先,拿掉余数,之后总与对手凑成1+n即可 无余则后,总与对手凑成1+n即可

2. 每次取1~n个棋子,总数,取最后一个输

策略:最狠的做法就是留给对方一枚棋子,对方不取也得取。所以想赢的关键就在于能不能取到倒数第二枚棋子。

问题转化为:每次取1~n个棋子,总数,取倒数第二枚棋子赢。 (总数-1)÷(1+n),之后同1中做法。

所以这道题,可以分两堆考虑,9个的那堆,9%(1+3) 等于1,所以小今首先取1,然后不管小天取几,都和他凑成4, 这样9这一堆,小今必定最后取。然后小天去取8那一堆,因为8%4 = 0.所以,需要后取,只要和小天所取凑够4就好OK了

二.搜狐2017笔试题(概率问题)

工程师M发明了一种游戏:M将一个小球随机放入完全相同的三个盒子中的某一个,玩家选中装有球的盒子即获胜;开始时M会让玩家选择一个盒子(选择任何一个获胜概率均为1/3);玩家做出选择后,M会打开没有被选择的两个盒子中的一个空盒,此时M会询问玩家是否更改选择(可以坚持第一次选择,也可以选择另一个没有打开的盒子),下列叙述正确的有()。

改选后,玩家获胜的概率还是1/3

若不改选,玩家的获胜概率是1/2

无论怎么选择,获胜的概率都是1/2

坚持原来的选择获胜概率更高

选择另一个没有被打开的盒子获胜概率更高

获胜概率取决于随机因素(如小球的实际位置)

解答:这道题目容易弄错的地方就在于,把第二次选择当作整个游戏。如果跳过前面的排除,直接跳到第二次选择:你现有的和剩下的一个盒子中只有一个装了球。当然换或者不换获胜的概率都是 1/2,但是综合前面的情况来看,第二次选择 获胜 有两种情况:

1. 不修改选择并获胜,表示第一次已经选对。概率为:1/3 * 1/2 = 1/6

2. 修改选择并 获胜,表示第一次选错。概率为:2/3 * 1/2 = 2/6

三.滴滴出行2017 算法笔试题:作弊概率

一位滴滴工程师开发出了一套简易作弊检测系统,此系统存在一定误差。如果一个用户确实存在作弊行为,但是此系统没有检测出的概率为5%;正常用户,但是误检为作弊的概率为1%;我们已经知道,一个用户作弊的概率为0.1%。目前一个人被此方法检测出有作弊,那此人确实有作弊的概率接近多少?

A 90% B 70% C 30% D 10%

这道题单凭想,还是挺容易选错的。而且还需知道贝叶斯定理。

贝叶斯定理是关于随机事件 A 和 B 的条件概率的一则定理

ebb35e3af6e3cd3b61653e9a06dfca8d.png

其中 P(A|B) 是在 B 发生的情况下 A 发生的可能性

在贝叶斯定理中,每个名词都有约定俗成的名称:

P(A|B) 是已知 B 发生后 A 的条件概率,也由于得自 B 的取值而被称作 A 的后验概率。

P(B|A) 是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。

P(A) 是 A 的先验概率(或边缘概率)。之所以称为”先验”是因为它不考虑任何 B 方面的因素。

P(B) 是 B 的先验概率或边缘概率。

知道了这个后,我们可以直接套公式:

设:

A 代表实际作弊了

B代表被检测作弊了

用!表示取反,P(!B|A) = 0.05 P(B|!A)=0.01 P(A) = 0.001

P(B|A) = 0.95 P(!A) = 0.999

由贝叶斯定理 P(A|B) = (P(B|A)P(A))/P(B) 用全概率替换分母: P(A|B) = (P(B|A)P(A)) / (P(B|A)P(A) + P(B|!A) P(!A)) =(0.950.001) / (0.950.001+0.01*0.999) =0.0868

所以最后的答案选择 D ,接近 10%

可能还是不能很好的理解这道题的,最后我们根据题意画成图,因为比例较小,不好画,因此本人适当的进行了放大。

ba1a53c361de2b629b2efcb6701726fe.png

四.乐视2017笔试题(有序数组)

对一个含有20个元素的有序数组做二分查找,数组起始下标为1,则查找A[2]的比较序列的下标为()

A. 9,5,4,2

B. 10, 5, 3, 2

C. 9, 6, 2

D. 20, 10, 5, 3, 2

(high-low)/2+low = middle; 下标从1开始,因为查找查找A[2], low始终为1;

(20-1)/2+1=10;

(10-1)/2+1 = 5;

(5-1)/2+1 = 3;

(3-1)/2+1 = 2;

五.2017滴滴Java工程师在线评测题(字符串空间问题)

static String str0="0123456789";

static String str1="0123456789";

String str2=str1.substring(5);

String str3=new String(str2);

String str4=new String(str3.toCharArray());

str0=null;

假定str0,…,str4后序代码都是只读引用。 Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()

A. 5 B. 10 C. 15 D. 20

这是一个关于Java的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。

年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。

年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收

永久代:存储的是final常量,static变量,常量池。

str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回,如下图:

public String substring(int beginIndex, int endIndex) {

if (beginIndex < 0) {

thrownew StringIndexOutOfBoundsException(beginIndex);

}

if (endIndex > count) {

thrownew StringIndexOutOfBoundsException(endIndex);

}

if (beginIndex > endIndex) {

thrownew StringIndexOutOfBoundsException(endIndex - beginIndex);

}

return ((beginIndex == 0) && (endIndex == count)) ? this :

new String(offset + beginIndex, endIndex - beginIndex, value);

}

140a1e7f963c18e34f75659aad28305a.gif public String substring(int beginIndex, int endIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } if (endIndex > count) { throw new StringIndexOutOfBoundsException(endIndex); } if (beginIndex > endIndex) { throw new StringIndexOutOfBoundsException(endIndex - beginIndex); } return ((beginIndex == 0) && (endIndex == count)) ? this : new String(offset + beginIndex, endIndex - beginIndex, value); }

经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C

六.腾讯笔试题(二叉树深度问题)

具有1000个节点的二叉树的最小深度为()(第一层深度为1)

A.11 B.12 C.9 D.10

要使得高度最小则必定是接近满二叉树,满二叉树的高度为 H(根节点为第一层),

则节点总数为 2^H-1, 511 = 2^9-1 < 1000 < 2^10-1 = 1023;

所以该二叉树的最小高度是 10,选D。

对于人生来说,其中任何目标的实现都离不开耐心。学习也是一样,需要多多积累知识,反复实践。只要坚持下去,你一定会成功的。如果你对互联网行业有浓厚的兴趣,如果你对成为IT精英有不一样的执着,如果你还在为怎样学习互联网知识而困惑,那就关注:前沿梦工场。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值