12 2021 档案
摘要:为什么is null 是模糊查询?| 一文讲懂SQL NULL https://zhuanlan.zhihu.com/p/82434024 直接转载这篇文章,里面的相亲例子让人很好理解 很多人会将NULL称为“空值”。但这个称呼是非常有迷惑性的。事实上,SQL中的NULL不仅不是“空值”,NULL甚
阅读全文
摘要:插入、更新、删除数据 插入 CREATE TABLE IF NOT EXISTS student1( `id` INT(4) NOT NULL COMMENT '序号', `name` VARCHAR(30) DEFAULT '匿名' COMMENT '姓名', `age` INT(3) DEFAU
阅读全文
摘要:数据库级别的外键 -- 创建grade表 CREATE TABLE IF NOT EXISTS grade( `gradeid` INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '年级id', `name` VARCHAR(50) NOT NU
阅读全文
摘要:修改删除表 -- 修改表名 ALTER TABLE `表名` RENAME `新表名` ALTER TABLE `teacher` RENAME `teacher1`; -- 添加表字段 ALTER TABLE `表名` ADD `subject` VARCHAR(20) ALTER TABLE `
阅读全文
摘要:InnoDB和MyISAM的区别 几个常用的命令 --查看创建数据库的语句 SHOW CREATE DATABASE school; -- 查询出的结果 CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */ --查看创建表的语
阅读全文
摘要:创建表 --创建一个名字为student的学生表 --包含学号、姓名、年龄、性别、出生日期、家庭地址、电子邮箱 --学号设置为主键 CREATE TABLE IF NOT EXISTS student( `id` INT(4) NOT NULL COMMENT '学号', `name` VARCHA
阅读全文
摘要:数据库的表字段属性 主键 每个表都必须有且只有一个字段设置为主键,主键字段数据不能重复,为了区分每条数据。 非空 该字段是不能够设置为空 Unsigned 声明该字段不能设置为负数 自增 是否将该字段设置为自动增加?可设置为增加一定数值,不一定必须为1 默认 给该字段设置默认值 Zerofill 用
阅读全文
摘要:数据库表的列类型 数值 | 类型 | 用途 | 长度 | 是否常用 | | | | | | | tinyint | 非常小的数 | 1字节 | | | smallint | 比较小的数 | 2字节 | | | mediumint | 中等大小的数 | 3字节 | | | int | 最广泛使用的整数
阅读全文
摘要:操作数据库 数据库操作:增删改(使用)查 -- 创建数据库family,中括号代表可选 CREATE DATABASE [IF NOT EXISTS] family; -- 使用数据库 USE family; -- 查看数据库 SHOW DATABASES; -- 删除数据库 DROP DATABA
阅读全文
摘要:初学sql语言 简单的数据库操作语言 每个sql语句结尾需要添加;表示结尾 -- 注释使用两个中划线 -- 修改密码 set password for root@localhost = password(‘123’); -- 查看所有数据库 show databases --创建student数据库
阅读全文
摘要:Windows 上安装 MySQL 把菜鸟的复制过来了,原文链接:https://www.runoob.com/mysql/mysql-install.html Windows 上安装 MySQL 相对来说会较为简单,最新版本可以在 MySQL 下载 中下载中查看(更详细安装:Windows 上安装
阅读全文
摘要:死锁再探 之前学了死锁产生的条件,两个线程分别抱着一个对象的锁,还想同时去获取另一个对象的锁,便会引发死锁 死锁示例 package juc; import java.util.concurrent.TimeUnit; public class TestDeadLock { public stati
阅读全文
摘要:自旋锁 首次接触到自旋锁是在AtomicInteger类,其中的GetAndIncrement()方法,是类似于num++的原子性操作。 源码分析:其中的do while就是一个自旋锁 public final int getAndIncrement() { return unsafe.getAnd
阅读全文
摘要:本地java环境安装 一、下载jdk jdk1.8链接: 官网 华为 清华大学 二、安装jdk 以https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/8/jdk/x64/windows/下面的 OpenJDK8U-jdk_x64_windows_hot
阅读全文
摘要:GIT下载与安装 1.什么是GIT Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 2.下载地址 windows版本官网 各种版本官网 3.安
阅读全文
摘要:可重入锁 可重入锁就是一个线程已经获得了一把锁,可以重复获取而不会导致死锁 synchronized 和Lock都是可重入锁 synchronized 可重入锁示例 package com.example.juc; public class TestReentrantLock { public st
阅读全文
摘要:ABA问题 问题现象:两个线程都去获取一个值,第一个线程获取后将其改变,然后又改回来,第二个线程获取到之后以为是第一个值,继续执行下去 ABA问题示例 package com.example.juc; import java.util.concurrent.atomic.AtomicInteger;
阅读全文
摘要:理解CAS CAS(compare and swap):比较并交换,是CPU并发操作的原语 JUC的atomic包下的类中的操作均为原子性操作,底层均使用的是CAS,是直接对内存的操作 示例代码 package com.example.juc; import java.util.concurrent
阅读全文
摘要:单例模式详解 单例模式就是只能有一个实例的模式;最大的特点是构造器私有。建议看视频。 单例模式分为两种: 饿汉式:直接将类的实例初始化好,可能会存在资源浪费的情况; 懒汉式:用的时候再初始化实例,比较常用。 饿汉式 特点: 构造器私有 构建一个静态常量表示类的实例 构建一个静态getInstance
阅读全文
摘要:理解JMM volatile 是java虚拟机提供轻量级的同步机制,是一个java关键字 1.保证可见性 2.不保证原子性 3.禁止指令重排 JMM java 内存模型,是一种约定,不是真实存在的。 关于JMM的一些约定 1.线程解锁前,必须把共享变量刷回主存 2.线程加锁前,必须读取主存的最新值到
阅读全文
摘要:类加载器和双亲委派机制 类加载器 类加载器类型 1.虚拟机自带的加载器 2.启动类加载器(根加载器)BootStrapClassLoader 3.扩展类加载器 ExtClassLoader 4.应用程序加载器 AppClassLoader 双亲委派机制 1.类加载器接收到类加载的请求 2.将这个请求
阅读全文
摘要:一、Java NIO 简介 原文链接 https://xie.infoq.cn/article/fb524c4992beea6bb4487af87 1、简介 Java NIO(New IO)是从 Java 1.4 版本开始引入的一个新的 IO API,可以替代标准的 Java IO API。NIO
阅读全文
摘要:异步回调 Future 设计的初衷:对未来的结果建模 package com.example.juc; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; imp
阅读全文
摘要:ForkJoin详解 ForkJoin fork分支 jion合并 主要思想:把大任务拆分成小任务,最后把小任务的结果合并 工作窃取:ForkJoin维护的都是双端队列,先执行完的线程会去获取未执行完线程的最后的任务来执行,可以提高效率,但是也可能会引入问题 Long 和long性能相差好大,但是L
阅读全文
摘要:Stream 流式计算 大数据:存储+计算 集合、MYSQL本质就是存储东西的 计算都应该交给流来操作 package com.example.juc; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArg
阅读全文
摘要:四大函数式接口 新时代程序员必会:lambda表达式,链式编程,函数式接口, Stream流式计算 函数式接口:只有一个函数的接口. Example: Runnable, Callable都是常用的函数式接口 这四大函数式接口可以在javase文档中查看,java.util.function包下 F
阅读全文
摘要:CPU密集型和IO密集型 CPU密集型,最大化利用CPU资源,将最大线程池数设置为cpu核数 cpu核数:Runtime.getRuntime().availableProcessors() IO密集型:有比较多的IO操作,非常耗费线程 将最大线程数设置为IO线程总数的两倍,或者大于IO线程总数即可
阅读全文
摘要:池化技术与线程池 池化技术 简介 程序的运行,本质:占用系统的资源!优化资源的使用!=>池化技术 池化技术的应用:线程池、连接池、内存池、对象池... 一句话解释池化技术:事先准备好一些资源,有人要用就来我这里拿,用完之后还给我,下个人再过来用。 线程池的优点: 1.降低资源的消耗 2.提高响应速度
阅读全文
摘要:同步队列 SynchronousQueue 同步队列即队列容量为1的队列,只能放进一个元素,取出后才能放入另一个 package com.example.juc; import java.util.concurrent.BlockingQueue; import java.util.concurre
阅读全文
摘要:BlockingQueue 4组API 会抛异常 不抛异常,有返回值 阻塞 超时阻塞 添加 add offer put offer(,,) 删除 remove poll take poll(,) 查询 .element() .peek() -- -- 代码: package com.example.
阅读全文
摘要:阻塞队列 队列: 队列就是一个管道 先进来的元素先出(FIFO) 队列涉及两个操作,一个写入,一个读取 阻塞情况: 当队列已经满了,继续写入,形成写入阻塞 当队列已经空了,继续读取,形成读取阻塞 java类: 队列类:Queue 双端队列:Deque 阻塞队列:BlockingQueue 非阻塞队列
阅读全文
摘要:二分法 东西其实并不难,如果你理解不了,说明教的不好 二分法实际是一个比较简单的方法 基础的原理:在一个排序好的数组中,寻找一个值,可以看中间元素值的大小,跟目标值进行比较,确定以一个搜索范围,每次搜索范围可以减半,搜索效率大大提升。 二分法一个写的比较清楚的视频 分享给大家: leetcode34
阅读全文
摘要:抽象工厂模式 **定义:**抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们的具体类 适用场景: 客户端(应用层)不依赖与产品类实例如何被创建、实现等细节 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码 提供一个产品族的库,所有产品以相同的接口出
阅读全文
摘要:读写锁 ReentrantReadWriteLock 可重复读写锁: 可以更加细粒度控制读和写的锁情况。 读锁可以多线程一起读,写只能一个一个按顺序写,可以进一步提高代码效率 独占锁即写锁 共享锁即读锁 下面代码可以把注释解开运行下看下效果 package com.example.juc; impo
阅读全文

浙公网安备 33010602011771号