这一年,博客停止了更新,实际上文章的草稿箱里有数篇文章。

等我再想起来博客的时候,已经是年末了,想捡起几篇草稿箱文章,想了想,还是记录一下这一年的故事。

转正

回到年初,返深后便开始准备转正的事儿,领导提拔将我加进了今年转内部编制的候选名单,候选名单总共 9 人,仅 2 个转正名额,不得不说压力挺大。那段时间每天晚上对着 PPT 不断改稿演练,经过紧张的答辩,侥幸以总得分 8.3 排名第一进入转正名单,至此结束了外包生涯,有归属感真好。

大家好,我是练习时长四年的新人练习生,请多多关照。

双月湾旅途

随着疫情好转,开始萌生了一些想要出去走走的想法,时常想在某个周五下班说走就走出去好好的放松,最后将目的地定在了惠州双月湾,路途实在曲折,不过到达目的地之后,一切疲倦都烟消云散了。

921648714877_.pic.jpg

定了一间面朝大海的海景房,双月湾海景房民宿普遍价格很便宜,300 元都能租一间很大的房间。

931648714914_.pic.jpg

911648714849_.pic.jpg

海风迎面,海浪此起彼伏,坐在沙滩上望着天际线,海天交界处在夕阳的映衬下呈蓝粉渐变色,实在漂亮,如果不是太阳太毒辣,我甚至能在这里坐一整天。另外这里沙滩沙子真的太粗了,比以往去过的任何沙滩的沙子都粗,踩在上面没有任何愉快的感觉。

961648715484_.pic.jpg

WechatIMG101.jpeg

出门没有拍照的习惯,从相册里捡出了几张还能看过去的照片。另外还有一个提议,出门记得带伞,当然还有防晒霜。

NUC8 & AOC 卢瓦尔 4K 显示器

这里不得不说我的 MacBook Pro 2016,从 2017 年购入一直陪伴着我,中间罢工数次都被万能的华强北拯救回来了,不过随着我技术转型丐版 8G 内存的窘境也日益突出。卡顿成了我每天易怒的原因之一。最终还是付款了购物车里心心念念很久 NUC8,店家帮忙改好了无线网卡并预装了系统,基本就是到手即用,后来我也支持购买了 维奇 的引导,感谢大佬们的奉献让贫穷的我能以 3000 元出头的价格体验到满配的 Mac mini。

NUC8 主机照片

neofetch 截图

说到 4K 显示器,在这之前我都没用过 4K,因为在我习惯了 1080p 显示器并且轻微近视的情况下,导致我看屏幕感觉啥分辨率都是一样的朦胧。不过不重要,既然主机的钱省下来了,换台 4K 也算是体验一下旗舰配置,毕竟 MacBook Pro 我只能买丐版(我真穷)。

显示器到货后,给我最大的感官体验是字体清晰了很多,字体边缘过渡没有颗粒,亮度也比之前高了不少。我并非专业用户,对各种参数也没有直观的感受,你也看到了,在此之前我甚至都没用过 4K,不过体验了大半年后,再回去看 1080p,感觉无论是图片还是字体,都有另一种感觉,这种感觉在改变之前很难相信的,也并不是鸟枪换炮后的高贵感,更像是「平凡之路」中台词所说:“离开故乡一段时间后再回来,你就会发现原来这栋楼这么小,这棵树这么矮,这条街这么短,这条路这么窄。”

AOC 卢瓦尔 4K 显示器

专升本考试 & 新人面试

我在四月份左右报名了朋友教育机构的专升本项目,打算提升一下自己的学历,说来惭愧在我们项目组乃至整个部门我的学历都是垫底的,在招聘新人时筛选了半个月简历后愈发觉得学历的重要性,因为学历低的话你的简历甚至都递不到面试官的手里,在平台筛选的时候就已经过滤掉了。你的经历、做过的项目以及学习的技能想在面试官夸夸其谈都做不到,就是这么残酷。

在面试中相比更加残酷的是年龄。我在招聘的时候面试过比较年长的面试者,他们基础扎实,经验丰富,但国内互联网的氛围就导致你 35 岁之后在开发岗很难再干下去,我们项目组也是这样,团队平均年龄都很年轻,PASS 之后经常在思考我 35 岁之后会被这样对待吗?

还好,我还年轻,我还有大把的时间去提升自己,我还有自己的兴趣爱好,我要在 35 岁前学习更多的东西。我报考了湖南工业大学的自考,备考期间相对顺利,只是复习政治的时候有些本能的抗拒感(算了,不说了)。后来,我也是贴着录取分数先通过了入学考试,学习时间需要两年半,我还有时间。

客制化键盘

我的第一把客制化键盘。过程并不难,只需要找到合适自己的套件,也就是键盘的外壳以及 PCB 板,我入手的是 CIY68 套件,79 元价格并且全键支持热插拔,2.4G 和蓝牙双模以及干电池供电。轴体我第一次购入的是佳达隆 G 黄 Pro,1 元一颗,手感类似于樱桃的红轴的线性轴,键帽我则选择了复古风格的 9009 键帽,我一直想要一把小时候小霸王学习机的复古风格的键盘,而 9009 的灰白配色非常吸引我,而搭配的几颗粉黄绿的增补键帽算得上点睛之笔。

键盘组装过程相对简单,由于热插拔所以根本用不上电烙铁,只需要将定位板对应位置贴一下铁氟龙胶带,用于填充卫星轴钢丝与定位板的空隙达到减少钢丝音等一些杂音,另外将卫星轴拆开,涂上某多多十几元包邮的润滑脂,擦干多余的油脂重新装回定位板即可。剩下的就是安装轴体,需要小心检查轴体针脚有没有弯曲,因为在轴体运输中可能会将轴体稍微压出形变,而安装轴体时不将针脚掰正的话直接插下去可能针脚就折了。针脚折了除了导致接触不良或者无法触发,严重的会将热插拔轴座直接顶脱焊。最后就是键帽啦,安装键帽时逐渐看到一把键盘完工时非常兴奋的,在组装完键盘后,我甚至抱着键盘玩了好久,后来我把他送给了我的朋友。

4B4919FE-ABEC-40CC-B5E4-B73600907993_1_105_c.jpeg

另一把是 VN66,也是目前我的开发主力键盘。

更换旋钮的 VN66

绩效评优

公司在年底的时候组织了年度述职,每个人都需要准备 PPT 进行演讲述职(提醒领导你去年一年都干了啥[doge]),然后领导分别对所有人根据今年的贡献进行打分,述职过程我参加了几位同事的述职,实在卷得厉害。评优规则为 12331,即 1 位 A+,2 位 A-,也必然有一位绩效为 C 的。

绩效由直属领导谈话公布,谈话聊了许多,这一年的公司业绩、团队迭代模式、不合理的需求等等还有我带领的新人,以及我写的一堆 BUG[doge]。

不过运气使然,我有幸拿到了 A- 的绩效,对应的激励是年终奖金 * 25% 以及次年月薪调薪 3%,这份幸运也算是给 2021 年画上最后的句号。

回顾与展望

回顾这一年。除了年龄加一以外我还有哪些收获。如果这一年给自己打分的话会给到多少呢?一时间难以回答。

2021 年已经结束了,人们还没有摘下口罩,疫情仍然在继续,西安最近还封城了。偶然间看到 18 年的一个视频,人们在地铁上大声的歌唱,他们满脸洋溢的笑容,那般自在现在来看已然是奢望。

我的 2021 年关键字一定是运气。那么,2022 年呢?

别消沉。

Update:

  • 2021-01-28: 换了联通宽带,不需要路由器拨号了,定时任务暂停了。

家里的路由器经常在一觉醒来的时候断网,随即小爱音响及其绑定的智能家具全都停止工作。每天早上八点的时候小爱同学会定时帮我加热热水器,而断网后只能去洗冷水。一次两次拔下路由器能解决,但最近越来越冷,洗冷水也觉得越发刺骨,我也实在没有动力从温暖的被窝里起来拔插路由器。

$ vim /etc/network-watch-dog
#!/bin/sh

# 锁文件位置
LOCK_FILE_PATH=/tmp/.network-watch-dog.lock
# 每次发包次数
PING_COUNT=3
# 离上次断网最大等待时间
MAX_WAITING_SECONDS=600

# 这里直接固定 ping ali dns
SUCCESS_COUNT=$(ping 223.5.5.5 -c ${PING_COUNT} 2>&1 | grep '64 bytes' | wc -l)

if [ ${SUCCESS_COUNT} == 0 ]; then
  TIMESTAMP=$(date +%s)

  if [ -f ${LOCK_FILE_PATH} ]; then
    LOCK_TIMESTAMP=$(cat ${LOCK_FILE_PATH})
    # 超过最大等待时间 删除锁文件重启
    if [ $(expr ${TIMESTAMP} - ${LOCK_TIMESTAMP}) -ge ${MAX_WAITING_SECONDS} ]; then
      rm -rf ${LOCK_FILE_PATH}
      reboot
    fi
  else
    # 写入断网时间到锁文件
    echo ${TIMESTAMP} > ${LOCK_FILE_PATH}
  fi
  /etc/init.d/network restart
else
  # 成功联网后判断上次断网遗留的锁文件
  if [ -f ${LOCK_FILE_PATH} ]; then
    rm -rf ${LOCK_FILE_PATH}
  fi
fi

最后给个执行权限,在定时任务中加入这条脚本,我这里每三分钟执行一次。

$ chmod a+x /etc/network-watch-dog
$ crontab -e
*/3 * * * * /etc/network-watch-dog > /dev/null 2>&1

等两天打算搞个断网消息通知。

Update:

  • 2021-01-25: 更新本地多网卡的情况

终端设置代理命令之前文章有写过的,趁今天重装了系统完善一下。

我的 Shell 使用 zsh,在 ~/.zshrc 下追加,如果使用 bash 需要修改 ~/.bashrc,可以使用 echo $SHELL 查看当前正在使用的 Shell。

命令用到了 jq 命令,需要先安装 brew install jq,其他平台替换为 yum 或者 apt-get

# 获取内网 IP
getlocalip() {
  local_ip=$(ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{printf("%s / %s; ", $2, $6)}')

  if [ ! "${local_ip}" ]; then
    echo "Your are offline."
  else
    echo "${local_ip}"
  fi
}

# 获取外网 IP
getpublicip() {
  response=$(curl 'https://api.ip.sb/geoip' -Lsk -A Mozilla)
  if [ ! "${response}" ]; then
    echo "You are offline."
  else
    ip=$(echo $response | jq -r '.ip')
    country=$(echo $response | jq -r '.country')
    country_code=$(echo $response | jq -r '.country_code')
    city=$(echo $response | jq -r '.city')
    isp=$(echo $response | jq -r '.isp')
    echo "${ip} at ${city} in ${country}(${country_code}) / ${isp}"
  fi
}

# 获取 内外网 IP
getip() {
  echo "Local IP: $(getlocalip)"
  echo "Public IP: $(getpublicip)"
}

# 定义代理地址
export PROXY_URL=127.0.0.1:7890

# 开启代理
proxyon() {
  export https_proxy=http://${PROXY_URL};
  export http_proxy=http://${PROXY_URL};
  export all_proxy=socks5://${PROXY_URL};
  export no_proxy=localhost,127.0.0.1,*.local,*.vanke.com,*.vankeservice.com
  getip
}

# 关闭代理
proxyoff() {
  unset https_proxy http_proxy all_proxy no_proxy;
  getip
}

然后 source ~/.zshrc,就可以使用命令了。

$ getlocalip
10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
$ getpublicip
120.237.94.* at Shenzhen in China(CN) / China Mobile Guangdong
$ getip
Local IP: 10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
Public IP: 58.250.23.228 at Shenzhen in China(CN) / China Unicom Guangdong
$ proxyon
Local IP: 10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
Public IP: 52.175.9.* at Central in Hong Kong(HK) / Microsoft Corporation
$ proxyoff
Local IP: 10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
Public IP: 183.62.230.* at Guangzhou in China(CN) / China Telecom

用了好几年的 Hexo 如今换成了 Typecho,换完之后心情挺复杂。

本想写篇博文记录一下最近的笔记,奈何升级 Big Surnode 环境有问题,索性直接换到了 Typecho。

迁移使用 hexo-2-typecho 工具,过程还挺顺利。

今年的文章产出好少哇,希望能好好写文章,好好记录生活。

最近写需求,同步了上游系统一个接口的数据到表里,大概长这样:

| id | name | role_id |
| 1 | 小王 | 4,5,6 |
| 2 | 小张 | 5,6,7 |
| 3 | 小李 | 50,51,52 |

需求是查询 role_id5 的所有用户,最开始的想法是这样:

select * from T where role_id like '%,5,%';

但是发现 最开始和最末尾的 ID 没有 , 分隔符 ,这就会导致最打头和最末尾的 ID 查不到。然后我又改成了这样:

select * from T where role_id like '%5%';

这个结果显然会将 id3 的结果一起查出来,况且 like 会扫描全表,这并不是我想要的。

后来我又想到了两个方案:

  1. 新建一张表,字段有 idrole_id,将字符串 role_id 列表分隔成一条条关联数据;
  2. 修改 role_id 格式为 |id1|id2|id3|,这样就可以用 like '%|id1|%' 查询。

直到 leader 在群里发了一个 MySQL 函数 FIND_IN_SET,让我立马拍大腿。

FIND_IN_SET(needle,haystack);
needle是要查找的字符串,如果 needle 中包含逗号(,)将无法正常工作。
haystack是要搜索的逗号(,)分隔的字符串列表。

上述的 role_id 字段也不用调整和处理,修改查询语句如下:

select * from T where FIND_IN_SET(5, role_id);

参考: