自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 秒杀系统 防止超卖 防止同一用户多次下单 提高qps

秒杀系统要解决的问题:1、防止超卖2、防止同一用户多次下单2、提高qps秒杀基本步骤:1、判断商品是否不足2、判断同一用户多次下单3、更新库存4、生成订单。

2022-08-10 15:02:57 1346 1

原创 maven 阿里源配置完整 亲测有效

代码】maven 阿里源配置完整 亲测有效。

2022-08-09 11:00:22 1748

原创 spring cloud gateway 修改请求体和响应体 亲测有效

ModifyRequestBodyGlobalFilter是参考官方的ModifyRequestBodyGatewayFilterFactory,可以直接复制,只需在modifyBody方法中实现自定义逻辑。

2022-07-15 11:06:31 4926 4

原创 uni-swipe-action失效?

学习黑马程序员的 uni-shop项目时,下面这段使用了uni-swipe-action,但无效 <!-- 循环渲染购物车中的商品信息 --> <uni-swipe-action> <block v-for="(goods, i) in cart" :key="i"> <uni-swipe-action-item :options="options" @click="swipeItemClickHandler(goods)

2022-05-08 21:03:46 2180 6

原创 el-select的下拉选项的高度、字体设置

给el-option加个class<el-select v-model="productModelSelected" placeholder="产品型号"> <!-- 给el-option加个class--> <el-option class="select_item" v-for="item in productModelList"

2022-04-11 16:56:39 6004 2

原创 后台管理系统 vue+springboot 系列(3)

Video.vue 。视频列表使用了el-card<template> <div style="padding: 10px"> <el-card> <div v-for="item in videos" :key="item.id" style="margin: 10px 0; padding: 10px 0; color: #666; border-bottom: 1px dashed #ccc"> <s

2022-04-06 14:12:55 1453

原创 后台管理系统 vue+springboot 系列(2)

File.vue。文件管理使用了带选择的el-table,自定义el-table-column使用了el-分页<template> <div> <div> <el-input style="width: 200px" placeholder="请输入名称" suffix-icon="el-icon-search" v-model="name"></el-input> <el-button cla

2022-04-05 11:17:52 619

原创 vue-cli学习详细

安装关于旧版本Vue CLI 的包名称由 vue-cli 改成了 @vue/cli。 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vue-cli -g 或 yarn global remove vue-cli 卸载它。Node 版本要求Vue CLI 4.x 需要 Node.js v8.9 或更高版本 (推荐 v10 以上)。你可以使用 n,nvm 或 nvm-windows 在同一台电脑中管理多个 Node 版本。创建一个项目

2022-04-03 21:32:28 101

原创 html学习

标签 描述<html> 定义 HTML 文档<body> 定义文档的主体<h1> - <h6> 定义 HTML 标题<hr> 定义水平线<!--...--> 定义注释浏览器会自动地在段落的前后添加空行。(</p> 是块级元素)标签 描述<p> 定义一个段落<br> 插入单个折行(换行)...

2022-04-02 17:17:25 92

原创 web应用 登录模块

1.验证码2.自动登录3.状态追踪为什么要用验证码防止脚本无限次重复登录,来暴力破解用户密码或者攻击服务器验证码的出现,使得每次登录都有个动态变量需要输入,无法用脚本写死代码自动登录的实现所谓自动登录,指的是当用户登录网站时勾选了自动登录,那么下次再访问网站就不需要输入账号密码直接登录了这说明,账号密码信息是必须保存在用户这边的,因此自动登录都是不安全的!(方便的代价呀)尽管不安全,但是我们也必须要尽力让它安全一点,有以下常用方法:密码加密ip检测,自动登录时检查与上次登录的ip是否

2022-03-29 11:07:48 3986

原创 vue2学习详细

安装直接用 直接用 开发版本生产版本<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>NPM在用 Vue 构建大型应用时推荐使用 NPM 安装[1]。NPM 能很好地和诸如 webpack 或 Browserify 模块打包器配合使用。同时 Vue 也提供配套工具来开发单文件组件。npm install vue命令行工具 (CLI)Vue 提供了一个官方的 CL

2022-03-28 23:39:44 1848

原创 员工管理系统学习

数据库设计表描述r_role_permission角色权限对应表sys_logger系统被访问日志tb_admin管理员表tb_attend员工打卡记录表tb_dept部门表tb_emp员工表tb_permission权限表tb_role角色表tb_salery工资表tb_vacation休假表r_role_permissionidrole_idpermission_id

2022-03-28 18:03:14 522

原创 Spring Security学习 详细

Spring Security 是一个提供身份验证、授权和防止常见攻击的框架。凭借对保护命令式和反应式应用程序的一流支持,它是保护基于 Spring 的应用程序的事实标准。Spring Security 为身份验证提供了全面的支持。身份验证是我们验证试图访问特定资源的人的身份的方式。验证用户的常用方法是要求用户输入用户名和密码。一旦执行了身份验证,我们就知道身份并可以执行授权。密码存储1、直接明文保存,比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,

2022-03-27 23:25:23 1200 2

原创 MyBatis-Spring-Boot-Starter学习

依赖安装2.1、Maven 安装如下:<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version></dependency>2.2、Gradle 安装如下:dependenc

2022-03-27 19:41:00 6620 1

原创 mybatis plus学习简单

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。快速开始1.添加依赖。引入 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、h2 依赖2.在 application.yml 配置文件中添加 H2 数据库datasource的相关配置3.在

2022-03-27 18:39:17 1193

原创 Mybatis学习 详细

Mybatis 是一个持久层框架,它可以自定义sql、存储过程、高级映射。使用它,你可以免去书写jdbc、设置参数、获取结果集的操作。通过简单的xml或注解配置和映射原始类型、接口、Java POJO为数据库中的记录 。Mybatis入门1.添加mybatis依赖2.用SqlSessionFactoryBuilder从xml配置文件或java代码中构建SqlSessionFactory。xml配置文件中包含了mybatis系统的核心设置,获取数据库连接实例的数据源(DataSource),决定事务作用

2022-03-26 19:39:16 1631

原创 mysql MVCC精讲

MVCC(Multi Version Concurrency Control)多版本并发控制InnoDB通过MVCC来实现事务的隔离性,控制事务的并发。MVCC通过版本链实现多版本,可并发读-写、写-读。ReadView的不同生成策略来实现隔离级别。事务对记录的修改会保存在版本链中,多个事务修改后,就有多个版本。在(Read Commited)读已提交、Repeatable Read可重复读隔离级别下,其他事务的Select操作可以访问记录的版本链,因此可以并发读-写、写-读。版本链在InnoDB

2022-03-22 22:37:15 584

原创 redis 核心知识点

Redisredis的特点高性能:读11万次每秒,写8万次每秒高可用:分布式集群可以是多主多从,当主节点发生异常时,对应从节点可以顶替,保持高可用。易扩展:redis3.0以后的所有数据都存储在16384个槽中,创建集群时需要将槽分配给各个主节点,需要扩容时,将槽重新分配给新的主节点,开启数据迁移即可,在扩容时redis仍然可用。数据结构丰富:有string、list、set、sorted_set等原子性:redis是单线程持久化:redis可以将不用的内存写入磁盘中。重启时从磁盘加载进内存

2022-03-22 22:34:13 862

原创 redis 数据结构 精讲

数据结构stringstring的结构string {int len;//实际字符串的长度int free;//剩余可用长度char buf[];}有长度字段,求长度为O(1)。预分配。当len小于1M时,每次分配空间为原来的2倍。当len大于1M时,每次分配空间增加1M。预留空间较多,append效率高,分配次数减少,但占用较多内存。惰性释放空间。缩短字符串时,不立即释放因缩短而空出来的空间。二进制安全。保留原始的字符串,不会受有’\0’的影响。可以用于存储图片、音频、视频等,图片

2022-03-22 22:33:04 799

原创 mysql 主从延迟原因 解决方案

主数据库更新操作频繁,导致从数据库的relay log堆积很多,回放relay log的单个线程忙不过来。mysql5.7之后,基于时钟(Group Commit)的并发复制。mysql8.0之后的write set并发复制。多个线程并发回放提高效率。主库执行了慢sql或大事务,从数据库回放时也同样耗时事务中涉及到慢查询,考虑未建索引、索引失效、索引选错、等待锁。例如对一个大表进行Update、delete。DDL语句操作大表。对于DDL语句操作大表,可以考虑夜间请求少的时候进行。从数据库的配置

2022-03-22 17:02:14 782

原创 mysql 慢查询原因 排查 优化

慢查询原因一条sql偶尔查询很慢原因数据库更新频繁,redo log buf很快满了,只能先暂停其他操作,将redo log buf同步写到磁盘上时,这时候查询只能等待写磁盘完成了。查询涉及到的表或行被加锁了,只能等待锁被释放。一条sql一致查询很慢应该是sql书写有问题了。原因字段未创建索引索引失效。索引失效有很多原因。数据库选错索引。数据库的统计信息不准确,选错了索引,analyze 表重新统计信息。或者sql里强制使用某个索引。索引失效的情况where、group b

2022-03-21 16:18:41 2045

原创 分布式锁 redis实现

分布式锁 就是一个在分布式下的互斥机制,保证同一时刻只有一个机器的一个线程能获取到锁。分布式锁保证同一时刻只有一个机器的一个线程能获取到锁锁失效机制,防止死锁非阻塞获取锁,获取不到直接返回高性能获取锁、释放锁解铃还须系铃人redis实现分布式锁一个关键是保证加锁、解锁的原子性。加锁执行setnx 和expire的合成原子指令,value为随机生成的UUID。若key不存在,设置key并设置过期时间。若key存在,返回0.设置过期时间,防止死锁。解锁使用redis执行lua脚本,

2022-03-20 11:03:13 541

原创 秒杀系统 后端设计方案

秒杀系统有两个重要问题高并发超卖问题使用redis缓存,秒杀系统是典型的读多写少的场景,利用内存能提高并发性。在秒杀前,将秒杀时的热点数据载入内存。redis是单线程模型,所以保证了写操作的原子性。使用两个消息队列。一个消息队列,只能存入商品库存大小个的元素,用户的请求放在这里,丢弃超出个数的请求。程序从该消息队列中取出请求,然后在redis中减库存,若减库存成功,将用户信息和商品信息放入另一个消息队列。其他系统从消息队列中取出用户信息和商品信息生成订单。还要有一个线程来将redis中的库存同

2022-03-20 10:47:20 785

原创 设计模式 精讲 在JDK、Spirng中的应用

设计模式原则描述开闭原则对扩展开放,对修改关闭。提高可维护性里式替换原则子类尽量不要对父类的非抽象方法进行重写依赖倒置原则高层不应该依赖低层,面向接口编程单一职责类的职责尽量单一,高内聚接口隔离接口的职责进行精简,高内聚迪米特法则不要对陌生人说话,陌生指当前对象对另一个对象的交互不直接,要合作完成功能需要额外转换工作合成复用原则尽量少用继承,多用聚合,降低耦合单例模式全局只需要一个实例。有多种实现,推荐双重检查、静态内部类、枚

2022-03-19 23:07:15 163 1

原创 TCP 三次握手 四次挥手 如何保证可靠传输

TCP三次握手通过三次握手,双方都确定自己发送、接收正常且对方发送、接收正常四次挥手通过四次挥手,双方都确认自己、对方都无数据要发送了。客户端发送含FIN释放连接报文,表明自己没有数据要发送了服务器收到释放报文,返回含ACK确认报文,表明知道客户端没有数据要发送了。服务器可能有数据要发送给客户端客户端收到确认报文,等待服务器可能要发送的数据。服务器发送数据给客户端,客户端收到数据服务器没有要发送的数据后,发送释放连接报文客户端收到释放连接报文,知道服务器没有数据要发送了,发送确认报文,

2022-03-19 23:05:02 441

原创 Https 对称加密 非对称加密 ssl/tls精讲

HTTPhttp协议是无状态的,每个请求对应一次连接一次响应,且数据透明,不安全,但速度快。HTTPShttps在http的基础上增加了ssl/tls协议,数据被加密,安全。非对称加密非对称加密:有一对私钥和公钥,私钥能对数据进行加密,公钥能对数据进行解密。只有A知道私钥,具有对数据加密的能力。B、C都只知道公钥,只具有对数据解密的能力。A用私钥加密数据发给B,B用公钥解密得到数据。C也只有解密数据的能力,无法加密数据来伪装A。由此可知,非对称加密能解决信任性问题,能证明一个单位的身份。能用公钥解

2022-03-19 22:58:50 278

原创 4种背包问题 简单明了 0/1背包 完全背包 多重背包 混合背包 二进制优化

0/1背包0/1背包问题:背包容量为c,有n个物品,物品xi的重量为wi、价值为vi,选择哪些物品装入背包使价值最大。之所以说是0/1背包,是因为每个物品只有一个,只能选/不选。使用二维数组的递推式dp(第几个物品,容量)dp(i, j) = dp(i-1, j),wi > j # 背包容量j小于wi,装不下物品xidp(i, j) = max{dp(i-1,j), dp(i-1, j-wi) + vi},wi<=j #背包装的下物品xi,有两种选择,装xi/不装xi,选择能使价值

2022-03-03 00:04:38 349 1

原创 java面试题

基本概念与常识java语言的特点简单容易面向对象(封装、继承、多态)平台无关性(通过不同平台的jvm实现)支持多线程(c++无多线程机制,需要依赖操作系统的多线程机制)适合网络编程可靠、安全编译与解释并存(java源码先经编译器编译为字节码,再由解释器解释执行)JVM vs JDK vs JREjava语言的“一次编译,到处运行”是通过不同平台的jvm来实现的。JVM有很多种,例如Hotspot VM、J9 VM、JRocket等,只要满足jvm规范即可,每个人都可以实现自己的jv

2022-02-23 21:15:09 446 1

原创 leetcode 题解 刷题笔记 清晰明了 面试突击

剑指 Offer 03. 数组中重复的数字关键词:Set、重复问题:从一维数组中找出一个重复数解决方法:使用Set存储,add方法,当集合已有元素时返回false,表明重复了。剑指 Offer 04. 二维数组中的查找关键词:数组递增问题:从左上角向右向下递增的二维数组,查找某个值。解决方法:从右上角开始当前值等于目标,返回true当前值大于目标,向左移动一列当前值小于目标,向下移动一行剑指 Offer 05. 替换空格关键词:StringBuffer问题:将字符串s中的空

2022-02-22 20:20:45 746 1

原创 class文件结构

大致结构ClassFile { magic minor_version major_version constant_pool_count cp_info constant_pool[constant_pool_count-1] access_flags this_class_index super_class_index interfaces_count interfaces[interfaces_count] fields_count field_info fields[fie

2022-02-22 15:58:59 487

原创 jvm内存结构简单

jvm运行时结构包含堆、元空间、虚拟机栈、本地方法栈、程序计数器。堆和元空间是线程共享的。虚拟机栈、本地方法栈、程序计数器是线程私有的,每个线程都有独立的一份。堆线程公有。所有new出来的、反射构造的对象都存放在堆中。堆分为年轻代和老年代。gc时年轻代的对象符合某个条件就会晋升到老年代。年轻代分为Eden区、Survivor 1区、Survivor 2 区。年轻代一般使用复制算法。老年代一般使用标记-压缩算法。元空间线程公有。jdk8及以后才有元空间,之前是方法区。元空间使用本地内存,不属于虚拟机的

2022-02-20 12:54:29 482 1

原创 jvm调优 详细 多个案例分析

什么时候需要调优

2022-02-19 17:14:41 3228 1

原创 为什么jvm需要多种类加载器 详细

为什么jvm需要多种类加载器需要从多种来源读取类字节流,例如网络、数据库、文件系统等。相同包路径下的两个类A、B,只有都由同一个类加载器加载时类B才有对类A的package访问权限。启动类加载器加载的java.lang.Integer,由其他类加载器加载器的用户创建的java.lang.MyClass就无package权限访问java.lang.Integer。多种类加载器防止了对基础类的包访问侵入。包访问权限:相同包路径下的两个类A、B,类B具有访问类A的public、no modifier、pro

2022-02-05 14:53:16 982 1

原创 类加载 类加载器 详细

类加载过程读取.class文件,加载字节码。加载。包含验证、解析、初始化。

2022-02-03 22:55:57 301 2

原创 垃圾收集算法

可达性分析从GC Roots开始搜索对象引用,搜索的路径成为引用链。若一个对象无引用链与GC Roots相连为不可达,否则可达。垃圾收集算法标记-清除(Mark Sweep)算法每个对象对应一个标记位,记录是否可达。标记。对空间中对象进行可达性分析,标记可达对象。清除不可达对象。优点:只需找到对象被一个GC Roots可达的对象引用即可判断可达。不移动对象缺点:内存碎片问题。当执行多次标记清除算法后,会产生大量小的内存碎片。当要创建大对象,会遇到无足够连续空间分配。标记和清除两

2022-02-01 23:25:07 315 1

原创 猫的品种 简略

美国短毛猫(美短)头大圆,毛短,身体健壮英国短毛猫(英短)头大圆,毛短,身体健壮无毛猫几乎无毛,容易着凉波斯猫很大只,有长长的皮毛,毛长,被称为猫中的王子布偶猫头部成等三角形,很能忍受疼痛暹罗猫身体长日本短尾猫短尾折耳猫耳朵折了,听力差卷耳猫耳朵卷卷俄罗斯蓝猫蓝色橘猫橘色,十橘九胖。狸花猫我家的猫黑猫黑色白猫白色...

2022-02-01 19:49:26 458 1

原创 GC finalize方法

finalize方法Object类中定义的protected方法用户可以调用对象的finalize,但不影响jvm对finalize的处理jvm最多可以执行一次对象的finalize方法与finalize相关的回收过程当对象被判定为与GC Roots无引用链相连,即不可达时,若对象未覆盖finalize方法,将直接被jvm回收。若对象覆盖了finalize方法,则判断是否已经执行过finalize方法。若已执行过,对象将被回收,否则,将对象放入F-Queue,由低优先级的线程执行finaliz

2022-02-01 15:43:52 2603 1

原创 Minor GC、Full GC 清晰明了

阅读前提:了解JVM内存模型。Minor GC: 对新生代进行垃圾回收,速度快。Full GC: 又称Major GC,对老年代进行垃圾回收,通常会伴随至少一次的Minor GC,但不是绝对。通常速度要比Minor GC慢10倍。创建大对象,通过参数PretenureSizeThreshold设置大对象标准,大对象直接存入老年代。创建小对象,小对象存储在Eden区。当Eden满时,若老年代无空间担保则进行Full GC。若老年代有空间担保则进行Minor GC,进行Minor GC发现存活的对象太多,

2022-01-31 13:07:42 668 1

原创 java内存模型 Java Memory Model (JMM)

共享变量存储在主内存。每个线程都有自己的工作内存,线程不能访问其他线程的工作内存。线程从主内存读取共享变量,存入自己的工作内存,修改变量的值会更新自己的工作内存,在某个时机再刷新到主内存。...

2022-01-29 21:22:55 581 1

原创 synchronized、volatile的区别

synchronized可以作用于变量、实例方法、静态方法,volatile只作用于变量。同一时刻只有一个线程能进入synchronized作用的代码,其他线程会阻塞。volatile不会阻塞。synchronized能保证原子性、可见性、顺序性。volatile能保证可见性、一定程度的顺序性,不能保证原子性。synchronized作用的代码可以被编译器、处理器优化。volatile禁止指令重排序。...

2022-01-29 20:34:48 301

MinimizeToTray免费实用.zip

MinimizeToTray免费实用.zip

2020-02-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除