java基础面试题1
1.简单说说Java中的异常处理机制的简单原理和应用。
2.Java中Object类常用方法
toString方法
toString定义一个对象的字符串表现形式,Object类中定义的规则是类的全路径名+@+对象的哈希码。重写之后,我们可以自行决定返回的字符串中包含对象的哪些属性信息。
clone方法
finalize方法
getClass方法
hashCode方法
equals方法
说说HashCode()、equals()的区别?
详解
notify方法
notifyAll方法
wait方法
java中 sleep 和 wait 的区别
3.jdk1.8新特性
4.面向对象的三大特性
5.面向对象的五大原则
6.java中重载和重写的区别
7.怎样声明一个类不会被继承,什么场景下会用?
final修饰的类不能有子类,大部分都是出于安全考虑
String 类举例
8.java中的自增是线程安全的吗,如何实现线程安全的自增
不安全
public class SafeTest {
private static AtomicInteger count = new AtomicInteger(0);
private static final int times = Integer.MAX_VALUE;
public static void main(String[] args) {
long curTime = System.nanoTime();
Thread decThread = new DecThread();
decThread.start();
// 使用run()来运行结果为0,原因是单线程执行不会有线程安全问题
// new DecThread().run();
System.out.println("Start thread: " + Thread.currentThread() + " i++");
for (int i = 0; i < times; i++) {
count.incrementAndGet();
}
// 等待decThread结束
while (decThread.isAlive());
long duration = System.nanoTime() - curTime;
System.out.println("Result: " + count);
System.out.format("Duration: %.2f\n", duration / 1.0e9);
}
private static class DecThread extends Thread {
@Override
public void run() {
System.out.println("Start thread: " + Thread.currentThread() + " i--");
for (int i = 0; i < times; i++) {
count.decrementAndGet();
}
System.out.println("End thread: " + Thread.currentThread() + " i--");
}
}
}
9.jdk1.8中的stream有用过吗,详述一下stream的并行操作原理?stream并行的线程池哪来的
10.动态代理的2种方式以及区别?
11.简述一下Java运行时数据区?
12.说一下反射,反射会影响性能吗?
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射这种运行时动态的功能可以说是非常重要的,可以说无反射不框架!!!反射方式实例化对象和属性赋值和调用方法肯定比直接的慢,但是程序运行快慢的原因有很多,不能主要归于反射,如果你只是偶尔调用一下反射,反射的影响可以忽略不计,如果你需要大量调用反射,会产生一些影响,适当考虑减少使用或者使用缓存,你的编程思想才是限制你程序性能的最主要的因素
13.单例模式有哪些实现方式,有什么优缺点
14.BIO,NIO,AIO有什么区别?
15.包装类缓存问题
16.为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
17.为什么不把基本类型放堆中呢?
18.堆中存什么,栈中存什么?
19.Java中的参数传递是传值呢?还是传引用?
参数是基本类型,按值传递
参数是引用传递,按引用传递
按引用传递在方法体中修改形参时,可能会对实参产生影响