--------Java相关--------
文章平均质量分 51
Java相关
来老铁干了这碗代码
算法爱好者 终生学习践行者 雨雪刀霜阻不住 不成大神誓不休
展开
-
@AliasFor注解详解(结合源码分析)
网上关于该注解的描述大都抄来抄去,没有涉及到最本质的源码问题, 下面是笔者结合注解源码, 以及其他常用的注解源码, 来分析@AliasFor注解的主要功能以及展示实际使用场景原创 2022-08-25 21:12:38 · 2002 阅读 · 0 评论 -
【已解决】list.size() = 1 但显示 All elements are null
背景:使用mybatis中的聚合函数(max()、avg())查询SQL语句,返回结果装入List集合使用了以下方法判断空值:if (CollectionUtils.isNotEmpty(list)) { return xxx;}结果是,无论是否从数据库中查询到值, 返回都不为空。进一步debug发现, list.size() = 1,但List中值为空, 显示All elements are null 问题原因:使用了MySQL中的聚合函数,分别是求和函数SUM()、求平均函数原创 2022-05-09 16:14:42 · 4756 阅读 · 1 评论 -
【手把手教学】基于Maven构建方式使用Mybatis generator自动生成
1. 简介Mybatis generator是一种代码生成器, 可以基于数据库表的字段与类型,自动生成Java代码中对应的entity类、dao类、mapper映射文件。实现Mybatis generator功能有多种方式,如插件方式、配置文件方式等。 这里采用经过我个人实践并成功的方式来操作。2. 添加依赖第一个依赖是mybatis-generator代码生成器的核心依赖第二个依赖是mysql通过JDBC连接数据库的依赖<!-- https://mvnrepository.com/a原创 2022-03-21 13:14:00 · 2077 阅读 · 0 评论 -
【含义解析】%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %m%n
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %m%n是logback.xml日志配置文件中的配置信息,作用是展示日志的输出格式, 下面对几个核心意思做讲解。%d{yyyy-MM-dd HH:mm:ss.SSS}表示该条日志记录的时间%thread表示线程名%-5level:级别从左显示5个字符宽度%logger{50}:表示该条日志所属类的全名%m:也可以写作%msg,表示这条日志的内容%n:表示换行...原创 2022-02-24 14:33:20 · 4248 阅读 · 0 评论 -
通俗易懂,java8 .stream().map().collect()用法
API: https://www.runoob.com/java/java8-streams.html模板:mylist.stream() .map(myfunction->{ return item; }).collect(Collectors.toList());说明:steam():把一个源数据,可以是集合,数组,I/O channel, 产生器generator 等,转化成流。forEach():迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数.原创 2021-12-16 17:29:46 · 763 阅读 · 0 评论 -
别翻了,成员变量和局部变量在多线程中的使用,看这篇就够了
别翻了,成员变量和局部变量在多线程中使用的区别,看这篇就够了原创 2021-12-16 14:55:01 · 6836 阅读 · 3 评论 -
Lombok介绍、附比较好用的几种注释推荐
一. 前言当属性多时会出现大量的 getter/setter 方法,冗余,且一旦修改属性,就需要修改对应的方法。会耗费大量的时间,也会影响美观,Lombok因此诞生,目的是让java变得简洁,快速。Lombok 可以提高开发效率。二. Lombok使用1)引入相应的Maven包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok原创 2021-12-03 15:45:17 · 530 阅读 · 0 评论 -
通俗易懂,Maven依赖pom中的scope详解
通俗易懂,Maven依赖pom中的scope详解原创 2021-12-03 11:59:17 · 1246 阅读 · 0 评论 -
最全的时间类解析。 SimpleDateFormat + Date() 和 DateTimeFormatter + LocalDate()的区别与使用场景
最全的时间类解析。不同的时间类,及其使用场景原创 2021-12-02 17:04:05 · 735 阅读 · 0 评论 -
Java精确到毫秒获取时间的三种方法,以及适用场景
毫秒级获取时间的几种方式, 性能探究, 以及究竟该用哪种方法。原创 2021-12-02 16:30:35 · 14481 阅读 · 1 评论 -
线程池应该设置多少核心线程数——Java多线程系列学习笔记
前言本章主要讨论线程池合适的线程数量是多少,以及 CPU 核心数和线程数的关系。我们调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能。在实际工作中,我们需要根据任务类型的不同选择对应的策略。1. CPU密集型第一种是 CPU 密集型任务,比如加密、解密、压缩、计算等一系列需要大量耗费 CPU 资源的任务。最佳线程数 = CPU 核心数的 1~2 倍如果设置过多的线程,实际上并不会起到很好的效果。此时假设我们设置的线程数是 CPU 核心数原创 2021-12-01 11:31:53 · 1884 阅读 · 0 评论 -
Lists.partition用法(代码实例)
将list集合按指定长度进行切分,返回新的List<List<??>>集合,如下的:List<List> lists=Lists.partition(numList,3);package test;import com.google.common.collect.Lists;import org.junit.Test;import java.util.List;public class testList { @Test public void原创 2021-11-30 20:01:23 · 335 阅读 · 0 评论 -
深入浅出理解 Variable used in lambda expression should be final or effectively final
翻译:lambda 表达式中使用的变量应该是 final 或者有效的 final原因解析:lambda表达式(多用在线程领域),是由匿名内部类演变来的。匿名内部类产生的对象一般存放在JVM的堆区域,而局部变量会存放在JVM的栈区域,随着方法调用结束,局部变量就会出栈,被当做垃圾回收掉。而此时,内部类对象可能还存在,如果内部类对象这时直接去访问局部变量的话就会出问题,因为外部局部变量已经被回收了。一个解决问题的思路是:将用到的变量在内部类中复制一份。但这样会造成数据不一致的问题:即使我们在内部类中复原创 2021-11-30 19:10:57 · 2438 阅读 · 1 评论 -
通俗易懂两种常用的多线程实现方式——Java并发系列学习笔记
如果我们想执行多线程操作,通常有两种方法一. 继承Thread类方式步骤:自定义类继承Thread覆盖Thread中的run()方法创建该类的对象,调用start()方法,开启线程并调用run方法class MyThread extends Thread{ private int ticket=10; public void run(){ for(int i=0;i<20;i++){ if(this.ticket>0){ System原创 2021-11-30 17:29:38 · 383 阅读 · 0 评论 -
详解get与post请求方式、content-type与responseType、@Requestbody与@Requestparam的使用场景
1. get与post请求方式post:一般用来提交表单,请求数据被包装在body体中,是安全的;get:一般用来获取数据信息,当然也可以用来获取表单,请求参数在url中,是不安全的;2. content-type与responseType2.1 content-typecontype-Type用来指定不同格式上传参数的请求信息(页面——>服务器)。content-Type常用数据类型:application/json:把它作为请求头,则传递的消息主体是序列化后的 JSON 字符串原创 2021-11-29 15:10:59 · 4043 阅读 · 0 评论 -
通俗易懂讲解RPC、SpringCloud、Dubbo、Zookeeper、Hadoop、hive等概念的区别
文章目录1. RPC2. Hadoop3. SpringCloud和Dubbo4. Zookeeper5. 总结1. RPCRPC是一个远程调用的技术方式,其可以通过HTTP协议实现,也可以是基于SOCKET自己定义新的协议。其本质是为了让机器在进行远程调用的时候,不需要知道具体是从哪台机器调用,从而实现了服务的解耦。RPC本质上就实现了两个功能,一个是通过socket等实现的网络传输、一个是数据的序列化和反序列化。RPC 和 HTTP 调用是没有经过中间件的,它们是端到端系统的直接数据交互。HTT原创 2021-11-26 16:50:11 · 781 阅读 · 0 评论 -
BeanUtils.copyProperties()使用详解+在不同包的区别
一. 两个包下的BeanUtils.copyProperties对比BeanUtils是开发中常用到的工具类。而获取这一工具类常用的方法有两种org.springframework.beans.BeanUtilsorg.apache.commons.beanutils.BeanUtils以上两个包皆可获取不同的包中BeanUtils的方法使用是不一样的,接下来就对这两个包中的copyProperties方法进行对比。先来看一下这两个包中的,通过copyProperties方法的定义:/原创 2021-11-24 17:36:56 · 1542 阅读 · 0 评论 -
深入浅出,对于代理模式的理解(代理模式与外观模式的区别)
从名字入手, 理解为我们生活中的代理商角色即可。场景一:我饿了,去饭店点菜, 我不需要关心菜是怎么做出来的, 只要最后能吃到就好(外观模式)场景二:我是个外地人, 连饭店都不知道在哪,于是找了个当地的代理,叫他帮我去点菜,我无需关心代理是怎么找到饭店,以及怎么点菜的,我只要结果(代理模式)综上, 代理模式相当于更包装化的外观模式, 代理可以调用外观。...原创 2021-11-16 11:50:54 · 558 阅读 · 2 评论 -
享元模式在JDK源码中的应用——Java设计模式系列学习笔记
1. String中的享元模式Java中将String类定义为final(不可改变的),JVM中字符串一般保存在字符串常量池中,java会确保一个字符串在常量池中只有一个拷贝,这个字符串常量池在JDK6.0以前是位于常量池中,位于永久代,而在JDK7.0中,JVM将其从永久代拿出来放置于堆中。我们做一个测试:public class Main { public static void main(String[] args) { String s1 = "hello";原创 2021-11-16 11:23:50 · 700 阅读 · 0 评论 -
深入浅出解释深拷贝、浅拷贝、对象拷贝、引用拷贝原理和应用
一、拷贝的引入1. 引用拷贝创建一个指向对象的引用变量的拷贝。public class QuoteCopy { public static void main(String[] args) { Teacher teacher = new Teacher(); Teacher otherTeacher = teacher; }}class Teacher { private String name; private int age;原创 2021-11-15 17:06:46 · 297 阅读 · 0 评论 -
单例设计模式详解+源代码+JDK源码应用——Java设计模式系列学习笔记
@toc一. 基本介绍采取一定的方法保证在整个的软件系统中,对某个类智能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。比如Hibernate的SessionFactor,他充当数据存储源的代理,并负责创建Session对象。SessionFactor并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactor就够,这时就会使用到单例模式。二. 单例模式的八种方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒原创 2021-11-15 15:34:21 · 314 阅读 · 1 评论 -
final、static、单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)
final意思是,这个对象的值(基本类型就是值,引用类型是引用地址),不会再被改变与线程安全的关系:final在一定程度上能使某些变量强制变得线程安全static意思是,这个对象是一个全局变量了,你可以在多个地方,多个线程中调用到它,而且调用的是同一个它与线程安全的关系:一般这种的变量很容易造成线程不安全的情况单例模式这首先是一种特殊的需求,就是某个类的实例在JVM中只能存在一个,跟前面的static,线程安全都不一样与线程安全的关系:实现单例需要考虑复杂的多线程的情况,这个东西需要线程安全原创 2021-11-15 15:15:03 · 3364 阅读 · 0 评论 -
组合和聚合的区别,通俗易懂。
聚合与组合都是表示整体和个体的关联关系,他们之间最大的区别在于子类被父类控制的程度。组合的父子类关系比聚合要强。组合:part-of关系,父类拥有子类,子类不能独立于父类存在。这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。下面代码的A类、B类之间的关系是组合关系public class A { void funcA() { // ... }}public class B { A a; a.原创 2021-11-11 11:58:16 · 3024 阅读 · 0 评论 -
泛型的作用是什么?——Java系列学习笔记
Java 语言中,引入泛型实乃为一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。作用如下:1. 类型安全。泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查;通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。2. 消除强制类型转换。泛型的一个附带好处是,消除源代码中的原创 2021-11-10 14:46:03 · 1467 阅读 · 0 评论 -
【最常用】两种java中的占位符的使用
第一种:使用%s占位,使用String.format转换public class Test { public static void main(String[] args) { String url = "我叫%s,今年%s岁。"; String name = "小明"; String age = "28"; url = String.format(url,name,age); System.out.println(原创 2021-11-05 15:33:05 · 5843 阅读 · 0 评论 -
详解JSONObject.parseObject和JSONObject.fromObject——Web网络系列学习笔记
一. 说明com.alibaba.fastjson.JSONObject是经常会用到的JSON工具包,同样它的转换方法也会经常被我们使用,包括对象转成JSON串,JSON串转成java对象等,如果过一段时间不用的话很容易就会忘记,所以将使用方法总结如下,以便以后忘记了方便查询//Java对象转换成String类型的JSON字符串JSONObject.toJSONString(Java对象) //String类型的JSON字符串转换成Java对象JSONObject.toJavaObject(JS原创 2021-11-05 14:43:07 · 8329 阅读 · 0 评论 -
JSONObjec的作用详解——Web网络系列学习笔记
JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。总而言之,JSONObject是一种中间结构,并且在网络中有很快的传输速度。1. 依赖包:fastjson <dependency> <groupId>com.alibaba</groupId> <原创 2021-11-05 11:24:17 · 527 阅读 · 0 评论 -
private static final long serialVersionUID = 1L的解释;【通俗易懂】
一、什么是Serializable?这是java的一个接口,这个接口是用来完成序列化和反序列化操作的。那么问题来了,什么是序列化和反序列化呢?二、序列化和反序列化任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样说可能还是不太明白,更简单直接一点。序列化:把一个对象以一种方式,打包压缩,成为一个字符串,使他适合存放和传输。反序列化:把它从字符串中解压缩,返回成一个对象。有了这个知识点之后,我原创 2021-11-03 12:03:39 · 1388 阅读 · 0 评论 -
DTO(领域数据传输对象)是做什么的
一、DTO的产生及优点最初,我们设计程序的时候直接创建实体类,然后再创建一个封装返回值的jsonObject类,进行业务处理的时候直接利用实体类传递数据,然后封装在jsonObject类里面返回,这样的话就存在以下几个问题:(1)暴露数据库表结构如果黑客通过前端的json对象解析出来了你的表结构,然后就可以结合表结构和请求命令模拟发送攻击请求窃取你的信息。(2)后台处理僵硬比方说我要根据用户名查询这个用户是否存在,同时还要根据用户名、订单时间、订单状态等等好多信息查询该用户的特定订单。这个时候如原创 2021-11-03 10:25:26 · 2194 阅读 · 0 评论 -
ThreadLocal 是什么?有哪些使用场景?——Spring系列学习笔记
一、前言ThreadLocal 本质上是一个代理工具类。使用线程本地存储,在每个线程中都创建了一个 ThreadLocalMap 对象,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。经典的使用场景是为每个线程分配一个 JDBC 连接 Connection。这样就可以保证每个线程的都在各自的 Connection 上进行数据库的操作,不会出现 A 线程关了 B线程正在使用的 Connection; 还有 Session 管理 等问题。二、ThreadLocal 使用例子原创 2021-10-11 10:44:54 · 1042 阅读 · 0 评论 -
HttpServletResponse和HttpServletRequest详解——Web网络学习笔记
一、HttpServletRequestHttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据。同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息。下表是接口HttpServletRequest的常用方法。说明:HttpServletRequest接口提供了很多的方法。接口HttpServletRequest的常用方法原创 2021-10-09 23:15:00 · 1207 阅读 · 0 评论 -
万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)
前言AbstractQueuedSynchronizer(AQS)是 Java 并发编程中绕不过去的一道坎,JUC 并发包下的 Lock、Semaphore、ReentrantLock 等都是基于 AQS 实现的。AQS 是一个抽象的同步框架,提供了原子性管理同步状态,基于阻塞队列模型实现阻塞和唤醒等待线程的功能文章从 ReentrantLock 加锁、解锁应用 API 入手,逐步讲解 AQS 对应源码以及相关隐含流程列出本篇文章大纲以及相关知识点,方便大家更好的理解什么是 Reentrant.翻译 2021-10-09 11:22:47 · 283 阅读 · 0 评论 -
乐观锁和悲观锁的使用场景及应用——Java高并发系列学习笔记
一. 定义1、乐观锁:顾名思义,对每次的数据操作都保持乐观的态度,不担心数据会被修改,所以不会对数据进行上锁。由于数据没有上锁,这就存在数据会被多人读写的情况。所以每次修改数据的时候需要对数据进行判断是否被修改过。2、悲观锁:与乐观锁相反,对每次的数据操作都保存悲观的态度,总是担心数据会被修改,所以在自己操作的时候会对数据上锁,防止在自己操作的时候被他人同时操作导致更新丢失。二. 使用场景1、乐观锁:由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在DB的读大于写的业务场景。2、悲原创 2021-10-09 11:07:13 · 1091 阅读 · 0 评论 -
【终极方法】解决IDEA搜索不到Lombok插件的问题(IDEA 不能识别 @Slf4j,@Getter ,@Setter注解)
关于Lombok是什么以及作用——>https://www.zhihu.com/question/423484572021版本的IDEA中,Lombok插件的功能被整合到了Hrisey Plugin插件中,二者有同样的功能,因此,下载Hrisey Plugin插件即可。原创 2021-09-22 11:45:33 · 1887 阅读 · 4 评论 -
【三万字!】Dubbo、Zookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列
Dubbo部分第一章 分布式系统相关概念1.1 大型互联网项目架构目标互联网项目特点:用户多、流量大、并发高、海量数据、易受攻击、功能繁琐、变更快大型互联网项目架构性能指标:响应时间、并发数、吞吐量大型互联网项目架构目标:高性能、高可用(网站一直可以正常访问)、可伸缩(通过硬件增加/减少,提高/减低处理能力)、高可扩展(耦合低、方便通过新增/移除方式,增加/减少功能模块)、安全性、敏捷性1.2 集群和分布式集群:一个业务模块,部署在多台服务器上。分布式:一个大的业务系统,拆分成小的业务模原创 2021-07-23 18:09:40 · 3566 阅读 · 16 评论 -
硬核!Java集合面经大全——双非上岸阿里巴巴系列
东北某不知名双非本,四面成功上岸阿里巴巴,在这里把自己整理的面经分享出来,欢迎大家阅读。序号文章名超链接1操作系统面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门12计算机网络面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门23Java并发编程面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门34Java虚拟机(JVM)面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门4原创 2021-07-18 20:23:51 · 3129 阅读 · 14 评论 -
硬核!MySQL数据库面经大全——双非上岸阿里巴巴系列
东北某不知名双非本,四面成功上岸阿里巴巴,在这里把自己整理的面经分享出来,欢迎大家阅读。序号文章名超链接1操作系统面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门12计算机网络面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门23Java并发编程面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门34Java虚拟机(JVM)面经大全——双非上岸阿里巴巴系列2021最新版面经——>传送门4原创 2021-07-18 20:13:48 · 10196 阅读 · 23 评论 -
最最最最终极办法!解决Idea乱码问题
如果所有能试过的方法都试过了,还是没有用。就下载一个最新版的Idea专业版,注意是专业版! 专业版里有更强的对编码的转化功能!整整找了两天的Bug,最后下了个专业版解决了问题!原创 2021-07-14 10:14:48 · 139 阅读 · 0 评论 -
【面试必备!Mac版本】一文打通Git教程!史上最硬核解析!——双非上岸阿里巴巴系列
文章目录第一章 Git概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git简史1.5 Git工作机制1.6 Git和代码托管中心第二章 Git安装第三章 Git常用命令3.1 配置基本信息(只需设置一次)3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.5 提交本地库3.6 修改文件3.7 历史版本3.7.1 查看历史版本3.7.2 版本穿梭3.8 其他常用命令3.9 Linux常用命令第四章 Git分支操作4.1 分支概念4.2 分支的好处4.3 分支的操作产原创 2021-07-13 10:24:16 · 714 阅读 · 6 评论 -
史上最通俗易懂! 一文明白Git是干嘛的
git的最基本作用是版本控制,比如你写一个文档,老板一直让你改,这时笨的人会在原文档上直接改,聪明一点的会复制一下原文档,在副本上修改,这时老板说你的第三版比较好,笨的人煞笔了。。,聪明一点的就直接拷贝了第三版给客户发过去了。然后聪明一点的认为这次的事情完事了把其他没用的都删了,突然有一天老板说客户的意见和你最后一版的相同,这时聪明一点的人也煞笔了。。。。来了个最聪明的人,会用git,他在本地建了一个版本库,每次老板让他修改,他就把之前的版本提交一下,并标明这版的主要特点,这样文件夹里就只有一个文档,每次转载 2021-07-09 19:49:57 · 11014 阅读 · 2 评论