Java笔试题 2014唯品会校招

 1.下列不可作为java语言修饰符的是(D)
 A. a1 B. $1
 C. _1 D. 11


 2.整形数据类型中,需要内存空间最少的是(D)
 A. short B. long
 C. int D. byte


byte为8bit,long和double 64bit,int和float 32bit,char和short 16bit。

一个字节8个bit。


3.在Java中,一个类可同时定义为许多同名的方法,这些方法的形式参数个数、类型或者顺序各不相同,传回的值也可能不相同,这种面向对象的特性称为(C)
 A. 隐藏 B. 覆盖
 C. 重载 D. java不支持此特性


重载定义就如题目所讲。

覆盖就是重写,是子类重写父类方法,参数名和方法名要相同,返回类型和抛出异常比父类小(这里的小不是大小,是范围),访问修饰符访问权限大于等于父类。

当然这里有例外:

就是以前在Java编程思想多态中提到的:

public class TV{    
    private void show(){    
        System.out.println("TV");    
    }    
    public static void main(String[] args) {    
        TV tv = new LeTV();    
        tv.show();    
    }    
}    
class LeTV extends TV{    
    public void show(){    
        System.out.println("LeTV");    
    }    
}   

虽然看起来像是“覆盖”,但是没有,private方法自动认为是final方法,对导出类屏蔽,LeTV的show其实是新的方法,main方法打印的也是TV,因为这不是覆盖。如果private换成protected是可以的(访问修饰符访问权限大于等于父类)。

隐藏的话:

本来会打印的10和LeTV都被隐藏了,其实域的访问是在编译期间解析,不是后期绑定,而后期绑定是运行期间,所以被隐藏了。
普通的方法才会覆盖,后面符合多态的特性,而静态方法只和类有关,和具体的对象无关,所以LeTV被隐藏了。

public class TV{    
    public int price = 10;    
    public int getprice(){    
        return price;    
    }    
    public static String getString(){    
        return "tv";    
    }    
}    
class LeTV extends TV{    
    public int price = 20;    
    public int getprice(){    
        return price;    
    }    
    public int getsuperprice(){    
        return super.price;    
    }    
        
    public static String getString(){    
        return "letv";    
    }    
        
    public static void main(String[] args) {    
        TV tv = new LeTV();    
        System.out.println(tv.price+" getprice:"+tv.getprice()+tv.getString());    
        LeTV letv = new LeTV();    
        System.out.println(letv.price+" getprice:"+letv.getprice()+" getsuperprice:"+letv.getsuperprice()    
                +letv.getString());    
    }    
}    

简答:
 1.详述堆和栈,进程和线程的含义?

栈的话先进后出,好比先一个箱子,先放进去的东西压在下面,拿出来的时候先把后面放进去的东西拿开。

堆是先进先出,如购买基金,首先赎回的基金是自己最先买入的。

至于进程和线程,最能先说出的就是一个进程包含一个或多个线程。

其实一个程序至少有一个进程,一个线程只属于一个进程,总体看的话进程可以看成是程序的一次执行,线程是程序片段的一次执行。


区别:进程间相互独立,同一进程下的线程共享全部资源。

           进程有自己独立的内存空间,线程共享所属进程的内存空间。


真的要像阮一峰那样类比也可以,CPU是工厂有很多车间,单核心的CPU在一个时间内只运行一个车间(进程),车间有多个工人工作(线程)。


 2.有一个动态数据集(数据实时变化)。现在需要对该数据集用到多种视图进行展示,比如直方图,曲线图和饼图等,在这样的应用场景下,使用哪几种设计模式比较合适?

这个不太会。

 第三部分:
 1.对一对扑克牌进行排序,时间复杂度尽可能小,请使用自然语言描述算法核心思想,并指出使用算法的时间复杂度,使用java语言描述具体算法的实现。
 (桶排序),这是师姐的方法。
 2.在Linux操作系统下,有一个文本(文件名为user).格式如下:
 Leo:456:7890:11
 Vincent:333:43434:2
 Rack:4343:4343:22
 Leo:444:33:4343
 Rack:1:1:1
 Tiger:1:32:4
 要求:
 1. 提取第二列的值,并对其进行排序.
 2. 计算第二列的总和。
 3. 找出第二,三和四之和的最大值。
 4. 假如有一百万个这样的文本,每个大小为500M,用最快的方式统计哪个用户(第一列)的后面三列之和最大。
 注:可以用java或者shel脚本实现以上功能。

个人资料
onion
等级:6
文章:51篇
访问:4.2w
排名: 12
上一篇: 暴风影音2013校招C++:笔试(2卷)
下一篇:唯品会 2015校招 Java笔试
标签: letv、tv、getprice、price、public、面试题
隐藏