【极度个人向】过去与未来

周末忙里偷闲,去参加了GDG的 Kotlin/Everywhere 和开源社的中国开源年会,虽然不少工程化的东西不甚了解,但还是窥察到了一些业界动态,并且欣赏了很多好看的小姐姐,我想可能也给了我日后的学习路线一些启发。

在此也想梳理一下自己的目标,宣泄一下自己内心的困惑。

Rust并发-线程池与future

Rust官方教程中,并发部分的标题叫做 Fearless Concurrency。并介绍了利用线程池来构建一个微型web服务器。服务器本身只是返回了HTTP报文,没有什么特别的地方。

比较有意思的点在于并发处理上,在查阅了一些资料后,我决定自己动手,用不同的并发方式取构建Web服务器,并通过 abwrk 等压力测试工具来评测各种并发方式的效率。

完整代码可在我的 Github 上查看

使用Actions+子模块+ZEIT搭建静态博客

搭建静态博客是很有意思的事情,它可以很简单(半自动Github Page方案),也可以很复杂(自动拉取文章,自动部署)。在之前的文章中,有提到使用Webhook来拉取的方法,但实际实施起来,发现自己更喜欢直接SSH到服务器上来写作。所以这次介绍的方法将不使用自己的服务器,利用ZEIT来部署网页,子模块将不同功能分隔,再使用Github Actions串联起整个操作。

设计模式(二)之观察者模式

时隔一年多之后,我又回来更新这个系列了==。==

这次我们来看一下被广为使用,即使没接触过设计模式同学也一定听说过的,观察者模式

JDK版本:11(Java8的语言特性)

参考书籍:《HEAD FIRST 设计模式》

IDE: IntelliJ IDEA

实例引入

接触过Web前端的同学都知道,DOM API中,可以给事件绑定回调函数 (callback)

1
2
const node = document.createElement("div")
node.onclick = () => console.log("clicked!")

简单解释一下,代码第一行创建一个DOM,第二行给 onclick 设置一个函数,每当触发 click 事件时都会执行该函数【还有个闭包的效果,这里没体现,当然这也不是这篇的重点,不展开讲】。

来看一下点击之后的效果

同理我们还可以给其他事件绑定回调函数

1
node.ondrag = () => console.log("dragged!")

通俗来讲,上述代码做的是类似 trigger 一样的工作:当目标对象发生变化时,我们需要一个函数/方法去对其进行响应。

简易KV内存数据库的实现

7月中旬的时候看到了一篇知乎上的关于搭建 pastebin 服务的文章 https://zhuanlan.zhihu.com/p/73961522

作者没有利用redis,而是用rust手撕了一个简易的内存存储,遂引起了我的兴趣,在核心数据结构照着该作者来之外,加入了其他的feature。当然也被 rust 编译器按在地上摩擦了很久。

首选先明确我们的数据库需要实现哪些功能。

  1. 保存数据
  2. 根据key读取数据
  3. 淘汰不常使用的数据
  4. 过期删除
  5. 硬盘二级存储

Hexo+Caddy+Git自动化博客部署

在使用GithubPage+Hexo来部署博客时,我们时常会遇到这样的问题: 网页源代码push上去了,但是大量的markdown文件保留在了本地,这对于多机用户的影响是很大的。

为此你不得不再新建一个branch/repo来存放你的文章,但依然难以避免忘记同步文章的情况发生。

并且多机环境意味着每台机器都要装nodejs环境来进行网页的生成。十分不友好。

所以更好的解决方案呼之欲出:使用webhhook等方式,把生成网页的步骤交给服务器,PC要做的仅仅是写markdown+同步至Git。

准备工作

Gitea+Caddy搭建私有Git服务

花了不少时间把Github的垃圾代码搬迁到了Gitea上,用作自嗨。简单写写遇到的苦难,希望看到这篇文章的各位能少踩些坑

为什么使用Gitea+Caddy?

  • Gitea相比其他Git服务【如gitlab,gogs等】,非常轻量级,适合学生服务器使用。
  • Caddy使用非常简单,快速上手,自动部署HTTPS -> 这个我吹爆
  • 两个都是用Go语言写的,这是一种缘分,也是种巧合

SAP-VT项目面经

有幸收到了SAP VT项目的offer(大二/大三都能申请),写一篇面经给后来人一点借鉴。

整个考核共分三轮,分别是在线笔试【自闭场】,电话面试【猝不及防】,群体面试【轻松愉快】。

在线笔试

在线笔试设在赛码网,建议先做几道OJ题熟悉编译环境。

笔试时间100分钟,其中选择题20题40分钟,编程题2题60分钟。

选择题

非常非常自闭。考试范围从HTML,CSS到Java,CPP,Python,再到Cgroup,敏捷开发,最后甚至出现了线性规划,遗传算法。但不要怕,我易人易,我不大意,我难人难,我不畏难。尽力去做,不会就做,注意千万不要想着作弊,万一被发现就很尴尬了。

Spirngboot————踩坑与解决

数据库的大作业原本是想用Springboot + PostgreSQL + Redis + Docker 做的,顺便学习一下后端知识。

非常不幸的,踩了不少坑,也很难找到中文的解决办法,最后靠着伟大的StackOverflow 和 国外的热情网友们才解决了问题。

如果你在学习Spring-Boot的路上凑巧遇上了同样的问题,希望这篇文章能对你有所帮助XD

摩根士丹利电话面试

这就和考试一样,你复习的都不考

全程坑爹预警

最开始是来我们学校做宣讲。有现场的笔试,做的好就可以直达电话面试,笔试很简单,就不在这里写了(其实是我忘了)。这里
就讲一下电面部分吧。

首先声明,面试全英文,不过面试官是中国人

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×