Java 2023面试大全
文章平均质量分 75
Java 2023面试大全
lovoo
不要抱怨生活,只因你还不够努力!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
k8s 2003面试题(1):k8s有哪些特性?
对于应用所依赖的一些敏感数据,如用户名和密码、令牌、密钥等信息,Kubernetes专门提供了Secret对象以实现依赖解耦,既便利了应用的快速开发和交付,又提供了一定程度上的安全保障。此外,Kubernetes还通过iptables或ipvs内置了负载均衡机制。存储编排:Kubernetes支持Pod对象按需自动挂载不同类型存储系统,包括节点本地存储、公有云服务商的云存储(如AWS和GCP等),以及网络存储系统(如NFS、iSCSI、Gluster、Ceph、Cinder和Flocker等)。原创 2023-07-13 11:14:04 · 1045 阅读 · 0 评论 -
秒杀要关注哪些问题,以及如何解决
具体地,我们使用了tryAcquire()方法获取信号量,如果获取成功,说明当前没有其他用户访问系统,可以开始秒杀活动。在秒杀活动中,我们首先更新商品库存为0,表示可以开始秒杀,然后生成订单并保存到数据库中,最后释放信号量,允许其他用户访问系统。如果库存足够,就更新商品库存为0,表示已经秒杀成功,并生成订单并保存到数据库中。如果验证成功,就更新商品库存为0,表示可以开始秒杀,并生成订单并保存到数据库中。如果库存足够,就更新商品库存为0,表示已经秒杀成功,并生成订单并保存到数据库中。原创 2023-07-05 09:49:38 · 1995 阅读 · 0 评论 -
Springboot 定时任务,分布式下幂等性如何解决
在分布式环境下,定时任务的幂等性问题需要考虑多个节点之间的数据一致性和事务处理。一种解决方法是使用分布式锁来保证同一时间只有一个节点能够执行该任务。具体实现可以使用Redis或Zookeeper等分布式协调工具提供的分布式锁功能。另一种解决方法是使用消息队列来保证任务的幂等性。当一个节点执行任务时,先将任务发送到消息队列中,然后等待其他节点确认任务已经执行完毕后再进行后续操作。如果有节点出现故障或者网络异常导致任务未能成功执行,则可以重新发送任务并等待其他节点确认。原创 2023-06-30 10:56:55 · 1322 阅读 · 0 评论 -
Redission的RSemaphore信号量有什么作用?
RSemaphore是Redisson基于Redis实现的分布式信号量,用于限制同时访问共享区域的线程数量。与Java的Semaphore相似,RSemaphore也有一个acquire()方法用于获取资源,但在获取资源的顺序上是不可预测的,因此它是一种非公平锁。原创 2023-06-30 10:19:17 · 1002 阅读 · 0 评论 -
支付宝支付收单时存在哪些问题,解决方法有哪些?
1、设置支付超时时间:String timeout = aliPayConfig.getTimeout();如果此时订单未付款,且关闭了,调用 payService.closePay(order)手动关闭支付宝支付。2.、使用相对时间"“timeout_express”:“” + timeout + “”,"1、订单在支付页,不支付,一直刷新,订单过期了才支付,订单状态改为已支付了,但是库。订单解锁完成,正在解锁库存的时候,异步通知才到。3、网络阻塞问题,订单支付成功的异步通知一直不到达。原创 2023-06-29 10:29:43 · 1543 阅读 · 0 评论 -
Zookeeper集群的特点
ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个ZNode都可以通过其路径唯一标识。Znode可以通过路径进行访问,类似于文件系统中的目录结构。每个节点可以包含子节点,也可以是叶子节点。Zookeeper使用Znode来存储和管理数据,可以用来实现分布式锁、分布式队列、配置管理等功能。原创 2023-06-28 21:20:00 · 908 阅读 · 0 评论 -
Spring 2023面试题(3)-- @RequestMapping的用法
以上示例中,@GetMapping、@PostMapping、@PutMapping 和 @DeleteMapping 是 @RequestMapping 的具体子注解,分别用于处理 GET、POST、PUT 和 DELETE 请求。它们可以组合使用,如 @GetMapping(“/{id}”),表示处理 GET 请求,路径为 /users/{id}。除了处理 HTTP 请求外,@RequestMapping 还可以用于处理 HTTP 请求参数和返回结果。在类上使用时,它指定了处理请求的基本路径。原创 2023-06-28 17:05:54 · 931 阅读 · 0 评论 -
Spring 2023面试题(2)--Spring mvc 运行流程
【代码】Spring 2023面试题(2)--Spring mvc 运行流程。原创 2023-06-28 15:41:22 · 966 阅读 · 0 评论 -
Spring 2023面试题(1)--事务的隔离级别
在 Spring 中,可以通过在事务管理器中设置隔离级别来控制事务的隔离程度。其中,default_隔离级别可以是上述任何一个隔离级别。原创 2023-06-28 14:55:44 · 1186 阅读 · 0 评论 -
Redis 缓存数据库双写不一致怎么处理?
Redis 缓存数据库可能会出现双写不一致的情况,这是因为在进行缓存更新时,同时有多个线程或进程对同一个缓存键进行读写操作,导致了数据的不一致性。具体来说,假设有两个线程 A 和 B 都要对同一个缓存键进行写操作,此时缓存键的值是过期了的,即需要从数据库中读取最新的值,并进行更新。线程 A 开始执行,它首先要从数据库中读取最新的值,然后将其更新到缓存中。在线程 A 执行的过程中,线程 B 也开始了执行,它也要对同一个缓存键进行写操作。原创 2023-06-27 20:57:59 · 1809 阅读 · 0 评论 -
RabbitMQ 2023面试5题(四)
exchange根据指定的路由规则将消息路由到相应的队列中,这个规则可以是基于消息内容的,也可以是基于其他属性的。提供基本的最终一致性实现:RabbitMQ可以帮助实现面向服务的架构(SOA),通过消息队列来通信,从而实现不同服务之间的解耦,并确保最终一致性。实现应用程序之间的异步和解耦:通过使用消息队列,应用程序可以通过读写消息来实现通信,无需直接调用彼此,从而减少了对彼此的直接依赖。实现RPC调用:通过使用消息队列,可以在分布式系统中实现RPC调用,从而实现不同服务之间的通信。原创 2023-06-26 14:04:12 · 1116 阅读 · 0 评论 -
RabbitMQ 2023面试5题(三)
RabbitListener 标注在方法上,直接监听指定的队列,此时接收的参数需要与发送市类型一致;而 @RabbitHandler 标注在类上,表示当有收到消息的时候,就交给该类中的方法处理。另外,在实际开发过程中,您可能需要参考具体的编程语言和消息队列客户端库的文档,以了解如何正确地使用 basicNack 和 basicReject 方法。需要注意的是,虽然 RabbitMQ 通过上述方式来保证消息的可靠性,但在一些极端情况下,如网络故障、硬件故障等,仍然可能发生消息丢失的情况。原创 2023-06-26 10:34:10 · 1572 阅读 · 0 评论 -
RabbitMQ 2023面试5题(二)
Dead Letter Exchange其实就是一种普通的exchange,和创建其他exchange没有两样。只是在某一个设置Dead Letter Exchange的队列中有消息过期了,会自动触发消息的转发,发送到Dead Letter Exchange中去。一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。消息的TTL到了,消息过期了。队列的长度限制满了。排在前面的消息会被丢弃或者扔到死信路由上。原创 2023-06-25 16:49:57 · 865 阅读 · 0 评论 -
RabbitMQ 2023面试5题(一)
例如,可以将用户订阅的消息发送到一个延时队列中,并设置一个延迟时间(例如1小时),然后在延迟时间到达后,将消息从队列中取出并推送给用户。例如,可以将需要定期执行的任务发送到一个延时队列中,并设置一个延迟时间(例如每天),然后在延迟时间到达后,将任务从队列中取出并执行。然后,我们发送了一条消息到这个队列中,接着模拟了一个消费失败的场景,将消息转发到DLX和DLQ中。动态路由:您可以使用延时队列来实现动态路由的功能,将消息发送到延时队列中,并设置一定的路由规则,以实现消息在特定时间后被路由到不同的目标队列中。原创 2023-06-25 11:19:31 · 1594 阅读 · 0 评论 -
Redis 2023面试5题(六)
因为新master的选举需要大于半数的集群master节点同意才能选举成功,奇数个master节点可以在满足选举该条件的基础上节省一个节点,比如三个master节点和四个master节点的集群相比,大家如果都挂了一个master节点都能洗举新master节点,如果都挂了两个master节点都没法选举新master节点了,所以奇数的master节点更多的是。具体来说,当一个线程获取了分布式锁并执行业务逻辑时,如果主Redis实例挂掉了,那么在主从切换过程中,从Redis实例上就不会有该线程持有的锁。原创 2023-06-24 10:24:34 · 1506 阅读 · 0 评论 -
Redis 2023面试5题(五)
需要注意的是,在备份数据时,需要同时备份Redis的配置文件和日志文件等,以便在恢复时可以完全恢复Redis服务器的状态。Redis主从复制风暴是指当Redis主从复制出现故障时,大量的从节点会同时进行主节点复制操作,导致网络带宽和CPU资源被大量占用,引起系统性能下降,甚至导致系统崩溃。需要注意的是,网络抖动的原因可能不是单一的,而是多种因素共同作用的结果。8. 对于大量的从节点复制操作,可以使用Redis Sentinel或Cluster的自动化分片功能,将数据分散到多个节点上,避免单个节点压力过大。原创 2023-06-23 22:34:13 · 1734 阅读 · 0 评论 -
Redis 2023面试5题(二)
如果一个key没有被设置过期时间,但是已经很久没有被访问了,那么Redis会将其标记为“过期”,并在下一次垃圾回收时将其删除。需要注意的是,如果你设置了太多的键,而且这些键的过期时间很短,那么 Redis 的内存占用可能会迅速增加,从而导致性能下降或者宕机。总的来说,删除Key的操作在Redis中是一个相对较快的操作,不会阻塞其他操作。但是,在某些情况下,它可能会对其他操作产生影响,因此需要仔细考虑在使用Redis时如何处理删除Key的操作。然而,在某些情况下,删除Key可能会阻塞Redis。原创 2023-06-20 22:38:38 · 1573 阅读 · 0 评论 -
面试题:分布式事务有哪些方案及运用场景
分布式事务是指涉及多个不同资源或数据库的事务处理,这些资源或数据库分布在不同的网络节点上,通过协调器将多个事务组合成一个分布式事务。分布式事务的目的是确保多个事务操作要么全部成功,要么全部失败,保持事务的一致性和完整性。在分布式事务中,涉及到的节点可能位于不同的计算机、不同的进程或者不同的数据库系统中。事务管理器。本地资源管理器。事务管理器:作为一个全局的调度者,负责对各个本地资源管理器统一号令提交或者回滚。二阶提交协议(2PC)和三阶提交协议(3PC)就是根据此协议衍生出来而来。原创 2023-06-20 11:35:39 · 804 阅读 · 0 评论 -
Redis 2023面试5题(一)
当进行插入或删除操作时,Redis会根据元素的值计算出该元素在跳表中的位置,然后将元素插入到相应的级别中。Redis的底层使用跳表(SkipList)来存储数据,跳表是一种基于链表的数据结构,可以在链表的基础上增加多级索引,从而提高查询效率。需要注意的是,Redis的跳表实现并不是严格按照SkipList的标准算法实现的,而是在SkipList的基础上进行了一些优化和调整,例如使用双向链表代替了单向链表,使用哈希表代替了每个节点都有的游标等。原创 2023-06-19 22:49:25 · 1411 阅读 · 0 评论 -
使用Redis的zset集合实现小程序的滚动分页
其中,ZRangeArgs构造函数中的参数表示从集合的起始位置开始返回文档ID,lastDocId表示只返回大于lastDocId且score值小于当前时间戳的文档ID,86400000L表示一天的毫秒数,表示向前滚动一页。原创 2023-06-03 11:16:46 · 2068 阅读 · 1 评论 -
什么是Redission可重入锁,其实现原理是什么?
Redission是一个可重入锁,它可以在分布式系统中用于实现互斥锁。这种锁可以允许多个线程同时获取锁,但在任何给定时间只有一个线程可以执行受保护的代码块。Redission锁提供了一种简单的方法来保证在分布式系统中的互斥性,同时支持可重入性。这意味着一个线程可以在获取锁之后再次获取同一个锁,而不需要等待锁释放。Redission锁使用lua脚本来实现加锁和解锁操作。当一个线程想要获取锁时,它会发送一个lua脚本到redis服务器。原创 2023-05-28 15:39:33 · 2925 阅读 · 0 评论 -
CompletableFuture 异步编排如何使用?
在做提交订单功能时,我们需要处理的事务很多,如:修改库存、计算优惠促销信息、会员积分加减、线上支付、金额计算、生成产品订单、生成财务信息、删除购物车等等。如果这些功能全部串行化处理,会发费很长的时间,特别是在大量数据并发的时候,有可能导致服务器崩溃等各种异常。CompletableFuture 异步编排的出现,完全解决了上面的情况,这些功能基本可以并行处理。那么什么是CompletableFuture 异步编排?原创 2023-05-25 11:04:24 · 1051 阅读 · 0 评论 -
CountDownLatch是什么?如何使用?
CountDownLatch(计数器)是一个用于多线程同步的 Java 工具。它允许一个或多个线程等待,直到其他线程完成任务或是事件的发生。CountDownLatch 通常用于协调多个线程之间的同步,以便一个线程等待另一个线程完成某项任务后再继续执行。CountDownLatch 本质上是一个计数器,用于记录需要等待的线程数量。当一个线程完成任务时,它会通知 CountDownLatch 计数器减一。当计数器的值减为零时,等待的线程将被释放,可以继续执行下面的任务。原创 2023-05-24 21:30:44 · 454 阅读 · 0 评论 -
什么是异步,什么是线程池,如何使用?
在 Java 中,异步是一种编程模型,它允许程序在执行某个操作时,不必等待该操作完成然后再去执行其他操作。这种方式可以提高程序的性能和响应速度。在 Java 中,异步一般是通过线程池来实现的。线程池是一种管理和复用线程的机制,它可以在程序启动时创建一定数量的线程,并把这些线程放到一个池子里面,等待任务的到来。当任务到来时,线程池会从池子里面取出一个线程来执行任务。当任务执行完毕后,线程会被放回到池子里面,等待下一个任务的到来。线程池可以避免频繁地创建和销毁线程,从而提高程序的性能。原创 2023-05-24 11:44:36 · 2882 阅读 · 0 评论 -
缓存穿透的解决办法有哪些?
缓存穿透是指查询一个不存在的数据,由于缓存和数据库都没有命中,导致每次请求都需要从数据库中读取数据,增加了数据库的负担。解决缓存穿透的方法有以下几种:布隆过滤器(Bloom Filter):使用位数组来表示一个集合,并通过哈希函数将元素映射到数组上。在查询数据时,先判断该数据是否存在于布隆过滤器中,如果存在则直接返回结果,否则再从数据库中查询数据。缓存空对象:在缓存中存储空对象,当查询一个不存在的数据时,直接返回空对象,而不是默认值或者错误信息。原创 2023-05-21 10:39:04 · 2652 阅读 · 1 评论 -
使用Redis实现短信验证码登录功能
方便快捷:用户无需记忆复杂的用户名和密码,只需通过短信验证码就可以快速登录。安全性高:短信验证码通常是由运营商或第三方服务提供商发送的,具有较高的安全性。防止恶意攻击:通过短信验证码登录可以有效防止恶意攻击,例如密码被盗、网站挂马等情况。方便记忆:短信验证码可以使用户更方便地记忆密码,不用担心密码被遗忘。兼容性好:短信验证码适用于各种类型的网站和应用程序,可以在不同的设备上使用。综上所述,短信验证码登录是一种安全、方便、快捷的登录方式,有助于提高用户的使用体验。原创 2023-05-20 11:15:42 · 1659 阅读 · 0 评论 -
什么是Spring Cache?Spring项目如何使用?
目前Spring Cloud微服务在Web项目中占据了主流地位,如果去面试关于Spring Cloud的岗位时,面试官一般都会提问你的项目是如何优化的,从哪些方面入手去优化。而缓存技术绝对是项目必不可少的,所以我们必须掌握好Java项目的缓存技术。JVM 缓存:JVM 缓存是指 Java 虚拟机为类加载器所创建的缓存。Java 虚拟机通过缓存已经加载的类来提高应用程序的性能。数据库缓存:数据库缓存是指将查询结果缓存在内存中,以便下次查询时可以直接从内存中获取,避免了重复查询数据库的操作。原创 2023-05-19 15:54:14 · 967 阅读 · 0 评论 -
Java中的copy on write(COW )是什么?
在电商微服务项目中,多线程并发访问共享数据时,可能会出现并发问题导致程序崩溃、数据异常等情况。为了避免这些问题,Java中提供了多种并发控制方法,其中Copy-On-Write(COW)机制就是一种常用的技术。本文将详细介绍COW机制的概念、如何保证线程安全、相对于锁机制的优势。Copy on Write (COW) 是一种在并发编程中常用的技术,它可以在不使用锁的情况下,实现对共享数据的并发访问。在 Java 中,Copy on Write 通常用于对 List、Map 等集合进行并发访问。原创 2023-05-16 16:04:09 · 1906 阅读 · 0 评论 -
为什么Java要求多用组合,少用继承?
最近有一个要好的朋友去阿里大厂面试Java高级工程师,在第二轮面试的过程中,面试官提了一个问题:“解释下Java项目中为什么要求多用组合,少用继承?朋友觉得这个题目既熟悉,又陌生,毕竟继承与组合在一开始学习Java时就要求掌握的,但是教学过程中只是说了它们的概念及基本理论知识,没有介绍它们之间孰优孰弱的问题,实际开发中也没有刻意去将它们进行比较。一时间竟然答不上来。那么面试官为什么要问这个问题呢?原创 2023-05-15 21:45:50 · 1557 阅读 · 0 评论 -
Java面试2023:什么是CAS?
我相信大部分的java程序员都没有听过这个概念,平时都是些业务上的代码,但如今Java程序员内卷实在太严重了,只知道一些表面上点Java知识是远远不够的,本文就是要讲述一下面试频率比较高的面试题:什么是CAS?CAS是compare and swap的缩写,即我们所说的比较交换。CAS是一种基于锁的操作,而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。原创 2023-04-27 16:20:21 · 469 阅读 · 0 评论 -
Java面试题2023:线程的有几种状态,你能写出来吗
网上对线程的状态描述的有很多,有5种的、6种的、7种的,其实这些说发从提出者的角度看,都是可以接受的,但我们如果看Thread源码里的代码时,原创 2023-04-27 09:02:23 · 254 阅读 · 0 评论 -
面试题2023:Java线程的实现方式
这是一道频率出现比较高的面试题,像阿里、腾讯、京东的Java初中级工程师面试题都出现过、面试过了薪水也能拿个10K~20K,所以掌握这些基础的知识还是有必要的。上面四种方法,本质上都是实现了Runnable的方法。原创 2023-04-26 10:42:16 · 601 阅读 · 0 评论 -
Java面试之--JSP的9大内置对象
1、输入/输出对象:request、response、out1.1) request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取 cookie, header, 和session数据的有用的方法。1.2) response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如 cookies,头信息等)out是javax.jsp.JspWriter的一个实例,提供了几个方法使你能用于向浏览器回送输出结果原创 2021-05-31 15:43:05 · 151 阅读 · 0 评论
分享