08 2021 档案

摘要:1. CompletableFuture 简介 CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息。 CompletableFu 阅读全文
posted @ 2021-08-25 23:13 haojinglei 阅读(116) 评论(0) 推荐(0)
摘要:1. Fork/Join框架简介 Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join 框架要完成两件事情: Fork:把一个复杂任务进行分拆,大事化小。 Join:把分拆任务的结果进行合并。 步骤介绍: 任务分割 阅读全文
posted @ 2021-08-25 23:11 haojinglei 阅读(88) 评论(0) 推荐(0)
摘要:1. 线程池简介 线程池(thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。 例子:10 阅读全文
posted @ 2021-08-25 23:08 haojinglei 阅读(64) 评论(0) 推荐(0)
摘要:1. BlockingQueue 简介 Concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括他 阅读全文
posted @ 2021-08-25 23:06 haojinglei 阅读(108) 评论(0) 推荐(0)
摘要:1. 读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA 的 阅读全文
posted @ 2021-08-25 23:04 haojinglei 阅读(82) 评论(0) 推荐(0)
摘要:JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为: CountDownLatch: 减少计数 CyclicBarrier: 循环栅栏 Semaphore: 信号灯 1. 减少计数-CountDownLatch CountDownLa 阅读全文
posted @ 2021-08-25 23:03 haojinglei 阅读(78) 评论(0) 推荐(0)
摘要:1. Callable接口 常规的两种创建线程的方法:一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是 Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能, Java 中提供了 Callable 接口。 阅读全文
posted @ 2021-08-25 23:01 haojinglei 阅读(77) 评论(0) 推荐(0)
摘要:1. 线程不安全-ArrayList /** * ArrayList线程不安全案例 */ public class NotSafeDemo { /** * 多个线程同时对集合进行修改 */ public static void main(String[] args) { List list = ne 阅读全文
posted @ 2021-08-25 23:00 haojinglei 阅读(98) 评论(0) 推荐(0)
摘要:线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。 1. 案例:加一减一 两个线程,一个线程对当前数值加 1,另一个线程对当前数值减 1,要求用线程间通信。 1.1 synchronized 方案 /** * synchronized 关键字实现线程交替加减 */ pu 阅读全文
posted @ 2021-08-25 22:58 haojinglei 阅读(105) 评论(0) 推荐(0)
摘要:1. Synchronized 1.1 Synchronized介绍 synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 修饰一个方法,被修 阅读全文
posted @ 2021-08-25 22:56 haojinglei 阅读(56) 评论(0) 推荐(0)
摘要:1. JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC 就是java.util.concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。 2. 进程与线程 进程(Process)是计算机中的程序关于某数据集合上的一次运行 阅读全文
posted @ 2021-08-25 22:55 haojinglei 阅读(129) 评论(0) 推荐(0)
摘要:1. ACL 1.1 简介 Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。 在Redis 5版本之前,Redis安全规则只有密码控制 还有通过rename来调整高危命令比如flushdb , KEYS* , 阅读全文
posted @ 2021-08-20 22:07 haojinglei 阅读(104) 评论(0) 推荐(0)
摘要:1. 缓存穿透 1.1 问题描述 key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 1.2 解决方案 一个一定不存在缓存及查询不到 阅读全文
posted @ 2021-08-20 22:05 haojinglei 阅读(148) 评论(0) 推荐(1)
摘要:1. 单机面临的问题 容量不够,redis需要扩容。 并发写操作,redis需要分摊。 主从模式,薪火相传模式,主机宕机,导致IP地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。 之前通过代理主机来解决,但是redis3.0中提供了解决方案。就是无中心化集群配置。 2. 集群介绍 R 阅读全文
posted @ 2021-08-20 22:03 haojinglei 阅读(83) 评论(0) 推荐(0)
摘要:1. 介绍 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。 作用: 读写分离,性能扩展。 容灾快速恢复。 2. 实现流程 拷贝多个redis.conf文件include(写绝对路径) 开启daemonize yes pid文 阅读全文
posted @ 2021-08-20 22:01 haojinglei 阅读(55) 评论(0) 推荐(0)
摘要:1. 介绍 Redis提供了两种不同形式的持久化方式: RDB (Redis DataBase) AOF (Append Only File) 2. RDB (Redis DataBase) 2.1 介绍 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时 阅读全文
posted @ 2021-08-20 22:00 haojinglei 阅读(79) 评论(0) 推荐(0)
摘要:整合步骤 在pom.xml文件中引入redis相关依赖。 <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artif 阅读全文
posted @ 2021-08-20 21:58 haojinglei 阅读(123) 评论(0) 推荐(0)
摘要:1. 事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。 Redis事务的主要作用就是串联多个命令防止别的命令插队。 2. 事务使用 从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执 阅读全文
posted @ 2021-08-20 21:58 haojinglei 阅读(75) 评论(0) 推荐(0)
摘要:1. Jedis所需jar包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> 2. 连接Redis注意事项 禁用Li 阅读全文
posted @ 2021-08-20 21:55 haojinglei 阅读(162) 评论(0) 推荐(0)
摘要:1. Bitmaps 1.1 简介 现代计算机用二进制(位) 作为信息的基础单位, 1个字节等于8位, 例如“abc”字符串是由3个字节组成, 但实际在计算机存储时将其用二进制表示, “abc”分别对应的ASCII码分别是97、 98、 99, 对应的二进制分别是01100001、 01100010 阅读全文
posted @ 2021-08-20 21:48 haojinglei 阅读(67) 评论(0) 推荐(0)
摘要:1. 简介 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 2. 图示 客户端可以订阅频道如下图: 当给这个频道发布消息后,消息就会发送给订阅的客户端 3. 命令行实现 打开一个客 阅读全文
posted @ 2021-08-20 21:45 haojinglei 阅读(56) 评论(0) 推荐(0)
摘要:1. UNITS 单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感。 2. INCLUDES 包含 类似jsp中的include,多实例的情况可以把公用的配置文件提取出来。 3. NETWORK 网络 3.1 bind 默认情况bind=127.0.0. 阅读全文
posted @ 2021-08-20 21:44 haojinglei 阅读(70) 评论(0) 推荐(0)
摘要:1. Redis基础命令 keys * 查看到当前库的所有key exists key 判断某个key是否存在 type key 查看某个key的类型 del key 删除指定key的数据 unlink key 根据value选择非阻塞删除 expire key 10 给指定key设置10秒过期时间 阅读全文
posted @ 2021-08-20 21:42 haojinglei 阅读(90) 评论(0) 推荐(0)
摘要:1. 概述 Redis是一个开源的key-value存储系统。 和Memcached类似,它支持存储的类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set 有序集合)和hash(哈希)。 这些数据类型都支持push/pop、add/remove及 阅读全文
posted @ 2021-08-20 21:41 haojinglei 阅读(36) 评论(0) 推荐(0)
摘要:1. 基本介绍 commons-dbutils是Apache组织提供的一个开源JDBC工具类,它是对JDBC的封装,使用DBUtils可以极大简化jdbc编码的工作量。 DBUtils类 QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增、删、改、查、批处理。 ResultS 阅读全文
posted @ 2021-08-12 16:34 haojinglei 阅读(94) 评论(0) 推荐(0)
摘要:1. 直接获取Connection问题 传统的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,在验证IP地址,用户名和密码(0.05s~1s时间)。需要数据库连接的时候,就向数据库请求一个,频繁地进行数据库连接操作将占用很多的 阅读全文
posted @ 2021-08-12 16:33 haojinglei 阅读(118) 评论(0) 推荐(0)
摘要:1. 基本介绍 当需要成批插入或者更新记录时。可以采用Java的批处理机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交再处理更有效率。 JDBC连接MySQL时,如果要使用批处理功能,URL中需要添加参数rewriteBatchedStatements=true,如果没有加 阅读全文
posted @ 2021-08-12 16:32 haojinglei 阅读(310) 评论(0) 推荐(0)
摘要:1. 基本介绍 JDBC程序中当一个Connection对象创建时,默认情况下时自动提交事务。每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚。 JDBC中为了让多个SQL作为一个整体执行,需要使用事务。 调用Connection的setAutoCommit(false)可以 阅读全文
posted @ 2021-08-12 16:31 haojinglei 阅读(81) 评论(0) 推荐(0)
摘要:1. Statement 1.1 基本介绍 Statement用于执行静态SQL语句并返回其生成的结果的对象。 Statement对象执行SQL语句存在SQL注入风险。 SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,恶意攻击数据库。 防范 阅读全文
posted @ 2021-08-12 16:29 haojinglei 阅读(241) 评论(0) 推荐(0)
摘要:1. ResultSet基本介绍 ResultSet表示数据库结果集的数据表,通过执行查询数据库的语句生成。 ResultSet对象保持一个光标指向当前的数据行。最初,光标位于第一行之前。 调用next方法会将光标移动到下一行,如果在ResultSet对象中没有更多行是返回false,因此使用whi 阅读全文
posted @ 2021-08-12 16:23 haojinglei 阅读(389) 评论(0) 推荐(0)
摘要:获取数据库连接的5种方式 1. 基础 @Test public void connect01() throws SQLException { Driver driver = new Driver(); String url = "jdbc:mysql://localhost:3306/demo"; 阅读全文
posted @ 2021-08-12 16:22 haojinglei 阅读(270) 评论(0) 推荐(0)
摘要:1. JDBC基本介绍 JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。 Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。 2. JDBC API JDBC API是一系列的接口,它统一和规范了应用程序与数据库的连接、执行S 阅读全文
posted @ 2021-08-12 16:21 haojinglei 阅读(112) 评论(0) 推荐(0)
摘要:1. Collections工具类介绍 Collections是一个操作Set、List、Map等集合的工具类。 Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作。 2. 方法 Collections类的所有方法均为static方法 2.1 排序操作 void re 阅读全文
posted @ 2021-08-08 16:11 haojinglei 阅读(76) 评论(0) 推荐(0)
摘要:1. Set基本介绍 Set接口是Collection接口的子接口。 Set集合中元素时无序的(添加和取出顺序不一致,LinkedHashSet、TreeSet除外),没有索引。 不允许添加重复元素,最多包含一个null。 2. 常用方法 常用方法和Collection接口一样。 3. HashSe 阅读全文
posted @ 2021-08-08 16:10 haojinglei 阅读(117) 评论(0) 推荐(0)
摘要:1. List基本介绍 List接口是Collection接口的子接口。 List集合中元素有序(添加顺序和取出顺序一致)并且可重复。 List集合中每个元素都有其对应的顺序索引,即支持索引。 2. List接口常用方法 void add(int index, Object ele) 在 index 阅读全文
posted @ 2021-08-08 16:07 haojinglei 阅读(120) 评论(0) 推荐(0)
摘要:1. 体系介绍 集合是分**单列集合(Collection)和双列集合(Map)**两大类 2. Collection接口 2.1 接口介绍 Collection的实现类可以存放多个元素,每个元素的类型是Object 有些Collection的实现类可以(List)存放重复元素,有些不可以(Set) 阅读全文
posted @ 2021-08-08 16:04 haojinglei 阅读(338) 评论(0) 推荐(0)