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