微服务
文章平均质量分 70
沈健_算法小生
算法小生
展开
-
12.SpringBoot3连接MongoDB多数据源
本文实践MongoDB多数据源连接,目前服务器版本分别为4及3.2,所以需要兼容这两种版本,在选择依赖包时需特别注意MongoDB版本。原创 2024-06-15 08:18:01 · 101 阅读 · 1 评论 -
11. RBAC权限管理从零到一实现
默认用户名密码admin 1。前端页面已提交至git。原创 2024-06-02 18:41:13 · 590 阅读 · 0 评论 -
3.基于SpringBoot3集成MybatisPlus及批量插入与分页查询及定制化代码生成器类
org.springframework.boot.autoconfigure.AutoConfiguration.imports内容如下。至此,可以正常启动项目,集成MybatisPlus完毕,对于使用语法,可以去官网查询,后续我们将介绍特殊的一些用法。resources目录下新建META-INF.spring目录,然后新建文件。运行main方法根据提示创建包即可, 生成代码后我们在根据需要修改即可。在application-dev.yml配置错误打印SQL日志。欢迎关注公众号算法小生。原创 2023-08-25 23:20:04 · 813 阅读 · 0 评论 -
1.基于SpringBoot3 JDK17+Gradle8搭建项目并集成SpringDoc Swagger3及全局异常处理与统一返回封装
我们可以看到方法级别也加了锁,此时如果我们在最上面Authorize处输入token,则调用方法时也会默认传递token。我们修改CloudClient中login方法如下,重启后看下授权区别。我们在build.gradle中引入依赖。欢迎关注公众号算法小生。原创 2023-08-19 20:32:49 · 735 阅读 · 0 评论 -
Java并发机制底层实现原理之volatile
为了提高性能,处理器与编译器会对指令做重排序,分为3种类型:1)编译器优化的重排序 不改变单线程程序语义,重新安排语句执行顺序2)指令级并行的重排序 若不存在数据依赖性,处理器可以改变语句对机器指令的执行顺序3)内存系统的重排序 处理器采用缓存和读、写缓冲区,使得加载与存储看上去是乱序执行1)属于编译器重排序 2)、3)属于处理器重排序。为了实现volatile内存语义,需要JMM会分别限制这两大类型的重排序。原创 2023-05-27 15:01:27 · 721 阅读 · 0 评论 -
JAVA设计模式
/ 飞的行为 }// 叫的行为 }} }} }} }} }原创 2023-05-19 19:24:30 · 52 阅读 · 0 评论 -
ConcurrentHashMap实现原理
哈希表是一种key-value存储数据的结构,根据key即可查到对应的value。如果所有的键是整数,我们可用简单的无序数组来表示,键作为数组索引,值即为对应的值数据结构JDK7采用数组+Segment的段锁的数据结构,JDK8采用数组+链表+红黑树的数据结构线程安全机制JDK7采用Segment分段锁实现线程安全,其中Segment继承ReentrantLock. JDK8采用CAS+synchronized保证线程安全锁的粒度。原创 2023-05-08 22:28:28 · 2385 阅读 · 0 评论 -
AbstractQueuedSynchronizer简介与使用
在任何时刻只有一个线程获得锁,可以执行,其他线程阻塞,进入等待队列。共享锁允许多个线程同时执行,通常情况下,共享锁内部维护了多个执行许可,每个线程运行的时候获得一个许可,结束的时候释放一个许可,如果共享锁已经没有了许可,则线程进入等待队列注意:可以认为独占锁是共享锁的一个特例,只有一个许可。从这个角度理解的话,独占锁与共享锁都应该提供获取许可与释放许可的功能。如果线程获取许可成功,则有执行的权力,许可数量-1,获取失败,则阻塞,进入等待队列。原创 2023-04-22 12:12:12 · 244 阅读 · 0 评论 -
JAVA同步工具类之栅栏、信号量、闭锁
当线程到达栅栏处,将调用CyclicBarrier.await方法,这个方法一直阻塞直到所有线程到达栅栏处,当所有线程到达了栅栏处,栅栏将打开,所有线程被释放,而栅栏被重置以便下次使用。栅栏类似于闭锁,它能阻塞一组线程直到某个事件发生,CyclicBarrier可以使一定数量的参与方反复的在栅栏处汇集。所有线程必须全部到达栅栏处,才能继续执行;闭锁结束前,不允许线程执行,结束时,允许所有线程执行。所有线程已到达栅栏处, 2333。欢迎关注公众号算法小生。原创 2023-04-22 11:43:10 · 306 阅读 · 0 评论 -
JAVA多线程工具应用
但是每张图片获取的时间无法预知,即任务的执行时长不一致,有的可能几毫秒,有的可能几秒, 我们如何才能做到先获取的图片先进行渲染呢?任务提交后,将任务包装成QueueingFuture(FutureTask的一个子类),任务完成后,调用QueueingFuture的done方法,将结果放入BlockingQueue中。某一图片网站首页有许多图片,渲染时间较长,给用户带来较差体验,为提高用户体验度,图片需缓存且无需等待所有图片全部准备完毕后,进行渲染。欢迎关注公众号算法小生。原创 2023-04-22 11:25:26 · 62 阅读 · 0 评论 -
wait/notify使用详解
永远在synchronized方法或对象里使用wait/notify(All),不然JVM报java.lang.IllegalMonitorStateException。可以在任何地方调用线程对象的sleep方法,wait方法只能在同步代码块或同步方法中调用;永远在线程间共享对象(生产者消费者中为缓冲区队列)上使用wait/notify(All)调用线程对象的sleep方法后,不释放锁,调用对象的wait方法,释放对象获得的锁。sleep是Thread中定义的方法, wait是Object中定义的方法;原创 2023-04-19 22:14:40 · 492 阅读 · 0 评论 -
3.Java系列之Spring面试题总结
因为Spring不缓存“prototype”多例作用域的bean,因此无法提前暴露一个创建中的bean。先让最底层对象完成初始化,通过三级缓存与二级缓存提前暴露创建中的bean,让其他bean率先完成初始化。1.createBeanInstance: 实例化,其实就是调用对象的构造方法进行实例化对象。Spring通过控制反转实现松耦合,对象们给出了依赖,而不是创建与查找依赖的对象们。Spring提供事务管理接口,上至本地事务,下至全局事务。Spring为了解决单例的循环依赖问题,使用了。原创 2023-04-15 21:36:14 · 74 阅读 · 0 评论 -
2.Java系列之JVM面试题总结
如果一个操作happends-before另一个操作,那么另一个操作执行的结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前两个操作之间存在happends-before关系,并不意味着java平台的具体实现必须要按happends-before关系执行的顺序来执行,如果重排序之后的执行结果,与按happends-before关系来执行的结果一致,那么这种重排序并不非法。原创 2023-04-15 20:22:21 · 91 阅读 · 0 评论 -
1.Java系列之基础面试题总结
本文持续更新JAVA基础面试题目原创 2023-04-15 18:55:39 · 374 阅读 · 0 评论 -
5.Naocs系列之集群部署
本文学习nacos基于docker的集群部署。原创 2022-12-13 19:56:36 · 441 阅读 · 0 评论 -
Nacos服务、配置、权限管理
本文介绍nacos的权限管理模块:基于RBAC(Role-Based Access Control)权限模型,即基于角色的权限控制。后续笔者会在公众号算法小生专门开设一个系列,从Vue前端到后端一整套流程实现RBAC权限系统与大家分享。原创 2022-12-12 20:46:37 · 1418 阅读 · 0 评论