Linux
Linux基础命令Linux的目录结构 /,根目录是最顶级的目录了 Linux只有一个顶级目录:/ 路径描述的层次关系同样适用/来表示 /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt ls命令功能:列出文件夹信息 语法:ls [-l -h -a] [参数] 参数:被查看的文件夹,不提供参数,表示查看当前工作目录 -l,以列表形式查看 -h,配合-l,以更加人性化的方式显示文件大小 -a,显示隐藏文件 隐藏文件、文件夹在Linux中以.开头的,均是隐藏的。 默认不显示出来,需要-a选项才可查看到。 pwd命令功能:展示当前工作目录 语法:pwd cd命令功能:切换工作目录 语法:cd [目标目录] 参数:目标目录,要切换去的地方,不提供默认切换到当前登录用户HOME目录 HOME目录每一个用户在Linux系统中都有自己的专属工作目录,称之为HOME目录。 普通用户的HOME目录,默认在:/home/用户名 root用户的HOME目录,在:/root FinalShell登...
MyBatisPlus扩展功能
3.扩展功能3.1.代码生成在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。 这里推荐大家使用一款MybatisPlus的插件,它可以基于图形化界面完成MybatisPlus的代码生成,非常简单。 3.1.1.安装插件在Idea的plugins市场中搜索并安装MyBatisPlus插件, 然后重启你的Idea即可使用。 3.1.2.使用刚好数据库中还有一张address表尚未生成对应的实体和mapper等基础代码。我们利用插件生成一下。 首先需要配置数据库地址,在Idea顶部菜单中,找到other,选择Config Database 在弹出的窗口中填写数据库连接的基本信息 然后再次点击Idea顶部菜单中的other,然后选择Code Generator 在弹出的表单中填写信息 最终,代码自动生成到指定的位置了: 3.2.静态工具有的时候Service...
MyBatisPlus核心功能
2.核心功能刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 **2.1.**条件构造器除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外,还支持更加复杂的where条件。 参数中的Wrapper就是条件构造的抽象类,其下有很多默认实现,继承关系如图: Wrapper的子类AbstractWrapper提供了where中包含的所有条件构造方法: 而QueryWrapper在AbstractWrapper的基础上拓展了一个select方法,允许指定查询字段: 而UpdateWrapper在AbstractWrapper的基础上拓展了一个set方法,允许指定SQL中的SET部分: 接下来,我们就来看看如何利用Wrapper实现复杂查询。 2.1.1.QueryWrapper无论是修改、删除、查询,都可以使用QueryWrapper来构建查询条件。接下来看一些例子: 查询:查询出名字中带o的,存款大于等于1000元的人。代码如下: 12...
MyBatisPlus快速入门
1.快速入门大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是MybatisPlus。 当然,MybatisPlus不仅仅可以简化单表操作,而且还对Mybatis的功能有很多的增强。可以让我们的开发更加的简单,高效。 通过学习MybatisPlus,我们要达成下面的目标: 能利用MybatisPlus实现基本的CRUD 会使用条件构建造器构建查询和更新语句 会使用MybatisPlus中的常用注解 会使用MybatisPlus处理枚举、JSON类型字段 会使用MybatisPlus实现分页 为了方便测试,我们先创建一个新的项目,并准备一些基础数据。 1.1.环境准备复制课前资料提供好的一个项目到你的工作空间(不要包含空格和特殊字符) 接下来,要导入两张表,在课前资料中已经提供了SQL文件 最后,在application.yaml中修改jdbc参数为你自己的数据库参数: 1234567891011s...
Redis原理-内存回收
3、原理篇-Redis内存回收3.1、过期key处理Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。我们可以通过修改配置文件来设置Redis的最大内存: 当内存使用达到上限时,就无法存储更多数据了。为了解决这个问题,Redis提供了一些策略实现内存回收: 内存过期策略 在学习Redis缓存的时候我们说过,可以通过expire命令给Redis的key设置TTL(存活时间): 可以发现,当key的TTL到期以后,再次访问name返回的是nil,说明这个key已经不存在了,对应的内存也得到释放。从而起到内存回收的目的。 Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在之前学习过的Dict结构中。不过在其database结构体中,有两个Dict:一个用来记录key-value;另一个用来记录key-TTL。 这里有两个问题需要我们思考:Redis是如何知道一个key是否过期呢? 利用两个Dict分别记录key-value对及key-ttl对 是不是TTL...
Redis原理-网络模型
2、原理篇-Redis网络模型2.1 用户空间和内核态空间服务器大多都采用Linux系统,这里我们以Linux为例来讲解: ubuntu和Centos 都是Linux的发行版,发行版可以看成对linux包了一层壳,任何Linux发行版,其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互 用户的应用,比如redis,mysql等其实是没有办法去执行访问我们操作系统的硬件的,所以我们可以通过发行版的这个壳子去访问内核,再通过内核去访问计算机硬件 计算机硬件包括,如cpu,内存,网卡等等,内核(通过寻址空间)可以操作硬件的,但是内核需要不同设备的驱动,有了这些驱动之后,内核就可以去对计算机硬件去进行 内存管理,文件系统的管理,进程的管理等等 我们想要用户的应用来访问,计算机就必须要通过对外暴露的一些接口,才能访问到,从而简介的实现对内核的操控,但是内核本身上来说也是一个应用,所以他本身也需要一些内存,cpu等设备资源,用户应用本身也在消耗这些资源,如果不加任何限制,用户去操作随意的去操作我们的资源,就有可能导致一些冲突,甚至有可能导致我们的系统出现无法运行...
Redis原理-数据结构
1、原理篇-Redis数据结构1.1 Redis数据结构-动态字符串我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:获取字符串长度的需要通过运算非二进制安全不可修改Redis构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic String),简称SDS。 例如,我们执行命令: 那么Redis将在底层创建两个SDS,其中一个是包含“name”的SDS,另一个是包含“虎哥”的SDS。 Redis是C语言实现的,其中SDS是一个结构体,源码如下: 例如,一个包含字符串“name”的sds结构如下: SDS之所以叫做动态字符串,是因为它具备动态扩容的能力,例如一个内容为“hi”的SDS: 假如我们要给SDS追加一段字符串“,Amy”,这里首先会申请新内存空间: 如果新字符串小于1M,则新空间为扩展后字符串长度的两倍+1; 如果新字符串大于1M,则新空间为扩展后字符串长度+1M+1。称为内存预分配。...
行为型模式(二)
6.7 中介者模式6.7.1 概述一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。 如果引入中介者模式,那么同事类之间的关系将变为星型结构,从下右图中可以看到,任何一个类的变动,只会影响的类本身,以及中介者,这样就减小了系统的耦合。一个好的设计,必定不会把所有的对象关系处理逻辑封装在本类中,而是使用一个专门的类来管理那些不属于自己的行为。 定义: 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 6.7.2 结构中介者模式包含以下主要角色: 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 Lis...
行为型模式(一)
6,行为型模式行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: 模板方法模式 策略模式 命令模式 职责链模式 状态模式 观察者模式 中介者模式 迭代器模式 访问者模式 备忘录模式 解释器模式 以上 11 种行为型模式,除了模板方法模式和解释器模式是类行为型模式,其他的全部属于对象行为型模式。 6.1 模板方法模式6.1.1 概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。 例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员...
结构型模式
5,结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: 代理模式 适配器模式 装饰者模式 桥接模式 外观模式 组合模式 享元模式 5.1 代理模式5.1.1 概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。 5.1.2 结构代理(Proxy)模式分为三种角色: 抽象主题(Subject)类: 通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类: 实现了抽象主题中的具体业务,是代...