暂时未有相关云产品技术能力~
公众号Java4ye 作者?
构建了一个基于Springboot2的秒杀系统。项目利用K8S上的主从结构部署Redis和MySQL,通过Traefik作为网关。RabbitMQ在本地虚拟机的docker环境中,用Prometheus+Grafana监控。设计思路包括隐藏秒杀地址以防止脚本攻击,使用Lua脚本保证库存预扣原子性,但初期版本未处理重复订单校验。为防止MQ故障,将订单信息先保存到Redis,再通过脚本发送到MQ。采用分布式锁防止用户重复下单和缓存击穿问题,使用编程式事务确保库存扣减与订单保存一致性。项目通过JMeter测试,观察性能并分析Redis和RabbitMQ的使用情况。完整代码可在GitHub找到。
get,set 原来这么难的
几张图带你快速上手JMeter~ Apache JMeter 5.4 (Requires Java 8+) 下载地址: jmeter.apache.org/download_jm… 将下载下来的文件进行解压,配置环境变量 JMETER_HOME path 中添加 %JMETER_HOME%\bin 在 cmd 窗口中执行 jmeter 出现下面的画面就可以啦 依据下图的步骤可以创建随机函数 如 ${__Random(3,6,)} 和 ${__RandomString(${__Random(3,6,)},ABCDEFGHIJKLMNOPQRSTUVWXYZ,)} 在这里如下图: 右键
创建一个配置类 SecurityConfig 继承 WebSecurityConfigurerAdapter package top.ryzeyang.demo.common.config; import org.springframework.context.annotation.Bean; import org.springframework.security.access.hierarchicalroles.RoleHierarchy; import org.springframework.security.access.hierarchicalroles.RoleHierarchyI
正题开始啦~ 牛年啦~ 咋们也研究下怎么给我们滴 IDEA 添加点 过年滴气氛,像这样 Spring boot 源码 之 Banner 源码看起来 <( ̄︶ ̄)↗[GO!] Springboot 启动时,会先去创建SpringApplication 对象 。 SpringApplication 构造器 指定banner的模式 Banner 函数式接口 这里有三种模式 run 方法 创建banner对象 进入上图红框中,可以看到这里如果不是 OFF 模式的话会去创建 SpringApplicationBannerPrinter 对象 可以看到该类中还定义了 图片的类型(居然还支持 gif
一. Springboot 对应的 Springcloud 版本如下~ 官网地址 : spring.io/projects/sp… 各位大佬 请注意下~ ,最后一句英文还说 不再支持 Dalston, Edgware, Finchley, Greenwich 这四个版本啦 二. 使用 pom 文件 <properties> <spring.cloud-version>Hoxton.SR8</spring.cloud-version> </properties> <dependencyManagement> <dependencies> <dependency
一. for循环中的条件断点 如图,在IDEA中打下断点,然后右键它,输入想要的条件 如 s1.equals("Java4ye")&&a.equals("Java4ye") 然后直接按下 F9 就可以直接到达我们想要的循环次数和值啦 如果想直接跳到特定的次数, 如图打下该断点 然后输入 i==35 就好啦😄 二. 回退到上一个方法 drop frame 断点如下~ 想回退到上一个方法时,按下 drop frame 按钮 结果就回到上一个方法啦 三. 更改变量的值 Set Value 如果 在 variables 窗口中 ,右键 选择 Set Value 就可以改成自己想要
关于我尝试抓包微信失败后想到的新方法居然和奥特曼有关~ 以前 微信网页版 还可以登录的时候,我们还可以使用 python 帮助我们实现 自动化操作,调用各种各样的 API ,做做机器人啥的 ,但是现在呢~ 微信网页版 好像不开放了😐 扫码登录都会出现下面的画面 😵 来到之前 很火的 python 库 wxpy, 我看到下面这个场景, 果然也是一片哀嚎 哈哈哈 wireshark 抓包 于是我做了个大胆的决定,尝试用 wireshark 去抓取微信发出的数据包~ (我实在太天真了!🙃) 在电脑上打开微信,参考下面三次握手的图~ 可以看到这里就已经 发出了这么多信息 我晕
一. 你知道哪些 map ? HashMap, TreeMap, ConcurrentHashMap, LinkedHashMap 二. HashMap 的特点是什么? 允许 Key 和Value 为 null ,不过只能有一条记录 Key 为 null 线程不安全 无序 数据结构是 数组+链表/红黑树(JDK1.8) 三. JDK1.8 中 HashMap 为什么要引入红黑树 ? 链表 查询时间复杂度 O(n) , 插入时间复杂度O(1) 红黑树 查询和插入时间复杂度都是 O(lgn) 可以参考下 美团技术团队 的这篇文章 tech.meituan.com/
必备知识点 一. Comparable , Comparator 这两个有什么不同? 可以看到一个是 java.lang 包的,一个是 util 包的。 代码如下,很明显, Comparable 属于 内部比较器, 而 Comparator 属于 外部比较器 。 外部比较器的好处 是我们可以有很多这种比较器,可以按排序的要求去选择 ,便于解耦。 而内部比较器也比较简单,只要实现了该 Comparable 接口就可以进行比较了。 class B implements Comparator<Integer>{ @Override public int com
观前提醒 只需几分钟,你就可以 搭建一个 超级酷炫的个人博客! 😋 只要一行命令就可以实现博客的自动部署和邮件提醒 😝 文章有点长~ 建议收藏慢慢看😄 博客简介 博客采用 Hexo 搭建,使用了 Butterfly 主题,结合 Gitee 仓库, Aliyun 服务器(运用到 Nginx , docker , node.js 等技术) HEXO 简介 HEXO是一个 静态网页 博客框架 , HEXO基于 Node.js, 采用 markdown 解析文章 具体可以通过该链接了解: HEXO官方文档 安装 需要先安装 Node.js 和 Git ,为什么要安装这两个呢,博主使用后的
简介 java.util 包下的 属于 fail-fast , 快速失败~ 😝 java.util.concurrent 包下的 属于 fail-safe ,安全失败~ 😝 简单来说 就是 fail-fast 在迭代时,如果发现 该集合数据 结构被改变 (modCount != expectedModCount),就会 抛出 ConcurrentModificationException 小伙伴们可以参考下 下面的代码简单实验一下~ 😋 fail-fast 实验代码 实验对象是 Hashtable,这里采用 jdk1.7 的写法 ~ 因为博主还在研究 下文
ConcurrentHashMap 包 可以看到这个 ConcurrentHashMap 是位于并发包下面的, 这可是大名鼎鼎的 JUC 呀 并发涉及到线程安全呀,锁的知识点,还有诸如关键字 volatile 等 有关内存屏障的东西 , 还有 Unsafe 类这个更底层的! 😄 嘿嘿~ 我们知道这个 HashMap 是线程不安全的~ ,而 线程安全的 Map 就有这个 HashTable 还有这个 ConcurrentHashMap 。 看到这里不知道小伙伴们会不会 有个小小的疑惑 ? (・∀・(・∀・(・∀・*) 为啥有了 HashTable 还要再设计这个 Concurre
Java 中的锁 为啥是 Java 中的锁呢, 因为 锁的种类 也有很多的,像我们平时使用的 MySQL,它也有自己的 表锁,行锁,间隙锁 ... ... 还有 基于redis 的分布式锁 (RedLock——红锁)呀,zookeeper的分布式锁 等各种各样的🔒~ 埋个坑🕳 ~ 以后写数据库专题的时候写写 😝 4ye 总结了一份思维导图,小伙伴们可以看看~ 乐观锁 说到这个就不得不提下 JAVA 中的 CAS 了,它是这种思想的具体实现~,还记得上文 频繁出现的 Unsafe 类吗,ConcurrentHashMap 就是通过它去调用这个 CAS ( Compare And Swap
面试官:线程有几种创建方式? 这个也太简单了叭~ 😝 继承 Thread 类 步骤如下: 创建一个类继承 Thread 重写 run 方法 调用 Thread 类的 start 方法 类图~ 代码如下 public class MyThread extends Thread{ @Override public void run() { System.out.println(this.getClass().getSimpleName()); } public static void main(String[] args) {
OpenJDK 源码下载 地址 : hg.openjdk.java.net/ 在这里选择对应的 JDK 版本 点进来,就可以找到我们感兴趣的源码了 ,比如 最主要的就是这个 hotspot 虚拟机 , 还有 jdk 源码 其他文件夹的含义如下~ 可以跳过~ 目录讲解 CORBA CORBA(Common ObjectRequest Broker Architecture公共对象请求代理体系结构)是由 OMG 组织制订的一种标准的面向对象应用程序体系规范。或者说 CORBA 体系结构是对象管理组织(OMG)为解决分布式处理环境 (DCE) 中,硬件和软件系统的互连而提出的一种解决方案;
Thread start 源码揭秘 public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the future may have to also be added to the VM. * * A ze
下载 wget http://download.redis.io/releases/redis-6.0.12.tar.gz 复制代码 解压 tar -zxvf redis-6.0.12.tar.gz 复制代码 编译 make 复制代码 若执行make 命令报错 make: command not found,可执行以下命令: yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++ 复制代码 安装 权限不够的话用 sudo make instal 复制代码 更改配置文件 可以拷贝一份默认文件 redis
!!! JUnit version 3.8 or later expected: 如下所示,当我在进行单元测试时,控制台居然抛出了这么诡异的bug! 三个感叹号开头 此刻的我 ??? 异常信息如下: java.lang.ClassNotFoundException: junit.framework.ComparisonFailure 那么先挖到它的源码看个究竟叭 😝 在264行打个断点,然后debug运行起来 通过 Alt+F8 来获取这个类加载器 都使用到了哪些类 ClassLoader.getClassLoader(caller) 效果如下:可以看到这里 至于为啥会点开这里,
一. pom 文件 引入 quartz jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> 复制代码 二. 创建一个 job 并继承 QuartzJobBean @Slf4j public class HelloWorldJob extends QuartzJobBean { @Override protected void executeInternal(Jo
本期4ye又带来一个奇怪的Bug啦,是关于 jdk8 中 lambdas 推导泛型失败而导致的编译期错误,下面让我们一起来看看叭 😝 Error:(24, 29) java: 未报告的异常错误java.lang.Throwable; 必须对其进行捕获或声明以便抛出 下面让我们一起来看看叭 场景模拟 代码如下 import java.util.Optional; public class B { public static void main(String[] args) { String s=null; Optional.ofNullable(s)
jackson解析泛型的正确写法 本期 4ye 又带来了一个小 bug 啦,如下,小伙伴们是否见过这个异常呢? in unnamed module of loader 'app' bug描述 上次使用jackson进行数据转换的时候发生了下面这个错误。 java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class com.example.demo.model.User (java.util.LinkedHashMap is in module java.base of loader 'bo
实现单例模式的八种模式:饿汉式,懒汉式,双重检查锁模式,静态内部类模式,序列化模式,注册式之枚举,注册式之容器,线程实现ThreadLocal 参考大神Tom的《Spring 5核心原理与30个类手写实战-谭勇德》 单例模式 Singleton Pattern 确保一个类在任何场景下只有一个实例,并提供一个全局访问点 使用场景 J2EE 标准中的 ServletContext 、 Spring 框架应用中的ApplicationContext 、数据库的连接池 也都是单例形式 饿汉式 在类加载的时候就立即初始化,并且创建单例对象,属于线程安全 SpringIOC容器Applic
序列化单例模式的实现————readResolve 源码解读 在可序列化类中加上readResolve方法,就可以实现单例模式了!这是为什么呢?让我们一起看看源码中的奥秘吧! 只有实现了序列化接口 Serializable ,才可以进行 序列化操作, 测试代码 class SingletonTest { */*** ** 序列化测试公共方法* *** *@param* *className* **/* private void testSerializable(String className) { if (className =
docker-compose安装 这个安装比较简单,执行下面三个步骤就完事了😀 docker-compose官网地址: docs.docker.com/compose/ins… 安装步骤如下:✌ 下载docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 复制代码 赋予权限 sudo chmod +x /usr/local/bin
池化技术 小伙伴们好久不见呀~ 😝 额 转眼就到了 儿童节 啦 哈哈哈 祝各位大小朋友节日快乐! 轻轻松松过节,开开心心玩耍,老顽童也不错呀😝 哈哈哈 (不忘童真!) 嘿嘿 迎来了自己的第一篇 万字长文! 😝 (中间除了看看金色的雨外,还在做其他笔记~ 所以就拖到现在了 ,,ԾㅂԾ,, 这篇长文除了详细介绍线程池这个点以及它的使用场景外,还分享了下几种连接池滴用法以及避开一些坑🕳,(图还挺多的~) 希望对你有所帮助!!冲冲冲!😋 池化技术~,不知道小伙伴们对这个词是怎么理解的? 为什么要有这个技术呢?解决什么 痛点 呢?哈哈哈 带着小小的思考和 4ye 一起往下看看叭~ 池化
环境 源码:spring5.2.x jdk11.08 idea2020.1 spring spring5.2.x源码下载地址 gradle 下载 查看 spring 使用的 gradle 版本,这里要记得将 distributionUrl 指向本地的 gradle 包,不然还是会去下载的。 distributionUrl=file:///H:/download/gradle-5.6.4-bin.zip gradle下载地址 安装 window下,配置环境变量GRADLE_HOME和GRADLE_USER_HOME(一个放库文件的目录) 最后输入gradle -v,看到下面的结果就说
创建表 可以看到这里创建的索引类型都是 BTREE -- ---------------------------- -- Table structure for mall -- ---------------------------- DROP TABLE IF EXISTS `mall`; CREATE TABLE `mall` ( `id` int(11) NOT NULL AUTO_INCREMENT, `categoryId` int(11) NOT NULL, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_gen
前言: 本来也不想卸载的,因为之前有往db里插入一千多万的数据了。。但是这个数据库好像被我弄坏了。。 输入正确的账号密码一直进不了 很无奈。。 😵 一开始是启动不了,后来发现用户的权限不对(要通过 chgrp 和 chown 去修改),改了之后可以启动,但是就无法登录成功了。。出此下策,顺便换个方式再去插入数据试试 😄
介绍 vchart 官网地址 在使用 echarts 生成图表时,经常需要做繁琐的数据类型转化、修改复杂的配置项,v-charts 的出现正是为了解决这个痛点。基于 Vue2.0 和 echarts 封装的 v-charts 图表组件,只需要统一提供一种对前后端都友好的数据格式设置简单的配置项,便可轻松生成常见的图表。
跨域介绍 跨域是是由浏览器的同源策略造成的,同源策略是一个安全措施!能减少XSS、CSFR等的攻击。 同源是指,域名,协议,端口均相同 出现跨域 的原因 就有 1. 协议不同 2. 域名不同 3. 端口不同
前言 主要介绍下 Java 中的 SPI 机制 。 Springboot 的 SPI 机制 咱们在下文 Springboot的自动装配中再说~ 😝 嘿嘿 至于 [[ dubbo 的 SPI 机制]],还没时间深入了解,简单知道了它的 SPI 的自适应扩展机制,以及下面这些扩展~(超级多扩展的~)🐷 冲冲冲! 什么是SPI呢? SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在 ClassPath 路径下的 META-INF/services 文件夹查找文件,自动加载文件里所定义的类(定义多少,加载多少) 它是 Java 提供的一套用
函数式接口 函数式接口指的是接口中只有一个抽象方法的接口,用注解@FunctionalInterface标记,表示该接口是函数式接口 注解FunctionalInterface 如图,可以看到这里什么都没有,表面它只是一个标记接口. 四大接口 Consumer 源码如下: 作用: 内部消化传进来的参数, 没有返回值 示例: Consumer<String> consumer=System.out::println; consumer.accept("Consumer"); // 结果: "Consumer" 复制代码 Supplier 源码如下: 作用: 没有传参 , 直接返回一个结
实体类 public class Fruit { } class Apple extends Fruit{} class Pear extends Fruit{} class Orange extends Fruit{} 复制代码 泛型的上限 如下图,可以看到这里是不允许再添加任何实例的,只能从该list中去获取实例。 为什么不能添加呢?🐖 因为这个list 可能有以下几个情况 list是Fruit类型的,此时你去添加Fruit的子类都没问题 list是Apple类型的,此时你只能添加Apple,同理Pear,Orange也是。🙃 根本不晓得传进来的参数list会是哪种类型
JWT 是一种标准 官网介绍 jwt.io/introductio… 全称 全称:JSON WEB TOKEN 特点 有两种实现方式: JWS ( JSON Web Signature) JWE ( JSON Web Encryption) 这里我们常用的是这种签名的方式 JWS JWS 特点 由两个 . 分开成三部分 如下 eyJhbGciOiJIUzUxMiJ9.eyJtc2ciOiLmrKLov47lhbPms6jljZrkuLvnmoTlhazkvJflj7cg57uZ5L2g5LiA5qCq5Zub5Y-26I2JIiwic3ViIjoi57uZ5L2g5LiA5qCq
今天来和小伙伴们分享下之前改 UI 的笔记 , 由于项目需要,要在项目中使用设计师给的 icon 图标,还要改变 icon 的颜色。 幸好找到这么一个神器~ 插件:svg-sprite-loader 版本:@vue/cli 4.3.1 使用: 1. npm install -D svg-sprite-loader 2. 在 src/components/ 下创建 SvgIcon 组件 配置SvgIcon.vue <template> <svg :class="svgClass" aria-hidden="true"> <use :xlink:href="iconNa
内容概览 需求: 折线图上有 一个产品的目标值和实际值 ,通过点击其中一个legend,同时隐藏该产品的实际值和目标值(指折线图上的线) 当我觉得这个需求很 easy 的时候,居然发现 动态设置 legend 属性无效 …… 通过本文来记录这个解决过程,前端真是太难了 哈哈 在 v-charts 中, 折线图的写法如下: <ve-line :extend="chartExtend" :data="chartData" :events="chartEvents" height="58vh" ></ve-line>。 而 v-charts 是对 echart 的包装,很多事件都可以从 ech
官网介绍 先来看看官网是怎么定义这个自动装配的~ Spring Boot auto-configuration attempts to automatically configure your Spring application based on the jar dependencies that you have added 可以看到这里说,当你引入了某个 jar 依赖包时,Springboot 会尝试根据这个依赖去自动配置 Spring 应用程序。
简介 作者: “龟叔”Guido van Rossum 时间: 1989年圣诞节期间开发的 特点: “优雅”、“明确”、“简单” 语言类型: 解释型(高级) 优点: Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。 完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。 缺点: 第一个缺点就是运行速度慢,和C程序相比非常慢,毕竟是解释型语言,运行时要一行行地翻译成cpu能理解的机器码 ,而 C 时编译型的 在运行前直接编译成CPU
函数 定义 def : def my_abs(x): if x >=0: return x else: return -x print(my_abs(-55)) 复制代码 返回结果 return: 如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return 返回多个值其实就是返回一个tuple,只有一个tuple时可以省略括号 如 return 1,2,3
切片 (取指定索引范围 ) 格式:arr[开始索引:结束索引:Step] 开始索引 默认0,可不写; 结束索引默认为数组的长度, 获取的范围为 开始索引-结束索引 之间, 不包括结束索引; Step默认为1。
文章概览 一. 四种引用的概念 二. 对象可达性介绍 三. Springboot源码中的引用 概念介绍 不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。 01. 强引用 这个就是我们创建的普通对象了~ 当该对象被显示地赋值为 null 时,或者没有被其他存活的对象继续引用时,它就会成为垃圾收集器的目标,等待被收回 02. 软引用 软引用( SoftReference ) , 当内存不足 时会被回收 比如 被回收后,这里会打印 null 而不是 Java4ye 03. 弱引用 弱引用( WeakReference ) , 当 垃圾回收
函数式编程 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言 高阶函数(Higher-order function) 特点: 变量可以指向函数 即 函数本身也可以赋值给变量 x=abs x(-10) #10 函数名也是变量 abs = 10 abs(-10) # TypeError: 'int' object is not callable 注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的
模块和包 在Python中,一个.py文件就称之为一个模块(Module) 包是指一个包含模块与一个特殊的 __init__.py 文件的文件夹,后者向 Python 表明这一文件夹是特别的,因为其包含了 Python 模块。 注意自建模块的名称不要和内置模块的名称一样python内建模块文档 :
这是我参与更文挑战的第24天,活动详情查看: 更文挑战 不知不觉也来到python的面向对象教程阶段了😄,看到这几个字立刻就想到这个面向对象的三大特征 1. 封装 2. 继承 3. 多态 面向对象编程 Object Oriented Programming,简称OOP 面向对象和面向过程的区别
'限制实例的属性:__slots__ ,把一个方法变成属性调用:@property装饰器,多重继承&MixIn,定制类,枚举类:Enum,元类' 限制实例的属性:__slots__ 限制实例的属性 比如只允许对Student实例添加name和age属性。 由于'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。注意:__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
错误处理机制try...except...finally... 这个的使用和 java 的 try-catch-finally 差不多,只是多了个else来表示没有异常的时候,注意捕获的异常的类 要从子类到父类
文章概览 一. 静态代理 二. JDK动态代理 三. 反编译动态字节码
SonarQube®是一款自动代码审查工具,可以检测代码中的bug、漏洞和代码气味。它可以与您现有的工作流集成,以支持跨项目分支和拉出请求的持续代码检查。 就是一个痛苦面具…… 哈哈,根据该工具定义的规则,对代码进行扫描~ 有这五种严重性和三种类型
配置国内镜像源和解决虚拟环境(Venv)中安装bs4或者其他的第三方库的错误 —— Could not find a version that satisfies the requirement bs4 国内镜像源推荐 阿里 mirrors.aliyun.com/pypi/simple… 清华 pypi.tuna.tsinghua.edu.cn/simple/ 豆瓣 pypi.douban.com/simple/ 注意这里都是 https 的,不然下载包的时候会出现其他