准备工作:假设这样的一个业务场景:有一个自动开票的功能需要实现,在程序里面需要根据账单的类型执行对应的处理逻辑. 以下使用了 Lombok 简化代码!!! 账单类型枚举: /** * @author ly-az * @date 12/23/2020 11:34 * 账单类型 */ public enum BillType { /** * 账单的类型 */ BT0001, BT0002 } 账单类: /** * @author ly-az * @date 12/23/2020 11:31 * 账单…
本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍),并准确定位系统瓶颈:我们应用里静态对象不是太多.有大量的业务线程在频繁创建一些生命周期很长的临时对象,代码里有问题.那么问题来了,如何在海量业务代码里边准确定位这些性能代码?本文将介绍如何使用阿里开源工具 TProfiler 来定位这些性能代码,成功解决掉了 GC 过于频繁的性能瓶颈,并最终在上次优化的基础…
技术交流群:233513714 本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍),并准确定位系统瓶颈:我们应用里静态对象不是太多.有大量的业务线程在频繁创建一些生命周期很长的临时对象,代码里有问题.那么问题来了,如何在海量业务代码里边准确定位这些性能代码?本文将介绍如何使用阿里开源工具 TProfiler 来定位这些性能代码,成功解决掉了 GC 过于频繁的…
前言: 之前写过一个工作中常见升级模式-策略模式 的文章,里面讲了具体是怎样使用策略模式去抽象现实中的业务代码,今天来拿出实际代码来写个demo,这里做个整理来加深自己对策略模式的理解.   一.业务流程 取消订单会有多种情况,比如:取消即时订单.取消预约订单.取消拼车订单   一般业务代码中我们会根据取消类型来进行不同的逻辑处理,代码中无外乎多了很多if else的业务逻辑,且代码耦合度很高.   那么有没有一种优雅的处理方式呢? 当然有了,现在就来说下我们系统中是如何处理这种问题的( 具体业…
当你在写Getter和Setter时,一定无数次的想过,为什么会有POJO这么烂的东西.你不是一个人!(不是骂人-)无数的开发人员花费了大量的时间来写这种样板代码,而他们本来可以利用这些时间做出更有价值的输出. 从我开始写Java以来,已经写了几千行代码了,其中大概50%都是样板代码,在转型之前,我就这么一直毫无怨言的写着.而最近两年,我不再Java了,转而开始写一些Python,Go和JavaScript的代码.这时我才感觉到Java中的重复的样板代码是多么令人沮丧. 值得庆幸的是,现在的ID…
转载自http://bbs.csdn.net/topics/390731832 问题: public static String getAddress(final InputStream inputStream, final String mobile) { new Thread() { public void run() { try { Log.i(TAG, "inputStream: " + inputStream.available()); String soap = readS…
https://blog.csdn.net/defonds/article/details/52598018 多次拉取 JStack,发现很多线程处于这个状态:    at jrockit/vm/Allocator.getNewTla(JJ)V(Native Method)    at jrockit/vm/Allocator.allocObjectOrArray(Allocator.java:354)[optimized]    at java/util/HashMap.resize(Hash…
<设计模式面试小炒>策略和工厂模式替代业务场景中复杂的ifelse 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟! 囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!! 本期主要面试考点 面试官考点之如何用设计模式替换业务场景中复杂的ifelse? VIP类型 import java.util.Objects; /** * @author: 欢迎关注喂信公猪号:囧么肥事 * @date: 2021/12/16 * @email: jiong…
我承认,本文的标题有一点标题党,特别是写业务代码,大家因为没有足够重视一些细节最容易调的坑(侧重Java,当然,本文说的这些点很多是不限制于语言的). 1.客户端的使用 我们在使用Redis.ElasticSearch.RabbitMQ.Mongodb等中间件或存储的时候肯定都会使用客户端包来和这些系统通讯,我们也会使用Http的一些客户端来发Http请求.在使用这些客户端包的时候,非常容易犯错的一个地方就是Client的使用方式,比如有一个叫做RedisClient的类,是Redis操作的入口…
消除重复代码代码很多种,比如: 1)提炼成函数复用 2)使用宏 3)继承 4)使用闭包(boost::bind.boost::function) 上述是最为常用的,对于C++程序,闭包可能用得相对少一点.下列代码使用的是第5种:利用#include消除重复代码: void f1() { try { ... } catch (Aexception& a) { } catch (Bexception& b) { } catch (Cexception& c) { } catch (Xe…