
Java进阶知识
文章平均质量分 78
Java进阶知识
普通人zzz~
除了成功,别无选择
展开
-
带你认识红黑树
在谈及红黑树前,首先我们先了解一下什么AVL(平衡二叉树)树。原创 2023-08-08 23:53:49 · 468 阅读 · 0 评论 -
一文了解JVM整体设计
使用G1收集器时,Java 堆的内存布局与就与其他收集器有很大差别,它将整个 Java 堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分 Region(不需要连续)的集合。如下:每个 Region 大小都是一样的,可以是 1M~32M 之间的数值,但是必须保证是 2的 n次幂。如果对象太大,一个 Region 放不下[超过Region大小的50%],那么就会直接放到 H(Humongous) 中。可通过参数。原创 2022-11-21 19:16:39 · 1098 阅读 · 0 评论 -
什么是接口的冥等性,怎么实现
场景分析在分布式架构(SOA、微服务化)里面,一套系统会由多个子系统进行组成,形成一个产品。在进行服务的拆分后,会存在子系统之间的调用(利用RPC协议完成通信),系统之间的通信会存在一个问题(单体架构不存在):业务在完成一个方法的调用后,单体架构只会出现两种情况-成功、失败,但是在分布式架构里面涉及到远程通信,会出现第三种状态-未知状态,主要体现在超时、网络延迟、数据包请求丢失等等,这会导致服务的调用端对当前结果的未知,如果在这种场景下,调用端再一次重试发起这个请求后,也许服务端对当前请求已经处理过了 ,原创 2021-03-03 23:27:52 · 1673 阅读 · 1 评论 -
java collection集合
集合:用于存储对象的容器。集合中可以存储任意类型的对象,长度可变。集合和数组的比较集合和数组都是存储对象的容器,不同的是,数组可以存储基本数据类型(int、short、long、char、Boolean、double、float、byte),集合只能存储任意类型的对象。数组长度是固定的,集合的长度是可变的(根据加载因子和扩容增量来完成扩容)。数组操作复杂,在java中可用方法少,集合操......原创 2020-03-28 14:40:37 · 427 阅读 · 0 评论 -
java Map集合对比分析
1、Map:Map是所有map集合的顶级父接口,用于key/value形式的键值对,其中每一个key都映射到一个值,key不能重复。2、TreeMap:该map将存储的键值对进行默认排序,并且还能够指定排序的比较器,是线程不安全的。TreeMap不允许键值为null。// 指定比较器进行排序Map map = new TreeMap(new Comparator(){ Public ......原创 2020-03-28 14:52:57 · 1567 阅读 · 0 评论 -
原码、反码、补码 AND 逻辑运算“与或非”
一个数在计算机中的表示形式是二进制,这个数其实就叫机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0, 负数为1。并且,将带符号位的机器数对应的真正数值称为机器数的真值。比如,十进制中的数 +10 ,计算机字长为8位,转换成二进制就是00001010。如果是 -10 ,就是 10001010。一个存储的二进制码分原码、反码、补码,下面我们就来介绍一下什么是原码、反码、补码。注意:计算机都是用补码存储,在计算的时候,如果是减法,可以把减法看成加法。原码就是符号位加上真值的绝对值,即用第一位表原创 2022-06-17 11:11:15 · 1719 阅读 · 4 评论 -
Java 泛型详解
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型的类型擦除 泛型只在编译阶段有效,泛型类型在逻辑上可看成是多个不同的类型,但是其实质都是同一个数据类型,编译之后程序会采取去泛型化的措施。可以接受任意类型。必须为Number及其子类,如Integer、Long等。表示类型只能接受 Number 及其上层父类类型,如 Obje原创 2022-06-12 23:10:34 · 175 阅读 · 0 评论 -
NIO之Channel详解
Channel是一个对象,作用是用于源节点和目标节点的连接,在java NIO中负责缓冲区数据的传递。Channel本身不存储数据,因此需要配合缓冲区进行传输。 主要的实现类有如下四个: ,案例-文件复制参考:https://blog.youkuaiyun.com/qq_38526573/article/details/89207100...............原创 2022-06-09 15:56:16 · 1560 阅读 · 0 评论 -
热部署:Arthas的redefine命令
需求场景举个栗子,在线上代码某个class的方法修复bug,但是,又不想发布版本。步骤1.上传修改后的class文件到服务器任意路径,比如:/root/java/HelloController.class2.下载arthas-boot.jar上传到服务器,启动:java -jar arthas-boot.jar3. 根据pid选择要修改class的线上程序4. 通过redefine加载修改后的class文件,redefine /root/java/HelloController.class5.转载 2021-12-12 14:59:40 · 1649 阅读 · 0 评论 -
Java SPI机制
1. 什么是SPI2. SPI和API的使用场景3. SPI的简单实现3.1 首先定义一组接口3.2 编写接口实现(可以有多个)3.3 新建META-INF/services目录及对应文件3.4 通过ServiceLoader加载实现类并调用4. SPI原理解析1. 什么是SPISPI 全称 Service Provider Interface,是 Java 提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI 的作用就是为这些被扩展的 API 寻找服务实现。2. S.翻译 2021-05-12 16:49:00 · 228 阅读 · 0 评论 -
Java 内省
1. 什么是内省2. 内省怎么用1. 什么是内省内省是 Java 语言对 Bean 类属性、事件的一种缺省处理方法(通过反射的方式操作 JavaBean 的属性)。例如类A中有属性 name,那我们可以通过 getName , setName 来得到其 值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。2. 内省怎么用操作一个属性UserBean userBean = new UserBean();// 声明属性描述对象,一次只可描述一个属性.原创 2021-04-17 17:06:55 · 286 阅读 · 0 评论 -
Maven(二)、Maven私服介绍与搭建
高级用法1. Nexus介绍2. 私服搭建应用2.1 下载2.2 安装2.3 Nexus仓库介绍2.4 自定义仓库类型3. Nexus的应用3.1 通过私服来下载对应的依赖3.2 上传Jar到私服3.3 特定jar包上3.4 从私服上下载jar包仓库管理器也叫私服或代理仓库仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。1. Nexus介绍Nexus是一个强大的Maven仓库管理器, 它极原创 2021-04-10 17:16:50 · 410 阅读 · 0 评论 -
Maven(一)、初识Maven
初识Maven一、Maven介绍1. Maven两大核心2. Maven目录结构介绍3. 仓库类型介绍4. jar包查找的顺序5. 项目构建6. setting.xml二、Maven的核心配置1. Maven坐标2. 依赖冲突2.1 冲突产生的原因2.2 冲突的解决方案一、Maven介绍Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Mana原创 2021-03-31 23:44:46 · 435 阅读 · 0 评论 -
Java8、Collectors方法大全
Collectors方法大全一、所用示例类1. Student2. GradeType3. CollectorsTest二、Collectors方法及使用1. Collectors.toCollection()2. Collectors.toList() / Collectors.toSet()3. Collectors.toMap(Function, Function) / Collectors.toConcurrentMap(Function, Function)4. Collectors.to原创 2021-03-23 23:53:54 · 1486 阅读 · 0 评论 -
Java-双亲委派机制
双亲委派机制什么是双亲委派机制类加载器的类别BootstrapClassLoaderExtClassLoaderAppClassLoader为什么要这么设计呢?什么是双亲委派机制 Java 是运行在 Java 的虚拟机(JVM)中的,但是它是如何运行在 JVM 中了呢?Java 将源代码通过编译器编译成 .class 的字节码文件,然后交由 ClassLoader 负责将这些 .class 文件给加载到 JVM 中去执行。ClassL原创 2021-01-19 18:04:18 · 152 阅读 · 0 评论 -
缓存淘汰策略
淘汰策略1. FIFO(First Input First Output 先进先出)2. LFU(Least Frequently Used 最少使用的)3. LRU(Least Recently Used 最久未使用的)1. FIFO(First Input First Output 先进先出)package com.lizq.springboot.cacheout;import java.util.ArrayDeque;import java.util.Queue;/** * FIFO原创 2020-12-26 19:07:16 · 192 阅读 · 0 评论 -
一致性Hash算法实现
在做缓存集群时,为了缓解服务器的压力,会部署多台缓存服务器,把数据资源均匀的分配到每个服务器上,分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。 一致性哈希的目的就是为了在节点数目发生改变时尽可能少的迁移数据,将所有的存储节点排列在收尾相接的Hash环上,每个key在计算Hash 后会.原创 2020-12-26 15:24:14 · 457 阅读 · 0 评论 -
Java操作PDF文件
引入依赖<!--ITextPdf,操作PDF文件的工具类--><dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.2</version></dependency><dependency> <groupId>com.itextpdf&原创 2020-09-14 09:49:02 · 1419 阅读 · 0 评论 -
Java 定时任务quartz实现方式
Java 定时任务quartz1. java自带 java.util.Timer 实现定时任务2. 使用线程池(ScheduledThreadPool-java.util.concurrent.ScheduledExecutorService)实现定时任务3. 使用注解@Scheduled实现定时任务4. 使用Quartz定时任务调度器4.1 Quartz 特点4.2 核心概念4.3 常用对象4....原创 2020-04-30 11:28:44 · 8780 阅读 · 0 评论 -
Java8 Stream流
文章目录stream操作方法分类1. concat方法2. distinct3. filter4. map5. flatMap6. peek7. skip8. sorted9. limit10. collect11. count12. forEach13. forEachOrder14. max15. min16. reduce17. allMatch18. anyMatch19. findAny...原创 2020-03-30 17:02:09 · 1017 阅读 · 0 评论 -
Java XML解析方式(DOM、SAX、JDOM、DOM4J)
Java XML解析方式1. XML介绍2. XML解析2.1 DOM解析2.2 SAX解析2.3 JDOM解析2.4 DOM4J解析1. XML介绍XML值可扩展标记语言,是用来传输和存储数据的。XMl的特定:XMl文档必须包含根元素。该元素是所有其他元素的父元素。XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素。所有XML元素都必须有关闭标签。XML标签对大小写敏...原创 2020-03-28 16:35:42 · 463 阅读 · 0 评论 -
Java 8 新特性
Java 8 新特性一、 接口二、Lamdba表达式三、方法引用四、Stream五、日期时间一、 接口在java8 中,接口中引入了新的关键字default和static,通过使用default修饰方法,可以让我们在接口中定义具体的方法实现,也可使用static关键字来定义接口方法。public interface InterClass { String test1(String s...原创 2020-03-28 16:28:08 · 162 阅读 · 0 评论 -
jsp自定义标签
你可以不去造轮子,但是你得知道轮子怎么造。Javaweb实现自定义标签:将方法封装到自定义标签处理类中,然后使用方法与JSTL标签一致。在实际开发中,前台页面是不允许html代码和java代码相混合的,但有时jsp或第三方为我们提供的标签满足不了需求,这时需要通过自己将业务逻辑封装到继承jsp规范的类或接口的处理类中来定义标签,这就是所谓的自定义标签。这样的缺点是加重了工作量。但与前端人员沟通和...原创 2020-03-28 16:01:38 · 140 阅读 · 0 评论 -
jsp 九大内置对象
JSP九大内置对象1. jsp运行原理2. 九大内置对象2.1 pageContext2.2 request2.3 response2.4 session2.5 application2.6 config2.7 page2.8 out2.9 exception1. jsp运行原理每个jsp页面在第一被访问时,WEB容器都会把该jsp页面翻译成一个_jspServlet(实际上是一个servle...原创 2020-03-28 15:55:23 · 134 阅读 · 0 评论 -
Java-监听器(Listener)
监听器:用于监听web应用中某些对象、信息的创建、销毁等动作,服务器会自动调用相应的方法进行处理。常用于统计在线人数,初始化系统参数等。Javaweb监听器主要监听对象有ServletContext、HttpSession、ServletRequest。下面是贴上一个统计登录人信息的栗子:在web.xml 中配置监听器:<!--用户登录监听器--><listene...原创 2020-03-28 15:43:34 · 214 阅读 · 0 评论 -
Java-过滤器(Filter)
在javaweb开发中,项目中都会包含一些过滤器(Filter),主要用于web服务器对资源的管理控制,如静态资源文件、jsp页面访问等。我们可以使用过滤器实现一些特殊的功能,如常见的过滤敏感词汇(替换为 **)、url访问权限、登录验证,本文以登录验证为例,后面会为小伙伴们贴上代码。 开发Filter...原创 2020-03-28 15:38:05 · 261 阅读 · 0 评论 -
Java 锁机制(synchronized 与 Lock)
在java中,解决同步问题,很多时候都会使用到synchronized和Lock,这两者都是在多线程并发时候常使用的锁机制。synchronized是java中的一个关键字,也就是说是java内置的一个特性。当一个线程访问一个被synchronized修饰的代码块,会自动获取对应的一个锁,并在执行该代码块时,其他线程想访问这个代码块,会一直处于等待状态,自有等该线程释放锁后,其他线程进行资源竞争......原创 2020-03-28 15:29:31 · 2665 阅读 · 0 评论 -
Java反射与注解结合使用(根据传入对象输出查询sql)
我们在项目开发中有很多地方使用到了注解,关于注解的定义与创建小伙伴可以参考我的文章《java注解》。有任何问题的小伙伴们可以在评论区指出哦,欢迎各位大佬指出问题。今天我要说的是使用注解与反射结合使用,来使我们代码根据优雅,更加高大上(咳,装逼神器啊)。注解使用@interface 来定义,辣么我们自定义的注解,该使用获取到并且指明该注解的作用呢?java提供了反射机制,通过类的类类型我们可以根...原创 2020-03-28 11:19:21 · 299 阅读 · 0 评论 -
Java反射-使用反射来操纵方法
一个类的主要成员时方法,辣么我们通过反射获取到一个类的所有方法信息后,总会寻找一种方式去操作调用这些方法,这样反射才有意义有意思。Method对象有一个方法invoke。 public Object invoke(Object obj, Object... args) throws IllegalAccessException,IllegalArgumentException,Invo...原创 2020-03-28 11:07:13 · 155 阅读 · 0 评论 -
Java反射-使用反射获取类的所有信息
在OOP(面向对象)语言中,最重要的一个概念就是:万事万物皆对象。在java中,类也是一个对象,是java.lang.Class的实例对象,官网称该对象为类的类类型。Class 类的实例表示正在运行的 Java 应用程序中的类和接口。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class ...原创 2020-03-28 11:00:35 · 377 阅读 · 0 评论 -
Java 注解
Java 注解1. 概念2. 常用注解3. 注解的分类3.1 按照运行机制分3.2 按照来源分3.3 元注解4. 自定义注解1. 概念 java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。 概念比较抽象,其实注解就想一个标签,用于标注程序的一个非程序代码2. 常用注解JDK中自带...原创 2020-03-25 16:37:32 · 218 阅读 · 0 评论 -
Java CGLib代理
转载自: 《cglib之Enhancer》https://www.cnblogs.com/micrari/p/7565632.htmlCGLib代理1. 背景2. Enhancer是啥2.1 Callback2.1.1 Callback-MethodInterceptor2.1.2 Callback-NoOp2.1.3 Callback-Dispatcher2.1.4 Callback-Inv...转载 2020-03-25 15:51:31 · 486 阅读 · 0 评论 -
Java JDK动态代理
/** * jdk 动态代理:基于接口,动态代理类需要再运行时指定所代理对象实现的接口,客户端在调用动态代理对象的方法时,调用请求会将请求自动转发给 InvocationHandler对象的invoke()方法,由invoke()方法来实现对请求的统一处理 * 1.创建一个接口Subject * 2.创建一个需要被代理的对象,对象实现Subject * 3.创建一个实现 invoactio...原创 2020-03-25 14:42:40 · 199 阅读 · 0 评论