面经Java开发

联奕一面:

1、这段代码的输出结果是多少?t q z

package com.smart.community.test;public class Test {public class B{static {System.out.println("t");}public B(){System.out.println("z");}}public class A extends B{static {System.out.println("q");}public A(){System.out.println("w");}}public static void main(String[] args) {B a = new A();}  }

2、Kafka、ActiveMQ、RocketMQ和RabbitMQ的区别

3、RocketMQ的推拉模式

推模式:每次producer每次生产了消息,会主动推给broker

推模式:broker将消息推向Consumer 优缺点:延迟小,实时性比较好,简化了Consumer端的逻辑,缺点:推送的速率和消费的速率不好去匹配

拉模式(RocketMQ选择的):消费者可以根据自身的情况来拉取消息的请求,如果消费者真的出现那种忙不过来的情况下,可以根据一定的策略去暂停拉取,更适合批量消息的发送,缺点是实时性较差

4、RocketMQ是如何实现拉模式

拉取模式分为普通轮询和长轮询两种方式

普通轮训:定时发起请求,服务端收到请求之后无论是否有数据更新,都立即回复

长轮训:Consumer向服务端发起请求,而服务端收到后不会立即去响应,而是hold住客户端连接,等待数据产生变更之后才会回复客户端,或者超过指定时间还未产生变更

对普通轮询进行一定程度的限制,客户端可以随时请求服务端,但是我并不一定立即回复你

5、RocketMQ消息堆积了怎么解决

 8、业务执行时间可能超过设置的超时时间问题

(3)业务执行时间可能超过设置的超时时间

        1)定时自动去续约(expire key second)

为该锁设置一个较小的lock_timeout,同时每隔一段时间在该锁过期之前,就自动的向服务器延长该锁的lifetime(看门狗)

动态续期:为分布式锁设置一个初始的过期时间,同时启动一个守护线程或定时任务来监控锁的剩余有效期。当检测到锁即将过期而业务操作尚未完成时,自动对锁进行续期,即延长锁的过期时间

使用Redlock算法:如果使用了分布式锁,可以考虑使用Redlock算法来提高锁的安全性和可靠性

合理评估超时时间:通过压力测试来评估业务操作的平均执行时间,然后根据测试结果来合理设置锁的超时时间。可以将超时时间设置为平均执行时间的1到2倍,以降低锁过期导致的问题风险

        2)记录业务处理时长,设置过期时间:业务时长+一定时间

每次获取锁后,记录业务代码执行的时长,在redis中存一个上次时长,再次获取锁时 设置过期时间为上次时长+N秒

可以创建一个守护线程,也成为看门狗线程,这个线程的任务是实时监控业务线程的执行情况。如果发现业务线程仍在执行中,且未达到预定的超时时间,守护线程就会将锁的过期时间延长
可以使用Redisson工具类,Redisson会启动一个守护线程,这个线程会定期检査锁的状态,并在必要时对锁进行续期

我们可以先给锁设置一个LockTime,然后启动一个守护线程,让守护线程在一段时间后,重新去设置这个锁的LockTime。

看门狗

Redisson的看门狗机制就是这种机制实现自动续期的

Redisson看门狗机制, 只要客户端加锁成功,就会启动一个 Watch Dog。

  • leaseTime 必须是 -1 才会开启 Watch Dog 机制,如果需要开启 Watch Dog 机制就必须使用默认的加锁时间为 30s。

  • 如果你自己自定义时间,超过这个时间,锁就会自定释放,并不会自动续期

  • 续期原理

    续期原理其实就是用lua脚本,将锁的时间重置为30s

  • Watch Dog 机制其实就是一个后台定时任务线程,获取锁成功之后,会将持有锁的线程放入到一个 RedissonLock.EXPIRATION_RENEWAL_MAP里面,然后每隔 10 秒 检查一下(internalLockLeaseTime / 3) 检查一下,

  • 如果客户端 还持有锁 key(判断客户端是否还持有 key,其实就是遍历 EXPIRATION_RENEWAL_MAP 里面线程 id 然后根据线程 id 去 Redis 中查,如果存在就会延长 key 的时间),那么就会不断的延长锁 key 的生存时间。

    如果服务宕机了,Watch Dog 机制线程也就没有了,此时就不会延长 key 的过期时间,到了 30s 之后就会自动过期了,其他线程就可以获取到锁

9、第一个线程拿到锁对象没有释放,那第二个线程怎么做?(队列,阻塞问题)

由于多个线程同时获取多个锁,但是获取锁的顺序不一致,导致互相等待对方释放锁。

(1)破坏占用且等待条件

在获取某个锁之前,释放已经持有的锁。这样可以避免多个线程同时持有多个锁而导致死锁的发生。例如,可以按照固定的顺序获取锁,这样可以避免不同的线程以不同的顺序获取锁而导致死锁

(2)破坏不可抢占条件

当一个线程持有一个锁时,其他线程无法抢占这个锁。为了避免死锁,可以设置超时时间,当一个线程无法在指定时间内获取到锁时,就会释放已经获取的锁,避免死锁的发生

(3)破坏循环等待条件

在获取锁时,按照一定的顺序获取锁,避免不同的线程以不同的顺序获取锁而导致死锁。例如,可以按照对象的哈希值获取锁,或者按照固定的顺序获取锁

11、压力测试怎么做?

使用JMeter工具,模拟大量用户并发访问系统,从而对系统进行压力测试

使用LoadRunner工具,模拟数以万计的用户并发访问系统,并对系统进行压力测试

JUnit是Java编程语言的一个单元测试框架,也可以用于压力测试。通过编写测试用例,并使用多线程或循环调用这些测试用例,可以模拟高并发的场景对系统进行压力测试

12、如何实现扫码登录?

13、讲一讲你对Seata的理解

Seata有四种模式:(背)

14、Seata的实现原理

TC、TM、RM

15、Redis和Redisson的区别

Redisson是Redis的一个儿子,它本质上是对Redis进行了很多封装。Redisson不仅提供了一系列的分布式Java常用对象,还提供了许多分布式服务。因此,Redisson可以理解为是对Redis进行了封装和扩展,使其更加方便地用于构建分布式应用和解决分布式系统中的一些问题

九安一面:

16、交付流程是怎么样的?

因为我们是坐外包的嘛,产品经理谈好需求之后,我们这边出一个需求文档给他们看,没问题之后就责任下放,任务分配,然后自测,交付第一版,之后会有第二版需求文档那些,然后线上出现bug了会上报组长,然后组长安排去解决

17、你还有什么问题要问么?

问公司人员架构,问公司技术架构或者问你自己工作中遇到的问题,当然也可以虚心请教刚才面试中没打出来的问题

每日物流一面:

14、Redis删除策略及区别?

惰性删除

定期删除

16、主从读写的原理?

17、索引失效?

18、如何保证消息不丢失?🐦

broker把消息保存在磁盘上时宕机

(1)把消息保存机制改为同步刷盘(但是会影响性能)

(2)

(3)master磁盘坏了呢?

19、网关前缀的原理?

StripPrefix=1 是一个过滤器,用于从请求的路径中删除前缀。在这个例子中,它将删除路径中的第1个部分(即第一个斜杠之前的部分)。例如,如果请求的路径是 /api/admin/info,那么经过 StripPrefix=1 过滤器处理后,路径将变为 /admin/info

21、jvm了解过吗?

22、新生代用哪种模式?老年代用哪种模式?🐦

23、gc五种垃圾回收算法

(1)引用计数

JVM堆中的每个对象都有一个计数器,被引用就+1,断开就-1,为0就回收

(2)跟踪回收

利用JVM的对象引用图,从根结点遍历并标记对象,最后清除没被标记的对象

(3)压缩回收

把活跃的对象集中放到一个区域,然后在堆的另一端留空白(相当于清理碎片)

缺点是性能损失

(4)复制回收

把堆分为两个相同大小的区域,在任何时刻,只有其中一个区域被使用,直到这个区域被消耗完,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab2024a在Windows系统上的安装配置

目录 前言一、​Matlab在Windows系统上安装总结 前言 Matlab是一种高级技术计算和编程环境,广泛应用于科学、工程和金融等领域。它提供了丰富的工具和函数库,用于数据分析、可视化、模型建立、算法开发和应用部署等任务。注:文末附有下载链接…

Unity vision pro模拟器开发教程-附常见问题解决方案

前言 庄生晓梦迷蝴蝶,望帝春心托杜鹃 废话 去年苹果发布会上,推出了Vision Pro这一款XR产品。并且宣布Unity作为其主要合作伙伴,负责开发XR的开发产品。 这消息一出,当晚Unity的股价直接被熔断。产品发布之后,一直等…

算法——深度优秀搜索和广度优秀搜索

深度优先——递归 // 先序遍历 void dfs(TreeNode* node){if(!node){return;}cout<<node->val;dfs(node->left);dfs(node->right); } // 中序遍历 void dfs(TreeNode* node){if(!node){return;}dfs(node->left);cout<<node->val;dfs(node->righ…

API(Arrays,Lambda)

一、Arrays 操作数组的工具类。 常用方法&#xff1a; public static Strinq tostring(数组) 把数组拼接成一个字符串 public static int binarySearch(数组&#xff0c;查找的元素) 二分查找法查…

算法|基础算法|位运算

基础算法|位运算 1.与运算 2.或运算 3.非运算 4.异或运算 5.左移、右移运算 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴水可以击穿顽石。 与运算 与…

05- 还在双引号添加字符串?- 文本块

原因 使用过java的string的时候&#xff0c;当我们使用json&#xff0c;sql&#xff0c;xml在代码里面进行初始化的时候&#xff0c;大量的\n,“” 的真的是噩梦&#xff0c;导致无法顺畅的阅读&#xff0c;我一般调试的时候&#xff0c;会把他打印到console上进行阅读或者格式…

IPMI开源库pyghmi基本使用

简介&#xff1a;Pyghmi是一个纯Python&#xff08;主要是IPMI&#xff09;服务器管理库。IPMI&#xff08;Intelligent Platform Management Interface&#xff0c;智能平台管理接口&#xff09;是一种开放的标准&#xff0c;旨在帮助系统管理员在本地和远程管理服务器系统。而…

探索Garnet:微软开源的高性能分布式缓存存储系统

微软研究院近期宣布推出一款名为Garnet的创新开源分布式缓存存储系统&#xff0c;致力于解决现代应用程序在处理大规模数据时对于高吞吐量、低延迟及卓越可扩展性的严苛要求。这款基于C# .NET 8.0构建的新型系统&#xff0c;充分利用了现代硬件能力&#xff0c;为应用程序开发人…

2024年【通信安全员ABC证】新版试题及通信安全员ABC证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 通信安全员ABC证新版试题根据新通信安全员ABC证考试大纲要求&#xff0c;安全生产模拟考试一点通将通信安全员ABC证模拟考试试题进行汇编&#xff0c;组成一套通信安全员ABC证全真模拟考试试题&#xff0c;学员可通过…

C++初阶---类和对象

目录 1. 类的引入 2. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6.类的实例化 7.类对象模型 8. this指针 8.1 this指针的引出 8.2 this指针的特性 8.3 C语言和C实现栈的对比 9.类的六个默认成员函数 10&#xff0c;构造函数 10.1…

新能源汽车BMS应用设计

新能源汽车BMS应用设计 电池管理系统&#xff08;BMS&#xff09; 概述 电池管理系统&#xff08;BMS&#xff09;为一套保护动力电池使用安全的控制系统&#xff0c;时刻监控电池的使用状态&#xff0c;通过必要措施缓解电池组的不一致性&#xff0c;为新能源车辆的使用安全…

LeetCode热题Hot100-两数之和

充分意识到Coding能力的重要性&#xff0c;重启算法刷题之旅。 没想到这么简单的题目都写的磕磕绊绊。 一刷只写自己的解&#xff0c;二刷再看有没有其他更巧妙的方法~ 题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目…

Prometheus+Grafana 监控Tongweb嵌入式(by lqw)

文章目录 1.思路2.部署准备3.Grafana仪表盘json文件下载4.tw嵌入式jar包本地引入依赖并测试运行5.运行jmx_prometheus_javaagent-0.19.0.jar形式获取监控数据&#xff08;方法一&#xff09;6.使用Actuator 获取监听数据&#xff08;方法二&#xff09;7.Prometheus部署8.Prome…

代码随想录day29(2)二叉树:将有序数组转换为二叉搜索树(leetcode108)

题目要求&#xff1a;将一个按照升序排列的有序数组&#xff0c;转换为一棵高度平衡二叉搜索树。 思路&#xff1a;思路比较简单&#xff0c;如果目标是平衡二叉树&#xff0c;我们每次只需要取数组的中间元素作为根节点&#xff0c;分成左右两个子树&#xff0c;再递归地进行…

B站python爬虫课程笔记(Q16-19结束)

下面是学习的网址&#xff1a; ​​​​​​【Python爬虫】 目录 16、捕捉异常try&except语句的一些问题 1&#xff09;一些常见的异常类型 2&#xff09;try&except的使用 17、测试Bug的一些问题 1&#xff09;assert断定函数的使用 2&#xff09;unittest单元…

SqlServer 数据库创建到指定目录

Sql 代码 CREATE DATABASE [StudentDB] CONTAINMENT NONE ON PRIMARY ( NAME NStudentDB, FILENAME ND:\Demo\DBs\StudentDB.mdf , SIZE 8192KB , MAXSIZE UNLIMITED, FILEGROWTH 65536KB ) LOG ON ( NAME NStudentDB_log, FILENAME NG:\Demo\DBs\StudentDB_log.ld…

fs-extra 抱错解决 TypeError: Cannot read property ‘native‘ of undefined

原来的写法&#xff0c;直接在最上面 import fs from fs-extra;在函数中&#xff0c;使用到的地方引入&#xff0c;修改为动态的 const fs await import("fs-extra");结果成功不抱错

学生综合考评管理系统|jsp+ Mysql+Java+ (可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;…

微服务鉴权的几种实现方案

1.Token 1.1 Token透传&#xff08;不推荐&#xff09; 刚开始接触微服务时网上给的方案大都数是通过透传Token做鉴权&#xff0c;但我认为这种方式不是很妥当。接着往下看&#xff1a; 这种方式通过透传Token使得各微服务都能获取到当前登录人信息&#xff0c;在代码编写上确…

RK3568平台 网络唤醒

一.什么是网络唤醒 网络唤醒(Wake-on-LAN&#xff0c;WOL)是一种计算机局域网唤醒技术&#xff0c;使局域网内处于关机或休眠状态的计算机&#xff0c;将状态转换成引导(Boot Loader)或运行状态。无线唤醒(Wake-on-Wireless-LAN&#xff0c;WoWLAN)作为 WOL 的补充技术&#x…