AI杀死了个人博客

<p>曾经,维护个人博客的一大动力是记录技术路上的踩坑经验。在那个中文搜索引擎充斥着低质量内容的时代,一篇清晰的排错笔记或知识总结不仅能帮到未来的自己,也能为在漫漫信息海中检索的同行提供一盏灯。</p> <p>然而,生成式 AI 的出现改变了一切。</p> <p>现在,遇到报错或技术难题,第一反应不再是使用 Google / Stack Overflow,而是询问 AI。它能迅速给出精准的代码片段和解释,或者直接帮你重构代码。对于 80% 的常见问题,AI 的效率是对传统搜索引擎和博客检索的降维打击。</p>

2025/3/21
阅读更多

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

<p>在Java应用中,Logback或Log4j的MDC可以帮我们实现在记录日志时携带当前上下文之外的信息。一个典型的应用场景是,当一个HTTP请求进入Spring应用后,在拦截器中向MDC写入为当前请求生成trace id / transaction id,后续业务类中打印的log都可以携带id,方便日志的定位。</p> <h2 id="MDC的实现方式">MDC的实现方式</h2> <p>由于我们经常使用Slf4j之类的log facade,在使用时只需要关心类似<code>org.slf4j.MDC</code>的类提供的接口就可以。但是在具体日志库实现时,通常会实现一个<code>MDCAdapter</code>接口以便门面MDC类调用。不论是Logback还是Log4j,实现MDC的方式都是通过<code>ThreadLocal</code>来存储我们写入MDC的数据。</p>

2022/12/17
阅读更多

新手选购微单的策略

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

2022/11/1
阅读更多

一些让Python代码更快的技巧

<h2 id="更快的字符串拼接">更快的字符串拼接</h2> <p>在你的Python程序中,如果有大量字符串等待处理,字符串拼接可能会成为一个瓶颈。基本上,Python有两种字符串拼接的方式:</p> <ol> <li> <p>使用<code>join()</code>函数将字符串列表合并为一个字符串。</p> </li> <li> <p>使用<code>+</code>或<code>+=</code>符号将每个单独的字符串添加到一个字符串中。</p> </li> </ol>

2021/11/8
阅读更多

HTTP报文结构

<p>HTTP 是 Web浏览器与服务器进行任何数据交换的基础协议,是一种客户端—服务器(client-server)协议。它依赖于TCP协议进行通讯,同时有可能依赖于应用层DNS协议以及通常被认为是传输层的TLS协议。</p> <p><img src="https://s2.loli.net/2024/02/12/NgsqIE5PufLCp3T.png?460x" alt="Web Protocol Stack"></p> <p>作为一种网络协议,了解它的报文结构通常是最基础最重要的,本文将简述HTTP报文结构。</p>

2020/1/11
阅读更多

Python日志库logging总结

<blockquote> <p><strong>转载自:</strong><a href="https://juejin.im/post/5bc2bd3a5188255c94465d31">Python日志库logging总结-可能是目前为止将logging库总结的最好的一篇文章 by Wizey</a></p> </blockquote> <p>在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置。</p> <h2 id="日志级别">日志级别</h2>

2019/12/17
阅读更多

写定向爬虫时遇到的问题

<blockquote> <p>This is a [ Personal Note ]</p> </blockquote> <blockquote> <p>单纯记录下这次写定向爬虫中遇到的问题。其实很多东西只是因为忘了,不是因为没学过,这次记录下来以便日后回顾。</p> </blockquote> <h2 id="rsync">rsync</h2>

2019/12/15
阅读更多

Java中的协变与逆变

<h2 id="逆变Contravariance与协变Covariance">逆变Contravariance与协变Covariance</h2> <p>先用一张图解释下<br> <img src="https://s2.loli.net/2024/01/15/gf1R3qiKSPmFeUb.jpg" alt="Contravariance&amp;Covariance"></p> <h2 id="Java数组是协变的">Java数组是协变的</h2>

2019/12/10
阅读更多

给Hexo主题添加LaTeX公式支持

<h2 id="问题">问题</h2> <p>使用Markdown写笔记或者文章免不了会遇到一些数学公式,许多优秀的Markdown编辑器可以完美地支持Latex书写数学公式。然而,Hexo默认是不支持识别$$ \LaTeX $$语法的。纵然有很多完善的主题,比如<a href="https://github.com/theme-next/hexo-theme-next">Next</a>,支持了inline和block的$$ \LaTeX $$语法,但是想在让自己喜欢的主题中正确显示数学公式就需要我们自己动手了。</p> <h2 id="解决方法">解决方法</h2>

2019/11/21
阅读更多

Python3中的Iterator与Iterable

<p>iterable和iterator很容易弄混的吧!</p> <h2 id="定义">定义</h2> <h3 id="Iterator">Iterator</h3>

2019/9/7
阅读更多

Rss订阅源分享

<h2 id="说在前面">说在前面</h2> <p>现在,你获取新闻的方式是什么呢?我觉得现在应该很少有人单纯地使用浏览器访问新闻门户来看新闻了。今日头条、网易新闻、腾讯新闻这样的新闻App,微信、微博这种社交应用中附加的新闻资讯,甚至各大国内厂商的浏览器,都成为了大众的新闻获取源。但是,这些App都免不了花里胡哨(乱七八糟)的UI,或者我觉得新闻来源受到监管也比较有限,或者我不喜欢根据阅读行为推送的广告。</p> <p>优秀的聚合类应用相对来说就自由许多,国外如Flipboard,国内如Zaker,这些都是我曾经长时间使用的新闻聚合App,其实长时间使用体验都不错。但是总觉得有时候缺了些什么感觉,这几天,Rss又被我捡了回来,折腾了一番源,现在用的很舒心呢。</p>

2019/8/19
阅读更多

Git Tips

<p>作为强大的版本管理工具,基本的Git命令几乎是每个程序员都应该掌握的。在实际使用中,在紧急的关口,我们需要祭出这个神奇的时间机器,却突然根本不记得Git的不常见命令,这种尴尬时刻可能很多人都遇到过。查<a href="https://git-scm.com/docs">官方文档</a>固然是一个好办法,不过下面的一些tips可能会帮你节省一些时间。</p> <h2 id="使用Git回溯到之前的commit">使用Git回溯到之前的commit</h2> <p>当你修改了一个配置文件,发现项目启动失败。当你重构了一些代码,发现程序出现bug。当你…。总是不管出现什么问题,你过去几个小时的努力可能要白费了,你想让一切恢复原状,那么就需要回溯到之前某一个正常的commit。</p>

2019/4/17
阅读更多

Redis的数据库与持久化

<h2 id="Redis服务器中的数据库">Redis服务器中的数据库</h2> <p>Redis服务器中有数据库这么一个概念。如果不指定具体的数量,默认会有<strong>16</strong>个数据库。</p> <p><img src="https://s2.loli.net/2022/04/16/h6kJXCrHeyEtjgu.jpg" alt></p>

2019/1/15
阅读更多

Redis中的数据结构

<blockquote> <p><a href="https://doc.redisfans.com/">Redis 命令参考</a><br> <a href="https://try.redis.io/">try Redis(不用安装Redis即可体验Redis命令</a></p> </blockquote> <p>Redis支持丰富的数据结构,常用的有string、list、hash、set、sortset。</p> <p>“Redis is written in ANSI C” – Redis由C语言编写</p>

2019/1/14
阅读更多

控制反转与依赖注入

<h2 id="什么是控制反转">什么是控制反转</h2> <p><strong>控制反转(Inversion of Control, 缩写IoC)</strong>,是一种面向对象的设计原则。从字面上理解,就是让控制权从类本身移交给其他类。那么是哪些控制权被反转了?答案是:“依赖对象的创建”这个控制权被移交了。移交给谁了?答案是:IoC容器。</p> <p>这样做带来的好处就是降低代码之间的耦合度,业务代码的对于底层类的依赖被降低后,底层实现就可以更容易地改变,业务代码也更容易被复用。</p>

2018/11/14
阅读更多

Vim命令笔记

<h2 id="命令历史">命令历史</h2> <p>以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。</p> <h2 id="启动vim">启动vim</h2>

2018/10/19
阅读更多

Java中的equals和hashCode方法

<h2 id="equals">equals()</h2> <p>java中处处是对象。所有类都继承自Object基类,Object基类拥有一个equals()方法。所以无论是继承自Object,还是override了基类的,所有类都拥有equals()方法。</p> <figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">equals</span><span class="params">(Object obj)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">return</span> (<span class="keyword">this</span> == obj);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

2018/10/4
阅读更多

Java中对象域的初始化

<h2 id="正确的初始化很重要">正确的初始化很重要</h2> <p>java中,一个类的域(或者说类的属性,类的数据成员)可以是基本数据类型,也可以是对象的引用。对象域如果没有被初始化,会被置为null,如果在置为null的引用上调用方法,我们就会得到一个运行时错误。<br> 在恰当的时间,恰当的位置,正确地初始化对象域是很重要的。</p> <h2 id="初始化的位置">初始化的位置</h2>

2018/10/3
阅读更多

Java中的基本类型和自动装拆箱

<h2 id="基本数据类型及包装类">基本数据类型及包装类</h2> <p>Java中的基本数据类型有byte、short、int、long、float、double、boolean、char。这几个类型都有其对应的包装类,表格中清晰展示了它们对应的包装类:</p> <table> <thead> <tr> <th>简单类型</th> <th>二进制位数</th> <th>封装类</th> </tr> </thead> <tbody> <tr> <td>boolean</td> <td>1</td> <td>Boolean</td> </tr> <tr> <td>byte</td> <td>8</td> <td>Byte</td> </tr> <tr> <td>char</td> <td>16</td> <td>Character</td> </tr> <tr> <td>short</td> <td>16</td> <td>Short</td> </tr> <tr> <td>int</td> <td>32</td> <td>Integer</td> </tr> <tr> <td>long</td> <td>64</td> <td>Long</td> </tr> <tr> <td>float</td> <td>32</td> <td>Float</td> </tr> <tr> <td>doubel</td> <td>64</td> <td>Double</td> </tr> <tr> <td>void</td> <td>–</td> <td>Void</td> </tr> </tbody> </table>

2018/10/2
阅读更多

Hello, world. 使用Hexo搭建静态博客

<h2 id="前言">前言</h2> <p>作为博客的第一篇文章,按照惯例那肯定是写一下这个博客怎么建起来的。</p> <p>看到很多大神都用Hexo来搭建自己的博客,而且看起来都很简洁舒服,自己心里也早早地想尝试一把。<br> 因为对于前端的接触确实不多,感觉搭博客这东西可能也有些费事,所以计划也一拖再拖。<br> 直到昨天,几门课程的结课考试考完啦,就想趁着心情好,折腾一把,也就有了现在看到的这个页面。</p>

2018/9/28
阅读更多