java基础面试题1

1.简单说说Java中的异常处理机制的简单原理和应用。

java基础面试题1_java

2.Java中Object类常用方法

toString方法

toString定义一个对象的字符串表现形式,Object类中定义的规则是类的全路径名+@+对象的哈希码。重写之后,我们可以自行决定返回的字符串中包含对象的哪些属性信息。

clone方法

java基础面试题1_i++_02
详解

finalize方法

java基础面试题1_java_03

getClass方法

java基础面试题1_java基础_04

hashCode方法

java基础面试题1_java基础_05
详解

equals方法

说说HashCode()、equals()的区别?
java基础面试题1_java_06
详解
java基础面试题1_i++_07
java基础面试题1_引用传递_08

notify方法

java基础面试题1_线程安全_09

notifyAll方法

java基础面试题1_i++_10

wait方法

java中 sleep 和 wait 的区别
java基础面试题1_线程安全_11

3.jdk1.8新特性

java基础面试题1_java基础_12
详解

4.面向对象的三大特性

java基础面试题1_java基础_13

5.面向对象的五大原则

java基础面试题1_线程安全_14
java基础面试题1_java_15
java基础面试题1_java基础_16
java基础面试题1_java基础_17
详解
java基础面试题1_线程安全_18
详解
java基础面试题1_引用传递_19

6.java中重载和重写的区别

java基础面试题1_java基础_20

7.怎样声明一个类不会被继承,什么场景下会用?

final修饰的类不能有子类,大部分都是出于安全考虑

String 类举例

8.java中的自增是线程安全的吗,如何实现线程安全的自增

不安全
java基础面试题1_i++_21
java基础面试题1_i++_22
java基础面试题1_i++_23


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--");
        }
    }
}

java基础面试题1_java基础_24

9.jdk1.8中的stream有用过吗,详述一下stream的并行操作原理?stream并行的线程池哪来的

详解

10.动态代理的2种方式以及区别?

java基础面试题1_java_25
java基础面试题1_线程安全_26
JDK动态代理原理

11.简述一下Java运行时数据区?

java基础面试题1_java_27

12.说一下反射,反射会影响性能吗?

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射这种运行时动态的功能可以说是非常重要的,可以说无反射不框架!!!反射方式实例化对象和属性赋值和调用方法肯定比直接的慢,但是程序运行快慢的原因有很多,不能主要归于反射,如果你只是偶尔调用一下反射,反射的影响可以忽略不计,如果你需要大量调用反射,会产生一些影响,适当考虑减少使用或者使用缓存,你的编程思想才是限制你程序性能的最主要的因素

13.单例模式有哪些实现方式,有什么优缺点

详解

14.BIO,NIO,AIO有什么区别?

java基础面试题1_引用传递_28
详解
基础知识

15.包装类缓存问题

详解

16.为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?

java基础面试题1_引用传递_29
java基础面试题1_线程安全_30

17.为什么不把基本类型放堆中呢?

java基础面试题1_引用传递_31

18.堆中存什么,栈中存什么?

java基础面试题1_java_32

19.Java中的参数传递是传值呢?还是传引用?

参数是基本类型,按值传递
参数是引用传递,按引用传递
按引用传递在方法体中修改形参时,可能会对实参产生影响

20.final finally finalize的区别

java基础面试题1_java基础_33
java基础面试题1_i++_34