![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 84
编码是个技术活
与时消息,与时偕行,与时俱进
展开
-
Java8新特性系列-Lambda表达式
Java Lambda简介Lambda是Java8发版的重要特性,lambda表达式提供了一种使用表达式表示一个方法接口的方法。Lambda表达式就像一种方法,它提供形式参数的列表以及以这些参数表示的主体(可以是表达式或代码块)。Lambda表达式还改进了Collection库。Java8添加了两个与Collection的批量数据操作相关的软件包,即java.util.function软件包和java.util.stream。流就像迭代器一样,但是具有很多额外的功能。总之,lambda表达式和流是Ja.原创 2021-02-25 21:58:50 · 239 阅读 · 0 评论 -
Java8新特性默认方法和静态方法
在Java 8之前,默认情况下,接口中的所有方法都是公共的和抽象的。但是这一限制在Java 8中被打破了,Java 8允许开发人员在接口中添加新方法,而无需在实现这些接口的类中进行任何更改。为什么会有默认方法?主要是为了方便扩展已有接口;如果没有默认方法,加入给JDK中的某个接口添加一个新的抽象方法,那么所有实现了该接口的类都得修改,影响将非常大。举个例子,Sortable <T>接口以及实现该接口的类SortableNumberCollection和SortableStringColl.原创 2021-02-24 09:25:09 · 209 阅读 · 0 评论 -
Java泛型你必须知道的知识
一 什么是泛型Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。简单理解就是:泛型指定编译时的类型,减少运行时由于对象类型不匹配引发的异常。其主要用途是提高我们的代码的复用率。我们Java标准库中的ArrayList就是泛型使用的典型应用:public class ArrayList<E> extends AbstractList<E> implements List<E.原创 2021-02-22 13:17:01 · 163 阅读 · 0 评论 -
数据结构树(Tree)详解
树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构可用树来形象表示。树的定义和基本术语定义:树(Tree** 是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊地位,这个结点称为该树的根结点,或简称树根。术语:节点的度:一个节点含有的子树的个数称为该节点的度;原创 2021-02-21 09:21:33 · 3891 阅读 · 0 评论 -
每个程序员都应该知道的算法
在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)二分查找法概念:在计算机科学中,二分搜索(binary search),也称折半搜索(half-interval search)、对数搜索(logarithmic search),是一种在原创 2021-02-19 15:52:27 · 152 阅读 · 1 评论 -
如何避免java项目中的循环依赖问题
前言当我们开发一个Java项目时,我们要做的第一件事就是添加我们需要使用的依赖项,库或框架。为此,我们使用依赖管理工具(例如Maven或Gradle),来管理我们的项目依赖。我们为项目添加的每个依赖项都包含其他依赖项。我们都知道依赖传递这个概念。在许多情况下,项目的依赖传递不会有任何的问题,因为依赖管理工具(Maven或Gradle)很好地解决了不同库之间的版本冲突。但是,在其他情况下,当使用我们的API /库时或者不同的库依赖的同一个库不同版本,这些冲突会产生一些错误。举个例子:图中我们的API原创 2021-02-03 09:10:59 · 1490 阅读 · 1 评论 -
java并发编程-内存模型
java并发编程-内存模型一、前言首先我们需要了解java内存模型与我们经常谈到的Java内存结构(JVM内存结构)并不是同一个概念,这两个概念估计有不少人会混淆,经常面试时在问内存模型时,很多小伙伴会理解为内存结构,这也就导致面试过程中经常答非所问。它们都可以说是 JVM 规范的一部分,但真不是一回事!Java 内存模型,描述的是多线程允许的行为。Java 内存结构,描述的是线程运行所设计的内存空间。(常说的 JVM 内存结构指的就是上文提交到运行时数据区,其中堆、方法区被线程共享,程序计数原创 2020-12-04 10:41:01 · 124 阅读 · 0 评论 -
Java并发编程-线程基本概念
java并发编程-线程基本概念[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tej0O7ay-1604287982959)(https://raw.githubusercontent.com/wang37444/Graph-bed/master/data/bf01.png)]一、前言首先Java对线程的支持其实是一把双刃剑,虽然Java为我们提供了线程处理的丰富Java库及内存模型支持线程,但同时对开发人员技术提出了更高的要求,我们必须考虑更多的问题比如:执行顺序,线程原创 2020-11-02 11:34:14 · 133 阅读 · 0 评论 -
Java原子操作AtomicInteger
一、问题引入我们有一个自增的场景【data++】,单线程情况下我们的程序能正常运行,但多线程情况可能会出现线程1和线程2都是在操作一个变量data,但是线程1修改了data变量的值之后,线程2看不到修改,一直都是看到自己本地工作内存中的一个旧的副本的值,这样就好导致原子性问题。我们通过一张图来简单描述下多线程情况下的内存模型:在多线程中,所有线程共享主内存,每个线程有自己的工作内存。多个线...原创 2019-12-31 12:12:27 · 156 阅读 · 0 评论 -
Java的线程池Executors
一、前言有时候我们需要创建大量的线程来执行一些主线程以外的任务,然而频繁的建立Thread会可能占用过多系统资源导致死机或oom。如果能建立一个Thread Pool来管理这些Thread并加以复用,对于我们的系统性能会有很大的改善。二、创建线程池ExecutorService是JDK提供的框架,可简化异步模式下任务的执行。一般而言, ExecutorService自动提供线程池和API来为...原创 2019-12-31 11:45:50 · 120 阅读 · 1 评论 -
Java虚拟机优化02
1. jvm垃圾回收当我们运行一个程序的时候是需要向系统申请内存资源的,如果我们申请的资源不及时释放就会一直占用系统内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了,了解jvm对内存资源的管理前我们先了解下垃圾回收常见的算法。2. Java语言的垃圾回收Java语言中一个显著的特点就是引入了垃圾回收机制,在C/C++语言中,没有自动垃圾回收机制,是通过new关键字申请内存资源,...原创 2019-11-26 10:49:22 · 132 阅读 · 0 评论 -
Java虚拟机优化01
1. 为什么要优化JVM在本地开发环境我们很少需要去优化JVM,但系统上到生产环境我们经常会遇到诸如:运行的程序突然卡住了,日志不输出;程序CPU或内存突然飙高;莫名的内存溢出错误;以上场景主要是因为对JVM运行及优化机制不了解所造成的。2. JVM运行参数介绍在jvm中有很多的参数可以进行设置,通过优化这些参数的设置可以提高程序的运行效率。jvm的参数大致可以分为三类:1. 标准参数以...原创 2019-11-26 10:48:12 · 104 阅读 · 0 评论 -
2.Spring单例模式
Spring单例模式单例模式:是指在一个JVM进程中仅有一个实例,只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例(Spring默认为单例模式)。多例模式:对这个bean的每次请求都会创建一个新的bean实例,类似于new。单例模式分为饿汉模式和懒汉模式饿汉模式:pring singleton的缺省是饿汉模式:启动容器时(即实例化容器时),为所有spring配置...原创 2019-01-24 15:24:59 · 378 阅读 · 0 评论 -
3.Spring IOC理解
Spring框架图其中spring-core包含依赖注入IoC与DI的最基本实现,spring-context包含IOC容器主要设计。2.原创 2019-01-25 16:10:22 · 203 阅读 · 0 评论 -
4.Spring AOP理解
AOP原理AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(De...原创 2019-01-28 10:16:27 · 260 阅读 · 0 评论 -
5.Java 代理模式
什么是代理模式代理模式是我们常用到的一种设计模式,代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。代理模式作用可以在不修改别代理对象代码的基础上,通过扩展代理类,进行一些功能的附加与增强(如:Spring AOP编写切面日志)。代理对象可以...原创 2019-01-28 15:38:21 · 94 阅读 · 0 评论 -
6.Java虚拟机(jvm)
Java运行时虚拟机内存区域划分(java8)元空间(Metaspace)元空间(Metaspace)从java8开始替换掉了原来的方法区(Method Area)。相比方法区(Method Area)在元空间中各个项目会共享同样的class内存空间,能提高内存的利用率且更利于垃圾回收;另外元空间并不在虚拟机中,而是使用本地内存,因此元空间的大小仅受本地内存限制,但可以通过以下参数来指定元...原创 2019-01-30 14:50:26 · 241 阅读 · 0 评论 -
1.maven生成不同版本jdk包
对于MAVEN项目,如果我们升级jdk版本但有些业务场景又不能升级,这个时候就需要根据不同的环境生成不同版本的jar包。网上很多都是通过profile指定多个版本的jdk,利用classifier引用相应版本的jar,通过maven命令一步生成两个jar,一步生成的方式jar我们反编译编译后发现版本都是一样的。这里我提供一种两部执行生成的方式。1.配置settings.xmlsetting...原创 2019-06-11 09:45:36 · 1000 阅读 · 0 评论 -
1.常用数据结构STACK、QUEUE 、ARRAY、LINKED LIST、HASH、 TREE整理
一、前奏最近在看数据结构相关的文章,发现自己对这块的原理还是知之甚少。比如LIST有哪些特点,MAP有哪些特点,HASH及BTREE的使用场景,为什么MYSQL使用最多的是BTREE索引等,了解这些对工作中还是很有益处的。二、数据结构在写数据结构相关实现前我们先要了解下数据结构到底有什么用?Java是一种比较高效的语言,数据结构就是Java这种高效语言的推进剂使我们更加高效实现我们的目标。我...原创 2019-07-09 10:32:08 · 1386 阅读 · 0 评论 -
Slf4j+logback实现日志打印-获取调用者类及方法行数信息
为什么要用slf4j实现日志打印,在阿里的开发规范中有这么一段:【强制】应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。...原创 2019-07-10 16:33:27 · 9873 阅读 · 4 评论 -
1.Java多线程
进程一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程用多线程只有一个目的,那就是更好的利用cpu的资源,多线程指指的是这个程序(一个进程)运行时产生了不止一个线程并行与并发并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发:通过cpu调度算法...原创 2019-01-24 09:25:43 · 160 阅读 · 0 评论