- 博客(217)
- 资源 (40)
- 收藏
- 关注
原创 aqs源码
博客地址aqsAQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实现轻量级和高效地获取锁。AQS虽然被定义为抽象类,但事实上它并不包含任何抽象方法。AQS是被设计为支持多种用途,如果定义抽象方法,子类在继承的时候就需要实现所有抽象方法,所以AQS将需要子类覆盖的方法都...
2019-11-27 22:04:34 294
原创 HashMap阅读 (1.8|1.7)
HashMap阅读 (1.8|1.7)HashMap源码阅读 HashMap 内部默认的参数变量值含义DEFAULT_INITIAL_CAPACITY16默认容量MAXIMUM_CAPACITY1 << 30最大容量DEFAULT_LOAD_FACTOR0.75负载因子TREEIFY_THRESHOLD8链表超过8转为红黑...
2019-11-17 17:13:48 135
原创 ReentrantLock阅读
ReentrantLockReentrantLock是一个互斥锁,也是一个可重入锁。ReentrantLock锁在同一时刻只能被一个线程持有,但是它可被单个线程多次获取,每获取一次AQS的state就加1。ReentrantLock内部的实现(公平锁和非公平锁)都是基于内部Sync的实现。内部结构ReentrantLock内部定义了三个重要的内部类,Sync、FairSync、Nonfai...
2019-12-14 23:15:50 203
原创 ConcurrentHashMap(1.7|1.8)阅读
ConcurrentHashMapjdk1.7ConcurrentHashMap 和 HashMap非常类似,ConcurrentHashMap在实现上采取了分段锁的思想来实现的。ConcurrentHashMap在内部采用了一个叫做 Segment 的结构,一个Segment就类似HashMap中的table,这样在定位一个元素的时候,需要进行两次hash操作,一次定位到Segment,第...
2019-12-13 10:43:47 211
原创 synchronized和lock
锁的种类锁的种类很多,包括:自旋锁(CAS)、阻塞锁、可重入锁、读写锁、互斥锁、悲观锁、乐观锁、公平锁、可中断锁等等,主要介绍下可重入锁、读写锁、可中断锁和公平锁。可重入锁如果锁具备可重入性,则称作为可重入锁。synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举比如说,当一个线程执行到met...
2019-11-24 21:47:19 186
原创 线程池阅读
http://fk5431.com/20191115/javasource/util/2_ExecutorService/类继承的结构Executor是最顶层的接口,定义了execute(Runnable runnable)方法。ExecutorService继承了Executor,继承了execute方法,还定义很多接口方法,例如shutdown、isTerminated、submit等方法...
2019-11-19 19:50:10 131
原创 ubantu16.04安装 nginx
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。安装Ng
2017-09-29 11:05:57 840
原创 linux tail 命令
linux tail 命令linux tail 命令是按照要求将指定的文件的最后部分输出到标准设备。tail语法tail [ -f ] [ -c Number | -n Number | -b Number | -k Number ] [file] 参数说明:-f 参数用于监视file文件增长-c Number 从Number字节位置读取指定文件-n Number 从Number行位置读取指定
2017-09-07 11:13:08 1301
原创 迭代器模式
迭代器模式介绍迭代器模式:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。(行为型模式) 迭代器模式是应该是java中使用的最多的一种设计模式,迭代器模式如下: 抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,
2017-08-17 22:10:59 697
原创 解释器模式
解释器模式介绍解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。(行为型模式)解释器模式uml图一般如下:AbstractExpression 抽象解释器 具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成。TerminalExpression终
2017-08-16 23:26:04 871
原创 命令模式
命令模式介绍 在软件系统中,行为请求者与行为实现者通常是一种紧耦合关系,但是有时候,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合关系就不大合适。将一个请求封装成一个对象,从而是你可用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。 命令模式就是对命令进行封装,把发出命令和执行命令分开,请求方并不知道命令是怎么被接受,也不知道命令是否执
2017-08-09 10:58:54 422
原创 责任链模式
责任链模式介绍在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求会在这个链上传递,直到链上某一个对象可以处理这个请求。(行为型模式)结构图责任链模式的结构像下面这样:抽象处理者角色(handler):定义一个处理请求的接口,还可以定义一个后继连接(可选)。具体处理者角色(ConcreteHandler):具体处理者接到请求后,如果可以处理就处理请求,如果不能处理就把请求
2017-08-06 23:23:51 357
原创 代理模式
代理模式介绍代理模式为其他对象提供一种代理以控制对这个对象的访问。(结构型模式) 代理模式提供三种角色: - 抽象角色:声明真实对象和代理对象的共同接口。 - 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 - 真实角色
2017-08-04 17:20:09 645
原创 享元模式
享元模式介绍享元模式使用共享来避免大量拥有相同内容对象的开销,避免内存的损耗。享元对象能做到共享的关键是区分内蕴状态和外蕴状态。 内蕴状态是存储在享元对象内部的,不会随环境的改变而有所不同(内蕴状态可以共享)。 外蕴状态是随环境的改变而改变的,不可以共享,外蕴状态不可以影响享元对象的内蕴状态,它们是相互独立的。优点大幅度地降低内存中对象的数量缺点使得系统更加复杂享元模式将享元对象的状态外
2017-08-02 17:54:14 367
原创 外观模式
外观模式介绍为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。 就像下图,facade把众多子系统中通过一个接口统一起来: 适用场景设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,
2017-08-02 10:11:00 425
原创 装饰器模式
装饰器模式介绍装饰器模式允许向一个现有的对象添加新功能,同时又不改变其结构。(结构型模式) 这种形式在没有原类文件和使用继承的情况下动态的扩展了一个对象的功能。类的继承是在编译是时候增加的功能,而装饰器模式在运行时增加的功能装饰器模式构成Component : 组件对象接口,可以给这些对象动态添加职责ConcreteComponent : 具体的组件对象,实现了组件接口。这个对象通常是被装饰器修饰
2017-08-01 16:20:32 524
原创 组合模式
组合模式介绍组合模式将对象组合成树形结构表示“部分-整体”的层次结构,组合模式使用户对单个对象和组合对象的使用具有一致性。(结构型) 就像文件系统一样,文件由目录和文件组成,每个目录都可以装载目录,目录的内容既可以是文件,也可以是目录。计算机的文件系统就是以递归结构来组织的,这种情景就适用于组合模式。使用场景和涉及的角色适用性你想表示对象的部分-整体层次结构你希望用户忽略组合对象与单个对象的不
2017-07-30 19:32:37 416
原创 过滤器模式
过滤器模式介绍过滤器模式允许开发者用不同的标准过滤一组对象。(结构型模式) 使用过滤器模式可以很方便的进行扩展,单独一个过滤器的执行是独立的,不依赖其他过滤器。DEMO例如,一个Person类有姓名、性别、婚姻状况属性 :package factory.pattern.filter;/** * Created by fk5431 on 7/27/17. */public class Pers
2017-07-27 12:09:28 456 1
原创 桥接模式
桥接模式介绍桥接适用于把抽象化与实现化解耦,使得二者可以独立变化。(结构型模式) 用来解决两个或者多个纬度的变化,使用桥接模式可以降低复杂度。将两个角色之间的继承关系改为聚合关系,这样两者可以独立的变化。例子就像大话设计模式中讲的一样,每个手机都有其对应的功能(软件),而这些功能在不同手机上可能不兼容,那么列出一个手机品牌和其对应的部分功能的结构图如下: 但是这样的话,不管要增加一个手机品牌
2017-07-26 18:09:35 430
原创 适配器模式
适配器模式介绍适配器模式讲一个类的接口转换为被期望用到的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作.(结构型模式)适配器模式中的角色一般适配器模式中有以下三个角色:目标接口(Target) : 客户期待的接口.需要适配的类(Adaptee) : 需要适配的类.适配器(Adapter) : 包装一个需要适配的对象,吧原接口转换为目标接口.优点通过适配器,客户端调用
2017-07-25 15:25:08 328
原创 原型模式
原型模式介绍用原型实例制定创建对象的种类,并通过拷贝这些原型创建新的对象。(创建型模式) 原型模式比较简单的一种模式,实现一个接口就完成了原型模式。一般原型模式很少单独出现,会与其他模式混用。适用场景使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。 使用原型模式的另一个
2017-07-25 10:05:20 392
原创 建造者模式
建造者模式定义将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。(创建型模式)使用场景1 创建一些复杂的对象时,这些对象的内部组成间的构建顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。 2 要创建的复杂对象的算法,独立于该对象的组成部分,也独立与组成部分的装配方法时。 优点:使用建造者模式可以让客户端不知道产品内部的组成细节.具体的
2017-07-24 10:24:29 410
原创 二叉树的路径和
给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。 您在真实的面试中是否遇到过这个题? 样例给定一个二叉树,和 目标值 = 5: 1 / \ 2 4/ \2 3返回:[ [1, 2, 2], [1, 4]]package com.fk5431;import java.util.Ar
2017-06-25 22:42:16 536 7
原创 双重检查锁定
双重检查锁定产生原因在写Java程序的时候,有时候会推迟高开销对象的初始化,在使用的时候在进行初始化,达到lazy loading的效果.但是进行延迟初始化的时候可能会产生很多问题(多线程环境),例如:public class UnsafeLazyLoading { private static UnsafeLazyLoading unsafeLazyLoading; private
2017-06-21 16:45:28 417
原创 设计模式--单例模式
单例模式定义一个类有且仅有一个实例,并且自行实例化向整个系统提供。(创建型模式) 设计模式中比较简单的几种之一,单例模式就是让一个类在系统运行过程中只会产生唯一的一个实例,单例模式主要:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。使用场景需要频繁实例化然后销毁的对象。创建对象时耗时过多或者耗资源过多,但又经常用到的对象。有状态的工具类
2017-06-19 22:09:48 311
原创 设计模式--抽象工厂模式
抽象工厂模式介绍为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。(创建型模式)和工厂模式区别工厂模式提供一个产品的结构,而抽象工厂模式提供多个产品的结构,可以组成一个产品族。 QQ换皮肤可以使用抽象工厂模式优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 缺点:扩展非常麻烦,需要修改很多代码。DEMO可以在前一个例子上给图
2017-06-19 12:14:47 325
原创 设计模式——工厂模式
工厂模式介绍定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。(创建型模式)使用场景例如orm框架,在选择数据库的时候只需要替换方言和驱动,不需要对已经实现的具体细节进行改动。优点:使用工厂模式可以屏蔽具体实现,只需要关心接口的调用;在增加一个产品的时候,只需要在工厂类里扩展一个产品就可以。缺点:每增加产品就必须增加具体实现类和实现工厂,增加了系统复
2017-06-18 10:50:43 406
原创 设计模式
设计模式设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。其实就是经过前人反复使用总结使用得出在不同场景有对应的解决方案。 使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计原则开闭原则模块应对扩展开放,对修改关闭,也就是在对程序进行拓展的时候,不要去修改原来的代码,实现热插拔的效果。这样可以使得程序扩展性更好,更易于维护。(主要是使用接口和抽象类实现,
2017-06-17 22:07:50 637
原创 深入分析ConcurrentHashMap
HashMap的问题HashMap是不支持并发操作的,多线程情况下HashMap可能会导致死循环的发生,导致CPU占用率达到100%。Hash表的数据结构HashMap通常会用一个指针数组(假设为table[])来做分散所有的key,当一个key被加入时,会通过Hash算法通过key算出这个数组的下标i,然后就把这个HashMap的源码public V put(K key, V value) {
2017-05-03 17:01:00 560
原创 深入理解volatile
java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。VolatileVolatile变量具有synchronized的可见性特性,但是不具备原子性。线程可以自动发现volatil
2017-05-02 13:59:28 976
原创 PyCharm激活码
CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRWkVYIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ2
2017-04-25 09:31:05 2617
原创 如何在Ubuntu上安装最新版本的Node.js
Node.js是一个软件平台,通常用于构建大规模的服务器端应用。Node.js使用JavaScript作为其脚本语言,由于其非阻塞I/O设计以及单线程事件循环机制,使得它可以交付超高的性能。Node.js包含了Google V8 JavaScript引擎,libuv库和核心库几乎都是使用JavaScript编写的。libuv库提供了异步事件I/O的抽象和Node.js跨平台的机制。Node.js最初
2017-04-14 14:34:52 1160
原创 shell脚本数组报错Syntax error: "(" unexpected
按照正常的shell数组定义 #!/bin/sh a=(1 2 3) for number in a[@]doecho{a[@]} do echo number done 执行该脚本,在有的机器上会报错Syntax error: “(” unexpected这与你实际使用的shell版本有关。你可以用 ls -l /bin/*sh 打印出来,例如: -rwxr-xr-x 1 r
2017-04-13 10:56:17 28256 2
原创 不用netty实现OIO和NIO连接通信
首先是 OIO server端的package com.fk.testIO;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.nio.charset
2017-04-11 11:36:49 1181
转载 HTTP长连接与短链接以及推送技术原理
HTTP长连接和短连接以及推送服务原理 HTTP长连接和短连接1 1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可
2017-04-05 16:55:40 1057 1
原创 netty核心组件
netty核心组件ChannelsCallbacksFuturesEventshandlersChannels一个Channel是java NIO的一个基本抽象。可以吧一个channel相称一个输入和输出数据的媒介,它可以被打开或者关闭。Callbacks一个callback就是一个方法,一个提供给另一个的方法的引用,这样可以让另一个方法在合适的时候来回调callback方法。 ca
2017-04-01 14:17:31 922
原创 guava——集合(2)
guava提供了很多关于集合的工具方法,适用于所有集合的静态方法。 集合接口 属于JDK还是Guava 对应的Guava工具类 Collection JDK Collections2:不要和java.util.Collections混淆 List JDK Lists Set JDK Sets SortedSet JDK Sets Map
2017-03-31 14:02:18 581
原创 guava——集合(1)
2.1不可变集合当对象被不可信的库调用时,不可变形式是安全的;不可变对象被多个线程调用时,不存在竞态条件问题不可变集合不需要考虑变化,因此可以节省时间和空间。所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节);不可变对象因为有固定不变,可以作为常量来安全使用。 不可变集合的优点如上,但是JDK页提供了Collections.unmodifiableXXX方法将集合
2017-03-30 15:15:45 1017
原创 linux查看内存和cpu使用情况
最近总觉得使用firefox 时候电脑就会有点慢,觉得不大应该啊,于是就看了看电脑的内存的使用情况 只需要输入free -m 就可以查看电脑内存使用情况,具体如下:然后继续查看电脑的cpu使用情况:top在这发现是firefox的cpu占用太多了,火狐用起来挺方便,但是在打开多个窗口时间一长就会占用大量cpu,从截图上我已经换chrome了。
2017-03-30 14:40:57 2171
MySQL_5.1_zh.chm
2016-02-18
JSTL需要的jar包.rar
2016-02-14
dom4j-1.6.1.jar
2016-01-26
commons-logging.jar
2016-01-22
算法技术手册
2016-01-20
java核心技术卷1
2016-01-20
java坦克大战游戏
2015-12-24
Maven权威指南(中文)
2017-10-09
设计模式解析(第二版)
2017-08-21
Elasticsearch Java教程
2017-08-09
《Java并发编程实战》
2017-08-04
navicat premium11.0.16 64位英文绿色版
2017-07-28
大型网站技术架构:核心原理与案例分析+李智慧.pdf
2017-07-26
PlayMakerSamples.unitypackage
2016-11-11
金字塔原理pdf书
2016-10-21
site-1.8.22.zip
2016-10-18
FlexPaper_2.1.0官方版本
2016-03-24
JSTL中文帮助文档(CHM).chm )
2016-03-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人