0%

在描述 Dockerfile 的时候,对于 RUNCMDENTRYPOINT 三个命令,用法十分相似,功能也差不多,容易让人混用。其实一般来说,三个命令都能完成需要的操作,而差异点常常被一些使用者忽略。这里简单说一下,三个命令的不同之处。

阅读全文 »

sed 是非常常用的流式处理编辑工具,配合正则表达式可以进行十分效率的文字处理。它通过逐行地将文字读取,暂存进模式空间,通过指定的命令进行处理后,输出至标准输出,直到文件或者说输入的结束。原理十分简单,来学习一下吧。

阅读全文 »

java.util.concurrent 包中提供了许多易用而有效的工具类,诸如 ReentrantLockCountDownLatchSemaphore 等等,给日常的并发编程带来了许多便利。他们都使用了同样的框架来完成基本的同步过程:AbstractQueuedSynchronizer (AQS)来实现基本功能,比如获取资源和释放的步骤。

阅读全文 »

主要构成

Ribbon 是由 netflix 开源的一个客户端负载均衡组件。从客户端的角度取维护服务间请求的负载均衡,并进行一定的容错处理。
自然的它的核心接口就是:com.netflix.loadbalancer.ILoadBalancer

在配置 Ribbon 之前,了解一下 Ribbon 完成负载均衡的几个重要组成部分:

  • IRule:负载均衡的策略。
  • IPing:检测服务存活的策略。
  • ServerList<T>:拉取服务实例列表的策略。
  • ServerListUpdater:更新服务列表的触发策略。
  • ServerListFilter<T>:服务过滤方案。
阅读全文 »

日常开发中,经常需要进行一些文本处理,这通常是十分繁琐而无趣的。学会并利用正则表达式可以快速解决这类文本处理问题,无论是在 Java,Python 等代码中抑或是 shell 环境下。
正则中存在很多细小的知识点,十分容易遗忘,着手记录,知识整理还是有所必要。

阅读全文 »

尽管当下几乎所有的服务器环境都以集群为主,在考虑并发问题的时候通常会使用分布式技术,如 redis 等中间件来维护全局的资源和锁。但是对于一些实例层面上的资源,依旧需要使用传统的锁来维护。所以我觉得,理解 JVM 对锁的处理还是有价值的。

JVM上针对锁的处理(这里只描述内部锁,即 synchronized 的处理情况),除了有自旋锁锁粗化锁消除等简单的自动优化机制(不探讨啦),还可以从锁的维护的角度去看,可以分为偏向锁轻量级锁重量级锁
三者的开销是递增的,演变顺序也是递增的,而且不可逆。
如轻型的锁可以膨胀升级至重型锁,但是不可以从重型的锁降级。

阅读全文 »