Netty-复习
浅谈Stream在计算和编程领域,stream(流)通常指的是一系列数据的传输方式。流是数据的持续序列,允许程序在数据没有完全加载或没有完全存储的情况下进行处理。流的使用在处理大数据集、实时数据传输或资源有限的环境下尤为重要。
本质上,流只是一种对于数据的处理手段,相当于给出了接口,没有给出具体的实现。
常见的流有以下几种
输入输出流(I/O Stream)
I/O流是编程中常见的一种流操作,用于数据的输入和输出。数据可以是文件、网络通信、设备、内存等。I/O流分为两类:
字节流(Byte Stream):以字节为单位处理数据,适合处理二进制文件,如图片、音频等。常见类:InputStream、OutputStream。
字符流(Character Stream):以字符为单位处理数据,适合处理文本数据。常见类:Reader、Writer。
网络流(Network Stream)
网络流用于在网络中传输数据。它通常涉及传输控制协议(TCP)或用户数据报协议(UDP)。通过使用网络流,可以实时传输数据,如视频、音频或文件。
视频和音频流
在多媒体应 ...
JVM调优-入门
为什么要调优 ?最近几天在和朋友一起玩我的世界服务器,服务器是我之前购买的用于部署项目的2c2g的阿里云,闲置无用,便拿来当作服务器,在部署期间遇到过很大问题,但因为我是Java选手,部署方面的报错,调用Jar包的参数等还是能看明白,倒也算不上问题。
真正的问题在于正式游玩的时候,虽然服务器标称是2c2g,但通过SSH连接后显示实际的物理内存只有1.7g,阿里云服务器自带的服务器监控进程和系统本身还需要占用一定内存,实际可用的内存仅有1.5g左右,在游玩期间多次遭遇服务器卡死但没崩溃,服务器直接崩溃等等场景。
作为一个Java选手,平时其实就在烦劳,如何将所学知识用于实际,这一次的问题很明显,Minecraft Server是一个Java进程,总结下来就是,如何最大化的利用内存空间,让Java进程运行的更加稳定,使用同样的内存,得到更高的性能等等。
调优调优,调的是什么,优化的是什么?说到JVM,这里可以顺便思考思考,JVM的作用?总结下来,无非以下几点
将编译好的字节码解释为机器码
透明化内存的管理,自动的分配、回收内存
为Java程序提供运行环境,加载各种类
屏蔽平台的差异,实现 ...
MySQL-查询优化的百科全书-Explain详解(下)
查询优化的百科全书-Explain详解(下)执行计划输出中各列详解ExtraExtra 列是用来说明一些额外信息的,我们可以通过这些额外信息来更准确的理解 MySQL 到底将如何执行给定的查询语句。 MySQL 提供的额外信息有好几十个,我们就不一个一个介绍了,所以我们只挑一些平时常见的或者比较重要的额外信息介绍给大家哈。
No tables used
当查询语句的没有 FROM 子句时将会提示该额外信息,比如:
mysql> EXPLAIN SELECT 1;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+----------- ...
MySQL-查询优化的百科全书-Explain详解(上)
查询优化的百科全书-Explain详解(上)一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的 执行计划 ,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。
如果我们想看看某个查询的执行计划的话,可以在具体的查询语句前边加一个 EXPLAIN ,就像这样:
mysql> EXPLAIN SELECT 1;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+----- ...
MySQL基于规则的优化(关于子查询优化二三事儿)
MySQL基于规则的优化(关于子查询优化二三事儿)设计 MySQL 的大叔依据一些规则,竭尽全力的把很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以被称作 查询重写
条件化简移除不必要的括号有时候表达式里有许多无用的括号,比如这样:
((a = 5 AND b = c) OR ((a > c) AND (c < 5)))
看着就很烦,优化器会把那些用不到的括号给干掉,就是这样:
(a = 5 and b = c) OR (a > c AND c < 5)
常量传递(constant_propagation)有时候某个表达式是某个列和某个常量做等值匹配,比如这样:
a = 5
当这个表达式和其他涉及列 a 的表达式使用 AND 连接起来时,可以将其他表达式中的 a 的值替换为 5 ,比如这样:
a = 5 AND b > a
就可以被转换为:
a = 5 AND b > 5
用OR连接起来的表达式就不能进行常量传递
等值传递(equality_propagation)有时候多个列之间存在等值匹配的关系,比如这样:
a = b ...
MySQL InnoDB的统计数据
InnoDB统计数据是如何收集的两种不同的统计数据存储方式InnoDB 提供了两种存储统计数据的方式:
永久性的统计数据
统计数据存储在磁盘上,也就是服务器重启之后这些统计数据还在。
非永久性的统计数据
统计数据存储在内存中,当服务器关闭时这些这些统计数据就都被清除掉了,等到服务器重启之后,在某些适当的场景下才会重新收集这些统计数据。
控制到底采用哪种方式去存储统计数据
系统变量: innodb_stats_persistent
在MySQL 5.6.6 之前, 值默认是OFF, 也就是说 InnoDB 的统计数据默认是存储到内存的。 之后的版本中innodb_stats_persistent 的值默认是ON ,也就是统计数据默认被存储到磁盘中。
InnoDB 默认是以表为单位来收集和存储统计数据的,也就是说我们可以把某些表的统计数据(以及该表的索引统计数据)存储在磁盘上,把另一些表的统计数据存储在内存中。
可以在创建和修改表的时候通过指定STATS_PERSISTENT 属性来指明该表的统计数据存储方式:
CREATE TABLE 表名 (...) Engine=Inn ...
ffmpeg 入门
前置视频和图片相关的基础知识基础概念分辨率:
视频或图片的尺寸,通常用宽度和高度表示(例如1920x1080)。
常见分辨率:480p(SD),720p(HD),1080p(Full HD),4K,8K。
帧率(Frame Rate):
视频每秒播放的帧数,通常用fps(frames per second)表示。
常见帧率:24fps、30fps、60fps。
比特率(Bit Rate):
视频或音频每秒传输的数据量,通常用kbps(kilobits per second)表示。
比特率越高,质量越好,但文件也更大。
编解码器(Codec):
用于压缩和解压视频或音频的算法。
常见视频编解码器:H.264、H.265、VP9。
常见音频编解码器:AAC、MP3、Opus。
容器格式(Container Format):
用于存储视频、音频、字幕等数据的文件格式。
常见容器格式:MP4、AVI、MKV、MOV。
颜色空间:
颜色信息的表示方式,如RGB、YUV。
不同的颜色空间适用于不同的应用场景。
图片处理基础图片格式:
常见图片格式:JPEG、PNG、BMP ...
快速排序 & 堆排序 & 桶排序
快速排序 & 快速选择基准点的选取
基准点(pivot)是快速选择和快速排序算法中的一个关键概念。基准点的选取方法可以有很多种,常见的策略包括:
固定基准点:通常选择数组的第一个元素或最后一个元素作为基准点。
随机基准点:随机选择数组中的一个元素作为基准点。
三数取中:选择数组的第一个元素、最后一个元素和中间元素的中值作为基准点。
基准点的选取会影响算法的性能。如果每次选取的基准点都能将数组近似平分,那么快速排序的性能会更好。
逆序和正序的区别
在快速选择和快速排序算法中,逆序和正序的主要区别在于分区过程中比较和交换的方向。
正序排序
正序排序是指从小到大排序。在分区过程中,目标是将所有小于基准点的元素放在基准点的左侧,将所有大于基准点的元素放在基准点的右侧。
具体步骤如下:
从左向右找到第一个大于等于基准点的元素。
从右向左找到第一个小于等于基准点的元素。
交换这两个元素。
重复上述步骤直到左右指针相遇。
逆序排序
逆序排序是指从大到小排序。在分区过程中,目标是将所有大于基准点的元素放在基准点的左侧,将所有小于基准点的元素放在基准点的右侧。
具体步骤如下:
从 ...
MySQL基于成本的优化
MySQL基于成本的优化什么是成本MySQL 执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对 成本 的描述是非常模糊的,其实在 MySQL 中一条查询语句的执行成本是由下边这两个方面组成的:
I/O 成本
我们的表经常使用的 MyISAM 、 InnoDB 存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为 I/O 成本。
CPU 成本
读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为 CPU 成本。
对于 InnoDB 存储引擎来说,页是磁盘和内存之间交互的基本单位,设计 MySQL 的大叔规定读取一个页面花费的成本默认是 1.0 ,读取以及检测一条记录是否符合搜索条件的成本默认是 0.2 。 1.0 、 0.2 这些数字称之为 成本常数 ,这两个成本常数我们最常用到。
需要注意的是,不管读取记录时需不需要检测是否满足搜索条件,其成本都算是0.2。
...
MySQL连接的原理
连接的原理连接简介连接的本质为了故事的顺利发展,我们先建立两个简单的表并给它们填充一点数据:
mysql> CREATE TABLE t1 (m1 int, n1 char(1));Query OK, 0 rows affected (0.02 sec)mysql> CREATE TABLE t2 (m2 int, n2 char(1));Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO t1 VALUES(1, 'a'), (2, 'b'), (3, 'c');Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> INSERT INTO t2 VALUES(2, 'b'), (3, 'c'), (4, 'd');Query OK, 3 rows affected (0.00 sec ...