
Java
EJoft
这个作者很懒,什么都没留下…
展开
-
org.apache.http.NoHttpResponseException故障排查
文章目录背景问题分析解决方法加入重试机制Reference背景最近公司的spark离线任务稳定有报错日志:java.lang.RuntimeException: org.apache.http.NoHttpResponseException: demo.com:80 failed to respond通过该报错日志我们可以判断是离线任务中使用的 httpclient 调用失败了,使用的组件版本如下:httpclient-4.5.12httpcore-4.4.13问题分析遇到问题首先是在原创 2022-02-28 22:51:03 · 5912 阅读 · 0 评论 -
【Effective Java】使可变性最小化
基础概念不可变类是指其实例不能被修改的类,每个实例中包含的信息都应该在创建该实例的时候就提供,并在对象的整个生命周期(lifetime)内固定不变。其中常用的 String、基本类型包装类、BigInteger和BigDecimal 就是不可变类。为了使类变成不可变,要遵循下面五条规则:不要提供任何回修改对象状态的方法保证类不会被扩展,即不会有方法重写声明所有的域都为final声明所有的域都为私有确保对于任何可变组件的互斥访问代码示例// Immutable complex numbe原创 2021-09-14 16:55:21 · 206 阅读 · 0 评论 -
【Effective Java】重写equals方法时的注意点
本文为《Effective Java》的读书笔记,经典的书每次读都会有不一样的感受,有些知识点只有有了相应的工作经验才能真正理解。相信大家刚开始学须 Java 基础时就对 equals 方法进行了重点学习。这里再总结下注意点。Equals 方法的通用约定自反性(reflexive):对于任何非 null 的引用值 x, x.equals(x) 必须返回 true对称性(symmetric):对于任何非 null 的引用值 x 和 y,当且仅当 y.equals(x) 时返回true,x.equals原创 2021-09-13 21:35:19 · 269 阅读 · 0 评论 -
Java BigDecimal 常用代码模版记录【持续更新,欢迎补充】
在电商领域,涉及到金额的遍历一般会使用 BigDecimal ,这里总结其常用的代码。两数进行比较比较两个金额是否相等,如 12 与 12.00,可以使用 compareTo 方法进行比较,如果返回0则相等,反之不相等。private boolean moneyEqual(String a, String b) { return new BigDecimal(a).compareTo(new BigDecimal(b)) == 0;}@Testpublic void moneyEqua原创 2021-04-22 11:22:23 · 324 阅读 · 0 评论 -
Spring生命周期
@Slf4j@Componentpublic class ApplicationContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws Beans原创 2021-02-25 22:38:07 · 143 阅读 · 0 评论 -
FastJson处理Map List 对象
转载:FastJson处理Map List 对象转载 2021-02-25 16:32:58 · 346 阅读 · 0 评论 -
logback 对特殊日志进行过滤
工作中需要对 logback 的日志进行定制化过滤,此时只需要在 logback-spring.xml 文件中配置 filter 即可,具体可看官方文档以及以下博客。Chapter7: filterslogback 使用 filter 过滤原创 2021-02-19 13:53:54 · 1773 阅读 · 0 评论 -
Java 对象流与序列化
Java 对象流与序列化Java 支持一种称为对象徐硫化(object serialization)的非常通用的机制,可以将任何对写出到流,并在之后将其读回,我们可以使用 ObjectOutputStream 和 ObjectInputStream 来进行序列化和反序列化操作。所有支持序列化的类都必须实现 Serializable 接口,这也是一个标记接口。Classes that require special handling during the serialization and deser原创 2020-11-06 14:38:11 · 332 阅读 · 0 评论 -
Unicode编码浅析及Java流简介
前言在总结 Java 流相关的技术时,有必要简单回顾一下字符集相关的内容。Unicode简介在Java(其中主要包括在JVM中、内存中、在代码里声明的每一个char、String类型的变量中。)中字符只以一种形式存在,那就是 Unicode,不选择任何特定的编码,直接使用它们在字符集中的编号,这是统一的唯一的方法。在JVM内部,统一使用Unicode表示,当着字符从JVM内部移动到外部时(即保存为文件系统中的一个文件内容时),就进行了编码转换,使用了具体的编码方案。因此也可以说,所有的编码转换只原创 2020-11-05 19:29:16 · 711 阅读 · 2 评论 -
Java中注解的使用与原理
欢迎访问原文链接UML注解语法注解是由注解接口来定义的modifiers @interface AnnotationName { elementDeclaration1; elementDeclaration1;}每个元素的声明都有如下的形式:type elementName();type elementname() default value;我们从来不需要提供那些实现了注解接口的类,相反地,虚拟机会在需要的时候产生于血代理类和对象。注解接口中的元素声明实际上是方法声明,原创 2020-10-30 22:45:40 · 275 阅读 · 0 评论 -
设计模式——代理模式
欢迎访问原文链接UML意图为其他对象提供一种代理以控制对这个对象的访问。别名Surrogate动机**对一个对象进行访问控制的原因是我们确实需要这个对象时才对它进行创建和初始化。**好多博客都用火车票代售点这个例子来解释代理模式,虽然这个例子贴近生活,容易理解。但是并不能很好地解释代理模式最重要的作用以及其优点。这里使用书上的例子来讲解个人感觉更好。考虑一个可以在文档中嵌入图形对象的文档编辑器。有些图形的创建开销很大。但是打开文档必须很迅速,因此我们在打开文档时应避免一次性创建很大的对象。原创 2020-10-30 22:12:43 · 180 阅读 · 0 评论 -
UML中的association,aggregation以及composition
UMLUML 我们平时经常会用到,但有一些概念一直搞不清,在这里梳理一下。基本概念在这里使用微软文档中的图例进行说明ShapeElementDescription1ClassA definition of objects that share given structural or behavioral characteristics. For more information, see Properties of types on UML class diagrams.原创 2020-07-07 22:42:31 · 3288 阅读 · 0 评论 -
HashMap源码解析(JDK11)
欢迎跳转到本文原文链接 Backend_Notes概览HashMap 根据 key 的 hashCode 值进行储存数据,大多数情况喜爱可以直接定位到他的值,因此有很快的访问速度遍历的顺序不确定,并且不能保证顺序不改变扩容是一个特别耗性能的操作,所以 在使用时可以先给一个大致的容量允许一条记录的 key 为 null,且允许多条记录的 value 为 null线程不安全,即同一时刻有多个线程同时写 HashMap,对HashMap 造成结构性变化(A structural原创 2020-05-21 22:38:58 · 337 阅读 · 0 评论 -
ArrayList 源码解析(JDK11)
欢迎跳转到本文原文链接 Backend_Notes之前有写过关于 ArrayList 的源码解析,当时是基于 JDK8 的,现在 JDK11 变成了 LTS 版本,重新看一遍源码并做相关记录。概览ArrayList 底层基于动态数组,并且容量可变ArrayList 是线程不安全的,效率较高ArrayList 中 size(), isEmpty(), get(), set(), iterator(), and listIterator()操作耗时为常数时间ArrayList 中 add() 耗原创 2020-05-14 22:11:20 · 700 阅读 · 3 评论 -
代码检查工具推荐:Spotbugs, PMD, Checkstyle
在上 coursera 课程时发现三个对于代码静态检查和风格很有帮助的工具:spotbugsPMDCheckstyle感兴趣的同学可以自行前往官网进行学习使用。原创 2020-05-14 00:52:21 · 1317 阅读 · 0 评论 -
LinkedList 源码解析(JDK11)
欢迎跳转到本文原文链接 Backend_Notes概述LinkedList 底层由双向链表实现,插入与删除操作效率高,但是查询效率低。LinkedList 支持存错多个相同的元素(包括null),且有序。LinkedList 不是线程安全的,存在线程安全问题。LinkedList 不需要扩容类名public class LinkedList<E> extends AbstractSequentialList<E> implements List&l原创 2020-05-12 16:53:07 · 476 阅读 · 0 评论 -
Vector 源码解析(JDK11)
欢迎跳转到本文原文链接 Backend_Notes概览Vector 底层有数组实现,支持动态扩容Vector 是线程安全的,是由 synchronized实现的, 效率较低Vector 扩容时数组长度会变成原来两倍或者原长度加上capacityIncrement, ArrayList 扩大为原来1.5倍。类名public class Vector<E> extends AbstractList<E> implements List<E>,原创 2020-05-12 15:26:38 · 230 阅读 · 0 评论 -
Java 程序调试技巧:-verbose, -Xlint, jconsole,-Xprof
欢迎跳转到本文原文链接Backend_Notes以下程序调试技巧节选自 Java 核心技术卷一(p307-p308)可以通过捕获异常来生成堆栈信息,也可以直接使用 Thread.dumpStack()来获得堆栈信息要观察类的加载过程,可以使用 -verbose标志启动 JVM-Xlint 可以告诉编译器对一些普遍容易出现的代码问题进行检测,如javac -Xlint:fallthrough-Xlint 或 -XLint:all – 执行所以检查-Xlint:deprecation原创 2020-05-10 14:50:05 · 812 阅读 · 0 评论 -
Java中的异常处理,面试看这一篇就够了
欢迎跳转到本文原文链接 ,给出您的建议Backend_Notes程序运行过程中总会因为各种原因而抛出异常,此时我们需要的是当用户期望出现错误时,程序能够采用一些理智的行为:返回到一种安全状态,并能够让用户执行一些其他的命令,或者运行用户保存所有操作结果,并以妥善的方法终止程序如果某个方法不能够采用正常的途径完成它的任务,就可以通过另一个路径退出方法,在这种情况下,方法会抛出一个封装了错误信息的对象。需要注意的是:这个方法会立刻退出,并不会返回任何值。此外,调用这个方法的代码也无法继续执行,取而原创 2020-05-09 22:06:41 · 397 阅读 · 0 评论 -
浅析Java语言Object中的equals、hashcode和clone方法
欢迎跳转到本文原文链接 Backend_NotesObject 类是 Java 中所有类的超类,在 Java 中每个类都是由它扩展来的,只有基本类型(primitive types)不是对象,剩下的引用类型都是对象,包括对象数组或者基本类型数组。Object obj = new int[10] // okObject 方法概览:public final native Class<?> getClass();public native int hashCode();public b原创 2020-05-09 09:37:45 · 448 阅读 · 0 评论 -
简单记录Java中的接口
欢迎跳转到本文原文链接 Backend_Notes接口的特性接口不能用 new 实例化,但可以声明接口变量,接口变量必须引用实现了接口的类的对象:x = new Comparable(); // ErrorComparable x = new Employee() // OK provided Employee implements Comparable可以使用 instan...原创 2020-05-08 16:27:55 · 166 阅读 · 0 评论 -
Java中的内部类,看这一篇就够了
欢迎跳转到本文原文链接 Backend_Notes内部类(inner class)是定义在另一个类中的类,需要使用内部类的原因有三个:内部类方法可以访问该类定义所在作用域中的数据,包括私有的数据内部类可以对同一个包中的其他类隐藏起来当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷使用内部类访问对象状态我们可以看以下的例子:public c...原创 2020-05-08 16:26:19 · 275 阅读 · 0 评论 -
浅析Java中的Lambda表达式
欢迎跳转到本文原文链接 Backend_NotesJava 语言在 JDK8 中引入了 lambda 表达式,它是一个可传递的代码块,可以在以后执行一次或多次,我们来看 一个小例子。String[] strings = {"a", "A", "b", "B"};Arrays.sort(strings);System.out.println(Arrays.toString(strings)...原创 2020-05-08 01:17:43 · 393 阅读 · 0 评论 -
Java中对象与类相关知识点
欢迎跳转到本文原文链接 Backend_NotesJava 是面向对象的语言,其中类 (class) 是构造对象的模板或者蓝图,由类构造(construct)的过程成为创建类的实例(instance)。封装封装(encapsulation)是与对象相关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式,对象中的数据成为实例域(instan...原创 2020-05-07 22:16:40 · 364 阅读 · 0 评论 -
浅析Java中按值传递
欢迎跳转到本文原文链接 Backend_Notes首先回顾一下程序设计语言中有关将参数按值传递给方法(或函数)的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call by reference)标识方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用对应的变量值。Java 程序设计语言总是采用按值调...原创 2020-05-07 22:14:41 · 242 阅读 · 0 评论 -
正则表达式的历史以及语法
欢迎跳转到本文原文链接 Backend_NotesA regular expression (shortened as regex or regexp; also referred to as rational expression) is a sequence of characters that define a search pattern. Usually such patterns...原创 2020-05-07 22:12:26 · 717 阅读 · 0 评论 -
浅析Java中Comparable与Comparator接口
我们在使用 Arrays.sort, Collections.sort 时会发现,调用该方法的类必须实现 Comparable接口,才能保证方法的正确调用,我们先来看Comparable 接口。Comparablepublic interface Comparable<T> { public int compareTo(T o);}This interface impos...原创 2020-05-07 16:05:54 · 379 阅读 · 0 评论 -
Java继承面试知识点总结
继承利用继承,人们可以基于已存在的类构造一个新类,继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加一下新的方法和域,以满足新的需求。覆盖方法简答的代码示例:public class Employee { private String name; private double salary; private LocalDate hireDay;...原创 2020-04-20 22:24:03 · 272 阅读 · 0 评论 -
Java多态面试知识点总结
从 Java 程序设计语言 1.0 版本发布以来,变化最大的部分就是泛型,致使Java SE 5.0 中增加泛型机制的主要原因是为了满足 1999 年制定的最早的 Java 规范需求之一 (JSR 14)。使用泛型机制编写程序代码要比那些杂乱地使用 Object 变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。[1]为什么要使用泛型泛型程序设计(Generic programm...原创 2020-04-20 22:20:48 · 293 阅读 · 0 评论 -
Java泛型面试知识点总结
从 Java 程序设计语言 1.0 版本发布以来,变化最大的部分就是泛型,致使Java SE 5.0 中增加泛型机制的主要原因是为了满足 1999 年制定的最早的 Java 规范需求之一 (JSR 14)。使用泛型机制编写程序代码要比那些杂乱地使用 Object 变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。[1]为什么要使用泛型泛型程序设计(Generic programm...原创 2020-04-20 22:13:31 · 275 阅读 · 0 评论 -
Java字符串面试知识点总结
Java 字符串就是 Unicode 字符序列,Java 没有内置的字符串类型,而是在 Java 类库中提供了一个预定义类 String,每个用双引号括起来的字符串都是 String 类的一个实例。Strings are constant; their values cannot be changed after they are created. String buffers support...原创 2020-04-09 22:58:07 · 263 阅读 · 0 评论 -
Java数组知识点归纳
概述数组是一种数据结构Java中要求数组中的数据是相同的类型数组的长度在初始化时就定好,以后不可变创建数字数组时,所有元素都初始化为0,boolean数组元素初始化为false,对象数组初始化为null。在Java中,允许数组长度为0,如 new elementType[0], 在编写一个结果为数组的方法时,如果结果为空,这种语法形式就很有用。数组的拷贝在Ja...原创 2020-04-09 22:31:26 · 544 阅读 · 0 评论 -
Java运算符面试知识点总结
这里记录下运算符中重要的知识点。二元运算符除0进行除法运算时需要注意, 整数除以 0 会抛出异常,但是浮点数除以 0 会得到无穷大或者 NaN。System.out.println(0.0 / 0); // NaNSystem.out.println(1.0 / 0); // InfinitySystem.out.println(1 / 0); // Exception in thre...原创 2020-04-08 15:29:08 · 225 阅读 · 0 评论 -
Java基本类型面试知识点总结
Java基本类型Java是强类型的语言,这意味着必须为每一个变量声明类型,根据最新(Java SE 14 Edition),Java一共有两种类型数据类型:primitiveType, referenceType。[1]基本概念整型类型存储需求取值范围byte1 byte-128 ~ 127 ( -2^7 ~ 2^7-1)short2 bytes-32 ...原创 2020-04-03 09:42:11 · 219 阅读 · 0 评论 -
Java基本类型的包装类面试知识点总结
There are two kinds of types in the Java programming language: primitive types (§4.2) and reference types (§4.3). There are, correspondingly, two kinds of data values that can be stored in variables,...原创 2020-04-01 23:22:21 · 248 阅读 · 0 评论