- 博客(25)
- 收藏
- 关注
原创 黑马商城day11-微服务面试
TCC模式的每个阶段是做什么的?Try:资源检查和预留Confirm:业务执行和提交Cancel:预留资源的释放TCC的优点是什么?一阶段完成直接提交事务,释放数据库资源,性能好相比AT模型,无需生成快照,无需使用全局锁,性能最强不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库TCC的缺点是什么?有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦软状态,事务是最终一致需要考虑Confirm和Cancel的失败情况,做好幂等处理、事务悬挂和空回滚处理。
2025-12-03 20:26:11
881
原创 黑马商城day10-Redis面试篇
Sentinel的三个作用是什么?集群监控故障恢复状态通知Sentinel如何判断一个redis实例是否健康?每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线(sdown如果大多数sentinel都认为实例主观下线,则判定服务客观下线(odown故障转移步骤有哪些?首先要在sentinel中选出一个leader,由leader执行failover选定一个slave作为新的master,执行,切换到master模式然后让所有节点都执行slaveof新master。
2025-12-02 21:29:42
755
原创 黑马商城day9-ES02
match和multi_match的区别是什么?match:根据一个字段查询multi_match:根据多个字段查询,参与查询字段越多,查询性能越差精确查询常见的有哪些?term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段range查询:根据数值范围查询,可以是数值、日期的范围query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件文档搜索的基本步骤是:创建对象准备,也就是DSL。来构建查询条件传入的。
2025-11-03 21:46:01
825
原创 黑马商城day8-ES01
文档操作有哪些?POST /{索引库名}/_doc/文档id { json文档 }GET /{索引库名}/_doc/文档idDELETE /{索引库名}/_doc/文档id修改文档:PUT /{索引库名}/_doc/文档id { json文档 }/文档id { "doc": {字段}}创建XxxIndexRequest。XXX是Create、Get、Delete准备请求参数( Create时需要) 发送请求。
2025-10-31 21:30:54
777
原创 黑马商城day7-消息可靠性
如何保证支付服务与交易服务之间的订单状态一致性?首先,支付服务会正在用户支付成功以后利用MQ消息异步通知交易服务,完成订单状态同步。其次,为了保证MQ消息的可靠性,我们采用了生产者确认机制、消费者确认、消费者失败重试等策略,确保消息投递和处理的可靠性。同时也开启了MQ的持久化,避免因服务宕机导致消息丢失。最后,我们还在交易服务更新订单状态时做了业务幂等判断,避免因消息重复消费导致订单状态异常。如果交易服务消息处理失败,有没有什么兜底方案?我们可以在交易服务设置定时任务,定期查询订单支付状态。
2025-10-29 20:42:12
1047
原创 黑马商城day6-RabbitMQ入门
本文介绍了微服务架构中同步与异步通信的实现方式,重点讲解了RabbitMQ消息队列的应用。主要内容包括: 同步调用与异步调用的对比:同步调用时效性强但存在耦合度高、性能下降等问题;异步调用通过消息代理解耦服务,提高性能和可扩展性。 RabbitMQ的核心概念:包括生产者、消费者、队列、交换机和虚拟主机等组件,以及四种交换机类型(Fanout、Direct、Topic、Headers)的特点和使用场景。 Spring AMQP的使用:通过RabbitTemplate发送消息,利用@RabbitListener
2025-10-26 21:35:24
951
原创 黑马商城day5-服务保护和分布式事务
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。将jar包放在任意非中文、不包含特殊字符的目录下,重命名为。
2025-10-22 22:53:23
733
原创 黑马商城day4-微服务02
Component//继承Ordered是为了对filter进行排序,ordered越小filter越先执行@Override//todo 模拟登录校验逻辑//放行@Overridereturn 0;到目前为止我们已经解决了微服务相关的几个问题:微服务远程调用微服务注册、发现微服务请求路由、负载均衡微服务登录用户信息传递不过,现在依然还有几个问题需要解决:网关路由在配置文件中写死了,如果变更必须重启微服务某些业务配置在配置文件中写死了,每次修改都要重启服务。
2025-10-21 20:37:58
984
原创 黑马商城day3-微服务01
什么时候需要拆分微服务?如果是创业型公司,最好先用单体架构快速迭代开发,验证市场运作模型,快速试错。当业务跑通以后,随着业务规模扩大、人员规模增加,再考虑拆分微服务。如果是大型企业,有充足的资源,可以在项目开始之初就搭建微服务架构。如何拆分?首先要做到高内聚、低耦合从拆分方式来说,有横向拆分和纵向拆分两种。纵向就是按照业务功能模块,横向则是拆分通用性业务,提高复用性服务拆分之后,不可避免的会出现跨微服务的业务,此时微服务之间就需要进行远程调用。微服务之间的远程调用被称为RPC,即远程过程调用。
2025-10-15 22:24:47
789
原创 黑马商城day2-Docker
Docker是做什么的?Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用什么是镜像?将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像什么是容器?为每个镜像的应用进程创建的隔离运行环境就是容器数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。html:放置一些静态资源conf:放置配置文件如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的。
2025-10-14 11:19:08
646
3
原创 黑马商城day1-MyBatis-Plus
引入起步依赖自定义Mapper继承BaseMapper<泛型>在实体类上添加注解声明 数据库表信息在application.yml中根据需要添加配置直接使用Wrapper存在问题:在Service层编写sql语句,这不符合开发规范。以上两个案例都存在,如果完全使用Wrapper不可避免在Service层编写sql语句。为了解决这一问题,我们可以通过 自定义sql语句前半部分,后半部分where条件通过Wrapper定义,来实现。
2025-10-12 19:03:52
1102
原创 苍穹外卖 day12-POI
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。银行网银系统导出交易明细各种业务系统导出Excel报表批量导入业务数据。
2025-09-28 20:46:26
648
原创 苍穹外卖day11-StringUtils、Java 8 Stream API、LocalDateTime.of、group by
使用Echarts,重点在于研究当前图表所需的数据格式。通常是需要后端提供符合格式要求的动态数据,然后响应给前端来展示图表。Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。1). 柱形图2). 饼形图3). 折线图不管是哪种形式的图形,最本质的东西实际上是数据,它其实是对数据的一种可视化展示。
2025-09-28 14:09:10
1023
原创 苍穹外卖 day10-Spring Task、WebSocket
是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。定时任务框架定时自动执行某段Java代码1). 信用卡每月还款提醒2). 银行贷款每月还款提醒3). 火车票售票系统处理未支付订单4). 入职纪念日为用户发送通知只要是需要定时处理的场景都可以使用Spring TaskWebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。HTTP是短连接。
2025-09-26 16:33:31
828
原创 苍穹外卖 day9-引入百度地图API
产品原型:业务规则分页查询历史订单可以根据订单状态查询展示订单数据时,需要展示的数据包括:下单时间、订单状态、订单金额、订单明细(商品名称、图片)
2025-09-25 21:32:46
1044
原创 苍穹外卖 day8-微信小程序订单支付流程
其中前三步,我们已经实现。后续关键步骤为第5步和第10步微信支付相关接口:商户系统调用该接口在微信支付服务后台生成预支付交易单(对应时序图的第5步)通过JSAPI下单接口获取到发起支付的必要参数prepay_id,然后使用微信支付提供的小程序方法调起小程序支付(对应时序图的第10步)
2025-09-21 22:02:27
650
原创 苍穹外卖 day7-Spring Cache
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:EHCacheCaffeineRedis(常用)前者用来引入SpringCache,后者用来声明使用的是redis,如果想使用其他缓存数据库,引入对应缓存的java客户端即可。
2025-09-20 15:59:54
716
原创 苍穹外卖day6-HttpClient基本使用、微信小程序联调
发送HTTP请求接收响应数据HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。为什么要在Java程序中发送Http请求?有哪些应用场景呢?当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时。
2025-09-18 19:30:09
852
原创 苍穹外卖 day5-Redis基本操作
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。导入Spring Data Redis的maven坐标配置Redis数据源编写配置类,创建RedisTemplate对象通过RedisTemplate对象操作Redis。
2025-09-12 21:45:50
675
原创 苍穹外卖day3
该自定义注解是为了标识切入点。当某个方法上存在该注解时,执行切面类,再通过该注解的value值获取这是一个INSERT方法/UPDATE方法,从而为4/2个字段赋值。因为是只能用在方法上的注解,所以要对元注解进行规定。同时创建OperationType枚举类,该枚举类只有INSERT和UPDATE两个枚举项。将来在方法上使用注解,定义value值时必须使用OperationType.INSERT/OperationType.UPDATE,而不是一个String字符串,使用了枚举类的安全特性。
2025-09-08 12:27:14
795
原创 枚举、动态代理、反射、枚举
枚举是 Java 中处理固定常量集合的最佳实践,它将数据与行为封装在一起,提供类型安全和编译时检查,减少运行时错误,并提升代码的可维护性。当需要表示一组有限且固定的值时(如状态、选项、配置等),优先使用枚举而非普通常量。拦截方法调用:你可以在目标对象的方法执行前后添加额外的逻辑,比如日志记录、事务管理等。实现 AOP(面向切面编程):通过代理可以将一些通用的功能(如权限校验、性能监控)从业务逻辑中分离出来,提高代码的可维护性和复用性。为什么要使用动态代理?
2025-08-11 02:03:07
739
原创 事务管理+AOP
使用@Transactional开启事务(一般添加在方法上,类、接口也可以)异常回滚的属性:rollbackFor;默认异常回滚属性为“运行时异常”,使用rollbackFor可以指定异常回滚类型。使用格式:@Transactional(rollbackFor=Exception.class)事务传播行为:propagation;默认事务方法A调用事务方法B,出现回滚时两个方法执行的内容都要回滚;如果希望事务方法A和事务方法B作为两个独立的方法(一方出现异常回滚不能影响另一方。
2025-07-25 17:17:33
1049
原创 苍穹外卖day2
ThreadLocal 并不是一个Thread,而是Thread的局部变量。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。
2025-07-23 18:58:44
826
原创 苍穹外卖day1
本项目中在构建系统管理后台的前端页面,我们会用到H5、Vue.js、ElementUI、apache echarts(展示图表)等技术。而在构建移动端应用时,我们会使用到微信小程序。Nginx是一个服务器,主要用来作为Http服务器,部署静态资源,访问性能高。在Nginx中还有两个比较重要的作用: 反向代理和负载均衡, 在进行项目部署时,要实现Tomcat的负载均衡,就可以通过Nginx来实现。
2025-07-20 22:17:00
876
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅