- 博客(90)
- 收藏
- 关注
原创 jvm垃圾回收机制
垃圾回收机制是Java语言的一个重要特性,它负责自动管理程序运行时产生的内存,以便释放不再使用的对象,防止内存泄漏并提高程序性能。JVM的堆内存是用于存储对象实例的区域。所有通过new关键字创建的对象都被分配到堆内存中。当对象不再被引用时,它就成为垃圾对象。没有任何引用指向一个对象时,它就变得可回收。一种简单的垃圾回收算法是引用计数。每个对象都有一个引用计数,当有新的引用指向对象时,计数加一,当引用失效时,计数减一。当计数为零时,对象被认为是垃圾并被回收。
2023-11-25 17:50:17
168
原创 SQl优化
请注意,每个数据库管理系统都有其独特的特性和优化技巧,因此具体的优化方法可能会因数据库而异。在进行优化之前,请确保了解你所使用数据库的最佳实践和优化建议。谨慎使用连接操作,尤其是在大型表上。这可以显著提高检索速度,特别是在大型表上。SQL 优化是提高数据库查询性能的关键步骤之一。(在 SQL Server 中)来分析查询计划,以确保查询在执行时使用了合适的索引。这可以减少从数据库检索的数据量,提高查询性能。如果查询结果很少更改,可以考虑使用缓存来存储查询结果,以避免重复查询数据库。尽量避免对列应用函数。
2023-11-24 21:44:57
252
原创 分布式事务
假设有一个电子商务平台,该平台需要同时更新订单系统和账户系统的数据,以保证不同系统之间的一致性。因此,分布式事务旨在协调不同的节点之间的事务,以确保在不同节点上执行的事务能够保持数据一致性。以上流程中,涉及到多个系统之间的数据交互,分布式事务的实现可以确保整个过程的原子性、一致性和持久性,从而确保电子商务平台的业务运作正常。如果某个系统没有回复提交请求,则事务管理器向系统发送一个回滚请求,以保持不同系统之间的数据一致性。事务管理器收到请求后,向所有涉及的系统发送一个准备提交的请求。
2023-11-23 21:44:14
154
原创 Sleuth
SpringCloud-Sleuth 提供的分布式系统中链路追踪解决⽅案同类产品:SkyWalking是本⼟开源的基于字节码注⼊的调⽤链分析,以及应⽤监控分析⼯具。特点 是⽀持多 种插件,UI功能较强,接⼊端⽆代码侵⼊。⽬前已加⼊Apache孵化器。cat 由⼤众点评开源,基于Java开发的实时应⽤监控平台,包括实时应⽤监控,业务监控。集成⽅案是通过代码埋点的⽅式来实现监控。
2023-11-22 21:55:06
200
原创 Sentinel概述
它提供了实时的流量控制、并发控制、熔断降级等功能,以确保微服务架构中的服务稳定性和可靠性。Sentinel 框架通常指的是用于服务治理和流量控制的开源框架,特别是在微服务架构中。在不同的上下文中,可能有不同的 Sentinel 框架,但最常见的是 Alibaba 开源的 Sentinel 框架。当系统中的某个服务出现问题时,Sentinel 可以通过熔断降级功能来限制对该服务的访问,防止问题扩散影响整个系统。Sentinel 通过实时的系统负载保护,自动适应系统的运行状况,防止过载导致的系统崩溃。
2023-11-21 21:21:52
553
原创 Ribbon
在Spring Cloud中,Ribbon是一个用于客户端负载均衡的组件,它可以与其他服务发现组件(例如Eureka)集成,以提供更强大的负载均衡功能。Ribbon使得微服务架构中的客户端能够更加智能地调用其他服务的实例,从而提高系统的可用性和性能。这样,当需要调用其他服务时,Ribbon可以从服务发现中心获取服务的实例列表,并基于负载均衡算法选择其中的一个实例进行调用。当向某个服务实例发起请求时,如果发生超时或者请求失败,Ribbon可以根据配置进行重试,或者选择其他可用的服务实例。
2023-11-20 21:47:12
615
原创 Nginx反向代理和负载均衡
通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。别人通过访问nginx就能代理到我的网址,其实他们是不知道我真正的服务器地址的,他们访问的只是我的nginx的地址。加速器: 属于正向代理 雷神加速,在我自己的电脑上安装的,启动雷神软件, 雷神给我们访问蓝洞,从蓝洞拿到资源,再给我们。是你的后端服务器的地址。
2023-11-18 17:35:28
1076
原创 Cloud
它提供了一系列的组件和工具,帮助开发者快速搭建分布式系统中的常见模块,例如服务注册与发现、配置中心、断路器、网关等。这有助于实现高度可伸缩性、灵活性和独立部署的系统。这通过 Eureka、Consul 等组件实现。总的来说,Spring Cloud 提供了一套完整的解决方案,帮助开发者构建和管理分布式系统中的各个服务,降低了开发、部署和维护微服务架构的复杂性。Spring Cloud 提供了负载均衡的支持,通过集成 Ribbon 等组件,可以在服务之间实现负载均衡,提高系统的稳定性和可用性。
2023-11-17 21:30:58
226
原创 Nginx
与传统的Apache服务器相比,Nginx具有更快的处理速度和更少的内存占用。Web应用服务器:Nginx可以与各种Web应用服务框架集成,如PHP、Python、Ruby等,实现高性能和高可靠性的Web应用服务。CDN服务器:Nginx可以作为CDN服务器,提供缓存和加速服务,降低网络延迟和提高用户体验。静态资源服务器:Nginx可以作为静态文件服务器,提供快速的文件下载和高并发请求的支持。缓存服务器:Nginx可以缓存静态和动态内容,提高访问速度和降低服务器负载。
2023-11-16 21:06:58
242
原创 JPA概述
它提供了一种将Java对象映射到数据库表的机制,并支持通过面向对象的方式来执行数据库操作。JPA的目标是简化数据库编程,并提供与底层数据库的解耦。JPA通常与事务一起使用,确保对数据库的操作要么全部成功,要么全部失败。通过实体管理器,可以执行各种JPA操作。JPQL是一种面向对象的查询语言,类似于SQL,但是使用实体类和字段的名称而不是表和列的名称。在JPA中,实体类是映射到数据库表的Java类。每个实体类的实例表示数据库表中的一行数据。接口,通过继承该接口并提供一些查询方法,可以自动实现数据访问操作。
2023-11-15 21:14:35
105
原创 java反射原理
Java反射的原理是基于Java虚拟机(JVM)的类加载机制,利用Java反射API可以获取一个已加载的类的相关信息,可以访问类的构造函数、方法、属性、注解等元数据信息,以及在运行时动态创建、修改、调用对象。1.获取Class对象:首先需要获取要操作的Class对象,可以通过对象的getClass()方法、Class.forName()方法、.class属性等方式获取。3.获取Method对象:通过Class对象获取Method对象,可以调用对象的方法。7.访问对象属性:通过Field对象访问对象的属性。
2023-11-14 21:09:55
147
原创 微服务概述
微服务架构是一种软件设计和开发范式,旨在将大型应用程序分解为一组小而独立的服务单元,这些单元可以独立开发、测试、部署和扩展。每个服务都专注于一个明确定义的业务功能,并通过轻量级的通信机制进行交互。微服务架构是一种灵活的设计模式,适用于需要频繁变更、可伸缩和可维护的应用程序。然而,引入微服务也会带来一些挑战,如服务间通信、数据一致性、系统集成等问题需要认真考虑和解决。
2023-11-13 19:36:01
500
原创 Elasticsearch概述
Elasticsearch是Elastic公司的产品之一,与Logstash(数据收集和处理工具)、Kibana(数据可视化工具)一起组成ELK堆栈(Elastic Stack,前身是ELK Stack),提供了完整的日志处理和分析解决方案。它的分布式特性和强大的查询功能使其成为处理大规模数据集的理想选择。Elasticsearch被设计为一个分布式系统,可以轻松地扩展到数百台服务器,处理大规模的数据和查询。通过上述搜索,你可以找到包含关键词"laptop"的所有产品,而且这个搜索是不区分大小写的。
2023-11-11 17:42:07
386
原创 多线程—锁
互斥锁的作用是保护共享资源,同时只允许一个线程访问,其他线程需要等待,直到该线程释放锁。方法上有锁保护,因此在两个线程执行过程中,只有一个线程能够获取到锁,另外一个则需要等待。方法中,我们首先获取锁,然后执行加一操作,最后释放锁。方法时,只有一个线程能够获取到锁,其他线程则需要等待,直到锁释放后才能访问。线程在获取锁时会被阻塞,在释放锁之前需要确保执行完成,否则可能会出现死锁。避免嵌套锁,即在已经获取锁的情况下再次获取锁,容易造成死锁。尽可能避免使用全局锁,应该尽可能使用局部锁,以减少锁的竞争。
2023-11-10 21:47:14
121
原创 多线程概述
线程是程序执行的最小单位,它共享程序的内存空间,但拥有自己的寄存器、栈、计数器和状态等。多线程技术可以实现同步操作和异步操作,提高程序的执行效率、响应速度和并发能力。总之,多线程技术可以使程序更加高效地利用计算机资源,提高程序的性能和响应速度,为程序员提供更多的开发自由度和操作空间。在图形界面程序中,将耗时的操作放在后台线程中,避免阻塞主线程,提高用户体验。在大数据处理中,通过多线程技术充分利用计算机的多核处理器,提高数据处理效率。在服务器程序中,充分利用CPU资源,同时处理多个请求,提高并发能力。
2023-11-09 21:55:57
94
原创 OAuth 2.0
OAuth 2.0 是一种授权机制,允许应用程序访问第三方服务的用户数据,而不需要用户提供用户名和密码。如果用户授权,第三方服务向应用程序颁发一个访问令牌(access token),应用程序可以使用这个令牌访问第三方服务的用户数据。如果用户授权,谷歌向ABC应用程序颁发一个访问令牌,ABC应用程序可以使用这个令牌访问谷歌账户的联系人数据。第三方服务向用户展示授权请求的具体内容和应用程序的身份信息,用户决定是否授权。谷歌向用户展示授权请求的具体内容和ABC应用程序的身份信息,用户决定是否授权。
2023-11-08 21:45:47
101
原创 Swagger
开发前后端分离架构的项目,往往调试后端Web接口需要用到POSTMAN工具。虽然POSTMAN 工具的功能非常强大,但是请求参数很多的情况下,我们手写这些参数和数据还是非常麻烦的。因此我们需要一个调试后端Web接口更加简便的方法。恰好Swagger提供了REST API调用方 式,我们不需要借助任何工具的情况下,访问Swagger页面,就可以对Web接口进行调用和调试,这种调试方式的效率要远超POSTMAN软件。
2023-11-07 17:53:58
69
原创 SpringSecurity原理
认证是指验证用户身份。Spring Security提供了多种身份验证方式,例如用户名和密码,LDAP,OpenID等。在认证过程中,Spring Security会使用认证管理器和用户详细信息服务来验证用户的凭据。Spring Security使用过滤器链来拦截和处理用户的请求。Spring Security是一个全面的安全框架,支持多种安全功能,例如防止跨站点请求伪造(CSRF),安全会话管理,密码加密等。Spring Security是Spring框架中的一个安全性框架,用于保护Web应用程序。
2023-11-06 21:34:02
184
原创 跨域问题.
跨域问题(Cross-Origin Resource Sharing, CORS)是由于浏览器的安全策略导致的。当浏览器中的脚本(JS)试图从一个源(域名、协议、端口)获取资源(如图片、文本、脚本等)时,如果该资源的源与脚本所在页面的源不同,那么浏览器会拒绝该请求。这种情况下,就会出现跨域问题。为了解决跨域问题,需要在服务端配置允许跨域访问的头信息。常用的解决方案包括:JSONP(JSON with Padding):通过添加一个<script>标签来获取跨域数据。
2023-11-04 18:23:33
121
原创 单点登录。
当用户访问其他应用程序时,这些应用程序可以通过检查该cookie或token来验证用户的身份,并将用户重定向到主页,而不需要再次进行身份验证。用户访问应用程序B时,应用程序B会检查客户端的cookie,如果发现"mycookie"存在且有效,则表示用户已经登录。在应用程序A中,用户进行身份验证并成功登录后,应用程序A会在客户端中设置一个加密的cookie,包含用户的身份信息。应用程序A和应用程序B在身份验证时使用相同的用户存储和身份验证策略,以确保用户的身份信息的一致性。
2023-11-03 22:04:49
220
原创 stream流
在Java中,流是实现输入/输出的重要方式,提供了丰富的流类库来完成各种输入/输出操作。创建流对象:通过流类型的相应构造方法创建一个流对象,如FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等。选择流类型:根据需要进行读/写操作,选择对应的流类型,如InputStream、OutputStream、Reader、Writer等。读/写数据:使用流对象的相应方法读/写数据,如read()、write()、readLine()等。
2023-11-02 22:19:31
104
原创 websocket网页聊天室
创建一个基于浏览器的WebSocket客户端,使用JavaScript。为客户端和服务器端创建消息处理程序,以处理从客户端发送到服务器端和从服务器端发送到客户端的消息。编写服务器端的WebSocket应用程序,可以使用Node.js和WebSocket模块。在服务器端创建一个WebSocket服务器,监听客户端请求,并将客户端与服务器端连接起来。在客户端接收服务器发送的消息,使用JavaScript将消息显示在聊天室的前端界面上。对服务器端和客户端进行测试和调试,以确保实时通信和正常的功能。
2023-11-01 22:00:12
678
原创 泛型概述.
在上面的例子中,我们定义了一个ArrayList,用于存储字符串类型的数据。在通过add方法添加数据的时候,只能添加字符串类型的数据。在使用get方法获取数据的时候,也只能获取字符串类型的数据。如果尝试添加其他类型的数据,如数字或布尔值,编译器会报错,从而保证了类型的安全性。泛型是一种编程语言特性,允许在代码中使用一种抽象的类型而不需要指定具体的数据类型。当我们使用泛型的时候,可以定义一个具体的类型,然后在实现的时候使用这个类型,但是在使用的时候可以替换掉这个类型,使用自己定义的类型。
2023-10-31 22:04:00
157
原创 sql优化
避免使用SELECT *语句,而是手动指定需要检索的列。这可以减少在磁盘中读取的数据量,从而提高查询性能。SQL优化指的是通过改进和优化SQL语句的性能来提高数据库的响应速度和效率。在WHERE子句中使用函数会导致索引失效,从而降低查询性能。缓存可以减少对数据库的访问次数,从而提高性能。可以使用缓存技术来缓存查询结果和常用数据。可以使用EXPLAIN SELECT语句来查看查询使用的索引。如果可以,应该改写查询使用JOIN操作来提高性能。对于大表,应该使用LIMIT限制结果集的大小,以免查询时间过长。
2023-10-30 21:51:57
109
原创 redis,mq如何解决重复支付问题
消息队列(MQ)解决重复支付问题:消息队列通常使用消费者-生产者模型,可以将每个订单号作为一个消息发送到消息队列中。当一个订单号被消费者从消息队列中获取之后,就可以认为这个订单已经支付成功,将该订单号存储在一个缓存中,以后遇到相同订单号时直接返回重复支付的信息。可以将每个订单的订单号作为一个key存储在Redis中,并设置一个过期时间。当客户付款时,先检查该订单号在Redis中是否存在,如果存在,则说明已经支付过一次了,返回重复支付的信息。如果不存在,就将该订单号存储在Redis中,并设置过期时间。
2023-10-19 22:46:02
769
原创 swagger
在配置文件中,需要定义API的元数据,包括版本号、标题、介绍等。此外,需要在配置文件中定义API的路径和参数等信息。使用Swagger的核心部分是编写API文档。这包括编写API的路径和操作,以及请求和响应。在编写API文档时,需要指定请求参数的类型,响应参数的类型以及验证规则等。Swagger是一种用于构建、编写和文档化RESTful API的工具。它提供了一种规范化的方式来描述API,包括请求、响应、参数和错误。在配置好Swagger和编写完API文档之后,就可以启动Swagger并查看API文档了。
2023-10-18 22:42:13
125
原创 rabbitMq死信队列
这个例子中,我们定义了一个消息的TTL过期时间,当消息在队列中等待超过这个时间时,它就会成为一个死信消息,然后被发送到死信队列中。在原始队列中,当消息出现了一些无法处理的错误,比如消息超时,或者消息被拒绝的时候,它就会被发送到死信队列中。使用RabbitMQ的死信队列可以让我们更好的管理消息队列中的消息,帮助我们识别无法处理的消息,及时处理问题,提高系统的可靠性和稳定性。最后,我们需要将原始队列绑定到死信队列上,这样当消息成为死信消息时,它就会被发送到死信队列中。
2023-10-17 22:23:06
425
原创 redis主从复制原理
Redis主从复制是指将一个Redis节点的数据复制到其他节点上的过程,其中一个节点为主节点,负责写入数据,其他节点为从节点,负责读取数据和备份。从节点接收到AOF文件后,将该文件载入内存中,并执行其中的命令,以保证自己的数据与主节点的数据保持一致。主节点接收到SYNC命令后,生成一个RDB快照文件,并将该文件发送给从节点,从节点接收并载入该文件。可以看到,从节点1和从节点2中都能读取到主节点中写入的数据,说明主从复制已经成功进行。从节点接收到命令后,将该命令写入自己的内存中的缓冲区,等待主节点的同步。
2023-10-16 22:52:17
136
原创 RabbitMQ概述原理
RabbitMQ还支持消息的持久化,即在消息发送之后,即使RabbitMQ服务器崩溃也能够恢复消息。RabbitMQ还有许多高级功能,例如:交换机(Exchange)和绑定(Binding),用于处理消息的路由和分发,以及多个队列之间的消息传递。此外,RabbitMQ还支持消息确认、消息重试等高级功能,可以保证消息传递的可靠性和一致性。总之,RabbitMQ是一种高效可靠的消息队列中间件,可以用于构建分布式系统、异步消息处理和大规模系统架构等场景。
2023-10-14 20:52:28
592
原创 Redis哨兵机制原理
它通过启动一个或多个哨兵进程,监控Redis主服务器是否宕机,如果宕机,哨兵进程会自动将一个从服务器(Slave)升级为主服务器(Master),并通知其他从服务器切换到新的主服务器上。这时,哨兵会将该信息发给其他哨兵和从服务器,通过投票机制选举一个哨兵进程,由该进程负责将一个从服务器升级为新的主服务器。因为哨兵配置中定义了down-after-milliseconds为5秒,所以在5秒后,一个哨兵进程会将其中一个从服务器升级为新的主服务器,另一个从服务器将自动切换为从新主服务器上。
2023-10-12 22:42:54
267
原创 easyPOI概述以及原理
easyPOI的实现原理是通过POI对于Excel文件的操作实现,以及通过结合反射、注解等技术,实现对Excel文件中数据的自动读取和解析以及数据的自动格式化和写入。以上代码中,通过调用ExcelExportUtil类的createWorkbook方法创建一个Workbook对象,并通过该对象创建Sheet对象,再创建表头和数据行,最后将数据写入Excel文件中。需要注意的是,EasyPOI还提供了更加简便的API,可以通过注解的方式自动将Java对象列表写入Excel文件中。
2023-10-10 21:01:11
685
原创 mybatis-plus
Mybatis-Plus是一个mybatis的增强工具,它简化了Mybatis的开发,提供了许多实用的功能,包括自动生成SQL、快速操作、分页查询等。在上面的代码中,我们通过 Mybatis-Plus 提供的 BaseMapper 接口,可以快速实现基础的 CRUD 操作。总之,Mybatis-Plus 是一个非常实用的工具,可以帮助开发者更快速、更高效地完成 Mybatis 的开发任务。总之,通过这个示例,我们可以看到 Mybatis-Plus 简化了我们的开发工作,让我们更加专注于业务逻辑的实现。
2023-10-09 19:30:56
224
原创 Spring Boot的自动装配原理
总的来说,Spring Boot的自动装配原理依赖于组件扫描、条件装配、自动配置类和自定义配置等机制,以最小化开发者的配置工作,提供一个快速构建Spring应用的框架。Spring Boot的自动装配原理是该框架的核心特性之一,它通过一种智能机制来减少开发者的配置工作,使开发更加便捷。:开发者可以通过自定义配置来覆盖或扩展Spring Boot的自动配置。这些条件可以根据类的存在、Bean的存在、配置属性的值等进行判断。:Spring Boot会自动扫描项目中的所有类,查找带有特定注解的类,主要包括。
2023-10-08 20:22:19
1067
原创 fastFDS概述和使用
其中,so-timeout和connect-timeout是连接超时时间和读取超时时间,thumb-image是生成缩略图的配置,tracker-servers是FastDFS的tracker服务器的地址和端口。SpringBoot-fastFDS是一个集成了FastDFS分布式文件系统的框架,可以方便地实现文件上传和下载。以上是SpringBoot-fastFDS的基本使用方法,通过简单的配置和调用,即可实现文件上传和下载。
2023-10-07 19:06:29
155
原创 接口文档规范
应该在文档的开头提供接口的基本信息,包括接口名称、接口URL、请求方法、请求参数、返回值、返回状态码等。这些信息应该清晰明了,并且易于理解。为了方便开发人员使用接口,接口文档应该提供一些简单易懂的使用示例,例如cURL命令、Python脚本等。接口文档应该记录接口的更新历史,包括更新日期、更新内容等信息,以便开发人员可以了解接口的变化情况。接口文档应该列出接口可能返回的错误码及其含义,以便开发人员正确处理接口返回的错误信息。接口文档应该明确标记接口的版本信息,以便开发人员能够在不同版本的接口之间切换。
2023-09-21 19:20:38
547
原创 需求文档书写规范
需求文档的格式应该清晰易读,便于阅读和理解,应该有一个明确的标题和编号。 需求文档应该包含以下内容:背景、目的、需求、功能、性能、接口、安全、测试和质量保证等。 需求应该明确具体,避免歧义,同时考虑用户的需求和期望。 功能的描述应该尽可能详细,包括输入、输出、操作流程、错误处理和异常情况等。 性能要求应该清晰具体,包括响应时间、吞吐量、并发性、容量等。 接口要求应该明确,包括接口类型、协议、数据格式、交互方式等。 安全要求应该考虑到数据保密性、完整性和可用性等方面,包括身份验证、授权、加密、防篡
2023-09-20 20:55:59
482
原创 SSM整合
SSM整合是指Spring + Spring MVC + MyBatis三个框架的整合,它们是Java企业级开发中常用的框架。SSM整合的好处是结合了三个框架的优点,能够提高开发效率、降低维护成本、方便测试和调试等。在SSM整合中,Spring负责管理对象,MyBatis进行数据库操作,Spring MVC接收请求并进行处理,整合后能够实现前端与后台的高效交互和数据的持久化存储,是一种优秀的开发模式。以上就是一个简单的SSM整合示例,它实现了一个简单的用户管理系统,包括添加用户和查看所有用户。
2023-09-19 20:40:54
93
原创 第三方登录以及验证
在第三方登录过程中,系统会向用户所使用的第三方平台发出请求,请求获取用户基本信息和登录凭证。第三方平台会向用户发放一个令牌(token),系统使用这个令牌来验证用户的身份。在验证用户身份时,系统会检查用户提供的信息是否与系统中保存的信息匹配。如果匹配成功,用户就可以登录系统;第三方登录是指用户可以通过使用已有的第三方账号进行登录,而无需再次注册新的账号。第三方登录和验证可以提高用户体验,减少注册时间和密码管理的负担,并减少重复的账号信息。验证是指系统需要验证用户提供的信息是否正确,以确保用户可以登录系统。
2023-09-16 18:48:36
401
原创 java分页查询
通过该查询语句,可以查询指定页码的数据,并实现分页效果。注意:如果使用预编译的SQL语句,则需要使用占位符(问号)代替变量。假设我们要查询第3页,每页显示10条数据,那么偏移量就是20(即从第21条数据开始查询),每页查询的数据量就是10。Java分页查询可以使用MySQL数据库中的LIMIT语句来实现,通过设置偏移量和每页查询的数据量来实现分页效果。
2023-09-15 21:24:52
336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人