全栈工程师开发手册 (作者:栾鹏)
架构系列文章
个人经历
选择大学专业
2010年,我20,手机还是2G网络,电脑还是window x,高中毕业,父母只是农村建筑工人,对社会工作完全没有认知。对以后的路该怎么走完全没概念。在大学生亲戚的帮助下选择了电子行业(电子科技大学)。虽然对这些领域都是一知半解,但是作为村里不错的大学生,能上大学这件事的意义已经远远超过了选什么专业的重要性。而行业选择才是弯路的开始。
迷恋多媒体技术
在大一期间,开始拥有自己的电脑,对电脑非常热爱,对电脑能做很多东西而热爱。开始迷恋学习各种多媒体技术,ps图片,ppt动画,ae视频等。拿过学校的各种ppt大赛、微电影大赛的奖。
迷恋脚本
大二大三2011~2012年,移动互联网开始流行,微信开始盛行,手机上的各种游戏开始盛行。天天爱消除游戏有段时间非常火爆,就是不同颜色的图片,连续三个相同就可以消除的游戏,同学朋友们都在玩。好胜心强的我游戏成绩不高,开始研究如何作弊。在网上查询到可以使用手机模拟器在pc端运行游戏,通过按键精灵这款软件按照颜色检测与上下左右图片是否相同进行移动。这个软件可以设置要对电脑进行的操作,比如鼠标点击哪里,移动到哪里之类的操作,生成工具,帮你重复的运行。那是我互联网技术的启蒙之路,那年我22了。在学习通过按键精灵制作脚本成功刷到最高分后,我了解了按键精灵这款软件可以帮助我完成很多重复的电脑操作问题。我开始研究如何使用这个软件,当我想搞的电脑自动化操作越来越复杂,就开始按照按键精灵里面的说法使用VB语言,于是开始学习VB。虽然那个时候对于计算机这些都是老掉牙的知识,但是对于一个外行,学着感觉还是很牛逼的。
迷恋编程
到了大四,看到网上的文章说微软的vb已经比较久远了,现在微软主推c#,所以开始学习c#,并开始为学校的部门办公室做一些小软件。那时已经对编程技术很热爱了,但是仍然认为人生不一定要干自己最喜欢的事情,做it也是可以的,可能另一个原因也是因为本科学院前3%的成绩还是不错的的原因。
保守保送
本科毕业按照本科电子通信专业的背景,顺利的保送了通信专业研究生。这是我人生的另一个很重大的错误。其实在保送的时候就想过是否保送到计算机学院,但是因为思想的保守和懒得麻烦(现在想想其实应该是对自己在未知领域技能的不自信),所以仍然留在IT行业。
偏爱互联网
到了研二2015年发现自己对电子通信技术虽然了解,但是并没有互联网技术那么热爱。于是确定了自己一定要转行到互联网。那时候4G已经开始商用,移动互联网已经如火如荼。为了能了解互联网技术,我开始逼迫自己参考各种比赛,不是为了拿奖,而是为了督促自己学习更多的编程技能,甚至一度按照最火编程语言挨个学习。
互联技术拓展
研三初2016年开始督促自己向全栈工程师的道路走,学习了java后端、js前端,开发自己的网站,学习安卓前端,制作app。并且随着微信公众号的崛起,开始学习响应式编程,学习了jquery mobile,制作自己的公众号,为学校做公众号平台。在毕业前还开发了自己的小程序。但是因为本身不是计算机专业,自己的通信专业的本职工作还需要花费很多的时间。因此我的互联网技能是零碎的,不全面的,没有基础不成体系的。
放弃读博
2017年初,我毅然放弃读博,从通信专业硕士毕业,因为某些原因,进入部队工作。进入体制内的一年,没法接触互联网工作相关的内容,不过时间相对来说比较充足,有大量的时间能进行学习。在部队的这一年,空闲时间的都在安心看书,将自己之前学过的技术相关的具有影响力的书籍看了一遍,这样我的技能就更加体系化。并且在女朋友的影响下,我开始学习python,学习大数据,学习机器学习。
安心看书
2018年初,我离开部队,来社会找工作,因为没有社会工作经验,我又是以社招身份进行应聘,而且我又是通信直接转行互联网,所以找工作面临一定的限制。我花了三四个月的时间在阿里天池比赛上参加了一个比较喜欢的训练赛:广告点击率预测。我学习总结python技能,学习如何用python爬虫爬取数据,总结了各种爬虫案例;学习python如何做数据存储/分析/可视化;学习机器学习算法的原理/实例/python实现,以及各种python机器学习库numpy/panda/sklearn/tf/keras/opencv等,最后在3000多个参赛选手中拿到了top1。
第一份工作,接触云原生
我通过之前在学校的编程技能和比赛的结果去应聘,拿到了多个offer,那时成天的问自己是去大公司还是小公司。2018年6月,我为了能尽快的学到更多东西,希望能把自己缺失的一年社会工作经验找回来,最后选择了一家成长型AI独角兽,开始第一段社会工作经验。因为是视觉计算的AI公司,而我之前自己学习的是传统机器学习,所以并没有使用的场景,在公司我做起了微服务架构的工作,并在后面组建为数据平台和AI平台架构组。我也成为了组里的负责人。那时我来公司1年,也就是2019年中。这一年,我的收获要远远大于在学校零碎的学习。主要技能成长在python后端,云原生技术,大数据架构等方面。从总结python后端的相关技术:django/flask/tornado/asyncio/grpc,到开始总结docker/k8s/rancher/helm,从总结编程语言,到总结架构框架:自动化测试unittest/logging/Selenium/jenkins/postman/newman;到hadoop生态技术hadoop/hbase/hive/spark/zookeeper;到消息队列技术:kafka/rabbitmq/mqtt;到数据库技术:mysql/postgresql/mongo/redis/elasticsearch/clickhouse/druid/solrcloud,到分布式存储技术:ceph/gfs;到监控体系技术:ZipKin/Prometheus/grafana/Fluentd/Kibana;到服务网格网关技术:nginx/istio/kong/Linkerd2。我个人的规划也从前后端全栈变成了AI数据架构师。
来到腾讯
2019年底从公司离职,我来了腾讯,从事AI数据平台的建设。2020年距离高中毕业已经10年,这10年走了太多弯路,也总结了不少经验。这里写下我深有体会的一些感受:
为什么学习云原生
资源使用问题
手动分流
手动伸缩容
算力零散
利用率低
服务高可用问题
环境冲突
单点故障
服务阻塞无法感知
应用间影响
人工运维成本高
人工管理麻烦
部署应用复杂
分布式通信复杂
微服务调用复杂
docker/kubernetes入门过程
第一章 熟悉Linux环境
1、Win10安装Ubuntu18.04双系统
2、熟悉Linux常用工具和命令
第二章 熟悉Docker
3、安装配置Docker
4、Docker命令实践
5、Dockerfile文件编写
6、常用镜像部署
第三章 熟悉Kubernetes
7、kubernetes架构和部署
8、熟悉kubectl命令使用
9、k8s应用部署实践(上)
10、k8s应用部署实践(下)
第四章 熟悉Helm
11、Helm安装配置
12、熟悉Helm应用书写规则
13、编写自己的Helm应用
python 学习过程
python基础教程
python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器
python基础系列教程——Python库的安装与卸载
python基础系列教程——Python3.x标准模块库目录
python基础系列教程——Python中的编码问题,中文乱码问题
python基础系列教程——python基础语法全解
python基础系列教程——python中的正则表达式全解
python数据分析系列教程——python对象与json字符串的相互转化,json文件的存储与读取
python基础系列教程——python面向对象编程全解
python基础系列教程——数据结构(列表、元组、字典、集合、链表)
python应用教程
python应用系列教程——python使用socket创建udp服务器端和客户端
python应用系列教程——python使用socket创建tcp服务器和客户端
python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端
python应用系列教程——python使用scapy监听网络数据包、按TCP/IP协议进行解析
python应用系列教程——python使用smtp上传邮件,使用pop3下载邮件
python应用系列教程——python使用smtp协议发送邮件:html文本邮件、图片邮件、文件附件邮件
python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改
python应用系列教程——python操作office办公软件word
python应用系列教程——python操作office办公软件(excel)
python应用系列教程——python的GUI界面编程Tkinter全解
python后端
接口文档
swagger入门和实践(含docker部署swagger)
django
python后台架构Django开发全解
python后台架构Django教程——admin管理员站点
python后台架构Django教程——路由映射urls
python后台架构Django教程——templates模板
python后台架构Django教程——视图views渲染
python后台架构Django教程——数据模型Model
python后台架构Django教程——manage.py命令
python后台架构Django教程——项目配置setting
python后台架构Django教程——连接读写mysql数据库
python后台架构Django教程——日志系统
tornado
Tornado请求分析request, 获取请求参数
tornado使用mysql 连接池(torndb)
flask
python后台Flask 快速入门
asyncio
python后台——asyncio,aiohttp入门教程,多进程+asyncio
aiohttp进阶教程
grpc
gRPC传输协议使用(python教程)
protobuf序列化协议python教程
gunicorn
python之gunicorn的配置
aiohttp/flask python后端单元测试,单元测试覆盖率测试
python工具
python相关工具使用技巧(pip)
virtualenv虚拟独立python环境使用
Python下APScheduler的快速指南
python文件夹,文件监听工具(pyinotify,watchdog)
python命令行解析库——argparse库的使用
python分布式多进程框架 Ray
python自定义包的发布与安装
python调试利器pysnooper
python自动化测试教程
python测试系列教程 —— 单元测试unittest
python测试系列教程 —— 调试日志logging
python测试系列教程——python+Selenium自动化测试框架
python网络爬虫教程
抓包工具Fiddler的使用说明
python网络爬虫系列教程——python中urllib、urllib2、cookie模块应用全解
python网络爬虫系列教程——python中pyquery库应用全解
python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)
python网络爬虫系列教程——python中requests库应用全解
python网络爬虫系列教程——python中BeautifulSoup4库应用全解
python网络爬虫系列教程——PhantomJS包应用全解
python网络爬虫系列教程——Scrapy框架应用全解
python网络爬虫系列教程——Python+PhantomJS +Selenium组合应用
python网络爬虫系列教程——python网络数据爬虫误区,让你的爬虫更像人类
python数据分析存储教程
python数据分析系列教程——NumPy全解
python数据分析系列教程——Pandas全解
python数据存储系列教程——xls文件的读写
python数据存储系列教程——python对象与json字符串的相互转化,json文件的存储与读取
python数据存储系列教程——python(pandas)读写csv文件
python数据存储系列教程——python操作sqlite数据库:连接、增删查改、指令执行
python数据存储系列教程——python中mysql数据库操作:连接、增删查改、指令执行
python数据存储系列教程——python中mongodb数据库操作:连接、增删查改、多级路径
python可视化教程
python数据可视化系列教程——matplotlib绘图全解
python爬虫助手
各大网站RSS订阅源地址
腾讯股票接口、和讯网股票接口、新浪股票接口、雪球股票数据、网易股票数据
抓包工具Fiddler的使用说明
python爬虫案例
python爬虫案例——csdn数据采集
python爬虫案例——糗事百科数据采集
python爬虫案例——百度贴吧数据采集
python爬虫案例——爬取西刺免费代理服务器IP等信息
python爬虫案例——东方财富股票数据采集
python爬虫案例——证券之星股票数据采集
python爬虫案例——新浪腾讯股票数据采集
python爬虫案例系列教程——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
python爬虫案例系列教程——python爬取百度新闻RSS数据
python机器学习算法案例
机器学习书籍推荐
人工智能、机器学习、深度学习、数据挖掘、数据分析区分
数据挖掘工程师知识体系
特征工程:
python机器学习案例系列教程——GBDT构建新特征
关联挖掘:
python机器学习案例系列教程——关联分析(Apriori、FP-growth)
分类:
python机器学习案例系列教程——决策树(ID3、C4.5、CART)
python机器学习案例系列教程——基于规则的分类器
python机器学习案例系列教程——K最近邻算法(KNN)、kd树
python机器学习案例系列教程——极大似然估计、EM算法
python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器
python机器学习案例系列教程——优化,寻找使成本函数最小的最优解
python机器学习案例系列教程——线性函数、线性回归、正则化
python机器学习案例系列教程——逻辑分类/逻辑回归/一般线性回归
python机器学习案例系列教程——支持向量机SVM、核方法
python机器学习案例系列教程——集成学习(Bagging、Boosting、RF、AdaBoost、GBDT、xgboost)
python机器学习案例系列教程——GBDT算法、XGBOOST算法
python机器学习案例系列教程——CTR/CVR中的FM、FFM算法
python机器学习案例系列教程——LightGBM算法
聚类:
python机器学习案例系列教程——层次聚类
python机器学习案例系列教程——BIRCH聚类
python机器学习案例系列教程——k均值聚类、k中心点聚类
python机器学习案例系列教程——DBSCAN密度聚类
[python机器学习案例系列教程——网格聚类]
python机器学习案例系列教程——聚类算法总结
推荐系统:
python机器学习案例系列教程——推荐系统
搜索引擎:
python数据挖掘案例系列教程——python神经网络实现搜索引擎
图论:
python机器学习案例系列教程——最小生成树(MST)的Prim算法和Kruskal算法
机器学习总结
机器学习案例系列教程——算法总结
机器学习案例系列教程——损失函数总结
机器学习案例系列教程——优化方法总结(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)
机器学习案例系列教程——距离度量方法总结
机器学习案例系列教程——模型评估总结
python机器学习库教程
python机器学习系列教程——深度学习框架比较TensorFlow、Theano、Caffe、SciKit-learn、Keras
python机器学习库xgboost——xgboost算法
python自然语言处理库教程
NLP自然语言处理库系列教程——结巴中文分词
NLP自然语言处理库系列教程——gensim库
python机器学习库sklearn教程
python机器学习库sklearn——生成样本数据
python机器学习库sklearn——数据预处理
python机器学习库sklearn——特征提取
python机器学习库sklearn——特征选择
python机器学习库sklearn——K最近邻、K最近邻分类、K最近邻回归
python机器学习库sklearn——决策树
python机器学习库sklearn——k均值聚类
python机器学习库sklearn——BIRCH聚类
python机器学习库sklearn——DBSCAN密度聚类
python机器学习库sklearn——文档贝叶斯分类器
python机器学习库sklearn——线性回归
python机器学习库sklearn——岭回归(Ridge、RidgeCV)(L2正则化)
python机器学习库sklearn——Lasso回归(L1正则化)
python机器学习库sklearn——逻辑分类
python机器学习库sklearn——支持向量机svm
python机器学习库sklearn——SGD梯度下降法
python机器学习库sklearn——降维
python机器学习库sklearn——神经网络(分类、回归)
python机器学习库sklearn——集成方法(Bagging、Boosting、随机森林RF、AdaBoost、GBDT)
python机器学习库sklearn——多类、多标签、多输出
python机器学习库sklearn——参数优化(网格搜索GridSearchCV、随机搜索RandomizedSearchCV)
python机器学习库sklearn——交叉验证(K折、留一、留p、随机)
python机器学习库sklearn——模型度量
python深度学习系列教程
零基础入门深度学习(1) - 感知器
零基础入门深度学习(2) - 线性单元和梯度下降
零基础入门深度学习(3) - 神经网络和反向传播算法
零基础入门深度学习(4) - 卷积神经网络
零基础入门深度学习(5) - 循环神经网络
零基础入门深度学习(6) - 长短时记忆网络(LSTM)
零基础入门深度学习(7) - 递归神经网络
python深度学习案例教程
python神经网络案例——FC全连接神经网络实现mnist手写体识别
python神经网络案例——CNN卷积神经网络实现mnist手写体识别
python深度学习库tensorflow教程
python深度学习库tensorflow——实现FC全连接神经网络识别mnist手写体
python深度学习库keras教程
python深度学习库keras——安装
python深度学习库keras——各类网络层
python深度学习库keras——网络建模
python深度学习库keras实例教程
python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
python机器学习库keras——CNN卷积神经网络识别手写体
python机器学习库keras——CNN卷积神经网络人脸识别
python机器学习库keras——AutoEncoder自编码、特征压缩
python深度学习库教程
python深度学习库系列教程——python调用opencv库教程
k8s应用过程
python后端的相关技术:django/flask/tornado/asyncio/grpc,
自动化测试unittest/logging/Selenium/jenkins/postman/newman;
hadoop生态技术hadoop/hbase/hive/spark/zookeeper;
消息队列技术:kafka/rabbitmq/mqtt;
数据库技术:mysql/postgresql/mongo/redis/elasticsearch/clickhouse/druid/solrcloud,分布式存储技术:ceph/gfs;
监控体系技术:ZipKin/Prometheus/grafana/Fluentd/Kibana;
服务网格网关技术:nginx/istio/kong/Linkerd2。
学习体会
1、学习要成体系化:不要遇到问题只查问题,有时间最好把上下游问题都学习学习。我总结了自己python学习的各种过程和技术(左下角原文链接中),如果能帮到你最好。
2、比较专业的技术最好去官网学习:部分比较专业的技能,学习的人少,并且随着版本迭代,你看到的知识可能并不匹配你的使用场景,所以最好去官网学习,并且官网的知识往往也更体系化。并且要习惯看英文教程。
3、学会看书:成体系学习的另一个方法是看书学习,因为互联网人每天都是在网上查询,所以相较于其他行业更不偏向于从课本获取知识。而你如果想更体系化,尤其是你的技能比较专业化时,更应该偏向于从书上获取知识。
4、学会看源码:学习某种框架最好的方法那就是看源码,当你对你的框架了解到一定层度上,只有看源码能更进一步了。
5、愿意花钱学习:互联网因为免费才火爆,但是作为一个每月收益不小的互联网人,千万不要在乎付费学习。这些付费要远远小于你的成长收益。
6、脚踏实地:这是一个总给互联网人的心理建议。因为习惯了快速的从网络汲取知识,所以在心理认知上要更容易焦虑一些。所以最后送给大家的一句话:志存高远,脚踏实地
各阶段沉淀
本科初识编程
对于互联网,最开始实打实是个外行,本科期间是电子专业,农村的小子,没什么眼界,不懂自己要从事什么行业。大三学习按键精灵,搞一些重复性的电脑操作,这个算是启蒙。想搞的电脑自动化操作越来越复杂,就开始按照按键精灵里面的说法使用VB语言,开始学习VB。虽然那个时候对于计算机这些都是老掉牙的知识,但是对于一个外行,学着感觉还是很牛逼的。到了大四,看到网上的文章说微软的vb已经比较久远了,现在微软主推c#,所以开始学习c#,并开始为学校的部门办公室做一些小软件。然后在csdn上将这些技能总结下来,后来汇总在c#专栏里面
决心转行互联网
到了研究生,由于思想还是过于保守,选择原有专门保送硕士,仍然留在IT行业。但是那个时候就已经知道自己一定要转行到互联网。在研究生期间自己参加各种小比赛,培养自己的互联网技能。相继学习了java后端,js前端,jquery插件,css页面,jquery mobile响应式移动端web,安卓开发,并开始开发自己的网站,app应用,微信公共号,小程序。决心要做前后端全栈。
接触大数据
毕业以后由于部分原因,进入体制内一年,没法接触互联网工作相关的内容,不过时间相对来说比较充足,有大量的时间能进行学习。那个时候知道在私企很多大数据、算法相关工作比较火爆。于是看书学习大数据相关的技能,把他整理成了爬虫系列课程,echart系列课程,机器学习算法系列课程,以及python工具的系列课程。1年后从体制内离开,来到一家AI独角兽企业,开始第一段企业工作经验。
走进大数据云原生架构
由于是第一份工作,进步迅速,收获很大,我的主要工作在云原生和大数据以后部分python后端工作内容上。并整理大数据组件开发系列课程,python后端系列课程,云原生架构系列课程,并精心制作了云原生视频课,在AI独角兽私企的一年后我来到了ATM大厂,现在从事数据/AI架构相关的工作