面经总结(二)(数据库)

数据库常识:

1、数据库系统包含什么?

        包含了数据库、数据库管理系统、数据库管理员和应用程序。

        数据库(DB):顾名思义是存放数据的仓库,实现数据的持久化。

        数据库管理系统(DBMS):类似于操作系用(OS),是计算机的基础软件,比如Mysql就是一种关系型的数据库管理系统,实现了对数据的统一管理与操纵。

        数据管理员:人,数据库管理员负责管理和维护数据库系统

        应用程序:应用程序是使用数据库系统的最终用户,它们通过执行数据库操作来实现特定的业务逻辑和功能。

2、数据库设计的步骤:

        需求分析->概念设计->逻辑设计->物理设计->实施与应用以及维护。

        对应用户要求->设计E-R图->将E-R图装换为数据模型(如关系模型)->建立索引(形成物理存储安排)

3、范式

        第一范式:指属性不可再分(比如学籍可再分为学号和居住地,就不满足第一范式)

        第二范式:指消除了非主属性对主键的部分函数依赖(比如主键是学号、课程号,非主属性是姓名,只对学号产生依赖,此时有必要拆分成两个表,避免这种依赖关系)

        第三范式:消除了非主属性对主键的传递函数依赖(比如说主键是学号,非主属性是宿舍号和宿舍楼楼妈姓名,此时楼妈姓名就对学号产生了传递依赖,因为学号->宿舍号->楼妈姓名。)

        BC范式:消除了主键内部主属性之间的部分函数依赖和传递依赖。

4、其他科班基本概念比如数据库的系统模式、数据库关系完整性等、以及主码、候选码等基本概念此处不赘述。

MySQL数据库:

一、事务

1、事务的四大基本特性是什么?在MySQL中是怎么实现的?

        ACID四大基本特性指的是原子性、一致性、隔离性、持久性,在MySQL中如何实现呢?

        ①、原子性(Atomic):原子性是指事务中的语句要么全部执行,要么全部失败。MySQL中原子性是通过undo log来实现的,undo log是重做日志,会记录事务的操作,当事务执行失败后,MySQL 可以使用 undo log 进行回滚,撤销已经执行的操作,从而保证原子性。

        ②、一致性(Consistency):在 MySQL 中,一致性是通过事务管理和数据库约束来实现的。MySQL 提供了各种类型的约束,如主键约束、唯一约束、外键约束等,用于保证数据库的一致性。此外,MySQL 在执行事务时也会检查数据库的完整性约束,以确保事务执行前后数据库的一致性。

       ③、隔离性(Isolation):隔离性要求事务之间彼此独立,互不干扰。即使多个事务同时访问数据库,每个事务也应该像没有其他事务存在一样进行。在 MySQL 中,隔离性是通过事务管理和锁机制来实现的。MySQL 提供了四种隔离级别(Read Uncommitted、Read Committed、Repeatable Read、Serializable),用于控制事务之间的隔离程度。通过使用锁机制和多版本并发控制(MVCC),MySQL 可以确保事务之间的隔离性。

       ④、持久性(Durability):持久性要求事务一旦提交,其结果应该永久保存在数据库中,即使系统崩溃也不应该丢失。在 MySQL 中,持久性是通过事务管理和日志系统来实现的。MySQL 使用 redo log 来记录事务的操作,在事务提交后将操作记录到磁盘上,以确保即使系统崩溃,事务的结果也不会丢失。

2、数据库事务常遇到的三种问题

        ①、脏读:事务A对某数据做了修改,改完后事务B读取了该数据,但是事务A后续出错发生回滚,数据恢复原值,事务B读取到的就是脏数据。

        ②、不可重复读:事务A读取某数据后,事务B介入修改了该数据,事务A重复读取该数据,此时前后读取数据不一致,发生了重复读现象。

        ③、幻读:幻读指的是事务A两次执行相同的查询得到的结果不一致。这是因为在两次执行查询之间,另一个事务B插入了新的数据,导致了查询结果的变化。幻读与不可重复读类似,但不同之处在于幻读关注的是新增的数据而不是修改的数据。

3、四种事务隔离机制

        ①、读未提交:不解决任何问题,最差的隔离机制

        ②、读已提交:解决了脏读问题

        ③、可重复读:解决脏读问题、不可重复读问题,其是MySQL数据库的默认隔离级别

        ④、串行化:解决了全部的三个问题

二、索引

1、索引是什么?数据库中的索引常见的数据据结构有哪些?

        def:索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。

        常见数据结构:哈希表、二叉查找树、AVL树、红黑树、B树&B+树(MySQL中的两版存储引擎InnoDB和MyISAM均使用B+树)

2、 为什么InnoDB不用哈希表、二叉查找、AVL树、红黑树?(比较数据结构问题)B+树的优势在哪里?

比较:

        哈希表会发生哈希碰撞,哈希索引适合用于等值查询。

        二叉树很容易退化成链表,查询时间复杂度达到O(n)级别。

        AVL树由于 需要频繁地进行旋转操作来保持平衡,因此会有较大的计算开销进而降低了数据库写操作的性能。并且, 在使用 AVL 树时,每个树节点仅存储一个数据,而每次进行磁盘 IO 时只能读取一个节点的数据,如果需要查询的数据分布在多个节点上,那么就需要进行多次磁盘 IO。

        红黑树并不追求严格的平衡,而是大致的平衡。正因如此,红黑树的查询效率稍有下降,因为红黑树的平衡性相对较弱,可能会导致树的高度较高,这可能会导致一些数据需要进行多次磁盘 IO 操作才能查询到,这也是 MySQL 没有选择红黑树的主要原因。

B+树的优势:

        1、首先B+树实现了非叶子节点存放索引,叶子的节点存放数据,使得查询效率稳定(相比B树)

        2、B+树的叶子节点之间使用双向链表链接,便于进行范围查询。

        3、作为多路平衡搜索树,相对高度低,适合于存储大规模数据集。

3、聚簇索引和非聚簇索引的区别?

       聚簇索引:在聚簇索引中,数据与索引结构放在一起。换句话说,聚簇索引将表中的数据行存储在索引的叶子节点中,因此索引和数据是紧密关联的;在聚簇索引中,索引的键值必须是唯一的,因为索引的顺序与数据的顺序一致,不能有重复的键值;由于数据行的顺序与索引的顺序一致,因此通过聚簇索引进行范围查询或排序操作时,性能通常更好。但是,插入、删除和更新操作可能会导致数据移动,影响性能。 聚簇索引是一种物理排序索引,决定了数据行的物理存储引擎,聚簇索引的叶子节点上存放了该行所有的数据。

       非聚簇索引:在非聚簇索引中,索引的叶子节点中存储的是指向实际数据行的指针或引用,而不是实际的数据行。因此,索引和数据是分开存储的;索引的键值可以是重复的,因为实际的数据行是分开存储的,不受索引的唯一性限制;非聚簇索引可以加速查询操作,特别是在搜索范围较小的情况下,但是范围查询和排序操作的性能可能不如聚簇索引高。非聚簇索引又称为二级索引,比如普通索引、唯一索引,其叶子节点上存放的是主键值。

4、主键索引和聚簇索引的关系?

        主键索引和聚簇索引是密不可分的,主键是唯一且非空的,其作为表中唯一的标识符而存在,如果没有定义主键,则会默认唯一非空的其他键为主键。一般默认定义的主键索引就是聚簇索引。

5、二级索引有哪些?

        包括唯一索引、普通索引、前缀索引、全文索引。

6、覆盖索引是什么?

        覆盖索引是指查询使用了索引,并且需要返回的列,刚好在该索引中可以全部找到,不需要回表查询。比方说student(Sno,Sname,Ssex),其中Sno为主键,其主键索引实现了聚集索引,走Sno来查询效率就很高,Sname实现了普通索引,走这个二级索引来查询效率也可以,Ssex啥也不是这时有select Sno,Sname from student where Sno = '2',效率很好。但是若是select * from student where Sno = '2',就需要回表查询了,效率就降低了

        使用覆盖索引的思路还可以解决超大分页的问题:

        MySQL中分页是通过limit语句来实现的,例如select * from student limit 5,5,意思就是5条信息一页,我现在查看第6行-第10行的信息即第二页的信息。MySQL中的超大分页是指select * from student limit10000000,10,即查看第10000001页的信息,MySQL会对前面的数据排序,这样会导致查询时间长,可以使用覆盖索引来改进。改进后的语句:select * from student a,(select Sno from student order by sno limit 10000000,10) b  where a.sno = b.sno,可大大提高查询效率。

7、联合索引

        将多个列作为索引:

ALTER TABLE `cus_order` ADD INDEX id_score_name(score, name);

8、索引失效的场景:

        1、使用联合索引时违背了最左前缀法则

                                                                                                                        (图片源自黑马)

        2、建立索引后右边的列用到了范围查询

        3、建立索引的字段上进行运算操作

        4、建立索引的字段上发生类型强转

        5、模糊查询以%开头

9、SQL语句执行很慢如何解决?

        使用explain关键字来检查SQL语句

        Key字段可以用来检测是否命中了索引,Extra字段查看是否发生回表查询(Using index condition表示使用了回表查询,Using index表示不需要使用回表查询)

        Type字段:从上至下,性能逐渐变差:应该避免使用index和all,常用的是er_ref和ref。

三、锁机制

1、表级锁和行级锁了解吗?

  1. 行级锁(Row-level Locking)

    • 行级锁是最细粒度的锁,它可以锁定数据表中的单行数据。当某个事务对数据行进行修改时,可以使用行级锁将该行数据锁定,防止其他事务同时修改同一行数据,从而保证数据的一致性。
    • MySQL 使用 InnoDB 存储引擎默认支持行级锁,通过在事务中使用 SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE 等语句来获取行级锁。
  2. 表级锁(Table-level Locking)

    • 表级锁是对整个数据表进行锁定,当某个事务对数据表进行修改时,可以使用表级锁将整个表锁定,防止其他事务同时对整个表进行修改,从而保证数据的一致性。
    • MySQL 中的 MyISAM 存储引擎默认使用表级锁,通过在事务中使用 LOCK TABLESUNLOCK TABLES 等语句来获取和释放表级锁。

2、行级锁使用的注意事项:

        InnoDB 的行锁是针对索引字段加的锁,表级锁是针对非索引字段加的锁。当我们执行 UPDATEDELETE 语句时,如果 WHERE条件中字段没有命中唯一索引或者索引失效的话,就会导致扫描全表对表中的所有行记录进行加锁。

3、InnoDB有哪几类行锁:

InnoDB 行锁是通过对索引数据页上的记录加锁实现的,MySQL InnoDB 支持三种行锁定方式:

  • 记录锁(Record Lock):也被称为记录锁,属于单个行记录上的锁。
  • 间隙锁(Gap Lock):锁定一个范围,不包括记录本身。
  • 临键锁(Next-Key Lock):Record Lock+Gap Lock,锁定一个范围,包含记录本身,主要目的是为了解决幻读问题(MySQL 事务部分提到过)。记录锁只能锁住已经存在的记录,为了避免插入新记录,需要依赖间隙锁。

MySQL可重复读这个默认隔离级别下使用的是临键锁 。

4、共享锁和排他锁:

        概念类似于ReentrantReadWriteLock中的读锁和写锁。

5、意向锁:

        作用:意向锁的作用是为了在获取行级锁之前,提前通知其他事务本事务的锁定意向,以便其他事务可以根据这个信息来避免锁冲突或提前释放资源。这样可以提高事务并发性,保证数据的一致性和完整性。

        意向锁是表级锁,共有两种:

  • 意向共享锁(Intention Shared Lock,IS 锁):事务有意向对表中的某些记录加共享锁(S 锁),加共享锁前必须先取得该表的 IS 锁。
  • 意向排他锁(Intention Exclusive Lock,IX 锁):事务有意向对表中的某些记录加排他锁(X 锁),加排他锁之前必须先取得该表的 IX 锁。

6、MVCC了解吗?

        MVCC(Multi-Version Concurrency Control)多版本并发控制机制,在MVCC中,每个事务在启动时都会创建一个独立的一致性视图(Snapshot),用于读取数据。这个一致性视图反映了事务启动时数据库的状态,包括已提交的事务和未提交的事务对数据库所做的修改。而在事务执行期间,其他事务对数据库的修改不会影响到已经创建的一致性视图。

MVCC的实现通常依赖于两个关键机制:

  1. 版本号:每个数据行都会有一个版本号(或者说是时间戳),用于标识该数据行的修改历史。当一个事务对数据行进行修改时,会为修改前的数据行创建一个新版本,并更新数据行的版本号。

  2. Undo log:用于存储数据行的历史版本信息。在数据库中,如果一个事务需要读取旧版本的数据,可以通过Undo log来获取。

四、存储引擎

InnoDB和MyISAM的区别:

InnoDB 和 MyISAM 是 MySQL 中两种常见的存储引擎,它们在设计理念、功能特性、性能表现等方面有很多不同之处。以下是它们的主要区别:

  1. 事务支持

    • InnoDB 支持事务(Transaction),具有 ACID(Atomicity、Consistency、Isolation、Durability)特性,可以实现事务的原子性、一致性、隔离性和持久性。
    • MyISAM 不支持事务,不具备事务的特性,因此不能保证数据的完整性和一致性。
  2. 行级锁

    • InnoDB 使用行级锁(Row-level Locking),可以在并发情况下更好地处理多个事务对同一数据行的访问。
    • MyISAM 使用表级锁(Table-level Locking),只能对整个表进行锁定,无法实现精细的并发控制,可能会导致锁冲突和性能瓶颈。
  3. 崩溃恢复

    • InnoDB 依赖如redo log可以在数据库崩溃或异常情况下保证数据的持久性和一致性。
    • MyISAM 不支持崩溃恢复和事务日志,容易在数据库崩溃或异常情况下导致数据丢失或损坏。
  4. 表级缓存

    • InnoDB 使用行级缓存,可以减少锁冲突和提高并发性能。
    • MyISAM 使用表级缓存,可能会导致大量的表锁等待和性能瓶颈。

     5.索引方式:

              1.InnnoDB使用的是聚簇索引。

              2.MyISAM使用的是非聚簇索引。

 五、MySQL三大日志

1、bin log:

        归档日志属于server层,是 MySQL 的二进制日志文件,用于记录数据库的所有修改操作,包括数据变更、数据库结构变更等。归档日志是以二进制格式存储的,可以用于数据备份、数据复制、数据恢复等操作。主从复制和数据库恢复过程中都会用到归档日志。

2、redo log:

        重做日志是 InnoDB 存储引擎的一部分,用于记录事务对数据库的修改操作。当执行事务提交时,对应的修改操作会先写入重做日志,然后再写入数据库的数据文件。这样即使在事务提交之前数据库发生崩溃,MySQL 可以通过重做日志来恢复未完成的事务,确保数据的一致性和持久性

3、undo log:

        Undo日志是MySQL中用于实现事务的回滚和MVCC(多版本并发控制)的一种机制。它记录了事务对数据库进行修改之前的数据值,以便在事务回滚时将数据恢复到修改之前的状态,Undo日志是MySQL中非常重要的一个组成部分,它提供了事务回滚、MVCC实现和长事务控制等功能,保证了数据库的一致性和可靠性。

六、数据库的优化

        1、读写分离:

        读写分离是数据库优化的一种措施,其是指通过多个从数据库实现读功能,写功能则交给主数据库完成,主从数据的同步是通过bin log来实现的,主服务器上的数据是最新的,它负责维护数据库的一致性和完整性,从服务器上的数据是主服务器的一个副本,因此可以处理大量的读取请求,减轻了主服务器的负载压力

        存在问题:主从数据一致性问题,可以使用bin log来同步、数据库中间件如MySQL proxy或者通过触发器来实现同步。

        2、分库分表:

     Q: 如果 MySQL 一张表的数据量过大怎么办?换言之,我们该如何解决 MySQL 的存储压力呢?

        分库可以通过两种方式,水平分库垂直分库

        垂直分库是指将数据库按照业务划分来进行分库,比如用户表、订单表等表的数据量巨大,可以根据业务直接垂直分库为用户数据库、订单数据库。。。

        水平分库是指把同一个表按一定规则拆分到不同的数据库中,每个库可以位于不同的服务器上,这样就实现了水平扩展,解决了单表的存储和性能瓶颈的问题。       

        分表也有两种方式,水平分表垂直分表。

        垂直分表是指对数据表列的拆分,把一张列比较多的表拆分为多张表

        水平分表是指是对数据表行的拆分,把一张行比较多的表拆分为多张表,可以解决单一表数据量过大的问题。

3、分库分表带来的问题?怎么解决?

        分库分表会导致数据分布在不同的数据库实例或数据表中,可能会出现数据不一致的情况。例如,跨数据库实例的事务需要通过分布式事务管理器来保证数据的一致性,而跨数据表的事务可能会受到分布式锁的影响。

        会增加系统的复杂度,包括数据同步、数据迁移、数据备份和恢复等方面的操作都会变得更加复杂和困难。

        跨库查询和跨表查询可能会导致性能问题,因为需要在多个数据库实例或数据表之间进行数据的传输和处理。特别是在大数据量和高并发的情况下,可能会影响查询的性能和响应时间。

解决方式:

        使用Apache ShardingSphere,其是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。

Redis

1、Redis的持久化机制:

        ①、RDB快照:RDB快照是以快照的方式将内存中的数据写进磁盘中,写进形式是二进制的。RDB 的优点是它生成的文件相对来说比 AOF 文件更小,因为它是快照,只保存了在某个时间点上的数据状态。

        ②、AOF文件:AOF 以日志的形式记录服务器接收到的写命令,以此来记录数据的变化。这个日志文件是一个只进行追加操作的日志文件,AOF 文件通常比 RDB 文件更大,因为它记录了每个写命令。

        ③、还有二者混合的持久化方式。

        ④、RDB快照和AOF文件形式相比较。RDB速度更快,但是缺点在于记录的是上一次快照的信息,AOF相比起来文件会更大,但是安全性会更好,并且在数据库崩溃时,通常使用AOF文件来恢复信息。

2、Redis中五种基本数据类型和其对应的数据结构是什么?

        Redis的五种基本数据类型包括String、List、Hash、Set、Zset(有序集合),底层数据结构分别是简单动态字符串、双向链表、哈希表、哈希表、压缩列表->跳表

3、Redis的应用场景有哪些?

        ①、Redis 最常见的用途之一是作为缓存层,将经常访问的数据缓存在内存中,以加速读取速度。通过将数据库查询结果或计算结果缓存到 Redis 中,可以大幅度减少数据库或其他后端服务的压力。

        从他的数据结构出发,来详细分析一下Redis不同数据结构常见的应用场景:

        ②、String数据类型常被用作分布式锁、计数器

        ③、List数据类型底层时双向链表,所以常被用作消息的推送,比如微信公众号的新消息推送、微博的新微博发送。

        ④、Set数据类型底层是哈希表,其不允许有重复值存在,可以求并集、求交集,应用场景包括共同关注、共同好友等。

        ⑤、Hash数据类型的底层是哈希表,其常常被用于购物车场景,Redis中存储数据本身就是一个大的<k,v>,k对应的数据结构往往是String类型,V对应的数据结构是刚刚提到的数据类型。Set本身又是键值对的形式,因此适合于实现购物车,根据购物车id找到对应的商品id,商品id又对应商品的价格。

        ⑥、Zset有序集合,应用场景有排行榜,如微信运动排行榜、直播间礼物榜、

4、Redis的生产问题(重要);

        ①、缓存穿透:缓存穿透指的是大量恶意或者非法的请求经过缓存系统直接访问数据库,由于缓存系统无法命中缓存,每次请求都要直接访问后端存储,导致数据库宕机。

        解决措施:可以在缓存层增加布隆过滤器等机制来拦截不存在的请求;接口限流,将恶意访问拉入黑名单

        ②、缓存击穿:是指在缓存中的某个热点数据刚好过期了,这时有大量的请求落到了数据库上,导致数据库的崩盘

         解决措施:可以设置热点数据永不过期;可以给请求上互斥锁,避免同一时间大量访问。

        ③、缓存雪崩:大量缓存同时失效,使得大量的请求落在了数据库上。

        解决措施:设置不同的过期时间;部署Redis集群,避免单机出现问题;设置缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq下载安装最新版本--并添加开机启动图文详解!!

一、简介 RabbitMQ是一个开源的遵循AMQP协议实现的消息中间件支持多种客户端语言,用于分布式系统中存储和转发消息, 这是 Release RabbitMQ 3.13.0 rabbitmq/rabbitmq-server GitHub 二、安装前准备 1、查看自己系统 确认操作系统版本兼容性 uname -a2、下载Erlang依赖包…

记录浏览器打开网站拦截提示不安全解决方法

浏览器可能会因为多种原因显示“不安全”的警告,这通常是由于安全设置不当或配置错误造成的。以下是一些常见的原因和解决方法: 1. HTTPS未启用 原因:如果网站使用HTTP而不是HTTPS,浏览器可能会显示不安全的警告。 解决方法:配置SSL/TLS证书并使用HTTPS来加密数据传输…

MySQL数据库常见SQL语句宝典

一 、常用操作数据库的命令 1.查看所有的数据库 : show databases;2.创建一个数据库 : create database if not exists 数据库名;3.删除一个数据库 : drop database if exists 数据库名;4.选择一张表 (注意在建表之前必须要选择数据库) : use 表名;* --tab 键的上面&#x…

K8s 使用 CephFS 作为后端存储(静态供给、动态供给)

一、K8s 使用 CephFS CephFS是 Ceph 中基于RADOS&#xff08;可扩展分布式对象存储&#xff09;构建&#xff0c;通过将文件数据划分为对象并分布到集群中的多个存储节点上来实现高可用性和可扩展性。 首先所有 k8s 节点都需要安装 ceph-common 工具&#xff1a; yum -y ins…

Vue 组件分类、局部注册和全局注册

文章目录 背景知识组件分类安装 vue-cli示例设置组件局部注册设置组件全局注册 背景知识 开发 Vue 的两种方式&#xff1a; 核心包传统开发模式&#xff1a;基于 html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工…

ubuntu系统搭建pytorch环境详细步骤【笔记】

实践设备&#xff1a;华硕FX-PRO&#xff08;NVIDIA GeForce GTX 960M&#xff09; 搭建PyTorch环境的详细步骤如下&#xff1a; 安装Ubuntu系统&#xff1a; 下载Ubuntu的镜像文件并制作启动盘。将启动盘插入计算机&#xff0c;启动计算机并按照提示安装Ubuntu系统。 配置镜…

Python爬虫--Ajax异步抓取腾讯视频评论

在某些网站 &#xff0c;当我们滑下去的时候才会显示出后面的内容 就像淘宝一样&#xff0c;滑下去才逐渐显示其他商品 这个就是采用 Ajax 做的 然后我们现在就是要编写这样的爬虫。 规律分析&#xff1a; 这个时候就要用到我们的 Fiddler 了 我们需要分析加载评论的规律 …

Orange3数据可视化(组件概览)

概要 大家见过Orange3提供的丰富数据可视化组件吗&#xff1f; Orange3为您提供了一系列生动的图表工具&#xff0c;包括树图、箱线图、小提琴图、分布图、散点图、折线图、条形图、筛图、马赛克图、自由投影、线性投影、雷达图、热力图、韦恩图、轮廓图、毕达哥拉斯树、毕达哥…

编程学习系列(1):计算机发展及应用(1)

前言&#xff1a; 最近我在整理书籍时&#xff0c;发现了一些有关于编程的学习资料&#xff0c;我派蒙也不是个吝啬的人&#xff0c;从今天开始就陆续分享给大家。 计算机发展及应用&#xff08;1&#xff09; 1944 年美国数学家冯诺依曼&#xff08;现代计算机之父&#xff…

鹏哥C语言复习——字符函数与字符串函数

目录 一.字符函数 1.字符分类函数 2.字符转换函数 二.基础字符串函数 1.strlen函数 2.strcpy函数 3.strcat函数 4.strcmp函数 三.基础字符串函数优化 1.strncpy函数 2.strncat函数 3.strncmp函数 四.进阶字符串函数 1.strstr函数 2.strtok函数 3.strerror函数 一…

【Linux进程】守护进程

【Linux进程】守护进程 目录 【Linux进程】守护进程守护进程守护进程概念进程组和会话的概念 系统的守护进程函数 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.4.27 前言&#xff1a;本篇博客将会介绍守护进程&#xff0c;以及进程组和会话的概念&#xff0c;如何变成…

《C++学习笔记---入门篇3》---内联函数,auto关键字,范围for,指针空值nullptr

1.内联函数 1.1 内联函数概念 1.2 特性 1.3 接下来说一道面试题&#xff1a; 2.auto关键字(C11) 2.1auto简介 2.2 auto的使用细则 3.3 auto不能推导的场景 3.基于范围的for循环(C11) 3.1范围for的语法 3.2 范围for的使用条件 4.指针空值---nullptr(C11) 4.1 C98中的…

25计算机考研院校数据分析 | 厦门大学

厦门大学&#xff0c;简称厦大&#xff08;XMU&#xff09;&#xff0c;地处福建厦门。由著名爱国华侨领袖陈嘉庚先生于1921年创办&#xff0c;是中国近代教育史上第一所华侨创办的大学&#xff0c;是国内最早招收研究生的大学之一&#xff0c;中国首个在海外建设独立校园的大学…

C++ 动态链接库DLL创建及使用

一、动态链接库DLL创建 使用VS2022 创建 1、创建新解决方案 创建即可 2、创建动态链接库新项目 右键解决方案 语言选择C&#xff0c;选择动态链接库 填入项目名称&#xff0c;勾选&#xff1a;将解决方案和项目放在同一目录中 点击创建 3、创建后&#xff0c;显示dllmai…

详解centos8 搭建使用Tor 创建匿名服务和匿名网站(.onion)

1 Tor运行原理&#xff1a; 请求方需要使用&#xff1a;洋葱浏览器&#xff08;Tor Browser&#xff09;或者Google浏览器来对暗&#xff0c;网网站进行访问 响应放需要使用&#xff1a;Tor协议的的Hidden_service 2 好戏来了 搭建步骤&#xff1a; 1.更新yum源 rpm -Uvh h…

鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元

任务即线程 在鸿蒙内核中&#xff0c;广义上可理解为一个任务就是一个线程 官方是怎么描述线程的 基本概念 从系统的角度看&#xff0c;线程是竞争系统资源的最小运行单元。线程可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它线程运行。 鸿蒙内核每个…

细致讲解——不同类型LSA是作用以及相互之间的联系

目录 一.常见的LSA类型 二.OSPF特殊区域 1.区域类型 2.stub区域和totally stub区域 &#xff08;1&#xff09;stub区域 &#xff08;2&#xff09;totally stub区域 3.nssa区域和totally nssa区域 &#xff08;1&#xff09;nssa区域 &#xff08;2&#xff09;totall…

【java数据结构之八大排序(上)-直接插入排序,希尔排序,选择排序,堆排序,向下调整(大根堆,小根堆)等知识详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 …

微信小程序使用echarts实现条形统计图功能

微信小程序使用echarts组件实现条形统计图功能 使用echarts实现在微信小程序中统计图的功能&#xff0c;其实很简单&#xff0c;只需要简单的两步就可以实现啦&#xff0c;具体思路如下&#xff1a; 引入echarts组件调用相应的函数方法 由于需要引入echarts组件&#xff0c;代…

SpringCloudStream 3.x rabbit 使用

1. 前言 今天带来的是SpringCloudStream 3.x 的新玩法&#xff0c;通过四大函数式接口的方式进行数据的发送和监听。本文将通过 rabbitMQ 的方式进行演示 3.x版本后是 可以看到 StreamListener 和 EnableBinding 都打上了Deprecated 注解。后续的版本更新中会逐渐替换成函数式…