爱悠闲 > 面试经验——网易

面试经验——网易

分类: 随笔  |  标签: 面试,网易  |  作者: langduhualangdu 相关  |  发布日期 : 2015-04-27  |  热度 : 322°

概况

网易没有统一的招聘系统,都是部门分别招各自的实习生。
我投的部门是做彩票相关的,Java后台。
一面二面一起,是同一个人面的我。首先做一套卷子,卷子有选择、编程题、算法题、问答题。
考的东西基本都是Java相关的,没有计算机网络、操作系统的东西。问答题包括现实性的问题、linux命令使用问题和Mysql的sql语句书写。
二面是根据简历了解一些东西,和延伸出来相关的技术;然后围绕着一面 的卷子进一步提问。

一些关键问题及解答

1.Sychronized 修饰静态方法(类方法),则锁定的其实是该Class。
2.下面程序运行结果是什么?

class Integer{
    public int i = 10;
}
public class Test {
    public void out(){
        Integer integer = new Integer();
        integer.i = 20;
        change(integer);
        System.out.println(integer.i);
    }
    public void change(Integer integer){
        int i=50;
        integer.i = 30;
        integer = new Integer();
        integer.i = 40;
        System.out.println(integer.i+" "+i);
    }
    public static void main(String[] args){
        Test test = new Test();
        test.out();
    }
}

考察的是引用在当做参数传入之后,引用内的东西和引用本身如果被改变各有什么结果。

答案:
40 50
30

  • 当引用的integer进入change()中,首先改了其中的i为30;
  • 然后引用本身发生了变化,变成了另外一个对象的引用,然后更改了这个对象的i值;
  • 在change()之外的integer的引用是没有发生变化的,依然是老对象的引用,而在chang中更改i成了30,所以,在out中的打印语句即为30。

3.下面程序结果是什么?


class Dog {
    public static void love(){

    }
    public static void barf(){
        System.out.println("wangwang");
    }
}

class LittleDog extends Dog{
    public static void barf(){
        System.out.println("wawa");
    }
}

public class Test {
    public static void main(String[] args){
        Dog d1 = new Dog();
        Dog d2 = new LittleDog();
        d1.barf();
        d2.barf();
    }
}

考察了细心程度,拜托这个不是多态好吧。。。没看到方法上是static么??
4.下面程序返回的是什么?

public static boolean test(){
        boolean b =true;
        try{
            return b;
        }finally{
            b = false;
        }
    }

关于try、catch、finally,参见http://www.aiuxian.com/article/p-2386535.html
5.异常都有哪些类型?举例说明。
详情参见http://www.aiuxian.com/article/p-2386534.html
6.如果一个数据库表条目特别多,增加速度非常快,应该如何考虑查找方面的优化?

  • 首先检查业务逻辑是否合理,快速增加的速度来自于逻辑的设计还是客观条件本身不可避免?
  • 堆积的数据是否有时效性?对过期的数据进行定期清理。
  • 使用类似Hibernate的缓存机制,在查找过程中先查找内存,若没有再查找数据库。

7.现实问题:如果有10个pad,要在10天内通过抽奖,每天能抽中一个pad,如何制定策略?(假设能够保证每天参与抽奖的人数)

  • 每天都有一个pad要被抽中,那么每天都会随机生成某个时刻,在这个时刻之后的第一个抽奖的参加者得到pad。这样既保证了随机性(根据时间的随机性),又保证了这个pad一定能被抽中。

8.Java类库中使用了哪些设计模式?请举例,并写出这些类。

  • 观察者模式:Java提供了该类的实现Observable和Observer两个类。
  • 单例模式:Thrift中使用到了单例模式,还有Spring中也可用到。
  • 装饰模式:FileReader、InputStreamReader,参见Java IO设计模式剖析.

9.java中如果定义一个Integer类,会不会覆盖已有Integer类?
解答:不会覆盖。看看第二题就知道了,我新定义了一个类Integer,使用起来没有任何影响。
10.实现锁机制都有哪些方法?
可以用字段sychronized和lock,也可以直接用线程的concurrent包中的容器(比如concurrentLinkedList等等)。
11.jvm中的GC原理
请参考http://www.aiuxian.com/article/p-2251910.html