Java:笔试题

1.boolean类型不能赋值数值类型,未初始化boolean类型不能使用判断条件,也就boolean类型的变量是没有默认值

boolean tag;                     //并未初始化
System.out.println(tag);         //未初始化就使用,编译不通过
tag = 1;                         //不能对boolean类型赋值数值
tag = 0;                
if(tag != 0){}                   //不能与数值进行比价运算
if(tag){}                        //未初始化不能使用
        
tag = true;                      //赋值之后正常使用
if(tag){}

2.Object类没有equals()方法 只有equals(Object obj)方法

/**
 * 编译不通过,Object类没有equals()方法,只有equals(Object obj)方法
 */
public class A {
    protected boolean equals() {
        return super.equals();
    }
}

3.Servlet的生命周期一般可以用三个方法来表示

  init():仅执行一次,负责在装载Servlet时初始化Servlet对象,

  service() :核心方法,一般HttpServlet中会有get,post两种处理方式。在调用doGet和doPost方法时会构造servletRequest和servletResponse请求和响应对象作为参数。

  destory():在停止并且卸载Servlet时执行,负责释放资源。

初始化阶段:Servlet启动,会读取配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,将ServletConfig作为参数来调用init()方法。

ServletRequest 和ServletResponse是在调用service方法时才构造的

4.两个boolean类型 && 操作的时候必须全为true才为true,若第一个为false则短路,|| 只要一个为true就为true,如果第一个为true则短路

//测试短路操作
boolean flag1 = true;
boolean flag2 = false;
System.out.println(flag2 && flag1);//第一个为false短路
System.out.println(flag1 || flag2);//第一个为true短路

5.java序列化

http://regedit-123.iteye.com/blog/1109191

http://www.cnblogs.com/xdp-gacl/p/3777987.html

6.时间复杂度是度量算法执行的时间长短; 

  空间复杂度是度量算法所需存储空间的大小.

  不过一般我们说的时间复杂度是指他运行时计算的次数,空间复杂度是指运行完一个程序所需内存的大小.

 http://www.cnblogs.com/songQQ/archive/2009/10/20/1587122.html

7. Vector & ArrayList 
1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。 
2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

8.FileOutStream文件覆盖操作或者追加操作

       System.err.println("文件操作覆盖");
            FileOutputStream fos = new FileOutputStream(new File("test.txt"));
            fos.write("hello".getBytes());
            fos.close();
            
            System.err.println("文件操作覆盖");
            FileOutputStream fos2 = new FileOutputStream(new File("test.txt"));
            fos2.write("word".getBytes());
            fos2.close();
            
            System.err.println("文件操作追加");
            FileOutputStream fos3 = new FileOutputStream(new File("test.txt"),true);
            fos3.write("append".getBytes());
            fos3.close();
            
            System.out.println("文件操作读取");
            FileInputStream fis = new FileInputStream(new File("test.txt"));
            byte[] buffer = new byte[1024];
            StringBuilder sb = new StringBuilder();
            int len = 0;
            while((len = fis.read(buffer)) != -1){
                sb.append(new String(buffer,0,len));
            }
            System.out.println(sb.toString());
            
            System.out.println("文件操作读取");
            BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
            StringBuilder sb2 = new StringBuilder();
            String line = "";
            while((line = bfr.readLine())!=null ){
                sb2.append(line);
            }
            System.out.println(sb2.toString());

9.String没有初始化的话,编译不通过

String str;
int x = 100;
if(x < 100) str = "";
if(x > 100) str = "";
System.out.println(str.length());

10.JSP隐含对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。开发者不用明确的声明就可以直接使用他们。JSP隐含对象也叫做预定义变量。下面列出了JSP页面中的隐含对象: application page request response session exception out config pageContext

11.自定义异常类区别于API中的标准异常类,指的是开发人员自己创建的异常类。只要继承API中某个异常类就可以自定义一个异常类,常常集成Exception类。自定义异常类主要是为了标记业务逻辑中非正常事件流,避免与API中的标准异常混淆

12.需要提供默认的构造函数,没有默认的构造函数,在Parent2中编译不通过

class Parent1 {
//    Parent1(){
//        
//    }
    Parent1(String s){
        System.out.println(s);
    }
}
class Parent2  extends Parent1{
    Parent2(){
        System.out.println("parent2");
    }
}
public class Child extends Parent2 {
    public static void main(String[] args) {
        Child child = new Child();
    }
}

13.XML的用途:用到了数据存贮,信息配置 两方面。 在做数据交换平台时,将数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再对XML文件中还原的相关信息进行处理。 在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中

14.什么是反射机制:通过类的说明,可以得到类的父类,实现的接口,内部类,构造函数,方法和属性,并可以根据构造器实例创建一个对象,唤起方法,取属性,修改属性值

15.HashTable与HashMap的区别

16.聚合与组合:依赖关系是一种瞬时关系,A依赖B,指的是A的某个行为的参数是B的类型,也就是说,A要想实现这个行为,必须依赖B的实例。 A关联B,是一种长久的关系。是B作为A的属性存在,只要实例化一个A的对象,就会为这个A的对象实例化一个B的对象,作为它的属性使用,可以在A中任何需要使用B的地方使用B。

17.只能用public修饰interface

18.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组件。

19.结束方法 finalize() 可以用来帮助优化对象,该方法在释放对象时被子引用,它是 java 中为了有效地进行垃圾收集而引入的一个特殊方法, finalize() 方法属于 java.lang.Object 的系统类方法,它能被所有类访问, 当一个对象实例已经完全没有被任何变量引用时,则可以对它进行垃圾收集标记,在进行”垃圾收集”之前,系统将自动调用对象的 finalize() 方法,释放对象实例所占用的系统资源.

20. Statement:用于执行静态SQL语句并返回它所生成结果的对象,在执行时确定sql;

  PrepareStatement:表示预编译的SQL语句对象,

     SQL语句被预编译并存储在PrepareStatement对象中,然后可以使用此对象高效的多次执行该语句,可以传递参数,在得到PrepareStatement对象时确定sql;

21.字节流,字符流。

  字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。

  在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便。

  补充:关于Java的IO需要注意的有两点:

     一是两种对称性(输入和输出的对称性,字节和字符的对称性);

     二是两种设计模式(适配器模式和装潢模式)。

另外Java中的流不同于C#的是它只有一个维度一个方向。 补充:下面用IO和NIO两种方式实现文件拷贝,这个题目在面试的时候是经常被问到的

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class MyUtil {

    private MyUtil() {
        throw new AssertionError();
    }

    public static void fileCopy(String source, String target) throws IOException {
        try (InputStream in = new FileInputStream(source)) {
            try (OutputStream out = new FileOutputStream(target)) {
                byte[] buffer = new byte[4096];
                int bytesToRead;
                while((bytesToRead = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytesToRead);
                }
            }
        }
    }

    public static void fileCopyNIO(String source, String target) throws IOException {
        try (FileInputStream in = new FileInputStream(source)) {
            try (FileOutputStream out = new FileOutputStream(target)) {
                FileChannel inChannel = in.getChannel();
                FileChannel outChannel = out.getChannel();
                ByteBuffer buffer = ByteBuffer.allocate(4096);
                while(inChannel.read(buffer) != -1) {
                    buffer.flip();
                    outChannel.write(buffer);
                    buffer.clear();
                }
            }
        }
    }
}

22.HQL语句:

http://blog.csdn.net/v123411739/article/details/28644007

23.单元测试时,以下哪项是最小的测试单元:方法

24.try catch finally语句块,如果有返回值的时候,需要先执行finally,再返回:执行结果---

    finally 语句块
    和是:43

public class Demo {
    public int add(int a, int b) {
        try {
            return a + b;
        } catch (Exception e) {
            System.out.println("catch 语句块");
        } finally {
            System.out.println("finally 语句块");
        }
        return 0;
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        System.out.println("和是:" + demo.add(9, 34));
    }
}

25.排序算法复杂度和稳定性

26.抽象方法不能写出大括号,有了body体就不再是抽像的了

27.环境变量可在编译source code时指定是错误的

28.C是错误的,方法区用于存储JVM加载的类信息以及类相关的东西,比如类变量、常量等,是线程隔离的,但是编译器编译后的代码等数据,是线程共享的

    1.  程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
    2.  Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
    3.  方法区用于存储JVM加载的类信息、常量、静态变量、即使编译器编译后的代码等数据,是线程隔离的
    4.  原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

29.Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息

30.服务器网络编程中,解决回话跟踪的方法有:

    Cookie;Session;URL重写;

    cookie在J2EE项目中的使用,Java中把Cookie封装成了java.servlet.http.Cookie类。

    每个Cookie都是该 Cookie类的对象。服务器通过操作Cookie类对象,对客户端Cookie进行操作。

    通过request.getCookies()获取客户端提交 的所有Cookie(以Cookie[]数组形式返回),通过 response.addCookie(Cookiecookie)向客户端设置Cookie。

    Cookie对象使用key-value属性对的形式保存 用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。

// 服务器端获取cookie 
Cookie[]cookies = request.getCookies(); 
for (int i = 0; cookies != null && i < cookies.length;i++) { 
         Cookiecookie = cookies[i]; 
         if("username".equals(cookie.getName())) { 
         } 
      } 
//服务器端设置cookie 
 String username = "sa"; 
 Cookie usernameCookie = new Cookie("username", username); 
 response.addCookie(usernameCookie); 

31.我们可以使用任何类作为Map的key,然而在使用它们之前,需要考虑以下几点:

(1)如果类重写了equals()方法,它也应该重写hashCode()方法。

(2)类的所有实例需要遵循与equals()和hashCode()相关的规则。请参考之前提到的这些规则。

(3)如果一个类没有使用equals(),你不应该在hashCode()中使用它。

(4)用户自定义key类的最佳实践是使之为不可变的,这样,hashCode()值可以被缓存起来,拥有更好的性能。不可变的类也可以确保hashCode()和equals()在未来不会改变,这样就会解决与可变相关的问题了。

比如,我有一个类MyKey,在HashMap中使用它。 //传递给MyKey的name参数被用于equals()和hashCode()中 MyKey key=new MyKey('Pankaj');//assume hashCode=1234 myHashMap.put(key,'Value'); //以下的代码会改变key的hashCode()和equals()值 key.setName('Amit');//assume new hashCode=7890 //下面会返回null,因为HashMap会尝试查找存储同样索引的key,而key已被改变了,匹配失败,返回null myHashMap.get(new MyKey('Pankaj')); 那就是为何String和Integer被作为HashMap的key大量使用。

32.C/S 模式, 即客户端( Clinet)和服务器端 (Server)的两层结构模式, 其特点就是主要业务逻辑集中在客户端,因此,也带来了一定的弊端 : 首先,在安装,调试,维护,升级方面比较因难, 因为每个客户端的配置不同,所以在配置的时候,必须对每个客户端进行配置. 由于主要业务逻辑集中在客户端,系统的安全受到影响.

B/S 模式, 即浏览器端(Browers)和服务器端(Server)的结构模式, 其核心是用浏览器(Browers)取代C/S模式中的客户端。其优点是: 首先,在维护,升级的时候,只须对服务器端进行维护和升能就可以了。 由于客户端就是浏览器,有利于系统的安全。

33.早期的JDK中,switch(expr)中,expr可以是byte、short、char、int。从5版开始,Java中引入了枚举 类型(enum),expr也可以是枚举,从JDK 7版开始,还可以是字符串(String)。长整型(long)是不可以的。

34.计算任意两个日期之间间隔的天数

import java.util.Calendar;
public class Ex14 {
public static void main(String[] args) {
  Calendar c1 = Calendar.getInstance();
  c1.set(2010, 7, 1);
  Calendar c2 = Calendar.getInstance();
  long ca1 = c1.getTimeInMillis();
  long ca2 = c2.getTimeInMillis();
  // 计算天数    
  long days = (ca2 - ca1) / (24 * 60 * 60 * 1000);
  System.out.println(days);
  }
}

35.子类不可以继承父类的构造方法,只可以调用父类的构造方法。子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。

36.final关键字的作用:

  (1)修饰类:表示该类不能被继承;

  (2)修饰方法:表示方法不能被重写;

  (3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

37.throw用来在方法体内抛出异常,而throws用来在方法声明处声明异常。这两个关键字有着一定的联系。如果一个方法中使用了throw关键字抛出了异常,那么要么立即用try/catch语句进行捕获,要么就是用throws进行声明,否则将出现编译错误。然而, 并不是只有使用了throw关键字之后才能使用throws关键字,语法上来说,任何一个方法都可以直接使用throws关键字,抽象方法也可以使用。

38.Iterator接口定义了遍历集合的方法,但它的实现则是集合实现类的责任。每个能够返回用于遍历的Iterator的集合类都有它自己的Iterator实现内部类。 这就允许集合类去选择迭代器是fail-fast还是fail-safe的。比如,ArrayList迭代器是fail-fast的,而CopyOnWriteArrayList迭代器是fail-safe的

39.软件维护的四类维护活动是:纠错性维护,适应性维护,完善性维护和预防性维护。

40.打印昨天的当前时刻

public class YesterdayCurrent {  
    public static void main(String[] args){  
        Calendar cal = Calendar.getInstance();  
        cal.add(Calendar.DATE, -1);  
        System.out.println(cal.getTime());  
    }  
} 

41.方法内部不能含有静态变量

package test4;

public class Test {
    public  int aMethod() {
        static int i = 0;//编译错误
        i++;
        return i;
    }

    public static void main(String args[]) {
        Test test = new Test();
        test.aMethod();
        int j = test.aMethod();
        System.out.println(j);
    }
}

42.关于Java并发的说法中正确的是(B)

  1.  CopyOnWriteArrayList适用于写多读少的并发场景
  2.  ReadWriteLock适用于读多写少的并发场景
  3.  ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
  4.  只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了

43.switch case 语句

        //如果没有第一个匹配的那么任何一个都不会执行
        //一旦有一个匹配,那么就会继续往下执行,直到break结束
        //执行结果为default zero
        int i = 9;
        switch (i) {
        default:
            System.out.println("default");
        case 0:
            System.out.println("zero");
            break;
        case 1:
            System.out.println("one");
        case 2:
            System.out.println("two");
        }            

44.就ArrayList与Vector主要从二方面来说. 一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的。 二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半。

45.

 

posted @ 2016-08-03 14:40  桃源仙居  阅读(186)  评论(0)    收藏  举报