![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java学习
文章平均质量分 87
dxx707099957
这个作者很懒,什么都没留下…
展开
-
Java Optional用法
Java optional转载 2022-09-07 10:04:16 · 204 阅读 · 0 评论 -
Java枚举类型
定义枚举类型其实就是在定义一个类,只不过很多细节由编译器帮你补齐了,所以,某种程度上enum关键词的作用就像是class或interface. 当使用enum定义枚举类型时,实际上所定义出来的类型是继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例,它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用它们。JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“原创 2020-08-04 17:23:49 · 108 阅读 · 0 评论 -
jvm中string的底层分析
一、String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”。因为Sring源码是被final修饰的。二、字符串常量池字符串常量池位于方法区,常量池分为两种,一种是静态常量池,一种是运行时常量池 我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使...原创 2019-08-25 22:23:21 · 127 阅读 · 0 评论 -
11、Java封装类
一、封装类的构造器1、对于基本数据类型的封装:Integer i=new Integer(10);2、对于字符型:Integer i= new Integer(“10”);二、封装类的3种方法1、valueOf(); 静态方法,返回的是一个指定类型的封装类实例)(目前jdk支持自动装箱与拆箱)2、*** Value();把封装类对象转化或基本数据类型的值3、parse***(); 把S...原创 2019-05-31 21:30:00 · 120 阅读 · 0 评论 -
10、Java对象向上转型和向下转型
对象的向上转型对象的向上转型,就是多态的写法。格式:父类名称 对象名 = new 子类对象名称(); Animal animal = new Cat();含义:右侧创建一个子类对象,把它当做父类来看。注意事项:向上转型一定是安全的,从小范围转换成为大范围。类似于:double num = 100;int --> double,自动类型转换。抽象类...原创 2019-05-28 21:12:50 · 137 阅读 · 0 评论 -
9、Java 中的异常处理
Java异常类层次结构图在 Java 中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable: 有两个重要的子类:Exception(异常)和Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代...原创 2019-05-28 21:12:28 · 131 阅读 · 0 评论 -
8、IO流学习总结
一 Java IO,硬骨头也能变软(1) 按操作方式分类结构图:(2)按操作对象分类结构图二 java IO体系的学习总结 IO流的分类: 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的角色划分为节点流和处理流。 流的原理浅析: java Io流共涉及40多个类...原创 2019-05-28 21:12:05 · 95 阅读 · 0 评论 -
7、Comparable和Comparator
Comparable和Comparator区别1、Comparable是内部比较器,仅针对某个类进行比较,和具体类绑定,而Comparator是外部比较器,适用于多种类,只需要建立这些类的比较器即可。2、另外,**Comparator实际上是一种策略模式**,比如TreeMap / TreeSet中持有Comparator接口的引用`Comparator comparator`,通过Tre...原创 2019-05-28 21:11:17 · 77 阅读 · 0 评论 -
6、说一下转发(Forward)和重定向(Redirect)的区别
说一下转发(Forward)和重定向(Redirect)的区别转发是服务器行为,重定向是客户端行为。转发(Forword)通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest的...原创 2019-05-28 21:10:53 · 466 阅读 · 0 评论 -
5、final关键字
final的三种情况:数据、方法、类1、final数据基本类型使用final使数值亘古不变对对象引用使用final,一旦引用被初始化指向一个对象,就无法再把它指向另一个对象,然而对象自身是可以被修改的。Java并未提供使任何对象和数组恒定不变的途径。一个既是static又是final的域只占据一段不能改变的存储空间2、final方法使用final方法有两个原因...原创 2019-05-28 21:10:27 · 126 阅读 · 0 评论 -
4、重载和重写的区别
重载: 发生在同一个类中, 方法名必须相同,参数类型不同、个数不同、顺序不同, 方法返回值和访问修饰符可以不同, 发生在编译时。 重写: 发生在父子类中, 方法名、参数列表必须相同,返回值范围小于等于父类, 抛出的异常范围小于等于父类, 访问修饰符范围大于等于父类; 如果父类方法访问修饰符为 priva...原创 2019-05-28 21:10:01 · 561 阅读 · 0 评论 -
3、hashCode 与 equals
hashCode()介绍hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用...原创 2019-05-28 21:09:33 · 120 阅读 · 0 评论 -
2、Java 面向对象编程三大特性: 封装 继承 多态
Java 面向对象编程三大特性: 封装 继承 多态封装封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。继承继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通...原创 2019-05-28 21:09:02 · 532 阅读 · 0 评论 -
1、面向对象6大原则
1、单一职责原则——SRP2、开闭原则——OCP3、里式替换原则——LSP4、依赖倒置原则——DIP5、接口隔离原则——ISP6、迪米特原则——LOD1、单一职责原则——SRP单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情。如果一个类负责了方法M1,方法M2两个不同的事情,当M1方法发生变化的时候,我们需...原创 2019-05-28 21:08:31 · 216 阅读 · 0 评论 -
【高并发】高并发五个利器(缓存、限流、降级、熔断、隔离)
文章目录一、前言 二、缓存 2.1 缓存本质 + 缓存分类 + 缓存三大特征 + 三种淘汰算法 + 根据业务场景设计过期时间 2.2 本地缓存(进程内缓存) 2.3 分布式缓存 2.4 缓存五问题:缓存雪崩 + 缓存穿透 + 缓存击穿 + 缓存更新 + 数据不一致 2.4.1 缓存雪崩问题 2.4.2 缓存穿透问题 2.4.3 缓存击穿问题 2.4.4 缓存更新问题(四种缓存更新方式 + 缓存数据源:DB和远程服务) 2.4.5 缓存数据不一致问题转载 2020-10-16 15:22:36 · 4563 阅读 · 3 评论 -
简洁又快速地处理集合——Java8 Stream(下)
本篇文章主要内容:一种特化形式的流——数值流 Optional 类 如何构建一个流 collect 方法 并行流相关问题一. 数值流前面介绍的如int sum = list.stream().map(Person::getAge).reduce(0, Integer::sum); 计算元素总和的方法其中暗含了装箱成本,map(Person::getAge) 方法过后流变成了 Stream<Integer> 类型,而每个 Integer 都要拆箱成一个原始类型再进行 sum 方法转载 2020-09-28 17:10:21 · 163 阅读 · 0 评论 -
简洁又快速地处理集合——Java8 Stream(上)
本篇文章主要内容:介绍 Stream 以及 Stream 是如何处理集合的 介绍 Stream 与集合的关系与区别 Stream 的基本方法介绍一. 什么是 StreamStream 中文称为 “流”,通过将集合转换为这么一种叫做 “流” 的元素序列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的流水线操作。换句话说,你只需要告诉流你的要求,流便会在背后自行根据要求对元素进行处理,而你只需要 “坐享其成”。二. 流操作整个流操作就是一条流水线,将元素放在流水线上一转载 2020-09-28 16:38:57 · 162 阅读 · 0 评论 -
理解、学习与使用 JAVA 中的 OPTIONAL
从 Java 8 引入的一个很有趣的特性是Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。我们从一个简单的用例开始。在 Java 8 之前,任何...转载 2020-09-17 16:05:20 · 97 阅读 · 0 评论 -
Guava学习之HashBiMap
HashBiMap存储的键和值都只能唯一,不存在键与键、值与值相同的情况(详细分析见我博客:Guava学习之BiMap)。HashBiMap类继承了AbstractMap类并实现了BiMap接口,其类继承关系如下图所示:HashBiMap AbstractMap类实现了Map接口定义的一些方法,而BiMap类定义了其子类需要实现的一些方法,使得所有实现BiMap的类必须符合其独有的特性:键、值都是唯一的。HashBiMap类中主要有以下几个成员变量: private s..转载 2020-09-17 14:32:36 · 1531 阅读 · 0 评论 -
Java关键字-instanceof
instanceof严格来说是Java中的一个双目运算符,用来测试一个对象是否是一个类的实例,用法:boolean result = obj instanceof Class 其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。 注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体转载 2020-09-01 15:28:28 · 152 阅读 · 0 评论 -
过多的if else 代码重构技巧总结
一、if else 的滥用在实际业务开发中,常常面临多个条件判断的情况,如果不加思索就写代码,很容易出现一堆if else 的代码,导致代码逻辑不清晰,可阅读性很差,笔者现在改造中的一个历史遗留项目,大片大片的if else,给后来人带来很大的理解成本。过多的if else ,这是很明显的坏代码的味道,这时就应该考虑自己的设计是否合理,有没有更好的表达方式了。二、if else 重构技巧1.适当提前return这是判断条件取反的做法,代码在逻辑表达上会更清晰,先看看下面这段demo示例代码:转载 2020-08-20 16:55:45 · 1201 阅读 · 0 评论 -
@PostConstruct注解
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:Constructor(构造方法)->@Autowired(依赖注入)->@PostCon...原创 2020-08-03 11:31:30 · 345 阅读 · 0 评论 -
Google guava工具类的介绍和使用
概述工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。guava的优点:高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 缓存 [caching] 原生类型支转载 2020-08-03 10:50:45 · 195 阅读 · 0 评论 -
javax.validation 效验工具(validation-api组件)使用教程
在后端开发时,不可避免的需要处理一些校验, 如果是写if-else这种代码去校验, 那会有一大段这样的代码。不过还好有个校验插件:javax.validation.validation-api,不过一般会引用hibernate的校验组件:org.hibernate.hibernate-validator, 它已经引用了validation-api组件。首先pom.xml引入依赖 <!-- validator --> <dependency> ...转载 2020-07-22 14:38:03 · 2147 阅读 · 0 评论 -
Lombok常用注解
加入 maven 依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version></dependency>1. @Getter/@Setter自动产生 getter/setter...转载 2020-07-22 10:55:01 · 883 阅读 · 0 评论 -
maven重新下载依赖
IDEA中terminal里输入maven目录 cleaninstall -U例如:原创 2020-07-22 10:52:10 · 1873 阅读 · 0 评论 -
JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
关于获取类的字段有两种方式:getFields()和getDeclaredFields()。我们先来看看这两者的区别吧:getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。同样类似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDecla.转载 2020-07-22 09:51:10 · 832 阅读 · 0 评论 -
倒排索引原理和实现
搜索引擎通常检索的场景是:给定几个关键词,找出包含关键词的文档。怎么快速找到包含某个关键词的文档就成为搜索的关键。这里我们借助单词——文档矩阵模型,通过这个模型我们可以很方便知道某篇文档包含哪些关键词,某个关键词被哪些文档所包含。单词-文档矩阵的具体数据结构可以是倒排索引、签名文件、后缀树等。倒排索引源于实际应用中需要根据属性的值来查找记录,lucene是基于倒排索引实现的。这种索引表...转载 2019-10-17 22:17:04 · 230 阅读 · 0 评论 -
spring加载bean的过程
首先,我在这里举个demo,大致演示一下怎么获取配置文件中的bean:一个applicationContext.xml配置文件,这个不可少;一个bean,这里我没用接口,直接用一个普通的类做为Spring的bean;一个Junit测试类;applicationContext.xml中的代码如下:<?xml version="1.0" encoding="UTF-8"?>...转载 2019-03-17 16:18:15 · 284 阅读 · 0 评论 -
spring官方文档翻译(前六章)
目录一、Spring框架概述1. Spring入门2. Spring框架简介2.1 依赖注入(DI)和控制反转(IoC)2.2 模块2.3 使用场景二、Spring 4.x中的新特性3. Spring 4.0的新特性和增强功能3.1 改进了入门体验3.2 移除了过时的包和方法3.3 Java 8(以及6和7)3.4 Java EE 6和73.5 ...转载 2019-03-12 19:29:36 · 401 阅读 · 0 评论 -
spring源码剖析AOP实现原理剖析
Spring的AOP实现原理,酝酿了一些日子,写博客之前信心不是很足,所以重新阅读了一边AOP的实现核心代码,而且又从网上找了一些Spring Aop剖析的例子,但是发现挂羊头买狗肉的太多,标题高大上,内容却大部分都是比较浅显的一些介绍,可能也是由于比较少人阅读这部分的核心代码逻辑把,然后写这部分介绍的人估计也是少之又少,不过说实话,Spring Aop的核心原理实现介绍确实不太好写,里面涉及的类...转载 2019-03-25 16:21:17 · 358 阅读 · 0 评论 -
Java学习·RuntimeException
/*Exception 中有一个特殊的子类异常RuntimeException运行时异常。如果在函数内容抛出这异常,函数上可以不用声明,编译一样通过如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过之所以不用再函数声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正自定义异常时,如原创 2016-04-13 10:16:43 · 281 阅读 · 0 评论 -
Spring事务管理实现方式之编程式事务与声明式事务详解
1.上篇文章讲解了Spring事务的传播级别与隔离级别,以及分布式事务的简单配置,点击回看上篇文章2.编程式事务:编码方式实现事务管理(代码演示为JDBC事务管理)Spring实现编程式事务,依赖于2大类,分别是上篇文章提到的PlatformTransactionManager,与模版类TransactionTemplate(推荐使用)。下面分别详细介绍Spring是如何通过该类实现事务管理。...转载 2019-03-16 16:55:29 · 409 阅读 · 0 评论 -
spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功。其必须遵循四个原则(ACID)。原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做;一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是应该处于正确的状态,即数据完整性约束没有被破坏;如银行...转载 2019-03-16 15:46:52 · 477 阅读 · 0 评论 -
Spring IOC 容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。本文采用的源码版本是 4.3.11.RELEASE,算是 ...转载 2019-03-16 15:21:19 · 168 阅读 · 0 评论 -
AQS 原理以及 AQS 同步组件总结
1 AQS 简单介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,Synchrono...转载 2019-03-20 16:57:56 · 162 阅读 · 0 评论 -
一致性哈希算法原理
一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人...转载 2019-03-29 22:17:15 · 105 阅读 · 0 评论 -
25个Spring常见问题
文章目录1、什么是Spring框架?Spring框架有哪些主要模块?2、使用Spring框架能带来哪些好处?3、什么是控制反转(IOC)?什么是依赖注入?4、请解释下Spring框架中的IoC?5、BeanFactory和ApplicationContext有什么区别?6、Spring有几种配置方式?7、如何用基于XML配置的方式配置Spring?8、如何用基于Java配置的方式配置Spring?...转载 2019-04-03 22:31:14 · 282 阅读 · 0 评论 -
Java8新特性学习-函数式编程(Stream/Function/Optional/Consumer)
Java8新引入函数式编程方式,大大的提高了编码效率。本文将对涉及的对象等进行统一的学习及记录。首先需要清楚一个概念:函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接口是一个函数式接口。函数式接口是Java支持函数式编程的基础。本文目录:1 Java8函数式编程语法入门2 Java函数式接口2.1 Consume...转载 2019-10-09 21:36:39 · 208 阅读 · 0 评论 -
清晰理解红黑树的演变---红黑的含义
前言 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。 本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证...转载 2019-09-19 14:59:46 · 157 阅读 · 0 评论