Java
文章平均质量分 77
cgl_dong
!
展开
-
ThreadPoolExecutor线程池解析
ThreadPoolExecutor原创 2024-04-11 11:08:29 · 404 阅读 · 0 评论 -
Java对象equals、clone
一、==、equals、hashcodeJava中比较对象通常使用==符和equals方法。== ⽐较的是对象地址,equals 是Object的一个方法,通常子类通过重写它来比较值。equals是Object类的方法,实现如下:public boolean equals(Object obj) { return (this == obj); 就是调用== }Object类中的方法就是==,但是可以通过重写equals方法进行比较。String类就通过重写方法来比较值原创 2021-03-04 11:25:28 · 242 阅读 · 1 评论 -
dom4j、Xstream、orika core简单demo
dom4j<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version> </dependency><!--book.xml文件,后面使用--><?xml versi原创 2020-12-28 09:55:20 · 230 阅读 · 0 评论 -
Spring后置处理器BeanPostProcessor
Spring后置处理器BeanPostProcessorSpring提供了许多扩展点,如FactoryBean、Aware,这里还有BeanPostProcessor在Spring的生命周期中,BeanPostProcessor在初始化前后处理bean。Spring中的bean每个都会经过Bean后置处理器,其中两个方法会一个一个接受bean的实例和beanName,判断类型进行处理即可。若想使用BeanPostProcessor对bean进行增强,实现该接口即可。还可以实现Ordered接口处原创 2020-12-28 09:54:40 · 281 阅读 · 0 评论 -
编程语言在函数中的参数传递
1、PythonPython 的参数传递是赋值传递 (pass by assignment),或者叫作对象的引用传递(pass by object reference)。Python 里所有的数据类型都是对象,所以参数传递时,只是让新变量与原变量指向相同的对象而已,并不存在值传递或是引用传递一说。 ----来自互联网总结一下:就是在使用函数时,把实参赋给函数的形参,即形参=实参,函数的形参和实参指向同一对象。那么在函数中参数的原创 2020-12-28 09:50:41 · 215 阅读 · 0 评论 -
dom4j、Xstream、orika等类库简单使用
最近用xml的数据格式比较多,所以简单记录一下这些类库的使用。dom4jdom4j用dom模型的方式解析xml数据。<!--依赖包--><dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version>.原创 2020-10-17 09:28:18 · 261 阅读 · 0 评论 -
joda-time类库的简单使用
joda-time是处理时间的简单的库,比自带的库有时候好用的多。<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.2</version> </dependency> 都能输出指定格式的文件。 Dat原创 2020-10-17 09:15:17 · 393 阅读 · 0 评论 -
Spring中的ApplicationContext
Spring中的ApplicationContext1、ApplicationContext应用程序上下文ApplicationContext是最常用的Spring ioc容器,他实现了很多接口:BeanFactory:Spring 管理 Bean 的顶层接口,我们可以认为他是一个简易版的 Spring 容器。ApplicationEventPublisher:用于封装事件发布功能的接口,向事件监听器(Listener)发送事件消息。ResourceLoader:Spring 加载资源的顶层接口原创 2020-06-24 06:12:38 · 404 阅读 · 0 评论 -
Spring 中的BeanFactory
Spring 中的BeanFactorySpring中的BeanFactory到底是啥,是一个基础的容器,不过我们一直使用的ApplicationContext这个类相关的容器,相比于应用上下文这个继承实现了诸多接口的容器,BeanFactory更像是半成品,少了很多功能。ApplicationContext这个容器也是对BeanFactory的扩展。XmlBeanFactory看这段代码,获取Bean。XmlBeanFactory factory = new XmlBeanFactory(ne原创 2020-06-24 05:13:56 · 281 阅读 · 0 评论 -
大数据实验(七)Spark单机安装及WordCount(TopKey)
大数据实验(七)Spark单机安装前置环境Ubuntu 16.04Hadoop 2.7.3Java JDK 1.8Spark 3.0.0-preview2一、Spark安装001、下载Spark在Apache官网找到合适的版本进行下载,下载了Spark 3.0.0-preview2。002、安装将Spark 3.0.0-preview2解压到/usr/local下,改名为spark003、配置环境变量sudo vim ~/.bashrc加入位置# Spark Enviro原创 2020-06-12 21:14:16 · 320 阅读 · 0 评论 -
Java集合源码总览(jdk1.8)
Java集合概述一、集合概述①、集合是用于存放对象的容器,通常与泛型结合使用。必须是对象类型,泛型类型必须是对象类型,数据如果是基本类型,会被自动转换成封装类。如int装箱成Integer。②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。③、集合可以存放不同类型数据,是对各种数据结构和算法的封装。二、常用集合容器Java常用集合容器有List,Set,Map,这也是对应接...原创 2020-05-26 00:00:13 · 206 阅读 · 0 评论 -
Java集合之HashSet源码剖析(jdk1.8)
Java集合之HashSet源码剖析(jdk1.8)文章目录Java集合之HashSet源码剖析(jdk1.8)1、简介2、源码解析1、属性2、构造方法3、重要方法3、总结1、简介HashSet是Set接口下常用的实现类。HashSet的实现主要使用HashMap的key来满足Set的特性:不重复,并且也是无序的。HashSet的继承图谱如下:实现的都是些基础接口。2、源码解析H...原创 2020-05-18 23:13:12 · 268 阅读 · 0 评论 -
Java集合之HashMap源码剖析(jdk1.8)
Java集合之HashMap源码剖析(jdk1.8)文章目录Java集合之HashMap源码剖析(jdk1.8)1、简介2、源码分析1、属性2、内部类3、构造方法4、核心方法1、put方法2、resize方法3、get方法4、remove方法5、replace方法6、其他方法3、总结1、简介HashMap是较为常用的一种集合,底层结构较为复杂。由数组+链表+红黑树组成。HashMap使用...原创 2020-04-23 16:36:09 · 125 阅读 · 0 评论 -
Java集合之ArrayList源码剖析
Java集合之ArrayList源码剖析1、简介ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可称之为动态数组。查询快,增删慢,线程不安全。继承图谱如下:ArrayList实现了List, RandomAccess, Cloneable, java.io.Serializable等接口。ArrayList实现了List,提供了基础的添加、删除、...原创 2020-04-18 13:45:46 · 121 阅读 · 0 评论 -
Java集合之LinkedList源码剖析
Java集合之LinkedList源码剖析1、简介LinkedList底层基于双向链表,增删快,插入慢,还可以作为队列或者栈来使用。继承图谱如下:LinkedList实现了List、Serializable、Cloneable、Deque等接口。LinkedList实现了Cloneable,可以被克隆。LinkedList实现了Serializable,可以被序列化。LinkedL...原创 2020-04-18 13:45:27 · 107 阅读 · 0 评论 -
Java--HttpClient请求
Java–HttpClientHttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。通过HttpClient可以模拟发出http请求,支持各种请求如get\post\delete等http协议。也可以做爬虫。使用Get请求测试一下:Http...原创 2020-04-18 13:44:57 · 169 阅读 · 0 评论 -
Java--NIO入门
Java–NIOJava传统的IO是阻塞式的,而NIO则提供了非阻塞式的IO.NIO即New IO, java从jdk1.4开始引入,用于解决阻塞式的处理,所以也可以说是No block IO.NIO主要是用来处理Socket中阻塞的问题。1、NIO组件Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectorsChannel所有的 IO ...原创 2020-04-18 13:44:34 · 144 阅读 · 0 评论 -
Java--Stream流操作
Java–Stream流操作一、Stream概述Jdk在1.7之后提供了函数式编程,随之而来的还有Stream流。通过流可以达成链式操作。Stream这里的流与IO流毫无关系,这里的流指的是流式操作,就是流水线操作。Stream流操作主要包包括三大模块:创建流操作、中间流操作、终结流操作。其中创建流主要是创建Stream对象。每个Stream对象只能使用一次终结操作。中间流操作指的是...原创 2020-04-18 13:43:58 · 410 阅读 · 0 评论 -
Spring之Environment
Spring之EnvironmentSpring在运行时的环境有多个选择,开发环境、测试环境、生产环境等。每个Environment中可以配置多个Property,这些Property可以自定义配置,配置信息可以注入Spring容器。这种配置可以在xml中,也可以在javaConfig中。我们用java配置类来测试。使用Environment的Property向容器中的Bean的属性注入值...原创 2019-12-30 22:34:23 · 265 阅读 · 0 评论 -
Spring之ResourceLoader
Spring之ResourceLoaderSpring中的ResourceLoader用于加载资源。可以从文件中、网络中、流中加载资源。资源加载器是个接口,默认从类路径下加载。通过getResource方法从字符串中查找路径。可以从容器中获取ResourceLoader,调用getResource方法。public interface ResourceLoader { String ...原创 2019-12-30 22:11:41 · 251 阅读 · 0 评论 -
Spring之Aware
Spring之AwareSpring 中的Aware用于帮助bean获取Spring Bean获取Spring容器的功能。如这些Aware: ApplicationContextAware//获取容器服务 BeanNameAware//获取BeanName ResourceLoaderAware//获取资源加载器服务想获取什么功能就实现什么Aware即可。以 Applicatio...原创 2019-12-30 21:45:59 · 173 阅读 · 0 评论 -
数据结构之二叉搜索树(java语言版)
数据结构之二叉搜索树(java语言版)之前介绍了树,主要实现了二叉树的代码。在二叉树的基础上有许多衍生的树,如二叉搜索树、哈夫曼树等,今天学习一下二叉搜索树。数据结构与算法学习目录二叉搜索树二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为 BST又被称为:二叉查找树、二叉排序树特点任意一个节点的值都大于其左子树所有节点的值任意一个节点的值都小于其右子树所有节点的...原创 2019-12-28 16:06:27 · 157 阅读 · 0 评论 -
Java函数式编程、lambda表达式
Java函数式编程、lambda表达式Java8开始支持函数式编程、包括lambda表达式、Stream流。函数式编程用于简化开发,对于某些类,或许只使用一次,那么就没必要对其进行单独的实现一个类,java原本提供了简化的方案,如内部类、匿名内部类等。lambda对此更加简化。函数式接口函数式接口就是只有一个方法的接口,想想函数是不是一个个是独立的。Runnable接口就是一个函数式接...原创 2020-06-24 05:12:54 · 85 阅读 · 0 评论 -
Java函数式编程、lambda表达式
Java函数式编程、lambda表达式Java8开始支持函数式编程、包括lambda表达式、Stream流。函数式编程用于简化开发,对于某些类,或许只使用一次,那么就没必要对其进行单独的实现一个类,java原本提供了简化的方案,如内部类、匿名内部类等。lambda对此更加简化。函数式接口函数式接口就是只有一个方法的接口,想想函数是不是一个个是独立的。Runnable接口就是一个函数式接...原创 2019-12-21 13:56:03 · 147 阅读 · 0 评论 -
Java 多线程基础
Java 多线程基础Java使用多线程进行并发编程。一、进程、线程、协程、守护线程进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可...原创 2019-12-20 12:15:12 · 87 阅读 · 0 评论 -
数据结构之Hash(java语言版)
数据结构之Hash(java语言版)Hash表Hash也叫散列、哈希,是一种根据key-value对进行存储的数据结构。每个value对应一个key,这样查找的时候就无需遍历。Hash表使用数组作为底层结构,数组中每个区域都存储着Hash,这就是Hash表。列表、数组、树这些数据结构在查询数据时的时间复杂度通常为O(n),而Hash的时间复杂度为O(1).Hash函数:哈希表的键值之...原创 2019-12-08 20:04:23 · 231 阅读 · 0 评论 -
Java包装类、自动拆装箱机制
Java包装类、自动拆装箱复习一下Java的基本数据类型、包装类、自动装/拆箱机制,以及一些面试的坑。基本数据类型及其包装类在JAVA中一共有八种基本数据类型,他们分别是byte、short、int、long、float、double、char、boolean 。基本类型功能简单,不具备对象的特性,为了使基本类型具备对象的特性,所以出现了包装类,就可以像操作对象一样操作基本类型数据。常...原创 2019-12-08 13:51:49 · 203 阅读 · 0 评论 -
Java网络编程
Java网络编程简单了解一下Java的网络编程,JavaSE的学习我是跳过这部分的,在后来的Web学习中一直用的B/S架构,这部分用的不多,简单回顾一下。Java中和网络编程有关的包在java.net.*包下,如InetAddress、NetworkInterface、Socket等。1、网络接口类InetAddress、NetworkInterfaceInetAddress、Netwo...原创 2019-12-06 22:51:18 · 111 阅读 · 0 评论 -
Java反射
Java反射反射是Java的高级特性,让原本是静态类型的Java拥有了动态语言的特点。Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。就像镜子一样,反射回来的画面和原本的物体一样。反射是Java的重要特性,Java的Spring框...原创 2019-12-06 19:54:48 · 93 阅读 · 0 评论 -
Spring5.x中如何注册bean和获取bean
Spring5.x中如何注册bean和获取beanSpring5.x发布了,再次复习一下常用的注册和获取bean的方法。1.基于xml配置注册于获取bean2.半注解半xml方式3.基于注解注册与获取bean常用于获取bean的类:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationCon...原创 2019-12-01 18:54:08 · 372 阅读 · 0 评论 -
数据结构之图(java语言版)
数据结构之图(java语言版)图是比树更复杂的结构,树是一对多的关系,图是多对多的关系。数据结构与算法学习目录一、基本概念1、定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。2、根据边是否有方向,将图可以划分为:无向图和有向...原创 2019-11-30 17:41:08 · 591 阅读 · 0 评论 -
数据结构之二叉树(java语言版)
数据结构之二叉树(java语言版)数据结构与算法学习目录之前的都是线性结构,而树结构在计算机应用中的应用更加广泛。linux中的目录结构,某些数据库的底层存储等,都是采用树结构进行构架的。树的概念线性表是一对一的关系,而树是一对多的关系。树的结点:包含一个数据元素及若干指向子树的分支;孩子结点:结点的子树的根称为该结点的孩子;双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双...原创 2019-11-30 16:55:52 · 317 阅读 · 0 评论 -
数据结构之队列(java语言版)
数据结构之队列(java语言版)数据结构与算法学习目录队列(Queue):在逻辑上是一种线性存储结构。它有以下几个特点:1、队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的。2、 队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。队列通常包括的两种操作:入队列 和 出队列。队列的种类也很多,单向队列,双向队列,循环队列。底层可...原创 2019-11-30 10:23:21 · 150 阅读 · 0 评论 -
数据结构之栈(java语言版)
数据结构之栈(java语言版)栈(stack): 在逻辑上是一种线性存储结构,它有以下几个特点:1、栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。2、向栈中添加/删除数据时,只能从栈顶进行操作。栈通常包括的三种操作:push、peek、pop。push – 向栈中添加元素。peek – 返回栈顶元素。pop – 返回并删除栈顶元素的操作。...原创 2019-11-30 10:01:51 · 137 阅读 · 0 评论 -
数据结构之顺序表(java语言版)
数据结构之顺序表(java语言版)顺序表是最简单的线性表,也就是数组。很多语言都把把它当做内置的基本数据类型,这里的数组没有对应数据结构的操作。数组是顺序存储的结构,连续分配一段内存用于存储数据。在逻辑结构和物理结构上都是连续的。顺序表建立在java内置的数组上建立顺序表。public class Array{ private Object[] data;//容器 private ...原创 2019-11-29 18:42:25 · 621 阅读 · 0 评论 -
数据结构之链表(java语言版)
数据结构之链表(java语言版)链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。使用链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表的基本单位是节点(Node),每个节点有数据域和指针...原创 2019-11-29 00:25:53 · 279 阅读 · 0 评论 -
状态模式、策略模式
状态模式、策略模式状态模式和策略模式有些相似,都是能够动态改变对象的行为。但是状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。所谓的状态转移,是指 Context 在运行过程中由于一些条件发生改变而使得 State 对象发生改变,注意必须要是在运行过程中。状态模式主要是用来解决状态转移的...原创 2019-10-22 21:46:12 · 891 阅读 · 0 评论 -
装饰器模式
装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象动态的添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。介绍目的: 装饰器模式可以动态的增加对象的功能。在某些方面比继承更加灵活。优点: 装饰类和被装饰类可以独立发展...原创 2019-10-20 08:56:44 · 121 阅读 · 0 评论 -
桥接模式
桥接模式桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响,将抽象部分与它的实现部分分离,使它们都可以独立地变化。介绍**目的:**将抽象类和实现类解耦,使两方面都可以独立的...原创 2019-10-20 08:56:56 · 103 阅读 · 0 评论 -
建造者模式
建造者模式建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。介绍意图:建造一个复杂的对象,该对象是由简单的对象构建而...原创 2019-10-20 08:57:07 · 108 阅读 · 0 评论