后端技术面试38讲 / 全面构建你的后端知识体系
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
  • 课程目录
  • 课程介绍
  • 开篇词 | 掌握软件开发技术的第一性原理

    绝大多数新技术其实都脱胎于一些既有的技术体系,我们应该从软件技术的第一性原理出发,了解它们。

  • 01丨程序运行原理:程序是如何运行又是如何崩溃的?

    代码是如何运行的?在运行中可能会出现什么问题呢?

  • 02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?

    如果基本的数据结构没有掌握好,如何能开发好一个稍微复杂一点的程序呢?

  • 03丨Java虚拟机原理:JVM为什么被称为机器(machine)?

    JVM的全称是Java Virtual Machine,你有没有想过,这样一个程序为什么被称为机器(Machine)呢?

  • 04丨网络编程原理:一个字符的互联网之旅

    我们在淘宝的搜索框随便输入一个字符“a”,就会屏幕上看到一大堆商品,这是怎么做到的?

  • 05丨文件系统原理:如何用1分钟遍历一个100TB的文件?

    文件是存储在硬盘上的,文件的读写访问速度必然受到硬盘的物理限制,那么如何才能1分钟完成一个100T大文件的遍历呢?

  • 06丨数据库原理:为什么PrepareStatement性能更好更安全?

    SQL的查询条件尽量包含索引字段,但是为什么呢?这样做有什么好处呢?

  • 07丨编程语言原理:面向对象编程是编程的终极形态吗?

    软件架构师必须站在一个很高的高度去审视自己软件的架构,才能构建出一个经得起时间考验的软件系统。

  • 答疑丨Java Web程序的运行时环境到底是怎样的?

    今天,我将会针对这一模块中大家提出的普遍问题进行总结和答疑。

  • 08丨软件设计的方法论:软件为什么要建模?

    网络虚拟世界,是一个恢弘大气的罗马都城,还是一片垃圾遍地的棚户区,关键就在于,软件建模。

  • 09丨软件设计实践:如何使用UML完成一个设计文档?

    下面我们讨论如何画这7种模型图,以及如何在需求分析、概要设计、详细设计三个阶段使用这7种模型输出合适的设计文档。

  • 10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?

    在软件设计开发这个领域,好的设计和坏的设计最大的差别在哪里呢?

  • 11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?

    有没有办法不修改代码却能实现需求变更呢?

  • 12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?

    如何能够做到让其他工程师不调用代码就可以使用代码的功能特性呢?

  • 13丨软件设计的里氏替换原则:正方形可以继承长方形吗?

    继承似乎比多态和封装要简单一些,但实践中,继承的误用也很常见。

  • 14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?

    设计类的时候,我们应该把强相关的元素放在一个类里,而弱相关性的元素放在类的外边。保持类的高内聚性。

  • 15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?

    如何让缓存类的使用者看不到缓存重构的方法,以避免不必要的依赖和方法的误用?

  • 16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程

    设计模式的精髓在于对面向对象编程特性之一——多态的灵活应用,而多态正是面向对象编程的本质所在。

  • 17 | 设计模式应用:编程框架中的设计模式

    我们写代码的时候,只需要关注自己的业务逻辑就可以了。那些通用的功能,是由一些通用的框架来完成的。

  • 18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?

    有没有不阻塞线程的编程方法呢?

  • 19 | 组件设计原则:组件的边界在哪里?

    我们之前说过,软件设计的核心目标就是高内聚、低耦合。那么今天我们从这两个维度,看组件的设计原则。

  • 20 | 领域驱动设计:35岁的程序员应该写什么样的代码?

    如果你对自己要开发的业务领域没有清晰的定义和边界,没有设计系统的领域模型,那么很容易在后续的开发中陷入冲突。

  • 答疑丨对于设计模式而言,场景到底有多重要?

    今天,我将会针对遗留的问题进行总结和答疑,并且在最后列了一个书单,可能会对你学习设计模式有一些帮助。

  • 21丨分布式架构:如何应对高并发的用户请求

    如何解决高并发的用户请求带来的问题?

  • 22 | 缓存架构:如何减少不必要的计算?

    那么有没有办法减少到达服务器的并发请求压力呢?

  • 23 | 异步架构:如何避免互相依赖的系统间耦合?

    如何提高系统的写操作的性能呢?系统间的耦合情况又该如何避免呢?

  • 24 | 负载均衡架构:如何用10行代码实现一个负载均衡服务?

    负载均衡是如何实现的,如何将不同的请求分发到不同的服务器上呢?

  • 25 | 数据存储架构:如何改善系统的数据存储能力?

    在高并发的情况下,最容易出现性能问题的就是数据存储。那么解决的手段都有哪些呢?

  • 26 | 搜索引擎架构:如何瞬间完成海量数据检索?

    Google是如何做到在如此短的时间内完成了如此庞大的数据搜索呢?

  • 27 | 微服务架构:微服务究竟是灵丹还是毒药?

    究竟该不该上微服务?微服务是灵丹还是毒药?

  • 28 | 高性能架构:除了代码,你还可以在哪些地方优化性能?

    进行性能优化的一个首要前提是,我们必须知道系统当前的性能状况,然后才能进行性能优化。

  • 29 | 高可用架构:我们为什么感觉不到淘宝应用升级时的停机?

    互联网的高可用是说,在上面各种情况下,应用都要是可用的,用户都能够正常访问系统,完成业务处理。这似乎是不可能的任务。

  • 30 | 安全性架构:为什么说用户密码泄漏是程序员的锅?

    系统安全是一个老生常谈又容易被忽视的问题,往往只有在系统被攻击了,数据泄漏了,才会关注软件安全问题。

  • 31 | 大数据架构:大数据技术架构的思想和原理是什么?

    面对如此庞大的数据,如何存储,如何利用大规模的服务器集群处理计算大量的数据,就是大数据技术的核心关键。

  • 32 | AI与物联网架构:从智能引擎到物联网平台

    当我们在说大数据技术的时候,说的可能是几种差别很大的技术。那么,这些技术都是什么呢?

  • 33 | 区块链技术架构:区块链到底能做什么?

    区块链为什么能吸引这么多的关注?它到底能做什么?它的技术原理是什么?又为何如此曲折?

  • 答疑丨互联网需要解决的技术问题是什么?

    我在文章末尾留下的很多思考题都是关于分布式系统的关键技术点的,在这里,我再进行一些回顾和补充。

  • 34 | 技术修炼之道:同样工作十几年,为什么有的人成为大厂架构师,有的人失业?

    如何保持技术能力持续进步,使工作年限成为自己的优势而不是缺点呢?

  • 35 | 技术进阶之道:你和这个星球最顶级的程序员差几个等级?

    从根本上说,技术进阶根本没有捷径,所谓的捷径,其实是你经历了各种努力和挫折后,最后化蛹成蝶的惊鸿一瞥。

  • 36丨技术落地之道:你真的知道自己要解决的问题是什么吗?

    你在每次解决问题的时候,是否想清楚了问题的本质究竟是什么?这是谁的问题?谁能解决这个问题?你在为谁解决问题?

  • 37丨技术沟通之道:如何解决问题?

    我们在日常工作中,总要和很多人合作。在这些合作过程中,可能会遇到各种问题。

  • 38丨技术管理之道:你真的要转管理吗?

    技术转管理这条路似乎很光明,是软件技术人员一条不错的职业发展之路。但是,这条光明的道路其实隐藏了一个非常重要的前提。

  • 答疑丨工作中的交往和沟通,都有哪些小技巧呢?

    关于工作中的交往与沟通,我这里再分享一些小的技巧。

  • 加餐 | 软件设计文档示例模板

    上一篇文章中,我讲了每种UML模型图的画法,我们可以将不同阶段输出的模型图放在一个文档中,构成一篇设计文档。

  • 结束语丨期待未来的你,成为优秀的软件架构师

    如何才能成为一个技术团队中值得信赖的优秀软件架构师?这就是我的专栏想要为你呈现的答案。

  • 期末测试丨快来测测你对专栏内容掌握到何种程度了

    快来检测一下吧!

【限时特惠】

限时秒杀 ¥79,输入口令「5252study」再减 ¥10,到手仅 ¥69

你将获得

  1. 架构师必备的3大技术体系;
  2. 软件设计核心方法论详解;
  3. 掌握软件编程本质原理;
  4. 后端工程师的成长路线图。

讲师介绍

李智慧,极客时间专栏《从0开始学大数据》作者,同程艺龙交通首席架构师、Apache Spark 代码贡献者,长期从事大型网站架构、大数据的研发工作,曾担任阿里巴巴技术专家、Intel亚太研发中心架构师、宅米和 WiFi 万能钥匙 CTO,有超过 6 年的线下咨询、培训经验,著有畅销书《大型网站技术架构:核心原理与案例分析》。

课程介绍

我们都知道,后端技术包罗万象,从面向过程到面向对象,从数据库到中间件。后端技术不仅涵盖各种底层原理,还有各种层出不穷的技术。对于一个刚进入或是即将进入技术领域的人来说,常常面对的困惑就是,这些知识我们到底该掌握哪些?又该掌握到何种程度呢?

技术纷繁复杂,处在这个十字路口,我们总是很容易迷失方向。要么选择抱着厚厚的书籍盲啃,好不容易看完了,又不知道该怎么用;要么就是追随各种技术潮流,但真正可以用到工作中的,又有多少呢?

这两种情况都会让人感到无所适从,而避免它们的最好方式就是形成一套属于自己的技术体系,让其提供坚定的理论支撑,在千变万化的技术道路上也能走得稳健。

一切技术的产生与发展都离不开最基本的原理,只要追本溯源,了解技术体系最基本、最底层的原理,我们就能根据这些知识储备建立自己的后端技术框架,从而搭建一条完整的成长道路。

在这个专栏中,作者将通过自己多年的架构师经验,总结出了程序员必备的3大技术体系及原理,软件的基础原理、软件的设计原理以及架构的核心原理,涵盖日常工作中所能接触的核心技术知识,从而帮你构建一套完整的软件编程方法论以及技术思维框架。

专栏会讲哪些知识?

专栏会系统覆盖有关后端技术的知识体系,比如数据库的原理、网络编程的原理、面向对象与面向过程真正的区别等。通过回答实际的问题场景,由点到面地引出背后的关键原理。

专栏模块是如何设置的?

专栏共4个模块,38篇文章。按照顺序依次讲解软件的基础原理、软件的设计原理、架构的核心原理以及技术人的思维修炼。

在第一个模块“软件的基础原理”中,主要讲述程序运行中背后的技术体系,主要涵盖运行原理、网络编程原理、数据结构原理、数据库原理等。

在第二个模块“软件的设计原理”中,主要探讨我们在编程的过程中应该有怎样的视野与知识储备,比如如何写设计文档?软件设计中的原则都有哪些?真正的面向对象是怎样的?

在第三个模块“架构的核心原理”中,我们将把视野投放到更大,更宏观的架构体系中,接触架构的不同类型,并了解它们的原理与区别。比如分布式架构、高可用架构,以及目前风头正盛的的AI与物联网架构等。

在最后一个模块“技术人的思维修炼”中,则主要讲述身为技术人,应该如何保持不断进步的能力以及宏观的视野?

课程目录

适合人群

本专栏面向后端技术初学者以及高校计算机专业的学生。专栏以工作或学习中常见的问题为起始点,从软件的基础、设计以及架构三个方面系统梳理程序编码的第一性原理,帮助你全面建立有关后端技术的知识体系。

不适合人群:从事后端5年以上的程序员

特别放送

订阅须知