
编程语言
文章平均质量分 90
xxsiyao
关注我 帮助更多Java开发者了解 Java的知识,提高学习效率,弥补知识技能漏洞
展开
-
二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?
二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?用多久我会升职加薪、当上技术总监、迎娶漂亮学姐、走上人生巅峰!想想还有点小激动。好了开始分享面试经历说说你反射的理解到底什么是反射呢???反射的核心就是JVM在运行时才动态加载类或调用方法,访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。每一个类都会产生一个对应的Class对象,也就是保存在.class文件。所有类都是在对其第一次使用时,动态加载到JVM的,当程序创建一个对类的静态成员的引用时,就会加载这个类,Class转载 2021-07-15 21:12:07 · 221 阅读 · 0 评论 -
大厂Java初级开发工程师!!!面试必问项之Set实现类:TreeSet
一、TreeSet 概述1、TreeSet是 SortedSet 接口的实现类, TreeSet 可以确保集合元素处于排序状态。2、TreeSet顾名思义他内部维护的是一个TreeMap,底层是红黑二叉树,他使得集合内都是有序的序列。3、Tree可以按照添加对象的指定属性,进行排序,所以向TreeSet中添加的数据,要求是相同类的对象。4、两种排序方式:自然排序(实现Comparable接口) 和 定制排序(Comparator);5、自然排序中,比较两个对象是否相同的标准为:compareTo(转载 2021-07-15 21:08:26 · 213 阅读 · 0 评论 -
Java开发面试高频考点学习笔记(每日更新)
Java开发面试高频考点学习笔记(每日更新)1.深拷贝和浅拷贝2.接口和抽象类的区别3.java的内存是怎么分配的4.java中的泛型是什么?类型擦除是什么?5.Java中的反射是什么6.序列化与反序列化7.Object有哪些方法?8.JVM内存模型9.类加载机制10.对象的创建和对象的布局11.Java的四种引用(强引用、软引用、弱引用和虚引用)12.内存泄露和内存溢出13.List、Set和Map三者的区别和其底层数据结构14.创建线程的四种方式15.NIO、AIO和BIO转载 2021-07-15 21:03:30 · 261 阅读 · 0 评论 -
从头梳理一下 Java 面试中经常问到的 “零拷贝” 问题!
前言【资料获取】I/O概念1.缓冲区2.虚拟内存3.mmap+write方式4.sendfile方式Java零拷贝1.MappedByteBuffer2.DirectByteBuffer3.Channel-to-Channel传输Netty零拷贝其他零拷贝总结前言从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ 等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而.转载 2021-07-15 16:09:24 · 215 阅读 · 0 评论 -
世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!
一、基本定义Arrays类,全路径java.util.Arrays,主要功能为操作数组,Arrays类的所有方法均为静态方法,所以调用方式全部为Arrays.方法名二、常用方法1. <T> List<T> asList(T... a)可以将数组转化为相应的list集合,但是也只能转化为list,asList方法内部构建了一个内部静态类ArrayList,这个ArrayList也继承自AbstractList,但并不是我们集合中常用的ArrayList,这两者是有区别.转载 2021-07-15 14:28:04 · 99 阅读 · 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 评论 -
号称下一代可视化监控系统,结合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 评论 -
面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置
Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的一些知识点。不管在实际开发中你使用程度怎么样,为了面试不被压价,还是非常有必要对它做一个较深入的理解。本篇对JVM中常用的几种垃圾回收器的主要特点,使用场景及优化建议做一个简单介绍,希望起到抛砖引玉的效果,对你入门有所帮助。【参考文献】新生代回收器SerialParNewparallel老年代回收器Serial OldCMSParallel Old新生代和老年代回收器G1原创 2021-07-10 15:23:13 · 447 阅读 · 0 评论 -
Java方法的重载
重载就是在一个类中,有相同的函数(方法)名称,但形参不同的函数(方法)。【参考文献】方法的重载的规则:方法名必须相同参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。方法的返回类型可以相同也可以不同仅仅返回类型不同不足以成为方法的重载实现理论:加粗样式方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。重载的意义:是为了方便外界对方法进行调用,什么样的参数程序都可以找到对应的方法来执行,体现的是程序的灵活性如下代原创 2021-07-09 22:21:50 · 3951 阅读 · 1 评论 -
不藏了,这些 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时间相关
一、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 SPI 机制实在弄不明白,怎么进大厂?
真正的大师永远怀着一颗学徒的心引言【资料获取】在日常的项目开发中,我们为了提升程序的扩展性,经常使用面向接口的编程思想进行编程。这不仅体现了程序设计对于修改关闭,对于扩展开放的程序设计原则,同时也实现了程序可插拔。那么本文所阐述的 SPI 机制正是这种编程思想的体现。今天就和大家聊聊 SPI 到底是个什么鬼。顺便和大家一起看下 Seata 框架中是怎么使用 SPI 机制来实现框架扩展的。什么是 SPI在一般的开发逻辑中,都是服务提供方进行接口定义以及不同实现,服务调用方通过 API 的方式完成一次业原创 2021-07-05 21:10:24 · 92 阅读 · 0 评论 -
如何在Windows中快速切换不同的Java版本,并且任意切换
作为一名Java程序员,我们经常需要在不同的Java版本下运行我们的应用程序,或者,我们想在不同Java版本上尝试运行我们的代码。当然,如果你在IDE下工作,可以非常轻松地切换Java版本(大部分IDE都提供该功能),但是如果你只想在CMD下运行Java程序,而又不想频繁地去修改系统环境变量,有什么好的办法呢?本文将向你介绍如何在Windows中同时安装多个Java版本,以及如何通过命令行非常简单地在不同地Java版本间进行切换。安装多个不同版本的Java【参考文献】在Windows中同时安装多个J原创 2021-07-05 20:55:58 · 3776 阅读 · 0 评论 -
从 Spring 的环境到 Spring Cloud 的配置,我经历了些什么
需求【参考文献】不知不觉,web 开发已经进入 “微服务”、”分布式” 的时代,致力于提供通用 Java 开发解决方案的 Spring 自然不甘人后,提出了 Spring Cloud 来扩大 Spring 在微服务方面的影响,也取得了市场的认可,在我们的业务中也有应用。前些天,我在一个需求中也遇到了 spring cloud 的相关问题。我们在用的是 Spring Cloud 的 config 模块,它是用来支持分布式配置的,原来单机配置在使用了 Spring Cloud 之后,可以支持第三方存储配置和原创 2021-07-05 16:22:55 · 92 阅读 · 0 评论 -
为了彻底理解乱码问题,一怒之下我把字符集历史扒了个底朝天
前言在日常开发中,乱码问题可以说曾经都困扰过我们,那么为什么会有乱码发生呢?为什么全世界不统一使用一套编码呢?本文将会从字符集的发展历史来解答这两个问题,看完本篇,相信大家对乱码现象会有本质上的认识。一个故事来理解为什么要编码现在有两个人,张三和李四,张三只会中文,李四只会英文,那么这时候他们怎么沟通?解决办法是他们可以找个翻译,这个翻译的过程就可以理解为编码,也就是说从中文到英文或者从英文到中文这就是一个编码的过程,编码的本质就是为了让对方能读懂自己的语言。人类的各种官方语言和方言数不胜数,所原创 2021-07-04 17:38:20 · 159 阅读 · 0 评论 -
java反射怎么学,跟着学就对了
java反射【资料获取】关联知识在存在的编程语言中,大致分为动态语言与静态语言这两种。其中静态语言的代表是c,c++等,动态语言的代表则是js,python等。这两种语言的区别有很多,其中最重要的几点如下:静态语言的运行速度要比动态语言更快。动态语言的学习成本低于静态语言。动态语言的开发效率要高于静态语言java是介于静态语言与动态语言之间的一门编程语言。它在书写后,需要先进行编译,这是静态语言的特性,编译后生成字节码文件,运行时jvm会将字节码文件加载到内存中,jvm会对字节码文件进行解释执原创 2021-06-30 19:45:21 · 218 阅读 · 0 评论 -
Java方法这样学就精通了??
Java方法什么是方法?System.out.println(),那么它是什么呢?系统类里的,对象out,输出方法printlnJava方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块集合。我们设计方法的时候,最好保持方法的原子性,就是只完成一个功能,这样利于我们后期的扩展。回顾:方法的命名规则?练习:package com.lxw.m原创 2021-06-30 16:26:07 · 100 阅读 · 0 评论 -
首发!阿里大牛给职场小白手写的Java笔记,满满干货记得收藏
今日分享开始啦,请大家多多指教~今天我们就来开始学习,实现一个Java基础的顺序表。本次内容介绍大纲:1、顺序表的简单了解概念认识2、接口的具体实现创建初始变量打印顺序表添加元素判断是否包含查找元素下标获取元素更新元素删除元素获取顺序表的长度清空顺序表3、完成代码展示1.顺序表的简单了解顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储。原创 2021-06-28 19:27:49 · 137 阅读 · 0 评论 -
没想到吧,Java开发 API接口可以不用写 Controller了
今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便分享一点工作中使用它的心得magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTPAPI接口开发。上边是官方对工具的介绍,但好像还是没明白它是干什么的,接下来咱们演示一下,你就会觉得它很哇塞了环境【参考文献】首先pom.xml 引入magic原创 2021-06-28 14:23:47 · 516 阅读 · 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 评论