后端通用面试教程
文章平均质量分 89
本课程的核心内容可以分为三个部分,分别是需要理解记忆的计算机底层基础,后端通用组件以及需要不断编码练习的数据结构和算法。
课程总体上是面向工作 3 年内的初中级程序员以及准备面试后端岗位的应届生,因为篇幅原因并不能涵盖所有的面试题,所以候选人需要做到举一反三。
红薯不甜
本人学识渊博、经验丰富,代码风骚、效率恐怖,前端、后端无不精通,熟练掌握各种框架,深山苦练20余年,一天只睡4小时,电话通知出bug后秒登vpn,千里之外定位问题,瞬息之间修复上线。
展开
-
26. Redis缓存过期
Redis 相对于传统的关系型数据库(例如 MySQL )而言,还具有设置过期时间的特性,在项目实战中,我们经常关心的三元组是。这里的过期时间(expire_time)是的具体执行方式,涉及到 Redis 的缓存过期策略。原创 2024-09-11 10:30:04 · 93 阅读 · 0 评论 -
25. Redis持久化
Redis 的设计核心是提供快速的查询和存储能力,所以所有的数据都被存储在内存中。相对于硬盘,内存中的数据是半持久化存储,当遇到不可抗阻力,例如断电或者硬件损坏导致的服务器宕机时,内存中的数据会完全丢失。为了防止 Redis 中的数据丢失,需要将数据持久化存储到硬盘。原创 2024-09-11 10:27:44 · 75 阅读 · 0 评论 -
24. Redis缓存问题
在小型项目中(例如大部分 toB 业务),Redis 被作为缓存,我们无需过多关注缓存的性能,但是对于高并发的场景(例如 toC 的在线电商业务),在商品秒杀或者库存抢购的时候,Redis 也可能存在诸多潜在的问题,例如缓存穿透、缓存雪崩。原创 2024-09-05 14:46:24 · 134 阅读 · 0 评论 -
23. Redis数据结构(二)
上一章节介绍了 SDS 数据结构,即 Redis 最基础的 Key-Value 存储实现,本章节继续介绍 Redis 底层的高级数据结构。Redis 的五种基本结构中还有一个叫做 zset 的数据结构,zset 保证了每个值的唯一性,这方面性质同传统的 set 集合,也可以对每个值赋予 score,按照 score 进行排序。这种高级性质依赖于底层的跳跃表数据结构实现。原创 2024-09-04 14:30:13 · 131 阅读 · 0 评论 -
22. Redis数据结构(一)
简单来说,Redis(Remote Dictionary Server)也是一个数据库,不过和传统数据库不同点在于 Redis 的数据存储在内存中,所以读写速度远超传统数据库(例如 MySQL ),同时因为Key—Value的数据存储形式非常零活,所以Redis被广泛应用在缓存方向,并且能适配各种实战的应用场景。Redis 提供了多种语言的 API ,比如常见的 Java、C++、Python 等,基本是后端开发中最常用的缓存中间件。原创 2024-08-30 14:21:35 · 131 阅读 · 0 评论 -
21.页面置换算法
操作系统的核心管理逻辑可以简化为进程管理、内存管理、文件管理。之前的小节已经介绍了进程的基本概念,每个进程都有独立的地址空间,这些地址空间被分为大小相同的块,定义为页(Page)。然而物理机的内存硬件空间是有限的,举例来说,我们装配最常见的 4G 内存条,但是很多进程例如单机游戏,运行时都需要占用几个 G 的内存空间,所以就需要用到虚拟内存。原创 2024-08-29 10:14:11 · 35 阅读 · 0 评论 -
20.常用命令
Linux 是基于 Unix 系统开发的开源操作系统内核,目前常见的发行版本 Ubuntu、RedHat、CentOS 等,互联网服务器一般都部署的是 Linux 系统。因为使用场景不同,Windows 系统更适合个人日常办公,相对于 Windows 系统的复杂图形化界面而言,Linux 一般只在远程服务器上部署纯命令行界面,所以熟悉 Linux 系统的常用命令比较重要。原创 2024-08-23 10:51:19 · 41 阅读 · 0 评论 -
19. fork
之前的小节中介绍了操作系统的进程,操作系统中有个创建进程的重要方法就是 fork 函数,当需要执行和本进程相关的独立任务时,一般需要创建一个有血缘关系的子进程。原创 2024-08-23 10:48:20 · 39 阅读 · 0 评论 -
18. 死锁
操作系统中的很多资源都是多个进程或者多个线程之间共享的,例如同一个文件,可能同时会被多个程序读写。或者是一个内存变量,存在同时被多个线程修改的可能。如果资源能够不能以合理的顺序访问就可能产生冲突,这种竞争资源的现象可能造成阻塞,引发死锁。死锁(DeadLock)可以发生在多个进程之间或者是多个线程之间,本文以线程作为观察对象。那么死锁的定义就是多个线程竞争同一个资源造成的僵局,如果没有外力推动,这种僵局会一直持续下去,线程的状态都无法继续推进。原创 2024-08-16 15:28:31 · 45 阅读 · 0 评论 -
17.进程间通信
上一小结谈到了操作系统中进程和线程的区别,其中进程之间、线程之间的通信方式不同,进程通信(Inter-Process Communication,简称 IPC)是指不同进程之间交换信息。操作系统中时刻都在进行 IPC,例如微信读取本地的文件,就是微信程序和文件系统进程交互的过程。原创 2024-08-14 10:47:33 · 38 阅读 · 0 评论 -
16. 进程和线程
从宏观的角度来看,操作系统就是我们日常使用的 Windows、MacOS、Linux 这类的系统,但是这种直观的用户交互界面只是操作系统的一小部分功能,操作系统如何决定系统的资源调度、如何处理内存的分配以及如何管理网络和文件系统,这些都是隐藏在用户界面之下的内容。从课程设计的角度来看,操作系统(Operating System)是计算机专业的核心专业课程,所以可以用来衡量候选人的计算机基本功。对于后端程序员,如果是使用 Java 语言,Java 中的多线程会涉及到进程和线程的关系,这是操作系统中的概念。原创 2024-08-13 14:31:38 · 40 阅读 · 0 评论 -
15. 计算机网络综合题目
虽然计算机网络是后端开发过程中必须要接触的模块,但是计算机网络相关的面试题大多都偏向理论,为了更好的理解在开发过程中计算机网络交互的作用,本小节会介绍一道网络相关的高频整合题目。原创 2024-08-06 11:04:47 · 237 阅读 · 0 评论 -
14. 计算机网络HTTPS协议(二)
上一章节中我们主要就 HTTPS 协议的前置知识进行介绍,下面会继续介绍 HTTPS 的通信过程以及抛出一些常见问题的探讨。因为候选人准备面试的时间和精力是比较有限的,我们在学习的过程要抓住重点,如果感觉对于细节缺乏了解,可以通过维基百科和查阅 StackOverflow 等方式进行自行补充。原创 2024-08-05 10:29:19 · 156 阅读 · 0 评论 -
13. 计算机网络HTTPS协议(一)
在上一章节中我们介绍了 HTTP 协议相关的面试题目,作为 HTTP 协议的扩展,HTTPS 协议也经常被面试官提起。因为对于大部分的前端、后端开发者,都接触不到 HTTPS 协议的开发场景,因为我们往往只关注请求路径后缀,例如关注 URL:,而非路径全称,所以考察 HTTPS 协议也是对候选人的知识深度的考验。原创 2024-08-02 10:40:03 · 106 阅读 · 0 评论 -
12. 计算机网络TCP四次挥手
上一章节分析了 TCP 建立连接的过程,既然有建立连接,对应的也有断开连接。数据传输完成之后,客户端和服务器端保持通信状态会占用资源开销,所以需要断开连接,TCP 协议中断开连接也被称为 TCP 四次挥手。原创 2024-08-01 14:48:55 · 113 阅读 · 0 评论 -
11. 计算机网络TCP三次握手
TCP 和 UDP 协议是计算机网络的重要组成协议,两者经常被拿来比较,其中 TCP 协议往往会被面试官深入考察。本节课程将和大家一起学习传输层的 TCP 和 UDP 协议。通过本节课程,你会了解到 TCP 和 UDP 协议的区别,重点是要掌握 TCP 协议的三次握手过程以及三次握手的必要性。原创 2024-07-31 10:49:49 · 84 阅读 · 0 评论 -
10. 计算机网络HTTP协议
无论是作为后端开发、前端开发、测试开发程序员或者是运维人员,在面试过程中,大概率都会被问到 HTTP 协议相关题目。因为伴随着 2010 年之后移动互联网在全世界的高速发展,各种各样的浏览器(Chrome、FireFox、Safari 等)层出不穷,也诞生了诸多服务端开发的语言(例如 Golang 语言),浏览器和服务端之间的交互是不可避免的,我们对于不同的浏览器和不同的服务端,总不能每次都创建一种新的交互协议,所以需要确定统一的协议规范,也就是本文的 HTTP 协议。什么是 HTTP 报文?原创 2024-07-30 15:00:00 · 179 阅读 · 0 评论 -
09. 计算机网络分层
互联网行业因为广为人知的高薪以及相对于传统工科行业更多的发展机会,最近几年涌入了越来越多的非计算机专业毕业的从业人员,校招 / 社招面试的时候,候选人往往也会被分为两种:科班和非科班,互联网科班一般特指大学就读计算机科学与技术或者软件专业,非科班则包含其他各大传统工科甚至是文科专业。某些大厂在招聘后端开发工程师时会严格要求科班背景,因为对于非科班的同学,一般都能胜任计算机网络应用层以上的工作(例如编写一个低并发的后台管理系统),但是对于计算机底层的知识往往是一片盲区。原创 2024-07-29 15:00:00 · 99 阅读 · 0 评论 -
08. Java 事务
MySQL 中事务(Transaction)的定义是对于一个或者多个 SQL 语句,要么全部执行成功,要么一个都不执行成功。在实际应用场景中,有很多需要事务的场景,例如在电商网站,顾客下单、付款以及商品扣减库存就应该在一个事务中执行,如果不能保证事务特性,就可能出现用户已经下单并且成功付款,但是在扣减库存逻辑出现异常,发货失败的情况。所以事务中的某个环节出现异常,之前执行的所有 SQL 语句都应该回滚。原创 2024-07-26 18:06:58 · 72 阅读 · 0 评论 -
07. Java 索引
对于常见的应用系统,读的流量远远高于写的流量,比如电商网站,商家在数据库中写入商品的价格和库存之后,访问页面的顾客会产生大部分的读流量。所以常见的现象是当应用系统的流量逐渐增加时,写操作不会成为数据库的性能瓶颈,但是复杂查询语句消耗的查询时间会越来越长,读操作更容易触碰数据库的查询性能瓶颈。MySQL 自身为了优化查询效率,更快的查询目标集合,定义了索引,也就是常用的 "键"(Key),MySQL 中的索引是单独存储在磁盘上的数据结构,使用索引可以快速查询满足特定条件的记录。原创 2024-07-25 10:57:46 · 643 阅读 · 0 评论 -
06. Java 左右连接
在之前的章节谈到了数据库设计范式,遵循范式之后,数据会被组织成不同的结构分散存储在不同的表内,例如所有学生会被存储在一张学生表,所有学生的成绩会被存储在一张成绩表,如果我们同时需要两张表的数据,就需要计算两张表间数据的映射关系,MySQL 数据库中最常用的方法就是连接。原创 2024-07-24 11:06:59 · 74 阅读 · 0 评论 -
05. Java 三大范式
在面向对象语言中涉及到诸多的设计模式,例如单例模式、适配器模式,设计模式的存在是为了让系统中的代码逻辑更加清晰,帮助开发者建立更加健壮的系统,同时满足易修改特性和易扩展特性。数据库设计时也存在类似设计模式的通用规范,被称为数据库范式。满足范式的数据库是简洁的,表与表之间的关系也清晰且明确,不会存储过多的冗余信息,在增删改查的时候也可以避免冗余的操作。原创 2024-07-23 10:53:52 · 248 阅读 · 0 评论 -
04. Java 数据类型
MySQL 中支持的数据类型从整体上可以分为数值类型和日期时间类型,其中数值类型可以分为整数类型、浮点数类型、定点数类型和位类型。整数类型包含常见的 SMALLINT、MEDIUMINT、INT、BIGINT,浮点数类型主要是 FLOAT 单精度浮点数类型和 DOUBLE 双精度浮点数类型。日期类型也有 DATE、TIME、YEAR、DATETIME、TIMESTAMP 类型。关于整数类型和浮点数类型存在一些比较常见的误区,经常被面试官考察。原创 2024-07-19 10:15:33 · 64 阅读 · 0 评论 -
03. Java 条件查询
在 MySQL 中使用 select 查询语句的时候,一般都会加上 where 语句或者 limit 语句限定查询结果的范围,两种子句都是过滤的作用。另外还有和 group by 语句配合使用的 having 限制条件。区分 where 和 having 语句的作用也是比较基础的题目。原创 2024-07-15 14:24:06 · 284 阅读 · 0 评论 -
02. 存储引擎
在校招或者社招面试中,无论你是 Java 后端、Cpp 后端、Python 后端,面试官都会详细地考察各种语法细节、框架知识,但是大多数候选人入职之后,都会体会到 "面试造火箭,上班拧螺丝"。面试时我们熟悉各种知识细节,入职后却发现大部分工作都是重复的 CRUD(Create - 增加,Retrieve - 查询,Update - 更新,Delete - 删除),这种现象其实很正常。原创 2024-07-11 17:42:59 · 199 阅读 · 0 评论 -
01. 课程简介
本课程的核心内容可以分为三个部分,分别是需要理解记忆的计算机底层基础,后端通用组件以及需要不断编码练习的数据结构和算法。计算机底层基础可以包含计算机网络、操作系统、编译原理、计算机组成原理,后两者在面试中出现的频率很少,课程主要关注网络和系统两个模块,计算机网络模块主要介绍了常见的 TCP 协议、HTTP/HTTPS 协议,操作系统模块主要介绍了操作系统的进程和线程、内存管理的页面置换算法等高频题。后端通用组件主要分为存储持久化数据的数据库,存储临时数据的缓存以及通信中间件。原创 2024-07-11 17:36:47 · 206 阅读 · 0 评论