- 博客(66)
- 资源 (8)
- 收藏
- 关注
原创 nginx的安装以及配置
一、安装官网https://nginx.org/en/download.html命令# 下载wget https://nginx.org/download/nginx-1.14.2.tar.gz# 解压tar -zxvf nginx-1.14.2.tar.gz# 检测当前系统环境,以确保能成功安装nginx./configure# 安装make&make instal...
2019-05-25 19:37:04
1069
原创 hexo的安装以及配置
一、前言使用markdown写东西比较多,所以决定弃掉之前自己用java写的一个blog网站,改用hexo。二、开始1、安装git以及node# 安装gityum install git# 安装nodecd /usr/local/download# node下载安装包wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux...
2019-05-25 19:36:15
781
原创 委派模式
一、定义委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。二 原理类B和类A是两个互相没有任何关系的类,但是B具有和A一模一样的方法和属性...
2019-03-02 22:42:22
214
原创 java 锁框架
一、锁框架结构Lock接口:Lock接口支持那些语义不同(重入、公平等)的锁规则。ReadWriteLock接口:ReadWriteLock接口定义了一些读取者可以共享而写入者独占的锁。AbstractOwnableSynchronizer/AbstractQueuedSynchronizer/AbstractQueuedLongSynchronizer:AbstractQueuedSyn...
2019-02-21 11:27:20
498
原创 线程池原理(ThreadPoolExecutor)
一、创建一个线程池对象使用Executors创建一个线程池常用的方法如下:1、newFixedThreadPool()说明:初始化一个指定线程数的线程池,其中 corePoolSize == maxiPoolSize,使用 LinkedBlockingQuene 作为阻塞队列特点:即使当线程池没有可执行任务时,也不会释放线程。2、newCachedThreadPool()说明:初始化一...
2019-02-18 16:27:26
2475
原创 Spring IOC源码分析(5.1.4版本)⑥
finishRefresh()方法 /** * Finish the refresh of this context, invoking the LifecycleProcessor's * onRefresh() method and publishing the * {@link org.springframework.context.event.ContextRefreshed...
2019-02-14 15:54:05
163
原创 Spring IOC源码分析(5.1.4版本)⑤
finishBeanFactoryInitialization()方法/** * Finish the initialization of this context's bean factory, * initializing all remaining singleton beans. */ protected void finishBeanFactoryInitializati...
2019-02-14 15:53:15
146
原创 Spring IOC源码分析(5.1.4版本)④
prepareBeanFactory()方法在解析注册完BeanDefine之后,就开始了对Bean工厂的准备过程 /** * Configure the factory's standard context characteristics, * such as the context's ClassLoader and post-processors. * @param bean...
2019-02-14 15:52:41
137
原创 Spring IOC源码分析(5.1.4版本)③
prepareRefresh()方法 /** * Prepare this context for refreshing, setting its startup date and * active flag as well as performing any initialization of property sources. */ protected void prepare...
2019-02-14 14:33:30
171
原创 Spring IOC源码分析(5.1.4版本)②
实例化一个spring容器(ClassPathXmlApplicationContext)ClassPathXmlApplicationContext的构造方法如下: /** * Create a new ClassPathXmlApplicationContext, loading the definitions * from the given XML file and autom...
2019-02-14 14:32:15
152
原创 Spring IOC源码分析(5.1.4版本)①
首先配置spring的依赖环境: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context
2019-02-14 14:30:09
213
原创 Java 原子类
原子类根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;引用类型: AtomicReference, AtomicStampedRerence, Ato...
2019-01-28 16:02:14
218
原创 Spring MVC
一、Spring Web MVC框架简介Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。二、Servlet的生命周期Servlet的生命周期包含了下面4个阶段:加载和实例化:Servlet容器负责加载和实例化...
2019-01-24 21:56:24
419
原创 Spring AOP
一、概念1、AOPAOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高...
2019-01-18 14:36:37
169
原创 代理模式以及实现(静态代理、动态代理)
一、定义代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。二、为什么要用代理模式?中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托...
2019-01-16 15:02:28
387
原创 Spring IOC
IoC,Inversion of Control,控制反转。控制反转是一种通过描述(在java中可以使XML或者注解)并通过第三方去获取特定对象的方式。简单地说就是将对象由虚拟机主动创建变为从IoC容器中获取,它是面向对象编程的一种思想,主要作用是降低开发难度、对模块解耦、有利于测试一、内部设计BeanFactory接口BeanFactory作为最顶层的一个接口类,它定义了IO...
2019-01-10 22:08:53
172
原创 Java注解(Annotation)
一、定义一个注解的方式@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface UseCase { public String id(); public String description() default "no description";}Java提供了4种注...
2018-12-26 16:35:00
170
原创 Java 反射
一、反射机制概念主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!二、反射机制的作用...
2018-12-26 16:32:41
193
原创 springboot集成rabbitmq实现邮件服务
生产者pom依赖如下<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency&a
2018-12-23 21:39:31
1983
3
原创 RabbitMQ的一些基本概念
RabbitMQRabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。AMQP,即Advanced Message Queuing Protocol,高级...
2018-12-23 21:37:15
233
原创 RabbitMQ的安装以及一些常用命令
最近一直在用RabbitMQ做一些东西,周末做了一下总结,包括RabbitMQ的安装,基本概念,然后做了一个利用RabbitMQ解耦邮件发送的Demo。ErlangRabbitMQ是用Erlang写的,因此需要先安装Erlang环境官网:https://www.erlang-solutions.com/resources/download.htmlcd /usr/local/tmp...
2018-12-23 21:06:27
199
原创 JVM学习笔记⑤ 对象的内存布局以及String对象
对象的内存布局在 Hotspot 虚拟机中,对象在内存中的布局可以分为3块区域:对象头、实例数据和对齐填充。Hotspot虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的自身运行时数据(哈希码、GC分代年龄、锁状态标志等等),另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是那个类的实例。实例数据部分是对象真正存储的有效信息,也是在程序中所定义的各种...
2018-12-21 16:17:08
251
原创 JVM学习笔记④ 内存分配策略与垃圾回收机制
内存分配策略JVM中的年代划分(新生代、老年代、永久代)新生代HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from(S1)和to(S2))。Eden和Survival的默认分配比例为8:1。一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理,后面会说到),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Sur...
2018-12-20 16:55:22
290
原创 JVM学习笔记③ Java内存模型(JMM)
Java 内存模型在 java 中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用“共享变量”这个术语代指实例域,静态域和数组元素)。局部变量(Local variables),方法定义参数(java 语言规范称之为 formal method parameters)和异常处理器参数(exception handler parameters)不会在线程之间共享,它们不...
2018-12-18 15:33:45
248
原创 JVM学习笔记② JVM运行时数据区域
结构方法区(Method Area)方法区是各个线程共享的区域,存放类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为“永久代”(Permanent Generat...
2018-12-14 16:48:57
158
原创 JVM学习笔记① 类的生命周期以及类加载机制
类的生命周期这 7 个阶段中的:加载、验证、准备、初始化、卸载的顺序是固定的。但它们并不一定是严格同步串行执行,它们之间可能会有交叉,但总是以“开始”的顺序总是按部就班的。至于解析则有可能在初始化之后才开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建...
2018-12-12 11:21:08
275
原创 利用Redis实现session共享
负载均衡首先使用nginx配置一个简单的负载均衡:upstream myupstream{ server *.*.*.*:8080 weight=1; server *.*.*.*:8081 weight=1;}server{ listen *.*.*.*:80 local / { proxy_pass http://myupstream;...
2018-12-10 13:48:24
556
原创 Redis5.0集群搭建
主从模式redis安装好后(redis安装:https://blog.youkuaiyun.com/lazyRabbitLLL/article/details/84204496)在redis下新建目录,并复制配置文件cd /usr/local/redismkdir -p cluster/7001mkdir -p cluster/7002cp redis.conf cluster/7001/cp ...
2018-12-09 19:27:59
1065
1
原创 基于源码的Java集合框架学习⑭ Map总结
Map概括Map 是“键值对”映射的抽象接口。AbstractMap 实现了Map中的绝大部分函数接口。它减少了“Map的实现类”的重复编码。SortedMap 有序的“键值对”映射接口。NavigableMap 是继承于SortedMap的,支持导航函数的接口。HashMap 是基于“拉链法”实现的散列表。一般用于单线程程序中。Hashtable 也是基于“拉链法”实现的散列表。它一...
2018-12-08 13:10:11
164
原创 基于源码的Java集合框架学习⑧ LinkedHashMap
类 LinkedHashMap<K,V>继承自HahMap。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注意,如果在映射中重新插入键,则插入顺序不受影响。(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键...
2018-12-08 12:36:52
191
原创 基于源码的Java集合框架学习⑦ HashMap
类 HashMap<K,V>基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素正确分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代集合视...
2018-12-08 12:35:32
171
原创 基于源码的Java集合框架学习⑯ HashSet以及TreeSet
类 HashSet此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层...
2018-12-04 11:24:34
178
1
原创 基于源码的Java集合框架学习⑮ Set接口
接口 Set一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。在所有构造方法以及 add、equals 和 hashCode 方法的协定上,Set 接口还加入了其他规定,这些规定超出了从 Collection 接口所继承的内容...
2018-12-03 10:41:30
168
原创 基于源码的Java集合框架学习⑬ TreeMap
类 TreeMap<K,V>SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。此实现为 containsKey、get、put 和 remove 操作提供了保证的 log(n) 时间开销。这些算法是 Cormen、Leis...
2018-11-23 12:09:22
159
原创 基于源码的Java集合框架学习⑫ SortedMap接口
接口 SortedMap<K,V>保证按照键的升序排列的映射,可以按照键的自然顺序(参见 Comparable 接口)进行排序,或者通过创建有序映射时提供的比较器进行排序。对有序映射的集合视图(由 entrySet、keySet 和 values 方法返回)进行迭代时,此顺序就会反映出来。要采用此排序,还需要提供一些其他操作(此接口是相似于 SortedSet 接口的映射)。插入有...
2018-11-22 11:26:44
202
原创 基于源码的Java集合框架学习⑪ IdentityHashMap
类 IdentityHashMap<K,V>此类利用哈希表实现 Map 接口,比较键(和值)时使用引用相等性代替对象相等性。换句话说,在 IdentityHashMap 中,当且仅当 (k1 == k2) 时,才认为两个键 k1 和 k2 相等(在正常 Map 实现(如 HashMap)中,当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1 == null ? k2 =...
2018-11-22 10:40:43
182
原创 基于源码的Java集合框架学习⑩ Hashtable
类 Hashtable此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为 open:在发生“哈希冲突...
2018-11-21 15:00:51
177
原创 基于源码的Java集合框架学习⑨ WeakHashMap
类 WeakHashMap<K,V>以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。null 值和 null 键都被...
2018-11-21 11:22:13
186
转载 Redis的安装以及基本操作
Centos7.4安装redis的步骤如下(5.0.0版本)下载wget http://download.redis.io/releases/redis-5.0.0.tar.gz解压tar xzf redis-5.0.0.tar.gz进入redis目录cd redis-5.0.0编译make安装到指定目录下(/usr/local/redis)make install PRE...
2018-11-18 21:23:50
219
原创 基于源码的Java集合框架学习⑥ Map接口
接口 Map<K,V>将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。此接口代替 Dictionary 类,后者完全是一个抽象类,而不是一个接口。Map 接口提供三种collection 视图,允许以键集、值集合或键-值映射关系集的形式查看某个映射的内容。映射的顺序 定义为迭代器在映射的 collection 视图中返回其元素的顺序。某些映射实现可明...
2018-11-15 09:44:29
197
使用filter对字符进行过滤
2017-12-25
SpringMVC拦截器的使用
2017-12-02
SpringMVC框架下使用jQueryAJAX进行数据交互
2017-11-24
验证码的生成与校验
2017-11-06
SpringMVC文件上传与下载的实现
2017-09-26
dhtmlxTree+springMVC
2017-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人