阿里巴巴2016研发project师笔试题
问题1:
假设下列的公式成立:78+78=123,则採用的是_______进制表示的。
本题实则考察进制转换。能够设为x进制。可是x进制有一个问题。即我们无法对x进制直接进行加减乘除。故转化为我们常见的10进制。
78=7*x+8。123=1*x2+2*x+3;然后解方程就可以。答案为13进制。
问题2:
下列 java 程序输出结果为______。
int i=0; Integer j = new Integer(0); System.out.println(i==j); System.out.println(j.equals(i));
本题考察的是装箱与拆箱,==比較的是值,相同equals也是比較值。故选择true,true。
equals源代码例如以下:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
输出的是:hello and cb
问题3
有关下述Java代码描写叙述正确的选项是____。
public class TestClass { private static void testMethod(){ System.out.println("testMethod"); } public static void main(String[] args) { ((TestClass)null).testMethod(); } }
本题考察的是静态方法与 类&对象的关系,静态对象属于类,故无论对象是否为空,仍旧会正常执行,输出testMethod。
追问:若将方法static修饰符去掉。又是什么情况?
首先,不会是编译错误,由于符合Java对类型的检查。可是执行时会出现NullPointerException。
问题4
袋子中分别一叠纸币,当中5元面值的纸币6张,10元面值的纸币5张。20元面值的纸币4张,从袋子中随意取4张纸币,则每种面值至少取到一张的概率为____。
一共的票数为:6+5+4=15张
总的情况数:15张选4 C(15,4)
每种面值至少取一张:可能有三种情况。5元、10元、20元是2+1+1、1+2+1、1+1+2这三种情况。
分析到这里,结果计算,得到结果为48/91
问题5
比如你扔到3,能够得到3元返现;扔到1,能够得到1元返现。
当你扔完第一次骰子。看到点数后。你须要做出例如以下选择:
这道题实际上非常简单,考察的是你扔筛子策略,点数集合为(1,2,3,4,5,6);那么当我扔到(1,2,3)的时候证明手气较平均情况差一些,会再扔一遍,扔到(4,5,6)时证明手气较平均情况好一些。就不再扔。依照这个原则非常easy求得是4.25。
问题6
一个长度为100的循环链表,指针A和指针B都指向了链表中的同一个节点。A以步长为1向前移动。B以步长为3向前移动。一共须要同一时候移动多少步A和B才干再次指向同一个节点____。
本题实际上能够想象成在运动场跑道上,队员A速度是1。B为3,跑道一圈为100。则多长时间相遇一次,设为t。则:
下次相遇时,3t-t=100。t=50。
问题7
0x0457写成2进制。为0000 0100 0101 0111,而512=2^9,则后9位存放页内地址。前7为为2。相应的物理页为4。
问题8
在一个100人的团队活动中,主持人小猿亮出了一幅裙子的照片,大喊:”看出蓝黑色的举手!“,团队中有45人举手。然后小猿又喊:”看出白金色的举手!“。团队中有40人举手。
灵巧的小猿发现,有人从未举过手,有人举手了两次,两轮举手分出的四类人的数目恰好构成一个等差数列。请问有____人既能看出蓝黑色又能看出白金色。
这题不用在纸上列公式,由于40与45都处于整数的等差数列中,相差为5(不可再分)。故公差就为5;举手两次的是考出白金色的子集。故小于40,仅仅可能是30或者35;若为30,则均未举手的是35,单独蓝黑举手的是45-30=15。单独白金举手的是40-30=10,而30+35+15+10=90≠100;故两次都举手仅仅可能35。
问题9
将1,2,3,......,99,100随意排列成一个圈,相邻两数的差的绝对值求和最多为____。
本题能够拿1,2,3,4做实验,发现最大的4必须和1,2相邻。最小的1必须和最大的3、4相邻。进而推广:
100必须和1,2相邻;1必须和99、100相邻。......
最后排布顺序是:1,100,2,99,3,98.......50,51。故结果为99+98+.......+1+(51-1)=5000
问题10
已知二叉树中有45个叶节点,有25个度为1的节点。则二叉树的总结点数为____。
叶子节点45个,度为2的节点则为44个。结果等于45+25+44=114
问题11
某单链表有5个元素,设单链表的节点结构为(data,next),5个元素的data依次为(1、2、3、4、5),已知指针q指向节点3,指针p指向节点4。那么以下操作能将链表变为data依次为(1、2、3、5)的是____。
(当中temp为节点类型指针,默认指向NULL)
狸猫换太子。这题非常easy。选择最后一个;将5节点的值传给须要4节点,然后在释放5节点即可;详情可參考编程之美。
问题12
在1,2,3,.....1000中,有____个数各位乘积为0。
分为两段:
1-100,仅仅有是10、20、.......100这10个数满足要求。
101-1000,能够分为9段,101-200、201-300........901-1000。每一段情况一样,故拿出101-200这一段。101、102、.......109这9个数满足,110、120、......200这10个数也满足。
故总数为10+9*(9+10)=181。
问题13
A、B、C、D四人应聘一个程序猿职位,此职务的要求条件是:Java熟练;懂数据库开发;会Web开发;有C++经验。
谁满足的条件最多,谁就被雇用。(1)把上面四个要求条件两两组合,每一个组合都恰有一人满足。同一时候已知(2)A和Bjava熟练(3)B和C会Web(4)C和D懂数据库(5)D有C++经验那么,被雇用的是____。
阿里常常会出这种问题,仅仅能大胆如果、小心求证了。
猜測得:JAVA(A、B) 数据库(A、C、D) web(B、C) C++(B、D)
故选择B
问题14
有一个单向链表队列中有一个A、B两个相邻元素,有一个指针p指向元素A,现将一个指针r指向的S元素要插入到A和B之间,该进行操作____。
r->next=p->next;p->next=r
插入节点很easy。仅仅须要注意先后顺序就可以。
问题15
A为整数数组, N为A的数组长度,请问运行下面代码。最坏情况下的时间复杂度为____
void fun(int A[], int n) { for (int i = n - 1; i >= 1; i--) { for (int j = 0; j < i; j++) { if (A[j] > A[j+1]) { int tmp = A[j + 1]; A[j + 1] = A[j]; A[j] = tmp; } } } }
类似于冒泡,复杂度O(n2)
问题16
将整数数组(7-6-3-5-4-1-2)依照堆排序的方式原地进行升序排列。请问在整个排序过程中,元素3的数组下标发生过____次改变。
考察堆排序的先后顺序,改变2次。绘图分析就可以。