认识并了解常见的流媒体协议
介绍流媒体协议
什么是流媒体协议?
协议是定义数据如何在网络中传输的规则和流程,千万要把它和格式分开,格式是定义音视频数据如何组织和封装,包括容器格式和编码格式的。
流媒体协议简要来说就是视频 / 音频在网络上 实时传输
的规则。包括规定了音视频数据如何被切分、打包、在网络中传输以及在接收端如何还原这种。
流媒体协议是视频在线传输的协议。
互联网上流媒体技术的变更
在过去的接近10多年时间里(从2004年到2018年),网页视频播放一直是
Flash 技术的天下,我们所熟悉的众多视频网站和新闻门户网站一直都在使用
Flash 技术来播放网页视频。
这里的主要原因是IE浏览器的高比例占有量和 Flash
插件在客户端的普及,还有就是主要流媒体服务器产品对 RTMP 协议和FLV
视频格式的广泛支持,这是这一个时期的视频生态系统。
在那个浏览器功能贫瘠的年代,Flash
插件几乎是网页视频的唯一救命稻草。RTMP 低延迟,而且 FLV
容器简单,非常适合流式传输。但是,他太封闭了,不管是服务端的生态 FMS
还是 客户端的 Flash...
算法笔试—美团20260314春招实习笔试
T1 小美的因子数量
image-20260314102158293
image-20260314102203440
一个正整数的因子个数为奇数,当且仅当它是 完全平方数
因数通常是成对出现的,只有当 d = n/d
时,这一对因子才会合并为一个,从而使总数变成奇数。而 d = n/d 意味着
n = d2,即
n 是一个完全平方数(如 1, 4,
9, 16…)。
因此,题目要求的区间 [l, r]
内因子数量为奇数的数的个数,等价于问:区间 [l, r]
内有多少个完全平方数?
那么,计算区间 [l, r]
内完全平方数的个数,可以用 前缀和 的思想:
1 到 r 之间有多少完全平方数
计算 1 到 l−1 之间有多少个完全平方数
相减
1234567891011public static void main(String[] args) { Scanner in = new Scanner(System.in); long l = in.nextLong(); ...
Spring Boot 相关面试题整理—原理、框架知识、开发与实践
Spring Boot 原理
介绍一下 Spring Boot
整体的启动流程?
Spring Boot
启动流程的核心是通过自动配置和上下文初始化,将零散的组件装配成一个可运行的应用上下文(ApplicationContext),整体分为
前置准备、上下文初始化、核心刷新、启动收尾 四大步
首先从 main 找到
SpringApplication.run(主类.class, args) 方法,在执行
run() 方法之前先 new 一个 SpringApplication
实例对象。
实例化时做的具体核心内容:
然后进行应用类型推断,判断当前应用是 Servlet 应用(Spring Web
MVC)、Reactive 应用(Spring WebFlux)还是普通非 Web 应用。
紧接着进行初始化器加载,从 META-INF/spring.factories
中加载所有 ApplicationContextInitializer
的实现类,用于在上下文刷新前进行自定义配置,包括 Spring...
MySQL面试题汇总—进阶知识与性能优化
约束
MySQL有哪些约束类型?各自的业务作用是什么?如何选择合适的约束策略?
MySQL的约束类型包括主键约束、唯一约束、非空约束、外键约束和检查约束五种。
主键约束的业务作用是提供表的唯一标识,支持高效的数据检索和关联查询。唯一约束确保业务关键字段的唯一性,如用户邮箱、订单号等。非空约束保证关键业务数据的完整性,避免因空值导致的业务逻辑错误。外键约束维护数据一致性,确保关联数据的有效性。检查约束在数据库层面实现业务规则验证,提高数据质量。
选择合适的约束策略需要综合考虑业务需求、性能影响和维护成本。对于核心业务表,应该使用主键约束和必要的非空约束。对于需要唯一性验证的字段,使用唯一约束并配合索引优化。外键约束在数据一致性要求高的场景下使用,但需要考虑性能影响。检查约束适用于简单的业务规则验证,复杂逻辑建议在应用层处理。
外键约束还涉及到级联操作的概念
可以通过 ON DELETE 和 ON UPDATE
子句定义外键的级联行为
还包括
CASCADE、SET ...
MySQL面试题汇总—SQL及其基础知识
持续更新,不重要的我不收集
MySQL 基础知识
什么是关系型数据库?
关系型数据库 RDB,就是一种建立在关系模型的基础上的数据库。
关系模型表明了数据库中所存储的数据之间的联系,例如一对一、一对多、多对多
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。
关系型数据库表关系
大部分关系型数据库都使用 SQL
来操作数据库中的数据。并且,大部分关系型数据库都支持事务的四大特性(ACID)。
有哪些常见的关系型数据库呢?
MySQL、PostgreSQL、Oracle、SQL Server、SQLite
什么是 SQL?
SQL 是一种结构化查询语言(Structured Query
Language),专门用来与数据库打交道,目的是提供一种从数据库中读写数据的简单有效的方法。
几乎所有的主流关系数据库都支持 SQL
,适用性非常强。并且,一些非关系型数据库也兼容 SQL 或者使用的是类似于
SQL 的查询语言。
什么是元组, 码,
候选码, 主码, 外码,...
Java面试题汇总——JVM常见面试题总结
持续更新
📎 配套提炼版(2026-10-26):JavaSE与Java基础-一题多问面试简答题(牛客题库提炼版).md
—— JVM 部分对应第 8 章 Q49–Q55,含 SurvivorRatio
参数计算、字符串常量池等选择题手算。
内存结构
请详细介绍JVM内存区域的整体布局,各个区域的作用和特点?各个区域分别存什么?说说你了解的JVM内存模型。
Java 虚拟机在执行 Java
程序的过程中会把它管理的内存划分成若干个不同的数据区域
Java 运行时数据区域(JDK1.8
)
运行时数据的区域分配是这样的
img
JVM
运行时数据区分成五块:堆、方法区、虚拟机栈、本地方法栈、程序计数器。其中堆和方法区是所有线程共享的,另外三个是每个线程私有的。
堆:存放对象实例与数组(所有线程共享的主内存区域),是
GC 管理的核心区域。它线程共享,是JVM
中最大的一块内存,分为新生代和老年代
分代模型
新生代(Young Generation):
Eden...
Java面试题汇总——Java集合框架中的面试题
集合体系
说一下
Java 集合框架的整体结构。List、Set、Queue、Map
到底怎么选?实际开发中,你根据什么选集合?Collection
接口定义了哪些方法?
集合框架的接口分为两支:
Collection:代表一组独立的元素,
List(有序、可重复)、Set(不重复)、Queue/Deque(队列/双端队列)。
Map:代表键值对映射
选择的关键在于你的数据是否允许重复、是否需要顺序、以及是存单个元素还是键值对。
接口
核心特征
典型实现
选型依据
List
有序、可重复、有索引
ArrayList、LinkedList
需要按位置访问或保持插入顺序。查多用
ArrayList;频繁头尾增删用 LinkedList
Set
无序,不重复
HashSet、LinkedHashSet、TreeSet
需要去重。不关心顺序用 HashSet;要保留插入顺序用
LinkedHashSet;要排序用...
Java面试题汇总——Java基础,JavaSE中常见的面试题
本文章持续更新
Java 基础概念和常识内容
JVM vs JDK vs JRE
Java 虚拟机(Java Virtual Machine, JVM)是运行 Java
字节码的虚拟机。JVM
有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的
JVM 实现是 Java 语言 一次编译,随处可以运行
的关键所在。
image-20260205134622558
JVM 并不是只有一种!只要满足 JVM
规范,每个公司、组织或者个人都可以开发自己的专属 JVM。
也就是说我们平时接触到的 HotSpot VM 仅仅是是 JVM
规范的一种实现而已。
维基百科上就有常见 JVM 的对比:Comparison
of Java virtual machines ,感兴趣的可以去看看。并且,你可以在 Java SE
Specifications 上找到各个版本的 JDK 对应的 JVM 规范。
JDK(Java Development...
Java面试题汇总——Java多线程面试题汇总
面试题系列文章持续更新,源于个人搜寻和整理总结
线程基础知识
什么是线程和进程?线程与进程的关系是什么?
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。
线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。
与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
对于 Java
来说,一个进程中可以有多个线程,多个线程共享进程的堆和元空间(方法区)资源,但是每个线程有自己的程序计数器、虚拟机栈
和...
Hibernate,MyBatis,Spring Data JPA等之间的关系
对象关系映射框架 ORM
什么是 ORM
在传统的数据库操作中,我们通常需要直接编写SQL语句,与数据库进行交互。然而,这种方式在面对复杂的业务逻辑时,往往显得繁琐且容易出错。
为了解决这一问题,对象关系映射(Object-Relational Mapping,简称 ORM
)应运而生。作为一种桥梁,ORM将面向对象的编程思想与关系型数据库的结构连接起来,极大地简化了开发流程
ORM,即对象关系映射,是一种编程技术,用于在面向对象编程语言和关系型数据库之间建立联系。
在ORM的框架下:
类:对应着数据库中的一个表,类的属性则对应表中的字段,这就是通常说的,实体类
对象:对应数据库中的一行数据,通过实例化类,我们可以操作数据库中的具体记录。
方法:ORM
框架通常会提供一系列内置方法,开发者只需调用这些方法,就能完成数据库操作。
ORM的工作原理
ORM的核心在于 映射
它通过将类和对象的操作转化为底层的SQL语句,完成与数据库的交互。
那么,开发者在代码中定义模型类,就类似,表的创建。而...
MySQL part5——MySQL中InnoDB存储引擎对MVCC的实现及其原理
认识 MVCC
什么是 MVCC
MVCC(Mutil Version Concurrency
Control)多版本并发控制,是一种并发控制的方法,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。
它是通过在每个数据行上维护多个版本的数据来实现的。当一个事务要对数据库中的数据进行修改的时候,MVCC
会为该事务创建一个数据快照,而不是直接修改实际的数据行。(个人认为这一定上参考了COW写时复制机制)
同时,读取数据时,会根据事务的“可见性规则”,选择合适的历史版本进行读取。这种机制让“读运行”和“写操作”可以并行执行,互不阻塞。
在 MySQL 的...
MySQL part5——从MySQL三大日志到两阶段提交,深度拆解MySQL持久化
MySQL的数据持久化过程
事务的支持是数据库区分文件系统的重要特征之一
MySQL
持久化的本质,是把内存中数据的修改安全、可靠地写入磁盘,即使遇到数据库崩溃或者服务器断电这种服务宕机的情况,也能恢复到崩溃前的一致状态。
三大日志
MySQL 日志
主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。
其中,跟 MySQL 持久化流程相关的日志主要是,Redo Log 重做日志,Binlog
二进制日志,Undo Log 回滚日志,它们的架构是这样的
img
Redo Log:是 InnoDB 存储引擎独有的,保证已提交事务不丢失
Binlog:保证数据恢复,而且主从复制也涉及到这个日志
Undo Log:是 InnoDB 特有的日志,记录数据修改前的状态,实现 MVCC
多版本并发控制,而且通过 Undo...



































