Java
文章平均质量分 82
爱coding的同学
即使生活过得平淡无奇,也不要忘记最初的梦想
展开
-
日志迁移到 logback
本次迁移的目标就是用 slf4j+logback 的日志框架来取代目前的 slf4j+log4j.原创 2023-05-24 13:13:32 · 524 阅读 · 0 评论 -
SpringCloud 路由网关鉴权熔断
Nacos:Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题Gateway:Spring Cloud Gateway的目标提供统-的路由方式且基于 Filter链的方式原创 2023-05-13 22:29:04 · 626 阅读 · 0 评论 -
基于springboot的家政服务平台的设计与实现
以往的家政服务管理平台的管理,一般都是纸质文件来管理家政服务信息,传统的管理方式已经无法满足现代人们的需求;使用家政服务管理平台, 首先可以大幅提高家政服务信息检索,只需输入家政服务相关信息就能在数秒内反馈想要的结果;其次可存储大量的家政服务信息,同时家政服务信息安全性有更高的保障;这些优点大大提高运营效率并节省运营成本。因此,开发家政服务管理平台对家政服务信息进行有效的管理是很必要的,不仅提高了家政服务管理效率,增加了用户信息安全性,方便用户及时反馈信息给管理员,增加了用户与管理员之间的互动交流。原创 2023-05-12 11:06:23 · 875 阅读 · 0 评论 -
常见Http错误码学习
服务器巡检时比较常见的 http 错误码* 400 Bad Request * 408 Request Timeout* 499 client has closed connection* 502 Bad Gateway* 504 Gateway Timeout这些错误码反映了服务器什么样的状态,仅看字面意思还不太容易理解,就动手做个试验吧。原创 2023-05-12 10:52:03 · 1045 阅读 · 0 评论 -
ehcache缓存的使用和原理
为什么使用ehcache (1)速度快。(2)轻量,很小的jar包,Ehcache 2.2.3才668kb。(3)和spring集成,通过注解就可以实现本地缓存,使用简单。(4)具有很强的灵活性,提供了LRU、LFU和FIFO缓存淘汰算法,Ehcache 1.2引入了最近最少使用、最久未使用和先进先 出缓存淘汰算法, 构成了完整的缓存淘汰算法。 (5)提供内存和磁盘存储,Ehcache和大多数缓存解决方案一样,提供高性能的内存和磁盘存储。在VM重启后,持久化到 磁盘的存储可以复原数据。原创 2023-05-11 22:32:39 · 797 阅读 · 0 评论 -
基于SpringBoot, Vue实现的校园二手书交易系统
校园二手书交易管理系统的功能分为管理员,卖家用户和用户三个部分,系统的主要功能包括首页、个人中心、用户管理、卖家用户管理、图书分类管理、二手图书管理、求购图书管理、求购回复管理、留言反馈、系统管理、订单管理等内容。任何用户只要进入系统不需登录也可浏览到的信息,后台管理是针对已登录的用户看到满意的乐校园二手书交易信息而设计的。校园二手书交易管理系统是三种身份的用户,主要涉及管理员,卖家用户和用户。每个身份都是操作起来都是清楚方便的。对于一些乐校园二手书交易信息,这是任何人都可以查看的。原创 2023-05-10 22:39:23 · 1656 阅读 · 2 评论 -
高并发下锁的优化
“锁”是最常用的同步方法之一。在高并发的环境下,激烈的锁竞争会导致程序的性能下降。下面是一些关于锁的使用建议,可以把这种副作用降到最低。原创 2023-05-09 21:54:31 · 666 阅读 · 0 评论 -
基于SpringBoot的大学生租房系统
大学生租房系统设计的目的是建立一个高效的平台,采用简洁高效的Java语言与Mysql数据库等技术,设计和开发了本大学生租房系统设计。该系统主要实现了用户和房主通过系统注册用户,登录系统后能够编辑自己的个人信息、查看首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等,还可以对后台进行操作,以及管理员可以进行首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管理,租赁订单管理,房屋评价管理等功能的管理。计算机技术在现代管理中的应用,使计算机成为用户应用现代技术原创 2023-05-09 21:46:12 · 995 阅读 · 0 评论 -
基于SpringBoot,vue的家政服务平台的设计与实现
以往的家政服务管理平台的管理,一般都是纸质文件来管理家政服务信息,传统的管理方式已经无法满足现代人们的需求;使用家政服务管理平台, 首先可以大幅提高家政服务信息检索,只需输入家政服务相关信息就能在数秒内反馈想要的结果;其次可存储大量的家政服务信息,同时家政服务信息安全性有更高的保障;这些优点大大提高运营效率并节省运营成本。因此,开发家政服务管理平台对家政服务信息进行有效的管理是很必要的,不仅提高了家政服务管理效率,增加了用户信息安全性,方便用户及时反馈信息给管理员,增加了用户与管理员之间的互动交流。原创 2023-05-08 22:44:06 · 1042 阅读 · 0 评论 -
HttpServletRequestWrapper的使用与原理
HttpServletRequestWrapper 实现了 HttpServletRequest 接口,可以让开发人员很方便的改造发送给 Servlet 的请求.HttpServletRequest 对参数值的获取实际调的是org.apache.catalina.connector.Request没有提供对应的set方法修改属性所以不能对前端传来的参数进行修改,实际场所像过滤xss攻击,取认证token统一去除token前缀等需要进行请求参数的处理。原创 2023-05-08 22:40:50 · 3531 阅读 · 0 评论 -
SimpleDateFormat 的线程安全问题以及ThreadLocal的应用
当看到高亮的那行代码时,就基本可以认定 SimpleDateFormat.format() 不是线程安全的:在多线程环境下,每次调用 format 方法时,calendar 都会将时间设置为传入的时间,这样如果上一个线程的 format 方法还在执行中,肯定会导致输出的结果不正确。加锁是解决了线程安全的问题,也不会因为 new 出太多的 DateFormat 增加 gc 的负担,但是很显然并发性能大大的降低了,如果在并发性要求较高的场合,还不如 new 一个的性能高呢,那有什么办法再优化一下吗。原创 2018-07-12 15:10:54 · 106 阅读 · 2 评论 -
zk之数据的发布与订阅
zk典型应用场景之数据发布与订阅。发布/订阅模式是一对多的关系,多个订阅者对象同时监听某一主题对象,这个主题对象在自身状态发生变化时会通知所有的订阅者对象。使它们能自动的更新自己的状态。发布/订阅可以使得发布方和订阅方独立封装、独立改变。当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象需要改变时可以使用发布/订阅模式。发布/订阅模式在分布式系统中的典型应用有配置管理和服务发现与注册。原创 2023-05-07 17:06:49 · 807 阅读 · 1 评论 -
基于SSM的超市进销存系统
本系统提供给管理员对首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 商品信息管理、采购信息管理、入库信息管理、出库信息管理、销售订单管理、部门管理、岗位管理等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证,为管理员操作提高了效率,也使其数据安全性得到了保障。原创 2023-03-13 08:27:14 · 856 阅读 · 0 评论 -
基于SSM的分布式网络商城系统设计与实现
分布式架构网上商城系统的开发运用java技术,MIS的总体思想,以及MYSQL等技术的支持下共同完成了该系统的开发,实现了分布式架构管理的信息化,使用户体验到更优秀的分布式架构网上商城系统,管理员管理操作将更加方便,实现目标。原创 2023-03-12 22:57:22 · 3228 阅读 · 10 评论 -
基于SpringBoot的校园疫情防控系统设计与实现
校园疫情防控系统的开发运用java技术、springboot框架,MIS的总体思想,以及Mysql等技术的支持下共同完成了该系统的开发,实现了校园疫情防控管理的信息化,使用户体验到校园疫情防控管理,管理员管理操作将更加方便,实现目标。原创 2023-03-12 15:41:12 · 4213 阅读 · 17 评论 -
基于SpringBoot的实习管理系统的设计与实现
本实习管理系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库,同时使用Tomcat用为系统的服务器。本系统主要包括首页,个人中心,班级管理,学生管理,教师管理,实习单位管理,实习作业管理,教师评分管理,单位成绩管理,系统管理等功能,通过这些功能的实现基本能够满足日常实习管理的操作。本文着重阐述了实习管理系统的分析、设计与实现,首先介绍开发系统和环境配置、数据库的设计,接着说明功能模块的详细实现,最后进行了总结。原创 2023-03-12 10:48:56 · 2503 阅读 · 12 评论 -
Dubbo Filter过滤器
Dubbo Filter 的入口是ProtocolFilterWrapper。ProtocolFilterWrapper 实现了 Protocol 接口。当调用ExtensionLoader的getExtension方法时,会做拦截处理,如果存在封装器,则返回封装器实现,而将真实实现通过构造方法注入到封装器中。举个简单的例子,当获取DubboProtocol的时候,会先经过ProtocolFilterWrapper进行包装。原创 2023-01-19 22:12:14 · 725 阅读 · 0 评论 -
LRU算法实现JAVA版
LRU算法实现JAVA版。原创 2023-01-18 23:10:51 · 281 阅读 · 0 评论 -
Dubbo SPI实战
Service provider interface 的简写,翻译成中文就是服务提供发现接口。不过这里不要被这个名词搞混了,这里的服务发现和我们常听到的微服务中的服务发现并不能划等号。就如同对一个接口的多种实现方式 A、B、C(可以把它们理解为服务),我需要在运行时知道应该使用哪一种具体的实现。其实本质上来说这就是一种典型的面向接口编程,这一点在我们刚开始学习编程的时候就被反复强调了。原创 2023-01-18 23:06:31 · 1287 阅读 · 0 评论 -
Dubbo 服务引用
Dubbo 服务引用的时机有两个,第一个是在 Spring 容器调用 ReferenceBean 的 afterPropertiesSet 方法时引用服务,第二个是在 ReferenceBean 对应的服务被注入到其他类中时引用。这两个引用服务的时机区别在于,第一个是饿汉式的,第二个是懒汉式的。默认情况下,Dubbo 使用懒汉式引用服务。如果需要使用饿汉式,可通过配置 的 init 属性开启。下面我们按照 Dubbo 默认配置进行分析。原创 2023-01-17 22:33:42 · 867 阅读 · 0 评论 -
Dubbo 自适应SPI
在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,有些拓展并不想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。这听起来有些矛盾。拓展未被加载,那么拓展方法就无法被调用(静态方法除外)。拓展方法未被调用,拓展就无法被加载。对于这个矛盾的问题,Dubbo 通过自适应拓展机制很好的解决了。原创 2023-01-16 21:43:37 · 391 阅读 · 0 评论 -
Dubbo调用
Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。原创 2023-01-16 21:25:15 · 1794 阅读 · 0 评论 -
Dubbo 服务暴露
本篇文章详细分析 Dubbo 服务导出过程,包括配置检测,URL 组装,Invoker 创建过程、导出服务以及注册,服务等等。原创 2023-01-15 23:22:03 · 602 阅读 · 0 评论 -
从上到下看内存
本文主要介绍内存条,总线,DMAC;内存管理内存分类;内存相关的系统调用; java中的内存。原创 2023-01-15 22:55:50 · 300 阅读 · 1 评论 -
Dubbo异常处理
在使用Dubbo进行系统间的调用的时候,我们有时候可能会遇到这样的问题:服务提供者抛出了自定义的业务异常,但是服务消费者接收到的却是RunTimeException。这是为什么呢?这就得从Dubbo的ExceptionFilter说起。原创 2023-01-13 22:39:26 · 1498 阅读 · 0 评论 -
Dubbo泛化调用
场景一:我们要搭建一个统一的测试平台,可以让各个业务方在测试平台中通过输入接口、分组名、方法名以及参数值,在线测试自己发布的 RPC 服务。这时我们就有一个问题要解决,我们搭建统一的测试平台实际上是作为各个 RPC 服务的调用端,而在 RPC 框架的使用中,调用端是需要依赖服务提供方提供的接口 API 的,而统一测试平台不可能依赖所有服务提供方的接口 API。我们不能因为每有一个新的服务发布,就去修改平台的代码以及重新上线。这时我们就需要让调用端在没有服务提供方提供接口的情况下,仍然可以正常地发起 RPC原创 2023-01-13 22:28:32 · 1373 阅读 · 0 评论 -
Dubbo服务降级
RPC 是解决分布式系统通信问题的一大利器,而分布式系统的一大特点就是高并发,所以说 RPC 也会面临高并发的场景。在这样的情况下,我们提供服务的每个服务节点就都可能由于访问量过大而引起一系列的问题,比如业务处理耗时过长、CPU 飘高、频繁 Full GC 以及服务进程直接宕机等等。但是在生产环境中,我们要保证服务的稳定性和高可用性,这时我们就需要业务进行自我保护,从而保证在高访问量、高并发的场景下,应用系统依然稳定,服务依然高可用。原创 2023-01-12 21:06:48 · 1449 阅读 · 0 评论 -
Dubbo集群容错
集群调用失败时,Dubbo 提供的容错方案。在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。原创 2023-01-12 20:44:42 · 954 阅读 · 0 评论 -
进程间通信的方式(附代码分析)
进程间通信的方式(附代码分析)。原创 2023-01-11 19:54:35 · 544 阅读 · 0 评论 -
实现一个简单的RPC远程过程调用(附源码)
实现一个简单的RPC远程过程调用(附源码)。原创 2023-01-11 19:43:00 · 1154 阅读 · 0 评论 -
synchronized 重量级锁分析
synchronized 重量级锁分析。原创 2023-01-10 19:52:54 · 1796 阅读 · 3 评论 -
synchronized锁膨胀(附代码分析)
synchronized锁膨胀。原创 2023-01-10 19:45:16 · 414 阅读 · 1 评论 -
线程,协程,异步编程模型
本文主要介绍线程,协程,异步编程模型的异同。原创 2023-01-09 20:57:56 · 1213 阅读 · 5 评论 -
Java逃逸分析(附实际例子分析)
我们知道对象一般是在堆上生成的,但这并不是绝对的。特例就是今天要说的逃逸分析。JVM 在分析代码以后,发现一个对象在声明之后,只有在它当前声明的这个函数中调用,那么它就会将这个对象在栈上申请空间。而不是在堆上。这就是JDK6出的逃逸分析。因为在栈上创建的对象,在函数执行完毕以后,会将这个对象清理。这样就大大减轻了GC的压力。原创 2023-01-07 19:59:44 · 1135 阅读 · 4 评论 -
计算Java对象大小(附实际例子分析)
对象大小包括俩部分的内容,对象头和对象内容。(图片源于网络)。在一些情况下,我们需要计算Java对象的大小,以合理分配内存。原创 2023-01-07 19:47:32 · 3968 阅读 · 0 评论 -
Duboo优雅关闭(附源码分析)
当Dubbo服务提供方要上线的时候,一般是通过部署系统完成实例重启。在这个过程中,服务提供方的团队并不会事先告诉调用方他们需要操作哪些机器,从而让调用方去事先切走流量。而对调用方来说,它也无法预测到服务提供方要对哪些机器重启上线,因此负载均衡就有可能把要正在重启的机器选出来,这样就会导致把请求发送到正在重启中的机器里面,从而导致调用方不能拿到正确的响应结果。因此要设置优雅关闭,避免响应异常问题。原创 2023-01-06 22:42:22 · 704 阅读 · 0 评论 -
Dubbo优雅启动(附源码分析)
Dubbo启动预热,简单来说,就是让刚启动的服务提供方应用不承担全部的流量,而是让它被调用的次数随着时间的移动慢慢增加,最终让流量缓和地增加到跟已经运行一段时间后的水平一样。原创 2023-01-05 19:01:49 · 833 阅读 · 0 评论 -
RPC与GRPC快速上手(附demo源码)
RPC的核心在于使进程间通信像进程内通信一样简单,更直白一点调用其他应用的方法好似调用本地方法一样简单方便。进程内之所以方便是因为写操作系统的人把复杂的事情给处理了,让业务研发专注于业务逻辑。进程间的调用简单是因为写RPC框架的人把复杂的工作给做了,使业务研发继续专注于业务逻辑。本文着重于RPC与GRPC快速上手实验,附demo源码。原创 2023-01-05 18:45:04 · 1013 阅读 · 1 评论 -
分布式ID之雪花算法
分布式ID雪花算法SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分),并且效率较高,经测试,SnowFlake每秒能够产生26万ID左右。但是依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成id冲突或者重复。实际中我们的机房并没有那么多,我们可以改进改算法,将10bit的机器id优化,成业务表或者和我们系统相关的业务。其实对于分布式ID的生成策略。无论是我们上述提到的哪一种。无非需要具有以下两种特点。自增的、不重复的。原创 2023-01-04 20:38:54 · 980 阅读 · 0 评论 -
Json 序列化和反序列化研究
概念json 序列化:把 javabean 转换成 json 字符串json 反序列化:把 json 字符串转换成对应的 javabean问题序列化时,是调用 getXxx 方法来获取 xxx 属性的值吗?反序列化时,是调用 setXxx 方法来设置 xxx 属性的值吗?试验我们用一个 People 类来做试验,注意代码public class People { /** 姓名 **/ ...原创 2023-01-03 20:45:33 · 593 阅读 · 4 评论