因为本人近期时间较忙,还没有自己总结每个题。但是面试过后我还是在网上认真查看了每个题适合的答案解析,我会给出链接,供自己以后复习。大家也可以通过本次面经看看自己还有什么不足。
这些链接都是比较优质的回答,可以多看看学习。
- RabbitMQ实现原理?怎么实现?怎么进行通信?为什么用rabbitMQ而不直接调用
首先介绍RabbitMQ的组件有哪些 11个组件
生产者、消费者、队列、消息、连接、通道、交换机、绑定、路由键、AMQP、用户
交换机的类型 4种:直接、扇出、主题、消息头
- String、StringBuilder、StringBuffer底层实现原理
String 不能被继承、是不可变类型、可以进行序列化和比较
StringBuffer : 无参构造默认char[] 大小为16,有参构造,传入参数的大小加上16.后续进行拼接追加等操作时,如果大于当前char[] 会进行扩容,现有容量扩大一倍在加上2,如果还是不够则直接等于需要容量的大小。
相同点:底层都是通过char数组实现的
不同点:String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象;而StringBuffer和StringBuilder对象的值是可以被修改的;
StringBuffer几乎所有的方法都使用synchronized实现了同步,线程比较安全,在多线程系统中可以保证数据同步,但是效率比较低;而StringBuilder 没有实现同步,线程不安全,在多线程系统中不能使用 StringBuilder,但是效率比较高。
如果我们在实际开发过程中需要对字符串进行频繁的修改,不要使用String,否则会造成内存空间的浪费;当需要考虑线程安全的场景下使用 StringBuffer,如果不需要考虑线程安全,追求效率的场景下可以使用 StringBuilder。
- 谈谈你知道的队列有哪些
java常用队列 - 为什么jdk 1.8 要引入LocalDateTime
原来的Date类可读性较差:
Date date =new Date(); System.out.println(date);
// Sat Nov 14 11:03:41 CST 2020
Date日期的格式化JDk自带的api比较麻烦,通常会使用第三方日期时间库如:joda-time,commos-lang
jdk8 新增的日期时间类:LocalDate、LocalTime、LocalDateTime、ZoneId、ZoneDAteTime
LocalDate:主要是友好的日期格式,不包含时间和时区
构造方法:LocalDate(2020,11,04) 年月日
sout(localDate) 有较好的可读性
LocalTime 时间类
LocalTime.of(12,12,12) 时分秒
LocalDateTime是综合了Date与Time
LocalDateTime.of(LocalDate.now(), LocalTime.now()); LocalDateTime.of(2020, 11, 14, 13, 10, 50); LocalDate.now().atTime(LocalTime.now()); LocalTime.now().atDate(LocalDate.now()); LocalDateTime.now();
时区:
ZoneId代替老版本的TimeZone,每个ZoneId都有一个特定的地区标识
ZoneId.of("Asia/Shanghai"); ZoneId.systemDefault()
时区时间日期的总和:
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.now(), ZoneId.systemDefault()); ZonedDateTime.of(LocalDate.now(),LocalTime.now(),ZoneId.of("Asia/Shanghai"));
-
SpringSecurity实现过程
Spring Security实现原理
Spring Security实现原理 -
SpringCloud主要的几个组件,feign组件使用流程
Spring Cloud几个组件相关介绍 -
CAS实现类
CAS相关 -
Mysql数据库如何优化增加读写速度,索引在什么时候失效,索引的执行顺序,两个引擎有什么区别
mysql如何进行优化
索引什么时候会失效
索引的执行顺序
两大执行引擎的区别------------------ -
maven无法下载jar包该怎么处理
-
谈谈最近的项目
怎么谈项目? -
Ioc是什么,di是什么
IOC、DI简介 -
Mybatis取参数的方式以及他们的区别
mybatis取参方法总结
- 传入单个参数
- 传入多个参数
- 传入map
- 传入对象
- 使用@Param
-
Redis支持的数据类型,缓存雪崩、缓存击穿
redis常用的数据类型和操作
redis的三种缓存问题 -
红黑树的实现、红黑树的自动转换
红黑是原理 -
一句话完成插入数据到数据库,当该数据存在时删除该数据并插入新数据,不存在时直接插入
mysql的replace语法 -
写一个Singleton出来
因为这个比较简单,我就直接写出来了
因为饿汉式类创建时就将实例创建出来了,可能会发生内存泄漏问题,这里我就写两个常见的饿汉式。
//双重锁检验
class Product{
private static volatile Product instance;
private Product(){}
public static Product getInstance(){
if(instance==null){
synchronized(Product.class){
if(instance==null){
instance=new Product();
}
}
}
}
}
//静态内部类
class Product{
static class Singleton{
private static Product instance =new Product();
}
private Product(){}
public static Product getInstance(){
return Singleton.instance;
}
}