十分钟图文详解Mysql!小白轻松搞懂!

MYSQL详解(持续更新) 去重语句: select distinct 列名 from 表名 字符类型转数值类型语句: select to_number('000123') from dual; 插入语句: insert into 表名 (字段) values (字段值) 新增表字段: alter table 表名 add (字段名 integer default 0 not null); 删除表字段: alter........................................ 阅读详情

基础架构

MySQL的基本架构示意图

连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

  • • 如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。

  • • 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限。

客户端如果太长时间没动静(show processlist结果的Command列显示为sleep),连接器就会自动将它断开。这个时间是由参数wait_timeout控制的,默认值是8小时。MySQL在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,导致MySQL异常重启。解决办法:

  1. 1. 定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。

  2. 2. 如果你用的是MySQL 5.7或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

查询缓存

执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。如果你的查询能够直接在这个缓存中找到key,那么这个value就会被直接返回给客户端。

查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。

参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,像下面这个语句一样:

mysql> select SQL_CACHE * from T where ID=10;

MySQL 8.0版本直接将查询缓存的整块功能删掉了,也就是说8.0开始彻底没有这个功能了。

分析器

分析器先会做“词法分析”。你输入的是由多个字符串和空格组成的一条SQL语句,MySQL需要识别出里面的字符串分别是什么,代表什么。

做完了这些识别以后,就要做“语法分析”。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。

优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

执行器

开始执行的时候,要先判断一下你对这个表T有没有执行查询的权限,如果没有,就会返回没有权限的错误。

如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

日志系统

日志模块:redo log

如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程IO成本、查找成本都很高。MySQL使用WAL技术来提升效率,WAL的全称是Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。

有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。

日志模块:binlog

上面聊到的redo log是InnoDB引擎特有的日志,而Server层也有自己的日志,称为binlog(归档日志)。

因为最开始MySQL里并没有InnoDB引擎。MySQL自带的引擎是MyISAM,但是MyISAM没有crash-safe的能力,binlog日志只能用于归档。而InnoDB是另一个公司以插件形式引入MySQL的,既然只依靠binlog是没有crash-safe能力的,所以InnoDB使用另外一套日志系统——也就是redo log来实现crash-safe能力。

两种日志有以下三点不同。

  1. 1. redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。

  2. 2. redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。

  3. 3. redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

mysql> update T set c=c+1 where ID=2;

执行上面这条update语句时执行器和InnoDB引擎内部的流程:

  1. 1. 执行器先找引擎取ID=2这一行。ID是主键,引擎直接用树搜索找到这一行。如果ID=2这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。

  2. 2. 执行器拿到引擎给的行数据,把这个值加上1,比如原来是N,现在就是N+1,得到新的一行数据,再调用引擎接口写入这行新数据。

  3. 3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到redo log里面,此时redo log处于prepare状态。然后告知执行器执行完成了,随时可以提交事务。

  4. 4. 执行器生成这个操作的binlog,并把binlog写入磁盘。

  5. 5. 执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log改成提交(commit)状态,更新完成。

执行器和InnoDB引擎内部的流程

innodb_flush_log_at_trx_commit这个参数设置成1的时候,表示每次事务的redo log都直接持久化到磁盘。sync_binlog这个参数设置成1的时候,表示每次事务的binlog都持久化到磁盘。

事务隔离

隔离性与隔离级别

事务拥有四个重要的特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

  • • 原子性 (Atomicity)

事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。

  • • 一致性 (Consistency)

指事务将数据库从一种状态转变为另一种一致的的状态。事务开始前和结束后,数据库的完整性约束没有被破坏。

  • • 隔离性 (Isolation)

要求每个读写事务的对象对其他事务的操作对象能互相分离,即该事务提交前对其他事务不可见。也可以理解为多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。

MySQL 通过锁机制来保证事务的隔离性。

  • • 持久性 (Durability)

事务一旦提交,则其结果就是永久性的。即使发生宕机的故障,数据库也能将数据恢复,也就是说事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

隔离级别脏读不可重复读幻读
SERIALIZABLE避免避免避免
REPEATABLE READ避免避免允许
READ COMMITTED避免允许允许
READ UNCOMMITTED允许允许允许

幻读和不可重复读的区别

  • • 不可重复读的重点是修改:在同一事务中,相同的条件,第一次和第二次读到的数据不一致(中间有其它事务提交了修改)。

  • • 幻读的重点是新增或者删除:在同一事务中,相同的条件,第一次和第二次读到的记录数不一样(中间有其它事务提交了新增或者删除)。

隔离级别

在不同的隔离级别下,事务A的返回结果:

  • • 若隔离级别是“读未提交”, 则V1的值就是2。这时候事务B虽然还没有提交,但是结果已经被A看到了。因此,V2、V3也都是2。

  • • 若隔离级别是“读提交”,则V1是1,V2的值是2。事务B的更新在提交后才能被A看到。所以, V3的值也是2。

  • • 若隔离级别是“可重复读”,则V1、V2是1,V3是2。之所以V2还是1,遵循的就是这个要求:事务在执行期间看到的数据前后必须是一致的。

  • • 若隔离级别是“串行化”,则在事务B执行“将1改成2”的时候,会被锁住。直到事务A提交后,事务B才可以继续执行。所以从A的角度看, V1、V2值是1,V3的值是2。

在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。在“读提交”隔离级别下,这个视图是在每个SQL语句开始执行的时候创建的。这里需要注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;而“串行化”隔离级别下直接用加锁的方式来避免并行访问。

事务隔离的实现

在MySQL中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。

为什么尽量不要使用长事务?

长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录都必须保留,这就会导致大量占用存储空间。

多版本并发控制(Multiversion Concurrency Control),每一个写操作都会创建一个新版本的数据,读操作会从有限多个版本的数据中挑选一个最合适的结果直接返回;在这时,读写操作之间的冲突就不再需要被关注,而管理和快速挑选数据的版本就成了 MVCC 需要解决的主要问题。

MySQL与MVCC

MySQL 中实现的多版本两阶段锁协议(Multiversion 2PL)将 MVCC 和 2PL 的优点结合了起来,每一个版本的数据行都具有一个唯一的时间戳,当有读事务请求时,数据库程序会直接从多个版本的数据项中具有最大时间戳的返回。

更新操作就稍微有些复杂了,事务会先读取最新版本的数据计算出数据更新后的结果,然后创建一个新版本的数据,新数据的时间戳是目前数据行的最大版本 +1:

数据版本的删除也是根据时间戳来选择的,MySQL 会将版本最低的数据定时从数据库中清除以保证不会出现大量的遗留内容。

事务的起点

begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动。如果你想要马上启动一个事务,可以使用start transaction with consistent snapshot 这个命令。

在MySQL里,有两个“视图”的概念:

  • • 一个是view。它是一个用查询语句定义的虚拟表,在调用的时候执行查询语句并生成结果。创建视图的语法是create view … ,而它的查询方法与表一样。

  • • 另一个是InnoDB在实现MVCC时用到的一致性读视图,即consistent read view,用于支持RC(Read Committed,读提交)和RR(Repeatable Read,可重复读)隔离级别的实现。

事务的启动方式

MySQL的事务启动方式有以下几种:

  1. 1. 显式启动事务语句, begin 或 start transaction。配套的提交语句是commit,回滚语句是rollback。

  2. 2. set autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一个select语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行commit 或 rollback 语句,或者断开连接。

索引

InnoDB 的索引模型

在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。

每一个索引在InnoDB里面对应一棵B+树。

根据叶子节点的内容,索引类型分为主键索引和非主键索引。

  • • 主键索引的叶子节点存的是整行数据。在InnoDB里,主键索引也被称为聚簇索引(clustered index)。

  • • 非主键索引的叶子节点内容是主键的值。在InnoDB里,非主键索引也被称为二级索引(secondary index)。

基于主键索引和普通索引查询的区别

  • • 如果语句是select * from T where ID=500,即主键查询方式,则只需要搜索ID这棵B+树;

  • • 如果语句是select * from T where k=5,即普通索引查询方式,则需要先搜索k索引树,得到ID的值为500,再到ID索引树搜索一次。这个过程称为回表。

基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。

覆盖索引

如果一个索引包含所有需要查询的字段的值,称为覆盖索引,即只需扫描索引而无须回表。由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

最左前缀原则

对于联合索引的索引项是按照索引定义里面出现的字段顺序排序的,比如对列A,B,C建立联合索引,实际上是建立了(A),(A, B),(A, B, C)三个索引。

    1. MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如A = 1 and B = 2 and C > 3 and D = 4 如果建立(A,B,C,D)顺序的索引,d是用不到索引的,如果建立(A,B,D,C)的索引则都可以用到,A,B,D的顺序可以任意调整。
    1. =和in可以乱序,比如A = 1 and B = 2 and C = 3 建立(A,B,C)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。

为什么要用联合索引

  • • 减少开销。建一个(A,B,C)的联合索引,实际上是建立了(A),(A, B),(A, B, C)三个索引。

  • • 覆盖索引。联合索引(A,B,C)的叶节点包含ABC三列的数据,如果查询的列在(A,B,C)之中可以直接通过索引获取到数据,无需回表,减少树的随机IO。

  • • 效率高。通过联合索引筛选出的数据少,列越多数据越少

索引下推

对于联合索引中不符合最左前缀的部分,MySQL的处理方式:

  • • 在MySQL 5.6之前,只能从第一个满足最左前缀索引的数据开始一个个回表。到主键索引上找出数据行,再对比字段值。

  • • 而MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

也就是说在5.6之前的版本,不符合最左前缀的部分对InnoDB引擎是没用的,5.6及以后的版本进行了优化,直接在索引上进行筛选,减少回表次数。

普通索引

当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB会将这些更新操作缓存在change buffer中,这样就不需要从磁盘中读入这个数据页了。在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行change buffer中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。

唯一索引的更新就不能使用change buffer

对于写多读少的业务来说,页面在写完以后马上被访问到的概率比较小,此时change buffer的使用效果最好。这种业务模型常见的就是账单类、日志类的系统。

锁

全局锁

全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。

**全局锁的典型使用场景是,做全库逻辑备份。**也就是把整库每个表都select出来存成文本。

对于支持事务的引擎,比如InnoDB,可以通过启动一个事务,确保拿到一致性视图,而且由于MVCC的支持,这个过程不需要锁库。对于不支持事务的引擎,比如MyISAM,就需要全局锁FTWRL来避免数据的更新。

set global readonly=true的方式也能使整个库只读,但是这种方式有两个弊端:

  1. 1. 在有些系统中,readonly的值会被用来做其他逻辑,比如用来判断一个库是主库还是备库。

  2. 2. 在异常处理机制上有差异。如果执行FTWRL命令之后由于客户端发生异常断开,那么MySQL会自动释放这个全局锁,整个库回到可以正常更新的状态。而将整个库设置为readonly之后,如果客户端发生异常,则数据库就会一直保持readonly状态,这样会导致整个库长时

  3. 3. 间处于不可写状态,风险较高。

表级锁

MySQL里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。

**表锁的语法是 lock tables … read/write。**与FTWRL类似,可以用unlock tables主动释放锁,也可以在客户端断开的时候自动释放。需要注意,lock tables语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。

**另一类表级的锁是MDL(metadata lock)。**MDL不需要显式使用,在访问一个表的时候会被自动加上。MDL的作用是,保证读写的正确性。

MySQL 5.5版本中引入了MDL,当对一个表做增删改查操作的时候,加MDL读锁;当要对表做结构变更操作的时候,加MDL写锁。

  • • 读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。

  • • 读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。

时间线session Asession Bsession Csession D
t1begin -> select
t2
begin -> select
t3
begin -> alter table【阻塞】
t4
begin -> select【阻塞】

如何安全地给小表加字段?

比较理想的机制是,在alter table语句里面设定等待时间,如果在这个指定的等待时间里面能够拿到MDL写锁最好,拿不到也不要阻塞后面的业务语句,先放弃。

`ALTER TABLE tbl_name NOWAIT add column ...   ALTER TABLE tbl_name WAIT N add column ...` 

行锁

MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一。

两阶段锁

在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。

如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁尽量往后放。这样事务之间锁等待的时间最少,提高并发度。

死锁和死锁检测

当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。

解决死锁的两种策略:

  1. 1. 直接进入等待,直到超时。这个超时时间可以通过参数innodb_lock_wait_timeout来设置,但是会误伤等待非死锁的查询。

  2. 2. 发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数innodb_deadlock_detect设置为on,表示开启这个逻辑。但是死锁检测在并发情况下会消耗大量CPU资源。

结合实际情况中的场景,一般是启用死锁检测,控制客户端的并发数,这样死锁检测不至于太占用CPU资源。

学习资源推荐

除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

😝朋友们如果有需要的话,可以V扫描下方二维码免费领取🆓

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

#### **一、Python学习路线**

image-20230619144606466

python学习路线图1

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

** 因篇幅有限,仅展示部分资料,添加上方即可获取**
MySQL安装教程(详细版) MySQL免费安装教程、如何验证MySQL是否安装成功?怎么关掉MySQL服务?MySQL 端口问题如何解决?MySQL如何开机自启OR手动自启?安装MySQL时Starting the server 安装失败怎么解决? 阅读详情

相关推荐

MySQL超详细学习教程,2023年硬核学习路线

为什么学习MySQL?这是一篇 MySQL 通关一篇过硬经验学习路线,包括数据库相关知识,SQL语句的使用,数据库约束,设计等。未来是一个数字化的时代,数据是我们最为宝贵的资源,不论是哪个专业出身,未来或多或少都会卷入数据时代的浪潮之中。而那些前提性的工作基本都是依靠`数据库`来完成。

zhangxia_的博客 4万+

mysql安装教程

MySQL针对不同的用户提供了2中不同的版本: MySQL Community Server:社区版。由MySQL开源社区开发者和爱好者提供技术支持,对开发者开放源代码并提供免费下载。 MySQL Enterprise Server:企业版。包括最全面的高级功能和管理工具,不过对用户收费。 下面讲到的MySQL安装都是以免费开源的社区版为基础。打开MySQL数据库官网的下载地址http://dev.

愿世界和平 32万+

SAP_Tutor录屏实战:从操作录制到培训手册与知识库沉淀

在企业ERP实施与运维中,如何高效传递操作知识始终是团队面临的挑战。传统的截图加文字说明不仅制作成本高,而且遇到界面密集的SAP系统时,往往难以清晰呈现字段和步骤。录屏技术为解决这类问题提供了新思路,而面向SAP场景的专用录屏工具则进一步将连续画面转化为结构化的操作步骤库,让视频和操作手册可以同步生成。借助这种工具,业务顾问既能快速产出按角色拆分的培训视频,也能自动创建带界面截图的用户手册,甚至可将录屏作为问题定位和项目交接的标准证据。无论是处理BP外部给号报错,还是沉淀SAP知识库,一套“录制-编辑-入库

weixin_33834075的博客 794

超详细MySQL安装及基本使用教程

一、下载MySQL首先,去数据库的官网http://www.mysql.com下载MySQL。点击进入后的首页如下: 然后点击downloads,community,选择MySQL Community Server。如下图: 滑到下面,找到Recommended Download,然后点击go to download page。如下图: 点击download进入下载页面选择No thanks,

theLostLamb的博客 46万+

Python pydub实现语音停顿切分

将pcm文件批量处理成wav文件 import wave import os filepath = "data/" # 添加路径 filename = os.listdir(filepath) # 得到文件夹下的所有文件名称 #f = wave.open(filepath + filename[1], 'rb') #print(filename) for i in range(len(fi...

wangqianqianya的博客 1万+

检索增强世界模型(R-WoM)原理与应用实践

世界模型是AI系统理解环境的核心技术,通过构建环境的内部表示实现状态预测和行动规划。传统方法基于RNN或VAE等神经网络,而检索增强世界模型(R-WoM)创新性地引入检索机制,结合外部记忆库提升系统性能。这种架构突破模型参数限制,使AI能像人类一样利用历史经验解决问题,在游戏AI、虚拟助手等场景表现优异。关键技术包括FAISS相似性搜索、分层记忆管理和动态检索策略,其中Transformer编码器和GRU动态模型的组合实现高效环境建模。实践表明,该方法可提升47%的战术多样性,加快32%的应急响应速度。

weixin_42676876的博客 341

十分钟图文详解Mysql!小白轻松搞懂!幻读|事务隔离|日志|锁

当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InooDB会将这些更新操作缓存在change buffer中,这样就不需要从磁盘中读入这个数据页了。MySQL 中实现的多版本两阶段锁协议(Multiversion 2PL)将 MVCC 和 2PL 的优点结合了起来,每一个版本的数据行都具有一个唯一的时间戳,当有读事务请求时,数据库程序会直接从多个版本的数据项中具有最大时间戳的返回。key是查询的语句,value是查询的结果。

2301_76161259的博客 221

基于FPGA的 SelectIO IP核 的仿真验证-----( LVDS差分高速传输)

SelectIO IP核 的仿真验证

qq_43618170的博客 1万+

2021年拒绝躺平的三位Python号主!

2021有人唱衰Python,也有人为Python站台,但毋庸置疑Python的社区用户越来越多、Python招聘需求在慢慢增加。同时我联合和上百位Python公众号主一起发起了:Pyth...

涛哥聊Python 702

嵌入式开发环境Vscode开发STM32单片机程序

STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc +开发单片机程序的经验。(这里不解释 gcc 是什么)。

嵌入式技术开发 1843

【华为OD技术面试真题 - 技术面】- 测试面试题(1)

专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录黑盒测试:白盒测试:基本功能验证:边界条件测试:空白输入测试:特殊字符和格式测试:响应时间测试:压力测试:针对在不同系统和设备上测试聊天窗口功能,以及网络正常的前置条件,我们可以增加以下测试用例:系统和设备:PC端测试:移动端测试:功能验证:前置条件:网络性能影响测试:Postman:SoapUI:JMeter:Rest-Assured:Tricentis Tosca:ReadyAPI:CI/CD工具集成:测试管理工

算法大师! 3690

java技术分享主题_优质文章分类整理|Guide哥直呼:看了这些技术文章我之后飘了~...

大家好,我是Guide哥,一个三观比主角还正的技术人。后台一直有小伙伴希望有一份历史优质文章的分类汇总,所以,一大早起来,Guide又又又把历史优质原创文章分类整理了一下。下面的文章涵盖常见面试题、大厂面试经历等内容,认真看完绝对收货不小。另外,文章都是经过层层选拔而来,并不是一股脑的就把公众号所有历史文章怼上去,这样做的话,摆明了就是坑害读者的时间!整理不易!觉得不错的话,记得在看安...

weixin_39874809的博客 2803

RK3568平台(音频篇)麦克风PDM接口录音

PDM = Pulse Density Modulation是一种用数字信号表示模拟信号的调制方法。PDM则使用远高于PCM采样率的时钟采样调制模拟分量,只有1位输出,要么为0,要么为1。因此通过PDM方式表示的数字音频也被称为Oversampled 1-bit Audio。相比PDM一连串的0和1,PCM的量化结果更为直观简单。以PDM方式作为模数转换的接收端,需要用到抽取滤波器(Decimation Filter),将密密麻麻的0和1代表的密度分量转换为幅值分量,而PCM方式得到的已经是幅值分量了。

weixin_49303682的博客 5194

PHP后端毕业设计数据库选型:MySQL与SQLServer怎么选

在后端开发与毕业设计项目中,数据库选型直接决定开发效率与项目稳定性。面对MySQL和SQLServer这两大关系型数据库,很多初学者容易陷入参数对比的误区,忽略了实际场景下的安装成本、驱动兼容性、学习资料密度和部署难度。本文从工程实践角度出发,梳理PHP环境下的数据库连接方式、SQL方言差异、常见报错处理及答辩常见问题,帮助开发者在资源有限、时间紧迫的情况下做出最务实的选型决策。无论是本地环境搭建、远程服务器部署,还是应对导师临时要求换库,掌握核心适配逻辑都能大幅降低试错成本。MySQL凭借轻量、跨平台与海

weixin_33563728的博客 214

化工设计软件:PDMS二次开发_(7).数据导入与导出技术

在某些复杂场景下,PDMS提供的标准API接口可能无法满足需求。此时,可以通过自定义API接口来实现特定的数据导入与导出功能。自定义设备导入API接口可以处理更复杂的设备数据格式。# 导入必要的库import pdms_api # 假设有一个PDMS API库# 定义自定义设备数据# 自定义设备导入API接口# 调用自定义设备导入API接口# 输出导入成功的消息print("自定义设备数据导入成功")在PDMS二次开发中,数据的导入与导出是关键的技术环节。

kkchenjj的博客 1484

PyCharm配置SSH远程解释器第3步时弹框报错:com.google.gson.stream.MalformedJsonException: Expected value at l...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1928

公众号历史文章汇总

热文 盘点阿里巴巴 15 款开发者工具 蚂蚁金服2019实习生面经总结(已拿口头offer) 一千行 MySQL 学习笔记 可能是把Java内存区域讲的最清楚的一篇文章 搞定 JVM 垃圾回收就是这么简单 【原创】Java学习路线以及方法推荐 技术面试复习大纲 Java 必看书籍 Java学习必备书籍推荐终极版! 基础 关于Java基础你不得不会的34个问题 剖析面试最常见问题之 Java 基础知识 Java8新特性 Java 8 新特性最佳指南 看完这篇文章,别说自己不会用Lambda表达式

Cybenko 989

S7A 7.52-nolimit

ifix驱动S7A 7.52 无限制版

Qwen3-VL-8B数据库应用实战:MySQL存储多模态交互日志与分析

本文介绍了如何在星图GPU平台上自动化部署Qwen3-VL-8B多模态交互工具镜像,并构建一个MySQL数据库系统来存储与分析其交互日志。通过该系统,可以高效管理图文混合的交互数据,并应用于智能客服等场景,实现用户问题聚类、热点分析等数据驱动的模型优化。

weixin_42430341的博客 53

IBM Rational Rhapsody 工具使用说明

IBM Rational Rhapsody 软件简单入门教程IBM Rational Rhapsody 软件简单入门教程IBM Rational Rhapsody 软件简单入门教程

基于pytorch实现中国交通警察指挥8种手势识别源码+数据集+模型+详细项目说明步骤.zip

识别8种中国交通警察指挥手势的Pytorch深度学习项目

java-springboot基于javaweb儿童绘本租阅平台 SpringBoot驱动的少儿图书循环共享租赁系统 基于JavaWeb的亲子绘本智能借阅服务平台计算机毕业设计

【摘要】本设计基于SpringBoot+MySQL+Vue技术栈开发了一个儿童绘本租阅平台,旨在解决绘本"高单价、低复用"的问题。系统采用B/S架构,包含前台会员模块和后台管理模块,实现绘本租借全流程数字化管理。前台功能包括绘本浏览、在线租借、订单管理、归还提醒等;后台提供会员管理、绘本管理、订单处理等核心功能。通过可行性分析验证了系统的经济、技术和操作可行性,采用E-R图完成数据库概念设计。测试结果表明,系统实现了绘本选书-租书-还书-再流通的闭环,为家庭提供低成本获取优质绘本资源的解

毕设程序分享_清学姐 1904

油气开采中基于分布式光纤温度测试的水平井产出剖面理论与实现(复现论文,含详细可运行代码及解释)

内容概要:本文围绕基于分布式光纤温度测试的水平井产出剖面解释理论展开研究,主要包括建立温度预测模型、井筒和油藏耦合模型及反演算法等内容。利用Python语言实现并优化油藏渗流模型、热力学模型及井筒流体模型等,同时采用蒙特卡罗马尔科夫链(MCMC)反演渗透率,从而提高模型精度,并进行详细的数值实验与结果验证。最终形成了一个从数据收集、建模、反演直至结果可视化的完整流程。适合人群:适用于石油工程及相关领域的科研工作者和技术人员,特别关注分布式光纤传感技术在水平井生产监测中的应用人员。使用场景及目标:用于指导油气田水平井产量监控和生产管理,帮助确定最佳采收策略以提高油气回收效率。其他说明:代码实施部分虽做了适当简化以便理解和运行,但在真实世界的应用中还需根据实际情况调整模型参数,并考虑地质特征等因素的影响。

Docker容器化部署实战:从安装到MySQL与Redis全攻略

软件开发与运维中,环境不一致、部署流程繁琐是长期困扰团队的难题。容器化技术通过将应用及其依赖环境打包成镜像,实现了“构建一次,随处运行”,从根本上解决了环境差异带来的交付问题。Docker作为最具代表性的容器引擎,利用内核特性实现进程级隔离,相比虚拟机更轻量、启动更快、资源利用率更高。掌握Docker的镜像、容器、数据卷与网络管理,是构建现代化持续交付流程的基础能力。无论是本地开发、测试环境搭建,还是生产环境的MySQL、Redis等中间件部署,Docker都提供了标准化的解决方案。本文从实际部署角度出发,

weixin_34015336的博客 180

java-springboot汉东大学锦里校区食堂美食点评网 基于SpringBoot的校园食堂口碑评价与菜品分享系统 Java校园餐饮互动点评与食堂信息管理平台的设计与实现计算机毕业设计

摘要:本文介绍了基于Java-SpringBoot框架开发的汉东大学锦里校区食堂美食点评网系统。该系统采用B/S架构,实现前后端分离(SpringBoot+Vue),使用MySQL数据库存储数据。主要功能包括用户注册登录、食堂信息管理、菜品评价、互动交流等模块,旨在解决校园食堂选择困难、反馈渠道缺失等问题。系统通过数字化点评功能,为师生提供透明化的餐饮信息,同时为食堂改进提供数据支持。文章详细阐述了系统需求分析、功能设计(管理员和用户双角色架构)、数据库设计(E-R模型)及实现过程,并展示了系统关键界面截图

程序员一枚 1193

java-springboot网红美食分享平台 基于SpringBoot的潮流美食社区与菜谱分享系统 JavaWeb网红餐饮推荐与互动交流平台计算机毕业设计

本文介绍了一个基于SpringBoot+Vue的网红美食分享平台毕业设计项目。系统采用前后端分离架构,前端使用Vue.js,后端采用SpringBoot框架,数据库使用MySQL5.7/8.0。平台主要功能包括:用户注册登录、个人中心管理、美食分类与口味筛选、美食推荐算法、食谱分享、排行榜单生成、社区互动等模块。系统实现了从"刷-学-做-晒-评-榜"的完整闭环,提供图文/视频内容展示和敏感词过滤功能。管理员可通过后台进行用户管理、内容审核和系统配置。项目已实现技术可行性验证,具备完整的功

毕设源码_越师姐 1068

java-springboot基于java校园二手交易平台 高校跳蚤市场交易平台的设计与实现 SpringBoot驱动的校园闲置物品交易系统计算机毕业设计

摘要:本文介绍了一个基于Java+SpringBoot的校园二手交易平台毕业设计项目。系统采用B/S架构,整合了商品交易、社交论坛、支付管理等核心功能模块,解决了传统微信群交易信息混杂、检索困难等问题。平台主要功能包括:商品发布与搜索、多级分类、购物车、订单管理、校园论坛、投诉举报等,采用SpringBoot+MyBatis+MySQL技术栈实现。系统通过JWT令牌保障安全性,支持RESTful接口和Swagger文档,具备完整的用户权限管理机制。项目包含系统分析、设计、实现全过程,提供源码、数据库和配套文

程序员一枚 735

计算机毕业设计springboot基于协同算法的电影推荐系统 SpringBoot协同过滤电影智能推荐平台 SpringBoot影片个性化推送系统

电影推荐系统主要目标是实现网上的相关信息管理服务。在确定了目标后,我们从以下四方面对能否实现本系统目标进行可行性分析5。3.1.1技术可行性技术上的可操作性是项目建设顺利进行的一个关键因素,技术措施必须达到要求,方能使项目顺利进行。该方案使用了开放源码的代码,并使用Java等技术,对软件的设计具有适度的困难和对电脑的硬件需求。所有的技术都很容易使用。该项目具有技术上的可行性6。3.1.2操作可行性当今社会,电脑已经是耳熟能详的存在了,绝大部分用户。

毕设源码_钟学姐 1022
上一篇: 用Python操作PPT的办公自动化教程
下一篇: Python 模块下 __init__.py 文件
大模型应用场景
博客等级 码龄5年 7640粉丝 1350原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值