java面试题整理

1、java运行时异常是程序员可以不用处理的,虚拟机会处理,例如空指针异常,数组下标越界等。非运行时异常是程序员必须处理的,比如io异常,文件异常。

2、>>表示有符号的右移,最高位补符号位,>>>表示无符号位的右移,最高位补0.

例如5>>2结果为:1(5的二进制表示是0000 0101,右移两位,左边最高位补符号位,5是正数补0,所以为1)

-5>>2结果为:-2  (-5在计算机里以补码表示为:1111 1011,右移两位,左端均补1为:1111 1110,为-2)

-5>>>2结果为:1073741822(-5表示为1111 1111 1111 1111 1111 1111 1111 1101右移两位0011......1111即2^29+2^28+...+2^1为1073741822)

5>>>2结果为:1(正数的>>和.>>>一样)

3、事务隔离级别是由数据库系统实现的。

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

4、当父类和子类都具有静态代码块和构造函数时,执行顺序如下:父类静态代码块>子类静态代码块>父类构造函数>大于子类构造函数

如果是多级继承关系的话,高层的父类先执行,然后依次递减。静态代码块先执行,父类优于子类,静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行依次。

5、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间

6、httpservletresponse完成的功能有:设置http头标、设置cookie、设置返回数据类型、输出返回数据、读取路径信息。

7、final修饰的类不能被继承、方法不能被覆盖、修饰的变量只能赋值一次,不能被修改。不能用来修饰构造方法。

    static、表示全局、静态。

    static final表示全局变量,对于变量一经赋值不可改变,且可以通过类名访问,对于方法,不能覆盖且可以通过类名直接访问。接口中的数据成员默认是 public static final。

8、构造方法必须和public类名一致,一个类可以有多个构造方法,在实例化对象时必须调用类的构造方法。构造方法不能和该类的其他方法一样被调用,需要new关键字。

9、list删除某个元素的三种方法:

for(int i=0;i<list.size();i++){
    if(list.get(i).equals("del"))
        list.remove(i);
}

只适合于删除一个元素。因为删除某个元素后list的长度会发生变化,索引也会改变。比如删除第一个元素之后,遍历第二个元素事其实遍历到的是第三个元素。

 

for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。

 

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

 这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,不能使用list的remove方法。

10、|和||的区别

11、Statement是sql语句的载体

    Statement是标准的Statement类,通过字符串对sql语句进行拼接,但是它存在sql注入的危险

    PreparedStatement对sql语句进行了预编译,可以防止SQL注入

    CallableStatement用来调用存储过程的

    BatchedStatement用于批量操作数据库,BatchedStatement不是标准的Statement类

 12、java Thread方法的resume负责重新开始被suspend中断的线程。

 13、super()必须写在子类构造方法的第一行,否则编译不通过。super和this、类似,super是从子类调用父类的构造方法,this是调用本类的其他方法。super()和this()都要放在构造方法的第一行。this和super不能出现在同一个构造函数里。而且都不能出现在static环境中。

   14、HashMap和Hashtable和IdentityHashMap都实现了java.util.Map.interface.

          Vector实现的是List接口。

  15、实现多线程的两种方式:继承Thread类和实现Runnable接口

  16、servlet的生命周期分为五个阶段:加载、创建、初始化(init())、处理客户请求、卸载(destroy())。

             init和destroy都只调用一次。

  17、jdk提供的用于并发编程的同步器有:Semaphore、CyclicBarrier、CounterDownLatch。

        Semaphore信号量用来控制同时访问特定资源的线程数。

        CyclicBarrier主要的方法是await();该方法每调用一次,计数 减1,并阻塞住当前线程,当计数减至0时,阻塞解除。

        CounterDownLatch.await()在倒计数为0之前会阻塞当前线程。

    18、url一般有四部分组成<协议>://<主机>:<端口>/<路径>

     19、list  set 继承自collection,Map与collection是同一级别的

    20、finally是在return之前执行的;simpleDateFormat是不安全的

     21、存根(stub)与动态链接有关

    22、java程序种类有:applet  application  servlet

    23、

    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值