Mysql外键与级联操作
外键与级联更新删除 之前没用过外键与级联更新,所以总结一下,用的数据库版本: mysql Ver 8.0.15 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL) 外键定义外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。 MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作; 外键术语 外键约束 外键字段:某个字段添加外键约束之后,该字段称为外键字段 外键值:外键字段中的每一个数据都是外键值 具体实例什么?看完定义还不知道是什么?那就试试看下面咯 当我们用主键唯一标识记录时,我们就可以在students表中确定任意一个学生的记录: id n...
分块算法
分块算法 简述 其实,分块是一种思想,而不是一种数据结构,整体维护,局部暴力 分块算法实质上是一种是通过分成多块后在每块上打标记以实现快速区间修改,区间查询的一种算法。其均摊时间复杂度为$O(\sqrt{n})$,在$n=10^5$时,由于常数小,跟线段树可能差不多。 分块算法相较于各种树形数据结构,具有简便易写,方便调试等多种优点。在同等数据规模下,如 1e5 ,其时间效率并不会低太多,在考试时反而是一种有力的得分方法。 基本操作及性质为了使得其有着最稳定的时间复杂度,我们经常把一个长度为 n 的序列分为 $\sqrt{n}$个大小为$\sqrt{n}$的块,如果 n 不是完全平方数,则序列最右端会多出一个角块(其实是根据均值不等式,这样划分是时间复杂度最小的) 如下图,就是一种序列的分块: 该长度为 10 的序列被分为了 4 块,前三块的大小为 $\sqrt{10}$的近似值 3 ,最后一个角块大小为 1 而我们要记录的一个值,就是每个序号代表的数,属于哪一块 如上图, 1,2,3就属于第一块, 4,5,6就属于第二块,7,8,9就属于第三块,10 就属于第四块...
Java虚拟机笔记-ServiceLoader
ServiceLoader-javaDoc 1234567891011121314151617181920package indi.greenhat.jvm;import java.sql.Driver;import java.sql.DriverManager;import java.util.Iterator;import java.util.ServiceLoader;public class Test { public static void main(String[] args) throws Exception { ServiceLoader<Driver> loader = ServiceLoader.load(Driver.class); Iterator<Driver> iterator = loader.iterator(); while (iterator.hasNext()) { Driver driver = iterator.n...
Java虚拟机笔记-线程上下文加载器
线程上下文加载器 线程上下文类加载器重要性首先我们看两行输出语句,第一个是输出Thread对象的上下文类加载器,而第二个是输出Thread类的加载器 123456789101112131415161718192021package indi.greenhat.jvm;public class Test { public static void main(String[] args) throws Exception{ /** * currentThread(): * 返回对当前正在执行的线程对象的引用 */ /** * getContextClassLoader(): * 返回此Thread的上下文ClassLoader * 上下文ClassLoader由线程的创建者提供,供加载类和资源时在此线程中运行的代码使用 * 如果未设置,则默认为父线程的ClassLoader上下文 * 原始线程的上下文C...
在ArchLinux中使用最新的内核模块监控Ryzen温度
AMD Ryzen Temperatures 参考: Monitor AMD Ryzen Temperatures In Linux with latest kernel modules 因为需要查看一些硬件的温度,又加上目前5.1.7-arch1-1-ARCH内核只是显示cpu温度,所以需要自己加载一些模块,其实过程还是很简单的 要求: 使用内核4.11或更高版本以及root权限的Linux安装。 具体流程: 确定modulesRyzen板上一般有两种模块。他们是it87和nct6775。旧的主板一般是前者,新的一般是后者,具体的可以搜索下,本次使用的MSI B450 TOMAHAWK属于后者 具体命令1234567sudo pacman -S linux-headersyay -S nct6775-master-dkms-gitsudo vim /etc/modules-load.d/modules.conf#往文件里面添加"nct6775"sudo modprobe nct6775sudo rebootsensors
记-迁移arch到不同硬盘
迁移sata固态硬盘中的arch到空的nvme固态硬盘里面 分区记原本sata固态硬盘为/dev/sda,nvme固态固态为/dev/nvme 原sata硬盘分区为,启动方式为uefi 1234/ --> /dev/sda1/home --> /dev/sda2swap --> /dev/sda3/boot/efi --> /dev/sda4 则我们需要在新的nvme固态硬盘同样分四个区,并且分别格式化为对应的格式,新的硬盘分区不能小于旧的硬盘分区。 那么迁移过来我们的分区如下: 1234/ --> /dev/nvme1 (ext4)/home --> /dev/nvme2 (ext4)swap --> /dev/nvme3 (linux-swap)/boot/efi --> /dev/nvme4 (fat32) linux livecd原系统是哪个发行版,则最好用对应发行版的livecd。所以在此准备了个arch linux的livecd 原本是用manjaro...
Java设计模式-代理模式
代理模式 参考:Java三种代理模式:静态代理、动态代理和cglib代理 C#设计模式之代理模式 基于 JDK 的动态代理机制 代理模式含义代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。 举例歌手与经纪人 结构代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层 Subject(抽象角色):定义代理角色和真实角色的公共对外方法 Proxy(代理角色):实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作 RealSubject(真实角色):实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。关注于真正的业务逻辑 核心作用 通过代理,控制对象的访问:可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即AOP的微...
Java虚拟机笔记-Launcher类
Launcher类部分内容分析 三种类加载器之间的关系 内建于JVM中的启动类加载器会加载java.lang.ClassLoder以及其他Java平台类,当JVM启动时,一块特殊的机器码会运行,它会加载扩展类加载器与系统类加载器,这块特殊的机器码叫做启动类加载器(Bootstrap)。 启动类加载器不是Java类,而其他的加载器则都是Java类,启动类加载器是特定于平台的机器指令,它负责开启整个过程。 所有类加载器(除了启动类加载器)都被实现为Java类。不过,总归要有一个组件来加载第一个Java类加载器,从而让整个加载过程能够顺利进行下去,加载第一个纯Java类加载器就是启动类加载器的职责。 启动类加载器还会负责加载供JRE正常运行所需要的基本组件,这包括java.util与java.lang包中的类等等。 验证12System.out.println(ClassLoader.class.getClassLoader());//输出null 但是不能直接获取扩展类加载器和系统类加载器,因为没有声明这两个类为public 12345678910public class...
Java虚拟机笔记-类加载器与web容器与OSGi
类加载器与 Web 容器,类加载器与 OSGi 参考:深入探讨 Java 类加载器 深入理解 Tomcat(四)Tomcat 类加载器之为何违背双亲委派模型 类加载器与Web容器对于运行在Java EE™容器中的 Web 应用来说,类加载器的实现方式与一般的 Java 应用有所不同。不同的 Web 容器的实现方式也会有所不同。 Apache Tomcat以Apache Tomcat来说,每个 Web 应用都有一个对应的类加载器实例。该类加载器也使用代理模式,所不同的是它是首先尝试去加载某个类,如果找不到再代理给父类加载器。这与一般类加载器的顺序是相反的。这是 Java Servlet规范中的推荐做法,其目的是使得 Web 应用自己的类的优先级高于 Web 容器提供的类。这种代理模式的一个例外是:Java 核心库的类是不在查找范围之内的。这也是为了保证 Java 核心库的类型安全。 Tomcat加载过程 我们看到,前面3个类加载和默认的一致,CommonClassLoader,CatalinaClassLoader,SharedClassLoader和WebappClassLo...
Java设计模式-工厂模式Java实现
工厂模式的java实现 代码地址: github 简单工厂模式 pizzaPizza.java12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970package pizza;import java.util.ArrayList;/** * 抽象Pizza类,其他种类都继承这个类 */public abstract class Pizza { /** * Pizza名字 */ String name; /** * 面团 */ String dough; /** * 调味汁 */ String sauce; /** * 配料 */ ArrayList<String> toppings = new ArrayList<String>(...