面经面经面经 1、讲讲项目吧?2、项目中你是如何解决你这个分布式session的为啥用到redis有没有其他的解决方案3、聊一下ThreadLocal是怎么用来保存用户的信息的4、为啥要使用zuul来做入口登陆5、JVM的四种垃圾回收机制的过程讲一下6、ArrayList和LinkedList的区别 如果说在数组的第五十位和链表的五十位加数据会发生什么变化7、HashMap底层实现原理 为什么要用红黑树而不用自平衡二叉树(这里我回答的是快 为啥快)8、Spring中IOC和AOP是什么???
Spring的核心是什么 spring是一个开源框架spring是为了简化企业开发而生的,使得开发变得更加优雅和简洁spring是一个IOC和AOP的容器框架IOC:控制反转 AOP:面向切面编程 容器:包含并管理应用对象的生命周期,就好比桶装水一样,spring就是桶,而对象就是水...
受检异常和非受检异常的区别和理解 1、受检异常所谓的受检异常其实表示的是在编译的时候,要强制检查的异常,这种异常需要去显示的通过try/catch来进行捕获或者通过throws去抛出去否则程序无法通过编译的。2、非受检异常所谓的非受检异常表示编译器可以不需要去强制去检查异常,这种异常不需要去显示去捕获或者抛出。在java里面所有的异常都需要继承java.lang.Throwable这个类如下图:...
在java中获取Class的三种方式 第一种:Class c = Class.forName("完整类名带包名")第二种:Class c = 对象.getClass();第三种:Class c = 任何类型.class;代码如下:package com.ws1;/*要操作一个类的字节码,首先要获取到这个类的字节码,怎么获取java.lang.Class实例? 三种方式: 第一种:Class c = Class.forName("完整类名带包名") 第二种:Class c = 对象..
Java创建线程的三种方式 1、继承Thread然后重写run方法(没有返回值)package com.ws;public class Demo01 { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); for (int i = 0; i < 10; i++) { System.out.println
String abc = new String(“abc“),到底创建了几个对象 String abc = new String("abc");咱们先不着急回答这个到底创建了几个人对象,先分析:首先这个代码里面有一个‘new’关键字,我们大概都听过凡是new出来的都是放在堆中的,这个关键字是在程序运行的时候,根据已经加载的系统类String在堆里面实例化一个字符串对象,然后在这个String的构造方法里面传递了一个“abc”的字符串,因为String里面的字符串成员变量底层是用final修饰的,所以它是一个字符串常量,所以JVM会拿字面量“abc”去字符串常量池里面去找,对应它的
ABA问题遇到过吗,详细说以下,如何避免ABA问题 1、有两个线程同时修改一个变量的值,线程1、线程2,都更新变量值,将变量从A更新为B2、首先线程1获得到CPU时间片,线程2由于某些原因原因发生等待,线程1进行比较更新,CAS(CompareAndSwap),成功将变量的值从A更新到B3、更新完毕后,恰好又有线程3进来想要把变量的值从B更新到A,线程3进行比较更新,成功将变量的值从B更新为A4、线程2获得到CPU时间片,然后进行比较更新,发现值是预期的A,然后又更新成了B,但是线程1并不知道该值已经从A-->B-->A这个过程,这
SpringBoot初识 接下来我下面写的是我们第一次使用SpringBoot的时候的使用步骤如下:第一步:创建一个Maven工程第二步:导入springboot相关的依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>
String、StringBuffer、StringBuilder的区别 String不可变,StringBuffer和StringBuilder是可变的。1、String是只读字符串,也就意味着String引用的字符串内容是不可以被改变的,但是我们往往会有这样一个误解:String str = "abc";str = "bcd";对于上面的代码来说,字符串明明是可以改变的呀,为啥是不可变的呢?其实不是,str只是一个引用对象,它指向一个字符串对象是"abc",第二行代码只是让它指向了一个新的字符串"bcd",而"abc"对象并没有任何改变。而String的源
fianl、finally、finalize三者的区别 首先这三者其实是没有本质关系的,面试的时候会考察我们对这块的理解: fianl fianl是用来修饰变量,修饰类,修饰类属性,当它修饰变量的时候,变量的引用不可变但是地址中的内容可以改变,当它修饰类的时候,这个类不可被继承但是可以被重载,当它修饰类属性的时候,子类就不能给这个属性重新赋值,如果赋值会报错。 finally 常用语try catch finally中,在异常处理时用finally执行任何清除操作,不管有没有异常抛出和捕获finally中的语句都会执行...
关于双亲委派机制和类加载的过程 我们写的java文件到最终运行,他必须经过编译和类加载两个阶段,而编译阶段的过程就是把.java文件编译成.class文件,而类加载的阶段就是把.class文件加载到JVM内存里面,加载完毕会得到一个Class对象,我们可以使用new关键字来实例化这个对象,如下图:而类的加载过程需要涉及到类加载器,JVM在运行的时候会产生三个类加载器,这三个类加载器组成了一个层级关系,每一个加载器分别去加载不同作用范围的jar包,比如说Bootstrap Classloader(启动类加载器)它主要是负责.
抽象类和接口的区别 首先咱们来看抽象类,什么是抽象类?1、抽象类里不一定有抽象方法,抽象类必须要有关键字abstract来修饰2、如果一个类包含抽象方法,那么这个类一定是抽象类3、抽象类不能用final修饰代表,因为抽象类是被用于继承的,但是final修饰代表不可修改,不可继承接口和抽象类的区别?1、一个子类只能继承一个抽象类,但是可以实现多个接口2、抽象类有构造方法,接口没有构造方法3、抽象类可以有普通成员变量,接口中不能有4、抽象类和接口都可以有静态成员变量,但是抽象类中成员变量可以是任意类