Java常见面试题

基础技术

  1. 谈谈你对HashMap的理解,底层的基本实现。HashMap怎么解决碰撞问题的?HashMap这些数据结构是线程安全的吗?假如回答HashMap不是线程安全的,HashTable是线程安全的,接着问有没有线程安全的Map,接下来问concurrent包

JVM

  1. 对JVM熟不熟悉?简单说说类加载过程,里面执行了哪些操作?GC和内存管理,平时在tomcat里面有没有做过相关的配置?

多线程

  1. Java 实现线程有哪几种方式?
    1)继承 Thread 类实现多线程
    2)实现 Runnable 接口方式实现多线程
    3)使用 ExecutorService、Callable、Future 实现有返回结果的多线程

  2. 一个线程的生命周期有哪几种状态?它们之间如何流转的?
    NEW:毫无疑问表示的是刚创建的线程,还没有开始启动。

RUNNABLE: 表示线程已经触发 start()方式调用,线程正式启动,线程处于运行中状态。

BLOCKED:表示线程阻塞,等待获取锁,如碰到 synchronized、lock 等关键字等占用临界区的情况,一旦获取到锁就进行 RUNNABLE 状态继续运行。

WAITING:表示线程处于无限制等待状态,等待一个特殊的事件来重新唤醒,如通过wait()方法进行等待的线程等待一个 notify()或者 notifyAll()方法,通过 join()方法进行等待的线程等待目标线程运行结束而唤醒,一旦通过相关事件唤醒线程,线程就进入了 RUNNABLE 状态继续运行。

TIMED_WAITING:表示线程进入了一个有时限的等待,如 sleep(3000),等待 3 秒后线程重新进行 RUNNABLE 状态继续运行。

TERMINATED:表示线程执行完毕后,进行终止状态。需要注意的是,一旦线程通过 start 方法启动后就再也不能回到初始 NEW 状态,线程终止后也不能再回到 RUNNABLE 状态

  1. 多线程同步有哪几种方法?
    Synchronized 关键字,Lock 锁实现,分布式锁等。

  2. 多线程之间如何进行通信?
    wait/notify

  3. 线程怎样拿到返回结果?
    实现Callable 接口。

  4. 新建 T1、T2、T3 三个线程,如何保证它们按顺序执行?
    用 join 方法。

  5. 怎么控制同一时间只有 3 个线程运行?
    用 Semaphore。

  6. 为什么要使用线程池?
    我们知道不用线程池的话,每个线程都要通过 new Thread(xxRunnable).start()的方式来创建并运行一个线程,线程少的话这不会是问题,而真实环境可能会开启多个线程让系统和程序达到最佳效率,当线程数达到一定数量就会耗尽系统的 CPU 和内存资源,也会造成 GC频繁收集和停顿,因为每次创建和销毁一个线程都是要消 耗系统资源的,如果为每个任务都创建线程这无疑是一个很大的性能瓶颈。所以,线程池中的线程复用极大节省了系统资源,当线程一段时间不再有任务处理时它也 会自动销毁,而不会长驻内存。

IO

  1. 熟悉IO吗?与NIO的区别,阻塞和非阻塞的区别。

设计模式

  1. 哪些地方用到了单例模式

1)网站的计数器,一般也是采用单例模式实现,否则难以同步。

2)应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。

3)多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制

4)Windows的(任务管理器)就是很典型的单例模式,他不能打开俩个

5)windows的(回收站)也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。

  1. Spring开发中的工厂设计模式
  2. 代理模式
    1)什么是代理模式
    一、通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AO的P微实现)
    二、代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似

2)代理模式应用场景
Spring AOP、日志打印、异常处理、事务控制、权限控制等

Spring Boot

  1. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
    启动类上面的注解是 @SpringBootApplication ,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
    @SpringBootConfifiguration:组合了 @Confifiguration 注解,实现配置文件的功能。
    @EnableAutoConfifiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例 如: java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
    @ComponentScan:Spring组件扫描。

  2. 比较一下 Spring Security 和 Shiro 各自的优缺点 ?

  3. Spring Boot 中如何解决跨域问题 ?
    跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Crossorigin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfifigurer接口然后重写addCorsMappings方法解决跨域问题。

  4. SpringBoot微服务中如何实现 session 共享 ?

  5. 如何叙述Spring Bean的生命周期?
    1)创建前准备
    从上下文和加载配置中,去解析并且查找Bean有关的扩展实现,比如说像init-method,容器在初始化Bean的时候,会调用的方法。
    2)创建实例化
    3)依赖注入
    4)容器缓存
    5)销毁实例

Mybatis

  1. Hibernate 和 MyBatis 的区别

MQ

  1. Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
  2. RabbitMQ基本组件或者概念
  3. RabbitMQ的工作模式
  4. 什么是消息队列?
    1)MQ,Producer生产者,Broker代理,Consumer消费者
    2)应用场景主要分为3种,分别是异步,实时性不是很高;应用解耦,增加灵活度;流量削峰;
    3)小型公司,大型公司Kafka
  5. MQ如何保证消息不丢失?
    1)同步
    2)必须确保Producer投送机制成功,如果失败进行补偿。
    3)消费者角度,
  6. MQ如何保证消息顺序一致性问题?

Dubbo

  1. Dubbo是如何动态感知服务下线的?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JayzChen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值