如何通过 SSH 远程连接另一台 Windows 主机中的 WSL
有这样一个场景,我在 Windows 主机 A 上,想要通过 SSH 连接到 Windows 主机 B 上的 WSL。
1234主机A (Windows) -----> 主机B (Windows) | V WSL (在主机B上)
Google 了一圈,找到了一个比较靠谱的方案(原文):
Latest WSL2 has systemctl support and can automatically map sshd’s connection to the Windows host. No need to redirect port.
Make sure Windows OpenSSH works.
In windows, run wsl --update to make sure use latest WSL.
In WSL, run sudo apt-get install openssh-server to in ...
我的 2024 暑期实习面经
时间来到 5 月份,经历了 10 家公司 21 场面试的洗礼,我持续两个月的高强度暑期实习面试也总算可以说是告一段落了。这篇文章的主要目的是记录我这两个月以来的面试经历和总结感悟,既为我后续的职业规划做参考,也希望能稍微帮上一些有缘看到它的朋友。如果各位对我的简历感兴趣,也可以点击页面右上角的“关于”查看。
以下部分是我对我这几轮实习面试总体的总结,如果希望直接看具体面经请点这里。
总结
公司
岗位/部门
进度
备注
阿里云
ECS 弹性计算
❌ 主动拒了二面
提前批,和中间件部门冲突
腾讯
TEG 广告工程部
❌ 一面挂
腾讯
TEG 腾讯网络研发部
✔ OC
阿里云
云原生中间件
❌ 三面挂
美团
优选事业部
❌ 一面挂
美团
SaaS
✔ OC
淘天
阿里妈妈
❌ 三面挂
快手
基础平台
❌ 一面挂
阿里控股
资采产品技术部
❌ 主动拒了 HR 面
阿里云
创新业务中心
✔ OC
蚂蚁
-
❌ 简历挂
蚂蚁认为我的简历适合做架构和中间件,但是蚂蚁的架构部门今年似乎不怎么招实习生了(也很有可能是我还不够格 ...
通过代码计算组合数:解决矩阵最大对角路径问题
组合数 C(n, k)表示从 n 个元素中选择 k 个元素的组合数,其公式为:
$$C(n, k) = \frac{n!}{k!(n-k)!}\tag{1}$$
其中”!”表示阶乘,即 $n! = n * (n-1) * (n-2) * … * 1$。
然而,直接使用这个公式编写代码计算组合数可能会导致溢出,因为阶乘的值增长非常快。因此,我们通常使用更有效的方法来计算组合数。
k 分数分解我们可以通过变换公式 (1) 得到一个新的适合程序运算的公式,计算过程如下:
$$C(n, k) = \frac{n!}{k!(n-k)!} \= (\frac{1}{1} * \frac{1}{2} * \frac{1}{3} * … * \frac{1}{k}) * \frac{n!}{(n-k)!}$$
展开 $\frac{n!}{(n-k)!}$ 得到:
$$C(n, k) = (\frac{1}{1} * \frac{1}{2} * \frac{1}{3} * … * \frac{1}{k}) * [(n-k+1) * (n-k+2) * … ...
服务器突然变得卡顿,怎么办?(2)Java GC 导致的卡顿
本文章系列未来计划持续更新,把我在学习/实习/工作中遇到的相关实际案例记录在这里
系列综述:
服务器突然变得卡顿,怎么办?(1)综述
本文内容基于美团技术博客文章 《Java 中 9 种常见的 CMS GC 问题分析与解决》 算是转载性质的章节。尽管在美团博客中提到的是 CMS GC,但是对于其他 GC 实现也是很有参考意义的。
另外我也推荐一篇最近在看的关于 ZGC 的文章 《ZGC 介绍》 ,这篇文章很好的让我了解了 JDK 最新的 GC 实现方法和思想。
关于 Java 主要的三大 GC 实现的介绍,可以看以下的系列文章,我认为都是干货满满的:
新一代 Java 垃圾回收神器:ZGC
为什么 G1 能够替代 CMS 回收器?
彻底弄懂了 CMS 收集器原理,这个轮子造的真值!
真的是 GC 引发的问题吗?首先需要确定的是,在一次 GC 问题处理的过程中,如何判断是 GC 导致的故障,还是系统本身引发 GC 问题?
在一个系统故障问题中,我们通常会得到下面四个表象指标:
GC 耗时增大
线程 Block 增多
慢查询增多
CPU 负载高
一般来说,可 ...
服务器突然变得卡顿,怎么办?(1)综述
本文章系列未来计划持续更新,把我在学习/实习/工作中遇到的相关实际案例记录在这里
系列目录:
综述:本文章
Java GC 导致的卡顿:https://alrisha.cn/2024/04/bd9408a6.html
这是一道经典的面试场景题,但也可以说是实际开发过程中最经常遇到的问题之一。实际上,这个问题问的是当服务器出现不可用情况时,应当如何快速排查、定位问题并解决问题。
可能的卡顿原因对于卡顿原因,一般来说可以从以下几个大方考虑:
CPU : 当 CPU 占用过高时,服务器自然会发生卡顿。
CPU 密集型任务 :如果运行的服务是 CPU 密集型的任务,那么 CPU 资源占用是不可避免的,此时为了确保服务器自身的可用性,可以对这个 CPU 密集型任务做一定的 CPU 资源隔离(限制核数、限制抢占的时间片等)
并发竞争 :如果发生比较严重的多线程竞争行为,线程频繁切换上下文也会导致 CPU 占用过高
持续占用 :忙等待、死循环、JVM Full GC 等操作,会导致线程长时间占用并浪费 CPU 资源,具体也体现为 CPU 占用过高
恶意软件 :(小概率 ...
花式实现三个线程交替打印ABC
“实现三个线程交替打印 ABC”是一道面试经典问题。网络上实际上也有了很多的解决方案,包括通过 synchronized 、Semaphore 、ReentrantLock 或是 CyclicBarrier 等方式实现。
这里我总结一下这些方案的特点,并提出几种我自己的代码实现。
以下实现实际上在原问题上更近一步:结果必须输出特定数量的 ABC 字符串
问题分析综合所有方案来看,本问题本质上是对一个状态机进行建模,也即不同的线程需要实现如下状态转换过程:
1A -> B -> C -> A -> B -> C -> A ...
我们知道,线程并行时执行顺序是不确定的,因此需要通过锁机制确保以上的状态转移过程。思路应该是:
线程 A 首先获取锁 L 打印 A,此时线程 B 和 C 获取不到锁 L 被阻塞;
线程 A 打印任务结束,释放锁 L,此时 线程 B 需要拿到锁 L 打印 B ,我们需要确保线程 C 不能在此时获取锁;
线程 B 打印结束,线程 C 拿到锁 L ,线程 A 不能在此时获取锁;
以此类推…
因此,主要难点实际上在于,如何保 ...
解决伪共享(False-Sharing)问题:最大化利用你的CPU缓存
解决伪共享(False-Sharing)问题:最大化利用你的 CPU 缓存这篇文章是先前我在分布式 ID 生成算法 SnowFlake 及其 Go 实现中提到的伪共享(False-Sharing) 问题的延伸,主要是为了更好地理解并解决伪共享问题,以便通过最大化使用 CPU 缓存来增强性能。
什么是伪共享?当代 CPU 普遍采用多级缓存的架构,例如:
1L1 Cache -> L2 Cache -> L3 Cache -> RAM -> Disk
其中,缓存读写速度(以及硬件成本)依次递减,而容量则依次递增。当 CPU 访问某个内存地址时,会先从 L1 Cache 开始查找,如果没有找到,再从 L2 Cache 查找,以此类推。如果在 L1 Cache 中找到了,那么就会直接返回,否则就会将 L2 Cache 中的数据拷贝到 L1 Cache 中,再返回。
想要让程序运行的更快,就需要尽可能地利用低级别的缓存。CPU 缓存是由缓存行组成的,一个缓存行一般是 64 个字节,CPU 读取数据是以缓存行为单位的读取,这意味着即使是读 1 个字节的数据,CPU 也要读 ...
我的 2023 年
三个词总结我的 2023,大概就是 牛马、开源和孤独
又是一年之末,但今天想要总结一下这个无趣的一年真是让我提不起劲来。不得不说,今年一年的研究生生活只能用冤大头和毫无收获来形容。不过正是为了“自救”,今年我让自己投入开源社区的工作也确实是让我收获颇丰。
牛马其实我是不愿意在网络散发太多我的负面情绪的,但是这一年忍受下来的种种还是让我忍不住竖起我的中指。各位大可跳过这段牢骚以免影响大家新年的情绪。
研一之后,大家理所应当地加入了各种项目组,但我运气却非常爆棚,是唯一一个被导师分配到实验室另一个老师(以下简称 Z 老师)手底下做事的,刚开始的我确实是摩拳擦掌,准备大干一番。但在进了项目组后:
每周开一次会,而 Z 老师是个 PPT 大师,本身对技术也是一知半解,技术栈和架构设计基本不听我的建议,却喜欢在每周的会上画大饼填需求(没错,乙方给甲方添需求),还是每周都画饼。这饼给甲方每周看的心满意足,给我每周看的流汗黄豆。
价值 7 位数的项目,合同上写的是 10 人的小组,实际开发、设计、文档、维护全部只有我一个人,没有任何一个人帮忙;作为代价,我能够每个月多发到高达 200 块人民 ...
CentOS 7 yum 无响应解决办法
CentOS 7 yum 无响应解决办法问题描述在实验室的 CentOS 7 服务器上配置 Python 环境的时候,出现了 yum 指令无响应的问题,即在输入任何 yum 及其相关的指令后,光标会停顿在空白处闪烁,终端无任何输出,CTRL + C 也无法退出指令。只有关闭整个终端再新建才能进行别的操作。
同时,指令 rpm -qa 指令同样出现了无响应的问题,但 rpm 的其它指令可正常执行。
问题原因很大可能是先前的 yum 指令执行被人为或异常中断,导致 rpm 包数据库出错被锁定。(又是哪个笨蛋学弟?🤯)
参考解决方案:
https://stackoverflow.com/questions/57818761/terminal-hangs-when-executing-yum-commands
https://www.jianshu.com/p/cfd6dae240c8
解决方法首先应该干掉 yum/rpm 的进程,通过 ps -aux 和 kill -9 组合拳可以做到。不过因为我直接关闭的终端因此似乎不存在仍然运行的 yum 进程。
其次,应该将 rpm 数 ...
分布式 ID 生成算法 SnowFlake 及其 Go 实现
分布式 ID 生成算法 SnowFlake 及其 Go 实现在先前总结我 GSOC 2023 项目的文章中,我提到了 Python agent 的 ID 生成是主要的性能瓶颈。我的 Mentor 为了解决这个问题,专门提了一个 issue ,其主要内容就是将 Skywalking Python agent 的 ID 生成规则和 Java agent 一致。他在写这个 PR 的时候也有和我讨论参考我的意见,我也就这个机会进一步了解了著名的分布式 ID 生成算法 SnowFlake。
在我 Mentor 的这个 PR 中,他实际上是以雪花算法(SnowFlake 算法)的思想来生成唯一 ID ,具体实现和应用场景还是和原版雪花算法有很多不同。而我这篇博客的主要目的,还是在于记录雪花算法的主要原理,并以百度开源的一个 ID 生成器为例子来进一步说明。最后,我也给出我自己写的代码——通过 Go 实现百度 ID 生成器的部分内容。
SnowFlake - 雪花算法SnowFlake 原先是 Twitter(现 X) 开源的分布式 ID 生成算法,源代码已经不再维护,为仅可读状态。该算法将一个 6 ...