java
文章平均质量分 82
Java项目学习过程
cyt涛
西安电子科技大学硕士在读
展开
-
事务方法中存在远程调用
在事务方法中存在远程调用是否有问题?下单方法中远程调用查询地址簿信息和服务信息,远程调用涉及网络传输,如果网络传输时间过长会增加数据库事务的时长,如果并发高会把数据库的链接消耗殆尽,导致系统不能正常工作。原创 2024-09-16 08:37:49 · 315 阅读 · 0 评论 -
微服务之间远程调用实现思路
项目使用的Spring Cloud Alibaba框架,微服务之间远程调用使用OpenFeign,具体实现步骤如下:(1)在api工程定义OpenFeign接口,使用@FeignClient注解进行定义。(2)服务提供方定义OpenFeign接口的实现类,实现具体的逻辑。(3)服务调用方(客户端)依赖api工程,使用@EnableFeignClients注解扫描Feign接口,生成代理对象并放在Spring容器中。(4)服务调用方(客户端)定义专门远程调用的客户端类,在客户端类中实现远程调用原创 2024-09-16 00:17:18 · 213 阅读 · 0 评论 -
微服务保护之熔断降级
在微服务架构中,服务之间的调用是通过网络进行的,网络的不确定性和依赖服务的不可控性,可能导致某个服务出现异常或性能问题,进而引发整个系统的故障,这被称为 微服务雪崩。为了防止这种情况发生,常用的一些保护措施包括超时处理、熔断降级、限流、线程池隔离和信号量隔离等。原创 2024-09-15 13:05:47 · 811 阅读 · 0 评论 -
订单编号生成规则
小型系统、单点系统:使用自增序列(数据库或 RedisINCR)即可,简单易实现,但需要注意系统扩展性和性能瓶颈。需要包含时间信息的订单号:可以使用时间戳 + 随机数,通过随机数降低重复风险,适合小型系统。订单类型明确的系统:可以使用订单类型 + 日期 + 序号,不仅保证唯一性,还能通过订单号获取有用信息,适合有不同订单类型的系统。高并发分布式系统:推荐使用分布式唯一ID生成器(如 Snowflake 算法),高效、唯一、支持分布式,是大型系统和高并发系统的首选。原创 2024-09-15 10:16:54 · 421 阅读 · 0 评论 -
订单表设计思路
订单表通常采用的结构是订单主表与订单明细表一对多关系结构,比如:在电商系统中,一个订单购买的多件不同的商品,设计订单表和订单明细表:(1)订单表:记录订单编号、用户信息、订单状态、总金额等信息。(2)订单明细表:订单号、记录该订单每个商品的信息,包括:商品名称、单价、数量、总价等。如果系统需求是一个订单只包括一种商品,此时无须记录订单明细,将购买商品的详细信息记录在订单表即可,设计字段包括:订单编号、用户信息、订单状态、总金额、商品名称、单价、数量、总价等。原创 2024-09-14 16:57:21 · 853 阅读 · 0 评论 -
项目内部调用的远程接口开发
编写一个项目内部调用的远程接口通常是为了在分布式系统或者微服务架构中,实现各个服务之间的通信和数据交换。这样的远程接口专门用于服务之间的调用,而不是直接暴露给外部用户或前端。原创 2024-09-14 16:01:15 · 462 阅读 · 0 评论 -
Elasticsearch之bool查询
bool查询是 Elasticsearch 中最常用的复合查询类型,允许将多个查询组合在一起。它通过逻辑操作符(如mustshouldmust_not和filter)来构建复杂的查询条件,从而满足多条件匹配、逻辑与(AND)、或(OR)、非(NOT)的查询需求。原创 2024-09-13 22:45:53 · 374 阅读 · 0 评论 -
监听RabbitMQ,向Elasticsearch 创建索引
上一篇通过配置Canal+MQ的数据同步环境,实现了Canal从数据库读取binlog并且将数据写入MQ。下边编写程序监听MQ,收到消息后向ES创建索引。原创 2024-09-13 22:11:10 · 513 阅读 · 0 评论 -
Canal+RabbitMQ数据同步环境配置
Canal 是阿里巴巴开发的开源工具,主要用于解析 MySQL 的 binlog 日志,从而实现数据同步。Canal 会模拟 MySQL 从库的协议,订阅主库的 binlog,从而获取数据库的变更信息。将 Canal 解析到的 MySQL 数据库变更消息通过 RabbitMQ 分发给下游的消费服务。RabbitMQ 在这个场景中充当消息中间件,保证消息的可靠传递和队列管理。原创 2024-09-13 13:48:23 · 1039 阅读 · 0 评论 -
MQ技术方案
保证MQ消息的可靠性分两个方面:保证生产消息的可靠性、保证消费消息的可靠性。幂等性(Idempotency)是指一个操作可以重复执行多次,但无论执行多少次,结果都是相同的,不会有副作用。对于分布式系统中使用消息队列的场景,幂等性通常用于保证消息不会因重复消费而导致数据错误。原创 2024-09-12 11:52:32 · 1394 阅读 · 0 评论 -
搜索功能技术方案
Elasticsearch 是一个分布式搜索引擎,基于 Lucene 构建,提供强大的全文检索、结构化查询和地理位置查询功能。原创 2024-09-11 17:03:54 · 1096 阅读 · 0 评论 -
MyBatis之手动映射
在一些简单的场景下,MyBatis 能够自动完成对象和数据库字段之间的映射,这时就不需要手动映射。在MyBatis的XML文件中,我们可以通过来进行手动映射。这种方式适合需要映射复杂对象的情况,比如下面的用户和地址信息的场景。下面是如何在MyBatis的XML文件中编写手动映射的示例。原创 2024-09-11 16:01:24 · 1100 阅读 · 0 评论 -
分布式调度平台XXL-JOB
XXL-JOB 是一个分布式任务调度平台,用于对定时任务进行管理、监控和执行。它可以支持多种任务调度场景,常用于数据定时同步、缓存定时更新等任务。在项目中使用 XXL-JOB 来对门户的缓存进行定时更新,可以确保缓存数据保持最新,减少缓存穿透或缓存雪崩等问题的发生。原创 2024-09-09 16:56:55 · 836 阅读 · 0 评论 -
保证缓存一致性
缓存一致性是指确保缓存中的数据与数据库中的数据保持同步,特别是在数据更新、删除等操作后,避免缓存中保存过期或错误的数据。根据系统对实时性的要求,缓存一致性的方案可分为三类:对数据实时性有一定要求、对数据实时性要求不高、对数据实时性要求非常高。不同场景下采用的方案有所不同。不论采用哪种方案,都应注意缓存的过期策略,合理设置缓存的过期时间(TTL,Time to Live),以确保缓存最终与数据库一致。即使在短时间内缓存和数据库数据不一致,缓存到期后会自动失效,最终数据可以保证一致性。原创 2024-09-09 14:44:21 · 970 阅读 · 0 评论 -
缓存雪崩问题
缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量key设置了相同的过期时间,或者系统出现了大规模宕机、重启、网络故障等异常情况,导致缓存系统大面积失效。原创 2024-09-09 12:18:32 · 396 阅读 · 0 评论 -
缓存击穿问题
缓存击穿是指当大量的请求同时访问某个热点数据,而该数据在缓存中失效或到期的瞬间,所有请求同时绕过缓存直接请求数据库,导致数据库瞬间负载过高,严重时可能导致数据库宕机或服务崩溃。某个热点数据有大量的请求,而这个数据正好在缓存中失效。缓存失效后,所有请求同时到达数据库,导致数据库压力瞬间暴增。原创 2024-09-09 12:05:45 · 347 阅读 · 0 评论 -
缓存穿透问题
缓存穿透是指在缓存中不存在某个数据,且数据库中也不存在该数据的情况下,用户不断发起请求,导致请求直接穿透缓存,打到数据库,进而造成数据库压力过大,甚至宕机。这种情况往往是由于恶意攻击者或者系统设计不完善引起的。例如,如果一个系统允许用户通过 id 查询数据,但请求的 id 不存在,那么查询就会跳过缓存,直接访问数据库。原创 2024-09-08 21:23:38 · 1121 阅读 · 0 评论 -
Spring cache的使用
Spring Cache是Spring提供的一个缓存框架,基于AOP原理,实现了基于注解的缓存功能,只需要简单地加一个注解就能实现缓存功能,对业务代码的侵入性很小。原创 2024-09-08 20:46:59 · 779 阅读 · 0 评论 -
Redis访问工具
常用的有Jedis和Lettuce两个访问redis的客户端库,其中Lettuce的性能和并发性要好一些,Spring Boot 默认使用的是 Lettuce 作为 Redis 的客户端。原创 2024-09-08 16:23:17 · 1482 阅读 · 0 评论 -
移动应用门户实现的技术方案
移动应用门户是专为移动设备(如智能手机和平板电脑)设计的应用程序,比如:小程序、APP等,用户可以通过应用商店下载并安装。这些应用程序提供了更好的用户体验,通常具有更高的性能和交互性,可以直接从设备主屏幕启动。移动应用门户为了提高访问效率,需要从多个层面进行优化,包括静态资源、负载均衡、缓存等方面。对于移动应用提高访问效率方法通常有:(1)静态资源要走CDN服务器(2)对所有请求进行负载均衡(3)在前端及服务端缓存门户上显示的动态数据。原创 2024-09-08 14:56:54 · 1523 阅读 · 0 评论 -
JWT令牌技术
JSON Web Token(JWT)是一种使用JSON格式传递数据的网络令牌技术,它是一个开放的行业标准(RFC 7519),它定义了一种简洁的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任,它可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止内容篡改。使用JWT可以实现无状态认证:传统的基于session的方式是有状态认证,用户登录成功将用户的身份信息存储在服务端,这样加大了服务端的存储压力,并且这种方式不适合在分布式系统中应用。原创 2024-09-02 14:15:43 · 1166 阅读 · 0 评论 -
小程序定位功能开发
小程序端的定位是通过手机的定位模块进行定位,定位成功获取经纬度坐标,平台根据经纬度坐标请求地图服务获取经纬度坐标对应的具体位置。小程序首先通过微信提供的方法拿到经纬度坐标,然后请求后端获取具体的位置,后端会请求高德地图根据经纬度获取具体的城市信息。原创 2024-09-02 13:10:18 · 361 阅读 · 0 评论 -
登录认证功能开发
一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权。: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等。:则是该用户登录系统成功后当用户去点击菜单或操作数据时系统判断该用户是否有权限,有权限则允许继续操作,没有权限则拒绝访问。原创 2024-09-02 12:47:13 · 894 阅读 · 0 评论 -
如何接收请求数据
路径变量中的数据用@PathVariable注解;请求体中的json用@RequestBody注解;key-value用@RequestParam注解,也可以省略。原创 2024-08-31 15:57:42 · 596 阅读 · 0 评论 -
“添加”业务功能开发
根据界面原型结合表结构进行设计,先分析表中每个字段的数据来源,再分析接口传入参数内容,然后定义controller接口,通常不需要返回数据,前端可根据状态码判断是否添加成功。原创 2024-08-31 13:17:18 · 682 阅读 · 0 评论 -
分页查询的两种实现方法
MyBatis-Plus 分页方法:适用于需要结合查询条件()并且 SQL 相对简单的场景。PageHelper 分页组件:适用于复杂的自定义 SQL 查询场景。原创 2024-08-30 17:06:09 · 1510 阅读 · 0 评论 -
持久层接口开发
通常一个接口定义后,从持久层开始开发。对于一个新模块需要使用工具生成模型类、mapper接口、mapper映射文件等,下边介绍一个工具用于自动生成代码。原创 2024-08-24 19:10:04 · 338 阅读 · 0 评论 -
接口如何定义
接口设计完成之后,需要出接口文档。根据要求可以出word类型、excel类型都可以;如果没有特殊要求,使用swagger生成接口文档较为方便。根据接口设计的内容编写controller方法,最后通过swagger生成接口文档。原创 2024-08-24 16:18:09 · 348 阅读 · 0 评论 -
接口如何设计
在企业中,前后端分离开发是一种常见的开发模式。在这种模式下,Java 程序员通常负责设计和实现后端 API 接口,而前端工程师则根据这些接口来开发用户界面和功能。首先明确该接口是一个前后端交互接口,该接口由前端通过HTTP协议进行调用,前端去调用接口需要知道以下内容:HTTP请求方法接口路径请求参数类型请求参数内容响应结果类型响应结果状态码响应结果内容所以我们设计接口需要设计这些内容。原创 2024-08-24 15:54:17 · 872 阅读 · 0 评论 -
代码断点调试
在 IntelliJ IDEA 中对现有的 Java 代码进行断点调试是一个非常常见且有用的操作。原创 2024-08-24 14:49:35 · 388 阅读 · 0 评论 -
快速融入新项目开发
进入一家新公司初次接触一个新项目应该从哪里入手呢?怎么做才能快速的去熟悉项目并顺利进入开发工作?首先去熟悉项目大概情况,包括:项目的背景、项目业务流程、项目架构等。然后根据自己所分配的业务模块,去理解它的需求及设计。了解的差不多了就可以进入模块开发,参考同类型的业务模块尝试动手开发。原创 2024-08-24 14:36:50 · 629 阅读 · 0 评论 -
Maven 常用命令
执行时,Maven 会执行整个生命周期的默认阶段,包括编译、测试、打包和安装。因此,你不需要单独执行,Maven 会在install阶段自动完成打包操作。这个命令综合了构建的多个步骤,并将结果安装到本地仓库,便于本地项目引用。原创 2024-08-23 20:09:39 · 1136 阅读 · 0 评论 -
路线规划之Neo4j
Neo4j 是一个领先的图数据库管理系统,以其高效处理和查询复杂关系数据的能力而闻名。它使用图结构存储数据,能够直观地表示实体及其之间的关系,非常适合处理社交网络分析、推荐系统、网络安全、供应链管理等场景中的复杂关系和连接数据。Neo4j 是一个功能强大的图数据库系统,专注于处理和查询复杂的关系数据。凭借其灵活的图数据模型、高效的关系查询能力以及丰富的生态系统,Neo4j 在许多领域中得到了广泛应用。它不仅适用于传统的数据库应用场景,还能够处理需要分析和查询复杂关系的现代应用程序。原创 2024-08-20 13:32:42 · 844 阅读 · 0 评论 -
基于RabbitMQ的消息监听器
RabbitMQ是一种广泛使用的消息队列(Message Queue)系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于在不同的系统或组件之间传递消息。通过消息队列,系统可以实现解耦、异步处理、负载均衡等特性,从而提高系统的可扩展性和可靠性。这段代码的主要作用是通过监听RabbitMQ消息队列,处理微服务A中与机构相关的消息。在微服务B中通过解析消息内容,动态确定消息的类型和需要执行的操作,并调用相应的服务处理该消息。原创 2024-08-19 16:42:56 · 1006 阅读 · 0 评论 -
单体项目转换为微服务架构
从单体项目到微服务架构的转变,是一个逐步优化的过程。上述各个方面涵盖了从服务注册、通信、网关管理、配置管理、服务保护、事务处理、监控、数据库管理到DevOps等多个方面的考虑。通过合理的架构设计和工具的使用,可以逐步实现系统的分布式部署和扩展,提高系统的可维护性和可用性。原创 2024-08-15 21:46:02 · 668 阅读 · 0 评论 -
模型类DTO、PO、VO
DTO(数据传输对象)用于不同层之间的数据传递,轻量化,字段通常为业务逻辑所需。PO(持久化对象)是直接与数据库表对应的实体类,负责数据库操作。VO(值对象)是用于前端展示的数据封装,通常包含组合或处理后的数据。原创 2024-08-15 17:52:15 · 900 阅读 · 0 评论 -
两种变量初始化方法的区别
例如,你可能在后续代码中通过某种条件判断来决定是否创建或赋值一个。,但在某些情况下(如集合或数组)会检查更多条件。两种方式主要在于是否创建和分配了内存给。,并影响后续对该变量的使用。对象,这时候初始化为。,这个方法通常也会返回。原创 2024-08-15 16:10:03 · 778 阅读 · 0 评论 -
责任链设计模式
责任链设计模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。责任链模式通过将这些对象连成一条链,并沿着这条链传递请求,直到某个对象处理它为止。原创 2024-08-15 10:04:49 · 470 阅读 · 0 评论 -
BigDecimal高精度运算
当两个整数进行除法运算时,直接相除会丢弃小数部分,得到一个整数结果。然而,通过使用BigDecimal类或工具类方法(如 Hutool 的),可以保留小数部分并得到一个精确的BigDecimal结果。这种方法特别适用于需要高精度计算的场景,例如财务、科学计算等。原创 2024-08-14 19:45:54 · 825 阅读 · 0 评论 -
枚举(enum)的用法及代码讲解
上述代码实现了以下逻辑:1. **识别经济区**: 通过检查收件省份和发件省份是否都属于同一个经济区,来确定它们是否在同一区域内互寄。2. **查询运费模板**: 如果找到了匹配的经济区,就根据运费模板类型、运输类型,以及关联的城市信息,查询是否存在对应的运费模板。通过这种方式,系统可以确保在处理运费计算时,考虑到经济区之间的互寄场景,选择正确的运费模板来处理运费的计算和应用。原创 2024-08-14 16:52:59 · 1092 阅读 · 0 评论