java面试题剖析

1,说说&和&&的区别

   答:&和&&都是逻辑与运算符,只有当表达式二端都为true时才返回true,否则只要任何一方不为true,就返回false;

           &还可以作为位运算符,&&还具有短路功能,只要第一个表达式为false,则下一个表达式就不再执行了。

2,java中如何跳出多重循环嵌套

   答:可以使用在外循环外设置一个标记,在内层循环中可以使用beank标记退出外循环(标记是谁就退出谁)

          开发中通常是让外部循环的条件受内部循环的控制,定义一个boolean类型的变量,设置在外层的循环体中,在内层循环中当条件满足时就把变量值为true或false来控制

3,在swith语句的表达式中能否作用于byte上?还有long上?或者string上?

   答:swith语句的表达式只能是整数表达式或者枚举常量,但是byte可以自动装箱升级为int,所有可以,long,string就不可以了。

4,线程同步的几种方式

答:1使用synchronized方法,即synchronized修饰方法,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态

  2使用同步代码块,即有synchronized关键字修饰的语句块。对临界数据加同步代码块

 3使用关键字volatile为域变量的访问提供了一种免锁机制;使用volatile修饰域就是告诉虚拟机此域中的数据可能被其他线程更新;因此每次使用该域就会重新计算,而不是使用寄存器中的值;volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

 4 使用可重入锁实现同步;在Java 5.0中提供了java.util.concurrent包中ReentrantLock类;Lock lock=new ReentrantLock();常用方法lock和unlock。

 5使用线程中局部变量ThreadLocal来实现同步

5,线程和进程的区别

 答:一个进程是一个独立的应用或者程序,是操作系统运行的基本单元,进程在运行时有自己独立的内存单元,线程是进程中执行的一个任务,在同一进程中所有的线程共享内存。

6,多线程编程的好处?

答:多线程程序中,多线程并发可以提高程序的执行效率,cpu不会因为某个线程的等待而进入空闲状态,多线程共享堆内存,因此创建多个线程去执行任务比创建多个进程更好,例如:Servlets比CGI更好,是因为Servlets支持多线程而CGI不支持。

7,用户线程和守护线程的区别?

答:Java创建一个线程就是用户线程,而守护线程也称为后台线程(垃圾回收线程)在后台运行并不会阻止jvm的关闭当没有用户线程运行时,jvm就会阻止并退出

8,如何创建一个线程?

答:创建线程有2种方式;一种是实现Runnable接口的类,并重写run()方法,然后创建Thrad线程并把实现Runnable接口的类的对象实例做为参数传递给Thread对象实例而且执行start()方法。推荐使用此种方法。第二种:继承Thread类,并实现run方法,创建继承Thread类对象,执行start()方法

9,线程生命周期有哪几种?

答:线程也是一个动态执行过程,既有产生到消亡的过程,生命周期的5种状态:1.新建(new Thread)2,就绪(Runnable)3,运行(runing)4,死亡(dead)5,拥堵状态(blocked)

10,可以直接调用Thread类的run()方法么?

答:当然可以了,我们直接调用Thread的run方法就和普通的方法调用一样,当要开启线程去执行run方法中的代码时,我们需要Thread.start()方法

11,如何让正在执行的线程暂停一段时间?

答:我们可以使用Thread.sleep(毫秒值),这样可以暂停线程的执行,但不会终止线程,当暂停时间到后,它会被重新唤醒,进入Runnable状态,或马上执行或等待cpu的调度,重新获得执行

12,你对线程的优先级理解?

答:每个线程都有优先级,一般来说,高优先级的线程会比低优先级的线程先执行,但是这依赖于线程的调度的实现,这个实现和操作系统有关,我们可以定义优先级,但是我们不能保证高优先级的线程一定会比低优先级的线程先执行;线程优先级是一个int变量(1-10),1代表最低优先级,10代表最高优先级

13,jdk1.5的新特性,jdk1.6和jdk1.7的新特性

答:jdk1.5的新特性包括:1.泛型(Generic)2.静态导入 3.可变参数 4.增强for循环5.反射(严格不算JDK1.5的新特性,JDK1.2时就有反射了) 6.javabean内省 7.beanutils工具包 8.枚举 9.基本数据类型的装箱和拆箱 10.线程池 。

jdk1.6和jdk1.7都太抽象了,记不住啊

14 面试题之String str = new String("abc"); 创建了几个对象

答:一个或者2个对象,new String(“abc”)调用String的构造方法创建实例str,并赋初始值abc,所以肯定创建了一个对象,是在堆内存中分配空间

 然而str对象,就不确定了,如果String的常量池中没有abc那么就创建str对象,如果常量池中已经有了abc则不创建对象,直接把str指向该引用

也可以使用javap -c 编译过的类名(可以查看java编译后的ByteCode字节码


ldc的含义是:将常量值从常量池中取出来并且压入栈中。从上图中,我们可以看到第0行和第7行中的字符串引用是同一个,这说明了,在编译期间,该字符串变量的值已经确定了下来,并且将该字符串值缓存在缓冲区中,同时让该变量指向该字符串值,后面如果有使用相同的字符串值,则继续指向同一个字符串值

所以String str2 = new String("abc"); 此时就创建一个对象,而abc 则是从字符串常量缓冲区中取出来的。

ok。就是这个样子。

15.web service相当于Http+?+?

答:第一个?肯定是xml;第二个问号应该是schema

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值