Xudong's Blog

让MDC在各种线程间穿梭自如

在Java应用中,Logback或Log4j的MDC可以帮我们实现在记录日志时携带当前上下文之外的信息。一个典型的应用场景是,当一个HTTP请求进入Spring应用后,在拦截器中向MDC写入为当前请求生成trace id / transaction id,后续业务类中打印的log都可以携带id,方便日志的定位。

MDC的实现方式

由于我们经常使用Slf4j之类的log facade,在使用时只需要关心类似org.slf4j.MDC的类提供的接口就可以。但是在具体日志库实现时,通常会实现一个MDCAdapter接口以便门面MDC类调用。不论是Logback还是Log4j,实现MDC的方式都是通过ThreadLocal来存储我们写入MDC的数据。

新手选购微单的策略

摄影 or 摄像

购买一个微单最先要考虑的问题不是画幅、品牌或者镜头,而是自己的需求。自己更想拿来拍照还是拿来拍视频,还是两者都要。

如果是想要偏向拍照,那么底大一级压死人是要着重考虑的问题,如果不是预算受限,或者对轻便有较高要求,建议一步到位买一个全画幅微单。这样以后拍不好照片不会心里碎碎念,当初要是上个全画幅我就能拍好了😌。
但是APS-C也不是没有优势,特别是对于随便玩玩的爱好者而言,APS-C机身和镜头价格相对友好,可以让爱好者以更低门槛尝试摄影。另外APS-C的机身和镜头轻便,对于旅行、街拍等场景负重更少,体验会更好。

一些让Python代码更快的技巧

更快的字符串拼接

在你的Python程序中,如果有大量字符串等待处理,字符串拼接可能会成为一个瓶颈。基本上,Python有两种字符串拼接的方式:

  1. 使用join()函数将字符串列表合并为一个字符串。

  2. 使用++=符号将每个单独的字符串添加到一个字符串中。

HTTP报文结构

HTTP 是 Web浏览器与服务器进行任何数据交换的基础协议,是一种客户端—服务器(client-server)协议。它依赖于TCP协议进行通讯,同时有可能依赖于应用层DNS协议以及通常被认为是传输层的TLS协议。

Web Protocol Stack

作为一种网络协议,了解它的报文结构通常是最基础最重要的,本文将简述HTTP报文结构。

写定向爬虫时遇到的问题

This is a [ Personal Note ]

单纯记录下这次写定向爬虫中遇到的问题。其实很多东西只是因为忘了,不是因为没学过,这次记录下来以便日后回顾。

rsync

给Hexo主题添加LaTeX公式支持

问题

使用Markdown写笔记或者文章免不了会遇到一些数学公式,许多优秀的Markdown编辑器可以完美地支持Latex书写数学公式。然而,Hexo默认是不支持识别$$ \LaTeX $$语法的。纵然有很多完善的主题,比如Next,支持了inline和block的$$ \LaTeX $$语法,但是想在让自己喜欢的主题中正确显示数学公式就需要我们自己动手了。

解决方法

Git Tips

作为强大的版本管理工具,基本的Git命令几乎是每个程序员都应该掌握的。在实际使用中,在紧急的关口,我们需要祭出这个神奇的时间机器,却突然根本不记得Git的不常见命令,这种尴尬时刻可能很多人都遇到过。查官方文档固然是一个好办法,不过下面的一些tips可能会帮你节省一些时间。

使用Git回溯到之前的commit

当你修改了一个配置文件,发现项目启动失败。当你重构了一些代码,发现程序出现bug。当你…。总是不管出现什么问题,你过去几个小时的努力可能要白费了,你想让一切恢复原状,那么就需要回溯到之前某一个正常的commit。