zoukankan      html  css  js  c++  java
  • 亚信笔试题

    (一)
    1.String str=new String("abc") 在内存中是怎么分配的? 
    答:在运行时才在内存创建一个内存空间。

    2.String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?
    答:String str1="abc"在编译时已经在一个常量池中生成一个拷贝,其中str1中的"abc"是字符串常量。而对于String str1=new String("abc")的话,它是在运行时才创建。这两句在内在中所产生的对象并不是同一个对象。

    3.GC是什么?有几种算法实现?(这题到现在也不大明白..如果GC是垃圾回收的话.后面为什么要问有几种算法实现呢?) 
    答:垃圾回收.可实现的算法有引用计数,标记回收,复制回收等.

    4.Java Server Page 和 servlet 的联系与区别 
    5.collection和collections的区别?
    答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
      Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜   索、排序、线程安全化等操作。
    =====================================================
    6.ArrayList和Vector的区别,HashMap和HashTable的区别? 
    答: Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并 不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带 来的不必要的性能开销。  

    Hashtable和HashMap的区别:

    1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
    2.Hashtable中的方法是同步 的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于 HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
    Map Collections.synchronizedMap(Map m)
    这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
    3. 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 
    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 
    Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

    ================================================
    7.overload和override的区别? 
       override(重写) 
       1、方法名、参数、返回值相同。
       2、子类方法不能缩小父类方法的访问权限。
       3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
       4、存在于父类和子类之间。
       5、方法被定义为final不能被重写。
       overload(重载)
       1、参数类型、个数、顺序至少有一个不相同。  
       2、不能重载只有返回值不同的方法名。
       3、存在于父类和子类、同类中。

    8.char能不能存储汉字? 
    答:java char型变量是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

    (二)
    1.interface 和 abstract 的区别?
      (1)关于抽象类和接口,我想还是看具体的要求,什么模式之类的东西
    都是有了应用才出现的,需求才是第一位的。
    它们之间的区别是:

    1. 在抽象类中可以实现某些方法,而接口不行
    2. 抽象类是用来extends的,而继承有一定的局限性,只能继承一个类
    而接口就不同,可以同时实现多个接口

    这两者也可以联合使用。看具体的要求了。如果有共同方法的那些类
    它们的共同的方法的实现是一样的,那么可以考虑用抽象类,把方法
    在抽象类中实现,如果还有一些方法定义相同而实现不同,那么可以
    考虑定义一个接口,让抽象类来implements这个接口

    然后各个子类只用继承抽象类即可。

      (2)接口是“like a ”象一个什么东西、或是具备什么功能

    抽象类是 “ is a ”是一个什么东西。

    一个带锁的门,那么一定是 “somthing extends 门 impliment 锁 ”

    决不能说 “带门的锁”

       (3)经过自己写代码的测试结果:I代表interface,A代表abstract
          I implemets I     错
          I extends I        对
          I extends A       错

       (4)一个是接口,一个是虚函数 java中的接口相当C++中纯虚函数 
    也就是一个也不实现,具体是在子类中实现,这体现了多态性 
      同时java接口也是java实现多重继承的一个方法
      1.interface的所有函数都是abstract的; 
      2.interface的数据成员默认都是public static final的; 
      3.Interface可以被多继承,abstract class单继承

      interface是接口,abstract class是抽象类 主要区别: 
    1、接口可以多重implement(实现),抽象类只能单一extends(继承) 
    2、接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。 
    3、接口字段定义默认为public static final,而抽象类的则默认为friendly。
          
    3.GC是什么?常用的两种方法是什么?
       (1)GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以 自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
        (2)答案:System.gc()用来强制立即回收垃圾,即释放内存。 
    java 对内存的释放采取的垃圾自动回收机制,在编程的时候不用考虑变量不用时释放内存,java虚拟机可以自动判断出并收集到垃圾,但一般不会立即释放它们的内 存空间,当然也可以在程序中使用System.gc()来强制垃圾回收,但是要注意的是,系统并不保证会立即进行释放内存.
      gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

    ==========================================================
    4. 线程常用的方法是什么?
    Thread类的常用方法:
    static Thread currentThread() //静态方法,通过这个方法可以获得主线程的引用,从而达到操作主线程的目的。
    static int activeCount()      //静态方法,获得当前活动线程数量
    long getId()                  //获得当前线程id
    String getName()        //获得当前线程名字
    int getPriority()    //获得优先级
    boolean isAlive()    //当前线程是否处于活动状态。
    boolean isDaemon()   //是否为守护线程
    void run()  //run()方法,我们用线程,主要就是对run()方法的重写
    void start()   // 使该线程开始执行;Java 虚拟机调用该线程的run() 方法。
    void sleep()   //使当前线程休眠,以执行其他线程,如Thread.sleep(1000) 休眠1秒

    5. Sleep()和wait()的区别?
    搞线程的最爱sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先 级,(b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

    6. Servlet中forward()和redirct()的区别?
    答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示 出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更 加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的 资源,则必须使用sendRedirect()方法。

    7. EJB和JavaBean都是什么?
    答案:
    javabean是客户端组件,EJB是服务器端组件。
    其实ejb与javaBean的最根本区别是:分布性。这是关键!!!
        Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在 诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代 理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

    8. EJB都有哪些构成?
    答案:Session Bean, Entity Bean, Message Driven Bean.

    9. Servlet的生命周期,比CGI有什么优点?
        web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用 service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。
        Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相 比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。

    14. 存储过程和函数的区别?

        本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过 程不行。执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少。

    智力题:


    分三部份:
    oracle:存储过程,触发器,数据库的优化,PLSQL。
    java:比较基础,java的交换两个整数的值
    智力题:一个皇帝,有四个儿子。有三种颜色的帽子
    三升的水,五升的水,八升的水

  • 相关阅读:
    “ODBC驱动程序不支持动态记录集”错误的解决
    Pro *C/C++学习笔记(一)
    探讨全局变量的析构顺序
    指针和数组关系初探
    (转)Visual C++开发工具与调试技巧整理
    对利用Session纪录datagrid模板列中CheckBox的状态的一点改进
    大学老师列传
    重读保尔的意义
    Rich Edit控件的使用
    C++程序员常用工具集
  • 原文地址:https://www.cnblogs.com/lchzls/p/6897468.html
Copyright © 2011-2022 走看看