- 博客(69)
- 收藏
- 关注
原创 软件测试笔记(上)
软件测试就是查找软件中的缺陷,日常生活中的各样的软件都会出现不同的缺陷,比如页面打不开、500 错误、白屏、崩溃、闪退等等。这些缺陷小到影响用户体验感,比如刷新页面三秒钟后才出现数据,体验感知非常不好;中到影响功能不能使用,比如软件某一个功能点击完后没反应或直接报错;大到影响财产和生命,像之前某电商出现过薅羊毛事件,一晚上损失几百万,还有波音 737 飞机起飞几秒钟后掉落,最后查明原因是因为软件传感器数据有误,导致机毁人亡的悲剧。
2025-04-10 00:24:25
565
原创 附近商铺/用户签到/UV统计
附近商户即基于地理坐标进行搜索。支持这种地理坐标搜索的技术有很多,而Redis就是其中之一。接下来学习如何基于Redis来实现这种地理坐标的搜索功能。本章内容会分成两个小节来学习。第一节:了解一下Redis中Geo数据的结构及其基本用法。第二节:实现业务当中的商户搜索功能。
2025-03-12 02:11:51
991
原创 达人探店/好友关注
当我们点击“关注”选项卡时,这个功能还不能实现,因为相关的请求接口还没有做。但在实现该接口之前,我们会先回顾一下sortedset(有序集合)的一些相关命令。因为我们将要实现的是滚动分页,滚动分页实现起来相对复杂,命令也比较繁琐。提前准备一个sortedset集合,里面有六个元素,它们对应的分数分别是1到6,名称也恰好是1到6,这样方便我们观察规律。这里的分数可以当成是时间戳,时间戳越大的数据就越新,排名也就越靠前。
2025-03-10 03:51:38
1012
原创 Redis优化秒杀
接下来继续优化秒杀业务,进一步提高它的性能。先回顾一下秒杀的业务流程:seckillVoucher()执行秒杀业务,它能接收一个Long voucherId,即当前用户正在抢购的优惠券的ID。因为是秒杀业务,所以需要加入一些业务限制。首先,库存绝对不能出现超卖现象,必须判断库存是否充足;其次,还要限制一个用户对于一个优惠券只能下一单,即一人一单的功能。要想判断优惠券的库存,得先查询优惠券,即需要访问数据库。查到优惠券以后,判断秒杀的时间,再判断库存是否充足。如果不足,直接报错,避免超卖。
2025-03-05 01:37:20
929
原创 优惠券秒杀&分布式锁
接下来,我们学习如何实现优惠券的秒杀下单功能。在黑马点评的网站里,商品就是优惠券或者代金券。这些券分为两种:一种是平价券,折扣较小,可以大量发放,随意购买;另一种是特价券,折扣较大,有库存限制,需要大家去抢购,先到先得,并且还有时间的限制。普通券不需要秒杀,但特价券需要。tb_voucher表存储的是普通的代金券信息,包括券的基本信息和使用规则等;th_seckill_voucher表则存储秒杀券的额外信息,如库存、创建时间、更新时间、生效时间和失效时间等。
2025-03-01 17:44:18
727
原创 短信登陆&商户查询缓存
本章我们学习了认识缓存、然后是如何添加缓存以及缓存使用中可能会出现的各种问题。在认识缓存方面,我们主要讲了三点:然后在项目中为代码添加redis缓存,在添加过程中发现了许多问题,例如缓存更新,有三种策略可供选择:具体使用哪种策略要根据业务场景而定,低一致性需求使用内存淘汰或过期淘汰。高一致性需求则以主动更新为主,并以过期淘汰作为兜底方案。
2025-02-19 05:02:33
939
原创 Redis基础
设置完值后在图形工具中我们可以看到,原本的值却成了"乱码",这是因为系统会使用默认的序列化器。RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,这样会导致可读性差、内存占用较大等缺点。如果使用语句setKeySerializer(new StringRedisSerializer());
2025-02-11 03:16:08
1024
原创 黑马 Linux零基础快速入门到精通 笔记
提及操作系统,我们可能最先想到的是windows和mac,这两者都属于个人桌面操作系统领域,而Linux则属于服务器操作系统领域。无论是后端软件、大数据系统、网页服务等等都需要运行在Linux操作系统上。Linux是一个开源的操作系统,广泛应用于服务器、桌面、嵌入式系统等多个领域。Linux是一种类UNIX的操作系统,由芬兰人Linus Torvalds于1991年首次发布。它是开源的,意味着源代码可以被任何人自由地使用、修改和分发。Linux系统由Linux系统内核、系统级应用程序两部分组成。
2025-02-08 23:16:08
1383
1
原创 苍穹外卖——数据统计
在商家管理端的左侧,有一个名为"数据统计"的菜单,该页面负责展示各个维度的数据统计,分别是营业额统计、用户统计、订单统计、销量排名top10。统计的数据是借助一些图形化的报表技术来生成并展示的。在左上角还可选择时间段,如昨日、近7日等等。在实现这些功能之前,我们需要先了解前端技术Apache ECharts,上文的图形报表就是基于该技术实现的。但因为我们侧重于后端开发,因对于前端技术Apache ECharts我们简单了解即可。
2025-01-28 05:07:22
848
原创 定时任务Spring Task&双向数据传输WebSocket
之前的代码已完成基础功能,但仍有一些逻辑未完善:定时任务: 可使用Sping框架提供的工具Spring Task来定时处理一些任务。弹窗任务: 可以通过WebSocket协议来实现客户端浏览器和服务器之间进行双向的数据传输。 Spring Task是Spring框架提供的一个任务调度工具,可以按照约定的时间自动执行某个代码逻辑,属于定时任务框架。 其作用类似于手机上的闹钟,即定时自动执行指定的java代码。 指定代码要在哪个时间点触发可以通过cron表
2025-01-27 02:43:40
1242
原创 苍穹外卖—订单模块
本项目采用微信支付,但因为小程序的支付功能必须是商户注册才能开通,如果在注册小程序时使用的是个人注册是无法实现该功能的,因此我们只学习实现流程,但并不真正的实现支付功能。接入微信支付共需三步:一、提交资料在线提交营业执照、身份证、银行账户等基本信息,并按指引完成账户验证二、签署协议微信支付团队会在1-2个工作日内完成审核,审核通过后请在线签约,即可体验各项产品能力三、绑定场景如需自行开发完成收款,需将商户号与APPID进行绑定,或开通微信收款商业版(免开发)完成收款。
2025-01-23 02:24:20
796
原创 缓存商品&购物车
上篇文章我们实现了展示菜品数据、口味数据、套餐数据、套餐内菜品数据,因为这些数据都存储在服务器的数据库之中,如果短时间内有大量的用户进行点餐操作,系统就会频繁的与数据库进行交互,数据库的访问压力随之增大,小程序端可能要等待一段时间才能获取各项信息,用户体验较差。Redis便可解决这一系列问题,将访问的压力从MySQL一个数据库分散到Redis和MySQL两个数据库上。
2025-01-19 00:37:26
825
原创 微信登录&商品浏览
小程序包含一个描述整体程序的app和多个描述各自页面的page。文件必需作用app.js是小程序逻辑app.json是小程序公共配置app.wxss否小程序公共样式表文件类型必需作用js是页面逻辑wxml是页面结构json否页面配置wxss否页面样式表我们可通过修改index的index.wxml文件来改变模拟器显示的内容,其代码编写方式和html类似,而<view>相当于<div>标签。
2025-01-17 00:17:37
1037
原创 Redis快速入门&店铺营业状态设置
Redis是一种基于内存的键值对(K-V)数据库。这意味着它与MySQL数据库类似,都能够用于存储数据,但两者又有着本质的区别。首先两者存储数据的结构不一样,Redis通过键(key)和值(value)的映射来存储信息,其中键是唯一的标识,而值可以是灵活多样的数据结构,如字符串、列表、集合等。MySQL则采用二维表的结构来组织数据,这种结构更适合复杂的关系型数据存储。其次两者的存储介质不同,Redis将其数据存储在内存中,这种内存存储机制使得Redis在数据读写操作上远超基于磁盘存储的MySQL。
2025-01-14 13:15:22
497
原创 java反射
反射允许对封装类的字段,方法和构造函数的信息进行编程访问。在我们编程时,系统会给出相应的提示,写方法参时,也可以crtl+p来调出形参类型提示,这些功能都是基于反射实现的。同样我们也可以利用反射获取类里面的所有信息,其可以获取类的字段、构造方法、成员方法,同时还可以解剖出其修饰符、名字、返回类型、注解等等。注意获取内容时其并非通过java文件来获取,而是从class字节码文件中获取,因此我们先来学习如何获取class字节码的对象,再来学习如何从字节码文件中获取所需信息。
2025-01-09 06:45:14
920
原创 苍穹外卖——菜品/套餐管理
在我们的业务表中,有很多相同的字段,如创建人、创建时间、修改人、修改时间等等字段,大多数业务都需对这些字段进行赋值,这就会造成大量重复的代码。create_time、create_user两字段需要在insert方法中使用,update_user、update_time两字段需要在insert、update方法中使用。做好分类后我们就可以借助切面来统一进行处理。一、自定义注解@AutoFill,用于标识需要进行公共字段填充的方法。
2025-01-09 06:40:46
994
原创 苍穹外卖——员工&分类管理
本篇内容包含员工管理和分类管理,但因为两管理模块大体相同,都属于对单表的增删改查,所以我们只对员工管理模块进行详细介绍。
2024-12-28 19:23:50
646
原创 苍穹外卖——准备工作
(Message Digest Algorithm 5)是一种广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值(hash value),通常用一个32位的十六进制数字表示。MD5被设计用来确保数据的完整性,在数字签名领域中,它可以用来验证传输的文件是否被修改。其是不可逆的,也就是说只能从明文加密成密文,不能从密文得出原来的明文。
2024-12-25 21:11:46
1193
原创 Mybatis-Plus
尽管条件构造器功能强大,但在某些复杂场景下,你可能需要编写自定义 SQL 来实现特定的查询逻辑。我们可以利用MB的Wrapper来构建复杂的Where语句,然后自己定义SQL语句中剩下的部分。以例子"将id为1,2,4的工资增加200"为例,我们在其基础上实现自定义SQL。利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。一、基于Wrapper构建where条件//1.构建条件//2.自定义SQL方法调用。
2024-12-23 04:17:53
881
原创 (自用)配置文件优先级、SpringBoot原理、Maven私服
在实际的开发中,我们可能会用到很多第三方技术,并不是所有第三方技术都提供了与springboot整合start起步依赖。我们可以定义一些公共组件,并将其封装为SpringBoot的starter。starter包实现依赖管理功能,而autoconfigure实现自动配置功能。在项目中进行功能开发只需引入对应的起步依赖即可。
2024-12-18 20:59:01
1011
原创 员工管理系统-进阶功能
上篇文章中我们已经完成了部门管理和员工管理的基础功能的开发,我们可以通过url直接访问该系统并操作数据,但这样任何人都能操作该系统,数据极不安全,我们可以通过添加登录功能来限制访问。同时因为username字段存在unique约束使其不可重复,因此不会存在查询出多个数据的情况, 查询的结果只能为1或0。要求路径为/login,请求方式为post,该接口用于登录系统,登录完毕后,系统下发JWT令牌(稍后介绍)。
2024-12-13 16:55:28
750
原创 Mybatis-动态SQL
动态 SQL 允许在运行时根据需要构建 SQL 语句。动态 SQL 可以极大地简化代码,并减少因拼接 SQL 字符串而产生的错误。MyBatis 提供了几种标签来实现动态 SQL,包括、、、、、、 等。
2024-11-29 01:35:15
743
原创 Mybatis-入门
MyBatis是一款优秀的持久层(Dao层)框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 几乎免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis本是apache的一个开源项目iBATIS,2010年,iBATIS项目由apache software foundation迁移到了google code,并且改名为MyBatis,2013年11月,MyBatis迁移到Github。MyBatis中文网。
2024-11-26 01:13:28
467
原创 后端分层解耦
控制反转(IOC)意为对象的创建和绑定由外部容器或框架来管理,而不是由应用程序的代码直接控制。使对象实例成为IOC容器中的bean。依赖注入(DI)是一种实现控制反转的方式,它将依赖关系注入到组件中,而不是由组件自己创建依赖关系。运行时,IOC容器会提供该类型的bean对象并赋值。@Component//实现控制反转@Autowired//实现依赖注入//之前的代码private StuDao stuDao=new stu1();//相关方法如果不需要使用该层,只需将该层的注解注释掉即可。
2024-11-17 01:39:24
1251
原创 前后端请求响应
在之前的例子中,我们编写了一个简单的web类,我们运行启动类,启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。但之前编写的程序仅仅是个简单的java类,其并未实现某个接口或继承某个类,因此tomcat并不会识别该程序,也不能够直接运行。
2024-11-16 00:53:19
943
原创 Web入门
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议。主要用于在Web浏览器和服务器之间传输数据。基于TCP协议:面向连接,确保了数据传输的可靠性和顺序。基于请求-响应模型:一次请求对应一次响应,简化了交互逻辑。是无状态的协议:即不保存用户会话信息,传输效率高,但多次请求之间无法共享数据。创建完项目后,我们可以看到系统已将tomcat放入依赖项之中。
2024-11-14 00:40:20
1154
原创 Maven
Maven是一个强大的项目管理和构建自动化工具,主要用于Java项目。它由Apache软件基金会开发,旨在简化构建过程、依赖管理和项目信息管理。:Maven可以帮助你管理项目依赖的第三方库。通过在POM(project object model)文件中声明依赖,Maven会自动下载并引入这些依赖,避免了版本冲突问题、手动管理的麻烦。如果手动下载jar包并导入,不仅面临下载麻烦,更新版本、替换jar包时还需要更换大量资源,费时费力。
2024-11-06 00:23:40
897
原创 Element
Element 是由饿了么前端团队开发的一个基于 Vue 2.0 的桌面端组件库,它提供了一系列高质量的Vue组件,帮助开发者快速构建功能丰富、风格统一的前端界面。
2024-10-31 03:55:00
1392
原创 Ajax笔记
Ajax是一种网页开发技术,全称是AJavaScriptandXML(异步JavaScript和XML)。与异步交互相对:同步交互同步交互:访问客户端——请求服务器——服务器处理(客服端等待)——服务器响应(客服端加载)——客户端继续访问我们访问链接,加载图片、视频都属于同步交互,而异步交互则可在不中断客服端操作的情况下与服务器交换数据。
2024-10-24 00:50:35
706
原创 Vue框架
Vue.js(通常简称为Vue)是一个用于构建用户界面的开源JavaScript框架,可以免除原生JavaScript中的DOM操作,简化书写。其基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。
2024-10-21 03:16:33
1227
原创 javaScript
JavaScript是一种解释型语言,主要在浏览器中运行。它可以用来创建动态的网页效果,处理用户输入,以及与服务器进行通信。
2024-10-19 15:26:56
714
原创 HTML基础知识
HTML(HyperText Markup Language,超文本标记语言)是一种用于创建网页的标准标记语言。它描述了一个网站的结构骨架,使得浏览器能够展示具有特定格式的文本、链接、图片和其他内容。
2024-10-15 21:18:29
1404
原创 java绘图
在正式绘图前,我们还需进行一系列操作来为绘图提供条件1、创建一个类继承自JPanel类,这相当于创建了一个画板2、在该类中重写父类的构造方法paint,并使用Graphics对象来进行绘图。Graphics类提供了绘制基本形状、文本和图像的方法。该方法无需显式的调用,以下几种情况,系统会自动调用该方法:1、首次运行程序时,系统会调用该方法绘制界面2、窗口最小化后再最大化时3、窗口的大小发生变化时4、repaint函数被调用之后我们绘制各种图形都可以在该类中执行。
2024-10-12 08:49:26
1554
原创 java泛型
泛型又称参数化类型,它提供了编译时类型安全检查的机制,允许在编码时指定集合中对象的类型,这样可以在编译时提供更强的类型检查,可以让我们写出更加通用、可复用的代码,同时减少类型转换以及运行时错误,并提高代码的可读性和重用性。类、接口、方法都可使用泛型,具体表现为在在类/接口后添加<E>,原本为数据类型的地方也替换为E,而E所代表的数据类型根据创建的实例而确定,代表在该区域相应的位置处,只能使用该数据类型。myMap.put("万叶",new student(18,"万叶"));
2024-10-08 22:42:39
719
原创 集合练习题
HashSet去重机制:hashCode() + equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置没有数据就直接存放,如果有则精选equals比较,比较后不相同则加入,否则不加入。TreeSet去重机制:如果传入Comparator匿名对象,就使用实现的compare去重,如果方法返回0,则认为是相同的元素不添加,如果未传入Comparator匿名对象,则以你添加的对象实现的Comparable接口的comparaTo去重。
2024-09-29 03:07:00
627
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人