设计并实现一个简易的短 URL 服务
突然就对短链接服务的原理来了兴趣,于是就查了些资料,自己实现了一个很简陋的演示性的短链接服务。
突然就对短链接服务的原理来了兴趣,于是就查了些资料,自己实现了一个很简陋的演示性的短链接服务。
每次 Vercel 部署之后,它都会在部署的 commit 下面发个类似这样的留言:
Successfully deployed to the following URLs:
blog – ./
blog-boris1993.vercel.app
boris1993.com
而且 GitHub 还会给我发邮件通知这个留言的内容,但是这个消息说实话没啥用,白白麻烦人而已,后来发现,在项目根目录创建一个名为 vercel.json
的文件,里面写上这样的配置就行:
1 | { |
这个配置的作用就是让 Vercel 不再往这个 repo 的 commit 下面评论部署状态。提交之后,Vercel 就会在这次部署开始遵循 vercel.json
的设定,不会再发送评论,自然也就不会有那封 “骚扰邮件” 了。
距离上一篇 Concourse 相关的文章发布,已过去两年有余,期间因为没什么使用场景,不知道该怎么继续写下去,于是就断了。这次,我终于有机会将 Concourse 用到我自己的 home lab,并成功完成了一条 pipeline。
我,很不幸,于 2022-12-23 夜,新冠奥密克戎发作。不过,最近记录自己被感染的生活好像是个流量密码,那我干脆也蹭一波热点,记录一下我感染之后的感受。
上个月冲动消费,入手了一台 HPE ProLiant MicroServer Gen8。其实我早想搞一台正经的服务器来玩了,因为群晖的魔改 Linux 总是玩的不那么爽。现在心愿实现,开始折腾。
本篇为二手 MicroServer Gen8 折腾记的第一篇,记录拿到服务器之后做的一些初始化的工作。
太长不看:默认情况下 servlet
不是线程安全的;Spring bean
是否线程安全取决于这个 bean 的 scope。
刚才面试的时候被问到了关于线程安全和死锁的问题,有点露怯,故赶紧查漏补缺,记录于此。
Filter
是 Servlet
规范制定的,受 Servlet
容器支持,接口定义在 javax.servlet
包中。Filter
是被 Web Server(如 Tomcat
)调用。Filter
需要在 web.xml
中定义之后才会起作用。Filter
只在请求的前后起作用,Servlet
对于 Filter
来说是一个黑盒。Filter
的执行顺序是:void init(FilterConfig)
- 容器在初始化 Filter
时调用,在 Filter
生命周期内仅会被调用一次。方法可以抛出 ServletException
。doFilter(ServletRequest, ServletResponse, FilterChain)
- Web 容器每一次请求都会调用该方法。该方法将容器的请求和响应作为参数传递进来, FilterChain
用来调用下一个 Filter
。void destroy()
- 当容器销毁 Filter 实例时调用该方法,可以在方法中销毁资源,该方法在 Filter 的生命周期只会被调用一次。Interceptor
是 Spring
容器内的,由 Spring
框架提供支持。接口 HandlerInterceptor
定义在 org.springframework.web.servlet
包中。Interceptor
是被 Spring
调用。Interceptor
可以深入到方法前后、异常抛出前后等,比起 Filter
有更大的弹性。Interceptor
还允许用户介入请求的生命周期,可以在请求过程中获取信息,通常与请求更加耦合。Interceptor
的执行顺序是:DispatcherServlet
DispatcherServlet
将请求发送至 Interceptor
,Interceptor
执行 preHandle()
方法Controller
Interceptor
执行 postHandle()
方法最近折腾了下用 Tailscale 搭建虚拟局域网,在这里记录一下折腾的过程和一些心得。