0
点赞
收藏
分享

微信扫一扫

IJCAI-信也科技杯全球AI大赛-华东师范大学亚军队伍分享

炽凤亮尧 2024-09-06 阅读 20

C++拓展

1. 前言

前端时间一直在忙秋招, 没有时间写博客, 这篇文章将从语言, 设计模式, 开源组件, 开源数据库, 开源存储系统, 以及高性能服务器的角度, 带大家剖析一下, 校招生的拓展知识应该从哪些方面去学习


2. 语言层面

我是学C++出生的, 据我所知, 现在的很多公司的后端技术栈中, 用到C++的并不多, 只有涉及到推广搜, 高性能服务器, 智能驾驶这一类对性能有极高要求的场景, 会使用到C++. 大部分场景用Java, GO, python就能解决问题

以下是我对语言层面的理解:

综上所述: 对于后端开发而言, 语言并不是最大的问题, 只要掌握好一门语言, 懂得底层原理, 对于校招生来说就很厉害了


3. 设计模式层面

现在市面上你会看见许多的设计模式, 什么工厂模式, 观察者模式…设计模式这么多, 这些我们都需要完全掌握吗?设计模式这么多, 应该怎样使用?怎样学习?

以下是我对设计模式的理解:

综上所述: 对于设计模式而言, 要摸透它的精髓, 并且经过实战不断的积累经验


4. 开源组件层面

4.1 RPC框架

RPC调用由于其超高的性能, 在公司内网, 或微服务架构中被广泛使用, 对于RPC的内容, 我推荐大家去了解一下以下几个知识点:

  • RPC是什么?
  • 为什么有了HTTP还要有RPC?
  • 什么场景下用RPC,什么场景下用HTTP?
  • protobuf是什么?
  • 为什么PB比json和xml快?
  • 有哪些常用的RPC框架?(实操RPC调用)

4.2 web应用框架

web应用框架, 诸如spring boot,node.js,可以快速用于搭建项目的结构, 以及配置项目的环境等等, 使用一些应用框架能极大的提高后端的研发效率,有兴趣可以下来细究


4.3 缓存组件

公司比较常用的缓存组件: redis,memcached. 它们常用于数据库查询优化和系统性能优化(如存储热点数据),对于缓存组件问题, 比较热门的是与redis相关的, 可以了解以下几个知识点:

  • redis是什么? 为什么要有它?
  • redis常用于什么场景?
  • redis集群架构通常是如何设计的?
  • redis是如何解决, 缓存击穿,缓存穿透,缓存雪崩等问题的?

4.4 任务队列

在公司内面对高并发场景时, 常常会使用任务队列, 也就是消息队列, 消息队列通过用于异步解耦, 削峰填谷的场景. 比较常用的消息队列有: Kafka,RockMQ,RabbitMQ. 对于消息队列, 可以了解以下几个知识点:

  • 消息队列是什么? 为什么要有它?
  • Kafka通过什么策略来实现: 高性能, 高可用, 高拓展的?
  • 为什么RockMQ抄袭了Kafka的设计, 吞吐量却没有Kafka高?

4.5 搜索组件

在面对大量数据的海量查询或海量数据的实时分析时, 经常会用到搜索组件Elasticsearch(ES)或solr, 如电商平台搜索商品, 社交平台搜索博主. 对于搜索组件, 你可以了解一下以下的问题:

  • ES是什么? 什么场景下会使用到?
  • ES是通过哪些策略来保证它搜索效率的?
  • 什么时候用ES,什么时候用数据库?

5. 开源数据库层面

首先, 先对数据库进行一个分类: 关系式数据库, 非关系式数据库, 行式存储数据库, 列式存储数据库. 比较常见的数据库有: MySQL, 行式存储的关系式数据库, postgresql,行式存储的关系式数据库, mongodb, 行式存储的非关系式数据库, click house, 列式存储的关系式数据库

对于数据库, 可以了解以下知识点:

  • 关系式数据库和非关系式数据库有什么区别?
  • 行式存储和列式存储有什么区别?
  • 怎样根据业务选择不同的数据库?
  • postgresql对比MySQL有哪些优势?
  • 为什么postgresql的查询效率比MySQL高?
  • mongodb在什么场景下使用的较多?
  • click house是如何保证查询效率的?
  • LSM tree是什么? 有什么用?
  • MySQL的索引底层是什么?
  • MySQL的事务是什么?
  • MySQL的事务的不同隔离级别的实现原理?
  • MVCC是什么? 使用场景有哪些?

6. 开源存储系统层面

存储组件有许多使用场景, 比如: 文件存储场景: 企业文档管理, 静态资源管理等. 对象存储场景: 云存储服务, 大数据存储, 音视频图片存储等. 对于存储系统, 可以了解一下以下几个知识点:

  • 为什么要有存储组件? 直接使用数据库不行吗?
  • 业内有哪些常用的存储组件?(分种类)
  • 什么场景下应该选择什么类型的存储组件?
  • 阿里巴巴和百度都有大规模的Hadoop集群,它们的用处是什么?为什么要选择Hadoop?
  • 一些常用的存储组件, 如Amazon,Hadoop,它们是怎样做到高拓展, 高可用的?

7. 高性能服务器层面

后端开发往往是和服务器打交道, 所以对于服务器的技术栈也要过硬! 对于服务器而言, 老生常谈的问题无非就是: 怎样做高并发?怎样做低延迟? 这里我抛出几个问题留给同学们思考一下:

  • 高性能服务器的设计需要考虑哪些点?
  • Reactor模式是什么? 有几种实现方式? 哪种方式并发量最高?
  • 什么场景下用epoll实现高并发? 什么场景下用AIO实现高并发?
  • 当一台机器扛不住压力时, 应该怎么办?(负载均衡)
  • 怎样设计项目的架构, 使得项目既能处理大量请求, 又能做好容灾处理?
  • 怎样优化服务器性能?(从算法层面, 并发层面, 网络层面, 数据库层面)
  • 最后推荐大家阅读: <<高性能服务器的设计>>一书,后端程序员的宝典

8. 总结以及拓展

当然, 对于校招的后端技术栈学习远远不止于此, 像C++中的一些开源组件, 如TCmalloc,ABseil-CPP,Folly. 以及C++中关于编译的组件: cmake, bazel. 当然还有容器化技术: docker, k8s等, 都值得我们去探讨, 去学习.

希望我的文章能对你有所帮助

  • 最后在此特别鸣谢我在实习期间的一位同事davia,davia让我学到了后端中很多常用且优秀的知识,对我个人能力的提升有很大帮助!
举报

相关推荐

0 条评论