C++拓展
1. 前言
前端时间一直在忙秋招, 没有时间写博客, 这篇文章将从语言, 设计模式, 开源组件, 开源数据库, 开源存储系统, 以及高性能服务器的角度, 带大家剖析一下, 校招生的拓展知识应该从哪些方面去学习
注: 本篇文章仅是个人观点, 文章中没有提到的技术不代表他不常用(可能是我太菜了没听过). 且本篇文章主要针对互联网的后端开发岗位而言,如果你学完了基础的知识,并且不知道如何继续学习什么东西, 希望这篇文章能对你有所帮助
2. 语言层面
我是学C++出生的, 据我所知, 现在的很多公司的后端技术栈中, 用到C++的并不多, 只有涉及到推广搜, 高性能服务器, 智能驾驶这一类对性能有极高要求的场景, 会使用到C++. 大部分场景用Java, GO, python就能解决问题
以下是我对语言层面的理解:
个人拙见,C++比较适合作为计算机初学者学习整个计算机体系内容的母语, 由于C++涉及到很多底层的优化和知识, 并且和服务器紧密联系, 对于我们的整个大厦的地基建造是大有好处的. 如果一上来就学习GO或python, 有一些底层的知识是空缺的, 对未来的发展不太友好. 其次, 掌握好C++后, 去学习Java或GO我认为是有必要的(毕竟语言转换成本不高). 真正到了公司后, 什么场景下适合用什么语言就使用什么语言, 而不是看你会什么语言
综上所述: 对于后端开发而言, 语言并不是最大的问题, 只要掌握好一门语言, 懂得底层原理, 对于校招生来说就很厉害了
3. 设计模式层面
现在市面上你会看见许多的设计模式, 什么工厂模式, 观察者模式…设计模式这么多, 这些我们都需要完全掌握吗?设计模式这么多, 应该怎样使用?怎样学习?
以下是我对设计模式的理解:
个人拙见, 设计模式不用都去学习一遍, 其实我们要做的是, 真正的理解设计模式的精髓: 对拓展开发, 对修改关闭这句话. 并且在我们使用设计模式时, 不应该看我们的项目场景能不能照搬某个设计模式的思路, 我认为正确的思考方式是: 先思考我们的项目有哪些地方可以被抽象出来, 再结合设计模式的精髓, 设计出自己的一个代码框架, 最后再根据此框架去查看它属于哪个设计模式. 这样对我们的技术能力会有很大的帮助
综上所述: 对于设计模式而言, 要摸透它的精髓, 并且经过实战不断的积累经验
4. 开源组件层面 4.1 RPC框架
RPC调用由于其超高的性能, 在公司内网, 或微服务架构中被广泛使用, 对于RPC的内容, 我推荐大家去了解一下以下几个知识点:
4.2 web应用框架
web应用框架, 诸如spring boot,node.js,可以快速用于搭建项目的结构, 以及配置项目的环境等等, 使用一些应用框架能极大的提高后端的研发效率,有兴趣可以下来细究
4.3 缓存组件
公司比较常用的缓存组件: redis,memcached. 它们常用于数据库查询优化和系统性能优化(如存储热点数据),对于缓存组件问题, 比较热门的是与redis相关的, 可以了解以下几个知识点:
4.4 任务队列
在公司内面对高并发场景时, 常常会使用任务队列, 也就是消息队列, 消息队列通过用于异步解耦, 削峰填谷的场景. 比较常用的消息队列有: Kafka,RockMQ,RabbitMQ. 对于消息队列, 可以了解以下几个知识点:
4.5 搜索组件
在面对大量数据的海量查询或海量数据的实时分析时, 经常会用到搜索组件Elasticsearch(ES)或solr, 如电商平台搜索商品, 社交平台搜索博主. 对于搜索组件, 你可以了解一下以下的问题:
5. 开源数据库层面
首先, 先对数据库进行一个分类: 关系式数据库, 非关系式数据库, 行式存储数据库, 列式存储数据库. 比较常见的数据库有: MySQL, 行式存储的关系式数据库, postgresql,行式存储的关系式数据库, mongodb, 行式存储的非关系式数据库, click house, 列式存储的关系式数据库
对于数据库, 可以了解以下知识点:
其实还有很多优秀的数据库, 但是对于数据库而言, 并不是让我们学习所有的数据库种类, 旨在让大家了解这些优秀的数据库的底层是如何设计的才能做到如此优秀的性能, 才会这么多人去用
6. 开源存储系统层面
存储组件有许多使用场景, 比如: 文件存储场景: 企业文档管理, 静态资源管理等. 对象存储场景: 云存储服务, 大数据存储, 音视频图片存储等. 对于存储系统, 可以了解一下以下几个知识点:
7. 高性能服务器层面
后端开发往往是和服务器打交道, 所以对于服务器的技术栈也要过硬! 对于服务器而言, 老生常谈的问题无非就是: 怎样做高并发?怎样做低延迟? 这里我抛出几个问题留给同学们思考一下:
8. 总结以及拓展
当然, 对于校招的后端技术栈学习远远不止于此, 像C++中的一些开源组件, 如TCmalloc,ABseil-CPP,Folly. 以及C++中关于编译的组件: cmake, bazel. 当然还有容器化技术: docker, k8s等, 都值得我们去探讨, 去学习.
最后我想告诉大家的是, 学习以上所有的内容并不是为了应付面试的, 而是在你学习这些优秀思想的的同时, 你的认知, 你的技术能力会得到质的提升, 当你下次再遇见相似的问题, 曾经学过的知识会浮现在你的脑海, 助你度过难关. 所以, 加油吧少年, 做后端程序员一定要对技术保持热爱, 这才是我们工作,学习的动力.
希望我的文章能对你有所帮助
暂无评论内容