基础技术
- 谈谈你对HashMap的理解,底层的基本实现。HashMap怎么解决碰撞问题的?HashMap这些数据结构是线程安全的吗?假如回答HashMap不是线程安全的,HashTable是线程安全的,接着问有没有线程安全的Map,接下来问concurrent包
JVM
- 对JVM熟不熟悉?简单说说类加载过程,里面执行了哪些操作?GC和内存管理,平时在tomcat里面有没有做过相关的配置?
多线程
-
Java 实现线程有哪几种方式?
1)继承 Thread 类实现多线程
2)实现 Runnable 接口方式实现多线程
3)使用 ExecutorService、Callable、Future 实现有返回结果的多线程 -
一个线程的生命周期有哪几种状态?它们之间如何流转的?
NEW:毫无疑问表示的是刚创建的线程,还没有开始启动。
RUNNABLE: 表示线程已经触发 start()方式调用,线程正式启动,线程处于运行中状态。
BLOCKED:表示线程阻塞,等待获取锁,如碰到 synchronized、lock 等关键字等占用临界区的情况,一旦获取到锁就进行 RUNNABLE 状态继续运行。
WAITING:表示线程处于无限制等待状态,等待一个特殊的事件来重新唤醒,如通过wait()方法进行等待的线程等待一个 notify()或者 notifyAll()方法,通过 join()方法进行等待的线程等待目标线程运行结束而唤醒,一旦通过相关事件唤醒线程,线程就进入了 RUNNABLE 状态继续运行。
TIMED_WAITING:表示线程进入了一个有时限的等待,如 sleep(3000),等待 3 秒后线程重新进行 RUNNABLE 状态继续运行。
TERMINATED:表示线程执行完毕后,进行终止状态。需要注意的是,一旦线程通过 start 方法启动后就再也不能回到初始 NEW 状态,线程终止后也不能再回到 RUNNABLE 状态
-
多线程同步有哪几种方法?
Synchronized 关键字,Lock 锁实现,分布式锁等。 -
多线程之间如何进行通信?
wait/notify -
线程怎样拿到返回结果?
实现Callable 接口。 -
新建 T1、T2、T3 三个线程,如何保证它们按顺序执行?
用 join 方法。 -
怎么控制同一时间只有 3 个线程运行?
用 Semaphore。 -
为什么要使用线程池?
我们知道不用线程池的话,每个线程都要通过 new Thread(xxRunnable).start()的方式来创建并运行一个线程,线程少的话这不会是问题,而真实环境可能会开启多个线程让系统和程序达到最佳效率,当线程数达到一定数量就会耗尽系统的 CPU 和内存资源,也会造成 GC频繁收集和停顿,因为每次创建和销毁一个线程都是要消 耗系统资源的,如果为每个任务都创建线程这无疑是一个很大的性能瓶颈。所以,线程池中的线程复用极大节省了系统资源,当线程一段时间不再有任务处理时它也 会自动销毁,而不会长驻内存。
IO
- 熟悉IO吗?与NIO的区别,阻塞和非阻塞的区别。
设计模式
- 哪些地方用到了单例模式
1)网站的计数器,一般也是采用单例模式实现,否则难以同步。
2)应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。
3)多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制
4)Windows的(任务管理器)就是很典型的单例模式,他不能打开俩个
5)windows的(回收站)也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。
- Spring开发中的工厂设计模式
- 代理模式
1)什么是代理模式
一、通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AO的P微实现)
二、代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似
2)代理模式应用场景
Spring AOP、日志打印、异常处理、事务控制、权限控制等
Spring Boot
-
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是 @SpringBootApplication ,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfifiguration:组合了 @Confifiguration 注解,实现配置文件的功能。
@EnableAutoConfifiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例 如: java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。 -
比较一下 Spring Security 和 Shiro 各自的优缺点 ?
-
Spring Boot 中如何解决跨域问题 ?
跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfifigurer接口然后重写addCorsMappings方法解决跨域问题。 -
SpringBoot微服务中如何实现 session 共享 ?
-
如何叙述Spring Bean的生命周期?
1)创建前准备
从上下文和加载配置中,去解析并且查找Bean有关的扩展实现,比如说像init-method,容器在初始化Bean的时候,会调用的方法。
2)创建实例化
3)依赖注入
4)容器缓存
5)销毁实例
Mybatis
- Hibernate 和 MyBatis 的区别
MQ
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
- RabbitMQ基本组件或者概念
- RabbitMQ的工作模式
- 什么是消息队列?
1)MQ,Producer生产者,Broker代理,Consumer消费者
2)应用场景主要分为3种,分别是异步,实时性不是很高;应用解耦,增加灵活度;流量削峰;
3)小型公司,大型公司Kafka - MQ如何保证消息不丢失?
1)同步
2)必须确保Producer投送机制成功,如果失败进行补偿。
3)消费者角度, - MQ如何保证消息顺序一致性问题?
Dubbo
- Dubbo是如何动态感知服务下线的?