
程序员
文章平均质量分 91
xxsiyao
关注我 帮助更多Java开发者了解 Java的知识,提高学习效率,弥补知识技能漏洞
展开
-
二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?
二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?用多久我会升职加薪、当上技术总监、迎娶漂亮学姐、走上人生巅峰!想想还有点小激动。好了开始分享面试经历说说你反射的理解到底什么是反射呢???反射的核心就是JVM在运行时才动态加载类或调用方法,访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。每一个类都会产生一个对应的Class对象,也就是保存在.class文件。所有类都是在对其第一次使用时,动态加载到JVM的,当程序创建一个对类的静态成员的引用时,就会加载这个类,Class转载 2021-07-15 21:12:07 · 221 阅读 · 0 评论 -
JMX-RMI反序列化中的小研究
简述RMI 数据传输基于反序列化,如果服务中实现了 RMI 的调用且具有 Object类型参数,那么就会造成反序列化(实际攻击中需要反序列化链)JMX 服务是基于 RMI 实现,且将凭证对象作为Object 参数传入,如果使用恶意构造的对象替代凭证传入,是否能攻击需要凭证认证的JMX 服务了。针对 JMX 的攻击YSO 中有一个针对 JMX 的攻击模块,当 JMX 服务器存在反序列化链时,可以对JMX服务进行攻击java -cp ysoserial.jar ysoserial.expl原创 2021-07-14 17:35:32 · 685 阅读 · 1 评论 -
一篇学会Caffeine W-TinyLFU源码分析
Caffeine使用一个ConcurrencyHashMap来保存所有数据,那它的过期淘汰策略采用什么方式与数据结构呢?其中写过期是使用writeOrderDeque,这个比较简单无需多说,而读过期相对复杂很多,使用W-TinyLFU的结构与算法。【资料获取】网络上有很多文章介绍W-TinyLFU结构的,大家可以去查一下,这里主要是从源码来分析,总的来说它使用了三个双端队列:accessOrderEdenDeque,accessOrderProbationDeque,accessOrderProte原创 2021-07-14 17:16:40 · 816 阅读 · 0 评论 -
当 Lombok 遇见了 MapStruct の「坑」
前言2021 年了,相信搞 Java 的小伙伴们不会还没有人没用过 Lombok 吧?【资料获取】Lombok 是一款通过「 注解 」的形式简化并消除冗余代码的 Java 插件,利用「 Annotation Processor 」原理,在编译时生成一些「重复」代码。另外需要注意的是,在 IDEA 环境下,需要额外安装一个 Lombok 插件。(本文不会专门介绍 Lombok 的使用方法,想要深入学习的小伙伴可以去官方文档 学习 Lombok 提供的所有注解的使用方法。)可能一些朋友对 MapStru原创 2021-07-14 15:33:17 · 1214 阅读 · 0 评论 -
Spring Boot Actuator集成,难的是灵活运用!
前言【资料获取】曾经看到Spring Boot Actuator这个框架时,一直在想,它到底有什么作用呢?虽然知道它提供了很多端点,有助于应用程序的监控和管理,但如果没有直接的实践案例,还是很难有说服力的。那么本文便基于Spring Boot系统如何集成Actuator,如何使用,以及如何自定义一个端点(Endpoint)来展开。Spring Boot Actuator简介Spring Boot Actuator是Spring Boot提供用于对应用系统进行自省和监控的功能模块,基于此开发人员可以.原创 2021-07-14 14:33:53 · 294 阅读 · 1 评论 -
【重新学过Java】Set集合
Set集合Set集合概述和特点【应用】无序不可重复没有索引,不能使用普通for循环遍历。可以使用 迭代器 或者 增强foreach语句 遍历TreeSet集合TreeSet集合概述和特点【应用】无序不可重复没有索引可以将元素按照规则进行排序(特色)TreeSet():根据其元素的自然排序进行排序TreeSet(Comparator comparator) :根据指定的比较器进行排序TreeSet集合基本使用【应用】存储Integer类型的整数并遍历public class.原创 2021-07-14 14:16:19 · 138 阅读 · 0 评论 -
Nacos真香,从零到一学起来
Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。【资料获取】这篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。1 安装1.1 linux下安装首先搭建一套单机版的Nacos集群。Nacos的安装有两种方式,一种是下载源码自己编译安装,另一种是下载编译后的压缩包解压后直接使用。本文我采用第二种方式。首先从官网下载安装包,下载地址如下:https://github.com/alibaba/nacos/releases/t原创 2021-07-12 17:23:30 · 146 阅读 · 0 评论 -
SpringBoot Validation优雅的全局参数校验
前言【参考资料】我们都知道在平时写controller时候,都需要对请求参数进行后端校验,一般我们可能会这样写public String add(UserVO userVO) { if(userVO.getAge() == null){ return "年龄不能为空"; } if(userVO.getAge() > 120){ return "年龄不能超过120"; } if(userVO.getName().isEmpty(原创 2021-07-12 15:14:30 · 373 阅读 · 0 评论 -
Java实战指南|玩转接口验签-你和高手只差俩个自定义注解
前言:一些个很朴素的功能【 登陆功能+接口验签+登陆用户信息共享 】这三个功能想必是大家在日常开发中基本上大都碰到过的吧,如果你还在使用拦截器给接口加白名单来进行过滤那些接口需要验签,如果你还在每次需要拿用户信息的时候都得去查一遍db,那么你就值得看下去,小编教你如何花式玩转接口登陆验签功能????????????【参考资料】正文技术设计流程【参考资料】我们先看一下实现流程图哈,我们主要使用的技术包括: HandlerMethodArgumentResolver (参数解析器), Handler原创 2021-07-12 14:28:54 · 512 阅读 · 0 评论 -
Java 代理-在运行时创建新类
利用代理可以在运行时创建实现了一组给定接口的新类。只有 在编译时期无法确定需要实现哪个接口时才有必要使用代理 。一、何时使用代理【资料获取】场景: 假设你想要构造一个类的对象,这个类实现了一个或多个接口,但是在编译时你可能并不知道这些接口到底是什么。尝试: 要想构造一个具体的类,只需要使用 newlnstance 方法或使用反射找出这个类的构造器。但是,不能实例化接口,需要在运行的程序中定义一个新类。方式1: 为了解决这个问题, 有些程序会生成代码;将这些代码放置在一个文件中;调用编译器;然后再加载原创 2021-07-12 14:06:05 · 569 阅读 · 0 评论 -
带着好奇学Java------对象的创建
批判性思维的本质在于学会提问,且学会提问是更有效的学习方法,养成提问的习惯,时刻保持好奇心,以理性的心态分析世界。对象的创建【资料获取】问:如何开始第一个程序?//访问修饰符 + class + 类名 = 类public class HelloWorld { //访问修饰符 + 变量类型 + 变量名 = 变量 private String name; //访问修饰符 + static + 变量类型 + 变量名 = 静态变量 public stati原创 2021-07-10 17:03:44 · 104 阅读 · 0 评论 -
号称下一代可视化监控系统,结合SpringBoot使用,贼爽!
当面对一个复杂的系统时,我们往往需要监控工具来帮助我们解决一些性能问题。比如之前我们使用SpringBoot Admin来监控应用,从而获取到SpringBoot Actuator暴露的指标信息。今天给大家介绍一个功能强大的监控工具Grafana,只要需要用到监控的地方,用它做可视化就对了!Grafana简介Grafana是一款开源的数据可视化和分析工具,不管你的指标信息存储在哪里,你都可以用它来可视化这些数据。同时它还具有告警功能,当指标超出指定范围时会提醒你。Prometheus简介Pro原创 2021-07-10 16:07:25 · 218 阅读 · 0 评论 -
MyBatis温故而知新-底层运行原理
准备工作【参考资料】public class MainClass { public static void main(String[] args) throws Exception { String resources = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resources); SqlSessionFactory sqlSessionFactory =原创 2021-07-10 16:04:17 · 143 阅读 · 0 评论 -
快速了解TomCat是个啥
Web开发中的常见概念(1)B/S系统和C/S系统Brower/Server:浏览器、服务器系统 ----- 网站Client/Server:客户端、服务器系统 ----- QQ、大型游戏(2)web应用服务器供向外部发布web资源的服务器软件(3)web资源存在于web应用服务器可供外界访问的资源就是web资源。例如:存在于web应用服务器内部的html、css、js、图片、视频等。1)静态资源:指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、JS、图片、多媒体。2)动原创 2021-07-10 14:22:54 · 293 阅读 · 0 评论 -
Java方法的重载
重载就是在一个类中,有相同的函数(方法)名称,但形参不同的函数(方法)。【参考文献】方法的重载的规则:方法名必须相同参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。方法的返回类型可以相同也可以不同仅仅返回类型不同不足以成为方法的重载实现理论:加粗样式方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。重载的意义:是为了方便外界对方法进行调用,什么样的参数程序都可以找到对应的方法来执行,体现的是程序的灵活性如下代原创 2021-07-09 22:21:50 · 3951 阅读 · 1 评论 -
Java筑基 - JNI到底是个啥
Java筑基 - JNI到底是个啥profile-avatarxxsiyao2021-06-28 14:35在前面介绍Unsafe的文章中,简单的提到了java中的本地方法(Native Method),它可以通过JNI(Java Native Interface)调用其他语言中的函数来实现一些相对底层的功能,本文我们就来顺藤摸瓜,介绍一下jni以及它的使用。首先回顾一下jni的主要功能,从jdk1.1开始jni标准就成为了java平台的一部分,它提供的一系列的API允许java和其他语言进行交互原创 2021-07-09 22:05:12 · 144 阅读 · 0 评论 -
不藏了,这些 Java 反射用法总结都告诉你们
Java 反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段、方法和构造函数。它非常多的 Java 框架中,都大量应用了反射技术,如 Hibernate 和 Spring。可以说,反射机制的特征让 Java 可以构建异常强大,具备柔性的系统。虽然 Java 反射机制存在效率低、速度慢和安全性不高等弊端,但在很多场景下,这些特征并不是主要的因素,或者可以通过缓存或者 JVM 优化等来逐步提升执行效率。根据网上的说法,反射技术能够检查或修改在 JVM 中应用程序在运行时的行为,这是一个比较高原创 2021-07-09 17:12:37 · 126 阅读 · 0 评论 -
阿里面试这样问:Nacos用了 push 还是 pull模式 ?
对于 Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。比如我们今天要讨论的话题, Nacos 在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的?这里我先抛出答案:客户端主动拉的!接下来咱们扒一扒 Nacos 的源码,来看看它具体是如何实现的?配置中心聊 Nacos 之前简单回顾下配置中心的由来。简单理解配置中心的作用就是对配置..原创 2021-07-09 15:46:54 · 2236 阅读 · 1 评论 -
令人头疼的 Java 异常知识点总结
1. 异常简介1.1 异常类层次结构从结构图可以看出,所有异常均继承自 Throwable 类,它有两个重要的子类: Exception 和 Error ,各自又包含大量子类。Exception程序本身可以处理的异常,又可以分为 受检异常 和 非受检异常 , 受检异常 可以用 try…catch… 语句进行捕获处理,而且能从异常中恢复。但 非受检异常 是程序运行时错误,会导致程序崩溃而无法恢复。受检异常编译器要求必须处理的异常,正确的程序在运行时,经常会出现、预期范围内的情况。一旦发生转载 2021-07-08 19:37:10 · 218 阅读 · 0 评论 -
Java并发编程中的同步器
1. CyclicBarrier【参考文献】和 CountDownLatch 类似线程会等待,直到足够多线程达到了事先规定的数据。一旦触发条件,就可以进行下一步的操作适用于线程之间相互等待处理结果就绪的场景CyclicBarrier可以构造一个集结点,当某一个线程执行完毕,它就会到集结点等待,直到所有线程都到了集结点,那么该栅栏就会被撤销,所有线程再统一出发,继续执行剩下的任务用法一:等待所有人到达指定地点,再统一出发import java.util.concurrent.BrokenBa原创 2021-07-08 16:48:53 · 371 阅读 · 0 评论 -
Java时间相关
一、Java 8 以前日期API相关问题【参考文献】Java 8 以前,java.util.Date,java.util.Calendar,java.util.GregoiranCalendar,java.text.SimpleDateFormat这四个类分别用于处理日期、日历、公历、时间格式化缺点:非线程安全:存在并发问题设计不佳:date缺少直接操作日期的相关方法,日期和日期格式化分布在多个包中时区处理困难其他:Calendar类月份从零计算问题Java 8 重新设计了所有日期时间、日原创 2021-07-08 15:36:41 · 149 阅读 · 0 评论 -
java反射怎么学,跟着学就对了
java反射【资料获取】关联知识在存在的编程语言中,大致分为动态语言与静态语言这两种。其中静态语言的代表是c,c++等,动态语言的代表则是js,python等。这两种语言的区别有很多,其中最重要的几点如下:静态语言的运行速度要比动态语言更快。动态语言的学习成本低于静态语言。动态语言的开发效率要高于静态语言java是介于静态语言与动态语言之间的一门编程语言。它在书写后,需要先进行编译,这是静态语言的特性,编译后生成字节码文件,运行时jvm会将字节码文件加载到内存中,jvm会对字节码文件进行解释执原创 2021-06-30 19:45:21 · 218 阅读 · 0 评论 -
小白也能行的最强Java反射机制讲解
前言- 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。更多免费资料请点此链接正文Java反射机制定义Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法。反射机制的优点与原创 2021-06-30 13:59:08 · 126 阅读 · 0 评论 -
想学习Java网络编程,从何入手?
一、网络编程中有两个主要的问题1、如何准确的定位一台或多台主机;定位主机上的特定应用。2、找到主机后如何可靠高效的进行数据传输。二、网络编程中的两个要素。1、对应上方问题1:IP和端口号。2、对应上方问题2:提供网络通信协议:TCP/IP参考模型(应用层,传输层,网络层,物理+数据链路层)。三、通信要素一:IP和端口号1、IP:唯一表示Internet上的计算机(通信实体)。2、在Java中使用InetAddress类代表IP。3、IP分类:IPV4 和 IPV6;万维网 和 局域网。4原创 2021-06-27 15:19:10 · 159 阅读 · 0 评论