文洲:一名普通技术人的技术十年| nStar 专访

自 19 年开源到现在,Nebula Graph 社区出现了一群有想法、有实力的用户,将他们的优雅留在 Nebula Graph 的代码中,他们是 nStar,是 Nebula 社区不可或缺的一部分。
—— Nebula 社区

十年,他完成了一名普通的机械生到专业的开发者,从面向 Windows 开发到面向 Linux 开发的转变。Windows PC 时代 360 丰富复杂的产品业务线塑造他日后分析、解决技术问题的思维。而在 BOSS 直聘的日子,他深钻大数据、分布式技术,在探索技术领域的过程中接触了一门新技术——图数据库,此后他一直在探索图技术在安全方面的应用。

这十年,他的技术栈经过了 MFC、Matlab、Windbg 等等技术的洗礼,现在我们来听听他这十年的故事,以及他和 Nebula Graph 的故事。

这是我们这期 nStar 专访的嘉宾——文洲

嘉宾名片

int main() {
    // 文洲
    string name = "文洲";
    string gender = "male";
    string githubId = "JimWen";
    string base = "Wuhan";
    string jobDescription = "青藤云安全-资深研发";
    return 0; 
}

自我介绍

先来和 Nebula 社区的小伙伴打声招呼,介绍下自己吧

大家好,我是文洲,当前就职于武汉青藤云安全,业务上一直做的是安全和风控方向,现在技术上主要关注大数据和分布式领域。和Nebula Graph也算是老朋友了,很优秀的产品,之前在BOSS直聘基于Nebula Graph做大规模行为图的构建和挖掘(相关 B 站视频),现在在青藤这边基于Nebula Graph做主机安全防御和挖掘,后续会基于图数据库和图计算的做一套图平台支撑各个安全场景需求

目前,我们(青藤云官网:https://qingteng.cn/)也在大力招人,业务和技术都是大挑战,机会和挑战并存,大数据、后端、图数据库和图计算开发都要人,欢迎感兴趣的同学加入我们一起建设图平台(我的微信 wenzhoujim)。

谈技术分享

文洲,你在 CSDN 开了一个博客:文洲的专栏,9 年产出了 177 篇文章,真的是很高产,你觉得技术写作对你而言最大的价值什么?

很惭愧,最近两年写得少了,最近也正打算把图相关的总结写一写。我们常说,做技术看懂了不算真的懂,哪怕是把代码写出来了,你都不一定是真的明白,只有你能把别人讲明白了,才是真明白。所以刚开始写博客,主要还是出于对于我自己学习过程中遇到的一些问题,比如:棘手的或者其他比较模糊的地方,自己能够讲明白帮到后来者。在这个过程中,其实收获了很多,很多人私信和留言探讨技术问题,还有出版社联系出书,甚至有人请去做培训。刚开始会很懵,但是慢慢地你会觉得自己真正做了件有意义的事,老实说成就感很大,也有动力继续写。

写博客的时候,我会把坑点、代码和常用配置附上,尽量保证自己写的东西能真正对别人起到帮助作用,反过来这也会督促自己把技术吃透。所以,技术写作于我而言首先是校验技术掌握的一种手段,其次它也是一种整理思维锻炼文字的过程,在这个分享过程中会收获朋友以及很多预料外的收获,对技术人来说是很合理的选择。

从 MFC 到 Matlab,再到 MIL…你涉猎了不少技术,你是如何点亮这些技能树又点满技巧呢?(谈下你的技术演进和进阶方法)

这个问题很好,技术方向其实还好,更多是在随着我自己经历在变化。

简单地分享下我的经历,最开始完全是因为感兴趣,本科时对Windows编程比较感兴趣,看得是Petzold的《Windows程序设计》,跟着做一些小应用之类的小玩意。研究生的时候,做机器视觉和运动控制相关的东西,因为是工业程序,MFC用得比较多,当时我记得看的是侯捷《深入浅出MFC》还有《深入解析MFC内幕》,然后就是图像处理Matlab和MIL这些用得多,几套设备程序开发走下来结合遇到的问题在Windows应用编程这块算是掌握比较好了。

不过真正对Windows这块编程掌握足够好是在进入360,当时在安全卫士产品线嘛,好几亿用户的客户端产品,加速球/安全卫士/开机助手/防火墙这些都深度参与了,遇到的问题也很多,很多问题也是平常遇不到的,这期间需要不断查阅MSDN文档,构建相关的C++和WTL/调试相关的Windbg反编译/内核通信/网络通信这块都需要持续学习和深入了解。对我而言,在 360这段时间是真正技术突飞猛进的时候,这段经历也培养了我如何分析问题及解决问题的能力,一直特别感谢当时的老大对我的信任,所以我的技术前半段可以说是围绕 Windows PC 客户端的,真正的提升还是围绕业务的

后来,大家也都知道,Windows PC开发已经式微,也没什么新功能,技术上挑战也不大,所以当时是在360内部转岗去做的后端开发,Golang和大数据/分布式相关技能就是在这期间掌握的。然后就是到BOSS直聘这边做图相关的安全业务,在这块也做了很多探索和应用,图计算图数据库也算是较新的领域,很难有特别成熟的参考方案,很多时候需要自己多去探索挖掘安全上的应用方式。

所以,站在我的角度上来说,每个技术人都要有自己的业务领域和技术方向,技术服务于业务才能真正掌握技术,围绕自己的业务领域内持续学习相关技能,解决业务问题,可能每个阶段的技术方向有些不同,但是领域知识是可以复用的,技术方向其实也是有共同之处,比如我之前做得更多是 Windows开发,现在Linux居多,但是之前看的很多操作系统网络的知识这些底层知识都能复用,也会加深对问题的理解。

Nebula 高性能图 schema 设计 中你分享了一些你对图数据库 schema 的理解,这边向请教下,你作为一个 Nebula 资深玩家,如果一个新手要开始深入使用 Nebula,你觉得他们需要了解下哪些技术呢?

首先,还是感谢Nebula提供这么好的产品,其实Nebula入门很简单,相对来说坑也很少,群里解决问题速度很快。然后这里说是新手到深入使用,我觉得最大的问题来自对业务问题本身的理解,这个业务到底用图期望解决什么问题,适不适合用图数据库解决还是要用图计算框架解决,这个业务本身的领域实体和边该怎么设计,这是能不能用好图和解决问题的关键,也是这个视频的初衷,是我们青藤内部的一个简单探索和总结。

至于具体的技术,在视频中我也简单列了些,Nebula相关的可以了解下底层LSM和Raft/RocksDB相关的知识,图计算和算法可以看下《GraphX实战》和Neo4j的《图算法》,另外也建议去了解下实时处理框架Flink,对于高并发入库来说是个很好的选择。

谈开源

这边看到你虽然产出了很多技术文章和技术视频,但在 GitHub 上的贡献墙并不活跃,你是怎么看待开源以及贡献 pr 这件事情呢?

这个确实很惭愧,可以说开源已经是软件世界的基石,连微软现在也全面投入开源怀抱,平常工作中用的大多数也是开源组件。之前做Windows的时候,一方面是安全业务比较敏感,另一方面其实我们用的codeproject更多。做大数据和分布式的时候,更多是集中在大数据和分布式应用这一块,真正能够贡献的通用pr的不太多,有时候有些想法,又由于工作节奏原因拖延到不了了之,所以一直很佩服参与开源的同学们,其实这需要很大的精力去参与维护和迭代。接下来工作会涉及到一部分通用图平台的建设,这一块争取能够更好的回馈社区,多提pr,参与开源的良性发展。

工具安利

最后,如果要给 Nebula 社区的用户安利两款开发利器的话,你会推荐哪 2 个呢?

其实每个人的开发习惯不太一样,分享下我常用的配置,Windows开发的话Visual Studio+Visual Assitant+Notepad++,大数据和分布式的话Mac+JetBrains全家桶+Visual Code。开发利器的话,不知道算不算得上,ProcessOn和有道云笔记,前者绘制流程图和思维导图,后者工作笔记/学习心得整理都在上面,比较方便吧,期望对大家有帮助。

以上为社区大使——文洲的专访,更多社区活动见 Nebula Community 仓

欢迎阅读本文的你,在 2021.08.08 来北京和我们现场交流图数据库技术,NUC·2021 活动报名传送门