Java,八股,cv,算法——双非研0四修之路day37

目录

昨日总结

今日计划

算法——二叉所搜树的最小绝对差

Docker

Docker解决的问题

Docker和虚拟机的差异

镜像和容器

Docker架构

DockerHub

镜像操作命令

容器相关命令

自定义镜像

DockerCompose

昨日八股答案 

今日八股

       ​编辑


昨日总结

  • 米粒商城项目(在docker部署了mysql、redis),docker学习,学习函数式编程(完结)
  • cv(停滞中)
  • 小林coding--MySQL面试篇(1/7)
  • 码随想录——二叉所搜树的最小绝对差

今日计划

  • JVM底层原理学习,米粒商城项目ing
  • cv(停滞中)
  • 小林coding--MySQL面试篇(2/7)

算法——二叉所搜树的最小绝对差

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

示例 :

输入:root = [4,2,6,1,3]
输出:1
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int min,last;
    public int getMinimumDifference(TreeNode root) {
        min = Integer.MAX_VALUE;
        last = -100000;
        dg(root);
        return min;
    }

    public void dg(TreeNode root) {
      
        if(root == null)
        return;
       dg(root.left);
        min = Math.min(min, root.val - last);
        last = root.val;
       dg(root.right);
    }
}

Docker

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题。如下

Docker解决的问题

1.依赖关系复杂,容易出现兼容性问题
  • Docker将应用的函数库(Libs)、依赖(Deps配置和应用一起打包
  • Docker将每个应用放到一个隔离容器(沙箱)去运行,避免互相干扰
2.开发、测试生产环境都有差异
  • Docker将用户程序与所需要调用的系统函数库一起打包
  • Docker运行到不同OS时,直接基于打包的库函数,借助于OS的Linux内核来运行

Docker和虚拟机的差异

  • Docker是一个系统进程;虚拟机是在OS中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大,启动速度慢,性能一般

镜像和容器

镜像:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。(只读)
容器:镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

Docker架构

Docker是一个CS架构的程序,由两部分组成
  1. 服务端:DOcker守护进程,负责处理DOcker指令,管理镜像、容器等
  2. 客户端:通过命令向Docker服务端发送指令

DockerHub

一个镜像托管的服务器,类似的还有阿里云镜像服务

镜像操作命令

拉取镜像去Docker镜像网站 hub.docker.com

容器相关命令

自定义镜像

镜像是分层结构,每一层称为一个layer
  • BaseImage层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其他:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

DockerCompose

基于Compose文件来快速的部署分布式应用,无需手动一个个创建和运行容器。
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行

昨日八股答案 

  • 数据库三大范式

第一范式:原子性。要求数据表的每一列都是不可分割的原子数据项。

第二范式:完全依赖。在一范式的基础上消除非主属性对主码的部分函数依赖。需要确保数据表中的每一列都与主键相关,而不能只与主键的某一部分相关。

第三范式:消除传递依赖。在二范式的基础上,任何非主属性不依赖与其他主属性。确保数据表中的每一列数据都和主键注解相关,而不能间接相关。

  • MySQL的连表查询
  1. 内连接:返回两个表中有匹配关系的行。
selete employees.name , departments.name 
from employees inner join departments
on employees.department_id = departments.id

返回员工和所在部门的名称

     2. 左外连接:返回左表中的所有行,及时在右表中没有匹配的行

selete employees.name , depatrments.name
from employees
left join departments
on employees.department_id = department.id

查询所有员工(包括没有分配部门的员工)及其部门名称

        3.右外连接(与左外类似)

        4.全外连接

​selete employees.name , departments.name
from employees
left join departments
on employees.deprtment_id = department.id

union

​selete employees.name , departments.name
from employees
right join departments
on employees.deprtment_id = department.id
    • 如何避免重复插入数据
    1. 使用unique约束,在创建表的时候在相关列上添加unique约束,确保每个值的唯一性
    2. 使用insert ... on duplicate key update.这种语句在插入记录时,如果与现有的记录冲突,会选择更新现有记录
    3. 使用insert ignore:该语句会在插入记录时忽略因重复建而导致的插入错误
    • char和varchar的区别
    1. char是固定长度的字符串类型,存储时会在末尾补足空格。
    2. varchar是可变长度的字符串类型,定义时需要指定最大长度

    今日八股

    • MySQl的关键字in和exist
    • mysql的基本函数
    • SQL查询语句的执行顺序
    • 如何用MySQL实现一个可重入的锁

           

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值