8.15笔记

news2024/11/16 8:40:30

一、mycat读写分离实现

1. 添加一个新的虚拟主机,设置ip为10.1.1.60,主机名为mycat.yuanyu.zhangmin.关闭防火墙 SELinux NetworkManager

2. 上传jdk和mycat安装包

3. 解压并且添加到指定的位置

 
  1. [root@mycat ~]# ls

  2. anaconda-ks.cfg

  3. frp

  4. initserver.sh

  5. jdk1.8.0_192

  6. jdk-8u192-linux-x64.tar.gz

  7. mycat

  8. Mycat-server-1.6.5-release-

  9. 20180122220033-linux.tar.gz

  10. [root@mycat ~]# cp -r jdk1.8.0_192/

  11. /usr/local/jdk

  12. [root@mycat ~]# cp -r mycat/ /usr/local/

4. 查看并且配置jdk环境

 
  1. [root@mycat ~]# ls /usr/local/jdk/

  2. bin man

  3. COPYRIGHT README.html

  4. include release

  5. javafx-src.zip src.zip

  6. jre THIRDPARTYLICENSEREADMEJAVAFX.txt

  7. lib

  8. THIRDPARTYLICENSEREADME.txt

  9. LICENSE

  10. [root@mycat ~]# sed -i '$aexport

  11. JAVA_HOME=/usr/local/jdk' /etc/profile

  12. [root@mycat ~]# source /etc/profile

  13. [root@mycat ~]# $JAVA_HOME

  14. -bash: /usr/local/jdk: 是一个目录

  15. [root@mycat ~]# sed -i '$aexport

  16. PATH=$PATH:$JAVA_HOME/bin' /etc/profile

  17. [root@mycat ~]# source /etc/profile

  18. [root@mycat ~]# $PATH

  19. -bash:

  20. /usr/local/sbin:/usr/local/bin:/usr/sbin:

  21. /usr/bin:/root/bin:/usr/local/jdk/bin: 没

  22. 有那个文件或目录

5. 测试启动myca就可以了

 
  1. [root@mycat ~]# ls /usr/local/mycat/

  2. bin catlet conf lib logs version.txt

  3. [root@mycat ~]# ll /usr/local/mycat/

  4. 总用量 12

  5. drwxr-xr-x. 2 root root 190 8月 15 15:18

  6. bin

  7. drwxr-xr-x. 2 root root 6 8月 15 15:18

  8. catlet

  9. drwxr-xr-x. 4 root root 4096 8月 15 15:18

  10. conf

  11. drwxr-xr-x. 2 root root 4096 8月 15 15:18

  12. lib

  13. drwxr-xr-x. 2 root root 6 8月 15 15:18

  14. logs

  15. -rwxr-xr-x. 1 root root 219 8月 15 15:18

  16. version.txt

  17. [root@mycat ~]# ls /usr/local/mycat/bin/

  18. dataMigrate.sh mycat

  19. startup_nowrap.sh wrapper-linux-x86-

  20. 32

  21. init_zk_data.sh rehash.sh wrapperlinux-ppc-64 wrapper-linux-x86-64

  22. [root@mycat ~]#

  23. /usr/local/mycat/bin/mycat console

  24. Running Mycat-server...

  25. wrapper | --> Wrapper Started as Console

  26. wrapper | Launching a JVM...

  27. jvm 1 | Java HotSpot(TM) 64-Bit Server

  28. VM warning: ignoring option

  29. MaxPermSize=64M; support was removed in

  30. 8.0

  31. jvm 1 | Wrapper (Version 3.2.3)

  32. http://wrapper.tanukisoftware.org

  33. jvm 1 | Copyright 1999-2006 Tanuki

  34. Software, Inc. All Rights Reserved.

  35. jvm 1 |

  36. jvm 1 | log4j:WARN No appenders could

  37. be found for logger

  38. (io.mycat.memory.MyCatMemory).

  39. jvm 1 | log4j:WARN Please initialize

  40. the log4j system properly.

  41. jvm 1 | log4j:WARN See

  42. http://logging.apache.org/log4j/1.2/faq.h

  43. tml#noconfig for more info.

  44. jvm 1 | MyCAT Server startup

  45. successfully. see logs in logs/mycat.log

6. 找到server.xml和schema.xml

7. 配置server.xml

 
  1. 93 <user name="zhangmin"

  2. defaultAccount="true">

  3. 94 <property

  4. name="password">zhangmin</property>

  5. 95 <property

  6. name="schemas">test</property>

  7. 96

  8. 97 <!-- 表级 DML 权限设置

  9. -->

  10. 98 <!--

  11. 99 <privileges

  12. check="false">

  13. 100 <schema

  14. name="TESTDB" dml="0110" >

  15. 101

  16. <table name="tb01" dml="0000"></table>

  17. 102

  18. <table name="tb02" dml="1111"></table>

  19. 103 </schema>

  20. 104 </privileges>

  21. 105 -->

  22. 106 </user>

  23. 107 <!--

  24. 108 <user name="user">

  25. 109 <property

  26. name="password">user</property>

  27. 110 <property

  28. name="schemas">TESTDB</property>

  29. 111 <property

  30. name="readOnly">true</property>

  31. 112 </user>

  32. 113 -->

 

8.配置schema.xml

 

9. 启动服务

/usr/local/mycat/bin/mycat start

10. 检查启动的是否成功

 
  1. [root@mycat ~]# netstat -lnput|grep 8066

  2. tcp6 0 0 :::8066

  3. :::* LISTEN

  4. 4547/java

11. 连接测试

 
  1. anaconda-ks.cfg echo frp initserver.sh

  2. mysql-8.0.33-linux-glibc2.12-x86_64

  3. [root@client ~]# cd mysql-8.0.33-linuxglibc2.12-x86_64/

  4. [root@client mysql-8.0.33-linuxglibc2.12-x86_64]# cd bin/

  5. [root@client bin]# ./mysql -h10.1.1.60 -

  6. P8066 -uzhangmin -pzhangmin

二、企业架构MySQL读写分离

1、读写分离的目的

数据库负载均衡

当数据库请求增多时,单例数据库不能够满足业务需求。需要进行数据库实例的扩容。多台数据库同时相应请求。也就是说需要对数据库的请求,进行负载均衡 但是由于数据库服务特殊原因,数据库扩容基本要求为:数据的一致性和完整性。所以要保证多台数据库

实例的数据一致性和完整性,以MySQL为例来说,官方提供了主从复制机制。

读写分离:

数据库的负载均衡不同于其他服务的负载均衡,数据要求一致性。基于主从复制的基础上,常见的数据库负载均衡使用的是读写分离方式。写入主数据库,读取到从数据库。可以认为数据库读写分离,是一种特殊的负载均衡实现。

实际业务中,读写分离存在的一个问题,不够实时性。

对于要求实时性高的业务

①缓存 写主库 写缓存 读缓存

②可以读主

③添加完数据之后,有一个跳转等待的时间(5s),数据正在审核中

2、读写分离常见的实现方式

①业务代码的读写分离

需要在业务代码中,判断数据操作是读还是写,读连接从数据服务器操作,写连接主数据库服务器操作以当前LNMP为例,需要通过PHP代码实现读写分离

②中间件代理方式的读写分离

在业务代码中,数据库的操作,不直接连接数据库,而是先请求到中间件服务器(代理)

由代理服务器,判断是读操作去从数据服务器,写操作去主数据服务器

 

 

主从复制的原理 :主服务器开启bin-log(记录了写操 作) 从服务器获取到主服务器的bin-log 记到relay-log中。从服务器在通过异步的线程方式,对于relay-log进行重放操作。

1、master配置

 

①在master服务器授权,slave服务器replication

slave权限

slave是通过MySQL连接登录到master上来读取二进制日志的,因此需要在 master上给slave配置权限

 
  1. mysql > grant replication slave on *.* to

  2. 'slave'@'192.168.17.%'identified by

  3. '123456';

②master服务器打开bin-log日志,并标识server-id

shell > vim /etc/my.cnf

配置文件内容

 
  1. [mysqld]

  2. log-bin = mysql-index

  3. server-id = 1

注意重启mysql使配置生效

③制作一个完整的备份

如果确认主从的数据库,默认开始数据是一致的,可以不做备份

shell > mysqldump -uroot -p'123456' --alldatabases > /root/mysql.sql

④查看master上的bin-log及其position位置

mysql > show master status;

查看并记录File的值,Position的值。之后需要在从服务器上,指向这些信息

8fe37f48da9d438b83915a114290ef5f.png

2、slave配置

①恢复备份文件

如果slave和master的数据本身就是相同的,可以不选择备份和导入

②配置server-id,标识服务器

shell > vim /etc/my.cnf

配置文件内容

 
  1. [mysqld]

  2. server-id=2

由于是克隆获取的MySQL实例,所以auto.conf里记录的UUID一样,需要删除/usr/local/mysql/data/auto.conf文件,否则主从无法识别互相身份,重启自动生成新的 即可。

③配置slave replication

 
  1. mysql > stop slave;

  2. mysql> change master to

  3. master_host='192.168.17.101'

  4. ,master_user='sl

  5. ave1'

  6. ,master_password='123456'

  7. ,master_log_fi

  8. le='mysql-bin.000002'

  9. ,master_log_pos=333;

  10. mysql > start slave;

④启动replication,并检查结果

mysql > show slave status\G;

查看到两个yes,主从复制成功。否则,查看显示最下面信息,通过error信息进行排查问题。

1、简单业务代码实现

示例语法代码:

 
  1. <?php

  2. //创建类

  3. class Mysql {

  4. //构造方法

  5. //当类被实例化时,会触发此方法

  6. public function __construct(){

  7. $this->master = @new

  8. mysqli('192.168.17.100'

  9. ,

  10. 'tp5shop'

  11. ,

  12. '$Abc3721'

  13. ,

  14. 'tp5shop');

  15. $this->slave = @new

  16. mysqli('192.168.17.105'

  17. ,

  18. 'tp5shop'

  19. ,

  20. '$Abc3721'

  21. ,

  22. 'tp5shop');

  23. // 如果从连接报错,就连接主

  24. if($this->slave->connect_errno){

  25. $this->slave=$this->master;

  26. }

  27. }

  28. // SQL执行方法

  29. public function query($sql){

  30. //判断语句中是否存在selete

  31. if(strpos($sql,

  32. 'select') !== false){

  33. //这是查询操作

  34. $rs = $this->slave->query($sql);

  35. }else{

  36. $rs = $this->master->query($sql);

  37. }

  38. return $rs;

  39. }

  40. }

  41. $mysql = new Mysql();

  42. $sql = "select * from tpshop_goods";

  43. $rs = $mysql->query($sql);

  44. while($row = $rs->fetch_assoc()){

  45. var_dump($row['goods_name']);

  46. }

将此代码上传到web服务器,测试是否可以实现读写分离。注意修改对应的连接地址、用户名称、密码等信息。

 
  1. #命令行执行php代码的方式

  2. #php需要提前配置环境变量 xxx.php为需要执行的php

  3. 脚本文件

  4. shell > php xxx.php

2、框架配置实现读写分离

①通过查看thinkphp5手册找到处理方案

②修改项目配置文件

一定要先去确定主从数据库的数据一致(tp5shop),用户名称和密码可以进行登录使用

 
  1. shell > vim

  2. /usr/local/nginx/html/tp5shop/application/da

  3. tabase.php

配置文件示例

 
  1. return [

  2. // 数据库类型

  3. 'type' => 'mysql'

  4. ,

  5. // 服务器地址

  6. // 1、主从数据库的连接地址 主在前 从在后

  7. 'hostname' =>

  8. '192.168.17.100,192.168.17.105'

  9. ,

  10. // 2、主从数据库的名称、用户、密码一样的话,只

  11. 配置一份即可。如果不一样,按照先后顺序,逗号分隔

  12. // 数据库名

  13. 'database' => 'tp5shop'

  14. ,

  15. // 用户名

  16. 'username' => 'tp5shop'

  17. ,

  18. // 密码

  19. 'password' => '$Abc3721'

  20. ,

  21. // 端口

  22. 'hostport' => '3306'

  23. ,

  24. // 连接dsn

  25. 'dsn' => ''

  26. ,

  27. // 数据库连接参数

  28. 'params' => [],

  29. // 数据库编码默认采用utf8

  30. 'charset' => 'utf8'

  31. ,

  32. // 数据库表前缀

  33. 'prefix' => 'tpshop_'

  34. ,

  35. // 数据库调试模式

  36. 'debug' => true,

  37. // 3、项目框架的业务代码实现读写分离,使用的是

  38. 分布式(主从服务器) 配置为1

  39. // 数据库部署方式:0 集中式(单一服务器),1 分布

  40. 式(主从服务器)

  41. 'deploy' => 1,

  42. // 4、数据库读写分离是业务代码实现的,配置为

  43. true

  44. // 数据库读写是否分离 主从式有效

  45. 'rw_separate' => true,

  46. // 读写分离后 主服务器数量

  47. 'master_num' => 1,

  48. // 指定从服务器序号

  49. 'slave_no' => ''

  50. ,

  51. // 是否严格检查字段是否存在

测试down主库,看从库是否可以访问。thinkphp5中,如果slave宕机,master提供读服务。

MyCAT实现读写分离

 

准备一台服务器,作为数据库的中间件服务器,配置基本环境,网卡、FQDN Mycat 数据库中间件

国内最活跃的、性能最好的开源数据库中间件!

官方网址:http://www.mycat.io/ https://github.com/MyCATApache/MyCAT-Server/

因为mycat是由java语言开发,必须使用java的运行环境才能进行启动和操作

3.2、jdk安装

java 静态编译的编程语言 代码编译成机器码 执行机器码输出结果。

编译jdk javac 编译java代码运行 jre 编译好的机器码(可以执行文件) java

问:公司服务器部署的java环境是jdk还是jre?

答:jre java解析运行环境 一般情况编译过的可执行的java程序 ,jre就够用了。jdk javac 编译的环境 如果服务器上传是源代码文件 就可以编译,之后再执行。实际业务环境中,如果存在需要编译的情况,就选择jdk。

①下载安装jdk

https://www.oracle.com/technetwork/java/javase/do

wnloads/jdk8-downloads-2133151.html

选择下载x64架构.tar.gz包

上传mycat和jdk到soft目录下

 
  1. shell > tar xvf jdk-8u192-linux-x64.tar.gz

  2. shell > mv jdk1.8.0_192 /usr/local/java

②配置环境变量

 
  1. #追加环境变量

  2. shell > echo

  3. "PATH=/usr/local/java/bin:$PATH" >>

  4. /etc/profile

  5. shell > source /etc/profile

  6. #检测java环境变量 如果看到版本信息即为成功

  7. shell > java -version

3.3、mycat安装和测试启动

①解压安装MyCAT

 
  1. shell > tar xvf Mycat-server-1.6.5-release-

  2. 20180122220033-linux.tar.gz -C /usr/local

实际解压到目录即可,无需安装

启动mycat

 

默认情况下启动mycat是可以启动的

 
  1. #通过控制台 进行前端启动 可以看到执行过程

  2. shell > /usr/local/mycat/bin/mycat console

注意如果启动不成功,可能是由于没有解析主机名称。需要在hosts文件中进行解析。

3.4、配置读写分离

读写分离的配置文件:

 

Mycat是由java开发,java开发的软件大部分配置文件是xml格式。注意它的基本格式。

xml格式注意点:

1、xml声明信息

2、具有一个根标签

3、双标签和单标签格式

4、注意闭合标签

5、注释格式为

①查看server.xml

默认server.xml可以不用修改

 
  1. shell > /usr/local/mycat/conf

  2. shell > vim server.xml

修改server.xml

配置mycat对外的使用用户信息

②修改schema.xml

schema标签里配置name的server.xml里的虚拟数据库名称,dataNode 填写后面使用的dataNode名称

dataNode标签和dataHost指定配置使用

dataHost标签里配置writeHost和readHost(密码,地址,用户名称)

 
  1. schema=>dataNode=>dataHost=>writeHost=>rea

  2. dHost

可以使用给大家精简过的配置文件

 
  1. <?xml version="1.0"?>

  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">

  3. <mycat:schema

  4. xmlns:mycat="http://io.mycat/">

  5. <!-- 1、TESTDB和server.xml配置文件中的映射

  6. 的数据库名称要一致 dataNone填写下面的dataNode名

  7. 称 -->

  8. <schema name="TESTDB"

  9. checkSQLschema="false" sqlMaxLimit="100"

  10. dataNode="dn3"></schema>

  11. <!-- 2、dataNode name和上面的一致

  12. dataHost填写下面的dataHost的name名称 database

  13. 填写后端真实数据库名称-->

  14. <dataNode name="dn3"

  15. dataHost="localhost1" database="tp5shop" />

  16. <!-- 3、可以配置负载均衡、读写分离算法 暂时

  17. 可以不用动-->

  18. <dataHost name="localhost1"

  19. maxCon="1000" minCon="10" balance="0"

  20. writeType="0" dbType="mysql"

  21. dbDriver="native" switchType="1"

  22. slaveThreshold="100">

  23. <!-- 对后端数据库服务器 发送的心跳检测 --

  24. >

  25. <heartbeat>select user()</heartbeat>

  26. <!-- can have multi write hosts -->

  27. <!-- 4、配置后端真实数据库的相关登录信息

  28. -->

  29. <writeHost host="hostM1"

  30. url="192.168.17.100:3306" user="tp5shop"

  31. password="$Abc3721">

  32. <!-- can have multi read hosts -

  33. ->

  34. <readHost host="hostS2"

  35. url="192.168.17.105:3306" user="tp5shop"

  36. password="$Abc3721" />

  37. </writeHost>

  38. <!-- <writeHost host="hostS1"

  39. url="localhost:3316" user="root"

  40. password="123456" />-->

  41. <!-- <writeHost host="hostM2"

  42. url="localhost:3316" user="root"

  43. password="123456"/> -->

  44. </dataHost>

  45. </mycat:schema>

注意修改第7行,真实数据库的名称

③启动mycat服务

 
  1. shell > /usr/local/mycat/bin/mycat start

  2. #确认mycat是否真的启动,查看它的端口 9066 8066

  3. shell > netstat -lntp|grep 8066

Tip:如果配置之后,启动mycat,不能够启动通过查看/usr/local/mycat/logs/wrapper.log

3.5、mycat客户端

连接mycat客户端

 
  1. shell > mysql -h127.0.0.1 -uroot -p123456 -

  2. P8066

执行查询命令测试结果

 
  1. mysql > show databases;

  2. mysql > use TESTDB;

  3. mysql > show tables;

3.6、mycat管理端

连接mycat管理端

 
  1. shell > mysql -h127.0.0.1 -uroot -p123456 -

  2. P9066

执行管理命令查看

 
  1. mysql > show @@help; //查看管理监控端的所有帮助

  2. 命令

  3. mysql > show @@heartbeat; //查看服务器状态

业务代码配置

使用数据库中间件服务器实现读写分离和后端真实数据库的管理。对于前端业务来说,数据操作需要连接的是数据库中间件服务器。操作连接的是数据库中间件服务器,而不直接连接多实例的真实服务器了。

①修改项目数据库配置文件

 
  1. shell > vim

  2. /usr/local/nginx/html/tp5shop/application/da

  3. tabase.php

配置文件示例

 
  1. return [

  2. // 数据库类型

  3. 'type' => 'mysql'

  4. ,

  5. // 服务器地址

  6. // 1、连接mycat数据库中间件服务器

  7. 'hostname' => '192.168.17.106'

  8. ,

  9. // 2、mycat对外映射的数据库名称

  10. // 数据库名

  11. 'database' => 'TESTDB'

  12. ,

  13. // 3、mycat对外映射的用户

  14. // 用户名

  15. 'username' => 'root'

  16. ,

  17. // 4、mycat对外映射的密码和端口

  18. // 密码

  19. 'password' => '123456'

  20. ,

  21. // 端口

  22. 'hostport' => '8066'

  23. ,

  24. // 连接dsn

  25. 'dsn' => ''

  26. ,

  27. // 数据库连接参数

  28. 'params' => [],

  29. // 数据库编码默认采用utf8

  30. 'charset' => 'utf8'

  31. ,

  32. // 数据库表前缀

  33. 'prefix' => 'tpshop_'

  34. ,

  35. // 数据库调试模式

  36. 'debug' => true,

  37. // 5、使用数据库中间件,对于前端业务服务器来

  38. 说,属于使用集中式单一服务器 配置为0

  39. // 数据库部署方式:0 集中式(单一服务器),1 分布

  40. 式(主从服务器)

  41. 'deploy' => 0,

  42. // 6、集中式单一服务器 不在业务代码进行读写分

  43. 离,交由数据库中间件去做 配置为false

  44. // 数据库读写是否分离 主从式有效

  45. 'rw_separate' => false,

  46. // 读写分离后 主服务器数量

  47. 'master_num' => 1,

  48. // 指定从服务器序号

  49. 'slave_no' => ''

  50. ,

  51. // 是否严格检查字段是否存在

②测试访问

mycat默认writeHost和readHost,如果writeHost不可用,则readHost也不可用。用两个writeHost,从的writeHost变成可写的了,要在slave服务器上设置readonly

3.8、balance属性和writeType属性

balance 属性

负载均衡类型,目前的取值有 3 种:

1、balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

2、balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当

双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。

3、balance="2", 所有读操作都随机的在writeHost、readhost 上分发。

4、balance="3", 所有读请求随机的分发到writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3没有。

writeType 属性

负载均衡类型,目前的取值有 3 种:

1、writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个

writeHost,重新启动后已切换后的为准.

2、writeType="1",所有写操作都随机的发送到配置的writeHost,1.5 以后废弃不推荐

switchType 属性

1. 表示不自动切换

2. 默认值,自动切换2 基于 MySQL 主从同步的状态决定是否切换

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

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

相关文章

018集——递归函数和for循环对比(从1加到100实例) ——C#学习笔记

本例分别用递归函数和for循环&#xff0c;求出1到100的和&#xff1a; using System;namespace Mytest {class Mytest{static void Main(string[] args){Calculate Myc new Calculate();int YourNumber 100;int Mysum Myc.Xto1(YourNumber);Console.WriteLine("从1加到…

Element-03.组件-Pagination分页

一.常见组件-分页-属性 参数&#xff1a;background 说明&#xff1a;是否为分页按钮添加背景色 类型&#xff1a;boolean 有background即添加&#xff0c;没有则不添加 参数&#xff1a;layout 说明&#xff1a;组件布局&#xff0c;子组件名用逗号分隔 类型&#x…

86.小米相机修改拍照(尺寸,画幅,比例)的方法

目录 1.打开相机&#xff0c;拍照模式&#xff0c;上面有个箭头或三个点&#xff0c;点击 2.点击画幅 3.点击你想要的画幅即可。 想要修改手机照片的&#xff08;尺寸&#xff0c;画幅&#xff0c;比例&#xff09;时&#xff0c;总会去找分辨率&#xff0c;其实并不是&…

用后端实现一个简单的登录模块2 前端页面

该模块能做到的功能&#xff1a; 1阶&#xff1a;输入账号和密码&#xff0c;输入正确即可返回登录成功的信息&#xff0c;反之则登录失败 2阶&#xff1a;有简单的前端页面&#xff0c;有登录成功和失败的弹窗&#xff0c;还有登录成功的主页面 3阶&#xff1a;前端页面的注…

探索Python的中文转换魔法:zhconv库的神秘力量

文章目录 探索Python的中文转换魔法&#xff1a;zhconv库的神秘力量第一部分&#xff1a;背景介绍第二部分&#xff1a;库的概述第三部分&#xff1a;安装指南第四部分&#xff1a;函数使用示例第五部分&#xff1a;实际应用场景第六部分&#xff1a;常见问题与解决方案第七部分…

【Vue3】路由Query传参

【Vue3】路由Query传参 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…

8月17日星期六今日早报简报微语报早读

8月17日星期六&#xff0c;农历七月十四&#xff0c;早报微语早读。 1、海关总署&#xff1a;接触过猴痘病例的人员入境时应主动申报&#xff1b; 2、284名运动员出征&#xff01;巴黎残奥会中国体育代表团成立&#xff1b; 3、四部门&#xff1a;继续执行对彩票一次中奖不超…

C语言 之 字符相关函数

文章目录 字符分类函数字符转换函数 本章内容主要讲的是c语言中的字符相关的一些函数的作用用法和使用 为了方便我们对字符的各种操作&#xff0c;C语⾔标准库中提供了⼀系列库函数&#xff0c;我们大概可以根据其功能分成两类函数 字符分类函数 C语言中有一系列函数是专门用…

【区块链+金融服务】基于 VoneBaaS 的区块链金融服务管理平台 | FISCO BCOS应用案例

在顺应数字经济发展、强化科技赋能金融的背景下&#xff0c;中央及地方政策层面鼓励“区块链 金融”应用示范项目&#xff0c; 在中小企业征信及风险管理、供应链金融等重点领域开展应用&#xff0c;探索建立区块链金融风险监控体系。同时&#xff0c;随着 科技金融服务逐步升…

学生阅读行为与图书预定平台的设计与实现(全网独一无二,24年最新定做)

目录&#xff1a; 前言&#xff1a; 具体功能如下&#xff1a; 1. 学生角色 2. 图书管理员 3. 图书采购人员 4. 系统管理员 技术栈介绍&#xff1a; 1. Springboot 2. MySQL 3. Vue 4. Java 系统详细界面&#xff1a; 为什么选择我&#xff1a; 前言&#xff1a; 博…

71、docker网络

一、docker网络&#xff1a; 1.1、默认模式&#xff1a; 桥接模式 部署好docker服务&#xff0c;启动之后&#xff0c;就会创建一个虚拟网桥&#xff0c;docker0&#xff0c;这是一个虚拟网络设备&#xff0c;类似于交换机。 [rootdocker1 ~]# ifconfig docker0: flags4163…

Linux:Linux环境基础开发工具使用

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. Linux 软件包管理器 yum 1.1 什么是软件包 1.2 查看软件包 1.3 如何安装软件 1.4 如何卸载软件 二 Linux编辑器-vim使用 ​编辑 2.1 vim的基本概念 2.2 vim正常模式命令集…

安装postgresql和PGVector

1. 概述 研发有需要&#xff0c;要使用PGVector做向量。简单记录安装postgresql和PGVector过程。 2. 参考 postgresql官方下载连接 postgresql官方linux yum安装 PostgreSQL的安装、配置与使用指南 PostgreSQL向量数据插件–pgvector安装 3. 安装 3.1 只安装postgresql&am…

进程地址空间(一)

目录 1. 语言层面上的地址2. 引入新概念 ---- 地址空间的概念3. 进一步理解地址空间4. 为什么要有地址空间 在正式介绍进程地址空间之前&#xff0c;我们需要做一些铺垫&#xff0c;在父子进程同时运行时&#xff0c;从代码层面上的变量的地址&#xff0c;引入进程地址空间的概…

2.1算法的时间复杂度与空间复杂度

本篇博客介绍算法的时间复杂度与空间复杂度 一、算法效率 算法好坏从时间和空间两个维度衡量 二、时间复杂度 1&#xff0e;概念 时间复杂度是算法中基本操作的执行次数&#xff0c;定量描述了算法的运行时间 2&#xff0e;注意 &#xff08;1&#xff09;时间复杂度是偏…

vue项目中引入字体文件样式

需求:关于一些样式需要自定义的,所以需要ui提供字体文件,然后引入项目中,就可实现自定义 首先看一下实现效果图: 第一步:新建一个字体样式文件用于放字体文件和css样式 font.css文件: /* 数字特殊字体 */ font-face {/*给字体命名*/font-family: DINCondBold;/*引入字体文件*…

课堂助手小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;专业信息管理&#xff0c;部门信息管理&#xff0c;课程信息管理&#xff0c;教学内容管理&#xff0c;学生作业管理&#xff0c;系统管理 微信端账号功能包…

防止内存泄漏的神兵利器 — 智能指针

1.内存泄漏 1.1什么是内存泄漏 当我们在写C/C程序的时候&#xff0c;难免会出现内存泄漏的错误&#xff0c;因为C/C不像Java语言那样&#xff0c;拥有自己的垃圾回收机制&#xff0c;C/C中对于资源的管理&#xff0c;完全交给程序员自己打理&#xff0c;也就是说使用C/C的程序…

Ubuntu下NFS和SSH服务

本篇文章记录Ubuntu下如何对NFS和SSH服务进行配置和开启。 目录 一、NFS服务 二、SSH服务 1、安装SSH服务 2. 启动和检查SSH服务 3. 配置SSH服务 4. 连接到SSH服务 5. 设置防火墙 6. 测试连接 三、结语 一、NFS服务 NFS&#xff08;Network File System&#xff0…