软件开发培训班笔记
本文最后更新于96 天前,其中的信息可能已经过时,如有错误请发送邮件到3095478042@qq.com

软件开发培训班笔记

## 大纲
### 第一周
#### 一、MySQL安装
#### 二、node与ghost安装
#### 三、nginx安装
### 四、配置csr证书
### 第二周
#### 一、安装nodehttp://t.csdnimg.cn/F0bcF
#### 二、配置vue下载镜像
### 第三周
#### 一、docker安装
#### 二、MySQL一主二从
#### 三、docker 安装redis
### 第四周
#### 一、安装jenkins
#### 二、课堂笔记
### 第五周
#### 一、Jenkins相关配置
#### 二、git bash

第一周

一、MySQL安装

1.进入MySQL

mysql -u root -p

2.安装MySQL,进行修改密码。(root为用户名,123456为密码)

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

3.刷新

flush privileges;

二、node与ghost安装

1.node安装

wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.gz
tar -zxvf node-v18.16.0-linux-x64.tar.gz
cd ./node-v18.16.0-linux-x64/
ln -s /root/node-v18.16.0-linux-x64/bin/npm /usr/local/bin/
ln -s /root/node-v18.16.0-linux-x64/bin/node /usr/local/bin/

2.ghost安装

安装Ghost命令行工具
Linux> sudo npm install ghost-cli\@latest -g

①.创建ghost安装目录并授权
mkdir -p /var/www/ghost
chown yanyljava:yanyljava /var/www/ghost
chmod 777 /var/www/ghost

②.安装ghost
su - yanyljava # 切换用户
cd /var/www/ghost # 切换到指定目录
ghost install # 安装
ghost setup #启动ghost
ghost config url https://47.99.35.213

三、nginx安装

1.安装权限
mkdir -p /etc/nginx/sites-available
mkdir -p /etc/nginx/sites-enabled/
mkdir -p /home/yanyljava/content

2.安装nginx nginx -t

3.重启运行 nginx -s reload
nginx -s stop # 停止运行nginx
nginx restart # 重启nginx应用

  1. 配置 /etc/nginx/nginx.conf

nginx.conf 文件配置如下:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        listen       [::]:80;
        server_name  123.57.164.198;
        rewrite ^(.*)$ https://$host$1 permanent;
        #root         /usr/share/nginx/html;
        root         /var/www/ghost/content;

        #Load configuration files for the default server block.
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }        
        #include /etc/nginx/default.d/*.conf;
        location /{
        proxy_pass http://127.0.0.1:2368;

        }
        client_max_body_size 50m;
    }

# Settings for a TLS enabled server.
#
    server {
#        listen       443 ssl http2;
         listen       443 ssl;
         listen       [::]:443 ssl;
#        listen       [::]:443 ssl http2;
#        server_name  _;
         server_name  47.99.35.213;
#        root         /usr/share/nginx/html;
         root /var/www/ghost/content;
#
         ssl_certificate "/etc/nginx/SSL/MyBlobStore/SSL.crt";
         ssl_certificate_key "/etc/nginx/SSL/MyBlobStore/SSL.KEY.unsecure";
         ssl_session_cache shared:SSL:1m;
         ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
           ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
        location / {
            root   html;
            index  index.html index.htm;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_pass http://127.0.0.1:2368;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

5.passwd命令 | 菜鸟教程:
https://www.runoob.com/linux/linux-comm-passwd.html

四、配置CSR证书

  1. CSR在线生成工具: https://myssl.com/csr_create.html
  2. CSR查看: https://myssl.com/csr_decode.html
  3. 证书查看: https://myssl.com/cert_decode.html
  4. 使用OpenSSL生成SSL.crt证书
    openssl rsa -in SSL.KEY -out ./SSL.KEY.unsecure
    openssl x509 -req -days 365 -in SSL.csr -signkey SSL.key -out SSL.crt

第二周

相关上课文档

有关于vue和node的安装如下:

nvm详细安装步骤以及使用(window10系统)_nvm 安装_小何同学要加油的博客-CSDN博客:
https://blog.csdn.net/Anony_me/article/details/124153201

Window版本的nvm下载安装以及配置 - node - 乐享WEB技术栈:
http://yehbe0qp7.qdxiaochuan.com/?id=558


nvm install [version]            // 安装node, version是特定版本也可以是最新稳定版本latest
nvm list available               // 显示已安装的列表。可选参数available,显示可安装的所有版本。list可简化为ls
nvm ls available                 // 显示已安装的列表。可选参数available,显示可安装的所有版本。list可简化为ls

npm list -g --depth 0          //查看自己本地全局环境下都已经下载哪些模块

npm install -g cnpm --registry=https://registry.npm.taobao.org     //将npm镜像改为淘宝的镜像cnpm,可以提高下载速度

npm config list
npm config ls       //list可简化为ls
npm config ls -l    //Run `npm config ls -l` to show all defaults.


vue系列(一)使用UI创建新项目超详细版:
https://baijiahao.baidu.com/s?id=1736486285983532889&wfr=spider&for=pc



//安装VUE3.X及以上的版本
npm install -g @vue/cli
//如果安装2.X错误可进行卸载
npm uninstall -g vue-cli
//安装WebPack打包工具
npm install -g webpack
//创建VUE项目并使用WebPack进行打包发布
vue init webpack vue-demo

node -v
npm -v
vue -V
where node

npm install -g vue         // 安装全局vue
npm install -g vue/cli     // 安装的Vue3.X及以上的版本 不是最新版本
npm install -g @vue/cli    // 安装vue脚手架 ,加一个@是最新的版本
vue ui

一、安装node

  1. nvm 的安装版本
    nvm install [version]
    nvm list(ls可以替换list)(显示已下载版本信息)
  2. 下载全局模块 npm list -g --depth 0

将npm镜像改为淘宝的镜像cnpm,可以提高下载速度npm install -g cnpm –registry=https://registry.npm.taobao.org

npm install -g \@vue/cli#安装VUE3.X及以上的版本

  1. 查看版本信息
node -v
npm -v
vue -V
where node

二、配置vue下载镜像

  1. 位置:C:\Users\xxx\AppData\Roaming\nvm
    打开文件名称:settings.txt
    修改内容:添加:
    node_mirror: https://npm.taobao.org/mirrors/node/
    npm_mirror: https://npm.taobao.org/mirrors/npm/(提高下载速度)
  2. 安装vue
    安装全局vue npm install -g vue
    npm install -g @vue/cli
    打开vue vue ui

第三周

上课相关文档

第三周上课文档

部署并使用Docker-阿里云帮助中心:
https://help.aliyun.com/document_detail/2341651.html?spm=5176.28008736.J_7597446870.d10000006670_1.a92e3e4dO4sYR7&pipCode=savingplan&goodsId=10000006670&scm=20140722.M_10000006670.P_121.MO_2230-ID_10000006670-MID_10000006670-CID_0-ST_8726-V_1

资源编排管理控制台:
https://ros.console.aliyun.com/cn-hangzhou/stacks/00bca8bc-6bb6-43ff-9df5-30d09904e0c6
云服务器管理控制台:
https://ecs.console.aliyun.com/?spm=5176.2020520146.0.0.20ee20681Dqooz#/cloud-assistant/region/cn-hangzhou/commandResult?invokeId=t-hz040y5uigfnj7k


Linux常用路径地址参考:
/etc
/var/lib/docker
/usr/libexec/docker
/proc
/root/docker/volumes/etc/mysql

Linux> docker info
Linux> docker --version
Linux> docker images
Linux> docker images -aq
Linux> docker ps -a
Linux> docker ps -aq
Linux> docker search nginx
Linux> docker pull nginx:latest
Linux> docker search tomcat
Linux> docker pull tomcat:9
Linux> docker search mysql:latest
Linux> docker pull mysql
Linux> docker run --name mysql --restart always -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest(废弃,已过时~)
Linux> docker run --name mysql --restart always -p 3306:3306 -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest(废弃,已过时~)
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest(废弃,已过时~)
Linux> docker run --name mysql -p 3307:3306 -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest(废弃,已过时~)
Linux> docker ps -a
Linux> docker stop mysql
Linux> docker rm mysql
Linux> docker ps -a
Linux> docker exec -it mysql /bin/bash
Linux> mkdir -p /root/docker/volumes/etc/mysql/conf.d
Linux> mkdir -p /root/docker/volumes/etc/mysql/my.cnf.d
Linux> docker logs mysql
Linux> docker cp mysql:/etc/mysql/my.cnf /root/docker/volumes/etc/mysql/my.cnf(路径错误✖,已废弃,已过时~)
Linux> docker cp mysql:/etc/my.cnf /root/docker/volumes/etc/mysql/my.cnf
Linux> docker cp mysql:/etc/my.cnf /root/docker/volumes/etc/my.cnf(废弃,已过时~)
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/mysql/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/mysql/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest

docker 查看镜像所有tag_百度搜索:
https://www.baidu.com/s?wd=docker+查看镜像所有tag&ie=UTF-8&tn=62095104_17_oem_dg
获取docker镜像的tag列表 - 走看看:
http://t.zoukankan.com/xlovepython-p-14479334.html
获取docker镜像的tag列表 - s。 - 博客园:
https://www.cnblogs.com/xlovepython/p/14479334.html
获取docker镜像的tag列表
Linux> wget -q https://registry.hub.docker.com/v1/repositories/nginx/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
Linux> wget -q https://registry.hub.docker.com/v2/repositories/library/nginx/tags/ -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
Linux> curl -s https://registry.hub.docker.com/v1/repositories/nginx/tags | json_reformat | grep name | awk '{print $2}' | sed -e 's/"//g'(亲测无效~)
Linux> wget -q https://cobx09bv.mirror.aliyuncs.com/v1/repositories/nginx/tags -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
Linux> wget -q https://cobx09bv.mirror.aliyuncs.com/v2/repositories/library/nginx/tags/ -O -  | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
ubuntu
centos

官方认证的仓库url
https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/
$Repo
eg: ubuntu

个人仓库url
https://registry.hub.docker.com/v2/repositories/$User/$Repo/tags/
$User/$Repo
eg: jenkins/jenkins


MySQL主从复制(一主两从)架构搭建:
master主机:root password: riCXT8zM
Linux> docker run --name master --restart always -p 3308:3306 -v /root/docker/volumes/etc/master:/etc/mysql -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riCXT8zM -d mysql:latest
Linux> docker cp master:/etc/my.cnf /root/docker/volumes/etc/master/my.cnf
Linux> docker ps -a
Linux> docker stop master
Linux> docker rm master
Linux> docker ps -a
Linux> docker run --name master -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql(废弃,已过时~)
Linux> docker run --name master -p 3308:3306 -v /root/docker/volumes/etc/master/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/master/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/master/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riCXT8zM -d mysql:latest

slave01从机:root password: riDYQ8zM
Linux> docker run --name slave01 --restart always -p 3309:3306 -v /root/docker/volumes/etc/slave01:/etc/mysql -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riDYQ8zM -d mysql:latest
Linux> docker cp slave01:/etc/my.cnf /root/docker/volumes/etc/slave01/my.cnf
Linux> docker ps -a
Linux> docker stop slave01
Linux> docker rm slave01
Linux> docker ps -a
Linux> docker run --name slave01 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql(废弃,已过时~)
Linux> docker run --name slave01 -p 3309:3306 -v /root/docker/volumes/etc/slave01/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave01/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave01/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riDYQ8zM -d mysql:latest

slave02从机:root password: riEZG8zM
Linux> docker run --name slave02 --restart always -p 3310:3306 -v /root/docker/volumes/etc/slave02:/etc/mysql -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riEZG8zM -d mysql:latest
Linux> docker cp slave02:/etc/my.cnf /root/docker/volumes/etc/slave02/my.cnf
Linux> docker ps -a
Linux> docker stop slave02
Linux> docker rm slave02
Linux> docker ps -a
Linux> docker run --name slave02 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql(废弃,已过时~)
Linux> docker run --name slave02 -p 3310:3306 -v /root/docker/volumes/etc/slave02/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave02/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave02/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riEZG8zM -d mysql:latest


Linux> docker exec -it slave01 /bin/bash
Linux> cat /etc/my.cnf
Linux> cat /etc/mysql/my.cnf(废弃,已过时~)
Linux> sed -i '$a server_id=2' /etc/my.cnf
Linux> sed -i '$a server_id=2' /etc/mysql/my.cnf(废弃,已过时~)
Linux> docker restart slave01
mysql> show variables like 'server_id';

Linux> docker exec -it slave02 /bin/bash
Linux> cat /etc/my.cnf
Linux> cat /etc/mysql/my.cnf(废弃,已过时~)
Linux> sed -i '$a server_id=3' /etc/my.cnf
Linux> sed -i '$a server_id=3' /etc/mysql/my.cnf(废弃,已过时~)
Linux> docker restart slave02
mysql> show variables like 'server_id';

mysql> show master status;
change master to
master_port=3308,
master_user='root',
master_password='riCXT8zM',
master_host='172.20.16.116',
master_log_file='binlog.000003',
master_log_pos=157;

#再次登录从机MySQL数据库
#Linux> docker exec -it slave01 bash
Linux> docker exec -it slave01 /bin/bash
mysql> mysql -uroot -priDYQ8zM
Linux> docker exec -it slave02 /bin/bash
mysql> mysql -uroot -priEZG8zM

#确认是否OK  server_id
show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
1 row in set (0.01 sec)

#此时在【从机端】执行上述已经修改后的change master to语句
# 开启主从服务
mysql> start slave;

# 查看是否配置成功?
mysql> show slave status \G;

如下参数都为YES======>恭喜配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

此时在主机MySQL端分别执行增、删和改
验证主从功能的实现



Linux> docker run --name tomcat09 --restart always -p 8080:8080 -v /root/docker/volumes/tomcat/webapps:/usr/local/tomcat/webapps -d tomcat:9
HTTP Server Test Page:
http://47.99.35.213:8080/hellow/index.html

Linux> gcc mycommand.c -o mycommand
Linux> ./mycommand
Linux> ./mycommand 123 456 789
Linux> export PATH="$PATH:/root/mycommand"
Linux> echo $PATH
Linux> printenv
Linux> printenv PATH
Linux> echo $PATH


在Linux操作系统当中,请问以下哪几项命令 可以正确地打印出当前PATH的环境变量?
A、printenv PATH
B、printenv $PATH
C、echo $PATH
D、echo PATH
正确答案是(?)_

在Windows操作系统当中,请问以下哪几项命令 可以正确地打印出当前PATH的环境变量?
A、echo PATH
B、echo $PATH
C、%PATH%
D、PATH
正确答案是(?)_


课外延伸 参考链接:
程序员如何把控自己的职业:
https://mp.weixin.qq.com/s/GG2E9tsESvdRr7WLCuN7VQ

金三银四你准备好了吗,一份满级面试题送上:
https://mp.weixin.qq.com/s/IXYwOrbqiYsWXOqSOrz_jQ

为什么nginx比apache更强:
https://mp.weixin.qq.com/s/OqjWno0JX0ryAYdZwVZU8A

排查服务器是否被入侵的11个关键步骤:
https://mp.weixin.qq.com/s/BM_wTI27XMcEefIisokTsg

Linux 中 root 与 sudo 的用法与区别,居然这么多人搞不清楚。。。:
https://mp.weixin.qq.com/s/v4hSLIoh8oPlIWp2jo2zcg

linux三剑客(grep,sed,awk):
https://mp.weixin.qq.com/s/8FbN7KxO8kRqT5vkJqEKug

k8s 和 Docker 关系简单说明:
https://mp.weixin.qq.com/s/Im-tti3iRE90F5t_uZnmUw

sudo 授权需谨慎,否则亲人两行泪!6 个超实用使用技巧:
https://mp.weixin.qq.com/s/EPNOwkAVg6h3Y_aqtGz1kA

10分钟快速搭建个人博客、文档网站!:
https://mp.weixin.qq.com/s/VwYcxkMeg4-EASfN1wvKZg

5 款顶级 Docker GUI 工具!免费又好用:
https://mp.weixin.qq.com/s/dsAsswKRqEiSCUvJF33nmw

聊聊Linux中的环境变量:
https://mp.weixin.qq.com/s/cjYv_1Hk33J9_aixBr0_hw

在Linux下写一个自己的命令:
https://mp.weixin.qq.com/s/TEuwgbFXNw-KBU_gwos5Yw


# start~
datadir=/var/lib/mysql
# 是否开启mysql日志  0:关闭(默认值) 1:开启
general-log=1
# mysql 日志的存放位置
general_log_file="/var/lib/mysql/logs/master.log"

slow-query-log=1

slow_query_log_file="/var/lib/mysql/logs/master-slow.log"

long_query_time=10

# Error Logging.
log-error="/var/lib/mysql/logs/master.err"
# end~


Linux> docker ps -a
Linux> docker stop slave01
Linux> docker stop slave02
Linux> docker stop master
Linux> docker start master
Linux> docker logs master
Linux> docker start slave01
Linux> docker start slave02
Linux> ocker ps -a
Linxu> cd /root/docker/volumes/var/lib/master/logs
Linxu> ll
>>
total 12
-rw-r----- 1 systemd-coredump input 1592 Nov  1 17:06 master.err
-rw-r----- 1 systemd-coredump input  864 Nov  1 17:06 master.log
-rw-r----- 1 systemd-coredump input  180 Nov  1 17:06 master-slow.log

恭喜MySQL主从复制(一主两从)读写分离架构集群日志 开启成功!

Linux常用路径地址参考:
/root/docker/volumes/var/lib/master/logs
/root/docker/volumes/var/lib/mysql
/usr/libexec/docker
/var/lib/docker/volumes
/root/docker/volumes/tomcat/webapps
/etc

一、docker安装

  1. 配置网站: https://help.aliyun.com/document_detail/2341651.html
  1. dockeer 安装MySQL,3307接口方法以及注意事项详细版本(http://t.csdnimg.cn/hsDy9)(自己感觉网上的合适一点点)
  2. MySQL软件尝试连接服务器中的docker的MySQL使用设置的3307窗口
连接名: 阿里云ESC服务器-Docker容器
主机: 123.57.164.198
端口: 3307
用户名: ROOT
密码: Docker设置密码xxx

二、MySQL一主二从

  1. 建立主数据库master密码123456,端口号3308(server_id=1)
docker run --name master --restart always -p 3308:3306 -v /root/docker/volumes/etc/master:/etc/mysql -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker cp master:/etc/my.cnf /root/docker/volumes/etc/master/my.cnf
docker ps -a
docker stop master
docker rm master
docker ps -a
docker run --name master -p 3308:3306 -v /root/docker/volumes/etc/master/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/master/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/master/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
  1. 建立副数据库slave01密码123456,端口号3309(server_id=2)
docker run --name slave01 --restart always -p 3309:3306 -v /root/docker/volumes/etc/slave01:/etc/mysql -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker cp slave01:/etc/my.cnf /root/docker/volumes/etc/slave01/my.cnf
docker ps -a
docker stop slave01
docker rm slave01
docker ps -a
docker run --name slave01 -p 3309:3306 -v /root/docker/volumes/etc/slave01/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave01/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave01/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
  1. 建立副数据库slave02密码123456,端口号3310(server_id=3)
docker run --name slave02 --restart always -p 3310:3306 -v /root/docker/volumes/etc/slave02:/etc/mysql -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker cp slave02:/etc/my.cnf /root/docker/volumes/etc/slave02/my.cnf
docker ps -a
docker stop slave02
docker rm slave02
docker ps -a
docker run --name slave02 -p 3310:3306 -v /root/docker/volumes/etc/slave02/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave02/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave02/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
  1. 展示server_id信息
    docker restart slave02
    docker exec -it slave01 /bin/bash
    mysql -u root -p
    mysql> show variables like 'server_id'; (需要进入各数据库当中运行)
    show slave status \G;
    如下参数都为YES======>恭喜配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
  1. 只要命令只要在两个从的运行即可master可以不用运行

主的端口 #主的名称 #主的密码 #IP #和两个日志保持一致(show master status;)

change master to
master_port=3308,     
master_user='root',     
master_password='123456',
master_host='123.57.164.198',
master_log_file='binlog.000004',
master_log_pos=157;
  1. 其他代码块指令
docker exec -it slave01 /bin/bash
 mysql -u root -p123456
start slave;
show slave status \G;
docker stop slave02
docker rm slave02
show variables like 'server_id';
reset slave;

三、docker 安装redis

  1. 安装命令 docker pull redis
  2. 查看是否成功 docker images
  3. 启动redis: reids-server .exe|.sh

第四周

一、安装jenkins

  1. docker search jenkins 查看版本信息
  2. docker pull jenkins/jenkins 安装适合版本,本人以这个版本为例,pull一个Jenkins镜像
  3. 查看是否安装成功,下载完通过 docker images 可查看已下载的镜像
  4. 需要修改下目录权限,因为当映射本地数时,/data/jenkins_home/目录的拥有者为root用户,而容器jenkins用户uid 为 1000。我们创建一个jenkins目录 mkdir /home/jenkins_homechown -R 1000:1000 /home/jenkins_home/
  5. 构建Jenkins容器(以下命令直接一次性全复制粘贴使用)
docker run \
-d \
--name jenkins \
-p 9999:8080 \
-p 8888:8888 \
-p 50000:50000 \
-v /usr/local/src/jdk/jdk1.8:/usr/local/src/jdk/jdk1.8 \
-v /opt/apache-maven-3.5.0:/opt/apache-maven-3.5.0 \
-v /home/jenkins_home:/var/jenkins_home \
jenkins/jenkins

ps:(照片上的命令最后一点错误,以代码块上的为主)

  1. docker exec -it jenkins bash得到相应密码记得保存相关密码cat /var/jenkins_home/secrets/initialAdminPassword

63cf912dfe604ab084b2e3f04a28e7b4

  1. http://123.57.164.198:9999/ 替换自己的IP地址进行运行Jenkins进Web界面(自己的账号密码:UserXyz123456xy.z
  2. 剩下的自己网上找,自己遇到一些问题,没有解决方案

二、课堂笔记

  1. 静态分配的典型运用的就是方法重载。在main方法中,创建了一个Human类型的对象man和一个Human类型的对象woman。然后,通过sr对象调用了sayHello方法并传入了这两个对象作为参数。由于方法的重载是根据参数的静态类型进行选择的,因此无论man实际上是Man类的实例还是Woman类的实例,都会调用sayHello(Human guy)方法。
public class StaticDispatch {
    static abstract class Human {}  
    static class Man extends Human {} 
    static class Woman extends Human {}
    public void sayHello(Human guy) {
        System.out.println("Hello, guy!");
    }
    public void sayHello(Man guy) {
        System.out.println("Hello, gentleman!");
    } 
    public void sayHello(Woman guy) {
        System.out.println("Hello, lady!");
    }
    public static void main(String[] args) {
        Human man = new Man();
        Human woman = new Woman();   
        StaticDispatch sr = new StaticDispatch();
        sr.sayHello(man);   // Output: Hello, guy!
        sr.sayHello(woman); // Output: Hello, guy!
    }
}
  1. Human类中定义了一个抽象方法sayHello(),并在ManWoman子类中进行了重写。在main方法中,创建了一个Man对象赋给man变量,创建了一个Woman对象赋给woman变量。然后,通过manwoman对象调用了sayHello()方法。由于方法的动态分派是根据对象的实际类型进行选择的,所以无论变量类型是什么,实际上调用的都是对象所属类的重写方法。
public class DynamicDispatch {
    static abstract class Human {
        protected abstract void sayHello();
    }
    static class Man extends Human {
        @Override
        protected void sayHello() {
            System.out.println("Man says hello!");
        }
    }
    static class Woman extends Human {
        @Override
        protected void sayHello() {
            System.out.println("Woman says hello!");
        }
    }
    public static void main(String[] args) {
        Human man = new Man();
        Human woman = new Woman();
        man.sayHello();   // Output: Man says hello!
        woman.sayHello(); // Output: Woman says hello!
        man = new Woman();
        man.sayHello();   // Output: Woman says hello!
    }
}
  1. 方法签名=方法名+参数列表

指令集

调用不同类型的方法,字节码指令集里设置了不同的指令,在jvm里面提供了5条方法调用字节码指令:

  • invokestatic:调用静态方法,解析阶段确定唯一方法版本
  • invokespecial:实例构造器init方法、私有及父类方法,解析阶段确定唯一方法版本
  • invokevirtual:调用所有虚方法
  • invokeinterface:调用接口方法,在运行时再确定一个实现该接口的对象
  • invokedynamic:先在运行时动态解析出调用点限定符所引用的方法,然后再执行该方法,在此之前的4条调用指令,分派逻辑是固化在Java虚拟机内部的,而invokedynamic指令的分派逻辑是由用户所设定的引导方法决定的。

invokedynamic指令是Java7中增加的,是为实现动态类型的语言做的一种改进,但是在java7中并没有直接提供生成该指令的方法,需要借助ASM底层字节码工具来产生指令,直到java8lambda表达式的出现,该指令才有了直接的生成方式。

  1. 普通类和抽象类的区别:
    ○ 抽象类不能被实例化,而普通类可以被实例化。
    ○ 抽象类中可以包含抽象方法,普通类不可以包含抽象方法。
    ○ 如果一个类继承了抽象类,则必须实现抽象类中的所有抽象方法,否则需要把该子类也声明为抽象类,而普通类则不需要这样做。
    ○ 抽象类可以拥有成员变量,可以含有构造方法和普通方法,普通类也具有这些特点。但抽象类的成员变量和方法不能声明为 private,static 和 final。
    ○ 抽象类可以有静态和非静态的成员变量和方法,普通类也具有这些特点。
  2. 根据补码的知识,Java中的整数类型(包括byte)使用补码表示。在补码表示中,最高位(最左侧位)是符号位,0表示正数,1表示负数。
    对于byte类型,它占用8个位(8 bits)。范围是从-128到127。因此,当你将max赋值为127时,其二进制表示为01111111。
    然后,执行max+=1操作,相当于对max进行加1运算。在补码中,加1操作实际上是对二进制表示进行递增。现在让我们看看如何进行递增:
   01111111    (127)
 + 00000001    (+1)
 ___________
   10000000    (-128)

结果是10000000,这是一个负数。由于byte类型的取值范围是-128127,所以它循环回到了负数的最小值-128。因此,经过max+=1操作后,max的值将变为-128
这是因为在计算机中,溢出后的结果仍然保持在有效的范围内。所以,根据 补码 的规则,-128byte类型的正确表示。

第五周

一、Jenkins相关配置

  1. gitee上的私钥密码b577802d1fd065990d6ff4bc0beb171f兴趣班使用

二、git bash

  1. 设置用户名和邮箱
git config --global user.name yanyljava  
git config --global user.email yanyljava@qq.com  
  1. 查看
git config user.name  
git config user.email  
  1. 本地生成公钥私钥文件

git bash上输入如下:

ssh-keygen -t rsa -C "yanyljava@qq.com"

成功生成文件:id_rsa文件是私钥id_rsa.pub公钥
存放路径为:C:\Users\Administrator/.ssh 目录下。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1c1NvkODu4rxflt5WH5DPtNrtQOObuufHpWVV1ther6V28t6CUzMcqRAkKyDY4+K4ZpxuuKoBiCDkng9HAnZyiEfD4QulLnVOEuVEmwRM5bycLlRo1UhmIAjuTGNvRZ1io0D95CbD58yWOKTclk9qwQDBtFV7lCiRp/DPRb0f88WC42reRfveD9QdjN7O11LswVqIcgRVUG85tzUxmemym5JoYLg5EZDfgMGBxRX2HKP1yY3CFwoKsTpbh/+38jJclZA/M0Qwy6bhCMfB3KQj+L3vnFr3A5dHGp8UsKdB6EcDejWmpbmxkmSkPt/qj0NrvyR4nvfWLSteiVpfyM8OjcfnAXp28bMn8DUhL3Y8UzGVvPbnfRg3vyDk9CAoQ4cjizG57wt1tLKRTItfPa6ueYVC11JrHnqvsQvtXeNpbFTVIisqKk58CnYvDf7kyBAIMpLXtu70BKY1AUtsrFniz/6wKJdofD5udMj4Fk1x+vtboaHm4zIJVEhjAOpGnfk= yanyljava@qq.com

End!

文末附加内容

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇