学习

01-08_git_尚硅谷

概述 #

课程介绍 #

  1. Git - git介绍–分布式版本控制+集中式版本控制 - git安装–基于官网,2.31.1 windows - 基于开发案例 详细讲解常用命令 - git分支—特性、创建、转换、合并、代码合并冲突解决 - idea集成git
  2. Github
    • 如何创建远程库
    • 推送 push
    • 拉取 pull
    • 克隆 clone
    • ssh免密登录
    • idea github集成
  3. Gitee码云
    • 码云创建远程库
    • Idea集成Gitee
  4. Gitlab
    • gitlab服务器的搭建和部署
    • idea集成gitlab
  5. 课程目标:五个小时,熟练掌握git、github、gitee

官网介绍 #

  1. git是免费的开源的分布式版本控制系统
  2. 廉价的本地库
  3. 分支功能 ly-20241212142118069
  4. Everything is local

版本控制介绍 #

  1. 记录文件内容变化,以便将来查阅特定版本修订记录的系统
  2. 如果没有git ly-20241212142118196
  3. 为什么需要版本控制(从个人开发过渡到团队合作) ly-20241212142118292

分布式版本控制VS集中式版本控制 #

  1. SVN,单一的集中管理的服务器,保存所有文件的修订版本。其他人都先连到这个中央服务器上获取最新处理是否冲突 ly-20241212142118383
  • 缺点,单点故障,如果某段时间内故障了,那么就没法提交
  1. Git,每台电脑都是代码库 ly-20241212142118467
    • 如果远程库挂了,本地还是可以做版本控制的,只不过不能做代码推送而已
    • 每个客户端保存的都是完整的项目(包括历史记录)

发展历史 #

  1. linux系统版本控制历史
    • 1991-2002 手动合并
    • 2002 BitKeeper授权Linux社区免费使用(版本控制系统)
      • 社区将其破解
    • 2005 用C语言开发了一个分布式版本控制系统:Git 两周开发时间
    • 2008年 GitHub上线

工作机制和代码托管中心 #

ly-20241212142118560

...

01-21 maven多模块管理_动力节点

场景介绍 #

  • 业务依赖 ly-20241212142142250
  • 多模块管理 版本管理 ly-20241212142142435

第1种方式 #

创建父工程 #

  • 先创建一个空项目 ly-20241212142142506

  • 在这个空项目下,创建一个module当作maven父工程 ly-20241212142142569

  • 结构 ly-20241212142142631

  • pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.bjpowernode.maven</groupId>
        <artifactId>001-maven-parent</artifactId>
        <version>1.0.0</version>
        <!--
         packaging 标签指定打包方式,默认为jar
        -->
        <!--
            maven父工程必须遵守以下两点要求
            1、packaging标签的文本内容必须设置为pom
            2、把src删除
        -->
    
    
    </project>
    

介绍pom文件 #

pom 项目对象模型,project object model,该文件可以子工程被继承 maven多模块管理,其实就是让它的子模块的pom文件来继承父工程的pom

创建maven java子工程 #

  • 新建一个module

    注意路径,002在IDEA-maven的目录下 ly-20241212142142693

  • 查看pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!--指向父工程的gav坐标-->
        <parent>
            <artifactId>001-maven-parent</artifactId>
            <groupId>com.bjpowernode.maven</groupId>
            <version>1.0.0</version>
            <!--相对路径-->
            <relativePath>../001-maven-parent/pom.xml</relativePath>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>002-maven-java</artifactId>
    
    
    </project>
    

创建maven web子工程 #

  • 创建新模块 ly-20241212142142754

    ...

31-43 maven基础_动力节点

idea中设置maven #

  • 和idea集成maven ly-20241212142146614

创建普通的j2se项目 #

  • 使用idea创建空白项目 ly-20241212142146810

  • 新建一个module ly-20241212142146873

  • 使用模板创建普通java项目 ly-20241212142146930

  • 输入gav ly-20241212142146987

  • 设置maven信息 ly-20241212142147048

  • 标准的maven工程 ly-20241212142147103

    • 与创建网站有关,删掉即可

      <?xml version="1.0" encoding="UTF-8"?>
      
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
      
        <groupId>com.bjpowernode</groupId>
        <artifactId>ch01-maven-j2se</artifactId>
        <version>1.0</version>
      
        <!--设置网站,注释掉即可-->
      <!--  <name>ch01-maven-j2se</name>
        <!– FIXME change it to the project's website –>
        <url>http://www.example.com</url>-->
      
        <properties> <!--maven常用设置-->
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
      
        <dependencies>
          <dependency><!--单元测试-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
          </dependency>
        </dependencies>
      
        <build>
          <!--插件版本的配置,无特殊指定则删除-->
          <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
              <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
              <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
              </plugin>
              <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
              <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
              </plugin>
              <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
              </plugin>
              <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
              </plugin>
              <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
              </plugin>
              <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
              <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
              </plugin>
              <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
              </plugin>
            </plugins>
          </pluginManagement>
        </build>
      </project>
      

单元测试 #

  • 关于idea颜色 ly-20241212142147158

    ...

17-30 maven基础_动力节点

本地仓库的设置 #

  • 远程仓库–>本地仓库

  • maven仓库

    • 存放maven工具自己的jar包
    • 第三方jar,比如mysql驱动
    • 自己写的程序,可以打包为jar,存放到仓库
  • 分类

    • 本地仓库(本机):位于自己计算机中,磁盘中某个目录

      • 默认位置 登录操作系统的账号目录/.m2/repository C:\Users\ly.m2\repository

      • 可修改 比如放在d盘中

        英[rɪˈpɒzətri] D:\software\apache-maven-3.8.6\repository 备份并编辑 ly-20241212142145669 改成左斜杠的方式

        <settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
          <!-- localRepository
           | The path to the local repository maven will use to store artifacts.
           |
           | Default: ${user.home}/.m2/repository
          <localRepository>/path/to/local/repo</localRepository>
          -->
           <localRepository>D:/software/apache-maven-3.8.6/repository</localRepository>
        
      • 把之前user下的repository的文件都拷贝到 D:/software/apache-maven-3.8.6/repository 下 然后再对Hello项目进行编译 mvn compile 发现不会下载任何文件,且user下的repository也不会再进行下载

      • 下面的资源是从maven中下载,或者用maven打包的 ly-20241212142145849

    • pom.xml来说明某个项目需要怎么处理代码、项目结构

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.bjpowernode</groupId>
        <artifactId>ch01-maven</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <properties>
        		<java.version>1.8</java.version>
        		<maven.compiler.source>1.8</maven.compiler.source>
        		<maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <dependencies>
        		<dependency>
        				<groupId>mysql</groupId>
        				<artifactId>mysql-connector-java</artifactId>
        				<version>5.1.9</version>
        		</dependency>
        </dependencies>
    
    </project> 
    
    • mvn命令需要在pom.xml所在的目录下执行 ly-20241212142145908

仓库的工作方式 #

ly-20241212142145966

...

01-16 maven基础_动力节点

课程介绍 #

  • maven 自动化构建–>开发–编译–运行-测试–打包–部署 (m ei ’ ven)

maven的作用 #

  • 软件是一个工程
  • 软件中重复的操作(开发阶段)
    • 需求分析
    • 设计阶段
    • 开发阶段(编码),编译,测试
    • 测试阶段(专业测试),测试报告
    • 项目打包,发布,给客户安装项目
  • maven
    • 项目自动构建,清理、编译、测试、打包、安装、部署
    • 管理依赖:项目中需要使用的其他资源

Maven中的概念 #

  • 没有使用maven,管理jar,手动处理jar,以及jar之间的依赖
  • maven是apache 【əˈpætʃi】基金会的开源项目,使用java语法开发
  • maven是项目的自动化构建工具,管理项目依赖
  • maven中的概念
    • POM
    • 约定的目录
    • 坐标
    • 依赖管理
    • 仓库管理
    • 生命周期
    • 插件和目标
    • 继承 (高级内容)
    • 聚合 (高级内容)

Maven资源的获取与安装,测试 #

  • https://maven.apache.org/index.html

    • 各种内容 ly-20241212142144318

    • 要求 ly-20241212142144503

    • 视频用的3.6.3 ,这里下载3.8.6 (最新的,不要和电脑原配置冲突,方便学习,后续改回3.8.4)

      • 检查java home ly-20241212142144566

        • 如果没有需要进行配置 ly-20241212142144629
        • ly-20241212142144689
      • 将maven的bin目录配置到path环境变量下(这里使用的是下一节的方法,视频中没有用MAVEN_HOME,而是直接将maven的bin目录路径加到path中) ly-20241212142144751

        ly-20241212142144812

  • maven解压后的目录结构 ly-20241212142144869

另一种安装方式 #

  • 确定JAVA_HOME是否有效
  • 创建M2_HOME(MAVEN_HOME),值为maven的安装目录
  • 在path环境中,加入%M2_HOME%\bin
  • 测试maven安装 mvn -v

约定的目录结构 #

  • 大多数人遵守的目录结构

    ...

52-X

crond快速入门 #

  • 使用命令 crontab -e 创建一个定时任务

    */1 * * * * ls -l /etc/ > /tmp/to.txt
    
  • 特殊符号 ,代表不连续 -破折号 表示连续 ly-20241212142139460

  • 其他 ly-20241212142139656

  • 定时调用脚本

    • 编辑脚本 my.sh

      date >> /home/mycal
      date >> /home/mycal
      
    • 给脚本赋予x权限

      chmod u+x my.sh
      
    • crontab -e

      */1 * * * * my.sh
      
    • 数据库备份 ly-20241212142139724

    • crontab -r 删除

    • crontab -l 列出

    • crontab -e 编辑任务

  • atd 是否在运行 yum install -y atd systemctl start atd

  • job队列 ly-20241212142139792

    ...

linux_韩老师_40-51

组介绍 #

  • 每个用户必定属于某个组
  • 每个文件有几个概念:所有者、所在组、其他组 tom创建了hello.txt,则所有者为tom,默认所在组为tom组 除了所在组,就是其他组
  • ls -ahl (h更友好,a隐藏,l列表)

所有者 #

  • 使用chown root helo.java 修改,效果如下 ly-20241212142138913

所在组修改 #

  • 组的创建 groupadd monster
  • 创建一个用户并让他属于该组 useradd -g monster fox
  • 注意逻辑,此时使用fox创建文件 passwd fox 给fox创建密码
  • 如图,创建一个文件 ly-20241212142139110
  • 使用chgrp fruit orange.txt 修改文件的所在组 ly-20241212142139179
  • 改变某个用户所在组 usermod -g fruit fox ly-20241212142139244
  • 使用 cat /etc/group 查看所有的组
  • 当一个用户属于多个组的时候,groups会出现多个组名

rwx权限 #

rwxrwxrwx 第一列有十位,第0位确认文件类型 -普通文件,l是链接;d是目录;c是字符设备文件、鼠标、键盘;b块设备 1-3表示文件所有者拥有的权限;4-6是文件所在组所拥有的权限,7-9 其他组所拥有的权限

  • rwx作用到文件,r代表可读可查看,w代表可修改(如果是删除权限,则必须在该文件所在的目录有写权限,才能删除),x代表可执行
  • rwx作用到目录,r表示可以读取(ls可查看目录内容),w表示可写(可以在目录内创建、删除、重命名目录),x表示可以进入该目录
  • rwx分别用数字表示,4,2,1。当拥有所有权限,则为7
  • ly-20241212142139311
    • 最后面的数字,代表连接数(或者子目录数)
    • 1213 文件大小(字节),如果是文件夹则显示4096
    • 最后abc表示文件名,蓝色表示是目录

修改权限 #

  • chmod 修改权限,u:所有者,g:所有组,o:其他人,a 所有(ugo总和)
  • chmod u=rwx,g=rw,o=x 文件/目录名 这里等号表示直接给权限
  • chmod o+w 文件/目录名 这里加表示+权限
  • chmod a-x 文件/目录名
  • chmod u=rwx,g=rx,o=rx abc 给文件添加执行权限(会变成绿色的)
  • 使用数字
    • 将abc.txt文件权限修改成rwxr-xr-x使用数字实现 chmod 755 abc

修改所有者和所在组 #

  • chown tom abc #修改文件所有者为tom
  • chown -R tom abc #修改文件夹及其所有子目录所有者为tom
  • chgrp -R fruit kkk #修改文件夹所在组为fruit

权限管理应用实例 #

  • 警察和土匪的游戏

    ...

mysql高阶_sgg 96-00

章节概述 #

  • 架构篇

    • 1-3 ly-20241212142152374
    • 4 ly-20241212142152554
    • 5 ly-20241212142152607
    • 6 ly-20241212142152666
  • 索引及调优篇

    • 01 ly-20241212142152801

    • 02-03

      ly-20241212142152853

    • 04-05

      ly-20241212142152904

    • 06 ly-20241212142152953

  • 事务篇

    • 01-02 ly-20241212142153001
    • 03 ly-20241212142153044
    • 04 ly-20241212142153090
  • 日志与备份篇

    • 01 ly-20241212142153137
    • 02 ly-20241212142153183
    • 03 ly-20241212142153231

CentOS环境准备 #

  • 这里主要是做了克隆,并没有讲到CentOS的安装,所以笔记不记录了

MySQL的卸载 #

  • 查找当前系统已经装了哪些 rpm -qa |grep mysql

  • 查找mysql服务运行状态 systemctl status mysql

  • 停止mysql服务 systemctl stop mysql

  • 删除

    yum remove mysql-community-client-plugins-8.0.29-1.el7.x86_64
    yum remove mysql-community-common-8.0.29-1.el7.x86_64
    
  • 查找带mysql名字的文件夹 find / -name mysql

    ...

算法红皮书 3.2.1

二叉查找树 #

  • 使用每个结点含有两个链接(链表中每个结点只含有一个链接)的二叉查找树来高效地实现符号表

  • 该数据结构由结点组成,结点包含的链接可以为空(null)或者指向其他结点

  • 一棵二叉查找树(BST)是一棵二叉树,其中每个结点都含有一个Comparable 的键(以 及相关联的值)且每个结点的键都大于其左子树中的任意结点的键而小于右子树的任意结点的键。

  • ly-20241212142101353

基本实现 #

  • 数据表示

    • 每个结点都含有一个键、一个值、一条左链接、一条右链接和一个结点计数器 左链接指向一棵由小于该结点的所有键组成的二叉查找树,右链接指向一棵由大于该节点的所有键组成的二叉查找树,变量N给出了以该结点为根的子树的结点总数
    • 对于任意节点总是成立 size(x)=size(x.left)+size(x.right)+1
  • 多棵二叉查找树表示同一组有序的键来实现构建和使用二叉查找树的高校算法 ly-20241212142101579

  • 查找

    • 在符号表中查找一个键可能得到两种结果:如果含有该键的结点存在表中,我们的查找就命中了,然后返回值;否则查找未命中(返回null)
    • 递归:如果树是空的,则查找未命中;如果被查找的键和根节点的键相等,查找命中,否则在适当的子树中查找:如果被查找的键较小就选择左子树,否则选择右子树
    • 下面的get()方法,第一个参数是一个结点(子树根节点),第二个参数是被查找的键,代码会保证只有该结点所表示的子树才会含有和被查找的键相等的结点
    • 从根结点开始,在每个结点中查找的进程都会递归地在它的一个子结点上展开,因此一次查找也就定义了树的一条路径。对于命中的查找,路径在含有被查找的键的结点处结束。对于未命中的查找,路径的终点是一个空链接 ly-20241212142101684
  • 基于二叉查找树的符号表

    public class BST<Key extends Comparable<Key>, Value>
    {
    	private Node root;
    	// 二叉查找树的根结点
    	private class Node
    	{
    		private Key key;
    		// 键
    		private Value val;
    		// 值
    		private Node left, right;
    		// 指向子树的链接
    		private int N;
    		// 以该结点为根的子树中的结点总数
    		public Node(Key key, Value val, int N)
    		{
    			this.key = key;
    			this.val = val;
    			this.N = N;
    		}
    	}
    	public int size()
    	{
    		return size(root);
    	}
    	private int size(Node x)
    	{
    		if (x == null) return 0; else return x.N;
    	}
    	public Value get(Key key)
    	// 请见算法3.3(续1)
    	public void put(Key key, Value val)
    	// 请见算法3.3(续1)
    	// max()、min()、floor()、ceiling()方法请见算法3.3(续2)
    	// select()、rank()方法请见算法3.3(续3)
    	// delete()、deleteMin()、deleteMax()方法请见算法3.3(续4)
    	// keys()方法请见算法3.3(续5)
    }
    
    • 每个Node 对象都是一棵含有N 个结点的子树的根结点,它的左链接指向一棵由小于该结点的所有键组成的二叉查找树,右链接指向一棵由大于该结点的所有键组成的二叉查找 树。root 变量指向二叉查找树的根结点Node 对象(这棵树包含了符号表中的所有键值对)
  • 二叉查找树的查找和排序方法的实现

    ...

mybatis-plus-sgg-40-57

LambdaXxxWrapper #

  • LambdaQueryWrapper主要是为了防止字段名写错

       @Test
        public void test11(){
    
            String username="abc";
            Integer ageBegin=null;
            Integer ageEnd=30;
            LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
            queryWrapper.like(StringUtils.isNotBlank(username),User::getUserName,username)
                    .ge(ageBegin!=null,User::getAge,ageBegin);
            userMapper.selectList(queryWrapper);
        }
    

    sql日志打印

    ==>  Preparing: SELECT uid AS id,name AS userName,age,email,is_deleted_ly FROM t_user WHERE is_deleted_ly=0 AND (name LIKE ?)
    ==> Parameters: %abc%(String)
    <==      Total: 0
    
  • LambdaUpdateWrapper

        @Test
        public void test12() {
    
            //(age>23且用户名包含a)  或 (邮箱为null)
            LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
            updateWrapper.like(User::getUserName, "a")
                    .and(userUpdateWrapper ->
                            userUpdateWrapper.gt(User::getAge, 23).or().isNotNull(User::getEmail));
            updateWrapper.set(User::getUserName, "小黑").set(User::getEmail, "abc@ly.com");
            userMapper.update(null, updateWrapper);
        }
    

    sql日志打印

    ...