自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 143

原创 python-异步协程

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

2019-07-18 03:01:19 302

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

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

2019-07-17 00:41:26 430

原创 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 242

原创 MySQL高级知识——索引

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

2019-07-09 01:52:44 245

原创 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 653

原创 MySQL-EXISTS

提前准备建立两张表并为其添加一些数据一张会员表,一张会员下单表。会员表数据id user email 1 abei abei@nai8.me 2 wh abei@maige123.com 3 liuhuan 267765@qq.com 订单表id user_id create_time ......

2019-07-08 23:50:06 1332

原创 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 347

原创 MySQL-索引优化(八)

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

2019-07-08 03:33:33 156

原创 MySQL-索引优化(七)

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

2019-07-08 03:28:07 268

原创 MySQL-索引优化(六)

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

2019-07-08 03:19:46 113

原创 MySQL-索引优化(五)

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

2019-07-08 03:18:43 152

原创 MySQL-索引优化(四)

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

2019-07-07 23:47:02 98

原创 MySQL-索引优化(三)

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

2019-07-07 23:45:10 117

原创 MySQL-索引优化(二)

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

2019-07-07 23:37:41 117

原创 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 616

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

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

2019-07-07 00:32:27 189

原创 多线程-线程池原理

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

2019-07-07 00:27:32 113

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

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

2019-07-07 00:10:08 236

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

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

2019-07-06 21:38:55 765

原创 多线程-ThreadGroup详细讲解

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

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

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

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

2019-07-05 23:28:15 273

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

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

2019-07-05 19:48:41 296

原创 多线程-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 184

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

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

2019-07-04 22:54:35 374

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

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

2019-07-04 19:50:58 672

原创 多线程-Synchronized的使用

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

2019-07-04 18:47:33 226

原创 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 10517

原创 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 776

原创 Redis-主从同步配置

1.安装Redis##下载redis安装包wget http://download.redis.io/releases/redis-3.0.4.tar.gz##解压tar -xzvf redis-3.0.4.tar.gzcd redis-3.0.4#执行make命令编译makemake install安装完成后,会在/usr/local/bin目录下生成下面几个可执行文件,它...

2019-07-04 00:09:33 160

原创 Redis常用技术-----流水线(Pipelined)

在事务中Redis提供了队列,可以批量执行任务,这样性能就比较高,但使用multi...exec事务命令是有系统开销的,因为它会检测对应的锁和序列化命令。有时我们希望在没有任何附加条件的情况下使用队列批量执行一系列命令,这时可以使用Redis的流水线(pipelined)技术。实际中Redis的读写速度十分快,而系统的瓶颈往往是在网络通信中的延时。比如当命令1在T1时刻发送到Redis服务器后...

2019-07-03 23:40:01 372

原创 Redis-主从同步模式

Redis的性能很好,但在某些情况下还是不能满足我们的需求,比如过多的用户进入主页,导致Redis被频繁访问,此时就存在大量的读操作。在一些秒杀场景中,一瞬间有成千上万的读请求到达Redis服务器,显然单靠一台Redis服务器是不够的。一些服务网站对安全性有较高的要求,当主服务器不能工作的时候,需要从服务器代替原来的主服务器,作为灾备,以保证系统可以正常运行。因此更多的时候我们希望读写分离,读写分...

2019-07-03 23:24:08 190

原创 Redis-哨兵(Sentinel)模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。一.哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Red...

2019-07-03 23:18:44 103

原创 Redis的三种集群方式

redis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照...

2019-07-03 23:04:43 131

原创 RedisTemplate常用集合使用说明-opsForZSet(5)

1、add(Kkey,Vvalue, doublescore)添加元素到变量中同时指定元素的分值。redisTemplate.opsForZSet().add("zSetValue","A",1); redisTemplate.opsForZSet().add("zSetValue","B",3); redisTemplate.opsForZSet().add("zSet...

2019-07-03 22:16:53 10237 3

原创 RedisTemplate常用使用说明-opsForSet(4)

1、add(Kkey,V...values)向变量中批量添加值。redisTemplate.opsForSet().add("setValue","A","B","C","B","D","E","F"); 2、members(Kkey)获取变量中的值。Set set = redisTemplate.opsForSet().members("setValue...

2019-07-03 21:45:48 3386

原创 RedisTemplate常用使用说明-opsForHash(3)

1、put(Hkey,HKhashKey,HVvalue)新增hashMap值。redisTemplate.opsForHash().put("hashValue","map1","map1-1"); redisTemplate.opsForHash().put("hashValue","map2","map2-2"); 2、values(Hkey)获取指...

2019-07-03 21:27:23 33188

原创 RedisTemplate常用使用说明-opsForList(2)

1、leftPush(Kkey,Vvalue)在变量左边添加元素值。redisTemplate.opsForList().leftPush("list","a"); redisTemplate.opsForList().leftPush("list","b"); redisTemplate.opsForList().leftPush("list","c"); ...

2019-07-03 01:34:50 6307 1

原创 RedisTemplate常用使用说明-opsForValue(1)

1.set(Kkey,Vvalue) 新增一个字符串类型的值,key是键,value是值。redisTemplate.opsForValue().set("stringValue","bbb"); 2.get(Objectkey) 获取key键对应的值。String stringValue = redisTemplate.opsForValu...

2019-07-02 01:35:22 4735 1

原创 Zuul-限流(Spring Cloud Zuul RateLimit)

简述Spring Cloud Zuul RateLimit项目Github地址:https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit该包实现了在Zuul对每个服务进行限流。提供的几种限流方式:1. 认证用户(Authenticated User)使用已认证的用户名(username)或'anonymous'...

2019-07-01 22:58:02 921

空空如也

空空如也

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

TA关注的人

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