java常问面试题整理

  1. jdk的类加载器:(1)Bootstrap Classloader-启动类加载器 (2)Extension Classloader-扩展类加载器 (3)Application Classloader-应用类加载器
  2. 双亲委派模型:类加载的顺序是向上委派(查找缓存),向下查找(查找路径),能够避免类的重复加载,系统核心类被篡改,保证安全性
  3. java中顶级的异常类是Throwable,下面的子类分别是Exception和error(内存溢出,程序不能再运行),其中Exception又分为RunningtimeException(程序运行时的异常)和CheckedException(编译不通过的异常)
  4. GC标记为垃圾的两种算法:(1)标记计数法(2)可达性分析算法

垃圾清理的三种算法:(1)标记-清除(2)标记-整理(3)复制-清除

  1. jvm的五大内存模型:(1)方法区-存放对象信息(2)堆-开辟空间存放创建的对象(3)虚拟机栈-存放局部变量(4)本地方法栈-存放本地方法,虚拟机使用的native方法服务(5)程序计数器-用于标记代码执行到的位置
  2. 线程的5种状态:(1)创建(2)就绪(3)运行(4)阻塞-等待阻塞,同步阻塞,其他阻塞(5)死亡
  3. 线程的两种池:(1)锁池(2)等待池

wait()方法:线程释放锁,放到等待池中,不会去竞争锁,是Object类中的本地方法

notify():把线程从等待池中放到锁池中

notifyAll():把所有线程从等待池放到锁池中

sleep():是Thread中的静态方法,不会释放线程锁

yeild():线程进入就绪状态,让出cpu资源

join():线程进入阻塞状态,当前线程调用其他线程的join方法会进入阻塞状态

  1. 线程安全指的是内存安全,因为jvm中的堆可以被多个线程访问,所以存在多个线程访问同一个对象的情况,多个线程访问同一个操作和单个线程访问结果是否一致
  2. rocketmq同步发送、异步发送、单向发送

顺序消息:消息队列,有全局顺序(不能保证)和分区顺序

事务消息:保证分布式事务的最终一致性,有半事务消息机制,需要二次确认才能消费消息

广播模式:一个消息可以被多个消费者消费

集群模式:一个消息只能被一个消费者消费

  1. java中只有两种线程,用户线程和守护线程,守护线程相当于用户线程的保姆,相当于一个后台的线程,例如垃圾收集器
  2. ThreadLocal的原理:通过当前线程获取ThreadLocalMap,然后把当前的ThreadLocal作为ThreadLocalMap的key值进行值的存取,虽然是线程安全,但是存在注意内存泄露问题,使用完需要调用remove()方法清除ThreadLocal的值
  3. 对象的强引用和弱引用

强引用:强引用是不能被垃圾收集器回收的,除非设置为null

弱引用:一定被垃圾收集器回收,使用weakreference的类,一般在缓存中使用弱引用

  1. 并发:存在多个任务进行干扰,可以在多个任务之间交替执行

并行:多个任务互不干扰,可以重叠执行

串行:一个一个任务来执行

  1. 并发的3大特性:原子性、可见性(mesi:缓存一致性协议)、有序性
  2. 使用线程池的好处

(1)减低资源的消耗,反复的创建和销毁销毁线程需要耗费资源

(2)加快响应速度,线程池有创建好的空闲线程可以快速执行任务

(3)统一管理和维护线程

核心参数:corePoolSize(核心线程数)、maxPoolSize(最大线程数)、keepAliveTime(非核心线程的回收时间)、queueCapacity(队列长度)、rejectedExecutionHandler(任务满了拒绝策略)

  1. 线程池的阻塞队列,线程池创建线程是需要加全局锁的,会影响性能

(1)放空闲状态的核心线程,如果线下不使用的情况下就放在阻塞队列等待释放cpu

(2)放执行任务

  1. 线程池复用原理

  2. spring框架核心是ioc和aop,属于轻量级框架
  3. ApplicationContext和BeanFactory的区别

  1. spring中bean的生命周期

(1)扫描解析bean

(2)实例化bean

(3)属性依赖注入

(4)调用初始化前方法

(5)调用初始化方法

(6)调用初始化后方法(进行aop)

(7)使用bean

(8)销毁bean

  1. sping事务失效

  1. spring中的bean自动装配的方式

(1)by-name:根据类的名字来装配

(2)by-type:根据类的类型来装配

(3)constructor:根据类的构造器来装配

(4)autodetect:如果有默认的构造器,先根据类的构造器来装配,否则使用by-type来装配

  1. springboot、springmvc、spring的区别

  1. springmvc的工作流程

  1. springmvc的主要主件

(1)HandlerMapping:处理器映射器,维护请求的url对应的处理类

(2)HandlerAdapter:适配器,根据不同的处理类执行不同的处理方法

(3)HandlerExceptionResolver:异常情况处理

(4)ViewResovler:视图解析器,解析处理类生成的视图模型

(5) RequestTovIewNameTranslator:处理没有返回结果的处理器

(6)LocaleResolver:国际区处理

(7)ThemeResolver:解析不同类型的样式文件

(8)MutipartResolver:处理上传请求

(9)FlashMapManger:处理重定向参数

  1. springboot的自动装配原理

  1. springboot的starter的使用

  1. mybatis框架的核心接口:ParameterHandler(参数设置转换)、ResultSetHandler(结果处理)、StatementHandler(参数设置生成sql语句)、Executor(执行sql语句),使用的是jdk的动态代理
  2. mysql聚簇索引和非聚簇索引的区别,辅助索引叶子节点存的是主键索引,非聚集索引叶子节点存的是数据行地址

  1. 索引设计的原则

  1. mysql锁的类型

  1. mysql的执行计划

  1. 事务的基本特性和隔离级别

  1. mysql的ACID的保证机制

  1. mvcc:多版本并发控制,读取数据通过生成一个类似快照的版本来保存数据,读锁和写锁都不会冲突,不同的事务可以看到不同的版本,只在读已提交(read committed)和可重复读(repeatable read)的事务隔离级别才生效

  1. mysql主从同步原理

  1. mysql中的innoDB和MyISAM的区别

  1. redis的持久化机制RDB和AOF的区别

  1. redis的过期key的删除策略

  1. redis线程模型原理

  1. redis的缓存雪崩、缓存穿透、缓存击穿

  1. redis集群方案

  1. redis主从复制的核心原理

  1. 分布式CAP理论,BASE理论

  1. 负载均衡算法

  1. 分布式架构,session共享的方案

  1. redis的五种数据格式:string(String)、hash(Hashmap)、list(LinkList)、set(HashSet)、zset(TreeSet)

string:最常用的一种数据类型,Redis的string可以包含任何数据,比如jpg图片(生成二进制)或者序列化的对象

hash:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息,hash类型下的value只能存储字符串,不允许存储其他类型数据,hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计不是为了存储大量对象的,切记不可滥用,更不可以将hash作为对象列表使用

List:

数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
需要的存储数据:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现

set:

新的存储需求:存储大量的数据,在查询方面提供更高的效率

需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询

set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值式不允许重复的。也就是只有键没有值的hash

zset:

新的存储需求:根据排序有利于数据的有效显示,需要提供一种可以根据自身特征进行排序的方式。

需要的存储结构:新的存储模型,可以保存可排序的数据。

sorted_set类型:在set的存储结构基础上添加可排序字段。

  1. 分布式id生成方案

(1)uuid

(2)数据组自增序列

(3)leaf-sement

(4)基于redis、mongodb、zookeeper等中间件生成

(5)雪花算法

  1. 分布式锁解决方案

(1)数据库唯一键

(2)zookeeper的新建临时节点,可以解决死锁问题,客服端宕机临时节点会删除,其他客户端可以获取锁

(3)Redis:setNx会有锁的到期时间问题,可通过redisson解决

(4)redLock:解决redis集群不同节点的锁不一致的问题,每个节点都加上锁,获取到一半节点以上的锁信息才算获取到锁

  1. 分布式事务解决方案

  1. 如何实现接口的幂等性

  1. zookeeper的zab协议

  1. zookeeper的3种节点类型:持久节点、临时节点、有序节点
  2. zookeeper的watch机制

  1. zookeeper和eureka的区别

  1. springcloud和Dubbo的区别

  1. Hystrix的实现机制

  1. springcloud核心组件

  1. Dubbo的整体架构

  1. kafka的架构设计

  1. kafka的pull和push

  1. zk在kafka中的作用

  1. kafka高性能的原因

  1. kafka的rebalance机制

  1. 大数据的几个层级:ODS、DWD、DWM、DWS

ODS:数据运营层。数据经过ETL(抽取、清洗、传输)后存放的层,是最接近源数据的

DWD:数据明细层。保持和ODS层级一样的数据粒度,将一些相同的主题数据聚合到一张表中

DWM:数据中级层。在DWD层的基础上,做一些通用的计算,生成中间表

DWS:数据服务层。安装业务划分数据,生成业务数据表、

  1. rocketMQ的消费模式:集群消费模式和广播消费模式

setMessageModel(MessageModel.XXX)方法就可以指定是集群还是广播式消费,默认是集群消费模式,即每个Consumer Group中的Consumer均摊所有的消息

广播消费:一个消息会被多个消费者消费

  1. rocketMQ如何保证消息不丢失以及幂等性

1、rocketMQ不保证消息的幂等性,可能会出现发送重复消息问题,messageId相同(但是无法保证全局是唯一的)

2、需要自己在业务代码实现消息的幂等性,利用唯一标识,例如订单id

  1. rocketMQ的消息模式:拉(pull)和推(push)两种消息模式

pull其实就是消费者主动从MQ中去拉消息,而push则像rabbit MQ一样,是MQ给消费者推送消息。但是RocketMQ的push其实是基于pull来实现的。

它会先由一个业务代码从MQ中pull消息,然后再由业务代码push给特定的应用/消费者。其实底层就是一个pull模式

  1. rocketMQ的4大核心组成部分:NameServer、Broker、Producer、Consumer

NameServer:相当于rocketMQ的服务注册中心,RocketMQ 需要先启动 NameServer 再启动 Rocket 中的 Broker

Broker:消息存储节点

Producer:消息生产者

Consumer:消息消费者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值