在 RouterOS 中配置 MSS Clamping 解决部分网站图片无法加载的问题
换成自己用 RouterOS 拨号之后,经常发现有的图片加载不出来,网上一顿冲浪之后发现可能是在 RouterOS 中没有正确配置 MTU 及 MSS,导致部分包被丢弃,也就是传说中的 PMTU 黑洞。 症状最常见的就是微信公众号的图片始终加载不出来,就像这样(自己当时没截图,借用知乎文章的图): 说来也很奇怪,我在 iOS 的微信上是能正常加载的,但是换到我妈的 Android 微信就会出现这样的情况,之前一直以为是我妈的手机出毛病了…… PMTU 黑洞所谓 MTU,指的是一条链路上可以通过的三层数据包的最大尺寸(包含 IP 包头)。以太网默认的 MTU 是 1500 字节。但是从我的设备到目标服务器之间的路径上可能存在 MTU 小于 1500 的链路,那么这条路径上最小的 MTU,就是整条链路的..
更多NVH、振动测量和模态分析入门
Foreword 从一个产品发生共振,影响产品的稳定性,探索如何解决这个问题,想着先测量出来共振的点,然后加强结构。继而发现仅仅测量知道了共振结果,但是对于设计来说并不知道如何改进设计才能解决问题,这还不够,还需要有理论上的指导,进一步提高结构优化的效率,直接引入了一个之前不曾接触过的领域——NVH。 NVH NVH,Noise,Vibration,Harshness,针对噪声、振动、平顺性进行分析的领域,主要还是汽车制造领域用的比较多,航空和一些零部件、电机等等领域,也是他们经常分析的内容。 到了NVH那就不仅仅是测量,还有设计,仿真,需要从理论到实验,最终落地的一整套流程来完善和提高设计水平。对于汽车、电机、大型航空件,他们的材料等性能是比较明确的,结构的线性程度也比较高,再加上企业本身实力雄..
更多一日一技:next.js如何正确处理跨域问题?
我以前一直使用Vue来写前端。去年下半年接手了一个基于React + Next.js的项目,于是顺带学习了一下Next.js。由于Next.js的特点,这个项目的前后端是放在一起的。一开始没什么问题,看了半天文档就上手了。上周我们需要在另一个网页项目中,调用这个项目的后端接口,于是就需要处理跨域请求的问题。但我发现按照网上的方法,跨域问题依然存在。这个问题浪费了我不少时间,好在最后终于找到了原因。记录在这里,免得大家跟我一样踩坑。为了复现这个问题,我们先来创建一个Next.js项目。执行代码创建代码脚手架:1npx create-next-app test_cors使用TypeScript,其他选项选择默认,如下图所示:命令执行完成以后,会生成一个test_cors文件夹,在文件夹中创建文件pages/a..
更多LeetCode 刷题笔记
迫于找工作,不得不一边鄙视自己的智商,一边硬着头皮刷 LeetCode。既然开始刷题,那顺便做个笔记,以便日后温习。 因为顺序是乱的,所以请善用 CTRL-F。 217. Contains Duplicate Example: 12345Input: nums = [1,2,3,1]Output: trueInput: nums = [1,2,3,4]Output: false 1234567891011121314151617181920class Solution { public boolean containsDuplicate(int[] nums) { if (nums == null || nums.length == 0) { return ..
更多Golang 1.20 语言规范改动
切片转换为数组以下代码预期把切片转换为数组: 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import ( "fmt" "reflect" ) func main() { slice := []int{1, 2, 3, 4} array := [4]int(slice) fmt.Println(reflect.TypeOf(slice)) fmt.Println(reflect.TypeOf(array)) } 在 Go 1.20 之前的版本,会导致以下错误:1 2 # command-line-arguments ./main.go:10:17: cannot convert slice (type []int) to type ..
更多Golang 1.18 语言规范改动
泛型详见:Golang 泛型初级教程和 Golang 泛型中级教程。匿名函数内的未使用变量在 Go 1.18 之前的版本,以下在匿名函数内的未使用变量 p 不会返回错误:1 2 3 4 5 6 7 8 package main func main() { p := true func() { p = true }() } 在升级到 Go 1.18 后,会正常返回未使用错误:1 2 # command-line-arguments ./main.go:4:2: p declared and not used rune 类型的溢出在 Go 1.18 之前的版本,以下 rune 类型的溢出不会返回错误:1 2 3 4 5 package main func main() { print('1' ..
更多MySQL 的最左匹配原则
依旧是面试查漏补缺。这次是 MySQL 的最左匹配原则。 废话不多说,直接看 MySQL 官方文档给出的例子。 有这么一个表: 1234567CREATE TABLE test ( id INT NOT NULL, last_name CHAR(30) NOT NULL, first_name CHAR(30) NOT NULL, PRIMARY KEY (id), INDEX name (last_name, first_name)); 可以看出,表里面有一个联合索引 (last_name, first_name)。那么,查询的时候,这些语句就可以成功走索引: 1234SELECT * FROM test WHERE last_name = 'Doe';..
更多群晖NAS ESTAT扩容
Foreword 老群晖D918+只有4盘位,已经升级了一次,4张8T依然不够用,新搭的服务器的硬盘竟然是2.5的,还只能上固态,上普通硬盘没啥性价比。 无意间发现群晖竟然还能扩容 ESTAT 群晖ESATA是群晖网络存储设备中的一种接口,它是一种高速的数据传输接口,可以提供比USB和Firewire更快的传输速度。群晖ESATA接口可以通过连接ESATA设备来扩展存储容量,如硬盘、光驱等 DX517 群晖官方的ESATA硬盘扩展柜,但是价格十分离谱,基本就是一个5盘位的新NAS的价格,如果这种价格我为什么不再买一个NAS呢 魅视 M517 只有DX517一半不到的价格,但是同样扩展5盘位,性价比拉满 优越者 5盘位RAID USB3.0 ESATA接口 更便宜一些,可惜支..
更多使用USB接口连接STM32F103C并控制舵机
起因 前段时间把我的小主机连带路由器硬盘等设备带回了老家,老家也有ipv6,所以无缝衔接,随后安心出去游玩。某天我一如既往地打开nextcloud准备上传图片,发现服务挂了,然后发现是家里停过几小时的电。虽然路由器和小主机都有来电自启,但硬盘盒通电后需要手动按一下开关才能启动,我人不在家,所以这段时间和NAS相关的服务全都无法启动。 遂琢磨着弄个东西远程启动硬盘盒。 调研这个功能如果用树莓派做应该很简单,但我没有带回来,而且用树莓派专门操作一个舵机也太杀鸡用牛刀了。第一个想到的当然是单片机,一顿搜索,目标定位到了ESP32和STM32,都是非常便宜的单片机,两者的资料也都非常多。 但,不..
更多Golang 泛型中级教程
使用类型约束首先,来看一个函数,它的功能是返回两个参数中数值较小的参数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 func Min(x, y int) int { if x < y { return x } return y } func TestMin(t *testing.T) { var inputIntX int = 1 var inputIntY int = 2 var wantInt int = 1 gotInt := Min(inputIntX, inputIntY) if gotInt != wantInt { t.Errorf("gotInt %v, wantInt %v", gotInt, wantI..
更多