![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
java熟
这个作者很懒,什么都没留下…
展开
-
java应用性能调优之详解System的gc垃圾回收方法
一、什么是System.gc()?System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象)。名词解释:GC,Garbage Collection,垃圾回收,下文会经常使用。二、谁可以调用System.gc()?System.gc()可以从应用程序堆栈的各个部分调用:您自己开发的应用程序可以...转载 2019-12-17 22:59:30 · 102 阅读 · 0 评论 -
如何对分布式服务进行状态管理
名词解释服务的状态: 举例来说,服务的状态信息,通常是指在服务端保存的“用户的登陆信息”,“用户的角色信息”,“请求的状态信息”等。不用的用户及角色拥有不同的权限,从而面对同样的请求返回不同的结果。无状态服务:就是同样的服务多次部署形成一个服务组,一个请求落到服务组的任意一个服务上,都会返回同样的结果。所谓无状态服务有两层含义,第一层就是真的没有状态信息,第二层就是服务组的状态不是存储在单...原创 2019-12-15 20:15:19 · 606 阅读 · 0 评论 -
Java字符串模板格式化汇总8法(附性能对比)
字符串格式化汇总Table of Contents1. ++ 2. StringBuffer / StringBuilder 3. StringUtil.format(String, Object…) 4. MessageFormatUtil.format(String, Object…) 5. Slf4jUtil.format(String, Object…) 6. St...转载 2019-12-13 22:46:43 · 507 阅读 · 0 评论 -
Java 干货之深入理解内部类
可以将一个类定义在另一个类或方法中,这样的类叫做内部类 –《Thinking in Java》说起内部类,大家并不陌生,并且会经常在实例化容器的时候使用到它。但是内部类的具体细节语法,原理以及实现是什么样的可以不少人都还挺陌生,这里作一篇总结,希望通过这篇总结提高对内部类的认识。内部类是什么?由文章开头可知,内部类的定义为:定义在另一个类或方法中的类。而根据使用场景的不同,内部类还可以...原创 2019-12-12 21:27:09 · 164 阅读 · 0 评论 -
一个适合绝大多数场景下的批量任务线程池(心得)
前言在工作中的一个场景中,需要紧急处理五千多份合同,合同处理的过程有些复杂,这里说的复杂不是代码复杂,是中间需要经过多个服务渠道,包括对外对接的一些业务,所以这五千来分如果同步处理的话,估计要跑上估计至少也得半天的时间了,而后期确定了还会面临同样的问题(坑爹的代码与凌乱的架构问题),因此写了一个处理合同的线程池,越写兴趣越浓,最后写出来以后发现这个鸟玩意儿实在是太通用了,几乎可以用在所有场景下...转载 2019-12-12 21:23:46 · 346 阅读 · 0 评论 -
十分钟学会JDK动态代理及原理
相信大家多多少少对静态代理动态代理有所了解,我今天着重来说一下JDK动态代理,目前流行的动态代理实现有两种,一种是JDK动态代理,一种是cglib动态代理,JDK是使用反射原理来实现的,cglib是ASM字节码,所以cglib要比JDK动态代理性能好。。。我们今天来学JDK动态代理的原因是先接触一下动态代理下边是我建的一个测试案例package com.fyd.test; ...原创 2019-12-10 21:58:03 · 99 阅读 · 0 评论 -
spring源码学习之路---探索ION
网上也有很多关于spring源码学习的文章以及帖子,讲的也都不错,但是有些可能高估了读者的能力,该深入的地方反倒一句带过,我现在也是在一步一步研究,和大家的进度一样,所以可能在我的角度来和各位探讨,更加容易。首先我们来说一下IOC,IOC是spring最核心的理念,包括AOP也要屈居第二,那么IOC到底是什么呢,四个字,控制反转。网上有不少是这么解释IOC的,说IOC是将对象的创建和依赖关...原创 2019-12-10 21:56:58 · 97 阅读 · 0 评论 -
JVM内存管理--GC算法精解(五分钟教你终极算法---分代搜集算法)
引言何为终极算法?其实就是现在的JVM采用的算法,并非真正的终极。说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为相信高人们的能力。那么分代搜集算法是怎么处理GC的呢?对象分类上一章已经说过,分代搜集算法是针对对象的不同特性,而使用适合的算法,这里面并没有实际上的新算法产生。与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用。首先我们来探讨一下对...转载 2019-12-09 22:04:44 · 169 阅读 · 1 评论 -
疯狂的Java算法——从古至今的难题排序,来一场“算林大会”
从古至今的难题 在IT届有一道百算不厌其烦的题,俗称排序。不管是你参加BAT等高端笔试,亦或是藏匿于街头小巷的草根笔试,都会经常见到这样一道百年难得一解的问题。 今天有幸与各位分享一下算法届的草根明星,排序届的领衔大神——插入排序以及归并排序。最后,在头脑风暴下,又有幸认识了一位新朋友,名叫并行归并排序。接下来,咱们就一一认识一下,并且在最后来一次“算林大会”吧。插入排序简介 ...转载 2019-12-08 22:17:56 · 188 阅读 · 0 评论 -
一个草根程序员如何进入BAT。此文比较扎心,心态不好切勿点击
引言 认真看完就会有收获 写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善。 之前LZ写过一篇《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》,那篇文章LZ主要介绍了如何应对社招面试,以及如何进行Java学习。 文章的反响还不错,不少猿友都感叹,“如果早看到这篇文章,说不定我已经成大神了。” 但是LZ只能很遗憾的告诉你,LZ...转载 2019-12-08 22:16:19 · 217 阅读 · 0 评论 -
如何做到招聘要求中的“要有扎实的Java基础”一篇文章教会你
来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来。 一日,LZ在群里发话,“招人啦。” 然某群友曰,“群主,俺想去。” LZ回之,“你年几何?” 群友曰,“两年也。” LZ憾言之,“惜了,三至五为佳。然如汝有扎实之基础,且附一技之长,倒也并非不可呀。” 群友惑,问之,“何为一技之长?” LZ抚须答曰,“皆可,吾之一技即为写。” ...转载 2019-12-06 22:59:19 · 130 阅读 · 0 评论 -
设计模式详解(总纲)看了这篇文章还不会,你拍我
最近一直在学习设计模式相关的知识,还是老规矩,和各位一起学习,一起探讨,本系列所发表所有内容仅代表个人观点。《简介》说到设计模式,当初第一次听到时,第一反应就是很深奥,完全理解不了这个概念到底是什么意思,下面我先从网上摘录一份定义。设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。上面是百度当中的解释,来解释一下这句简单...转载 2019-12-05 22:22:48 · 74 阅读 · 0 评论 -
别在 Java代码里乱打日志了 此文给你答案,正确的打日志姿势
使用slf4j使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架打日志的正确方式什么时候应该打日志当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能...原创 2019-12-05 22:20:35 · 115 阅读 · 0 评论 -
TCP/IP协议族 HTTP报文头解析
本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述。下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每个值之间有逗号分隔。如果该值需要优先级,那么在值的后方跟上优先级q=0.8(q的值由0~1,优先级从低到高)。值与优先级中间由分号相隔。头部字段名:值1, 值2;q=0.8下方就是截取的网...原创 2019-12-04 22:16:43 · 439 阅读 · 0 评论 -
XPath获取XML指定节点属性值的两种方法
前面有文章介绍了通过XPath解析xml报文的方法,今天工作中遇到了需要解析指定节点属性值的问题,现在总结一下,下面提供两种方法去获取属性值。首先是xml结构:1.<?xml version="1.0" encoding="utf-8" ?>2.<bookstore>3. <book>4. <title lang="en1">E...原创 2019-12-04 22:14:37 · 5677 阅读 · 0 评论 -
分布式锁三种实现方式(数据库实现,缓存Redis等,Zookeeper)
分布式锁三种实现方式:1. 基于数据库实现分布式锁;2. 基于缓存(Redis等)实现分布式锁;3. 基于Zookeeper实现分布式锁;一, 基于数据库实现分布式锁1. 悲观锁利用select … where … for update 排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表...原创 2019-12-03 21:47:47 · 686 阅读 · 0 评论 -
java匠人手法-优雅的处理空值
导语在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不这头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。业务中的空值场景存在一个UserSearchService用来提供用户查询...原创 2019-12-02 21:33:43 · 109 阅读 · 0 评论 -
这一文让你搞懂Java 数据结构中的几种接口和类的使用方法
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary)Java Map 接口 哈希表(Hashtable) 属性(Properties)一.枚举(Enumeration)枚举(Enumeration)接口虽然它本身不属于数据...原创 2019-11-27 22:10:00 · 430 阅读 · 0 评论 -
ReentrantLock 实现原理(公平锁和非公平锁)
使用 synchronized 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。而 ReentrantLock 就是一个普通的类,它是基于 AQS(AbstractQueuedSynchronizer)来实现的。是一个重入锁:一个线程获得了锁之后仍然可以反复的加锁,不会出现自己阻塞自己的情况。AQS 是 Java 并发包里实现锁、同步的一个重...原创 2019-11-27 22:09:54 · 1074 阅读 · 0 评论 -
这一文让你搞懂Java 数据结构中的几种接口和类的使用方法
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary)Java Map 接口 哈希表(Hashtable) 属性(Properties)一.枚举(Enumeration)枚举(Enumeration)接口虽然它本身不属于数据...原创 2019-11-27 22:06:51 · 347 阅读 · 0 评论 -
Java 变量类型
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:type identifier [ = value][, identifier [= value] ...] ;格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。以下列出了一些变量的声明实例。注意有些包含了初始化过程。int a, b, c;...原创 2019-11-26 22:54:55 · 70 阅读 · 0 评论 -
java这23种设计模式你知道吗(下)
11.装饰模式(Decorator Pattern)定义:Attach additional responsibilities to an object dynamically keeping thesame interface.Decorators provide a flexible alternative to subclassing forextending functionality...原创 2019-11-26 20:09:16 · 92 阅读 · 0 评论 -
java这23种设计模式你知道吗(上)
1.单例模式(Singleton Pattern)定义:Ensure a class has only one instance, and provide a global point of accessto it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)通用代码:(是线程安全的)public class Singleton {private sta...原创 2019-11-26 20:07:49 · 75 阅读 · 0 评论 -
(支付宝支付)Spring实现一个项目配置多个信息、付款给对应商户
如何实现一个项目配置多个商户信息付款给对应商户最近在对接支付宝支付时,遇到了一个问题用户在付款时,需要直接付款到指定支付宝账户。这个需求也无可厚非,就像我们公司有四个分公司,分别在北京、上海等地,如果钱只能到总公司的账户上,那在财务结算的时候就很麻烦。简单说一下问题背景:公司准备上线一个商城应用,有分公司和服务商的概念,意思就是收钱的不是一个人。前一阵子,蚂蚁金服投了一...原创 2019-11-25 22:14:33 · 1250 阅读 · 1 评论 -
springDataJpa 最佳实践
前言Spring Data Jpa 框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。Spring Data Jpa 存储库抽象中的中央接口是 Repository。它需要领域实体类以及领域实体 ID 类型作为类型参数来进行管理。该接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展该接口的接口。CrudRepository、JpaRepository 是更具体的数据操作...原创 2019-11-24 17:06:16 · 542 阅读 · 0 评论 -
本文将帮助你如何将应用程序从Java 8迁移到java11(纯干货分享)
所以想迁移到Java 11,但是你的Maven项目仍然停留在Java 8上吗?你不太关心新的模块系统在Java 9中引入的,只想让你的应用程序在最新的JDK版本上运行?那么这个向导是给你的。它包含了我在将我们的产品迁移到Java 11时学到的所有知识。从2019年起,Oracle Java 8将不再接收免费的安全更新。所以现在是时候迁移到JDK 11.清理你的pom.xml档案在考...原创 2019-11-24 17:01:49 · 910 阅读 · 0 评论 -
资深程序员分享java线程池处理机制(从异常信息处理说起 )
前言今天小伙伴遇到个小问题,线程池提交的任务如果没有抓住异常,那么会抛到哪里去,之前倒是没研究过,本着实事求是的原则,看了一下代码。正文小问题考虑下面这段代码,有什么区别呢?你可以猜猜会不会有异常打出呢?如果打出来的话是在哪里?: ExecutorService threadPool = Executors.newFixedThreadPool(1); threadPool...原创 2019-11-21 21:14:47 · 126 阅读 · 0 评论 -
Java线程池核心实现原理剖析(让线程变的简单)
引言使用线程池来异步执行一些耗时任务是非常常见的操作.最初我们一般都是直接使用new Thread().start的方式,但我们知道,线程的创建和销毁都会耗费大量的资源,因此我们需要重用线程资源.当然也有其他待解决方案,比如说cooutine,目前kotlin已经支持了,jdk也已经有了相关的提案:工程织机、目前的实现方式和Kotlin有点类似,都是基于ForkJoinPool、当然目前...原创 2019-11-21 21:09:12 · 148 阅读 · 0 评论 -
通过这六点,了解Java线程池的全面(总结下篇)
五 (重要)ThreadPoolExecutor 使用示例我们上面讲解了 Executor框架以及 ThreadPoolExecutor 类,下面让我们实战一下,来通过写一个 ThreadPoolExecutor 的小 Demo 来回顾上面的内容。5.1 示例代码:Runnable+ThreadPoolExecutor首先创建一个 Runnable 接口的实现类(当然也可以是 Call...原创 2019-11-20 17:11:13 · 148 阅读 · 0 评论 -
通过这六点,了解Java线程池的全面(总结上篇)
目录一 使用线程池的好处 二 Executor 框架 三 (重要)ThreadPoolExecutor 类简单介绍 四 几种常见的线程池详解 五 (重要)ThreadPoolExecutor 使用示例 六 ScheduledThreadPoolExecutor 详解一 使用线程池的好处池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应...原创 2019-11-20 17:07:42 · 211 阅读 · 0 评论 -
Java虚拟机工具(应用)
一.Java虚拟机工具JDK 本身提供了很多方便的 JVM 性能调优监控工具,除了 jps、jstat、jinfo、jmap、jhat、jstack 等小巧的工具,还有集成式的 jvisualvm 和 jconsole。1.jpsjps(JVM Process Status Tool,虚拟机进程监控工具),这个命令可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称,以及这些进程的本...原创 2019-11-17 21:49:31 · 199 阅读 · 0 评论 -
Java 并发基础之内存模型(非常详细)
本文的主要目的是让大家对于并发程序中的重排序、内存可见性以及原子性有一定的了解,同时要能准确理解 synchronized、volatile、final 几个关键字的作用。注意,阅读本文需要一定的并发基础另外,本文还对双重检查形式的单例模式为什么需要使用 volatile做了深入的解释。并发三问题这节将介绍重排序、内存可见性以及原子性相关的知识,这些也是并发程序为什么难写的原因。...转载 2019-11-15 22:35:41 · 75 阅读 · 0 评论 -
Spring Bean (作用域,依赖注入四种方式,生命周期)
附带Spring5 种不同方式的自动装配一.Spring Bean 作用域Spring 3 中为 Bean 定义了 5 中作用域,分别为 singleton(单例)、prototype(原型)、request、session 和 global session,5 种作用域说明如下:singleton:单例模式(多线程下不安全)1. singleton:单例模式,Spring IoC...原创 2019-11-13 17:11:43 · 8499 阅读 · 3 评论 -
Spring IOC 原理与IOC 容器实现
一. Spring IOC 原理1. 概念Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。2. Spring 容器高层视图...原创 2019-11-11 20:08:44 · 739 阅读 · 0 评论 -
java基础之(注解,内部类,泛型,序列化,复制)集合
一.JAVA 注解1. 概念Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。2. 4 种标准元注解元注解的作用是负责注解其他注解。 Java5.0...原创 2019-11-11 14:27:48 · 473 阅读 · 0 评论 -
JAVA基础之(异常分类及处理,JAVA 反射)详细解读
一.JAVA 异常分类及处理1. 概念如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器。2. 异常分类Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Erro...原创 2019-11-11 14:25:12 · 270 阅读 · 0 评论 -
深入了解JAVA 阻塞队列原理到底能给我们带来什么帮助
阻塞队列,关键字是阻塞,先理解阻塞的含义,在阻塞队列中,线程阻塞有这样的两种情况:1. 当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列。2. 当队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。1. 阻塞队列的主要方法抛出异常:抛出一个异常; 特殊值:返回一个特殊值(null...原创 2019-11-08 15:06:16 · 208 阅读 · 0 评论 -
JAVA 后台线程与JAVA 锁
一. JAVA 后台线程1. 定义:守护线程--也称“服务线程”,他是后台线程,它有一个特性,即为用户线程 提供 公共服务,在没有用户线程可服务时会自动离开。2. 优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。3. 设置:通过 setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在 线程对象创建 之前 用线程对象的 set...原创 2019-11-07 14:25:32 · 322 阅读 · 0 评论 -
JAVA多线程并发之线程实现,4种线程池,终止线程4种方式(上篇)
一. JAVA 并发知识库二. JAVA 线程实现/创建方式1. 继承 Thread 类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方 法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线 程,并执行 run()方法。2. 实现 Runnab...原创 2019-11-06 21:03:50 · 671 阅读 · 0 评论 -
JAVA 集合 接口继承关系和实现,List,Set,Map(总结)
一. JAVA 集合1.接口继承关系和实现集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。2. Iterator:迭代器,可以通过迭代器遍历集合中的数据3. Map:是映射表的基础接口...原创 2019-11-06 14:46:20 · 1826 阅读 · 0 评论