自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 收藏
  • 关注

原创 线程池任务队列和拒绝策略

1.任务队列BlockingQueue<Runnable> workQueue;workQueue是一个BlockingQueue接口的对象,仅用于存放Runnable对象。1.SynchronousQueue直接提交策略表示线程池不对任务进行缓存。新进任务直接提交给线程池,当线程池中没有空闲线程时,创建一个新的线程处理此任务。这种策略需要线程池具有无限增长的可能性。Executors.newCachedThreadPool()使用SynchronousQueue创建线程池。

2020-09-16 13:55:02 1565

原创 Docker 宿主机与容器直接文件移动命令

1、将容器中的文件复制到宿主机docker cp nginx_test: /etc/nginx /usr/local/nginx说明:nginx_test 容器名称/etc/nginx 容器目录存放目录/usr/local/nginx 宿主机目录2、将宿主机文件复制到容器中我们把宿主机目录(/usr/local/nginx/a.key)下的a.key 复制到容器(nginx_test)的/etc/nginx 目录下,使用如下命令:docker cp /usr/l...

2020-09-09 20:13:05 1883

原创 Alpine Docker 安装 bash

Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。Alpine Linux提供了自己的包管理工具:apk,我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息。Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker进行,它的体积非常小,docker.io/alpine:3.7只

2020-07-08 17:58:04 3803 2

原创 SpringBoot整合RabbitMQ的五种模式示例

RabbitMQ提供了6种消息模型,但是第6种其实是RPC,并不是MQ,因此不予学习。那么也就剩下5种。基本消息模型:生产者–>队列–>一个消费者 work消息模型:生产者–>队列–>多个消费者共同消费 订阅模型-Fanout:广播,将消息交给所有绑定到交换机的队列,每个消费者都可以收到同一条消息 订阅模型-Direct:定向,把消息交给符合指定 roting...

2020-01-19 17:36:19 1293 1

原创 RedisTemplate常用使用说明--发布订阅

java配置import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.listener.PatternTopic;import org.springframework.data.redis.listener.RedisMessa...

2019-12-04 15:43:28 2451

原创 RedisTemplate常用使用说明--通道操作

@Autowired @Resource(name = "redisTemplate") private RedisTemplate<String, String> rt; public void flushdb() { rt.execute(new RedisCallback<Object>() { pu...

2019-12-04 15:12:22 1626

原创 RedisTemplate常用使用说明--事务操作

Redis 事务相关的命令参考https://www.runoob.com/redis/redis-transactions.htmlRedis 事务在 SpringBoot 中的应用说明:下面以测试用例的形式说明 Redis 事务在 SpringBoot 中正确与错误的用法。首先,看一看当前测试用例的主体代码:import com.imooc.ad.Application;i...

2019-12-04 14:49:05 6417

原创 Android中MQTT的使用

Android中使用MQTT需要使用到Paho Android Service库,Paho Android Service是一个用Java编写的MQTT客户端库。GitHub地址:https://github.com/eclipse/paho.mqtt.android1 集成在module的build.gradle文件中添加依赖repositories { maven { ...

2019-11-04 13:48:01 2222 3

原创 MQTT协议简介及协议原理

1.简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议...

2019-11-04 12:56:02 1062

原创 SpringBoot全局异常处理

前言估计大家都会了的,我就是做个笔记而已。本文代码为主,在做Web应用的时候,请求处理过程中发生错误是非常常见的情况,那我们如何才能统一且友好地返回系统异常给前台呢。关键在于:注解@ControllerAdvice和@ExceptionHandler开始通过使用@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义。@ExceptionH...

2019-08-22 16:50:44 164

原创 Python中的单例模式的几种实现方式的及优化

单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建...

2019-08-09 14:40:29 91

原创 python-字符串前面加u,r,b的含义

1、字符串前加 u例:u"我是含有中文字符组成的字符串。"作用:后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。2、字符串前加 r例:r"\n\n\n\n”  # 表示一个普通生字符串 \n\n\n\n,而不表示换行了。作用:去掉反斜杠的转移机制。(特殊字符:即那些,反斜杠加上对应字母,表...

2019-07-18 19:48:30 131

原创 python-异步协程

1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞。比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后导致其爬取效率是非常非常低的。 为了解决这类问题,本文就来探讨一下 Python 中异步协程来加速的方法,此种方法对于 IO 密集型任务非常有效。如将其应用到网络爬虫...

2019-07-18 03:01:19 227

原创 python-包管理(包、模块、命名空间)

1. 模块一个模块就是一个包含pytho代码的文件, 后n缀名成是.py就可以,模块就是个python文件 为什么我们要用模块 程序太大,编写维护非常不方便,需要拆分 模块可以增加代码重复利用的方式 当做命名空间使用,避免命名冲突 如何定义模块 模块就是一个普通文件,所以任何代码可以直接书写, 不过根据模块的规范,最好在模块中编写以下内容 函数(单一功能) ...

2019-07-17 00:41:26 408

原创 python-包管理(pip)

概述python的优点之一就是众多的模块可供使用,在管理模块或者说包的时候就不得不提pip了。由于python2后续不再支持,这里只针对python3做介绍。下面我会针对pip的使用,自己的包构建和构建自己的pip库做介绍。pip的安装和基本使用1.安装pip的安装很简单,ubuntu有apt的包apt-get install python3-pip2.pip相关命令p...

2019-07-16 23:00:08 218

原创 MySQL高级知识——索引

索引在sql调优部分占据着重要的位置,了解并深入索引对我们来说也是非常重要的。本篇主要介绍MySQL中索引的相关知识点。1.索引是什么MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。因此索引的本质就是数据结构。索引的目的在于提高查询效率,可类比字典、书籍的目录等这种形式。可简单理解为“排好序的快速查找数据结构”。在数据之外,数据库系统还维护着满足特...

2019-07-09 01:52:44 236

原创 MySQL高级知识——Order By关键字优化

在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。1.准备1.1 创建test表。drop table if exists test;create table test(id int primary key auto_increment,c1 varchar(10),c2 varchar(10...

2019-07-09 01:39:20 630

原创 MySQL-EXISTS

提前准备建立两张表并为其添加一些数据一张会员表,一张会员下单表。会员表数据id user email 1 abei [email protected] 2 wh [email protected] 3 liuhuan [email protected] 订单表id user_id create_time ......

2019-07-08 23:50:06 1300

原创 MySQL高级知识——小表驱动大表

Exists 和 In当B表的数据集必须小于A表的数据集时,用in优于existsselect * from A where id in(select id from B)当A表的数据集小于B表的数据集时,用exists优于inselect * from A where exists (select 1 from B where B.id = A.id)注意:A表与B表...

2019-07-08 20:37:45 320

原创 MySQL-索引优化(八)

字符串不加单引号索引会失效mysql> select * from staffs where name=2000;+----+------+-----+-----+---------------------+| id | name | age | pos | add_time |+----+------+-----+-----+---------------...

2019-07-08 03:33:33 141

原创 MySQL-索引优化(七)

两边都有百分号的,有全表扫描mysql> EXPLAIN SELECT * FROM staffs where name LIKE '%july%';+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-----------...

2019-07-08 03:28:07 249

原创 MySQL-索引优化(六)

is null, is not null也法法使用索引mysql> EXPLAIN SELECT * from staffs WHERE name IS NULL;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----...

2019-07-08 03:19:46 104

原创 MySQL-索引优化(五)

MySQL在使用不等于(!=或<>)的时候无法使用索引,会导致全表扫描先看等于的情况再看不等于的情况mysql> EXPLAIN SELECT * from staffs WHERE name='july';+----+-------------+--------+------------+------+-----------------------+--------...

2019-07-08 03:18:43 116

原创 MySQL-索引优化(四)

尽量使用覆盖索引mysql> EXPLAIN SELECT * FROM staffs WHERE name='july' AND age = 25 and pos = 'manager';+----+-------------+--------+------------+------+-----------------------+-----------------------+-...

2019-07-07 23:47:02 85

原创 MySQL-索引优化(三)

存储引擎不能使用索引中范围条件右边的列mysql> EXPLAIN SELECT * FROM staffs where name='july' AND age > 25 and pos = 'manager';+----+-------------+--------+------------+-------+-----------------------+---------...

2019-07-07 23:45:10 104

原创 MySQL-索引优化(二)

不在索引列上做任何操作(计算、函数、(自动或手动)类型转换),会导致索引失效而转向全表扫描。mysql> EXPLAIN SELECT * FROM staffs where name='july';+----+-------------+--------+------------+------+-----------------------+--------------------...

2019-07-07 23:37:41 107

原创 MySQL-索引优化(一)

数据准备CREATE TABLE staffs( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` INT NOT NULL DEFAULT 0 COMMENT '年龄', `pos` VARCHAR(20) NOT NULL DEFA...

2019-07-07 21:30:52 609

原创 多线程-一个线程池的简单实现

设计先行想要实现一个线程池,我们首先要来进行设计,考虑它需要有哪些功能,如何设计和安排这些功能是至关重要的。在我们所要实现的 Java 线程池需要有:任务队列:它能够添加或者删除任务,并且它还需要支持原子操作,不能同时有多个线程从中取出任务。 通知机制:如果任务队列为空,工作线程将会阻塞在获取任务这一操作上;如果这时任务队列中有了新的任务,需要通知工作线程从中获取任务来执行。 线程...

2019-07-07 00:32:27 179

原创 多线程-线程池原理

线程复用我们知道线程池的一个作用是创建和销毁线程的次数,每个工作线程可以多次使用。这个功能就是线程复用。想要了解 Java 线程池是如何进行线程复用的,我们首先需要了解线程的生命周期。线程生命周期下图描述了线程完整的生命周期:在一个线程完整的生命周期中,它可能经历五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、终止(Zombi...

2019-07-07 00:27:32 101

原创 多线程-线程池的简介以及使用

线程池是什么?线程池用于多线程处理中,它可以根据系统的情况,可以有效控制线程执行的数量,优化运行效果。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。线程池的作用在面向对象的编程过程中,创建对象和销毁对象是非常消耗时间和资源的。因此想要最小化...

2019-07-07 00:10:08 199

原创 多线程-Hook线程及捕获线程异常

在Thread类中,关于处理运行时运行异常的API总共有四个, 如下所示:public void setUncaughtExcetionHandler(UncaughtExceptionHandler eh) 为某个特定线程指定UnCaughtExceptionHandler public static void setDefaultUncaughtExceptionHandler(Unca...

2019-07-06 21:38:55 738

原创 多线程-ThreadGroup详细讲解

默认情况下, 新的线程都会被加入到main线程所在的group中, main线程的group名字同线程名。 如同线程存在父子关系一样,ThreadGroup同样也存在父子关系。创建ThreadGrouppublic ThreadGroup(String name) public ThreadGroup(ThreadGroup parent, String nmae)public cl...

2019-07-06 00:15:03 1675 1

原创 多线程-线程间通信(wait、notify和notifyAll)

1.同步阻塞与异步非阻塞1.1同步阻塞消息处理有这样一个系统功能,客户端提交Event至服务器,服务器接收到客户请求之后创建线程处理客户请求,经过复杂的业务计算后将结果返回给客户端。这样的设计存在几个显著的缺陷:同步Event提交,客户端等待时间太长(提交Event时长 + 接收Event创建Thread时间 + 业务处理时间 + 返回结果时长)会陷入阻塞,导致二次提交Eve...

2019-07-05 23:28:15 253

原创 多线程-synchronized中的while和notifyAll

问题为什么是while 而不是if大多数人都知道常见的使用synchronized代码:synchronized (obj) { while (check pass) { wait(); } // do your business}那么问题是为啥这里是while而不是if呢?这个问题 我最开始也想了很久, 按理来说 已经在synchro...

2019-07-05 19:48:41 277

原创 多线程-Thread API详细介绍

1.Sleep方法sleep是一个静态方法,有两个重载参数,一个需要转入毫秒数,另一个需要传入毫秒和纳秒数。public static void sleep(long millis) throws InterruptedException;public static void sleep(long millis,int nanos) throws InterruptedExceptio...

2019-07-04 23:25:51 165

原创 多线程-生命周期详解

问题:线程Thread执行了start方法就表示该线程已近执行了忙?下面看线程生命周期图由以上图可以知道,线程的生命周期大致可以分为以下五个阶段:NEWRUNNABLERUNNINGBLOCKEDTERMINATED1.NEW状态当我们new出一个Thread类的时候,此时它并不在执行状态,并且它并没有调用Start方法,那么此时线程的状态为New。NEW状态通过Star...

2019-07-04 22:54:35 346

原创 多线程-使用Synchronized需要注意的问题

1.与Monitor关联的对象不能为空意思就是说你Synchronized() 括号中的对象不能为nullprivate final Object obj = null;public void syncMethod(){ Synchronized(obj){ }}2.synchronized作用域太大由于synchronized 存在排他性,如果synchro...

2019-07-04 19:50:58 623

原创 多线程-Synchronized的使用

1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2.实现原理synchronized可以保证方法或者代码块在运行...

2019-07-04 18:47:33 216

原创 SpringBoot整合Redis-Cluster集群

1.添加相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.添加redis配置# Red...

2019-07-04 00:57:04 10446

原创 SpringBoot整合Redis-哨兵主从服务

1.配置application.properties##单服务器spring.redis.host=39.107.119.256##单端口spring.redis.port=6381## 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=300## Redis数据库索引(默认为0) spring.redis.database=...

2019-07-04 00:45:46 761

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除