7 李满

新网银行 软件工程师

慢节奏城市的Coder

等级
TA的排名 5w+

Java8(七)——Optional的几种应用

前言针对optional的操作,这篇博客进行简单的总结。optional介绍如果你作为Java程序员曾经遭遇过NullPointerException,请举起手。如果这是你最常遭遇的异常,请继续举手。非常可惜,这个时候,我们无法看到对方,但是我相信很多人的手这个时候是举着的。这句话是《Java8inaction》一书中的原话,可以看出其实java中针对NPE的问题确实让吾等程序员...

2019-09-10 21:07:55

Java8(六)——Stream流的相关操作

前言上一篇博客中针对Stream流的创建做了一个简单总结,这一篇博客就简单总结一下Stream流的操作。在《Java8inaction》一书中对Stream流的操作总结成两大类——中间操作和终端操作。中间操作中间操作——例如filter,sorted等即为中间操作,这些操作会返回一个流,这些流类似于一个流水生产线上的中间操作,这些操作的返回结果就是流。下面开始总结中间操作的一些实...

2019-09-01 08:57:04

SpringBoot原理(一)自动装配机制初探

前言经常用到springboot,其配置步骤及其简单,但这背后的原理是什么或许值得我们深入去探讨一下,依稀记得一句话,springboot中其实没有新技术,只是在已有的框架上封装了一下,减少了开发者的工作量。我们常提到的springboot中常见的四大组件是:AutoConfiguration,Starter,Actuator,SpringbootCTL(用的较少)。从一些简单注解入手...

2019-08-25 21:10:00

Java8(五)——Stream的创建

前言Stream是JavaAPI的新成员,可以通过声明的方式来处理数据集合,其实就是遍历集合的高级迭代器。这篇博客会先引入stream的一个简单实例,然后举例说明stream的几种创建方式。Stream入门入门需求:有一些菜谱,现在需要选择出这些菜谱中热量低于指定的菜名,同时按照热量排序输出菜名。先上相关代码Dish实例packagecom.learn.stream.co...

2019-08-23 20:23:05

Java8(四)——复合lambda表达式

前言Java8的好几个函数式接口都为了使用方便而设计了复合的方法,其实也就是函数接口中的默认方法。比较器复合所谓的比较器复合,其实也就是说明Comparator函数式接口中的default方法。具体的可以查看源码,这里就不贴出来了。这里就直接举一个实例,比如,我们已经有了一个lambda实现的比较器,但是现在我们需要进行逆序排序,难道我们需要重新建一个比较器么?并不是,java8中我们...

2019-08-19 19:33:40

RPC初步认识——手写一个简单的RPC框架

前言RPC是什么,不是这里要说的问题,RPC这个东西目前已经在实际开发中用到了很多,dubbo,sofa等都是rpc框架,但是这些框架的背后做了啥,貌似一直不是很清楚,这篇博客就打算一步一步弄一个简单的RPC实例。搭建架子服务端1、建立一个Maven工程——rpc-service,同时这个工程下面分两个模块,一个rpc-service-api(下文简称api),一个rpc-serv...

2019-08-17 20:00:01

Java8(三)——lambda表达式中的方法引用

前言上一篇博客从@FunctionInterface注解切入介绍了lambda表达式的基本作用,但是针对lambda表达式其实还有一些已经提供的函数式接口,这个点随这篇博客的方法引用一并介绍。但在介绍这些概念之前,先梳理一下Comparable、Comparator两者的区别。Comparable和Comparator的区别Comparable接口publicinterface...

2019-08-17 11:07:05

Java8(二)——lambda表达式初探

前言上篇博客说明了一下行为参数化的问题,这篇博客就在原来实例的基础上,引入lambda表达式lambda表达式介绍在上一篇博客的结尾,我们用策略模式满足了不断变化的需求。但,还有没有更简洁的方式,让我们每次变化需求的时候,不用实现新的策略接口或者编写新的内部类呢?lambda表达式就可以做到这一点。@FunctionInterface注解其实只有一个方法声明的接口中,我们可以理...

2019-08-05 21:28:55

Java8(一)——让方法参数化

前言之前一直想梳理一下Java8的东西,毕竟在工作中有时候看到一些同事用Java8的方式完成代码,写的那叫一个简洁,那叫一个清爽,可惜的是,由于对Java8的东西一直不是很熟悉,所以有时读同事的代码有点吃力,为了以后避免采坑,从这里开始梳理java8的东西。整个梳理过程会参照《Java8inAction》一书需求总是不断变化的一个简单的例子有一个农民,有一堆苹果,一天这个农民...

2019-08-03 22:48:18

三次握手与四次挥手

前言在分布式架构中,分布式网络中计算机节点之间需要彼此通信,其实这也是分布式的关键。但是这篇博客只是简单说明一下三次握手和四次挥手,同时写一个简单的socket的程序,这个程序也是之前写过很多次的,但是每次都有新的解读。但是针对后面的NIO,BIO等,后面再详细总结。谈论烂了的网络分层发送端发送数据其实这个图在大学计算机网络的教材中出现过很多次(貌似印象最深的,也就是这个图了...

2019-08-03 16:51:59

并发编程(五)ConcurrentHashMap源码简析

前言ConcurrentHashMap这个集合是在面试中出现频率较高的一个集合,这个集合的源码层面体现了多处并发设计的思想,除此之外,其底层存储结构也有很多值得考量的地方,源码实现中对位运算的运用也相当成熟,因此这个集合源码有很高的学习价值,这里依旧是在大牛博客的基础上进行总结。本篇博客以1.8中的源码为例进行总结。ConcurrentHashMap简单使用packagecom.l...

2019-07-21 16:17:59

并发编程(四)ReentrantLock中的Condition详解

前言公平锁和非公平锁公平锁和非公平锁,从语义上来说比较简单,非公平锁比较粗鲁,一上来就是直接尝试获取锁。而公平锁则会通过维护一个FIFO的阻塞队列来达到先来后到的结果。这个在上一篇博客中已经有了说明:AQS简析。具体在代码层面区别也没有太复杂,公平锁公平锁的tryAcquire方法。/***FairversionoftryAcquire.Don'tgrant...

2019-07-13 11:03:25

并发编程(三)AQS简析

前言重入锁可以完全替换synchronized关键字,synchronized是一个最简单的控制方式,重入锁相比synchronized是一种更加灵活的控制方式。重入锁的基础其实一定程度上是AQS(AbstractQueuedSynchronizer)重入锁这个是相关的类关系图,AbstractQueuedSynchronizer是一个抽象类,Sync是其的一个具体实现,Lock也...

2019-07-08 21:34:27

并发编程(二)偏向锁,轻量级锁,重量级锁

前言从synchronized说起synchronized可以修饰代码块,修饰类,修饰实例方法/静态方法。就这三种使用方法,这三种使用方法代表了synchronized锁的控制粒度。这里还是直接上实例吧,这里更多的只想说明对象锁和类锁的区别。synchronized一般可以修饰类,方法(普通方法和静态方法),代码块。但我个人总结将其分为类锁和对象锁,这两种目前没有具体的概念定义,只能通...

2019-06-30 21:41:28

并发编程(一)线程的启动与停止

前言并发编程是一个程序员必须经历的一道坎,有些关于为什么会有并发的文章已经非常详细说明了并发的重要性,这里就不再说这些废话了。从这篇博客开始总结自己学习并发编程中遇到的一些问题。线程的几种状态直接进入到Thread类的源码中,搜索State,我们发现其内部定义了一个State的枚举类型,这个枚举类型就定义了线程的六种状态。publicenumState{...

2019-06-26 23:06:42

责任链模式

前言在总结责任链模式之前,参考了网上很多的博客,大多都是介绍了简单的实例,说清楚了什么是责任链模式,但是如果我们真正的开始使用责任链,发现依旧无从下手。有点咯嗦的简介责任链模式就是将处理客户端请求的过程设置成一条链接,并在该链上传递请求,直到有一个接受者对象处理它,从一定程度上在不同模块之间进行了解耦。web开发中常见的Filter就是这个设计模式实现的。但是责任链模式其实还有其他用法...

2019-06-23 17:08:20

Spring源码学习(二)——IOC容器源码分析(上)bean的解析和注册

前言在晕车晕了N遍之后,终于打算开始写关于spring源码学习的总结了,在真正看spring源码之前,还是要对spring的一些东西做一些理解,这个在之前已经总结过很多了,这个可以参看之前的博客总结。这篇文章会参考某些大牛的博客,这里先贴出来,有些博客确实写的让本菜鸟拜服:IOC大牛解读。准备知识在阅读spring源码的时候,需要对spring的基本使用还是要熟悉的。对spring中的...

2019-06-22 16:41:02

Spring源码学习的准备(二)——AOP的使用与相关概念

前言spring源码重点部分分为几个部分,其中AOP是一个重要内容,但是如果不梳理一下AOP的常用概念,阅读对应的源码依旧会晕车。这里就先梳理AOP的使用和相关概念。AOP的实例提到AOP先别谈各种概念,刚开始使用,这些概念其实并没有什么用,反而会让人晕头转向。简单一句话:AOP就是在目标业务代码执行的前后增加相关逻辑处理而已。做到切面和业务的解耦。具体配置我们参考了Springin...

2019-06-09 15:39:03

spring 源码学习的准备(一)BeanFactory与FactoryBean的区别

前言其实早就开始了Spring源码的学习,但是发现源码这东西不晕车看不懂,在晕了好多遍之后,发现在真正看源码之前还是要做些准备工作的,前面分享了一篇讲解springIOC部分的文章,这篇文章来来回回看了三遍依旧没有完全消化。从这里开始,先梳理一些基础的用法,然后再开始解剖spring源码的部分。BeanFactory与FactoryBean一句话解释这两者的区别:BeanFactor...

2019-06-09 11:29:23

Spring源码学习——一篇很详细的参考文章

发现一篇很详细的spring源码阅读文章:https://javadoop.com/post/spring-ioc

2019-05-04 19:15:47

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。