🌍 关于站长
2012年毕业,迄今为止已工作十二年,从实习开始经历了好几个公司,包括网易、Yahoo、百度、创业公司等。作为非科班出身,幸运的是在2011年一头扎进了前端,从此改变了我的人生轨迹。2018年在自己前端职业巅峰期(自认为到了前端的瓶颈期, 其实是自己局限了,没考虑市场因素),转身从零学习C++,追求自己的底层技术信仰,更不知时间便是成本,就此错过了短视频赛道。这么说是因为C++是个沉没成本很高的语言,尤其是C++方向的选择。
🙋 自我介绍
2008年大学之前,从来没接触过编程,不像很多编程大牛从7/8岁就开始接触编程。大学期间认识了一辈子的好兄弟,他的编程技术能力很强,在校队打ACM比赛。在社会实践的时候,一起做了一个使用Ajax的项目,由此接触到了JavaScript。 2011年开始跟着校外同学做兼职,其中有一个是移动互联网创业者拿了两百万,需要做一个基于LBS社区又有点和微博相似的系统。这个项目做完就去实习了,去了Yahoo!,接触到如日中天的HTML5 + CSS3 + Mobile Web。2012年毕业进入大厂,积累5年移动Web系统开发,包括业务系统,运营活动,后台管理系统等,期间技术栈以PHP + JavaScript为主,前端使用过Angular和React两个框架。
2018年判断自己的服务端职业瓶颈期已到,所以转型开始学C++, 主攻音视频方向,期间开发了各种音视频算子,也熟悉了微服务架构,设计了几个并发量很高的在线和离线系统,其中一个系统每天50亿流量。
💰 现阶段
回忆起来,现阶段确是最迷茫的时候,虽然有着大厂的工作,但是人生不止停止不前,还因为转型C++错过了其他机会,同龄人因为2017-2019年选择加入了字节、快手、小红书都在财务上非常高的收入,而自己却完美地错了这些机会。
不过现阶段的我,在技术深度方面,因为有C++和底层系统开发的底子,处理很多事情不在捉襟见肘。在技术广度上,熟悉C++、熟悉在线和离线系统的设计、熟悉微服务、熟悉前端框架、熟悉音视频,了解深度学习等。因此就有了一个大胆的想法,利用个人的全栈技术能力,找到合适的场景,落地更多的业务场景,同时让自己的技术实现更多变现。给自己加油✊✊✊
🌈 编程工具箱
🏆 主力编程语言
🛠️ C++:2018年,开始认真学习C++, 起步是从C++11开始,当时C++17还没普及,截止目前为止公司的gcc编译器已经升级到gcc12了,绝大多数的c++20的feature基本都有,但工作中基本只用到c++17,这几年,期间补充了很多基础知识,包括操作系统、计算机网络、编译原理、算法等,C++的应用也主要集中在RPC、音视频、推荐技术、Node.js插件、Electron插件、模型推理部署等。
🛠️ TypeScript: 从最开始接触前端,一开始的ES5, 如果有人了解其实还有coffescript, 到之后的ES6,一步步到现在写Next.js的Web基本上都是TypeScript。
🛠️ Python: 模型训练必备语言,模型推理部署会用到C++, 但训练时期Python是绝对的主力,Python还有一个经常使用的地方就是数据统计和画图,Python画图真的专业。
🛠️ Golang: 刚开始工作的时候,服务端大规模使用的是PHP,公司也有配套PHP框架,甚至公司为了让PHP的性能提升,还升级了Facebook最著名的HHVM解释器。 但从2018年开始,业务系统的主力编程语言都在做Golang迁移,直到现在公司新增代码库不再允许PHP语言。
🏆 主力框架
🧰 brpc: 做C++服务端编程的人大多都知道brpc, 国内工业级RPC框架堪称最强,使用brpc的时候,主力开发语言就是C++了,使用场景均是计算密集型的,例如推荐、音视频、模型推理等。
🧰 Next.js: Next.js是结合了React的SSR功能推出了Web编程框架,优势是对SEO友好。
🧰 Nest.js: Nest.js和Next.js只有一字之差, 但Nest.js通常是构建SPA架构,或者纯服务端微服务,他的功能要比express.js和koa.js功能更强大。
🧰 React: 前端的主要渲染框架,从2015年开始,就开始使用React框架,做过系统性的运营活动、业务系统、邮箱等。
🧰 Electron: 2012年刚毕业业界都还采用node-webkit直接编译构建桌面软件。现在要是构建桌面应用,如果为了迭代快又想跨端,Electron是唯一也是最优选择。Electron最出名两个应用Visual Studio Code(简称VSCode)和QQ桌面端。如果不是为了跨端,又对性能要求极高的时候,Qt就变成了选项之一(Qt的编程语言依然是C++)。
🧰 Golang的框架,其实公司有一个Golang的框架,部门内部也有一个Golang的框架,尤其是部门的框架真的是稀烂,不提也罢。
🏆 数据库和缓存:
🌼 MySQL: 做过服务端的朋友肯定都会接触到这个数据库,绝对的主力数据库,自己面试过的上百场,有一个MySQL的问题,只要问出来,就能试出来这个同学是不是对MySQL真的了解。
🌼 Redis: 通常是MySQL的缓存,只要任务是提升性能和并发量,同时会面临一个很麻烦的问题,数据一致性或数据同步。
🌼 Kafka: 讲到kafka, 通常是用来搞消息队列,引入异步机制,但是各个公司都有自己的消息队列,只需要做一些proxy就行,也是15年的秒杀系统,因为当时涉及到一个结算的问题,当时上线用的是实时(同步)系统,上线1个小时就被羊毛党提现了1w块钱。最后改成了异步架构,2013年左右支付宝刚开始搞余额宝和提现,会提示2小时才到账,这中间就是异步系统在工作。现在的消息队列基本上都是秒级处理。
🏆 其他
🌟 模型训练: PyTorch,去年刚训练的一个文本分类模型,从数据标注、模型训练(可视化、超参数调整)、模型推理部署,自己一个人都全程搞定。但也只是粗略的搞定了一个项目,依旧没办法做算法策略。
🌟 高性能计算: CUDA, OpenCL,其实CUDA在现阶段已经变成了一个事实标准,所有机器学习框架几乎都要兼容CUDA或基于CUDA构建,CUDA的kernel算子的写法,真的挺有意思的,不过自己也只是写了几个简单的算子,据说使用CUDA手撸矩阵乘法的性能能超过cublas就算挺厉害的。
🌟 多媒体:躲不过去的FFmpeg, 我个人对FFmpeg很熟悉的、基于FFmpeg做了很多项目的二次开发,从封装、解封装、解码、编码等都有比较深刻的理解。
🌟 图形学: OpenGL, WebGL, Vulkan。
☎️ 技术咨询
首页左边栏, 各种各样的联系方式,关注公众号,或者发邮件都可以,小红书的私信不会回。
🥇 算法刷题
大一开始因为自己从来没接触过编程,都不知道有学校里ACM校队,其实都是我们信息工程学院的同学🌝,大学的好兄弟就是ACM竞赛出身,自己也最后悔的就是没在上学期间搞定算法,导致自己走了很多弯路,现在算法也补上来了,甚至包括自己的最烦的动态规划都不再惧怕。
🐝 项目经验
1️⃣ 大型分布式系统,采用的Raft算法,做中心化处理,搞定这个系统,其实对数据的理解,尤其是大规模并发系统的读、写有了更深次的了解。
2️⃣ 通用计算平台,这个项目是申请专利了的,曾经在好几次的面试里,同行面试官都给出了极高的评价,主要是涉及了很多操作系统底层知识。
3️⃣ 运营活动系统:其实我个人最不愿意干的就是运营活动,因为大部分公司的运营活动其实都不像阿里巴巴这类电商公司有一整套的方法论,大部分公司每个运营活动都是个性化的,每个都要定制化,只能针对积分,订单,前端的组件做一些通用化处理,最难受的还是有deadline和改需求, 会为了在deadline之前上线,经常需要加班。
✈️ 其他工具
笔记管理: gitbook + Typora
博客系统: pwfocus.com