Java学习
文章平均质量分 62
47roroya
这个作者很懒,什么都没留下…
展开
-
【学习笔记】seckill-秒杀项目--(11)项目总结
秒杀项目总结项目推荐原创 2022-06-13 21:59:31 · 376 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(10)安全优化
引言当我们秒杀开始时,不会直接调秒杀接口,而是获取真正秒杀接口的地址,根据每个用户秒杀的不同商品是不一样的。这样可以避免有些人提前通过脚本准备好固定地址进行秒杀。这种方式的缺点是有可能能提前获取到秒杀接口地址,这种时候可以再进行一次验证码的防护。如果没有验证码的话,一秒内可能有很多请求,加上验证码可以延迟请求的时间,服务器承受的压力就没有那么大。为了减少并发量,还可以进行一次接口的限流。一、秒杀接口地址隐藏针对不同用户秒杀不同商品,设计秒杀接口地址不同。1.1 控制层修改/** * 秒杀 *原创 2022-05-13 20:45:11 · 836 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(9)接口优化
一、redis通过redis预减库存,来减少数据库访问。可以在初始化阶段,将商品库存加入到redis中。后续直接在redis中进行预减库存操作。后续的下单可以先返回给客户端提示信息,同时将请求发送到消息队列,来实现订单的创建等操作,实现异步操作。客户端的页面使用轮询来判断订单是否创建成功。二、内存标记通过内存标记减少redis访问。三、消息队列请求进入消息队列,实现异步下单。3.1 RabbitMQ安装首先将erlang以及RabbitMQ安装包传到虚拟机中,注意两个版本需要对应。执行原创 2022-05-12 16:22:57 · 510 阅读 · 0 评论 -
【RabbitMQ】消息传递模型
生产者是发送消息的用户程序。队列是存储消息的缓冲区。使用者是接收消息的用户应用程序。RabbitMQ消息传递模型的核心思想是生产者从不直接向队列发送任何消息。实际上,很多时候生产者甚至根本不知道消息是否被传递到任何队列。相反,生产者只能向交换器发送消息。交换是一件很简单的事情。它一边接收来自生产者的消息,另一边将消息推送到队列。交换器必须确切的知道如何处理它接收到的消息,比如是附加到一个特定的队列还是多个队列或者被丢弃。它的规则由交换类型定义。交换类型:direct 直连,topic 主题, head.原创 2022-05-12 13:58:54 · 657 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(8)页面优化
页面缓存、对象缓存、压力测试、商品详情页面静态化、秒杀静态化、订单详情静态化。原创 2022-05-05 15:39:58 · 692 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(7)压力测试
一、JMeter简单使用添加线程组,在线程组里设置要测试的线程数等。在线程组里添加HTTP请求默认值(设置请求ip端口号等)、HTTP请求(测试哪个页面)、需要查看的结果等。在聚合报告里可以看到设置1000个线程的情况下吞吐量大概为190.(windows环境)二、虚拟机环境压力测试首先在虚拟机服务器中安装JDK以及MySQL。把项目打包,JMeter打包,发布到虚拟机中。在linux中执行./jmeter.sh -n -t first.jmx -l result.jtl进行压力测试,把结果原创 2022-05-03 16:01:44 · 1867 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(6)秒杀功能
一、秒杀倒计时1.1 跳转逻辑在跳转到详情页面的时候,对比秒杀开始时间、结束时间与当前时间。在model中传入秒杀状态与倒计时时间。在前端页面根据秒杀状态与倒计时的状态进行不同的显示。/** * 跳转商品详情页 * @author 47roro * @date 2022/4/15 * @param goodsId * @return java.lang.String **/@RequestMapping("/toDetail/{goodsId}")public String toDe原创 2022-04-16 18:17:24 · 619 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(5)实现商品列表页、详情页
一、创建表单1、创建表准备商品表、订单表、秒杀商品表、秒杀订单表。(设计较为简单,重点在秒杀,不在设计表。)商品表:create table `t_goods`( `id` BIGINT(20) not null AUTO_INCREMENT COMMENT '商品id', `goods_name` VARCHAR(16) DEFAULT NULL COMMENT '商品名称', `goods_title` VARCHAR(64) DEFAULT NULL COMMENT '商品标题',原创 2022-04-15 22:17:54 · 475 阅读 · 0 评论 -
【问题解决】seckill-秒杀项目 -- 服务端异常
问题描述:在登录页面输入账号密码都正确的情况下,显示服务端异常。但是打开页面调试窗口发现doLogin状态码是200。显示的是event handler error。检查发现redis已经开启,防火墙也没问题。后来找到是GoodsMapper.xml文件里代码写错了。select语句里的resultType写成了resultMap。导致无法读取到商品列表。跳转页面失败。错误代码:<!-- 获取商品列表 --><select id="findGoodsVo" resultMap=原创 2022-04-15 21:22:48 · 544 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(4)登录功能总结及优化
一、总结一开始使用最简单的从controller 到 service 到数据库。发现参数校验比较麻烦。所以引进了validation依赖。添加了参数校验,可以抛异常,但是无法再页面进行异常状态显示。于是添加了全局异常处理类。如果只是单应用,就没有问题。但后来肯定要做成分布式的,就会遇到分布式session的问题。解决分布式session的问题有两种解决方法:spring session、redis存储用户信息。最后每一个接口都需要做用户校验,比较麻烦。于是加上自定义的参数校验,来定义用户参数原创 2022-04-15 15:22:14 · 841 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(3)分布式Session
分布式Session问题由于Nginx使用默认负载均衡策略(轮询),请求会按照时间顺序逐一发到后端应用。在Tomcat1登录后,用户信息存放在Tomcat1的Session里,后来被分到了Tomcat2上,这时候Tomcat2的Session没有用户信息,所以需要重新登录。解决方案有:Session复制、前端存储、Session粘滞、后端集中存储这些方法。几种方法各有优缺点,需要我们根据实际情况选择。一、使用SprignSession实现1. 添加依赖spring data redis、对象池.原创 2022-04-05 14:45:21 · 1691 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(2)登录功能及完善
一原创 2022-04-05 11:28:00 · 1296 阅读 · 0 评论 -
【学习笔记】seckill-秒杀项目--(1)搭建项目
一、系统方案二、项目搭建1. 引入依赖包括thymeleaf组件、web组件、test组件、MySQL驱动、Mybatis-plus、lombok插件 <dependencies> <!--thymeleaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactI原创 2022-04-03 15:37:56 · 1497 阅读 · 5 评论 -
【IDEA】 控制台中文乱码解决
一、普通工程1、找到idea的安装路径下的bin目录,选择.vmoptions文件2、用记事本打开后,在最后一行添加-Dfile.encoding=UTF-83、打开IntelliJ IDEA>File>Setting>Editor>File Encodings,将Global Encoding、Project Encoding、Default encodeing for properties files这三项都设置成UTF-8。二、web项目1、点击工具栏上的配置服原创 2021-11-25 11:22:08 · 335 阅读 · 0 评论