JS
1.JS基础命令和变量: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JSTest</title> </head> <body> <script> // 1.弹出警告框 window.alert("JS"); // 2.在前端页面显示 document.write("JS"); // 3.在控制台输出 console.log("JS") //var定义变量 var a=18; a="xiangxiang"; alert(a); //特点1:作用域很大,定义的是全局变量 //特点2:可以重复定义,后面的会覆盖前面的 { var...
锁
1.乐观锁与悲观锁; 悲观锁:认为线程安全问题一定发生, 核心:先取锁,再访问。我认为数据冲突是大概率事件,所以先锁住,确保安全 优点: 简单粗暴:实现简单,保证了数据的强一致性。 安全:在竞争激烈、冲突概率高的场景下,可以避免大量的重试开销。 缺点: 性能开销大:加锁和释放锁的操作需要消耗资源。 并发度低:一个事务持有锁期间,其他所有需要该锁的事务都必须等待,降低了系统的吞吐量。 死锁风险:多个事务相互等待对方持有的锁,可能导致死锁。 ---- 乐观锁:认为线程安全不一定发生, 核心:先访问,再提交时检查。我认为数据冲突是小概率事件,所以直接操作,在提交更新时才检查这期间有没有人动过。 优点 性能高,并发度高:在没有冲突的情况下,省去了加锁、解锁的开销,大大提升了系统吞吐量。 无死锁风险:因为根本不加锁。 缺点 存在失败风险:如果冲突频繁,会导致大量事务更新失败,不断重试,反而降低性能。 ABA问题:这是CAS的一个典型问题。一个值从A变成了B,然后又变回了A。CAS检查时会认为它没有变化,实际上是变化过的。通常通过添加时间戳或递增版本来解决。
缓存
1. 什么是缓存穿透? 缓存穿透 是指查询一个在数据库和缓存中都不存在的数据。由于缓存无法命中(Miss),这个请求会直接穿透缓存,直达数据库。如果有大量这样的请求同时发生,数据库将不堪重负,甚至可能被压垮。 核心问题: 查询的是一个系统内根本不存在的数据。 ------ 解决方法: 方案一:缓存空对象(Null Object Caching / 缓存默认值) 这是最常用、最直接的解决方案。 思路:当从数据库查询不到数据时,我们仍然将这个“空结果”(例如 null)进行缓存,并为其设置一个较短的过期时间(比如 1-5 分钟)。 流程: 请求查询 Key。 缓存未命中。 查询数据库,发现数据不存在。 将 Key 和一个表示“空”的特殊值(如 "NULL")写入缓存,并设置过期时间。 后续再有相同 Key...
黑马电评问题
1.黑马点评商户信息缓存功能实现后.使用逻辑过期方法时,发现商户id存在,但是显示shop=null;原因是没有缓存预热,把商户信息存储到缓存中; 2.添加秒杀券时,数据库添加上了数据,但是前端不显示,因为前端有代码判断,如果结束时间大于系统当前时间,就不显示; 3.事务和锁同时作用于一个方法时,要先完成事务,在释放锁,让其他线程开始运作; //所以锁要在事务外面; 4.动态代理负责维护事务的生命周期,包括事务的开启,提交,回滚; AopContext.currentProxy();//获取当前的代理对象 使用这个方法要带入这个依赖 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency> 在启动类上加上@EnableAspectJAutoProxy(exposeProxy = true)注解...
HTML中的表单标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>This is all form</title> </head> <body> <form action="" method="post"> username:<input type="text" name="username"> <br><br> password:<input type="password" name="password"> <br><br> age:<input type="number"...
事务的性质
事务(Transaction)是数据库管理系统(DBMS)中一个非常重要的概念,用来保证数据操作的可靠性和一致性。事务具有以下四个基本性质,简称为 ACID: 🧩 1. 原子性(Atomicity) 含义: 事务是一个不可分割的最小执行单位,要么全部执行成功,要么全部失败回滚。 举例: 在银行转账中,A 向 B 转账 100 元: A 账户扣 100 元 B 账户加 100 元 这两个操作必须作为一个整体执行。如果在执行过程中出错(例如系统宕机),事务会回滚到最初状态,保证不会出现“钱从 A 扣了但没到 B”的情况。 🧮 2. 一致性(Consistency) 含义: 事务执行前后,数据库都必须保持一致状态。也就是说,事务不能破坏数据的完整性约束。 举例: 转账前后,A 和 B 的账户总额应该相同(假设没有别的操作),即: 转账前:A + B = 2000 转账后:A + B = 2000 无论事务成功或失败,数据的完整性规则都不能被破坏。 🔒 3....
redis
1.jedis: redis的java客户端; 快速入门使用: 1.导入依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.9.0</version> </dependency> 测试的话可以导入junit依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> ...
拦截器(interceptor)
1. 配置拦截器: /** * 登录拦截器 */ @Component @Slf4j public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //1.获取session HttpSession session = request.getSession(); //2.获取session中的用户 User user = (User) session.getAttribute("user"); //3.判断用户是否存在 //4.不存在,拦截 if(user == null){ ...
springboot注解
@Resource 是 Java 标准注解(JSR-250),用于依赖注入。它的主要作用是从 Spring 容器中自动查找并注入所需的 Bean @TableField 是 MyBatis-Plus 框架中的一个注解,用于标注实体类的属性与数据库表字段的映射关系 @PostConstruct 是一个 Java 注解,它用来标记一个方法,该方法需要在依赖注入完成之后,对象正式投入使用之前,自动执行一次。它通常用于执行初始化逻辑。 @RequestParam(value = "y",required = false) Double y, @RequestParam注解中添加required标签表示这个参数可以不传,可以为空
html练习2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>王者荣耀</title> <style> #time{ color: chartreuse; } #center{ weight: 60%; margin: 0% 30% 0% 30%; /*上右下左*/ /*或者属性值为0 auto; 0表示上下为0,auto表示系统自动计算左右边距*/ } .mid{ text-align: center; } </style> </head> <body> <h1 id="time">王者荣耀:英雄构造器(Honor of...