0%

这篇文章我我们来探讨一下分布式ID常用的几种生成策略思想。

UUID

UUID(Universally Unique Identifier)的标准形式包含32个16进制数字,以短划线(-)分为五段,形式为8-4-4-4-12的36个字符,示例:

1
123e4567-e89b-12d3-a456-426655440000
Read more »

一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。

DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。

Read more »

战略设计

战略设计是将“混沌”解构成“清晰”的过程,在该过程从开始到结束的历程之中,我们会划分出领域、界定通用语言范围、确定出系统限界上下文以及上下文之间的映射方式。

Read more »

SVG 介绍

以下信息摘自 维基百科

可缩放矢量图形(英语:Scalable Vector Graphics,缩写:SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。

SVG允许3种图形对象类型:矢量图形、栅格图像以及文本。图形对象(包括PNG、JPEG这些栅格图像)能够被编组、设计、转换及集成进先前的渲染对象中。文本可以在任何适用于应用程序的XML名字空间之内,从而提高SVG图形的搜索能力和无障碍性。SVG提供的功能集涵盖了嵌套转换、裁剪路径、Alpha通道、滤镜效果、模板对象以及可扩展性。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。

Read more »

ReentrantLock简介

ReentrantLock是可重入锁的实现,可重入锁的含义是:如果已经拥有锁的线程再次获取锁时会立即响应成功,这点可以使用isHeldByCurrentThreadgetHoldCount方法来检验。ReentrantLock可重入互斥锁具有同synchronized的隐式监视器锁相同的基本行为和语义,但是其更具有扩展能力。

ReentrantLock提供公平锁和非公平锁的特性,如果设置为公平锁,那么锁倾向于访问等待时间最长的线程;如果是非公平锁,那便不会保证任何特定的访问顺序。公平锁会导致整体的吞吐量降低,不过却可以在最少的时间差内获取到锁和保证锁饥饿。不过请注意,锁是公平并不能保证线程调度的公平性。

Read more »

AQS简介

AQS(AbstractQueuedSynchronizer)是一个模板类,其提供一个先进先出(FIFO)的等待队列,旨在为大多数依赖单个原子int值表示状态的同步器提供有用的基础。

AQS类支持默认的排他锁和共享锁之一或两者。在排他锁模式下获取时,其他线程尝试获取是不会成功的,共享模式由多个线程获取可能会(但不一定)成功。AQS类不会“理解”这些区别,只是锁意义上说,当成功获取共享模式时,下一个等待线程(如果存在)也必须确定它是否也能够获取。在不同模式下等待的线程共享相同的FIFO队列。

Read more »

单例模式在开发中会经常用到,那么如何实现一个优雅的单例就显的尤为重要.在实现的时候,我们需要根据具体情况考量如下信息:

  • 是否需要线程安全?
  • 是否需要懒加载?
Read more »

init config

1
2
3
4
5
6
$ git config  --global user.name lazycece
$ git config --global user.email lazycece@gmail.com
$ git config --global color.ui auto
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color.diff auto
Read more »

BsonUndefined 转换问题

关于这个问题的出现,是在业务中使用存储函数时,如果某个字段值为null,存入到数据库中会出现undefined,而随后查询会抛出ConverterNotFoundException异常信息,如下所示:

1
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.BsonUndefined] to type [java.lang.Integer]
Read more »