LeetCode刷题笔记
迫于找工作,不得不一边鄙视自己的智商,一边硬着头皮刷LeetCode。既然开始刷题,那顺便做个笔记,以便日后温习。
因为顺序是乱的,所以请善用CTRL-F。
我,很不幸,于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的执行顺序是:DispatcherServletDispatcherServlet将请求发送至Interceptor,Interceptor执行preHandle()方法ControllerInterceptor执行postHandle()方法最近折腾了下用Tailscale搭建虚拟局域网,在这里记录一下折腾的过程和一些心得。
就在刚刚,我一个误操作,在没有本地备份的前提下,force push了一个GitHub上的仓库。万幸最后恢复成功,数据拿回来了。惊魂未定之余,在此记录我的抢救过程以供参考。
前段时间瞎折腾,给自己的黑莓Bold 9900写了个通过NTP同步时间的小工具,顺便在这里记录一下我在实现一个NTP客户端时对这个协议的理解。
太长不看:关闭IPv6或许可以解决。如果你平时要用到IPv6,那就在更新之前先禁用IPv6,更新完了再打开;如果开不开IPv6对你来说没区别的话,那永久关闭也不是不可以。当然如果你愿意,下文提到的改注册表的方案也是可用的。
这两天在给微软模拟飞行下载更新的时候,就算挂着网易UU,速度也一直很慢,时常在0.5MB/s~5MB/s之间波动,不论怎么换节点也不能跑出正常的速度。今天经过一顿上网冲浪,发现这个问题的根源,在IPv6。
其实网上针对这个问题已经有一些解决方案了,但内容看下来都一样,不外乎教你怎么关掉IPv6。但我一方面要用到IPv6,另一方面也不想那么粗暴的解决问题,所以又稍微做了点研究,顺便写了个小工具方便其他有这个问题的玩家。 经过一段时间的试用后发现,临时/永久关闭IPv6实际上是最优雅的方案……