Java进阶系列-NIO
NIO,即none-blocking I/O(非阻塞I/O),和BIO是相对的存在,BIO称为blocking I/O即阻塞I/O。其实我自己理解中的NIO的N并不单单只是none的意思,还有new的意思,就是指NIO是区别于传统阻塞I/O的一种全新的I/O方式。 对于NIO的相关基础知识,我推荐一 ...
阅读更多
MySQL系列-延迟关联优化多分页查询
利用延迟关联或者子查询优化超多分页的场景 首先创建测试表test,然后分配两个字段,id是逻辑自增主键,然后一个name的varchar字符串 123456789DROP DATABASE IF EXISTS test;CREATE DATABASE test;CREATE TABLE test.t ...
阅读更多
Java进阶系列-线程池(番外篇)
上次的线程池文章阐释了相关概念,这次就简单的看看源码中的核心部分。 ThreadPoolExecutor类的几个重要的类属性和方法 123456789101112131415private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNI ...
阅读更多
Java进阶系列-协变逆变与泛型
MSDN的dotNET文档中有对协变逆变的定义,截取下来 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。 泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性。 泛型 ...
阅读更多
Java进阶系列-线程池的使用
唉,线程池真要详细写的话感觉好多啊,所以我这就挑重点写了,想更深入的可以直接看jdk源码。 emm…阿里告诫我们不要显示的创建线程,因为这样会很浪费资源,比如说来一个任务就创建一个线程给他的话,那么总得执行时间就是创建新线程的时间+任务执行时间+销毁线程的时间,如果任务本身执行时间远小于线程创建销毁 ...
阅读更多
Java原生实现md5散列
因为平时用到了,所以记录一下不用第三方类库,用Java原生代码来实现的代码 123456789101112131415161718192021private static String getMd5(String plainText) { MessageDigest md5; ...
阅读更多
Java函数式系列-lambda表达式
今天来讲讲Java8对于函数式编程的支持,同时也是Java8版本新特性之一的lambda表达式。 在我自己的理解中,我认为要想快速理解lambda的关键很简单,只要记住一句话,lambda表达式其实不是什么新东西,他的本质就是匿名内部类,仅此而已,只是编译器对匿名内部类的创建做了简化处理,只要我们书 ...
阅读更多
Java函数式系列-闭包和内部类
Java中有关内部类的种类可分为4种,分别是 成员内部类 局部内部类 匿名内部类 静态内部类 一一来看吧。 1.先是成员内部类。成员内部类是我们见得最多的内部类,他就是在一个类的内部再声明一个类,类似于类的成员。在成员内部类中可以无条件访问外部类所有成员和属性,不管你是private还是stat ...
阅读更多
Java函数式系列-概念篇
可能对于编程范式,我们熟知的并且常用的可能只有面向过程编程和面向对象编程,有人急着说还有面向切面编程,还有面向API编程,哈哈开个玩笑。其实真正用的比较多的应该就是上述的三种了,面向过程、面向对象和面向切面。 今天来介绍另一个更加神秘的编程范式:函数式编程。其实在你心想这是什么鬼东西的时候,函数式编 ...
阅读更多
设计模式系列<Java实现>-观察者模式
观察者模式 观察者模式和监听者模式非常相似,相比之下,观察者模式的结构更加简单一些。观察者模式包含四个角色: 抽象被观察者角色 (一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,相当于监听者模式中的事件源和事件对象的结合) 抽象观察者角色 (为所有的具体观察者定义一个接口,在得到主题通知 ...
阅读更多