自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 【性能优化】秒杀系统性能优化

文章目录秒杀系统性能优化优化之前的准备代码优化数据库相关优化未完待续......秒杀系统性能优化优化之前的准备在吞吐量、延迟和内存这三点中选择我们业务的着重点。例如本次这个系统,我认为应该更加注重吞吐量。(PS:我也是第一次,凭感觉来的…)为什么更加注重吞吐量?延迟:像我们大家平时去进行商品抢购的时候,应该都会觉得现在人太多了,卡一卡没什么问题(但是也不能太久,你给我直接来个10s,肯定给你差评),只关心的是最后我有没有抢到商品。所以我认为延迟这方面应该是其次,主要的是系统处理请求的数量。内存

2021-04-27 21:43:37 803

原创 【MySql】MySql的坑

文章目录MySql的坑update的返回值居然不是受影响的行数?MySql的坑update的返回值居然不是受影响的行数?每次执行如上代码,userMapper.roomLeave()的返回值都是1,不管room_id是否是###。解决方法:在连接数据库的url上添加useAffectedRows=true...

2021-07-08 17:12:07 194

原创 【Linux】通过shell脚本对mysql的增删改查以及my.cnf的配置

文章目录shell操作mysql1.获取mysql默认密码2. 修改my.cnf文件3.shell创建mysql数据库4. shell创建mysql表5.shell添加数据6.shell删除数据7.shell修改数据8.shell查找数据9.shell修改数据库密码shell操作mysql1.获取mysql默认密码新安装的mysql,密码是默认密码#!/bin/bash# STRING:获取mysql默认密码的一段字符串# 例如:A temporary password is generate

2021-07-06 11:07:02 1047

原创 【Spring】SpringMVC大致过程

文章目录SpringMVCMVCServletSpringMVCSpringMVC和Servlet的关系大致过程九大组件源码解析SpringMVC初始化SpringMVC处理请求SpringMVCMVCMVC是一种框架模式,将M和V的实现代码分离。M(Model):模型,业务规则。处理请求、返回数据,数据可以被多个视图使用。V(View):视图,就是你能看到并能交互的界面。C(Controller):控制器,负责接收用户的请求去调用哪个M去处理,然后再返回确定哪个V显示数据。S

2021-04-26 15:54:03 653

原创 【Spring】Spring中Bean的生命周期

文章目录Spring中Bean的生命周期生命周期源码分析Spring中Bean的生命周期生命周期源码中的描述:大致过程:源码分析上图中的核心方法几乎都在doCreateBean()中,我们直接进入到AbstractAutowireCapableBeanFactory类中。首先,进入bean实例的创建,createBeanInstance()方法。我们可以看见上图中Bean可以通过instantiateUsingFactoryMethod()方法创建,也可以通过autowireCons

2021-04-24 11:41:47 767

原创 【Spring】SpringIoC大致过程

文章目录SpringIoC是什么?类图大致过程源码分析SpringIoC是什么?​ 官方文档的解释是:IoC也称为依赖注入(DI)。在此过程中,对象仅通过构造函数参数,工厂方法的参数或在构造或从工厂方法返回后在对象实例上设置的属性来定义其依赖项(即,与它们一起使用的其他对象) 。然后,容器在创建bean时注入那些依赖项。从本质上讲,此过程是通过使用类的直接构造或诸如服务定位器模式之类的机制来控制其依赖关系的实例化或位置的Bean本身的逆过程(因此,其名称为Control Inversion)。​ 简

2021-04-23 12:38:02 570

原创 【JUC并发】StampedLock

文章目录StampedLock是什么?结构原理案例StampedLock是什么?​ 源码中的解释是:​ 一种基于功能的锁,具有三种模式来控制读写访问。 StampedLock的状态由版本和模式组成。锁获取方法返回一个表示并控制相对于锁状态的访问的stamp;这些方法的“尝试”版本可能会返回特殊值零,以表示无法获取访问权限。锁释放和转换方法需要使用图章作为参数,如果它们与锁的状态不匹配,则会失败。​ 三种模式分别是:写锁、读锁、乐观读(可以升级的锁)。​ 注意:是一种不可重入的锁。​ 在读

2021-04-22 21:11:03 241

原创 【Spring】循环依赖

文章目录循环依赖是什么?Spring是如何解决的?源码分析循环依赖是什么?​ 简单的来说就是对象a的属性中引用了对象b,对象b的属性中引用了对象c…最后引用到a。<bean id="a" class="com.zmm.test.A" lazy-init="false"> <property name="b" ref="b"/></bean><bean id="b" class="com.zmm.test.B" lazy-init="fals

2021-04-22 11:06:14 125

原创 【项目】SpringCloud+Nginx+Redis+RabbitMQ秒杀系统

文章目录秒杀系统前言系统架构图难题限流(一般都在接入层)三大接口限流算法计算器漏桶令牌桶其他限流策略分布式缓存可扩展超卖少卖(分布式锁)削峰遇到的问题前后端交互问题1.跨域问题2.前后端数据交换精度缺失问题JSON转换问题1.Redis中实体类和JSON互转问题消息中间件问题1.添加消息中间件的话,如何将秒杀系统处理的消息返回给用户?数据库问题1. 不能使用关键字做表名!秒杀系统前言当时写这个项目也只是一时兴起,后面看着性能不断的提高,测的QPS和延迟都不断的变优,发现还挺有意思的,感觉找到了乐趣所在

2021-04-07 21:41:25 1915 2

原创 【设计模式】工厂模式

文章目录简单工厂模式工厂方法模式抽象工厂模式简单工厂模式/** * 初始版本 */interface IProduct{ void show();}class Product1 implements IProduct { @Override public void show() { System.out.println("Product1......"); }}class Product2 implements IProduct{

2021-04-05 18:17:06 229 2

原创 【算法】动态规划

文章目录动态规划前言案例青蛙跳级问题背包问题动态规划前言​ 博主前一个月开始刷题,那会儿在力扣上面,见一个DP题一个不会的。突然觉得自己好垃圾哈哈哈。为什么现在写这个呢,就刚刚刷着刷着题,突发奇想了,觉得好像找到了哪个感觉?开始刷DP过瘾了哈哈哈。但是我又不太会讲,直接来分享我对一些DP案例题的解题思路。不多说,进入正题。案例青蛙跳级问题一个青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级台阶总共有多少种跳法。思考青蛙跳级的方式有2种:跳1个台阶跳2个台阶

2021-04-04 12:30:56 412 4

原创 【JUC并发】fork/join

Fork/Join原理(需要继承(有返回值)RecursiveTask或者(没返回值)RecursiveAction,重写compute()方法)将大任务拆分成小任务,先实现compute()方法。首先判断任务是否足够小,如果足够小就直接执行任务。如果不够小,就必须分割成两个子任务,每个子任务调用fork()方法时,又会进入compute()方法,递归下去。工作窃取算法异步调用fork()方法/** * ForkJoinPool是由ForkJoinTask数组和ForkJ

2021-04-02 18:20:12 181

原创 【JUC并发】Java中的并发工具类

Java中的并发工具类CountDownLatch(减法计数器,由一个同步队列实现)概述​ 通过构造方法传入的参数作为计数器,当调用countDown()方法时,计数器的数值就会减一,CountDownLatch的await()方法就会阻塞当前线程,直到计数器变成0。如果某个线程解析的比较慢,我们可以使用**await(long time, TimeUtil unit)**这个方法等待特定的时间后,就不再阻塞当前线程。初始化public CountDownLatch(int count)

2021-04-01 15:11:36 120 1

原创 【JUC并发】阻塞队列

阻塞队列实现原理插入和移除操作的处理方式抛出异常返回特殊值一直阻塞超时退出插入add(e)offer(e)put(e)offer(e,time,unit)移除remove()poll()take()poll(time, unit)检查element()peek()//通过这两个Condition接口实现private final Condition notEmpty; //take()private final Condit

2021-03-31 16:24:57 104

原创 【设计模式】单例模式

单例模式优点可以保证内存中只有一个实例,减少了内存的开销可以避免对资源的多重占用可以优化和共享资源的访问缺点扩展难,违背了开闭原则不利于调试(并发测试中)功能设计不合理就会违背单一职责原则饿汉式单例模式/** * 饿汉式单例:使用静态块机制,在对象类加载的时候就实例化(类还没加载就实例)。 * 优点:可以保证绝对线程安全,执行效率高 * 缺点:当系统中有大批量的单例对象存在,可能会造成大量内存的浪费。 */class HungrySingleton{ p

2021-03-31 16:12:47 96

原创 【分布式】分布式基础知识

Redis缓存穿透和雪崩(面试、工作常用)服务的高可用性!缓存穿透(查不到)概念:假如用户想查询一个数据,发现redis内存数据库种没有,于是向持久层数据库查询,发现也没有,于是查询失败。但是当用户很多的时候,都去请求了持久层数据库,这就会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透解决方案(在redis缓存添加一个过滤器或者在user访问持久层数据库的时候添加一个缓存空对象):1.布隆过滤器:是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验

2020-11-15 20:53:07 258

空空如也

空空如也

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

TA关注的人

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