
java
孙哈航
为初学者铺路,向前辈致敬!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
AtomicInteger源码级模仿拓展实践
前言目前就职于国内比较大的一家保险公司, 昨天所有技术人员减半, 原因是技术部大领导换人… 作为组内唯一的幸存者, 心里还是有一丝丝的窃喜, 下面我教大家怎么写出别人难以维护的代码.骚操作开始了今早接到了一个需求, 大概就是写个拦截器做限流, 项目背景java常规springboot, 双节点服务器, 要求每个节点单独限流, 对其中三个接口分别限流200,200,100, 总限流500, 在接口不繁忙的情况下其他接口可以占用流量, 这里可以用三个AtomicInteger清晰的完成要求, 但是总限流这原创 2020-05-28 23:08:24 · 275 阅读 · 0 评论 -
接上一篇Http连接池的应用
改动后的代码, 支持多个url长连接import org.apache.http.*;import org.apache.http.client.HttpRequestRetryHandler;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpP原创 2020-05-27 20:52:43 · 220 阅读 · 0 评论 -
Http连接池PoolingHttpClientConnectionManager的应用
前言Http连接需要的三次握手开销很大, 传统的HttpURLConnection并不支持连接池, HTTP1.1以上默认开启keepalive, 对于现在springcloud横行的社会, feign可以配置好http连接池, 不过总会有某些个别的接口不在服务中, 还有一些非springboot的老旧项目也要加入cloud大家族中, 对于内部频繁访问的url地址, 这就需要一款量身定做的工具类了.讲解先来看看测试效果, 两种工具类的时间消耗对比.这个是测试用的方法, 前后分别调用了某一接口100原创 2020-05-26 21:49:14 · 10161 阅读 · 4 评论 -
@PostConstruct的应用场景
前言最近在代码中两次看到同事使用@PostConstruct的场景, 有些别扭, 但是也不能说不对, 毕竟是在项目初始化的时候, 代码只会执行一次, 下面我挨个举例说明并附上正统用法.参考代码1@Configuration@EnableApolloConfigpublic class MqConfig { @Value("${rabbitMq.returnVisit.result.exchange}") public String RABBITMQ_RETURNVISIT_RESULT_EXC原创 2020-05-25 20:23:03 · 2113 阅读 · 0 评论 -
rabbitmq消费者限流的一个小问题
前言对于消费者限流一般都是channel.basicQos(1)来做, 在各种资料中亦可看到channel.BasicQos(0, 1, false)这种写法, 有什么区别呢?分析通过阅读rabbitmq源码, 可跟踪到括号中三个参数分别对应的值public static class Qos extends Method implements com.rabbitmq.client.AMQP.Basic.Qos { public static final int INDEX原创 2020-05-25 12:23:35 · 618 阅读 · 0 评论 -
旧系统改造之响应式编程的应用
前言java是一门庞大的语言, 说他庞大是因为用的人太多了, 我觉得他也是未来的趋势, 他在不断的吸收来自各方的优点, 将事物创造的过程越来越自然化, 事物本身就是完美的简洁的, 如果一段代码很复杂晦涩难懂, 那他一定是错的, 是可以优化的. 说的多了, 本文主要讲RxJava2在具体项目中的应用, 这个是jdk8之后加入的功能, 那么他是怎么来的, 为什么要来呢?引入现代应用需要应对大量的...原创 2020-05-05 11:06:03 · 269 阅读 · 0 评论 -
网上书店(基于servlet3.0的原生代码)
前言这是我多年前初学javaWeb, 做的第一个项目. 基于原生servlet3.0的书店, 功能多, 登录注册动态数字图片验证, 发送邮件, 购买图书, 每日图书推荐, 有管理员后台上传下载编辑图书, 模仿百度搜索框, 可动态搜索, 还可以开启黑洞效果.部分截图tomcat配置界面, 代码解压后用idea打开即可运行后记有问题请在评论区留言, 下面是完整代码的下载链接,...原创 2020-05-05 10:49:12 · 659 阅读 · 1 评论 -
redis之缓存码表
前言本篇是一个简单的将常用的码表缓存进redis的代码, 防止频繁访问数据库.说明由于是小系统内部使用, 没有对redis做防止雪崩的处理.加入了页面动态控制:可随配置项动态更新redis的内容提供了6中访问数据的键值对格式可同步所有数据, 也可监测redis和数据库的差异数据. 均对代码做了优化处理. 其中查重数据的算法值得推荐一下, 利用map的key非重复...原创 2020-05-04 13:13:07 · 532 阅读 · 0 评论 -
springMvc自定义注解实现拦截器限流
前言本文适用于springMvc, 当然也包括springboot代码自定义拦截器注解:@Retention(RUNTIME)@Target(METHOD)public @interface AccessLimit { // controller url 必填 String pathInfoC(); // 最大并发量 int processQuantit...原创 2020-05-04 11:54:56 · 408 阅读 · 0 评论 -
http工具类
前言一个http工具类代码import org.apache.http.HttpStatus;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.method...原创 2020-05-04 11:48:20 · 487 阅读 · 2 评论 -
redis工具类设计之回调函数的使用
前言我们平时在项目中手写共同工具类的时候, 对于好多异常的处理很是头疼, 对于各种连接, 各种io的开启关闭控制都是一个头大的事情, 放在具体使用阶段进行处理又怕别人使用的时候忘记关闭. 这个时候回调函数的作用就体现出来了.代码回调函数需要一个接口, 当然写到类中也是没有问题的:public class RedisTemplate { private Jedis jedis; ...原创 2020-05-04 11:45:07 · 1276 阅读 · 0 评论 -
用策略模式解耦rabbitmq的消费者
前言网上充斥着各种rabbitmq的工具类, 只是简单的说明了使用方法, 并没有对代码进行优化, 当真正应用到系统中时, 各种if-else的逻辑填满了整个工具类, 臃肿又庞大. 我们来对其瘦身.代码策略模式是用的比较多的设计模式, 主要应对的情况就是if-else. 首先是准备好的工具类, 不包含业务逻辑:@Configuration@EnableApolloConfigpublic...原创 2020-05-04 11:15:39 · 341 阅读 · 0 评论 -
旧系统升级改造之java导出excel无大小限制
前言某日, 我接到了一个需求, 优化现有系统的报表模块, 经过与产品经理沟通及调查发现, 报表导出超过10w条的数据会导致oom, 所以之前一直限制导出数量在10w以下, 这个数字对于一线的业务人员简直不能忍受, 有时候一个月的数据需要手动导出三次再合并才能使用.经过优化, 我将报表整个模块抽离出旧系统做成一个报表服务, 具体处理用异步mq缓解数据库的压力, 可动态配置消费者个数即为数据库的并...原创 2020-05-04 10:57:26 · 838 阅读 · 0 评论