理解 http 反向代理

介绍了什么是反向代理, 并与直接访问及(正向)代理进行了对比, 为便于理解, 还举了现实中购物的例子作为比喻

要理解什么是 反向代理(reverse proxy) , 自然你得先知道什么是 正向代理(forward proxy).

另外需要说的是, 一般提到反向代理, 通常是指 http 反向代理, 但反向代理的范围可以更大, 比如 tcp 反向代理, 在这里, 不打算讨论 tcp 之类的反向代理, 当文中说到反向代理时, 指的就是 http 反向代理.

正向代理通常直接称为 代理(proxy), 无需强调它是正向的, 在 http 协议中, 代理即指正向代理.

继续阅读“理解 http 反向代理”

成为更好还是成为更有钱的程序员?

为什么你要选择成为更有钱的程序员?

如果你觉得这个题目有点标题党的味道, 那我也承认确实如此. 本来我打算取的名字是"如何成为一名更好的程序员", 但认真想一想, 怎样才算更好呢? 这个标准很模糊呀!

关于目标设定上有一个所谓的 SMART 原则,

来源于管理大师彼得·德鲁克(Peter Drucker)的《管理的实践(The Practice of Management》

其中, S 代表 Specific, 也即目标必须是 具体的.

显然, "更有钱" 比 "更好" 更为具体.

M 代表 Measurable, 也即目标是 可以衡量的.

显然, "更有钱" 又比 "更好" 更加好衡量.

继续阅读“成为更好还是成为更有钱的程序员?”

理解 MD5 消息摘要算法

介绍了 md5 算法及其特性, 重点介绍了其在密码存储方面的应用

MD5 算法相信很多开发人员都听说过, 一个最常见的使用到它的地方就是密码的存储.

当然, 很多人会说, 这个算法已经不太安全了, 确实如果你想更安全的保存密码, 则应该考虑其它更安全的算法, 不过这不属于此次讨论的主题.

什么是 MD5

MD5 是一种算法, MD5 中的 MD 代表 Message Digest, 也即信息摘要.

至于数字 5, 则因它是从更早的 MD4 算法改进而来, 因此得名 MD5.

所以 MD5 即是信息摘要算法第五版.

继续阅读“理解 MD5 消息摘要算法”

使用 lombok @Slf4j 注解简化日志功能的引入

介绍了如何使用 lombok @Slf4j 注解简化日志功能的引入, 兼谈了重复性管理的问题.

在开发过程中, 打印必要的日志是必不可少的一环, 而要打印日志, 在相关的类中就要引入日志相关属性, 在传统上, 一般是通过LoggerFactory.getLogger去实现的:

package net.xiaogd.demo.mybatis.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogDemoController {

    // 自行声明
    private static final Logger log = LoggerFactory.getLogger((LogDemoController.class));

    //...
}

尽管这已经很简洁, 但如果有大量的类要做类似的操作, 还是略显重复, 从 重复性管理 的角度, 我们怎么才能尽量减少这些重复的样板代码呢?

答案就是利用 lombok 的 @Slf4j 注解.

继续阅读“使用 lombok @Slf4j 注解简化日志功能的引入”

使用 .editorconfig 文件来统一编程风格

介绍了 .editorconfig 文件及如何使用它来统一项目的编程风格, 兼谈了一些项目管理的心得.

做过长期开发的程序员都知道保持编程风格统一的重要性, 统一的风格能够降低各种成本.

有一句名言是咋说的来着? 代码主要是给人看的, 其次才是给电脑去运行.

但另一方面, 大家又普遍是偷懒的, 对于这些长期会受益, 但短期收益不明显甚至带来麻烦的事, 许多团队中的成员不能说抵制吧, 但至少是积极性不高的.

此时, 假如你是一个团队的领导者, 怎么才能有效地保持项目中编程风格的统一呢? 下面介绍的这个 .editorconfig 文件的方式将能有效地帮助我们.

继续阅读“使用 .editorconfig 文件来统一编程风格”