2022面试题

2022面试题--答案可以自己完善

redis相关

1、redis zset底层数据结构是什么?

zipList:满足以下两个条件[score,value]键值对数量少于128个;

每个元素的长度小于64字节;

skipList:不满足以上两个条件时使用跳表、组合了hash和skipListhash用来存储value到score的映射,这样就可以在O(1)时间内找到value对应的分数;

skipList按照从小到大的顺序存储分数

skipList每个元素的值都是[socre,value]对

2、redis的部署有哪些方案

3、redis list的数据结构是什么

当列表对象同时满足以下两个条件时,列表对象使用ziplist进行存储,否则用linkedlist存储

  • 列表对象保存的所有字符串元素的长度小于64字节
  • 列表对象保存的元素数量小于512个

4、redis支持哪些数据类型

5、redis的多路复用

6、redis的主从和哨兵模式有什么优缺点

7、redis的备份方式两种

8、redis分区概念

客户单分区 代理分区 查询路由

9、微信步数的缓存实现用什么数据类型

10、redis分布式锁的实现

11、删除策略?

12、string hash 的区别?哪个占用内存更多? string的sds了解吗

13、redis cluster 一致性hash是否了解过

java

1、stringbuffer和stringbuilder 的区别

2、如何实现一个线程安全的类似余stringbuffer

3、集合都有哪些?

4、list都有哪些实现?arrayList 和linkedList的区别 ?arrayList 快速扩容的方式

5、hashMap 插入数据的过程?hashMap是否线程安全?出现了哪些问题

6、concurrentHashmap(是否使用过安全的集合类举个例子)

7、优先级队列是否了解

8、synchronize锁?锁普通方法和静态方法的区别?对象头由哪些组成?

9、IO简单说说?NIO、BIO的区别

10、ThreadLocal是否了解?

11、volatile是否了解?做了什么?

12、共享变量如何处理?多线程操作volatile修饰的关键字?变量改动 会不会更新线程工作内存的相关内容

13、乐观锁解决什么问题

14、线程有谁支配调度

15、缓存一致性

推荐采用「先更新数据库,再删除缓存」方案,并配合「消息队列」或「订阅变更日志binlog」的方式来做

线程池相关

1、线程池的创建方式

2、线程池的参数介绍

3、线程池什么时候开启全部线程?怎么保证核心线程一直运行?有几种拒绝策略

6、线程池有很多请求怎么处理?重写拒绝策略

7、线程的几种状态

8、线程池的使用场景

spring相关

1、循环依赖怎么解决的

2、springmvc的请求流程

3、spring事务的实现

4、日志怎么打印的怎么处理的

5、synchronize 和lock、reentrantLock的区别

Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类(java.util.concurrent(并发的).locks包),通过这个类可以实现同步访问

Lock是一个接口 ,ReentrantLock是唯一实现了Lock接口的类

ReentrantReadWriteLock实现了ReadWriteLock接口;

6、多个读一个写的缓存怎么实现 用什么

ReentrantReadWriteLock

7、controller线程安全的问题

8、service层的dto为什么序列化

9、事务失效

10、autowired 和resource区别

11、spring的bean初始化过程 beanPostProcesser是否了解

postProcessBeforeInitialization

实例化、依赖注入完毕,

在调用显示的初始化之前完成一些定制的初始化任务

postProcessAfterInitialization

实例化、依赖注入、初始化完毕时执行

12、BeanFactory和ApplicationContext的区别

ApplicationContext是BeanFactory的子接口

applicationContext一次性自动创建所有对象

BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化

jvm

1、jvm有哪些模块

2、jvm1.7和1.8有什么区别

JDK1.8和JDK1.7的jvm内存最大的区别是, 在1.8中方法区是由元空间(元数据区)来实现的,常量池移到堆中.

1.8不存在方法区,将方法区的实现给去掉了,而是在本地内存中,新加入元数据区(元空间).

3、频繁fullgc的优化方案

4、jvm垃圾回收期 cms的回收过程?g1

5、元空间和持久代的区别

6、简述虚拟机栈?栈帧是什么?

7、oom怎么快速定位问题

8、string在哪块内存里

9、堆的分代?分别使用了什么清理算法?什么时候开始垃圾回收

springCloud

1、用了哪些组件

2、eureka的实现和服务注册、治理?怎么实现注册的?心跳机制?和nacos的区别?

3、config的用法

4、feign的实现?feign 负载均衡的方案?轮询调度是什么 挨个询问然后循环 也可使用权重轮询调度

5、hystrix的熔断和降级?

6、hystrix怎么实现限流削峰?

7、zuul都做了什么?网关怎么配置限流

8、链路追踪

针对服务器的性能差异可分配不同的负载;

当需要将某个结点剔除时,只需要将其权重设置为0即可;

9、nginx的负载均衡和feign的负载均衡有啥区别

10、nacos和eureka如何实现高并发

nacos采用内存队列的方式进行服务注册

     也就是说客户端在把自己的信息注册到Nacos Server的时候,并不是同步把信息写入到注册表中的,而且采取了先写入内存队列中,然后用独立的线程池来消费队列进行注册的。

Eureka Server 注册表多级缓存设计

1)只读缓存

2)读写缓存

3)实际注册表

首先从ReadOnlyCacheMap里面查询缓存的注册表。

若没有,就找ReadWriteCacheMap里面缓存的注册表。

如果还是没有,就从内存中获取实际的注册表数据。

在注册表发生变更的时候:

会在内存中更新变更的注册表数据,同时过期掉 ReadWriteCacheMap

此过程不会影响ReadOnlyCacheMap提供人家的查询注册表

默认每30s Eureka Server会将ReadWriteCacheMap更新到ReadOnlyCacheMap里面

默认每180s Eureka Server将ReadWriteCacheMap里面数据失效

下次有服务拉取注册表,又会从内存中获取最新的数据了,同时填充各级缓存。

springboot

1、springboot自动装备的原理

mysql

1、innodb和myisam的区别

2、索引类型?

3、mysql 使用的索引结构?为什么使用b+树?什么情况下回表什么情况下不回表

4、慢sql的优化

5、索引失效的场景

6、mysql底层的日志

7、mvcc的实现

8、gapLock?解决了什么

gapLock+行锁 == next-key lock 解决了幻读

9、插入一条数据B+树产生了什么变化

10、mysql的隔离级别

读未提交内容(read-uncommitted)

读取提交内容(read-committed)

可重复读(repeatable-read)

可串行化(serializable)

rabbitmq

1、rabbitmq和kafka的区别

2、rabbitmq消息到队列的过程

3、几种模式?常用哪几种?应用场景?topic是否了解

4、怎么保证消息不丢失

5、rabbitmq的定时任务实现

6、rabbitmq的顺序消费

7、生产端使用什么方法发送到交换机

8、消息的幂等性?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 2022Java面试题包括了Java基础知识、面向对象编程、Java集合框架、多线程、IO流、网络编程、JVM虚拟机、JavaWeb、Spring框架等等。其中,Java基础知识是最为基础的一部分,需要掌握Java语言特性、面向对象思想、常用数据类型、数据类型转换、运算符、流程控制语句、方法等知识。面向对象编程方面需要掌握继承、封装、多态、抽象类、接口等知识,还需要熟悉类、对象的创建和使用。在Java集合框架方面,需掌握集合接口、集合类及其方法、迭代器、泛型等知识。多线程方面包括线程的创建、线程的运行、线程的同步与死锁等。IO流方面需要了解文件的读取、输出、输入流、文件的写入等相关知识。网络编程方面,需要熟悉TCP/IP协议、UDP协议、Socket编程等;JVM虚拟机方面,需理解虚拟机的内存模型、GC算法、类文件结构等。在JavaWeb方面,需熟悉Servlet与JSP、Web框架、常用的数据库连接池等;Spring框架方面,需要了解Spring的IOC、AOP等核心概念,以及SpringMVC、SpringBoot等集成框架的使用。综上所述,掌握Java编程语言的基础知识和相关技能对于在未来的Java编程领域内拥有良好的竞争力是必要的。 ### 回答2: 首先,需要了解Java语言的基础知识,包括数据类型、运算符、流程控制语句等等。还需要熟练掌握面向对象编程的概念和技术,比如封装、继承、多态以及接口等。同时,需要了解Java中的异常处理、线程和并发、集合框架等高级特性。 面试中可能会被问到Java中的垃圾回收机制,需要了解Java虚拟机中的垃圾回收算法和各种垃圾回收器的特点和使用方法。还有关于Java中的类加载机制和Java虚拟机的JVM调优等问题,需要做足功课以进行应对。 此外,在企业级项目中,常用的开发框架如Spring和Hibernate等都需要熟练掌握,包括框架的原理和使用方法。还需要掌握相关技术栈,如RESTful API、SSH、Struts2等技术。 在面试中还可能会出现一些算法和数据结构的问题,需要熟练掌握基本数据结构和算法,并能在实际问题中运用它们解决问题。 除了技术方面,还需要对自己的项目经验和技术方向有清晰的认识和规划,以及良好的沟通能力、团队合作精神和解决问题的能力,在面试中展现出自己的优势和价值。 总之,在面试中应该全面准备,提前了解面试过程和大厂面试经验,结合自己的实际情况和实际项目经验,全面展现自己的技术能力和个人价值,赢得面试官的青睐。 ### 回答3: 2022java面试题 Java开发工程师是目前市场上最受欢迎的岗位之一。无论是初级还是高级Java工程师,一般都需要通过一系列的面试来获得自己理想的职位。在2022年,Java面试难度可能会更高,这是因为Java技术在各行各业的应用越来越广泛。如果您想在这个行业有进一步的发展,那么您需要加强您的技能和准备好可能会出现的Java面试题。 下面是2022Java面试题的一些简介 1. 介绍Java中的四个访问修饰符。 2. 讲解什么是Java中的hashCode()和equals()方法。 3. 讲解Java中的线程安全性问题,以及如何解决它。 4. 介绍Java中的异常和错误,并解释它们的区别。 5. 讲解Java中接口和抽象类的区别。 6. 讲解Java中的反射机制,以及它的应用场景。 7. 介绍Java中的集合框架,并讲解每个集合的使用场景。 8. 讲解Java中的泛型,并给出一个在代码中使用它的例子。 9. 讲解Java中的多态性,并解释其优点。 10. 介绍Java中常用的设计模式,并针对每一个设计模式说明适用的场景。 除了这些具体的面试题,面试官也可能会根据公司的需要,在更深入的技术方面提出问题,例如分布式技术,数据库等。所以不管您是面试初级Java工程师还是高级Java工程师,您都应该对Java的原理、常见问题和应用方式有足够的了解。不断学习、掌握新知识和提高自己解决实际问题的能力,这是成为Java开发工程师的关键。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值