Java
文章平均质量分 78
东方雨倾
做一个积极主动的人,积极做事,主动学习。
展开
-
看了这篇你就会手写RPC框架了
原文地址:https://leisure.wang/procedural-framework/framework/704.html一、学习本文你能学到什么?RPC的概念及运作流程RPC协议及RPC框架的概念Netty的基本使用Java序列化及反序列化技术Zookeeper的基本使用(注册中心)自定义注解实现特殊业务逻辑Java的动态代理自定义Spring Boot Starter这里只是列出了你能从RPC框架源码中能学到的东西,本文并不会每个知识点都点到,主要讲述如何手写一个RPC框原创 2020-07-24 00:42:14 · 929 阅读 · 0 评论 -
【睡JDK】Java函数式编程接口详解之UnaryOperator、BinaryOperator
今天介绍的这两位兄弟大U(Unary:一元的)和大B(Binary:二元的)其实并不是全新的东西,而是两个特例,我们先来康康他们的源码。UnaryOperator的源码:@FunctionalInterfacepublic interface UnaryOperator<T> extends Function<T, T> { static <T> UnaryOperator<T> identity() { return t -&g原创 2020-06-29 23:40:43 · 888 阅读 · 0 评论 -
【睡JDK】Java函数式编程接口详解之Supplier
一、Supplier简介Supplier有什么好处?这个在网上也是众说纷纭,Supplier可能不像之前介绍的Predicate、Consumer、Function那么好理解。官方的介绍是:表示结果的提供者,不要求每次调用Supplier时都返回新的或不同的结果。源码如下:@FunctionalInterfacepublic interface Supplier<T> { /** * Gets a result. * * @return a原创 2020-06-29 23:38:50 · 1534 阅读 · 0 评论 -
【睡JDK】Java函数式编程接口详解之Consumer、Function
今天将介绍Java另外两个函数编程接口Consumer、Function,这两个函数是干嘛的呢?先看看官方的定义:Consumer:表示接受单个输入参数但不返回结果的操作。Function:表示接受一个参数并生成结果的函数。一、Consumer1.1 源代码@FunctionalInterfacepublic interface Consumer<T> { void accept(T t); default Consumer<T> andThen(C原创 2020-06-29 23:33:40 · 2501 阅读 · 0 评论 -
【睡JDK】Java函数式编程接口详解之Predicate
一、初识Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断。首先看看源码:@FunctionalInterfacepublic interface Predicate<T> { boolean test(T t); default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other);原创 2020-06-29 23:31:07 · 762 阅读 · 0 评论 -
2020 Java相关面试题整理
----点击查看更多2020面试题系列文章----JVM运行时数据区线程共享部分:方法区、堆内存线程独占部分:虚拟机栈、本地方法栈、程序计数器方法区用来存储加载的类信息、常量、静态变量、编译后的代码等数据堆内存用来存放对象的区域,可以细分为:老年代、新生代(Eden、From Survivor、To Survivor)虚拟机栈每个线程都在这个空间有一个私有的空间,线程栈由多个栈帧...原创 2020-05-01 12:14:22 · 376 阅读 · 0 评论 -
2020 Java工程师面试题汇总
前言2020,不平凡的一年。经过一个多月的面试,整理了一些面试题,分享出来。不敢说对大家能有多大帮助,至少可以查漏补缺吧。里面很多东西,写得很长,并不是说要死记硬背,而是要理解,一次不懂,多看几次就懂了。而且有些题需要掌握一些点,按照点回答就行了。面试题博文汇总2020 Java相关 面试题整理2020 Spring相关 面试题整理2020 Mybatis 面试题整理...原创 2020-05-01 11:58:08 · 2171 阅读 · 0 评论 -
HashMap不支持深拷贝问题解决方案
前言当构造一个复杂耗时的对象的时候,而且实际用的时候仅仅只是需要改动一小部分,这个时候我们往往会想到使用实现Cloneable接口来开启对象克隆。但是这里有一个问题就是,对于自定义对象无法支持深拷贝,HashMap实现了Cloneable接口,自然也是存在这种问题的。示例示例代码public class Test3 { @SuppressWarnings("unchecked"...原创 2019-11-26 18:00:28 · 1264 阅读 · 0 评论 -
23种常用设计模式之解释器模式
说明解释器模式是一种行为型设计模式,在平时工作当中相对冷门,也非常的难于理解,可以参考正则表达式为一个实际的应用例子。虽然说解释器模式很难理解并且工作中应用很少,但是楼楼觉得解释器模式是一个非常强大且有趣的模式,因为该模式给我们提供了非常大的设计空间,我们可以在应用程序中定义自己的规则,然后去解析一些复杂的操作。应用场景解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能...原创 2019-11-09 22:42:23 · 170 阅读 · 0 评论 -
23种常用设计模式之中介者模式
说明中介者(Mediator)模式属于行为型模式。定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。简单的说,A想跟B通信,需要中介者M来完成。应用场景系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。一个对象由于引用了其他很多对象并且直接和这些对象通信,导致难以复用该对象...原创 2019-11-09 22:33:37 · 199 阅读 · 0 评论 -
23种常用设计模式之享元模式
享元模式说明应用场景模式特征代码实现优缺点模式对比重要说明原创 2019-11-09 22:26:02 · 171 阅读 · 0 评论 -
23种常用设计模式之建造者模式
说明建造者模式(builder pattern)是一个创建型模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示应用场景需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。需要生成的对象内部属性本身相互依赖。适合于一个具有较多的零件(属性)的产品(对象)的创建过程。快速使用方法:...原创 2019-11-09 21:54:13 · 146 阅读 · 0 评论 -
23种常用设计模式之访问者模式
说明访问者模式是一种行为型模式,表示一个作用于其对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。可以对定义这么理解:有这么一个操作,它是作用于一些元素(Element)之上的,而这些元素属于某一个对象结构(ObjectStructure)。同时这个操作是在不改变各元素类的前提下,在这个前提下定义新操作是访问者模式精髓中的精髓。应用场景对象结构比较稳...原创 2019-11-09 13:36:32 · 153 阅读 · 0 评论 -
23种常用设计模式之模板方法模式
说明模板方法(Template Method)模式是一种行为型模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。应用场景多个子类有共有的方法,并且逻辑基本相同。重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类...原创 2019-11-09 10:03:08 · 313 阅读 · 0 评论 -
23种常用设计模式之策略模式
说明策略模式(Strategy Pattern)是一种行为型模式,它定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。应用场景针对同一类型问题,有多种处理方式,每一种都能独立解决问题;算法需要自由切换的场景;需要屏蔽算法规则的场景;模式特征角色说明举栗上下文角色(Context)用来操作策略的上下文环境,屏蔽高层模块(客户端)对策略,算法的直接...原创 2019-11-06 23:22:57 · 162 阅读 · 0 评论 -
23种常用设计模式之状态模式
说明状态模式(State)是一种行为型模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。应用场景行为随状态改变而改变的场景。条件、分支语句的代替者。模式特征角色说明举栗上下文环境(Context)它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。Cont...原创 2019-11-06 22:40:11 · 141 阅读 · 0 评论 -
23种常用设计模式之观察者模式
说明观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己应用场景对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。...原创 2019-11-04 22:35:54 · 192 阅读 · 0 评论 -
23种常用设计模式之备忘录模式
说明备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。应用场景需要保存/恢复数据的相关状态场景。提供一个可回滚的操作。模式特征Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。Memento(备...原创 2019-11-04 17:44:49 · 226 阅读 · 0 评论 -
23种常用设计模式之迭代器模式
说明迭代器模式是一种对象行为型模式,提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。应用场景当需要为聚合对象提供多种遍历方式时。当需要为遍历不同的聚合结构提供一个统一的接口时。当访问一个聚合对象的内容而无须暴露其内部细节的表示时。模式特征角色说明举栗抽象聚合(Aggregate)角色定义存储、添加、删除聚合对象以及创建迭代器对象的...原创 2019-11-03 15:34:46 · 279 阅读 · 0 评论 -
23种常用设计模式之委派模式
说明委派模式是一种常用的行为型设计模式,在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,委派者和被委派者拥有相同的方法和属性。委派模式大量使用在spring,mybatis等开源框架中,理解委派模式的实现原理可以更好理解这些框架源码。应用场景用一个对象统一处理请求,并将请求分发到具体的请求处理类上模式特征角色说明...原创 2019-10-26 21:32:07 · 445 阅读 · 0 评论 -
23种常用设计模式之命令模式
说明命令模式是一种常见的行为型模式,它将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。应用场景当系统需要将请求调用者与请求接收者解耦时,命令模式使得调用者和接收者不直接交互。当系统需要随机请求命令或经常增加或删除命令时,命令模式比较方便实现这些功能。当系统需要执行一组操作时,命令模式...原创 2019-10-26 20:12:19 · 167 阅读 · 0 评论 -
23种常用设计模式之责任链模式
祝大家1024节日快乐,致敬一线编程工作者,学习者。说明责任链模式(Chain of Responsibility Pattern)属于行为型模式,它为请求创建了一个处理者对象的链,请求将在这个对象链上被处理,责任链模式并不要求请求一定要在某一个处理者上被处理完,简单的说,就是链上的处理者都可能处理请求的一部分,该模式可以有效的解耦请求的请求者和处理者。应用场景一个请求需要一系列的处理工...原创 2019-10-24 09:19:01 · 210 阅读 · 0 评论 -
封装BeanCopier工具,支持单个对象以及列表拷贝,超高性能简单实用
说明前几天写了一个关于Spring BeanUtils的封装类代码片段六:BeanUtils.copyProperties扩展复制列表,然后又发现了一款性能更好的工具BeanCopier,这款工具性能比较好,但是易用性稍差,故而封装一下,分享出来。由于使用上和上面????那个基本一致,故不作过多介绍。至于性能提升多少,小伙伴们可以参考各类对象属性拷贝工具性能测试对比(BeanCopier、BeanUt...原创 2019-10-17 21:09:30 · 3749 阅读 · 2 评论 -
各类对象属性拷贝工具性能测试对比(BeanCopier、BeanUtils、DozerBeanMapper、PropertyUtils)
说明在工作了许久之后,也认识了很多对象属性拷贝工具,诸如标题所示的那些工具,于是就想看看哪个工具在对象拷贝方面性能更高,于是乎就有了这篇博文,希望对小伙伴们有点帮助。由于是测试性能,代码写的比较露骨简单且基本相同,在每个工具类正式测试前,都做了代码预热,为了就是让结果尽量准确,各个工具的测试代码将贴在文末,下面直接附上测试结果。性能测试结果对比预热100次后的结果:类方法...原创 2019-10-17 17:29:28 · 7627 阅读 · 0 评论 -
23种常用设计模式之门面模式
说明门面模式也叫外观模式,是一种结构型模式。它是一种很容易理解且易于实现的模式,它的定义是这样的:外部与一个子系统内容的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口, 使得子系统更易于使用。简单的理解就是通过门面模式,我们能很轻松的使用一个子系统,而不必关心子系统内部是怎么去实现的。应用场景为一个复杂的模块或子系统提供一个供外界访问的接口子系统相对独立–外界对子系统的访问...原创 2019-10-16 23:46:07 · 272 阅读 · 0 评论 -
23种常用设计模式之代理模式
说明代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用实现方式静态代理:由程序员创建或特定工具自动生成源代码,在对其编译。在程序员运行之前,代理类.class文件就已经被创建了JDK动态代理:是在程序运行时通过反射机制动态创建的CGLIB动态代理:CGLib采用了非常底层的字节...原创 2019-10-15 11:11:56 · 205 阅读 · 0 评论 -
23种常用设计模式之装饰器模式
说明装饰器模式(Decorator)是一种结构型模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。应用场景在不想更改已存在类的核心功能的情况下,想要扩展该类的功能模式特征角色说明举栗Component统一接口,也是装饰类和被装饰类的基本类型OperateSystemConcreteComponent具体实现类,也是被装饰类,他本身是个具...原创 2019-10-15 11:05:37 · 391 阅读 · 0 评论 -
23种常用设计模式之组合模式
说明组合模式(Composite Pattern),又叫部分整体模式,是一种结构型模式。它将对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性应用场景部分、整体场景,如树形菜单,文件、文件夹的管理模式特征角色说明举栗抽象根节点(Component)定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性...原创 2019-10-14 14:05:13 · 385 阅读 · 0 评论 -
23中常用设计模式之桥接模式
说明桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。 一个事物我们可以从不同的维度去描述它,在众多维度中我们需要确定一个主维度,即其他副维度是描述主维度的。在桥接模式中,我们需要将主维度抽象化,副维度实现化,使他们能够独立的变化。 举栗说明:扩展\维度形状颜色...原创 2019-10-13 23:16:03 · 104 阅读 · 0 评论 -
23种常用设计模式之适配器模式
说明适配器模式(Adapter)是一种结构型设计模式。顾名思义,主要作用就是用来做适配用的。之所以需要适配,是因为已有的代码不能很好的完成我们的业务逻辑,但是通过简单的适配,就可以满足我们的需求,避免重复编写很多业务代码。应用场景想要复用一些现有的类,但是接口与复用环境要求不一致,比如入参不同、返回结果结构不能满足需求等。模式特征角色说明举栗Interface(目标...原创 2019-10-13 21:24:01 · 189 阅读 · 0 评论 -
23种常用设计模式之单例模式,以及它的十种实现方式
说明单例模式(Singleton)是一种常用的创建型软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。应用...原创 2019-10-11 23:52:14 · 318 阅读 · 0 评论 -
如何有效重写equals()方法和hashCode()方法
平时工作中难免会遇到需要根据自己的情况比较自定义对象的时候,这个时候我们就需要重写类的equals方法和hashCode方法。核心示例代码:class Person{ private String name; private Integer sex; private Integer age; private String idCard; @Ove...原创 2019-06-25 14:54:23 · 588 阅读 · 0 评论 -
深入理解Java for循环
对于java中的for循环,我们用的最多的无非就是下面这个语句:for (int i = 0; i < 10; i++) { System.err.println(i);}但是对于for循环来说,它也有很多变体,如果不清楚了解for循环的结构原理,遇上一些变体的for循环,可能一时不太明白它的含义,for循环虽然有很多变体,但都离不开括号内3条语句的模式(除了增强fo...原创 2019-01-06 17:12:48 · 2965 阅读 · 0 评论 -
如何下载jdk源码、hotspot源码
jdk的开源主要体现openjdk项目上,下面简单介绍一下jdk及其子项目hotspot的源码下载方式。首先我们进入网址:http://hg.openjdk.java.net,这个网址下面列出了所有开源的openjdk项目,从中我们可以看到jdk项目。然后我们以jdk8u为例说明,该页面下列出了很多个版本的jdk8源码,读者可根据需要下载相应的版本,图中红框标注的就是我们要下载的hot...原创 2018-12-31 12:39:42 · 10297 阅读 · 1 评论 -
Java获取资源路径下的文件、模板
工作时有个需求是需要发送html格式的邮件,这里我们不讨论发邮件的事,而是讲一讲如何从java项目的资源路径下获取自定义的资源文件或者模板。我这里是需要获取html文件的内容,并替换其中的信息,发送html格式的邮件。HTML文件内容如下:<!DOCTYPE html><html lang="en"><head> <meta cha...原创 2018-12-30 20:39:55 · 5433 阅读 · 0 评论 -
Java各种运算符号的含义及区别汇总
一、<< :左移运算符,num << 1,相当于num乘以2例如:2 << 1 //4 移了一位2*22 << 2 //8 移了两位 2*2*22 << 3 //16 移了三位 2*2*2*2二、>> :右移运算符,num >> 1,相当于num除以2例如:16 &g原创 2019-01-03 22:40:45 · 15678 阅读 · 1 评论 -
浅谈Java中的hashcode方法
原文:https://www.cnblogs.com/dolphin0520/p/3681042.html哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法: 1 publicnativeinthashCode(); 根据这个方法的声明可知,该方法返回一个int类...转载 2018-08-02 13:45:55 · 204 阅读 · 0 评论 -
你需要记住的单例模式
单例模式有很多种实现方式,网上资料也有很多,什么枚举型、饿汉型、懒汉型、静态内部类型等等,实现方式很多,不便于记忆。我总结了一下,你需要记住两种类型,即线程安全型和非线程安全型。如有瑕疵,望不吝赐教。线程安全型:public class SingletonThreadSafe { //私有化构造器 private SingletonThreadSafe(){} ...原创 2019-06-25 15:58:56 · 153 阅读 · 0 评论 -
Java main方法传参问题(四种解决办法)
Java 的main方法是Java程序员最熟悉不过的一个方法了,因为我们大多数时候,启动程序都是需要使用到该方法的,且main方法的参数列表是String[] args,一个字符串数组,那么我们如何在启动的时候传入我们需要的参数呢,下面介绍三种方法。〇、程序示例代码:public class GreenLeaf { public static final String TYPE ...原创 2019-07-31 11:17:59 · 16300 阅读 · 0 评论 -
通过Dockerfile构建java项目镜像
准备条件:Centos7 虚拟机 + docker软件运行环境可执行的java项目jar包涉及到的三个文件:Dockerfilees-0.0.1-SNAPSHOT.jarstart.sh (非必需)Dockerfile:# 依赖的基础镜像FROM docker.io/itoak/java8:1.0.0# 作者信息MAINTAINER itoak <www.i...原创 2019-08-15 14:31:20 · 3816 阅读 · 0 评论