• 阿里巴巴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、再扔一次骰子,但此时你仅仅能拿第二次扔的点数相应的返现。


    那么,玩一轮这个游戏的期望收益是____元。


    这道题实际上非常简单,考察的是你扔筛子策略,点数集合为(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

    某操作系统採用分页存储管理方式,下图给出了进程A的页表结构。假设物理页的大小为512字节,那么进程A逻辑地址为0x0457(十六 进制)的变量存放在____号物理内存页中。


    进程A页表:

    逻辑页    物理页

    0            9

    1            2

    2            4

    3            6

    4            5

    5            8


    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次。绘图分析就可以。









  • 相关阅读:
    我的2012
    java抽象工厂模式
    java工厂方法模式
    javascript闭包
    字符串转换成枚举类型
    按位与 按位或 按位异域
    一个查找替换文件的简单工具
    c#写的.net 画流程图的控件
    .net 面试题之 Sql 分页 存储过程
    .net 面试整理2013年3月21
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6932475.html
Copyright © 2020-2023  润新知