2010年10月26日开心网笔试转载

2010年10月26日开心网笔试转载

默认分类 2010-10-27 22:55:30 阅读84 评论4   字号: 订阅

今天去清华参加开心网的笔试,很开心,有同学一起

总结的题目如下:

1.关于线程的创建,同步的实现,以及为啥不推荐使用stop和suspend?

 

2.如果在使用finilize时出现异常,垃圾回收器会如何?

 

3.HashMap和TreeMap的区别

          Hashtable 与 HashMap类似,但是主要有6点不同。

         1.HashTable的方法是同步的,HashMap未经同步,任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.。所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。   

        2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。   

        3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。   

        4.HashTable使用Enumeration,HashMap使用Iterator。   

        5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。   

        6.哈希值的使用不同,HashTable直接使用对象的hashCode。

      TreeMap与 HashMap

        TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

        Hashmap 是一个最常用的Map,它根据HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度

       如果没有按照关键字顺序提取Map的元素的需求,那么HashMap是更实用的结构。

4.swith的参数

switch中的整形表达式的值必须是int兼容的类型,既可以是byte、short、char和int,以及enum类型。不可以使用浮点型float、double、long,并且各case子句中的c1, c2,...,是int型或字符型常量。

5.public class Test {   
   static void add(String s){
    s="kaixin001";
   }
 public static void main(String[] args) {   
  String s="hello";
  add(s);
  System.out.println(s);
 } 
}

结果为hello

 

2010年10月23日腾讯、完美时空笔试

默认分类 2010-10-25 14:00:21 阅读17 评论0   字号: 订阅

上午腾讯笔试、下午完美时空笔试:

腾讯:

全是填空选择题,后面有一个选作的编程题。

1.继承,void f方法,子类如何继承,是除了private之外都可以的。

方法继承的时候,不能减少,而且可见性顺序:private<空<protected<public

2.关于socket编程

三步学会Java Socket编程

http://developer.51cto.com/art/200902/108179.htm

http://www.kuqin.com/networkprog/20090221/35953.html


3.大题:使用java写程序完成对字符串的计算,如“4+(4*5-(4+3))”,且小数点后2位数字。

 

完美时空:

1.(Test)t.greet();一个非静态方法,不创建对象是无法使用的。

2.程序执行结果

class Parent{
 void f(){
  System.out.print("parent");
 }
}

public class Child extends A{ 
 void f(){
  System.out.print("child");
 } 
 public static void main(String[] args) throws IOException{
  Parent t=new Child();
  t.f();
 }
}

结果:child

而如果换成Child t=new Parent ();则会出现编译错误

3.进程、作业调度算法

调度算法:

先来先服务法FCFS
短作业优先法SJF
最高响应比优先法HRN
定时轮转法RR(时间片轮转调度算法)是为了多个终端都能得到系统的及时响应。
静态优先数法

解释:

作业周转时间=作业完成时间-作业提交时间
响应比=作业周转时间/作业运行时间=1+作业等待时间/作业运行时间
(1) HRN算法采用下式计算响应比:
等待时间waittime/需要运行的时间requesttime
(2) 高优先权优先算法采用下述公式计算优先权
[优先权priority * 等待时间waittime]/[需要运行时间requesttime * 紧迫程度quick]


当进程处于运行、就绪和等待状态时,只有运行状态的进程才可以优先占有处理机,而其余两种状态的进程并不占有处理机。
作业调度和进程调度的区别:
一个作业从进入系统到最后完成,一般至少要经历两级调度:作业调度和进程调度。
作业调度是宏观上的高级调度,它的主要功能是根据一定的算法,从输入井选中若干个作业,分配必要的资源如主存和外设等,为它们简历初始状态为就绪的作业进程。
进程调度是微观上的低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。一般的操作系统都必须有进程调度。
在多道系统中,作业调度与进程调度是相互配合来实现多道作业的并行执行

参考资料:http://wenku.baidu.com/view/f5cd737d27284b73f24250e1.html

http://baike.baidu.com/view/98104.html?tp=3_01

4.聚集索引、非聚集索引的应用场景及区别

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。


非聚集索引与课本中的索引类似数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。

也就是说:聚集是物理排序。而非聚集是不用将表和视图进行物理排序。一个表或视图中最多有250个非聚集排序或有249个非聚集排序一个聚集排序。

参考文献:

http://www.cnblogs.com/flashicp/archive/2007/05/08/739245.html

http://www.javaeye.com/topic/479461

5.写成几种在32位,64位平台下长度不一致的数据类型

6.画出TCP三次握手及关闭时client server各自的状态迁移图

7.链表的插入、删除、查找

 

 

 

 

 

2011年10月20日雅虎霸笔

默认分类 2010-10-21 11:08:23 阅读21 评论0   字号: 订阅

今天晚上去北交大霸笔雅虎。题目全是英文,题目的难度属于中等,虽然我还是有很多的题目不会,其实压力好大,看到别的同学都做完了,自己压力很大。好啦,从现在开始保证自己每天至少3个小时的看书时间,如果达不到,则自动放弃所有的活动!!

只记载全部是java的题目:

1.一段小程序的错误之处

try {
   FileInputStream fin=new FileInputStream(new File(""));
   BufferedReader rd=new BufferedReader(new InputStreamReader(fin));
   while(rd.readLine()!=null){
    
   }
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

最主要的错误可能是后面没有加上那个IOException 吧,我给忘记了具体题目了,那后面是不是可以不用加上close呢

关于异常,可以通过try catch进行处理,其二可以通过在方法上throws ,两种方法有啥区别呢?我试了一下,现在一个比较简单的区别是,try catch之后还可以直接往下处理。但是throws就直接抛出异常了,后面的内容不进行处理。

BufferedReader in=new BufferedReader(new FileReader(""));这句话与前面要实现的读取文件的功能相同。

而且,我还发现了一点,那就是在读取文件的时候,只有出现File,需要抛出FileNotFoundException 异常,在读取如rd.readLine()的时候,需要抛出IOException 异常。但是IOException 是FileNotFoundException 的父类(class FileNotFoundException extends IOException)。

System.in是一个未经处理的InputStream。若希望从System.in读一行文本也就是一个字符串,则需要将System.in包装成BufferedReader 。但是在此之前还需要用InputStreamReader把System.in转换成Reader。

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

2.关于判断两个List是否相等:

条件是:一、如果使用equals相等,则相等,二,如果是Integer、Float、Long,则只要变成int相等则相等。

下面是我给出的答案,说明:

public boolean compare(List a, List b){
  int sizea=a.size();
  int sizeb=b.size();

//如果二者长度不等,则一定不等
  if(sizea!=sizeb){
   return false;
  }else{
   for(int i=0;i<sizea;i++){
    if(!a.get(i).equals(b.get(i))){
     if(this.getNum(a.get(i))==-1 || this.getNum(a.get(i))!=this.getNum(b.get(i))){
      return false;
     }
    }
   }
  }
  return true;
 }
 
 /**
  * 获取一个对象的数字,如果是Integer、Float、Double则变成int,否则返回-1
  * @param o
  * @return
  */
 private int getNum(Object o){
  int intValue=-1;
  String s=o.toString();
  try{
   intValue=(int)Double.parseDouble(s);
  }catch(NumberFormatException e){
   intValue=-1;
  }
  return intValue;
 }

在判断数字类型的int是否相等时,本来想单独来运算,但是后面发现有些问题。所以,就统一转换成string来进行转换。且巧妙的是利用了异常来处理,我觉得挺好的 。

判断一个类是否是Integer:a.getClass().equals(Integer.class);

3.不会的两道题

1)0矩阵,判断一个矩阵是否是0矩阵,可通过往这个元素上加某个值,但是在加的时候,要加到其相邻元素上。

2)pe,分到不同的盘子里,每个盘子里面的数量相等,且相同类型的pie在同一个盘子里,要求盘子最多,

例:3个苹果pie,3个梨pie,6个香蕉pie,分到两个盘子里。

3个苹果pie,2个梨pie,6个香蕉pie,只可以分到一个盘子里。

4.关于TCP和UDP。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值