以下内容均来自和gpt的对话,感恩gpt老师的“耐心”解答,让我这辈子第一次成为了勇于提问的学生,感恩~
由于我对后端的学习非常浮于表面,目前想选一个具体的知识点去钻研,之前面试时面试官给了我一些范围,包括但不限于:框架对比、优化查询速度、多线程分布式、高并发等。
由于我整个知识体系没有建立起来,无法选择接下来的学习内容,我决定先了解后端的发展过程,了解它最开始它包括哪些技术,因为遇到了什么问题,所以增加了什么环节,涉及到了哪些技术。并且看看自己目前处于什么阶段,下一步最应该学习哪一部分的技术,所以有了这一次和gpt的问答。
内容可能非常小白,但也许有点用的吧,也许~
下面是我本次对话的知识点总结,如有错误,欢迎批评指正。
后端开发的发展过程及主要技术点
一、初始:基础的后端开发
1.1 服务器、数据库和编程语言
- 最初,后端开发主要涉及服务器(如Apache、Nginx)、数据库(如MySQL、PostgreSQL)和一种服务器端编程语言(如Java、Python、Ruby)。
- 这一阶段的核心是理解如何处理HTTP请求,执行业务逻辑,与数据库交互(CRUD操作:创建、读取、更新、删除),并返回响应。
1.2 框架的出现
- 为了简化开发过程,出现了许多框架,如Spring(Java)、Django(Python)、Rails(Ruby)。
- 框架提供了标准化的方式来构建和部署网站和应用程序,包括路由、模板、ORM(对象关系映射)等工具。
1.3 提问环节
Q1.3.1:为什么会出现这么多种框架、服务器、编程语言?
- 不同的编程语言有各自的特点和优势,适用于不同类型的项目。例如,Java适用于大型企业级应用,Python适合快速开发和数据科学。
- 不同的框架针对不同的编程语言和设计哲学。例如,Spring适合Java生态,Django适合Python开发者。
- 服务器软件如Apache、Nginx等各有所长,比如Nginx在处理静态内容和高并发方面表现更佳。
二、进阶阶段:性能和优化
2.1 缓存和数据库优化
- 随着应用规模的扩大,性能问题开始显现。这时,引入了缓存系统(如Memcached、Redis)来提高数据检索速度,减少数据库负担。
- 数据库的查询优化、索引的使用也成为关键。
2.2 异步处理和多线程
- 为了提高应用的响应速度和处理能力,开始使用异步编程和多线程技术。
2.3 提问环节
Q2.3.1:什么是缓存系统?
临时存储频繁访问的数据,以便快速访问。它通常存储在内存中,访问速度比磁盘存储(如数据库)快得多。能减少对数据库或其他主要数据源的访问次数,从而提高数据检索的速度和减少延迟。
Q2.3.2:数据库的查询优化包括哪些?
- 查询优化通常包括合理设计表结构、使用有效的索引、编写高效的SQL查询语句等。
- 索引是优化数据库查询的一个重要方面,它能显著加快数据检索速度。其他优化方法包括避免全表扫描、优化查询逻辑、使用查询缓存等。
Q2.3.3:避免全表扫描、优化查询逻辑、适用缓存等技术分别是什么,是程序员手动配置吗?
- 全表扫描 :查询时检查表中的每一行,通常发生在没有使用有效索引的情况下。全表扫描效率低下,应尽量避免。
- 优化查询逻辑:优化查询逻辑包括使用高效的SQL查询,避免不必要的复杂操作,如过多的嵌套查询、大量的数据联合等。查询逻辑优化需要程序员基于具体的业务场景手动进行。
- 使用查询缓存:查询缓存是指将常见查询的结果存储起来,当相同的查询再次发生时直接从缓存中获取结果。某些数据库管理系统提供自动查询缓存,但在应用层也可以手动实现,比如使用Redis。
Q2.3.4:异步编程和多线程技术的区别和联系和联系是什么?在后端的应用举例
①异步编程
总结:并没有同时执行多个任务,只是避免长期处于堵塞态,且可在单线程内实现。
异步编程允许程序在等待一个操作完成(如I/O操作)时继续执行其他任务。它主要用于提高应用的响应性和效率,避免程序在执行长时间操作时处于阻塞状态。异步编程可以在单线程内实现,比如JavaScript的Node.js环境。
应用举例:一个Web服务器在处理某个需要长时间数据库查询的请求时,可以继续响应其他用户的请求,而不是等待查询完成。
②多线程技术
总结:同时执行多个任务,会涉及线程安全和数据同步的问题
多线程技术允许程序同时执行多个任务,每个任务在不同的线程中运行。它主要用于提高程序的处理能力,特别是在多核CPU环境下,可以显著提高程序的运行效率。在多线程环境中,各个线程可以同时执行,但这也带来了线程安全和数据同步的挑战。
应用举例:一个在线购物网站的后端在高流量期间(如促销活动)使用多线程来同时处理成千上万的用户订单请求。
三、高级阶段:扩展性和可维护性
3.1 微服务架构
- 随着应用变得更加复杂,单体应用开始显得笨重,难以维护和扩展。这时,微服务架构应运而生,它将大型应用拆分为小的、独立的服务。
- 技术如Docker和Kubernetes被用于容器化和微服务的管理。
3.2 持续集成和持续部署(CI/CD)
- 为了提高开发效率和代码质量,引入了自动化的测试和部署流程,即CI/CD。
- 工具如Jenkins、GitLab CI/CD在这个阶段发挥重要作用。
3.3 提问环节
Q3.3.1:微服务架构怎么拆分应用的,拆分后哪些属于后端需要掌握的技术
①拆分应用
在微服务架构中,大型应用被拆分成小的、独立的服务,每个服务负责应用的一个特定功能。每个服务可以独立部署、升级和扩展,通常围绕业务能力组织。
②后端需要掌握的技术
容器化技术(如Docker)用于封装服务及其环境。
Kubernetes等容器编排工具用于管理和自动化容器的部署。
API网关、服务发现和负载均衡等技术用于服务间的通信和管理。
Q3.3.2:架构和框架有什么区别和共同点?有了spring框架后,为什么还需要微服务架构?
简单来说,架构对整体的划分,决定了有哪些模块,模块之间按如何交互,框架才是具体每个模块内部的设计规范。下面是gpt老师的答案:
①架构
抽象版答案:架构是一种高层次的计划,它定义了系统的整体结构和行为。架构决定了系统的组件如何交互,包括数据流、控制流和模块的组织方式。
打比方:想象你是一个城市规划师,你需要决定城市中的建筑如何分布,道路如何规划,不同区域如何功能划分(比如商业区、住宅区、工业区等)。这个过程就像软件的“架构”过程。你决定软件的整体结构和组件如何分布和交互。
比如在微服务架构中,你决定将一个大型应用拆分为许多小的、服务化的组件。
②框架
抽象版答案:框架是一种特定的软件开发环境,为应用程序的开发提供了基础结构和必要的支持。框架通常实现了某种架构模式,提供了代码库和工具集,以规范化开发过程,减少重复工作。
打比方:现在,想象你是一名建筑师,需要设计一栋具体的建筑。你会使用一些预先定义的设计模式(比如高层建筑、别墅、公寓等),这些设计模式就像是建筑的“框架”。在软件中,框架提供了一种具体的方式来构建应用的某个部分。
比如Spring框架,它提供了构建Web应用、访问数据库等一系列预定义的方法和工具。
③Spring框架与微服务架构的区别与联系
Spring框架:像建筑师的工具箱,提供了构建应用的具体工具和组件。使用Spring框架,你可以构建应用的不同部分,如数据库访问、安全控制、Web服务等。但Spring框架本身并不告诉你应用的整体结构应该是什么样的。
微服务架构:它更像是城市规划的蓝图,告诉你应该如何组织和部署你的应用。在微服务架构中,你将应用分解为一系列小的、相互独立的服务。每个服务可以单独开发、部署和扩展,它们通过网络通信协同工作。
在实际的软件开发中,你需要架构来指导整个应用的结构设计,同时需要框架来实现应用的具体功能。Spring框架可以用于实现微服务架构中的单个服务,但微服务架构本身提供了更高层次的组织和部署指导。
Q3.3.3 CI/CD就是简单的功能测试吗?为什么提高开发效率和代码质量?
①持续集成(CI)
抽象版答案:指自动化地将代码变更合并到主分支(在下面有解释)的过程。它通常包括自动编译、测试和构建应用。
打比方:想象你和你的朋友们在同一个大型的乐高项目上合作。你们每个人负责构建项目的不同部分。当你完成你部分的构建时,你需要把你的乐高部分添加到整个项目中去。但你也需要确保,加入你的部分后,整个乐高项目仍然能够稳固地站立,没有被破坏。在软件开发中,CI就像是这个过程。开发人员频繁地将代码更改合并到主项目中(这个主项目就像是“主分支”),同时确保这些更改没有破坏任何东西。
②持续部署(CD)
抽象版答案:是指自动化地将变更部署到生产环境的过程。
打比方:接下来,想象一旦整个乐高项目完成,你需要将它展示给大家。在软件开发中,CD指的是自动化地将软件发布到可以被用户使用的地方,比如将网站更新到服务器上。
③提高开发效率和代码质量:
通过自动化测试和部署,CI/CD减少了人为错误,确保了代码的质量和稳定性。
它允许开发团队更快地响应变更,加快产品的迭代速度。
④补充
CI/CD并不是像Git这样的代码管理工具。它更像是一个流程或者说是一套自动化的步骤,用来帮助团队更有效率地开发软件,并确保软件的质量。它经常使用一些工具(如Jenkins、Travis CI等)来自动化执行这些步骤。
四、当前趋势和未来发展
4.1 安全性和认证
- Web安全成为了重点,涉及到加密、OAuth、JWT等技术。
- Spring Security等框架提供了强大的安全功能。
4.2 云服务和无服务器架构
- 云计算的兴起使得无服务器(Serverless)架构和云服务(如AWS、Azure、Google Cloud)变得越来越受欢迎。
- 它们提供了弹性、可扩展的计算资源,以及服务如数据库、消息队列、存储等。
4.3 响应式编程
- 随着实时数据处理和高并发的需求增加,响应式编程变得重要。
- Spring WebFlux等技术支持响应式编程模型。