自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 问答 (2)
  • 收藏
  • 关注

原创 并行流适用场景-CPU密集型

文章目录1. 场景描述2. 原因猜测3. 测试3.1 默认并行流线程数3.2 提高并行流线程数3.3 测试结果:6w个任务4. 总结4.1 I/O密集型4.1 CPU密集型5. 参考资料1. 场景描述​ 每天有一次定时任务,需要向300w用户推送支付宝模板消息,单台服务器初次尝试30w个消息推送时,耗时4.6个小时,使用的是并行流推送的方式。2. 原因猜测​ 通过监控观察到,推...

2019-05-21 11:27:50 1953 2

原创 redis事务的限制

文章目录redis 事务1. 记录游戏次数2. 扣减库存redis 事务redis虽然有事务,不过事务内执行的命令没有真正执行的返回值,命令是延期执行,回滚操作只能发生在命令执行前,这也就导致redis事务只能用在不需要命令返回值的情况。1. 记录游戏次数游戏次数只是做一个记录,准确性要求也不高,也不需要有返回值判断,这种场景可以用redis事务进行回滚操作@Test publi...

2019-05-10 11:51:24 193

原创 结合glowroot和jmeter的性能优化

文章目录1. 场景2. 优化之前2.1 调用图分析2.2 sql调用分析3. 第一次优化3.1 调用图分析3.2 sql调用分析1. 场景场景:首页接口,涉及的信息有用户信息、可兑换奖品信息、任务列表信息,在高并发的情况下,就会出现性能问题。{ "errCode": "e0000", "errMessage": "ok", "body": { "sig...

2019-03-28 19:41:51 2911 9

原创 juc部分工具类使用-并发测试

文章目录1. 工具1.1 CountDownLatch:线程等待1.2 CyclicBarrier:栅栏,控制线程同时到达某个阶段1.3 Phaser:多阶段栅栏2. 实际使用2.1 CountDownLatch结合Phaser2.2 CountDownLatch结合CyclicBarrier3. 参考链接1. 工具1.1 CountDownLatch:线程等待​ 比如在测试并发时,主...

2019-03-28 16:19:56 276

原创 逃逸分析-JIT优化

文章目录1. 逃逸分析1.1 栈上分配1.2 标量替换1.3 锁消除参考文章:1. 逃逸分析作用:方法体中创建的对象是线程私有的,若是返回给调用者则出现逃逸现象开启逃逸分析:开启逃逸分析后,在JIT(即时编译:将热点代码翻译成机器代码)阶段,会优化对象创建时内存分配。1.1 栈上分配作用:对象并不是都分配到堆内存中,但对象只是方法私有时,开启逃逸分析则会将这部分对象创建在栈上分配,...

2019-03-27 20:15:36 229

原创 aop使用-响应时间记录,自定义注解

文章目录1. 记录接口的响应时间2. 结合自定义注解使用2.1 自定义注解2.2 aop处理1. 记录接口的响应时间@Component@Aspectpublic class ActApiLogAop { private static final Logger logger = LoggerFactory.getLogger(ActApiLogAop.class); @...

2019-03-25 10:41:56 301

原创 comparator和comparable的区别

comparable和comparator区别comparable是在类实现后,在内部重写了compareTo方法,以此来实现比较对象comparator则是不依赖类内部的规则,若是需要特殊的比较规则,类内部无法提供该功能,则通过comparator在外部定义比较方法,而不需要修改类内部,灵活。@Data@AllArgsConstructorpublic class Student ...

2019-03-10 22:49:52 149

原创 集合迭代器

文章目录1. 迭代器作用2. 迭代器注意2.1 list for迭代时,可以移除元素,不过会导致一些元素缺失2.2 迭代器迭代,只能通过自身remove来移除元素1. 正确使用迭代器移除元素2. 错误使用集合remove方法移除:抛异常2.3 list forEach迭代时,实际用到了迭代器3. ConcurrentModificationException1. 迭代器remove方法会重新设置e...

2019-03-10 13:23:14 886

原创 深克隆浅克隆

文章目录1. 深克隆浅克隆区别2. 代码示例3. 应用场景:暂时不知道1. 深克隆浅克隆区别深克隆:将对象依赖的示例也克隆了一份出来浅克隆:只是克隆当前对象示例,对象所依赖的其他示例则不克隆2. 代码示例@Datapublic class Teacher implements Cloneable { private String name; private int a...

2019-03-10 12:29:07 109

原创 BigDecimal运算的必要性

基本数据类型运算问题​ 基本数据类型运算时,采用科学计算等方式运算,获取到的数值并不是准备的,此时是需要通过BigDecimal来对这些进行运算,得到相应需要的值。​ 比如下面浮点数相加时,0.05 + 0.01,我们需要的结果是 0.06,而实际double基本数据类型运算出来的结果是0.060000000000000005,不符合我们的需要,就需要通过BigDecimal来运算...

2019-03-07 23:53:43 157

原创 重写equals和hashCode的区别

1. 重写equals和hashCode区别1.1 list中:不需要重写hashcode,重写会提高性能重写equals是为了比较两个对象,目前需要在一个list中判断是否存在该对象使用的是 clickRecordList.contains(clickRecord) ,这种情况其实是不需要重写hashCode的,list的contains中并没有利用hashcode去做比较1.2 s...

2019-03-07 22:51:36 675

原创 redis内存回收

1. 内存回收场景当redis服务器的内存不足分配给新的键时,就会开始回收内存,要是没有开启内存回收策略(noeviction)或者内存回收失败了,redis将会对占用内存的操作(set,lpush)响应错误,但对于不会占用内存的操作正常响应(get操作等)2. 内存回收策略策略回收方法volatile-lru通过LRU算法移除过期键allkeys-lru通过L...

2019-02-28 20:37:12 130

原创 redis list同时push上万个高效处理

1. redis push 多个值进去1.1 for循环缺点:若是有上万以上的数据,甚至百万,则会耗时很长,网络连接都要很多次了1.2 lpush String…可变长/** * push多个值进去,值都是 1 * @param key * @param count * @return */ public Long lpushM...

2019-02-28 19:58:41 7097

原创 redis scan的使用

文章目录1. scan和keys比较2. 不一定每次都有数据3. 使用3.1 redisTempalte使用scan3.2 jedis使用scan1. scan和keys比较keys 在生产使用时,会导致redis阻塞一段时间,遍历所有keys时的复制度是 O(n)scan 是通过游标等机制去遍历key的,不会跟keys一样导致长时间阻塞,且时间复杂度是O(1)2. 不一定每次都有数据s...

2019-02-28 19:57:44 2613

原创 《MySQL技术内幕:InnoDB存储引擎》7. 事务

文章目录认识事务事务概念事务的分类事务的实现redo和undoredo:重做日志undo:撤销/回滚操作undo作用一:回滚undo作用二:MVCCundo格式purgegroup commit事务控制语句commitrollback隐式提交的sql语句truncate事务的隔离级别read uncommitted:读未提交-->脏读,违反隔离性read committed:读已提交(不可重...

2019-02-23 11:50:50 302

原创 《MySQL技术内幕:InnoDB存储引擎》6. 锁

文章目录1. latch和lock2. 锁lock2.1 锁的类型3. 一致性非锁定读:快照数据3.1 通过如下三个表可观察锁的情况3.2 多版本并发:MVVC4. 一致性锁定读:支持如下两种5. 自增长和锁6. 外键和锁7. 修改事务隔离级别8. 问题:for update后其他update语句会被阻塞延迟执行8.1 事务1:加排他锁(悲观锁)8.2 事务2:update已有锁的行,会被阻塞,等...

2019-02-23 11:36:49 212

原创 《MySQL技术内幕:InnoDB存储引擎》5. 锁的算法

文章目录1. innodb可重复读时默认算法:next-key lock,解决幻读现象2. 锁的3种算法1. record lock:单个记录锁2. gap lock:间隙锁,锁定一定范围,但不包括记录本身3. next-key lock:锁定一定范围,包括记录本身(innodb的算法)4. phantom problem3. 死锁1. 解决死锁方法1:超时2. 解决死锁方法2:wait-f...

2019-02-21 23:44:45 194

原创 《MySQL技术内幕:InnoDB存储引擎》4. 索引

文章目录1. 索引1.1 索引I/O次数1.2 覆盖索引为什么就不需要回表2. 聚集(聚簇)索引3. 辅助(非聚集)索引4. 分裂5. cardinality:基数6. 联合索引6.1 键是排序的6.2 第二个键无法用到索引的原因7. 覆盖索引8. MRR优化:multi-range read9. ICP优化:index condition pushdown10. 哈希算法参考资料not nul...

2019-02-21 23:32:24 169

原创 《MySQL技术内幕:InnoDB存储引擎》3. 文件(日志)

文章目录1. 参数2. 错误日志3. 慢查询日志4. 重做日志 redo log:物理页面5. 回滚日志 undo log:逻辑格式6. 二进制日志binary log6.1 表结构定义文件:frm结尾6.2 重做日志与二进制日志文件的区别1. 参数1. 动态参数:show variables like 'read_buffer_size';-- 1. 设置会话参数set session...

2019-02-17 23:10:08 115

原创 《MySQL技术内幕:InnoDB存储引擎》1.MySQL体系结构

文章目录1. 使用官方示例数据库1. 数据库与实例的关系3. MySQL数据在操作系统的表现形式:文件权限读写4. mysql配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf5. 开启远程连接:设置用户权限6. 各个引擎比较7. 连接数据库的方式1. 使用官方示例数据库MySQL官方示例数据库:https://dev.mysql.com/doc/index-oth...

2019-02-17 16:31:13 118

原创 《MySQL技术内幕:InnoDB存储引擎》2. InnoDB的体系架构

文章目录1. 后台线程1.1 master thread2. 内存池1. 缓存池1. 作用2. 算法:LRU算法,增加midpoint的LRU算法2. 缓存池列表3. 脏页刷新机制:checkpoint机制1. 脏页:在LRU中被改变的数据2. checkpoint机制4. 关键特性4.1 插入缓冲4.2 insert buffer4.3 两次写(double write)4.4 自适应哈...

2019-02-17 16:29:11 214

原创 扣减库存出现锁表情况

文章目录1. 锁表情景:查询条件没有索引时2. 解决3. 参考:1. 锁表情景:查询条件没有索引时​ 库存表中,扣库存时的where条件居然不是id而是奖品类型,而刚好是用事务控制的,微信红包还得调用微信发奖,导致锁表(间隙锁),并且这锁住的时间还是很严重的,每次都得等第三方接口调用成功处理完后续逻辑后,事务才会结束,秒杀场景下就导致了大部分用户超时失败的情况了,以下就是复现了当时的情景...

2019-02-17 15:21:54 529

原创 抽奖逻辑实现

文章目录1. 抽奖需求2. 实现2.1 思路:区间2.2 代码3. 问题3.1 抽奖成功,但发奖失败,如何处理?3.2 某一个奖品库存消耗完时,是如何处理的?1. 抽奖需求​ 根据配置奖品的概率去抽取奖品,其中总概率不一定是 1 ,此时是按照权重去抽取奖品的。2. 实现2.1 思路:区间区间[0, 10):奖品1[10, 65):谢谢参与[65, 98):奖品2[9...

2019-02-17 14:26:18 3047

空空如也

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

TA关注的人

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