自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 OA系统&ERP系统&CRM系统

OA系统的主要应用场景是企业内部管理和协作,它能够提高企业的管理效率和员工的工作效率,优化信息流程和沟通方式。ERP系统的主要功能是实现企业内部的信息整合和流程优化,提高企业的管理效率和运营效率。CRM系统的主要应用场景是客户管理和营销管理,它能够提升企业与客户之间的关系质量和效率,增强客户忠诚度和满意度,提高销售收入和市场份额。ERP系统的主要应用场景是企业内部的业务管理,它能够提高企业的运营效率和管理水平,优化资源配置和成本控制,提升企业的竞争力和市场份额。

2025-05-07 14:23:49 411

转载 InternetOpenUrl() failed. 0x80072efd_执行此命令时发生意外错误: internetopenurl() failed. 0x80072efd

winget安装提示:执行此命令时发生意外错误: InternetOpenUrl() failed. 0x80072efd_执行此命令时发生意外错误: internetopenurl() failed. 0x80072efd-CSDN博客

2025-04-17 17:20:53 58

原创 Kafka-Kafka 如何避免重复消费?

但是他与commitSync()不同的是,当他失败后会一直重试,假如发起了一个异步提交commitA,此时提交的偏移量为1000,随后又发起了一个异步提交commitB且偏移量为2000,如果commitA提交失败,但commit B提交成功,那么此时对commitA进行重试并成功的话,则会把实际上已经提交的偏移量从2000回滚到1000,导致重复消费。当有新的消费者进入或者消费者移除时,需要暂替当前消费者组中的所有消费者,并重新规划offset,这就称为再均衡。例如,在数据库操作时,可以使用。

2025-04-11 21:04:43 474

原创 JAVA并发-本地事务

用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。这意味着在事务的不同点上,如果其他事务修改了数据,你就会看到不同的数据。被外部调用的公共方法 A 声明事务 @Transactional,无论子方法 B 和 C 是不是本类的方法,无论子方法 B 和 C 是否声明事务,事务均由公共方法 A 控制。被外部调用的公共方法 A 声明事务 @Transactional,子方法运行异常,但运行异常被子方法自己 try-catch 处理了,则事务回滚是不会生效的!

2025-04-11 21:03:53 780

原创 消息队列基础面试题

确认模式【发布的所有消息分配唯一ID,消息投入指定队列成功,返回确认消息并包含唯一ID标识成功 - 异步】:普通确认模式【每一条消息调用waitForConfirms等待(穿行方式)】 = 》 简单时间长、批量确认模式【每发送一批调用waitForConfirms】 =》 考虑过多消息失败重传、异步确认模式【调用addConfirmListener注册回调】= 》维护尚未确认消息集合。镜像队列模式的话,就是在普通集群模式的基础上,将队列中的消息复制到多个节点,可以保证可靠性,但是增大网络开销和同步成本;

2025-04-11 21:02:26 821

原创 Java方法引用(::)深度解析

方法引用::是lambda表达式的一种简写形式,它不是调用方法,而是引用方法。编译器会根据上下文自动推断方法的调用方式。方法引用只是创建了一个方法指针,不会立即执行。:当lambda只是调用一个已有方法时,可以用。类名::new (构造方法)

2025-04-11 20:59:09 285

原创 深入理解 Java 中的 Function 接口

T:输入类型(参数类型)R:结果类型(返回类型)唯一抽象方法:R apply(T t)// 还包含两个默认方法(后面会讲解)super V,?super R,?T:输入参数类型核心方法:accept(T t) 执行操作特点:有输入无输出(与 Function 不同)// 核心抽象方法// 默认方法(组合操作)

2025-04-11 20:58:39 747

原创 Java Stream 手把手完整指南

想象你有一条传送带(Stream),上面放着各种物品(数据)。:使用原始类型流(IntStream, LongStream等)原料 → [筛选机] → [加工机] → [分拣机] → 成品。(中间操作) (中间操作) (中间操作) (终端操作):使用并行流 .parallelStream()操作是"懒加载"的(只有需要结果时才真正执行)筛选掉不需要的物品(filter)把物品装箱打包(collect)把物品加工成其他形态(map)统计物品数量(count)可以无限长(如无限序列):普通循环可能更高效。

2025-04-11 20:58:07 242

原创 一篇文章带你搞清楚23种设计模式(JAVA)

定义抽象类的接口,维护一个指向实现化角色的引用。

2025-04-11 20:57:23 1537

原创 maven install 报错 “Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.su”

这个报错是我在运行一个java项目时,进行maven install 时发生的报错,这个报错一般属于pom.xml中的。没有设置版本或者版本太旧导致的,在修改之前我都lombok是1.18.26,之后改为1.18.36成功运行没有报错。

2025-03-30 00:31:07 410 1

原创 JAVA并发-Callable

可以使用ExecutorService、Callable、Future实现有返回结果的线程,ExecutoreService提供了submit()方法,传递一个Callable,或Runnable,返回Future。Callable 接口类似于 Runnable,但是 Runnable 不会返回结果,并且无法抛出经过检查的异常,而 Callable 依赖 FutureTask 类获取返回结果。

2025-03-29 21:53:51 168

原创 Java并发-Runnable

Runnable接口是Java提供的一种用于实现多线程的接口,通常用来定义任务的具体逻辑。与Thread类不同,Runnable接口只提供一种抽象方法run(),没有任何与线程的生命周期、管理相关的功能。它的主要作用是与Thread类或线程池(如ExecutorService)配合,作为线程的任务载体,使任务与线程的执行分离,从而提高代码的灵活性和可维护性。Runnable接口直接继承自Object,没有复杂的继承关系。通过实现Runnable接口,可以将任务逻辑放入run()方法中,随后通过。

2025-03-29 21:53:20 316

原创 JAVA并发-Thread

正式因为没有内核的支持,所以通常来讲只会支持进程级别的资源分配,并且所有线程的生命周期需要用户程序自行处理,因此用户线程实现的程序也提高了复杂度和故障机率,Java中的线程曾经使用用户线程实现,最终由于其复杂度被放弃。所以当前应用程序内共有两个线程:主线程【普通线程】、Hook线程【普通线程】、子线程【守护线程】,所以当主线程结束后,应用程序内没有普通线程了,所以被设置为守护线程的子线程就停止执行了。在这段代码中,Hook线程的任务只是打印日志,当run()方法执行完毕(日志打印完成后),线程自然终止。

2025-03-29 21:52:40 1075

原创 JAVA并发-什么是指令重排?

指令重排是计算机编译器或处理器为了提高性能而对指令执行顺序进行的一种优化手段。在多核和多线程的计算机系统中,指令重排的目标是通过优化执行顺序来提高指令级别的并行度,充分发挥计算资源,加速程序的执行。

2025-03-29 21:49:07 251

原创 JAVA并发-ReentrantLock 与 synchronized的区别

可以实现多路选择通知(可以绑定多个 Condition),而 synchronized 只能通过 wait 和 notify/notifyAll 方法唤醒一个线程或者唤醒全部线程(单路通知);通常需要在 finally 块中调用 unlock 方法以确保锁被正确释放。在某些情况下,性能可能稍差一些,但随着 JDK 版本的升级,性能差距已经不大了。会自动释放锁,当同步块执行完毕时,由 JVM 自动释放,不需要手动操作。通常提供更好的性能,特别是在高竞争环境下。

2025-03-29 21:48:12 166

原创 完美解决“本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止””

依然没有什么用,这个时候其中一个博客给了我灵感,他说是因为他改了my.ini,所以才导致同样的问题(很显然我没改这玩意,但是我想了想,没准真是这个问题,所以我就找到了我的my.ini,可以使用everything搜索一下在哪里【今天莫名其妙发现Navicate连接不上本地MySQL了,这个一直健壮的老家伙竟然莫名其妙没了,然后开始排查问题,首先就是查看服务是否正常运行,果然并没有。然后我就在网上找了一个基础的my.ini配置【如果你有很重要的配置记得备份】,然后替换了我的my.ini【

2025-03-29 10:58:53 2625

原创 场景-如何使用 JustAuth 集成第三方登录?

JustAuth插件网址:https://justauth.wiki组件的帮助文档:https://justauth.wiki组件的GitHub:GitHub - justauth/JustAuth: 🏆Gitee 最有价值开源项目 🚀:100: 小而全而美的第三方登录开源组件。目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackO

2025-03-28 19:07:49 291

原创 Redis-解决缓存和数据库一致性问题

首先引入缓存就是为了提高客户端对数据的查询效率。最简单的方式就是全量数据刷到缓存中,一般是通过先将数据库的数据全量刷入缓存,不设置缓存失效时间。写请求只更新数据库,不更新缓存,启动一个定时任务定时将数据库的数据更新到缓存中。这样做有几个缺点:缓存利用率低:不经常访问的数据也存在缓存中,且不失效;数据不一致:因为是定时刷新,所以不一致的概率取决于定时时间。

2025-03-28 17:16:00 1540

原创 Java-Java修饰符

抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。

2025-03-27 17:13:12 926

原创 Java-浅拷贝与深拷贝

浅拷贝只拷贝目标对象,至于目标对象内部的引用类型指向的还是原对象;其中otherTeacher就是teacher的浅拷贝。深拷贝就是连带目标对象中的对象一起拷贝。

2025-03-27 17:11:21 193

原创 JVM-虚拟机类加载机制

以一组符号来描述所引用的目标;符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机无关;在编译的时候每个java类都会被编译成一个class文件,但。

2025-03-27 17:10:46 798

原创 Redis-如何基于Redis实现分布式锁?

基于redis实现分布式锁,可以通过SET NX命令,也就是当客户端需要申请锁的时候可以往redis尝试加入一个拥有唯一ID的锁变量,并通过EXPIRE设置过期时间,另外创建一个守护线程,定时检测锁的失效时间,如果锁快过期了,操作共享资源还没有完成,那么就自动对锁进行续期,重新设置过期时间;在完成对共享资源的操作后,通过编写Lua脚本判断是否为所属锁,并将其从redis删除以释放锁,释放操作具备原子性。【包括为什么要设置唯一ID等】

2025-03-26 11:23:12 112

原创 Redis-如果Redis分布式锁引用在redis集群应该怎么办?当出现主从切换时导致丢锁应该如何处理?

来解决,他的基本思路就是通过改用多个独立的redis服务器或者redis Cluster集群,在客户端获取锁时先计算当前时间,然后设置过期时间,并取其中比如几十毫秒用作获取锁的过期时间,在获取锁时会依次向独立服务器获取,如果过半数获取成功,并且获取时间小于设定的过期时间,那么获取成功,否则获取失败,无论成功与否最后会向所有redis服务器或者集群解除锁。另外redis普通分布式锁需要自己加唯一标识,在Redlock中则是通过。

2025-03-26 11:22:42 153

原创 场景-认证登录这块为什么用 JWT?

使用 Session 进行身份认证的话,实现单点登录,需要我们把用户的 Session 信息保存在一台电脑上,并且还会遇到常见的 Cookie 跨域的问题。但是,使用 JWT 进行认证的话, JWT自己包含了完整的认证授权信息,可以轻松实现跨域支持,并且这一点也使得再微服务架构中不需要可以维护会话状态的一致性,使得JWT也更加适应微服务架构。因此,即使你点击了非法链接发送了请求到服务端,这个非法请求也是不会携带 JWT 的,所以这个请求将是非法的。JWT还支持扩展和定制,可以灵活的完成其他业务功能。

2025-03-26 11:22:10 145

原创 场景-数据库直接保存的密码还是?

每次用给定的信息摘要查找字典,即可快速找到碰撞的结果。对于单机来说,暴力枚举法的时间成本很高(以14位字母和数字的组合密码为例,共有1.24×1025种可能,即使电脑每秒钟能进行10亿次运算,也需要4亿年才能破解),字典法的空间成本很高(仍以14位字母和数字的组合密码为例,生成的密码32位哈希串的对照表将占用5.7×1014 TB的存储空间)。因为不可逆MD5算法的hash算法是固定的,所以同一个字符串计算出来的hash串是固定的,可以采用暴力枚举法、字典法、彩虹表(rainbow)法等多种方式破解哈希。

2025-03-26 11:20:49 222

原创 场景-JWT无状态有什么问题考虑过吗?强制让用户下线怎么弄?

3.可以使用缓存创建一个Token黑名单,把客观上需要注销的token存入即可;2.注销时从客户端删除存储的token;1.合理的设置令牌过期时间;

2025-03-26 11:20:15 86

原创 LeetCode-阶乘后的零

【代码】LeetCode-阶乘后的零。

2025-03-26 11:18:31 267

原创 LeetCode-插入区间

首先一个比较暴力的方式,就是直接将这个区间加入到末尾,然后根据区间左边界排序后,合并区间即可。第二个解题思路大致是:定义一个minIndex一个maxIndex分别表示待插入区间左边界和右边界位置。

2025-03-26 11:17:55 211

原创 LeetCode-最长回文子串

解决这道题的思路要从回文串的定义开始,一个回文串是一个中间对称的字符串,并且看题,题目有提到最长,并且存在着在多个解中寻找最长,那么很大概率是动态规划的题型。如果相等判断串长度是否小于等于3,也就是j - i < 3 【比如4-2 < 3】,如果成立直接为true;第二层循环遍历子串起始位置,并动态计算出子串结束位置j = i + L - 1,如果越界记得break;接着以长度为外层循环,依次判定从长度2开始的子串,并依次递增长度;否则就比较i+1,j-1是否为回文串,即可。最左右两边的两个字符相同;

2025-03-26 11:16:43 398

原创 LeetCode-旋转链表

其实旋转链表可以等价于寻找倒数第n个元素,因为旋转其实就是将每一个节点向右移动k%length位置,草稿纸上画一下其实也就是将从倒数第n个元素截断,然后以该元素作为新的头节点,将尾节点接在旧头节点上,另外记得将旧尾节点置为空。

2025-03-26 11:16:11 137

原创 LeetCode-逆波兰表达式求值

这道题其实就有点做计算题的感觉,其实就是一个栈存放操作数,然后遇到数字就入操作数栈,遇到字符就将栈中头两个元素取出进行运算,然后将运算结果入栈,重复直到操作数栈为空。

2025-03-26 11:15:41 290

原创 LeetCode-从中序与后序遍历序列构造二叉树

这道题与已知前序和中序求其实是一样的,前序的话就是根节点在前,后序就是根节点在后,只需要每次递归从后序中获得根节点,然后再到中序中找到根节点的位置,递归构造左右节点即可。

2025-03-26 11:15:10 181

原创 LeetCode-填充每个节点的下一个右侧节点指针 II

层序遍历秒了,首先我们通过层序遍历可以获得每一层的队列,通过先进先出,将每一个出队列的元素指向此时队列首部的元素,如果队列为空就指向null即可。

2025-03-26 11:14:39 140

原创 LeetCode-二叉树展开为链表

说白了其实就是将二叉树序列化,并且采用先序序列,也就是只需要通过先序遍历递归方式,将遍历到的节点存入list即可,然后将得到的list遍历,使得每个元素的right指向下一个元素即可。

2025-03-26 11:14:07 259

原创 LeetCode-二叉树的右视图

层序遍历秒了,每一层队列最后一个元素存入结果即可。

2025-03-26 11:13:34 289

原创 LeetCode-求根节点到叶节点数字之和

这道题其实就是深度优先搜索,因为他需要一次性直接从根节点访问到叶子节点,所以采用深度优先搜索,并且每次搜索时,将原先的值乘以10再加上现有的值即可构成所需数字,然后依次累加遍历到叶子节点的值即可。

2025-03-26 11:12:56 131

原创 笔试真题-2023年用友集团秋招Java岗笔试-A

git branch -a 查看所有分支信息git branch -r 查看所有远程分支git branch 只显示本地分支git branch -d 用于删除分支信号量 = 可用资源数 - 等待资源进程数正确答案为B;装饰模式是一种结构型设计模式,它的主要特点是:脏读:在同步启动的A、B两个事务中,A事务执行读操作,读到原始数据,B事务执行写操作修改原始数据,A事务再次执行读操作,能够读到B事务未提交的事务修改,所以为脏读。【读未提交,最低级别,任何情况都无法保证,所以会出现脏读、不可重复读、幻读】不可重

2025-03-23 21:20:05 803

原创 JVM-GC

GC就是垃圾回收机制,其实像程序计数器、虚拟栈、本地方法栈等随线程而生,随线程而死,栈中的栈帧随着方法的进入和退出有条不紊的执行出栈和入栈的操作,每一个栈帧要分配多少内存也是在编译器就确定好了,尽管在运行期会有即时编译器进行一些优化,但基于概念模型我们还是可以认为他们在编译器就确定好了,但是Java堆和方法区不一样,一个接口的多个实现类的内存需求可能不一样,不同的条件分支所需的内存也可能不一样,所以只有在运行时我们才知道需要创建多少个对象。

2025-03-23 16:29:13 765

原创 LeetCode-组合

【代码】LeetCode-组合。

2025-03-23 13:32:21 203

原创 LeetCode-电话号码的字母组合

很经典的排列组合,就采用回溯法即可,在回溯法中主函数中通常会申请一个List<>变量用于存放回溯法的结果,在回溯法的递归方法中,一般会传入刚刚申请的结果变量,需要遍历的目标变量,用于存放映射关系的变量,当前位置索引,存放一次结果的变量。有时在回溯过程中有一些情况需要剔除则会需要剪枝。一般形式是刚进入递归方法之后会首先判断是否到达了需要存储的条件,如果没到达则会开始剪枝,然后排除剪枝之后开始回溯。

2025-03-23 13:31:44 244

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除