LinkedHashMap实现lru原理

lru全称是least recently used,即最近最少使用。该算法一般应用于内存缓存场景,提供了在缓存数据规模增大时限制数据集合大小,优先保留热点数据的方案。lru在数据规模到达集合上限时会优先清理上次访问时间距当前最久的数据,这样的好处在于能够保证热点数据更长时间驻留,有利于提供系统的整体访问性能,减少从外存或磁盘读取数据的次数。

阅读更多

优秀文章收藏

探索 ConcurrentHashMap 高并发性的实现机制

阅读更多

Dubbo服务发布流程追踪

Dubbo服务的发布主要完成在ZK的注册和在Netty的暴露两大步骤,本文旨在深入整个服务暴露流程,看看Dubbo到底做哪些事情,体会Dubbo扩展机制在流程中的运用。Dubbo的服务发布流程时序图如下所示(引自官网)

阅读更多

详解Semaphore的控制流程

今天是2016年最后一天,对于做技术的来讲,又是一年积累的结束。这一年里,学到的,错失的,都值得好好总结一下。在2016的最后几个小时里,还是决定静下心来,写一篇技术博文,把数日死磕源码的一些心得记录下来,也算对即将到来的新年表个态:做技术的,就是要有点死磕自己的工匠精神,谈不上愉悦他人,至少给自己的职业生涯定下一个基调。既然选择了,就坚持下去,不是因为无奈,而是因为热爱。

阅读更多

对金额占比展示的巧妙处理方案

在日常的业务逻辑开发中,特别涉及到金融业务中金额的前端展示,我们总是要慎之又慎,因为金额相关数据的展示不精确,往往容易导致客户投诉,也显得我们自己应用的不专业性。

譬如有如下展示的需求:用户共拥有A、B、C、D三类资产,需要在页面中展示这四类资产各自的占比,百分数保留两位小数。

阅读更多

记一次使用redis发布订阅遇到的坑

有一个计算排名的定时任务,处理过程中分主任务和子任务。主任务负责子任务的切分,如分配100个子任务,子任务执行具体的分布式任务,当所有子任务结束后,需要主任务汇总子任务处理的数据并入库。

公司目前提供的定时调度系统还不支持子任务执行成功通知主任务的机制,因此需要自己实现。经过调研,选择了redis自带的发布订阅机制,原因在于其轻量级,接入成本低。

阅读更多

dubbo的扩展机制

dubbo被广泛接纳的其中的一个重要原因就是其强大灵活的扩展机制,开发者可自定义插件嵌入dubbo,实现灵活的业务需求。扩展机制的实现是利用了SPI规范,SPI规定了实现的基本原理,但不提供具体实现。dubbo利用SPI注解自己实现了一套SPI的插件加载机制,这其中主要是由ExtensionLoader扩展加载器完成的,本文就其中的实现机制进行简述。

阅读更多

dubbo应用配置logback日志

logback日志框架可能是目前互联网公司中应用最多的,其百倍于log4j的写入性能保证了其受宠程度。logback基于slf4j的底层进行开发。本文主要结合源码分析下在dubbo应用中怎样正确配置logback进行日志的打印管理

logback的配置

maven依赖:

1
2
3
4
5
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>

阅读更多

利用hexo搭建个人博客

昨天利用hexo、github成功搭建了个人博客,将之前写的md格式的文章发布,感觉效果不错。这里简单记录下整个搭建过程,如果以后换电脑的话做个参考,如果大家看到了也可以顺着步骤一起实践,体验一下现下流行的基于github构建静态博客的酷炫过程。

  1. 安装

阅读更多

微信网页授权登录流程实现方案

微信服务号的开发中,涉及到一个比较核心的环节–用户授权登录,这样我们开发者的服务器才能够获取到微信用户的信息,方便从用户维度开展业务。微信开发者文档对登录流程有较为详细的介绍,本文着重从具体实施方案入手,并借助静默授权接口优化登录用户体验。

微信网页授权登录是典型的Auth2授权登录流程,第三方不需要微信用户的注册、登录、注册等流程,不需要存储用户密码,只需要从微信获取一个许可令牌,就可以获取微信用户信息以构建自身的用户体系。这种方式开发成本低,安全性高,而且借助微信平台易于扩展用户群体。

阅读更多