Java常见面试题
文章平均质量分 71
Java常见面试题
_夜半钟声到客船
永远保持对技术的热情
展开
-
【面试】Java最新面试题资深开发-Spring篇(1)
问题八:Spring原理解释一下什么是Spring框架以及它的核心思想是什么?Spring中的IoC(控制反转)是什么,它如何实现?什么是DI(依赖注入)?Spring是如何支持依赖注入的?原创 2023-12-15 23:56:32 · 141 阅读 · 0 评论 -
【面试】Java最新面试题资深开发-Java中的垃圾回收机制
让我们继续进行Java资深开发的面试题目。请简要解释Java中的垃圾回收机制是如何工作的,以及它的优缺点。如果可能,请提供一些垃圾回收器的例子,以及它们在不同场景中的适用性。原创 2023-12-14 13:06:34 · 117 阅读 · 0 评论 -
【面试】Java最新面试题资深开发-Java中的并发集合类
Java提供了许多并发集合类来处理多线程环境下的数据共享和同步。你能列举一些Java中常用的并发集合类,并简要说明它们的特点和使用场景吗?原创 2023-12-12 10:41:03 · 75 阅读 · 0 评论 -
学习提高 | 深入学习Java核心技术需要涵盖广泛的主题
深入学习Java核心技术需要涵盖广泛的主题,包括集合框架、多线程、I/O操作、数据库访问等。以下是一些具体的步骤和代码示例,以帮助你更深入地理解和掌握Java核心技术。原创 2023-11-30 14:00:29 · 65 阅读 · 0 评论 -
学习提高:JVM垃圾收集器,垃圾回收算法,一个对象从创建到回收的过程。
每次 YGC 的时候,它们将存活的对象复制到未使用的那块空间,然后将当前正在使用的空间完全清除,交换两块空间的使用状态。当前大多商用虚拟机都采用这种分代收集算法,这个算法并没有新的内容,只是根据对象的存活的时间的长短,将内存分为了新生代和老年代,这样就可以针对不同的区域,采取对应的算法。-------------欢迎各位留言交流,如有不正确的地方,请予以指正。整理:让存活的对象,向内存的一端移动,然后直接清理掉没有用的内存。原创 2023-04-07 23:13:16 · 192 阅读 · 0 评论 -
学习提高:spring-data-elasticsearch-4.0.9数据刷新策略RefreshPolicy使用,Elasticsearch数据延迟解决方案
【学习提高】spring-data-elasticsearch-4.0.9数据刷新策略RefreshPolicy使用,Elasticsearch数据延迟解决方案原创 2022-06-28 16:46:09 · 2230 阅读 · 0 评论 -
【面试】解决前端重复请求导致数据出现重复问题,幂等性实现基于Redis,多端操作重复数据幂等问题,附代码
知识积累:解决重复请求导致MySQL数据表出现重复数据的问题,幂等性实现基于Redis,附代码!原创 2022-06-01 11:36:14 · 1849 阅读 · 0 评论 -
【面试】MyBatis的DefaultSqlSession是不是线程安全的?SpringBoot项目中Spring是怎么处理的?
MyBatis的DefaultSqlSession是不是线程安全的?答案:DefaultSqlSession类是不安全的SpringBoot项目中Spring是怎么处理的?原创 2022-05-17 10:50:47 · 1220 阅读 · 0 评论 -
知识积累:SpringBoot项目是由RabbitMQ 发送消息,消费者获取消息id为空,messageId为null,具体设置方式,消息幂等处理
背景:最近项目中,出现了少量RabbitMQ消息重复消费的情况,因此我们决定做下消息幂等处理。问题分析:组内讨论的方案有大概两种:一种是放Redis进行消息id保存和判重;另外一种则是放MySQL 表里保存和判重;由于MQ本身是异步处理的,因此就不会考虑使用缓存提升性能,另外我们打算将消息记录持久化存储,以便以后的问题排查分析。最终选择将消息id和消息内容持久化到MySQL表里。场景:SpringBoot中使用RabbitMQ进行消息发送和接收,但是查看阿里云控制台MessageId这一栏全原创 2022-05-16 16:36:06 · 2527 阅读 · 0 评论 -
知识积累:Spring中使用@Transactional注解的事务未完成,MQ消息发出去了,导致出现问题,事务未提交mq消息发出去解决方案
最近项目当中有个场景问题,需要在数据更新完成之后,发送mq消息通知周边系统进行操作。但是周边系统需要用到当前事务更新完成的数据。经常出现mq消息处理过程中拿不到更新之后的数据。经过排查日志,查看sql执行情况,代码逻辑。还跟组内成员反复查看代码执行逻辑。就是没发现问题点在哪里!然后只能跟踪debug代码执行过程,终于发现在事务执行过程中,没看到commit的时候,mq就把消息发出去了。然后查看源码,发现在事务提交后,提供了afterCommit的方法,需要我们自己来实现。解决方案:1、把mq发消息放原创 2022-05-06 07:29:04 · 2717 阅读 · 2 评论 -
生产稳定:JVM调优- java进程,JVM频繁GC,导致CPU占用、内存占用过高过高定位和排查
CPU占用过高定位和排查1、查到耗CPU的线程id,top命令找出最高占用的进程(command为java) top -H ps -mp pid -o THREAD,tid,time2、使用命令将线程id(tid)转换为十六进制 printf "%x\n" tid3、通过进程id和线程id查看线程栈内存 jstack pid |grep tid -A 304、通过进程id导出堆内存(dump信息) jmap -dump:format=b,file=name.原创 2021-11-10 13:33:55 · 2351 阅读 · 0 评论 -
生产稳定:JVM-MySQL-Tomcat-服务调用,调优相关
一、JVM1、开始调优根据需求进行JVM规划和预调优,这个其实后置了;优化运行JVM运行环境(慢,卡顿),内存不停增长;解决JVM运行过程中出现的各种问题(OOM);2、当前运行环境和配置 以及监控告警监控告警:目前采用的是单ECS实例部署一个服务的方式,通过对硬件内存的监控来做的告警。可以直接监控JVM:Grafana + Prometheus 监控JVM配置参数调整和测试:增加gc 日志和 内存设置:-Xloggc:/data/logs/gc/xxx-service-gc-%t.l原创 2021-11-02 09:49:17 · 562 阅读 · 1 评论 -
【面试】幂等性问题的思考和总结,防重、幂等,常用解决方案,解决方式
1、幂等性幂等性:多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。幂等性接口:是指可以使用相同参数重复执行,并能获得相同结果的接口。数学中:在一次元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同;在二次元运算为幂等时,自己重复运算的结果等于它自己的元素。计算机学中:幂等指多次操作产生的影响只会跟一次执行的结果相同,通俗的说:某个行为重复的执行,最终获取的结果是相同的,不会因为重复执行对系统造成变化。防重和幂等的区别:防重设计主要为了避免产生重复数据原创 2021-11-02 09:22:37 · 6631 阅读 · 0 评论 -
知识积累:缓存Redis分页,Java内存分页。附代码
项目中经常需要用到redis缓存分页和java内存分页的场景,下面例子redis缓存分页:统一封装的redis工具类主要使用下面两个方法:redisTemplate.opsForList().range();redisTemplate.opsForList().size(key);@Autowired private RedisTemplate<String, Object> redisTemplate; /** * 获取list的size,作为total使用 *原创 2021-10-21 13:57:03 · 1706 阅读 · 2 评论 -
Spring中多个service处理同一行数据多次,出现事务互相等待超时问题,Lock wait timeout exceeded;try restarting transaction
Spring中多个service处理同一行数据多次,出现事务互相等待超时问题遇到的问题:某service的一个方法handleMethodA举例子1:@Transactional(value="transManager")public void handleMethodA(){ ... @Transactional serviceB.handleMethdB();// 操作的数据表是order,同一行数据 sericeC.postMethodC(xxx);原创 2021-08-19 14:16:38 · 1141 阅读 · 0 评论 -
知识积累:Elasticsearch7.6.2 支持英文字符大小写的分词和搜索做法
最近项目当中有个需求需要大小写敏感,而Elasticsearch默认是通过小写处理的。所以需要通过设置自定义索引的分析器来处理。以下是操作步骤,前提是已经配置安装号ELasticsearch 和 Kibana;1、配置索引# 支持大小写 搜索PUT /heizi{ "settings": { "analysis": { "analyzer": { "my_custom_analyzer":{ "tokenizer":"keyword",原创 2021-08-02 09:56:57 · 1034 阅读 · 0 评论 -
TCP、UDP、SOCKET、HTTP
一、什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ac原创 2014-07-23 18:08:20 · 672 阅读 · 0 评论 -
Java内存模型,happen-before规则,JMM,volatile,有序性,可见性,原子性
Java内存模型Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。Java内存模型的抽象示意图如下:原创 2021-05-11 09:21:31 · 447 阅读 · 0 评论 -
最新2023面试--Java资深研发面试题(附答案和思路)
由于近期本人和朋友进行了一些公司的面试,坐标江浙沪城市。现在整理和分享一下大概的题目。希望对各位读者提供一些帮助!!!大部分企业为互联网公司,主要是面试官围绕项目聊技术栈,然后深度和广度扩展,也含有一些简单算法题,毕竟没面字节。Java类1、JVM内存结构,内存模型,对象创建过程;2、JVM垃圾收集器原理,JVM调优,CMS的过程;3、类加载机制,是否遇到违反双亲委派的场景?4、并发同步的知识点,synchronize和lock的区别,使用场景。 volatile的底层实...原创 2021-05-10 11:16:58 · 4855 阅读 · 0 评论 -
nginx负载均衡的6种算法
Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。下面是五种负载均衡算法:round robin(默认) weight IP_hash url_hash(第三方) fair(第三方)1.round r...原创 2020-12-28 18:35:14 · 2800 阅读 · 0 评论 -
MySQL InnoDB update锁表问题Record Locks
最近做的项目中出现了锁表的问题,导致表无法进行事务(DML)操作,经过排查发现,我们项目中的购物车表有个字段cart_id为uuid类型,并且未设置索引,这里的场景是根据cart_id进行更新内容,Mysql InnoDB行锁不使用索引锁表的时候会锁整张表。通过命令查询锁日志找到相关锁的sql语句:show engine innodb status;mysql tables in use 1, locked 1LOCK WAIT 2 lock struct(s), heap size 11原创 2020-07-22 10:26:07 · 2278 阅读 · 1 评论 -
Java中Servlet过滤器和Spring拦截器的关系以及区别
最近项目在用过滤器和拦截器,顺便整理下这两个组件的关系以及区别;前言先说下这两个组件在项目中的使用场景吧,我们的项目采用的微服务架构。网关层采用的javax.servlet的Filter过滤器进行统一登录认证和鉴权或者IP、URL黑白名单验证;各个服务层通过Spring的Interceptor拦截器进行用户信息的解析绑定到当前请求线程应用程序上下文的BaseInfo以便后续的业务逻辑使用;当前请求参数和响应的格式化打印;直接上图这两个组件的关系区别点:过滤器是基于J2EE标准Ser原创 2020-09-09 11:57:37 · 738 阅读 · 0 评论 -
MySQL事务隔离级别:可重复读、读已提交、读未提交。实操
MySQL的事务隔离级别:可重复读(默认)REPEATABLE-READ;准备实操的表和数据:-- ------------------------------ Table structure for account-- ----------------------------DROP TABLE IF EXISTS `account`;CREATE TABLE `account` ( `id` int(11) NOT NULL, `name` varchar(255) DEFA.原创 2020-10-22 16:32:03 · 4480 阅读 · 0 评论 -
Redis为什么快?Redis 6新版本的多线程是什么?
Redis是一款基于内存中的Key-Value对数据结构存储,用作数据库,缓存和消息代理。官网地址:https://redis.io/中文翻译:http://www.redis.cn/Redis作者的blog:http://antirez.com/下面来看下Redis为什么快?1、基于内存实现Redis是基于内存进行数据存储和读取的【除RDB和AOF是保证数据可靠的持久化技术】,跟传统的磁盘文件数据存储相比,避免了通过磁盘IO读取到内存这部分的开销,这也是Redis快的主要原因。原创 2020-11-13 11:17:05 · 548 阅读 · 0 评论 -
SQL优化之 mysql中explain的type的含义、extra的含义
type -- 连接类型type意味着类型,这里的type官方全称是“join type”,意思是“连接类型”,这样很容易给人一种错觉觉得必须需要俩个表以上才有连接类型。事实上这里的连接类型并非字面那样的狭隘,它更确切的说是一种数据库引擎查找表的一种方式,在《高性能mysql》一书中作者更是觉得称呼它为访问类型更贴切一些。mysql5.7中type的类型达到了14种之多,这里只记录和理解最重要且经常遇见的六种类型,它们分别是all,index,range,ref,eq_ref,const。从原创 2020-12-25 09:27:58 · 1344 阅读 · 0 评论 -
Java的反射机制以及常用案例
反射是Java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个Java的类获取他所有的成员变量和方法并且显示出来。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。(来自Sun)要想解析一个类,必须先要获取到该类的字节码文件对象。而解析使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class原创 2020-09-09 15:17:46 · 198 阅读 · 0 评论 -
Spring 如何解决循环依赖?原型模式,构造器是否解决?
面试中常见Spring的面试题系列:Spring 如何解决循环依赖?通常大部分人能说出来通过三级缓存来处理的。但如果深入点问,三级缓存的流程以及能否改为二级或者一级缓存处理 就无法说的很明白。先来放一张图来举例循环依赖的场景:代码示例:https://gitee.com/zhengliang2015/spring-learn代码示例目前采用的是xml+setter注入;后面增加field和构造器注入示例。大致步骤为:对象A进行实例化; 对象A实例化过程中,添加到单例工厂中; 对象原创 2021-02-22 16:50:24 · 1135 阅读 · 0 评论