自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星空

广州程序员一枚~

  • 博客(45)
  • 资源 (3)
  • 收藏
  • 关注

原创 遍历hashmap 的四种方法

以下列出四种方法public static void main(String[] args) {Map<String,String> map=new HashMap<String,String>(); map.put("1", "value1"); map.put("2", "value2"); map.put("3", "value3"); ...

2019-11-27 22:48:03 171

原创 Springboot集成RabbitMQ一个完整案例

springboot 集成 RabbitMQ 非常简单,如果只是简单的使用配置非常少,springboot 提供了 spring-boot-starter-amqp 对消息各种支持。1、配置pom文件,主要是添加spring-boot-starter-amqp的支持<dependency> <groupId>org.springframework.boot<...

2019-11-26 14:04:56 1157

原创 vue如何保存登录状态到全局?【vue状态管理】

如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习一下vuex是如何修改状态值的:我们新建一个vue项目(这里由于我们是讲解vuex,所以对于vue项目的创建我们不会讲解太详细);在命令行输入 vue init webpack web(使用webp...

2019-11-24 23:17:05 2621

原创 centos 云服务器部署Node.js项目

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效,非常适合运行在分布式设备的数据密集型的实时应用。Node.js 的包管理器 npm,是全球最大的开源库生态系统。典型的应用场景包括:实时应用:如在线聊天,实时通知推送等等(如socket.io...

2019-11-22 01:10:37 335

原创 云服务器Centos7.0 配置JAVA运行环境 (jdk8+tomcat7+mysql)

文章目录配置JAVA环境配置Tomcat安装Mysql配置JAVA环境1.查看是否联网2. 查看yum库中的Java安装包yum -y list java*输入之后回车,会看到各种不同版本的jdk包3. 使用yum安装Java环境安装java-1.8.0版本的所有相关程序yum -y install java-1.8.0-openjdk*等待一小会,等出现complete!说明...

2019-11-21 22:18:58 353

原创 Java工程师必学知识点【吊打面试官系列】

2019-11-17 10:37:26 612

原创 Guava Cache用法介绍

Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效。Guava官网介绍,下面的这几种情况可以考虑使用Guava Cache:愿意消耗一些内存空间来提升速度。预料到某些键会被多次查询。缓存中存放的数据总量不会超出内存容量。所以,可以将程序频繁用到的少量数据存储到Guava Cache中,以改善程序性能。下面对Guava Cache的用法进...

2019-11-17 00:42:52 247

原创 ISP缓存机制及登录串号现象

ISP缓存的技术说明:1、ISP缓存,本身是一种宽带接入提供商给网页批量访问加速的技术。ISP会将当前访问量较大的网页内容放到ISP服务器的缓存中,当有新的用户请求相同内容时,可以直接从缓存中发送相关信息,不必每次都去访问真正的网站,从而加快了不同用户对相同内容的访问速度,同时也能节省网间流量结算成本。2、ISP缓存主要以缓存静态页面为主,比如新浪的新闻页。3、 如果ISP的缓存中的网页带有...

2019-11-17 00:20:11 536

原创 缓存淘汰策略——最近最久未使用策略(LRU)

什么是缓存淘汰策略?缓存位于内存中,而内存的空间很有限,所以缓存也有一个能使用的最大空间,当缓存中的数据超过这个最大空间时,就要使用缓存淘汰策略淘汰一些数据,空出空间给其他数据使用。最近最久未使用策略最近最久未使用策略,优先淘汰最久未使用的数据,也就是上次被访问时间距离现在最久的数据。该策略可以保证内存中的数据都是热点数据,也就是经常被访问的数据,从而保证缓存命中率。实现方式以下是基于 ...

2019-11-16 23:46:55 648

原创 策略模式

一、什么是策略模式  策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。  再比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这些算法是随时都可能互相替换的,比如针对同一件商品,今天打八折、...

2019-11-16 22:46:47 130

原创 状态模式

状态模式的结构  用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式所涉及到的角色有:环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。抽象状态(St...

2019-11-16 22:20:20 157

原创 观察者模式

从案例入手:以下是之前做的“产品详情页”的长截图,这里讲解一下这个页面与“观察者模式”的关系:在活动季,底部的“开始预订按钮”会变成“秒杀按钮”(所谓秒杀按钮,就是一个显示成灰色不可点击,并且一直处于倒计时状态的按钮,直到到达秒杀时间,比如0点整,秒杀按钮才由灰色变为橘黄色,并且可以点击), 当秒杀时间到时,不光底部的“秒杀按钮”变为“开始预订按钮”,可选班期的几个按钮也从灰色不可点击状态,变为...

2019-11-16 17:21:30 124

原创 中介者模式

中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式的本质:解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系。应用思路:如果一个系统中,对象之间的联系呈网状结构,对象之间存在大量的多...

2019-11-16 16:17:11 176

原创 命令模式

介绍命令模式是一种行为型设计模式。在命令模式中,所有的请求都会被包装成为一个对象。参考了一下其他关于命令模式的文章,其中有谈到说是可以用不同的请求对客户进行参数化。我对这句话的理解是,因为将请求封装成为对象,所以客户的所有操作,其实就是多个命令类的对象而已,即参数化了。命令模式的最大的特点就是将请求的调用者与请求的最终执行者进行了解耦。调用者需要关心的仅仅是请求对象是否被执行了,对于请求...

2019-11-16 15:30:13 175

原创 代理模式

什么是代理模式?  代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。  举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车...

2019-11-16 13:01:27 153

原创 享元模式

一、什么是享元模式说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它的引用指向”adam“,这样就实现了”adam“字符串再内存中...

2019-11-16 12:32:55 162

原创 外观模式

一、前言  外观模式是一种非常简单的模式,简单到我们经常都会使用,比如对于类A和B,如果两者需要交互,经过一定的处理过程才能实现某一个具体的功能,那么我们可以将这个处理的过程定义为一个新的类,然后在这个类里面将类A和B的处理步骤整合在一起,对于外界我们只暴露新的类中的这个接口,这样代码的复用性就非常的好了,可以将这些代码作为组件去让其他程序去使用,这在我们的开发之中是非常常见的。甚至我们可以将抽...

2019-11-16 00:55:56 231

原创 装饰者模式

装饰者模式是为了给已有的对象增加一些逻辑,但是不改变已有对象的代码,下面是类图:从上图可以看出,装饰者 Decorator与需要被装饰的对象 ContcreteComponent 实现了相同的接口。具体怎么装饰则由 Decorator 的子类 ConcreteDecorator 决定。Java 中使用装饰者模式的一个典型的例子是 I/O 对象的创建,比如创建一个 BufferedInputS...

2019-11-16 00:27:18 171

原创 桥接模式

模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合。对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥...

2019-11-15 23:30:04 284

原创 适配器模式

适配器模式适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适...

2019-11-15 22:34:54 231

原创 单例模式

1. 模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这...

2019-11-15 13:41:55 190

原创 建造者模式

1. 模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须...

2019-11-15 13:38:10 137

原创 openJDK之如何下载各个版本的openJDK源码

1、如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢?2、现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢?1.openJDK的项目链接:http://hg.openjdk.java.net/,如下图1所示2.下载openJDK源码以下载openJDK8为例。2.1 点击图1中的jdk8u,就得到如下图2所...

2019-11-15 13:11:11 938

原创 抽象工厂模式

1. 模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。为了更清晰地理解工厂方法模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海...

2019-11-13 00:47:01 227

原创 工厂方法模式

工厂方法模式在jdk中的应用改为:1、https://www.hollischuang.com/archives/14082、jdbc连接(工厂方法模式扩展)产品对象的重复使用:工厂对象将已经创建过的产品保存到一个集合(如数组、List等)中,然后根据客户对产品的请求,对集合进行查询。如果有满足要求的产品对象,就直接将该产品返回客户端;如果集合中没有这样的产品对象,那么就创建一个新的满足要求...

2019-11-13 00:34:43 679

原创 简单工厂模式

文章目录1. 模式动机2. 模式定义3. 模式结构4. 时序图5. 代码分析6. 模式分析7. 实例8. 简单工厂模式的优点9. 简单工厂模式的缺点10. 适用环境11. 模式应用12. 总结1. 模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈...

2019-11-12 14:29:22 523

原创 设计模式分类

创建型模式简单工厂模式工厂方法模式抽象工厂模式建造者模式单例模式结构型模式适配器模式桥接模式装饰模式外观模式享元模式代理模式行为型模式命令模式中介者模式观察者模式状态模式策略模式...

2019-11-12 14:17:42 173

原创 看懂UML类图和时序图

文章目录从一个示例开始类之间的关系泛化关系(generalization)实现关系(realize)聚合关系(aggregation)组合关系(composition)关联关系(association)依赖关系(dependency)时序图这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时...

2019-11-12 14:14:09 373

原创 Java实现线程安全的几种方式

文章目录一、不可变二、互斥同步三、非阻塞同步1. CAS2. AtomicInteger3. ABA四、无同步方案1. 栈封闭2. 线程本地存储(Thread Local Storage)3. 可重入代码(Reentrant Code)多个线程不管以何种方式访问某个类,并且在主调代码中不需要进行同步,都能表现正确的行为。线程安全有以下几种实现方式:一、不可变不可变(Immutable)的对...

2019-11-11 22:23:20 2721

原创 Java内存模型三大特性

一、原子性Java 内存模型保证了 read、load、use、assign、store、write、lock 和 unlock 操作具有原子性,例如对一个 int 类型的变量执行 assign 赋值操作,这个操作就是原子性的。但是 Java 内存模型允许虚拟机将没有被 volatile 修饰的 64 位数据(long,double)的读写操作划分为两次 32 位的操作来进行,即 load、st...

2019-11-11 21:37:07 916

原创 主内存和工作内存交互

Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互操作。read:把一个变量的值从主内存传输到工作内存中load:在 read 之后执行,把 read 得到的值放入工作内存的变量副本中use:把工作内存中一个变量的值传递给执行引擎assign:把一个从执行引擎接收到的值赋给工作内存的变量store:把工作内存的一个变量的值传送到主内存中write:在 store 之后...

2019-11-11 20:37:42 388

原创 J.U.C - 其它组件

FutureTask可用于异步获取执行结果或取消执行任务的场景。当一个计算任务需要执行很长时间,那么就可用 FutureTask 来封装该任务,主线程在完成自己的任务之后再去获取结果。在介绍 Callable 时我们知道它可以有返回值,返回值通过 Future 进行封装。FutureTask 实现了 RunnableFuture 接口,该接口继承自 Runnable 和 Future 接口,这...

2019-11-11 20:29:39 148

原创 J.U.C - AQS

java.util.concurrent(J.U.C)大大提高了并发性能,AQS 被认为是 J.U.C 的核心。AbstractQueuedSynchronizer采用了出口协议的概念,位于java.util.concurrent包下的大部分状态依赖类都构建于它之上。一、CountDownLatch是一个同步工具类,它允许一个或多个线程等待,直到其他线程执行完之后再执行。它维护了一个计数器...

2019-11-11 20:19:12 190

原创 Java线程之间的协作

当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调。join()在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。对于以下代码,虽然 b 线程先启动,但是因为在 b 线程中调用了 a 线程的 join() 方法,b 线程会等待 a 线程结束才继续执行,因此最后能够保证 a 线程的输出先于 b 线程...

2019-11-11 20:05:48 170

原创 Java的互斥同步机制

Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。synchronized1.同步一个代码块public void func() { synchronized (this) { // ... }}它只作用于同一个对象,如果调用两个对象上...

2019-11-11 19:53:22 525

原创 理解Java多线程高并发Executor框架的使用

Java提供了丰富的多线程接口给我们使用,下面这张图展示的我理解的之所以要用多线程高并发处理任务的关系图:Executor框架和其扩展接口ExecutorService为我们提供了管理线程池的一些方法(如shutdown()、shutdownNow() 和submit(Runnable task) );Executors类给我们提供了很多创建线程池的静态方法:(newCachedThread...

2019-11-11 19:32:24 210

原创 校招对项目实战要求分析

一、考察目的对业务的理解程度;对热门技术的掌握程度二、着力点从业务角度分析项目难点;多用热门技术,如:缓存,集群,消息队列;建议做高并发项目三、建议项目尽量部署到云服务器上,简历上最好附上访问地址;代码开源到Github,写好项目文档...

2019-11-10 23:15:03 315

原创 Java后端学习路线(校招前准备)

Java学习规划推荐学习网站:CS-Notes求职目标:要选择一二线大厂的话,比较注重基础,如果是其他互联网公司,比较注重语言和框架,因为招了人之后要上手做项目。学习理论:一、并发:推荐《Java并发编程实战》二、设计模式:推荐《Head First 设计模式》三、框架:主要是Spring框架,推荐《精通Spring 4.x》四、中间件:缓存和消息队列缓存:主要是Red...

2019-11-10 23:04:54 1335

原创 Comparable和Comparator接口时干什么的?列出它们的区别

一、对Comparable 的解释Comparable是一个排序接口此接口给实现类提供了一个排序的方法,此接口有且只有一个方法public int compareTo(T o);compareTo方法接受任意类型的参数,来进行比较list或者数组实现了这个接口能够自动的进行排序,相关类的方法有Collections.sort(),Arrays.sort();SortedMap 接口的...

2019-11-09 21:30:36 1047

原创 如何通过反射创建对象

通过反射创建对象的两种方法:通过Class字节码对象newInstance();(默认通过无参构造创建)通过获取构造器getConstructor(Class<?>…parameterTypes);(通过有参的构造器,参数可以指定具体类型和多个数量)代码:假设我们有一个用户类Userpackage test.java.zxj.test_project; pub...

2019-11-09 20:12:20 3782

冒泡排序及三种优化方式代码

此资源是本人演示冒泡排序及其优化方案的示例代码,欢迎大家下载。关于冒泡排序的介绍,也可以参考本人博文https://blog.csdn.net/Abel_Liujinquan/article/details/88880483

2019-03-28

《Java核心技术+卷1:基础知识(原书第9版)》

一直以来,《Java核心技术》都被认为是面向高级程序员的经典教程和参考书,它内容翔实、客观准确,不拖泥带水,是想为实际应用编写健壮Java代码的程序员的首选。

2019-03-21

空空如也

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

TA关注的人

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