自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

青藤光年的博客

知道的越多,越发现自己的渺小

  • 博客(175)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java 集合框架系列十二:Map 和 AbstractMap 详解

Map 类定义/** * * @see HashMap * @see TreeMap * @see Hashtable * @see SortedMap * @see Collection * @see Set * @since 1.2 */public interface Map<K,V> {}Map 是一个顶级接口,它也是 Java 集合框架的一员,Map 是一种基于 key-value 键值对的数据格式,并且 key 值不可以重复,每个 key 最多只能对应

2020-09-08 23:11:34 398

原创 Java 集合框架系列十七:JDK 1.8 Collections 详解

Collections 是在 JDK 1.2 时提供的用来操作集合的工具类,此类只包含对集合操作的静态方法。Collections APIpublic class Collections { // 确保不可实例化 private Collections() { } /** * 这些属性是 Collections 的调优参数。通常 Collections 的许多算法都有两个实现, * 一个适用于随机访问,另一个适合顺序访问。通常随机访问在列表数

2020-09-08 21:30:59 920

原创 Java 集合框架系列十五:JDK 1.8 Hashtable 详解

Hashtable 继承关系Hashtable 是 JDK 1.0 提供的类,继承了 Dictionary 类,Dictionary 类现在已经标记为过时了,Hashtable 实现了 Map 接口,这是在 JDK 1.2 时改动的,还实现了 Cloneable 和 Serializable 接口,说明 Hashtable 支持浅拷贝、序列化与反序列化。具体的实现可以查看 Hashtable 的 clone()、writeObject()、readObject() 方法。public class Ha

2020-09-08 19:28:28 416

原创 Java 集合框架系列十四:JDK 1.8 LinkedHashMap 详解

LinkedHashMap

2020-09-08 19:23:44 437

原创 Java 集合框架系列十三:JDK 1.8 HashMap 详解

HashMap 类图HashMap 继承自 AbstractMap,并实现了 Map、Cloneable、Serializable 接口。说明 HashMap 具有 Map 的全部实现,且 HashMap 默认支持浅拷贝,序列化和反序列化。具体的实现可以查看 HashMap 的 clone()、writeObject()、readObject() 方法。通过 HashMap 的文档可以得到以下信息:HashMap 是以 key-value 键值对的形式保存数据的,但是 HashMap 无法保证 k

2020-09-08 19:21:56 216

原创 Java 集合框架系列十一:JDK 1.8 TreeSet 详解

TreeSet 继承关系类文档解读老规矩,先通过 TreeSet 的类文档了解一下能得到哪些信息。TreeSet 是 JDK 1.2 提供的基于 TreeMap 的 NavigableSet 实现。TreeSet 支持元素的自然排序和按照在创建时指定的 Comparator 比较器进行排序。TreeSet 的基本操作(add、remove 和 contains)的时间复杂度是 log(n) 。TreeSet 是非线程安全的。TreeSet 的迭代器是 fail-fast 策略的。Tre

2020-09-08 19:08:47 572

原创 Java 集合框架系列十:JDK 1.8 Comparable 和 Comparator 详解

Comparator 和 Comparable 两者都属于集合框架的一部分,都是在 JDK 1.2 时提供的用来在对象之间进行比较的接口,但两者又有些许的不同。先来看一下 Comparable 的例子,定义实体类 Student,实现 Comparable,重写 compareTo 方法:public class Student implements Comparable<Student> { private String name; private Integer age;

2020-09-08 18:56:26 802

原创 Java 集合框架系列九:JDK 1.8 SortedSet 和 NavigableSet 详解

SortedSet 继承关系SortedSet 直接继承了 Set,是 JDK 1.2 提供的接口,SortedSet 意为按照对象的比较方法对元素排序,而不是元素的插入顺序,插入顺序用 LinkedHashSet 来保存即可,SortedSet 是以自然排序或者按照 Comparator comparator() 比较器排序。SortedSet 已知实现类有:ConcurrentSkipListSet 和 TreeSet。SortedSet 要求插入到 SortedSet 中的元素必须实现 Comp

2020-09-08 18:43:01 504 1

原创 Java 集合框架系列八:JDK 1.8 HashSet 和 LinkedHashSet 详解

HashSet 类图HashSet 是在 JDK 1.2 提供的类,是 AbstractSet 的子类。HashSet 是 Set 集合比较常用的实现类。public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {}类文档解读老规矩,先通过 HashSet 的类文档了解一下能得到哪些信息。HashSet 是一个基于哈希表

2020-09-08 18:30:14 346

原创 Java 集合框架系列七:JDK 1.8 Set 和 AbstractSet 详解

Set 继承关系Set 直接继承了 Collection 接口,也是在 JDK 1.2 提供的。Set的结构及实现都和Map保持高度一致,通过后面的源码分析你就可以看出来 Set 内部大量使用了 Map 的实现作为数据存储。类文档解读老规矩,先通过 Set 的类文档了解一下能得到哪些信息。Set 是一个不允许重复的集合,Set 是数学上的集合的抽象,更正式地说,集合不包含一对元素 e1 和 e2 满足 e1.equals(e2)。Set 最多只能包含一个 null 元素或者不允许 null 元

2020-09-08 18:04:14 560

原创 Java 集合框架系列六:JDK 1.8 Vector 详解

Vector 继承关系Vector 是在 JDK 1.0 就提供的类,在 JDK 1.2 对 Vector 进行改造后,Vector 和 ArrayList 都继承实现了相同的类和接口。public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {}Vector 实现了 RandomAcc

2020-09-08 17:47:07 383

原创 Java 集合框架系列五:JDK 1.8 LinkedList 详解

LinkedList 继承关系LinkedList 也是 JDK 1.2 就提供的集合类,它继承了 AbstractSequentialList 抽象类,并实现了 Deque、List、Cloneable、Serializable 接口。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, jav

2020-09-08 17:46:40 275

原创 Java 集合框架系列四:JDK 1.8 ArrayList 详解

ArrayList 继承关系ArrayList 是 JDK 1.2 提供的 List 实现类,继承了 AbstractList 抽象类,实现了 Cloneable、Serializable、RandomAccess、List 接口。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializ

2020-09-08 17:45:52 289

原创 Java 集合框架系列三:JDK 1.8 List 和 AbstractList 和 AbstractSequentialList 详解

List 继承关系List 是在 JDK 1.2 提供的接口,继承了 Collection 接口,List 代表有序集合,List 可以精确控制列表中每个元素的插入位置,可以通过索引访问元素,和 Set 不同得是 List 允许插入重复的元素,而且 List 的实现类如果允许插入 null 元素,那么可以存在多个 null 元素。List 在 Collection 接口的基础上添加了一系列针对其特性的方法,如通过索引操作元素。有些 List 的实现可能对包含的元素有限制。例如有些实现禁止 null 元

2020-09-08 17:45:10 248

原创 Java 集合框架系列二:JDK 1.8 Iterable 和 Iterator、Enumerator 和 ListIterator 详解

Iterable当我们想要遍历集合时,Java 为我们提供了多种选择,通常有以下三种写法:写法 1:for 循环 for (int i = 0, len = strings.size(); i < len; i++) { System.out.println(strings.get(i)); }写法 2:foreach 循环 for (String var : strings) { System.out.println(var);

2020-09-08 17:43:53 325

原创 Java 集合框架系列一:JDK 1.8 Collection 和 AbstractCollection 详解

Collection 继承关系public interface Collection<E> extends Iterable<E> {} Collection 是在 JDK 1.2 提供的接口,它继承了 Iterable 接口,说明 Collection 的所有实现类都支持 for-each 循环。类文档解读老规矩,先通过 Collection 的类文档了解一下能得到哪些信息。Collection 是 Java 集合框架的根接口,集合是指用来存储一组对象的容器

2020-09-08 17:42:26 317

原创 架构师成长之路一——使用docker搭建Maven私服

搭建Maven私服是一个架构师必备的基础技能,一般大中型互联网企业都会搭建自己的Maven私服,私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果 私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。Maven私服的优点节省自己的外网带宽,大量...

2019-09-21 17:43:48 411

原创 OAuth2.0系列六:OAuth2.0四种授权模式总结

授权模式总结前面几节已经通过代码介绍了OAuth2.0四种授权模式的简单使用,现在来总结一下四种授权模式的特点授权码模式通过前端渠道客户获取授权码 通过后端渠道,客户使用authorization code去交换access Token和可选的refresh token 假定资源拥有者和客户在不同的设备上 最安全的流程,因为令牌不会传递经过user-agent密码模式使用用...

2019-09-12 10:19:27 1593

原创 OAuth2.0系列五:OAuth2.0客户端凭证

凭证模式客户端通过客户端的id和secret申请授权,这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。代码实战第一步,创建maven应用client_server,pom文件如下:<parent> <artifactId>microservice-parent</artifactId&gt...

2019-09-11 19:09:48 2267

原创 OAuth2.0系列四:OAuth2.0简化模式

简化模式有些纯前端应用,必须将令牌储存在前端。那么可以使用简化模式(隐藏式)来申请授权,颁发令牌。浏览器向授权服务器申请授权,并设置response_type=token,表示直接返回令牌 授权服务器通过校验后跳转到重定向地址并返回token 浏览器通过token去申请资源这种方式把令牌直接传给前端是很不安全的。因此,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通...

2019-09-11 13:17:30 1933

原创 OAuth2.0系列三:OAuth2.0密码模式

密码模式如果你高度信任某个第三方应用,可以把用户名和密码告诉这个第三方应用,第三方应用拿到用户名和密码去申请授权获取令牌。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。用户向第三方客户端提供用户名和密码...

2019-09-11 12:47:03 2816 2

原创 OAuth2.0系列二:OAuth2.0授权码模式

OAuth2.0授权模式OAuth2.0支持如下四种授权模式,其中安全级别最高的是授权码模式。我们先了解一下在代码中如何简单的实现四种授权模式,下一篇在介绍关于四种授权模式的选型。授权码 密码式 隐藏式 客户端凭证注意:不管通过哪种授权模式获取授权,第三方应用在获取授权之前,都必须在系统备案,拿到客户端ID(Client ID)和客户端密钥(Client Secret)后再通过OA...

2019-09-11 12:45:22 1578 2

原创 OAuth2.0系列一:微服务中的安全架构体系

OAuth2.0首先,需要明确一个概念,OAuth2并不是一个认证协议,它是一个授权框架,仅用于授权代理机制,用来授权第三方应用,获取用户数据。那么OAuth2到底是什么?下面通过一个例子了解一下。假设我在一个云存储服务上有一些文件,但是这个云存储服务没有打印功能,我想通过一个云打印服务来打印云存储服务上的文件,那么通过什么办法可以实现我这个需求呢?方式一:用户名密码复制通过这...

2019-09-11 11:11:45 793

原创 Docker安装指定版本的zookeeper

通过Docker安装各种工具包极其方便,这里说一下如何安装指定版本的zookeeper镜像。首先说一下docker search zookeeper,这个命令会搜索zookeeper的所有镜像,最上面的这个是官方维护的镜像。然后通过docker pull zookeeper命令可以拉取zookeeper镜像安装,但是这样会拉取最新的镜像。由于最新版本可能不稳定或者各种小问题,所以我们拉...

2019-08-02 09:34:28 3132 2

原创 Poi数据导出到Excel示例

先上代码:定义需要导出的实体类@Datapublic class Student implements Serializable { private Integer id; private String studentName; private Integer age; private LocalDate birth; private Stri...

2019-05-15 17:07:22 334

转载 WebStorm破解

Webstorm2018.3版本可以破解转发自:https://blog.csdn.net/xiaoxiong_jiaxin/article/details/83106915

2019-05-13 17:31:09 1089

原创 springcloud上传文件报错

Spring Cloud上传文件报如下错误:The temporary upload location [/tmp/tomcat.5260880110861696164.8090/work/Tomcat/localhost/ROOT] is not valid解决办法:在Zuul网关添加如下配置:spring.servlet.multipart.max-file-size=2MB...

2019-05-13 12:43:19 1031

原创 关于并发编程的书籍推荐

并发编程是Java进阶的必备技能,我们总是觉得并发编程很难,其实并没有那么可怕,只要浸心学习就会有所收获,这里推荐四本书,并介绍一下每本书的特点,供大家从自己的实际情况选择,这四本书基本上是市面上比较流行、权威的了。《Java多线程编程核心技术》这本书比较基础,写的比较细,代码示例比较多,包含了线程的基础使用、线程锁的使用(Synchronized和ReentrantLock)、单例模式、...

2019-04-23 10:48:05 5676 4

原创 Windows安装配置Mycat

第一步,安装JDK并配置环境变量第二步,安装MySQL第三步,创建mycat数据库并创建user表添加一条数据第四步,下载Mycat下载地址:https://github.com/MyCATApache/Mycat-download我下载的版本是1.5第四步,解压压缩包,最好放到没有中文路径的目录第五步,安装mycat,使用管理员身份打开cmd,进入D:...

2019-04-11 10:53:29 821

原创 Centos7 安装和配置MySQL5.7

第一步,下载MySQL安装[root@localhost ~]# cd /home/data/[root@localhost data]# lsget-docker.sh nginx-1.10.1 nginx-1.10.1.tar.gz redis-5.0.3 redis-5.0.3.tar.gz server-jre-8u131-linux-x64.tar.gz zooke...

2019-03-29 15:56:13 26380 32

原创 分布式锁实现——基于redis

在高并发场景下,锁是必不可少的存在,可以避免脏读的发生,现在定义一个场景来模拟高并发场景下有什么问题。场景:用户下单,每下一次单就把库存数减一。步骤一,创建springboot项目distributed_lock_redis步骤二,引入依赖<groupId>curise.distributed.actualize</groupId> <art...

2019-03-21 11:17:29 815

原创 SpringBoot 异步调用方法并接收返回值

项目中肯定会遇到异步调用其他方法的场景,比如有个计算过程,需要计算很多个指标的值,但是每个指标计算的效率快慢不同,如果采用同步执行的方式,运行这一个过程的时间是计算所有指标的时间之和。比如:方法A:计算指标x,指标y,指标z的值,其中计算指标x需要1s,计算指标y需要2s,指标z需要3s。最终执行完方法A就是5s。现在用异步的方式优化一下方法A异步调用方法B,方法C,方法D,方法B,方...

2019-03-14 14:37:46 7384

原创 Vue+Element-ui table type="expand" 如何动态显示行的展开符

Element-ui提供了动态展开行的功能,如图(截自官方文档):如图:通过点击 &gt; 符号就可以展开这行隐藏的信息了,但是需求是有的行需要展开,有的不需要,不需要的行怎么隐藏 &gt; 符号?可以通过row-class-name方法实现。&lt;el-table :data="tableData" style="width: 100%...

2019-03-14 13:09:15 18292 11

原创 Redis集群——Redis4.0.1高可用集群水平扩展

根据Redis4.0.1版本高可用集群模式搭建(3.9.2版本适用)这篇文章已经可以成功搭建一个由三个小集群构成的redis高可用集群,现在来对这个集群进行水平扩展,再次添加一个主节点和一个从节点。PS:由于本人的电脑配置有限,就不再搞一个虚拟机了,仍然在192.168.1.12机器上添加这两个节点。扩展节点现在192.168.1.12机器上有7003和7006两个节点,添加7007和...

2019-03-02 17:33:48 462

原创 Redis集群——SpringBoot连接Redis集群(带密码)

第一步,新建项目maven项目,添加依赖&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc...

2019-02-28 22:35:02 16443 6

原创 Xshell报错:Xshell Socket error Event: 32 Error: 10053

如果XShell以前好好地突然连接不上或者连上一会就掉线,记住 先确定自己的ip是否固定,一定要改成固定ip,一般都是ip冲突造成的,

2019-02-28 21:45:43 8440

原创 Redis集群——Redis高可用集群添加密码

线上环境的redis集群肯定要有密码的,今天介绍一下redis-cluster如何配置密码第一步,修改每个redis-700x.conf配置文件,注意密码必须一致masterauth 123456requirepass 123456第二步,删除每个节点的配置文件注意,如果你使用redis-trib.rb命令会提示无法连接,如[root@localhost src]# ....

2019-02-28 21:44:14 3083

原创 Redis集群——Redis4.0.1版本高可用集群模式搭建(3.9.2版本适用)

从reids3.0版本以后实现redis高可用不只是通过哨兵模式实现了,redis提供了redis-cluster模式,下面比较一下两种模式Redis集群模式比较哨兵模式在 redis3.0以前的版本要实现集群一般是借助哨兵 sentinel工具来监控 master节点的状态,如果 master节点异常,则会主从切换,将某一台 slave作为 master,哨兵的配置略微复杂,并且...

2019-02-27 18:20:44 871

转载 sqlServer取出每个分组第一条数据

用row_number函数可以解决。1、创建测试表及插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 create table test (id int, name varchar(10), score int, classna...

2019-02-21 11:25:53 11361

转载 集群,分布式,微服务概念和区别理解

转载自:集群,分布式,微服务概念和区别理解概念:集群是个物理形态,分布式是个工作方式。分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上1:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。举例:就比如新浪网,访问的人多了,他可以做...

2019-01-23 11:22:27 930 1

空空如也

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

TA关注的人

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