自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java电商秒杀系统性能优化(九)——防刷限流技术—保护系统,免于过载

流量削峰技术-削峰填谷之神级操作概述一、验证码1.1 代码实现二、限流的目的三、限流方案3.1 限并发3.2 令牌桶算法3.3 漏桶算法原理四、限流力度概述本章介绍了常见的黄牛入侵手段,以及如何使用对应的防刷手段防止黄牛入侵。同时业务的发展预估永远可能高于系统可承载的能力,因此介绍了使用多种限流技术保证系统的稳定。本章学习目标:掌握验证码生成与验证技术;掌握限流原理与实现;掌握防...

2019-08-30 23:44:40 2523 1

原创 Java电商秒杀系统性能优化(八)——流量削峰技术-削峰填谷之神级操作

流量削峰技术-削峰填谷之神级操作概述一、秒杀令牌1.1 原理1.2 代码实现二、秒杀大闸2.1 原理2.2 代码实现:三、队列泄洪3.1 原理3.2 代码实现四、本地OR分布式概述在之前的课程中经历了查询的优化技术,将单机查询效率提升到了4000 QPS对应的交易优化技术使用了缓存校验+异步扣减库存的方式,使得秒杀下单的方式有了明显的提升。即便查询优化,交易优化技术用到极致后,只要外部的流...

2019-08-30 19:22:01 6074 4

原创 Java电商秒杀系统性能优化(七)——交易优化技术之事务型消息-保证最终一致性

事务型消息-保证最终一致性概述一、事务型消息原理1.1 消息队列简介1.2 消息队列应用实例1.3 事务型消息设计方案1.4 事务型消息总结二、操作流水2.1 库存数据库最终一致性保证2.2 业务场景决定高可用技术实现2.3 库存售罄2.4 后置流程2.5 交易单逻辑异步化三、异步更新库存四、事务型消息应用概述本章延续之前缓存库存所引入的事务不一致的问题,使用了异步化的事务型消息解决了最终一致...

2019-08-30 17:52:07 2462 2

原创 Java并发编程——线程之间的协作

线程之间的协作概述一、等待/通知机制1.1 wait()、notify() 和 notifyAll()1.2 方法调用和线程之间的关系1.3 await() signal() signalAll()二、等待/通知的经典范式三、线程通信:管道四、Thread.join()的使用4.1 join()的定义4.2 join()使用实例及原理概述线程开始运行的时候,拥有自己的栈空间,如同一个脚本按照既...

2019-08-30 16:48:50 642

原创 Java电商秒杀系统性能优化(六)——交易性能优化技术之缓存库存

缓存库存—用缓存解决交易问题概述一、高效交易验证1.1 交易性能瓶颈1.2 交易验证优化二、缓存库存模型2.1 库存行锁优化2.1.1 扣减库存缓存化2.1.2 异步同步数据库2.2 异步消息队列rocketmq2.2.1 部署模型2.2.2 主从复制机制2.2.3 分布式事务2.2.4 rocketmq的安装2.3 缓存库存接入异步化概述本篇博客介绍了下单交易的性能优化技术,通过交易验证缓存...

2019-08-29 18:33:55 2925 3

原创 Java电商秒杀系统性能优化(五)——查询性能优化技术之页面静态化

页面静态化概述一、静态请求CDN1.1 回源缓存设置1.2 有效性判断1.3 浏览器的三种刷新方式1.4 CDN自定义缓存策略二、静态资源部署策略三、全页面静态化概述cdn的核心原理并将静态页面部署到cdn上,之后使用了phantomjs的无头浏览器方案实现了将静态请求和动态请求合并一同部署到cdn上,更进一步的将商品详情页的流量能力提升到极致;页面静态化,其实就是将动态生成的jsp页面,变...

2019-08-29 17:08:54 2250 5

原创 Java并发编程——ThreadLocal

ThreadLocal概述一、对ThreadLocal的理解1.1 ThreadLocal在JDK中的定义1.2 应用场景二、深入分析ThreaLocal类2.1 get()2.2 setIntialValue()2.3 ThreadLocal类是如何为每个线程创建变量副本三、ThreadLocal的应用场景3.1 数据库连接问题3.2 Session管理3.3 Thread-per-Reques...

2019-08-29 15:09:04 5174 2

原创 LeetCode—求众数

求众数题目描述:给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2解法一:众数是出现次数大于n/2的元素,如果对数组进行排序,直接返回位于n/2位置处的元素...

2019-08-28 22:14:12 751

原创 Java并发编程——解析Thread类

解析Thread类概述一、线程的生命周期二、上下文切换三、线程的创建3.1 实现Runnable接口3.2 实现 Callable 接口3.3 继承 Thread 类3.4 实现接口 VS 继承 Thread四、Thread类详解4.1 线程运行状态4.1.1 start()方法4.1.2 run 方法4.1.3 sleep 方法4.1.4 yield方法4.1.5 join方法4.1.6 int...

2019-08-28 22:05:20 3491 6

原创 LeetCode——验证二叉搜索树

验证二叉搜索树验证二叉搜索树解法一验证二叉搜索树题目地址:二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6...

2019-08-27 20:06:57 367

原创 Java并发编程——Lock

本文以synchronized与Lock的对比为切入点,对Java中的**Lock框架**的枝干部分进行了详细介绍,最后给出了锁的一些相关概念.

2019-08-27 18:35:12 407

原创 LeetCode——两数之和、三数之和、四数之和

两数之和、三数之和两数之和解法一解法二三数之和解法一解法二两数之和题目地址:两数之和题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解...

2019-08-26 22:17:29 1191 1

原创 Java电商秒杀系统性能优化(四)——查询优化缓存之多级优化-接触高性能缓存方案

多级优化缓存概览1、缓存设计原则2、多级缓存方案一、Redis集中式缓存1.1 Redis sentinal哨兵模式1.2 Redis cluster模式1.3 Redis集中式缓存商品详情页接入1.4 Redis集中式缓存压测效果验证二、本地热点缓存2.1 Guava cache2.2 实现Guava cache2.3 本地数据热点缓存压测结果验证三、nginx proxy cache缓存3.1...

2019-08-26 18:29:30 2014

原创 Java并发编程——synchronized关键字

synchronized关键字概述一、线程安全问题二、如何解决线程安全问题三、synchronized 同步方法或者同步块1、synchronized方法2、synchronized 同步块3、class 对象锁四、可重入性五、注意事项1、内置锁与字符串常量2、锁的是对象而非引用六、总结概述在 Java 中,提供了两种方式来实现同步互斥访问:synchronized 和 Lock。本文针对 ...

2019-08-26 14:42:05 344

原创 Java并发编程——volatile关键字

Java并发编程——volatile关键字概述一、内存模型二、并发编程的三个概念三、Java内存模型四、剖析volatile关键字4.1 volatile关键字的两层含义4.2 volatile能否保证原子性五、使用volatile关键字场景六、总结常见问题概述在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性、可见性和有序性。只要有一条原则没有被保证,就...

2019-08-26 11:39:35 601 2

原创 Nginx常见面试题

Nginx常见面试题1、解释一下什么是Nginx?2、请列举Nginx的一些特性3、解释Nginx如何处理HTTP请求4、在Nginx中,如何使用未定义的服务器名称来阻止处理请求?5、使用“反向代理服务器”的优点6、解释Nginx服务器上的Master和Worker进程7、如何通过不同于80的端口开启Nginx?8、请解释是否有可能将Nginx的错误替换为502错误、503?9、在Nginx中,解...

2019-08-24 16:38:58 1896

原创 Java电商秒杀系统性能优化(三)——分布式扩展

分布式扩展一、 单机容量问题1.1 单机容量问题表象,水平扩展方案在上一篇博客中,tomcat性能调优,虽然我们对tomcat的内嵌配置进行了修改,但是单机容量的性能瓶颈仍然影响着整个项目的运行效率。在本篇博客中,在此基础上进行反向代理负载均衡的优化,深入讲解nginx高性能的原因,并且使用nginx作为动静分离的服务器部署,同时在项目中引入分布式会话管理的机制来解决登录一致态的问题。一、 单...

2019-08-24 12:22:08 1492

原创 LeetCode(242)—有效字母的异位词

有效字母的异位词题目描述解题思路一代码1:解题思路二解题思路三:题目地址:有效字母的异位词题目描述给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词;示例1:输入: s = "anagram", t = "nagaram"输出: true示例2:输入: s = "rat", t = "car"输出: false解题思路一对于字符串s和t,可以...

2019-08-23 22:44:38 288

原创 Java电商秒杀系统性能优化(二)——云端部署,性能压测【从本地调试到云端上线的必经之路】

云端部署,性能压测云端部署流程1、 云端部署硬件功能2、云端部署java环境3、云端部署MySQL数据库环境4、云端部署应用服务研发环境性能压测,发现并发容量问题jmeter性能压测发现容量问题Tomcat性能优化Tomcat的作用Tomcat默认内嵌配置Tomcat调优发现容量问题在云端的部署秒杀项目的方案及云端部署的意义,引入了jmeter压测工具完成了性能的摸底测试,发现容器等基础配置的性...

2019-08-23 18:11:25 1295 1

原创 Java容器面试题

Java容器面试题1、set(HashSet、LinkedHashSet、TreeSet)2、Map及Map的三种常用实现3、Collection.sort()原理4、CAS实现原理,以及ABA问题1、set(HashSet、LinkedHashSet、TreeSet)Set不包含重复的元素,这是Set最大的特点,也是使用Set最主要的原因。常用到的Set实现有 HashSet,LinkedH...

2019-08-23 10:57:19 942

原创 Java容器源码分析—迭代器

迭代器概述迭代器模式1、定义与结构概述迭代器的好处是封装容器的内部实现细节,对于不同的集合,可以提供统一的遍历方式,简化客户端的访问和获取容器内的数据;迭代器模式1、定义与结构迭代器(Iterator)模式:提供一种方法访问一个容器(container)对象中的各个元素,而又不需暴露该容器对象的内部细节;...

2019-08-23 10:01:22 165

原创 Java电商秒杀系统性能优化(一)——电商秒杀系统框架回顾

电商秒杀系统框架回顾项目简介外部依赖框架回顾项目要点项目中存在的问题小结课程是免费的,课程地址如下:SpringBoot搭建电商秒杀项目,课程真的很棒,作者的思路很清晰,建议各位读者可以跟着视频练习一下这个项目;项目简介通过SpringBoot快速搭建的前后端分离的电商基础秒杀项目。项目通过应用领域驱动型的分层模型设计方式去完成:用户otp注册、登陆、查看、商品列表、进入商品详情以及倒计时秒...

2019-08-23 00:35:12 2146 3

原创 Java容器源码分析—List

List概述ArrayList1、ArrayList概览2、扩容方法3、元素的删除4、Fail-Fast5、Fail-Safe6、序列化Vector1、同步2、扩容3、CopyOnWriteArrayList 类3.1 读写分离3.2 适用场景LinkedList1、概览2、LinkedList数据结构3、删除4、与ArrayList相比ArrayList,LinkedList 和Vector 面...

2019-08-22 17:17:16 268

原创 初学MySQL—读写分离

读写分离概述强制走主库方案Sleep方案判断主备无延迟方案配合semi-sync等GTID方案总结概述读写分离的主要目标是分摊主库的压力,上图的结构是客户端主动做负载均衡,由客户端来选择后端数据进行查询;另一种架构是MySQL和客户端之间有一个中间代理层proxy,客户端只连接proxy,由proxy根据请求类型和上下文决定请求的分发路由。两种方案:客户端直连方案:查询性能好一点,...

2019-08-22 10:53:26 342

原创 Java容器源码分析—HashTable

HashTable概述HashTable在JDK中的定义HashTable数据结构HashTable的快速存取1、put(key,value)2、get(Object key)HashMap、HashTable与ConcurrentMap的联系和区别1、Hashtable与HashMap的联系和区别2、Hashtable与ConcurrentHashMap的联系和区别概述HashTable底层...

2019-08-21 18:35:54 167

原创 Java容器源码分析—LinkedHashMap

LinkedHashMap概述LinkedHashMap在JDK中的定义1、类结构定义2、成员变量定义3、基本元素EntryLinkedHashMap的快速存取1、put(key,value)2、get(Object key)3、resize()LRU缓存LinkedHashMap和HashMap的区别概述LinkedHashMap是HashMap的子类,其具有HashMap的所有特性;Li...

2019-08-21 16:19:20 191

原创 Java容器源码分析—ConcurrentHashMap

ConcurrentHashMap一、概述二、ConcurrentHashMap的定义2.1、类的定义2.2、成员变量定义2.3、段的定义:Segment2.4、HashEntry三、ConcurrentHashMap的并发存取3.1 JDK 1.7 put(key,value)3.2 JDK1.7 get(key,value)3.3 JDK 1.7 remove3.4 CorcurrentHas...

2019-08-21 13:36:34 397

原创 初学MySQL——高可用性

高可用性主备延迟主备延迟来源可靠性优先策略可用性优先策略总结先看一下双M结构的主备切换流程图:主备延迟先了解一下“同步延迟”的概念:主库A 执行完成一个事务,写入 binlog,我们把这个时刻记为 T1;之后传给备库 B,我们把备库 B 接收完这个 binlog 的时刻记为 T2;备库 B 执行完成这个事务,我们把这个时刻记为 T3;所谓主备延迟,就是同一个事务,在备库执行完成...

2019-08-21 09:51:18 274

原创 Java容器源码分析——HashMap

HashMapHashMap1、存储结构2、HashCode计算3、HashMap参数以及扩容机制4、get源码5、put源码6、JDK 1.8中的优化(HashMap)7、常见问题TreeMap:基于红黑树实现;HashMap:基于哈希表实现;HashTable:和 HashMap 类似,但它是线程安全的,这意味着同一时刻多个线程可以同时写入 HashTable 并且不会导致数据不一致。...

2019-08-20 16:16:02 456

原创 初学MySQL—主备一致

主备一致MySQL主备的基本原理binlog的三种格式对比为什么会有mixed的binlog格式循环复制问题总结binlog可以用来归档,也可以用来做主备同步,为什么备库执行了binlog就可以和主库保持一致?MySQL主备的基本原理状态1中,客户端的读写都直接访问节点A,节点B是节点A的备库,只是将A的更新同步到本地执行,保证节点A和B的数据是相同的;状态2中,客户端读写访问的都是节点...

2019-08-20 10:28:01 245

原创 初学MySQL—MySQL是如何保证数据不丢失的?

MySQL是如何保证数据不丢失的?binlog的写入机制redo log的写入机制只要redo log和binlog能够持久化到磁盘中,就能确保MySQL在异常重启后,数据可以恢复。下面一起来了解下MySQL中binlog和redo log的写入流程。binlog的写入机制事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中...

2019-08-19 08:30:08 990

原创 Java基础知识—输入输出流

输入输出流1.1 Java IO流的实现机制是什么1.2 Java Socket是什么1.3 Java NIO是什么1.4 Java序列化1.5 System.out.println方法需要注意哪些问题1.1 Java IO流的实现机制是什么流可以看作是一组有序的字节集合,即数据在两设备之间的传输,本质是输出传输,根据处理数据类型的不同,分为字节流和字符流,字节流以字节(8bit)为单位,包含...

2019-08-17 11:16:37 289

原创 Java基础知识—异常处理

异常处理1.1 finally块中的代码什么时候执行1.2 异常处理的原理是什么?1.3 运行时异常和普通异常有什么区别1.4 常见的异常1.5 throw和throws有什么区别?1.6 java异常体系1.1 finally块中的代码什么时候执行finally代码块的作用就是为了保证无论出现什么情况,finally中的代码一定会执行,在return前执行。如果try-finally或者ca...

2019-08-16 17:23:13 201

原创 Java基础知识—字符串和数组

字符串和数组1.1 字符串的创建与存储的机制1.2 “==”、equals和hashCode有什么区别1.3 String、StringBuffer、StringBuilder和StringTokenizer有什么区别1.4 Java中数组是不是对象1.5 数组的初始化方式有哪几种1.6 length属性与length()方法有什么区别1.1 字符串的创建与存储的机制对于String s1 ...

2019-08-16 16:06:55 248

原创 初学MySQL—加锁规则

加锁规则加锁规则案例一:等值查询间隙锁案例二:非唯一索引等值锁案例三:主键索引范围锁案例四:非唯一索引范围锁案例五:唯一索引范围锁bug案例六:非唯一索引上存在“等值”的例子案例七:limit加锁案例八:一个死锁的例子总结间隙锁在可重复读隔离级别下才有效,本篇博文默认是可重复隔离级别加锁规则总结为两个“原则”、两个“优化”和一个“bug”原则1:加锁的基本单位是next-key lock...

2019-08-16 11:30:57 370

原创 Java基础知识—基本类型和运算

基本类型和运算1.1 java中的基本数据类型1.2 什么是不可变类1.3 值传递和引用传递的区别1.4 不同数据类型的转换有哪些规则1.5 强制类型转换的注意事项1.6 运算符的优先级1.7 Math类中的round、ceil和floor方法的功能1.8 ++i和i++有什么区别1.9 如何实现无符号数的右移1.10 char型变量是否可以存储一个汉字1.1 java中的基本数据类型int...

2019-08-15 15:36:56 200

原创 Java基础知识—关键字

关键字1.1 变量命名规则1.2 break、continue以及return有什么区别1.3 final、finally和finalize有什么区别1.4 assert作用1.5 static关键字的作用1.6 使用switch时有哪些注意事项?1.7 volatile有什么作用?1.8 instanceof作用1.9 strictfp有什么作用1.1 变量命名规则变量名、函数名、数组名统称...

2019-08-15 12:51:02 185

原创 初学MySQL—幻读

幻读幻读幻读的问题解决幻读总结幻读看一下下面的场景:假设只在id=5这一行加行锁,来看一下Q1、Q2、Q3的返回结果。Q1只返回了id=5这一行;T2时刻,session B 把 id=0 这一行的 d 值改成了 5,因此 T3 时刻 Q2 查出来的是id=0 和 id=5 这两行;在 T4 时刻,session C 又插入一行(1,1,5),因此 T5 时刻 Q3 查出来的是 i...

2019-08-15 09:59:49 938

原创 win10+Hexo+Nodejs+git快速部署github.io个人博客

win10+Hexo+Nodejs+git快速部署github.io个人博客效果图:个人博客你是不是想快速入门搭建一个github.io,无论是当个人博客,还是用作简历上的主页展示,github.io个人博客都是极其便捷的,这篇博客将带你入门如何利用Hexo搭建github.io个人博客。Hexo是一款基于Node.js的静态博客框架,可以方便的生成静态网页托管在GitHub上。相较于...

2019-08-15 00:29:11 1434

原创 Java基础知识—面向对象技术

面向对象技术面向对象技术1.1 面向对象和面向过程1.2 面向对象有哪些特征1.3 面向对象开发的优点1.4 继承1.5 组合和继承的区别1.6 多态的实现机制重载和重写的区别1.7 抽象类与接口有什么异同1.8 内部类1.9 如何获取父类的类名1.10 this和super的区别面向对象技术1.1 面向对象和面向过程面向对象是,将数据和对数据操作方法作为一个相互依存的整体即为对象。对于同类...

2019-08-14 15:00:11 327 1

mobil_mask_rcnn_coco.h5

采用mobilenet_v1替换原作者采用的resnet50,对于coco2014数据集进行重新训练,迭代了160k次,最终得到的模型模型大小为93m,原模型270多m,同时运算速度大大的提升了,感兴趣的同学可以去下载一下,不用gpu,可以直接在配置好环境的CPU就可以跑起来!

2018-07-12

空空如也

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

TA关注的人

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