🌟 你可能感兴趣的文章|Posts you might be interested in
Junior|大三
『OSPP2023』我与 OSPP 的故事 —— 项目经验分享
你还惦记着你那二面呢|Allow Everything to Happen
Sophomore|大二
阿里云OSS被刷,我交了1000RMB学费
『OSPP2023』我与 OSPP 的故事 —— 从听闻到中选
2023五一总结:近况与将来
告别ELK|轻量级日志收集系统Grafana Loki初上手
第五届字节跳动青训营项目总结
写在大二下开学之初
『CI/CD』结合GitHub Actions+Docker实现自动化部署
写在10月的最后一天
『Linux』一个多月来将 Ubuntu 22.04 作为主力系统的感想
『JWT』在 go-zero 框架中使用 JWT 鉴权
『总结』2022 国庆前阶段性总结
『hduhelp』如何在项目中接入助手 OAuth
『hduhelp』如何使用助手鉴权/使用助手的开放服务
『随笔』面试官竟是我自己 —— 2022 杭助秋招面试工作感想
GORM 入门笔记(一)前言与介绍
『Twikoo』解决 Vercel.app 在国内被墙导致无法使用的问题
『随笔』写在新学年伊始
Freshman|大一
『GitHub』学生身份认证问题
『随笔』618桌面改造计划
『字节青训营-3rd』结营感想(待后续)
『Git』如何使用 Git 参与杭助的项目
『WSL』在 WSL 中使用主机的代理(以 Clash 为例)
『实记』“韵味杭州”测试赛球童志愿经历
『总结』大一下期中总结
『Others』第三届字节跳动青训营 - 后端专场 早知晓直播会议纪要
Gin ...
做原汁原味的自己
是的,我还活着,哈哈哈
实话实话,明天腾讯 lastday 了
之前欠了不少博客没写,实习这 6 个月也精力了不少事情
但目前我要花一段时间搞定我的英语,因为我打算出国留学,但是英语还没考到我想要的分数
所以,等我过段时间吧~我打算做回原汁原味的自己了
『七个月的挣扎之路』主线:简历、面试与找工作(上)
长话短说,我其实已经推倒重写好几版了
由于时间跨度有些大,没有当时的感觉真的写不出有当时的味道的文字
而我现在必须挑重点把这些事情记录下来,质量不能作保证,毕竟真的不能再拖了
诸君将就着看吧👀
八月|简历与处女面
时间回到 2023 年 8 月 22 日,晚上 8 点 13 分
浙江省杭州市钱塘区,1号线文泽路地铁站
这个时间点距离开学还有一段时间,我之所以要提前返校(我记得是生活区一开门我就返校了)
不仅是因为要参与提前的亚运会志愿者培训(9 月底亚运会开始),而且还要提前准备简历与准备面试
毕竟金九银十,早点多准备一下准没错
其实是因为暑假其实没有准备多少
暑假事情其实不少,首先 OSPP 我得继续把项目做完,社团里有个项目有需求去完成
然后因为又有一批新生录取了,我得在新生群和新生交流为招新准备
还有 OSS 账单被打爆之类的乱七八糟的事
你要说我暑假做了些什么,那我把 LeetCode Hot 100 刷了一些,另外还背了一些八股,但是~不多?
简历
第一件事肯定就是搓简历了,给你们看看我当时搓的第一版简历
(我现在感觉一言难尽
简历我当时参考了一些身边的人写的,具体使用的是木及简历
然后开投,最后肯定是要投大厂的,但是在投大厂之前,我需要先投一些小厂练手
首先是 OSPP 群里,中科院软件研究所也发了招 go 的消息(问了一下 2~3k 一个月,我就去投了
我再不去上班真没脸见人了
有人大一暑假就在外企实习,有人到大三下才找到实习
人与人的差距,比人与狗的差距还大
然后杭助群里有人转发学校旁边一家小厂的招聘(我之前还不知道 any 在那
另外在 BO ...
『七个月的挣扎之路』前言与自我介绍
点击查看图片👀
PS:真的真的很抱歉拖了这么久才发出来,最近实习事情也不少,我尽量恢复到之前的更新频率吧~
七个月的挣扎之路终于结束了,这是我从未承受过的痛苦
具体来说,是从去年 2023 年 8 月 22 日返校开始,再到 2024 年 4 月 3 日 腾讯实习 Offer Call 结束,过去了七个月有余
这期间发生了很多负面的事情,博客更新也遇到了很大的阻碍,计划的总结文也因为心情一篇没写出来,全是烂尾(
我只能说这是我所经历的最长也是最难受的低谷期,但幸好——我熬过来了,这一切都已成为过去
博客是生活的快照,我想把这段不寻常的经历记下来,给这段生活存档
但是,这半年多的事情的确太多了,并且各种因素相互穿插与影响,并非是一篇博客所能讲清楚的
同时,我觉得在开始之前有必要做一些介绍与铺垫,不然就无法理解我当时的处境
所以我计划将其拆分为 7 篇进行叙述,一篇前言,两篇关于找实习的主线,还有四篇支线:
前言与自我介绍
您正在阅读的本篇,包含整体介绍与个人先前经历
主线叙事
简历、面试与找工作(上)
去年返校开始,制作,修改与投递简历,多次面试的经历
简历、面试与找工作(下)
今年返校后的鹅厂面试经历,与对后来人的一些个人建议
支线叙事
杭州亚运会
从大一开始进行选拔,并作为志愿者参加杭州第 19 届亚运会的经历
第一台 ITX
从去年返校开始组装 ITX,以及不断折腾至今的故事
出国与润
个人对出国的动力与思考,以及到目前的准备情况
开源故事
关于开源之夏 2023 奖金接收,以及之后一系列的开源趣事
嗯…下面就开始吧 ...
Recovery From Panic
真丢人,每次都搞成这样子呜呜
不行啊,平时和女生讲话太少了,真经验不够
我平时圈子就是一群搞技术的大老爷们,真没什么机会和女生说话
我大学到目前三年全扑到主线任务上了,这也是我现在能在腾讯实习的原因
但是支线是一点都没动啊(
我之前其实是有做出些努力的,比如去年杭州亚运会我去做志愿者,朋友圈多了很多女生
但是我感觉我真聊不起来哇 (感觉真没什么好聊的)
我感觉我现在人际关系多多少少有点问题,我妈也经常说我,她去游泳也能交到朋友,去健身也能交到朋友,而我来来去去也就是搞技术的
是时候做出些改变了(
PS:因为现在开始上班了而且学习的事情也有点多,所以已经有很长一段时间没更新了,我只能说尽量把我去年几个月的总结文早点发布出来吧
回看我之前的博客,发现我之前写的是真的好啊,特别是 OSPP 那篇,这真是我能写出来的?
简明 Docker + GitHub Actions 自动化部署教程
我之前其实写过一些 cicd 的教程,但是写的太烂了,这篇算重构
直入正题,我会用我的一个 gin-rush-template 来做为 demo 演示
你可以模仿下面的过程为自己的项目实现自动化部署
我的 demo 的其实写的很烂的,但是你只需要知道它有三个特点,无需关注其他细节:
会从 config/config.yaml 读取配置文件
需要连接 MySQL 依赖
能提供一个 /ping 接口
我们先做到让它在本地跑起来,首先 clone 下来,然后跟随下面的操作
12345678# 复制一份配置文件cp config/config.example.yaml config/config.yaml# 运行 MySQL 依赖docker-compose -f docker-compose-env.yml up -d# 运行 Go 程序go run main.go
如果没有报错,并且 curl 能正常提供服务,那么就没有问题了
12curl http://127.0.0.1:8080/ping{"message":"pong"}
或者你可以在浏览器中手动访问 http://127.0.0.1:8080/ping
体验手动部署
安装 Docker
接下来将体验手动编译并部署 Docker Image 到服务器,我以本地 OrbStack 提供的 Debian12 arm64 虚拟机为例
123456789101112131415161718nx@debian:~$ screenfetch _,me ...
Kitex 负载均衡源码解读之加权负载均衡算法
不多废话,直入正题
Kitex 的负载均衡相关源码位于 pkg/loadbalance ,具体结构如下
12345678910111213141516171819202122nx@NXsMacBook-Pro kitex % tree pkg/loadbalancepkg/loadbalance├── consist.go├── consist_test.go├── dummy_picker.go├── interleaved_weighted_round_robin.go├── iterator.go├── lbcache│ ├── cache.go│ ├── cache_test.go│ ├── hookable.go│ ├── hookable_test.go│ └── shared_ticker.go├── loadbalancer.go├── weighted_balancer.go├── weighted_balancer_test.go├── weighted_random.go├── weighted_random_with_alias_method.go├── weighted_round_robin.go└── weighted_round_robin_test.go2 directories, 17 files
我们先去 loadbalancer.go 看见接口定义,感觉还是很清晰的
12345678910111213141516// Picker picks an instance for next RPC call.type Pic ...
如何配置 GPG 密钥
使用 GPG 签名 commit 最大的好处就是有一个好看的 Verified 标签
当然主要是为了安全啦!
主要流程就是在本地生成一个,然后修改 git 的配置文件(可以借助 IDE),最后把这个密钥上传到 GitHub
https://www.jetbrains.com/help/go/2023.3/set-up-GPG-commit-signing.html
https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key
官方文档讲的其实很好了,当时我做下来发现有些问题
12345678error: gpg failed to sign the data:[GNUPG:] KEY_CONSIDERED FAD374693582B8AEE393EF000F3C2EC536BDA929 2[GNUPG:] BEGIN_SIGNING H10[GNUPG:] PINENTRY_LAUNCHED 91953 curses 1.2.1 not a tty xterm-256color :0.0 ? 501/20 0gpg: signing failed: No such file or directory[GNUPG:] FAILURE sign 83918929gpg: signing failed: No such file or directoryfatal: failed to write commit object
最后参 ...
『代码随想录』单调栈(Monotonic Stack)
DAY 58
每日温度
12345678910111213func dailyTemperatures(temperatures []int) []int { n := len(temperatures) stack := make([]int, 0, n) ans := make([]int, n) for i, temperature := range temperatures { for len(stack) > 0 && temperature > temperatures[stack[len(stack)-1]] { ans[stack[len(stack)-1]] = i - stack[len(stack)-1] stack = stack[:len(stack)-1] } stack = append(stack, i) } return ans}
下一个更大元素 I
不同之处是栈中存的是元素的值
123456789101112131415161718192021func nextGreaterElement(nums1 []int, nums2 []int) []int { stack := make([]int, 0, len(nums2)) m := map[int]int{} for _, num : ...
飞镖、骰子和硬币:从离散分布中抽样
本篇是原文 Darts, Dice, and Coins: Sampling from a Discrete Distribution 的全文中文翻译版本
在被我的导师拉着参与 cloudwego/kitex 的一个负载均衡算法的改进时 #1184 ,他指出可能可以使用 Alias Method(别名方法)来实现更为高效的负载均衡。于是我仔细地研究了本文的英文原文(链接如上), 起初我想寻求一个中文译版,但貌似没有找到
于是鄙人借助 GPT 翻译与个人的理解进行部分词汇修正,手打大部分 LaTeX 公式与表格后完成本文,如有谬误,欢迎指出
PS:暗黑主题可能不适合本文阅读,可在右下角切换
原文最近更新日期:December 29, 2011
今年早些时候,我在 Stack Overflow 上提出了一个关于不公平的骰子的数据结构的问题。具体来说,我感兴趣的问题是:
“你有一个 nnn 面的骰子,第 iii 面被掷出的概率为 pip_{i}pi。模拟掷骰子的最有效数据结构是什么?”
这种数据结构可以用于多种目的。首先,你可以用它来模拟一个公平的六面骰子,通过给骰子的每个面分配 16\frac{1}{6}61 的概率,或者模拟一个公平的硬币,通过模拟一个两面的骰子,每面有 12\frac{1}{2}21 的概率出现。你还可以使用这个数据结构直接模拟两个公平六面骰子掷出的总和,通过使用一个 11 面的骰子(面数为 2、3、4、…、12),每个面都适当地加权,以表示如果使用两个公平骰子,这个总数出现的概率。然而,你也可以使用这个数据结构来模拟不公平的骰子。例如,如果你在玩花 ...
『代码随想录』动态规划(Dynamic Programming)
DAY 38
斐波那契数
123456789101112func fib(n int) int { if n == 0 || n == 1 { return n } dp := make([]int, n+1) dp[0], dp[1] = 0, 1 for i := 2; i <= n; i++ { dp[i] = dp[i-1] + dp[i-2] } return dp[n]}
爬楼梯
1234567891011func climbStairs(n int) int { if n == 1 { return 1 } dp := make([]int, n+1) dp[0], dp[1] = 1, 1 for i := 2; i <= n; i++ { dp[i] += dp[i-1] + dp[i-2] } return dp[n]}
使用最小花费爬楼梯
12345678func minCostClimbingStairs(cost []int) int { n := len(cost) dp := make([]int, n+1) for i := 2; i <= n; i++ { dp[i] = min(dp[i-1]+cost[i-1], d ...
『代码随想录』贪心(Greedy)
DAY 31
分发饼干
遍历每块饼干,尝试将其分配给胃口最小的那个尚未满足的孩子
1234567891011121314func findContentChildren(g []int, s []int) int { sort.Ints(g) sort.Ints(s) n, m := len(g), len(s) i, j := 0, 0 for i < n && j < m { if s[j] >= g[i] { i++ } j++ } return i}
摆动序列
直接找出山峰和山谷就行,那些山腰的元素全都不要
12345678910111213141516171819202122func wiggleMaxLength(nums []int) int { n := len(nums) if n < 2 { return n } prev := nums[1] - nums[0] ans := 2 if prev == 0 { ans = 1 } for i := 2; i < n; i++ { diff := nums[i] - nums[i-1] if diff > 0 && p ...
『代码随想录』回溯(Backtracking)
DAY 24
77.组合
很经典的回溯算法
123456789101112131415161718func combine(n int, k int) [][]int { ans := [][]int{} curr := []int{} var dfs func(s int) dfs = func(s int) { if len(curr) == k { ans = append(ans, append([]int{}, curr...)) return } for i := s; i <= n; i++ { curr = append(curr, i) dfs(i + 1) curr = curr[:len(curr)-1] } } dfs(1) return ans}
做了一点剪枝
123456789101112131415161718192021 package main func combine(n int, k int) [][]int { ans := [][]int{} curr := []int{} var dfs func(s i ...
『代码随想录』二叉树(Binary Tree)
DAY 14
稍微又复习了一遍二叉树的基础
144.二叉树的前序遍历
123456789func preorderTraversal(root *TreeNode) []int { if root == nil { return []int{} } ans := []int{root.Val} ans = append(ans, preorderTraversal(root.Left)...) ans = append(ans, preorderTraversal(root.Right)...) return ans}
当然你还可以压行,就是可读性不行
123456func preorderTraversal(root *TreeNode) []int { if root == nil { return []int{} } return append([]int{root.Val},append(preorderTraversal(root.Left),preorderTraversal(root.Right)...)...)}
94.二叉树的中序遍历
123456789func inorderTraversal(root *TreeNode) []int { if root == nil { return []int{} ...
Mac Windows 网线直连文件传输
今天又学到一个小技巧,使用一条网线直连两台 PC 进行文件传输
我是把 Mac 上的文件传到 Windows 上,但其实两台 Windows 也大同小异
首先当然是网线插上
下一步是自己手动改一下 IP 到同一网段,之后 ping 一下,能 ping 通就算没问题
传输文件使用 HTTP 其实最方便,直接用 py 起一个 http server
12cd /path/to/dirpython3 -m http.server
然后你就可以通过浏览器访问了
本地看上去没问题之后就可以在另一端访问了
我记得下载是满速的,千兆以太网直接吃满,嘎嘎快(
『代码随想录』栈与队列(Stack & Queue)
DAY 10
232.用栈实现队列
因为栈和队列的出队顺序是反的,所以再来个栈倒腾一下就是正的了
123456789101112131415161718192021222324252627282930313233343536373839404142type MyQueue struct { in []int out []int}func Constructor() MyQueue { return MyQueue{ in: []int{}, out: []int{}, }}func (this *MyQueue) Push(x int) { this.in = append(this.in, x)}func (this *MyQueue) shift() { // 倒腾一下 for len(this.in) != 0 { this.out = append(this.out, this.in[len(this.in)-1]) this.in = this.in[:len(this.in)-1] }}func (this *MyQueue) Pop() int { if len(this.out) == 0 { this.shift() } ans := thi ...