自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 javase基础汇总学习

代码说白了就是属性和方法,围绕java语言本身的特点,说说在这两方面有什么用处即可。

2024-04-18 23:45:00 984

原创 SpringBoot中这样用ObjectMapper,才够优雅!

通过上面的测试,结论已经很清晰了。所以在Spring中如何正确的使用ObjectMapper不用我再说了吧~

2024-04-08 22:07:08 757

原创 单体到分布式到微服务

业务驱动着技术发展是亘古不变的道理。最开始的时候,业务量少、复杂度低,采取的技术也相对简单,能够基本满足用户对功能的需求。随着 IT 信息化的普及,更多交易被放到了网络上,增加的信息量和频繁的业务访问就变成了需要解决的问题。因此,逐渐产生了缓存、集群等技术手段,同时对业务扩展性和伸缩性的要求也变得越来越高。高并发、高可用、可伸缩、可扩展、够安全一直都是架构设计所追求的目标。下面我们来看一下架构设计经历了哪些阶段,以及每个阶段分别解决了哪些问题,又引出了哪些新问题。1、访问人数有限2、基本没有高并发的特性

2024-04-05 21:36:34 772

原创 项目实战梳理,一条请求如何工作拿到数据

纵观这整个流程,我们可以知道一个请求过来以后要经过怎么样的处理,其实从底层来说,我们开发一个软件,无非就三方面,存数据,查数据,处理数据,纵观整个图,用户带着数据来了,用户带着数据走了,用户来的时候需要进行校验,验证身份,于是有了校验的一系列东西。

2024-03-29 09:29:51 757

原创 ThreadLocal和Synchronized的区别

ThreadLocal英文翻译过来就是:线程本地量,它其实是一种线程的隔离机制,保障了多线程环境下对于共享变量访问的安全性。看到上面的定义之后,那么问题就来了,ThreadLocal是如何解决共享变量访问的安全性的呢?其实ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。由于副本都归属于各自的线程,所以就不存在多线程共享的问题了。便于理解,我们看一下下图。

2024-03-28 22:00:00 842

原创 websocket

WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接, 并进行双向数据传输。(维基百科)WebSocket 本质上一种计算机网络应用层的协议,用来弥补 http 协议在持久通信能力上的不足。WebSocket 协议在2008年诞生,2011年成为国际标准。现在最新版本浏览器都已经支持了。

2024-03-28 11:53:56 1343

原创 CIM搭建实现发送消息的效果

该框架是基于主流的Netty框架(Netty的强大已无需多言了),能够保证稳定高效的连接,而且断线重连机制支持的也很好。易于扩展和使用,并完美支持集群部署支持海量链接,目前支持websocket,android,ios,桌面应用,系统应用等多端接入持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用即时消服务。用时7年 基于CIM的项目已经运行在全国各个地方,包括上市公司,各地政务系统,警务系统等服务于上百家客户。

2024-03-28 11:04:34 445 1

原创 跨域问题经典解决方法

当一个请求的url的协议、域名、端口三者只要有一个与当前页面的url不同则会出现跨域问题。解决跨域问题的方法有多种,以下是一些常见的解决方案:代理服务器:在前端服务和后端接口服务之间架设一个中间代理服务,该代理服务的地址与前端服务一致。这样,代理服务与前端服务之间由于协议、域名、端口三者统一,不存在跨域问题,可以直接发送请求。同时,代理服务与后端服务之间由于不经过浏览器,没有同源策略的限制,也可以直接发送请求。通过这种方式,可以通过中间代理服务器做接口转发,解决跨域问题。

2024-03-14 09:41:31 1268

原创 jvisualvm保姆级教程

这其中还有很多点解释得不够底层,后续我会继续补充,如为什么有两种方式,优势利弊都是什么,还有每一步的操作都代表了什么,版本之间的关系如何,这些问题我们都要心知肚明。我们需要注意:启动和配置:Java VisualVM通常位于JDK安装目录的bin目录下。在启动后,它会在左侧栏目列出所有运行中的Java进程。确保你选择了正确的进程进行监控。插件管理:Java VisualVM支持丰富的插件来增强其功能。你可以通过菜单栏的“工具”->“插件”来查看和管理已安装的插件。

2024-03-11 21:36:33 775

原创 exe4j将java项目打包为exe包(无需每台机器上安装jdk)

将java项目打成exe包的好处有很多:便捷性:将Java程序打包成exe文件后,用户可以直接在Windows操作系统上双击运行,而无需通过命令行或集成开发环境(IDE)来运行。这大大简化了程序的启动和使用过程。兼容性:虽然Java本身是跨平台的,但某些计算机可能没有安装Java环境。exe文件可以在没有安装Java环境的计算机上运行,只要操作系统是Windows即可。因此,将Java程序打包成exe文件可以方便地将程序分享给其他人使用,而无需担心他们是否有适当的Java运行环境。

2024-02-23 19:50:56 1168 3

原创 两种动态代理(可以看到代理类的样子,方便理解)

自定义注解 MyTransactionAnnotationMyTransaction类@Component@Slf4j@Autowired/*** 开启事务,并配置默认的事务传播机制* @return*/log.info("事务开启成功");/*** 事务提交*/log.info("事务提交成功");/*** 事务回滚*/log.info("事务回滚成功");MyTransactionAop类@Slf4j@Aspect@Component@Autowired。

2024-02-23 00:06:19 411

原创 装饰模式学习

1、书上的超人是谁?是ConcreteComponent类的子类还是和这个类是同一层级的???2、图上的聚合关系是如何进行体现的3、哪里叫内部组装?4、实现和使用分离式如何体现的呢???

2023-11-29 20:08:57 605

原创 享元模式学习

可以极大减少内存中对象的数量,使得相同或相似对象在内存中只保存一份,从而可以节约系统资源,提高系统性能。享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。享元模式的主要缺点如下:享元模式使得系统变得复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化。为了使对象可以共享,享元模式需要将享元对象的部分状态外部化,而读取外部状态将使得运行时间变长。

2023-11-20 09:54:36 383

原创 桥接模式学习

这个桥接模式最深刻的一个点是:将源码定义好的关系修改为运行时在客户端中指定关系。解开源码定义好的类之间的耦合,变成运行的时候才让类之间耦合起来。这样我现在如果想要增加一个功能,比如音乐播放器,那么只有增加这个类就可以了,不会影响到其他任何类,类的个数增加也只是一个;如果是要增加S品牌,只需要增加一个品牌的子类就可以了,个数也是一个,不会影响到其他类。这显然符合开放-封闭原则。而这里用到的合成/聚合复用原则是一个很有用处的原则,即优先使用对象的合成或聚合,而不是继承。

2023-11-20 09:32:35 257 2

原创 2023年10月自考总结

背景过程总结

2023-10-31 16:41:16 119

原创 sleuth+zipkin 使用

Sleuth 和 Zipkin 是两个与分布式系统跟踪和监控相关的工具,它们通常与Spring Cloud和微服务架构一起使用。下面是对它们的总结:Sleuth 是一个分布式系统的跟踪解决方案,特别是在微服务架构中。它是Spring Cloud生态系统的一部分,可以与Spring Boot轻松集成。Sleuth 的主要目标是为系统中的每个请求生成唯一的标识符,并记录请求在各个微服务之间的传递情况。它会生成并注入跟踪标识符,使得开发人员能够在不同的微服务之间追踪请求,并了解请求的处理时间。

2023-09-22 10:47:49 440 2

原创 打败全国百分之99.99的模板方法模式讲解

定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法是的子类可以不改变一个算法的结构即可重定义改算法的某些特定步骤。从版本1开始,我们一步步增加灵活性,多维度思考,主要围绕复用扩充维护三方面考虑,代码越来越灵活。

2023-09-15 09:50:12 121

原创 开发人员常用命令

添加指定需要开放的端口:重载入添加的端口:查询指定端口是否开启成功:远程拉取所有分支。

2023-09-06 15:33:49 71

原创 【低代码】手写模板根据数据库表自动生成后端Controller Service Dao层增删改查相关代码

随着科技不断演进,我们正逐渐迈向一个前所未有的时代。代码的自动化正成为现实,让人们不得不重新思考其在创造和创新中的角色。过去,编写代码是实现数字化愿景的关键,但随着人工智能和自动化工具的崛起,代码编写变得更加智能、高效,甚至开始自我完善。现在要求对一个绩效平台-福分按照这种思路进行重构。以下是一些可以实现这种功能的工具:MyBatis Generator 可以根据数据库表结构生成基本的 CRUD(增删改查)操作,包括实体类、Mapper 接口和 XML 配置文件。你可以配置生成的方式以及自定义查询方法。Sp

2023-09-01 00:15:00 401

原创 深入理解sql:进阶版

做LeetCode题目有许多好处,特别是对于准备面试、提升编程技能和深化计算机科学知识的人来说。以下是一些可能的好处:算法与数据结构掌握:LeetCode题库涵盖了各种经典的算法和数据结构问题,通过解决这些问题,你可以加深对各种常见算法和数据结构的理解和掌握。编程技能提升:LeetCode的题目要求你在一定的时间内用有效的代码解决问题,这可以帮助你提高编写高效、优雅代码的能力,培养解决问题的思维方式。

2023-08-31 08:46:09 807

原创 部署ElasticSearch流程(手把手教学)

easticsearch 是一个强大的开源搜索和分析引擎。

2023-08-18 23:27:31 110

原创 设计模式之策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时选择算法的不同实现,并将其封装在独立的策略类中。这样可以使得算法的变化独立于使用它们的客户端。策略模式通过定义一系列算法,然后将其封装在各自的类中,使得这些算法可以相互替换,以满足不同的需求,同时不影响客户端的代码。策略模式的主要参与者包括:Context(上下文):上下文是客户端与策略之间的桥梁。它持有一个策略对象的引用,并在运行时切换不同的策略。上下文根据不同的情况或条件选择适当的策略进行调用。

2023-08-07 10:25:29 1137

原创 一文详解桶排序

桶排序适用于对整数或浮点数等数值型数据进行排序。它可以在特定范围内的数据排序中表现得非常高效,特别是在数据分布相对均匀的情况下。当涉及到对大量数据进行排序时,桶排序是一种高效的排序算法。它的好处包括以下几点:高效稳定:桶排序是一种稳定的排序算法,意味着在排序过程中相等元素的相对位置保持不变。这在某些应用场景中非常重要,例如按照多个属性进行排序时,需要保持其中一个属性的顺序。线性时间复杂度:在特定情况下,桶排序可以实现线性时间复杂度O(n),其中n是要排序的元素数量。

2023-08-02 11:25:28 238

原创 深入理解 SQL:从基本查询到高级聚合

LIMIT 1SQL是一种强大且灵活的语言,它能够帮助我们轻松地管理和分析数据库中的数据。了解基本查询、过滤、聚合以及联结多个表等操作,将使您在应用开发和数据分析领域更具优势。随着不断练习和深入学习SQL,我已经驾轻就熟了。你也试试吧。

2023-07-31 19:42:37 638

原创 手写openFeign

总的来说,OpenFeign简化了基于RESTful的HTTP请求的创建和使用过程,帮助你构建更加简洁、可维护、可扩展的微服务应用。与Spring Cloud集成:OpenFeign是Spring Cloud的一部分,因此与Spring Cloud的其他组件(如Eureka、Hystrix等)无缝集成,形成完整的微服务生态系统。整合服务发现:OpenFeign可以与Eureka等服务发现组件集成,使得你可以通过服务名来访问其他微服务,而无需硬编码服务的具体地址。被调用方和应用级别的被调用方一样。

2023-07-31 09:13:31 868 3

原创 手动搭建gateway,项目集成gateway实现Token效果

1、搞懂gateway是干嘛的2、知道配置文件中各个参数是什么。

2023-07-28 20:42:58 1669

原创 synchronized 关键字

非静态方法的同步;静态方法的同步;代码块。非静态方法的同步:非静态方法的同步是针对实例对象的,即在同一时间内只允许一个线程访问该实例对象的同步方法。静态方法的同步:静态方法的同步是针对类的,即在同一时间内只允许一个线程访问该类的静态同步方法。代码块:synchronized关键字还可以用于代码块,这时候需要指定一个对象作为锁。在同一时间内,只允许一个线程进入该代码块执行。

2023-07-26 11:03:20 144

原创 一文彻底搞懂序列化和反序列化

Redis(Remote Dictionary Server)是一种开源的高性能键值存储数据库,它也被称为数据结构服务器,因为它支持多种灵活的数据结构。Redis以内存中的数据结构为基础,提供了快速、高效的数据存储和访问能力。它可以用作数据库、缓存、消息代理和排行榜等多种用途。Redis将数据存储为键值对,其中键是唯一的标识符,而值可以是字符串、哈希、列表、集合、有序集合等各种数据结构。(因为我们是面向对象开发,所有就要使用内存数据库啦,因为要把对象存取来哦)

2023-07-23 21:20:26 1469

原创 并发 并行 同步 异步 你分清了吗

在多线程编程中,分工和同步是两种重要的策略,通过合理地分工和同步,可以最大程度地发挥多线程的并发性和并行性,提高程序的执行效率和性能。然而,分工和同步也需要谨慎使用,避免出现死锁、饥饿等并发问题。因此,在多线程编程中,需要综合考虑业务逻辑和数据访问方式,合理选择合适的分工和同步策略,从而确保多线程程序的正确性和性能。

2023-07-22 10:18:49 201 2

原创 实现异步编程的方式

在同步操作中,我们执行到 发送短信 的时候,我们必须等待这个方法彻底执行完才能执行 赠送积分 这个操作,如果 赠送积分 这个动作执行时间较长,发送短信需要等待,这就是典型的同步场景。实际上,发送短信和赠送积分没有任何的依赖关系,通过异步,我们可以实现赠送积分和发送短信这两个操作能够同时进行,比如:这就是所谓的异步,是不是非常简单,下面就说说异步的几种实现方式吧。异步编程是一种强大的编程技术,它可以在处理并发任务时显著提升性能和响应性。

2023-07-22 10:13:12 238

原创 汉诺塔问题

关于解决汉诺塔问题有很多方法,上边讲了递归算法实现。迭代方法:可以使用循环结构来代替递归,实现迭代解决汉诺塔问题。这种方法通常使用栈或队列来模拟递归调用的过程,并在每次迭代中更新状态,直到问题得到解决。位运算:汉诺塔问题还可以使用位运算来解决。通过将圆盘数量表示为二进制数,可以利用位运算来确定每个圆盘应该放置在哪个柱子上。这种方法对于大规模的汉诺塔问题尤其有效。数学公式:汉诺塔问题有一个数学上的解法。对于n个圆盘,最少需要移动2^n - 1次。

2023-07-19 10:45:50 1490 2

原创 手写反射实现读取自定义注解中的属性值

在Java中,注解(Annotation)是一种用于提供元数据的特殊标记。它可以应用于类、方法、字段等程序元素上,以提供关于这些元素的额外信息。注解本身不会直接影响程序的执行,但可以被编译器、工具和框架等处理,以实现特定的行为或功能。// 定义一个自定义注解// 使用自定义注解// 方法体 } }// 解析注解Class

2023-07-09 22:11:20 910 2

原创 纯手写IOC以及解决简单的循环依赖的问题

正常情况下我们是通过注解标识然后获取想要被扫描的包并将带有标识的类放到ioc容器中,那我们是不是不使用注解也能实现这种效果呢,其实归根结底,是根据标识判断当前类是否被Spring管理,根据标识是否需要将字段对象进行注入,那好,我们既然知道Spring是定义了这一套规则出来,我们自己也能实现,我们使用注释代表注解,通过扫描特定注释实现一样的效果。提前暴露对象的引用:当存在循环依赖时,需要在适当的时机将正在创建的对象提前暴露给其他对象使用,而不是等待对象完全创建后再进行注入。获取Bean对象的类。

2023-07-07 10:08:34 274 1

原创 配置IOC的方式(配置文件和注解)

注解方式和配置文件方式都有自己的适用场景和优劣势,具体选择哪种方式取决于项目的需求、团队的偏好和开发的复杂度。一般而言,注解方式适合简单的依赖注入场景,而配置文件方式适合复杂的依赖注入和需要灵活配置的场景。难以配置复杂依赖:对于复杂的依赖关系,使用注解方式可能会变得复杂和难以配置,可能需要编写大量的注解和参数配置。配置复杂:相比注解方式,配置文件方式可能需要编写更多的配置信息,配置文件的编写和维护可能会增加开发的工作量。注解的使用需要遵循特定的注解规范和语法,需要适应和学习。

2023-07-07 08:41:00 318

原创 一篇文章解释清楚IOC和DI

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。实例:我们是如何找对象的?常见的情况是,我们到处去看哪里有长得漂亮女生,然后打听她们的兴趣爱好、qq号、电话号,想办法认识她们,我们必须自己设计和面对每个环节。

2023-07-03 10:50:00 315 2

原创 手写map

HashMap是Java中一中非常常用的数据结构,也基本是面试中的“必考题”。它实现了基于“K-V”形式的键值对的高效存取。JDK1.7之前,HashMap是基于数组+链表实现的,1.8以后,HashMap的底层实现中加入了红黑树用于提升查找效率。HashMap根据存入的键值对中的key计算对应的index,也就是它在数组中的存储位置。当发生哈希冲突时,即不同的key计算出了相同的index,HashMap就会在对应位置生成链表。当链表的长度超过8时,链表就会转化为红黑树。

2023-07-02 12:32:57 302 2

原创 leetcode题集训 sql

虽然练习sql有很多好处,但是我们不得不意识到chatGPT就能解决这些事情,但是我们也要会写(会写但是不写),不然以后得低水平工作机会都是全能的GPT啦~

2023-07-01 20:56:53 736 2

原创 并发和并行的区别

并发是指多个任务在同一时间段内执行,并且这些任务可以交替执行,每个任务都有可能在任意时刻暂停、切换到其他任务,然后再恢复执行。并行是指多个任务同时执行,每个任务都在不同的处理器核心或计算资源上独立运行,彼此之间相互独立,不会相互干扰。并发和并行的区别在于任务的执行方式和资源的分配方式。并发注重任务的交替执行和资源的共享,通过合理的调度和同步机制来实现高效的任务处理;而并行注重任务的同时执行和资源的分配,通过利用多个处理器核心或计算资源来实现任务的加速。并发是指在一个时间段内同时处理多个任务的能力。

2023-06-25 21:30:26 621

原创 手写SpringBoot启动器主要步骤

MyComponent :装配注解MyAutowired :属性注入的注解MyComponentScan :扫包的注解通过自定义注解(@MyComponent和@MyAutowired),你可以标识需要被Spring容器管理的组件,以及需要进行属性注入的依赖关系。这样可以实现基于注解的组件装配和依赖注入,简化了配置和编码工作。

2023-06-15 08:54:17 1177 1

原创 手写nacos

服务提供者在启动时向注册中心注册自己的服务实例,消费者可以向注册中心查询服务的地址信息。注册中心(Registry):Nacos作为一个服务注册中心,用于管理服务实例的注册和发现。总体来说,Nacos的实现原理是通过注册中心管理服务实例的注册和发现,提供了命名服务来映射服务名到实际地址,以及配置中心用于集中管理配置信息。每个服务都有一个唯一的服务名,Nacos通过命名服务将服务名映射到实际的服务地址。是的,有几个类似于Nacos的组件,它们提供服务发现、配置管理和相关功能。

2023-06-10 09:31:19 894 1

空空如也

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

TA关注的人

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