
Java
文章平均质量分 61
Java方面相关知识总结和整理
懒虫虫~
无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你。你抬头自卑,低头自得,唯有平视,才能看见真实的自己!
展开
-
校验参数个数工具类
项目中有个需求:前后端参数一致性校验,在某业务场景下后端代码需要校验参数个数,因此设计了1个工具类方便大伙使用,特此简单记录下。原创 2024-06-07 23:47:44 · 630 阅读 · 0 评论 -
如何使用 try-with-resources 优雅地关闭资源
今天学习下Java 7中引入的try-with-resources语法糖,一个非常有用的特性,它使得在代码中使用资源(例如文件或数据库连接)变得更加简单、方便和安全。try-with-resources 从反编译后的代码来看,编译器自动帮我们生成了 finally 块,并且在里面调用了资源的 close() 方法,所以例子TryWithResourceOldTest 中的close() 方法会在运行的时候被执行。如果不用这个语法糖,手动在finally块中关闭,则代码显得非常臃肿。原创 2023-08-26 08:02:03 · 533 阅读 · 0 评论 -
记录本周五项目上线失败经验总结
从此次上线失败事件中,发现我们存在一个误区就是只要上线失败,就肯定是我们自己代码问题(虽然有时候确实这样)。但是既然经过了sit和uat两个环境的测试和检验,代码逻辑应该没啥问题!惯性思维有时候害死人!如果我们先分析接口调用链路情况,可能就不会再费力的去分析错误日志和代码逻辑了!有时候遇到问题,需要换种思路去分析,而不是盲目的自我怀疑。还有就是生产环境出问题,不要慌张,要冷静的分析查找根本原因,如果自己都乱了阵脚,那么很容易陷入思维误区或者事倍功半。原创 2023-07-30 00:06:17 · 460 阅读 · 0 评论 -
双重for循环优化
通过迭代删除或者利用map集合特性均能够有效提升查询效率原创 2023-07-28 22:51:00 · 5847 阅读 · 0 评论 -
For嵌套循环跳出外层循环(给for循环起别名)
这里分享下一个基本功:通过给for循环起别名,跳出时指定外层或内层循环。当想要跳出外层和内层循环时候,即break f1;当想要跳出内层循环时候,即break f2;原创 2023-06-03 14:15:13 · 801 阅读 · 0 评论 -
枚举类使用案例
一、ICmsCommonEnum公共接口/** * @description 通用枚举公共类 */public interface ICmsCommonEnum { /** * 统一定义基础code码 * @return */ String getCode();} 二、ErrorCodeEnum枚举类package com.meditrusthealth.mth.cms.service.api.enums;import lombok.A原创 2022-01-20 20:00:00 · 355 阅读 · 0 评论 -
写个日志请求切面,前后端甩锅更方便
一、切面介绍面向切面编程是一种编程范式,它作为OOP面向对象编程的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、权限控制、缓存控制、日志打印等等。AOP把软件的功能模块分为两个部分:核心关注点和横切关注点。业务处理的主要功能为核心关注点,而非核心、需要拓展的功能为横切关注点。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点进行分离,使用切面有以下好处:(1)集中处理某一关注点/横切逻辑(2)可以很方便的添加/删除关注点(3)侵入性少,增强代码可读性及可维护性因转载 2022-02-14 19:15:00 · 525 阅读 · 0 评论 -
JAVA New对象过程
由new关键字调用构造方法,返回类实例,达到创建对象目的。先实例化对象,再把对象初始化。例如 : Person person = new Person();这句话到底做了什么事情呢?其实就是讲对象的初始化过程。1、new 用到了Person.class,所以会先找到Person.class文件,并加载到内存中(用到类中的内容类就会被加载)。2、执行该对象的static代码块(静态初始块)。(如果有的话,给Person.class类进行初始化)3、在堆内存中分配空间,分配内存地址(指针碰撞和空闲列表原创 2021-09-01 22:44:34 · 3985 阅读 · 0 评论 -
字符串是否为空(isEmpty和isBlank的区别)
以前只知道使用没注意具体区别,特此整理总结下。我们常说的字符串为空,其实就是一个没有字符的空数组。比如:String a = "";a 就可以称为是一个空字符串。由于 String 在 Java 中底层是通过 char 数组去存储字符串的,所以空字符串对应的 char 数组表现形式为private final char value[] = new char[0];但实际工作中,我们需要对字符串进行一些校验,比如:是否为 null,是否为空,是否去掉空格、换行符、制表符等也不为空。比较简单的就原创 2021-08-09 09:11:00 · 3860 阅读 · 2 评论 -
字符串常量池以及String.intern()方法
Jvm的运行时内存可以分为堆、方法区、程序计数器、虚拟机栈和本地方法栈。而在方法区中有一个字符串常量池,用来保存字符串这个不可变量。如果我们使用String str=new String(“java虚拟机”)来new一个string对象,则该对象的实例保存在堆中。如果我们使用String str="java虚拟机"来创建一个字符串,jvm首先会在字符串常量池中创建该String的实例,然后将常量池中该实例的引用返回给str。new出来的String保存在堆中,如果我们想让字符串常量池中也保存该stri原创 2021-08-05 23:02:02 · 233 阅读 · 0 评论 -
JNDI 和 JDBC 的区别
一、JDBC1.1 JDBC简介Java Database Connectivity (JDBC)是一个标准的Java API,它由一组类和接口组成,Java应用程序开发人员使用它来访问数据库和执行SQL语句。简单解释就是JDBC用来连接数据库和执行SQL语句,但是它最大的特点是通过java程序去找数据库驱动,然后来连接数据库1.2 使用方式 Connection conn = null ; try { Class.forName("com.my转载 2021-07-21 22:15:21 · 2872 阅读 · 1 评论 -
集合(List、Set、Map)线程不安全样例及解决方案
多线程环境下,List、Set、Map均是线程不安全集合,如果不采用措施,并发访问就会报错。样例一:package com.zhang;import java.util.*;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.CopyOnWriteArrayList;import java.util.concurrent.CopyOnWriteArraySet;public class Cont原创 2021-06-28 23:15:37 · 453 阅读 · 0 评论 -
ArrayList知识点总结
一、简介ArrayList 是Java 集合框架中比较常用的数据结构了。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。/*** The size of the ArrayList (the number of elements it contains).*/private int size; // 实际元素个数transient Object[] elementData; //上面的 size 是指 elementData 中实际有多少个元素原创 2021-06-17 15:11:17 · 304 阅读 · 1 评论 -
Java解析字符串、数字以及String、toString、String.valueOf的区别
在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换。方法1String str = "123";try { int a = Integer.parseInt(str);} catch (NumberFormatException e) { e.printStackTrace();}方法2String str = "123";try { int原创 2021-06-09 16:22:49 · 466 阅读 · 0 评论 -
Spring中如果该Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?
一、解决方案方法1:Controller中注入Service时候,使用@Autowired自动注入,通过@Qualifier(“beanId”)指定注入具体哪一个Service。方法2:Controller中注入Service时候,使用@Resource(type=类名.class)指定注入哪一个Service。方法3:3.1每个Service的impl都可以指定名称,使用@Service(“名称”)3.2Controller中注入Service的时候使用名称来指定注入具体哪一个,使用@Res转载 2021-06-08 09:37:49 · 469 阅读 · 0 评论 -
Java比较日期时间大小
例子:String beginTime=new String("2017-06-09 10:22:22"); String endTime=new String("2017-05-08 11:22:22"); 1 直接用Date自带方法before()和after()比较SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date sd1=df.parse(beginTime);Date sd2=df.parse转载 2021-05-26 18:08:06 · 1730 阅读 · 0 评论 -
Java异常的分类有哪些以及OOM解决方案?
Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。一、异常实现及分类Throwable又派生出Error类和Exception类。Error错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。Exception异常:Exception以及他的子类,代表原创 2021-05-25 09:14:25 · 713 阅读 · 0 评论 -
List<Map<String, Object>>使用总结
List<Map<String, Object>>List集合中的对象是一个Map对象,而这个Map对象的键是String类型,值是Object类型。package com.huahua.test;import java.util.*;public class TestListMap { public static void main(String[] args) { List<Map<String, Object>> listMaps = ne原创 2021-05-14 18:39:03 · 3841 阅读 · 0 评论 -
页面加载完成获取最近一个月日期
一、前端JS$(function(){ $('#startDate').datebox('setValue', getStartdate()); $('#endDate').datebox('setValue', getEnddate());});二、后台代码function getEnddate(){ var myDate = new Date(); var nowY = myDate.getFullYear(); var nowM = myDate.getMonth()+1; va原创 2021-05-14 09:16:31 · 121 阅读 · 0 评论 -
关于URLEncoder.encode的用法
公司项目需要访问jira平台,需要对传输数据进行转码,否则乱码导致查询出错。一、前端代码 //获取系统和相应系统的领域负责人 function getSystem(){ $.ajax({ url : '${pageContext.request.contextPath}/IT00015Controller/doGet.action', type : 'get', async : false, data : {原创 2021-04-02 17:26:12 · 18784 阅读 · 0 评论 -
Get与Post请求的区别
在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get。可在中的method属性中指定提交的方式。如:<form action="inputForm"method=“get”>,如果不指定method属性,则会默认该属性为”get”方式。Get和Post区别不同点一:通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。不同点二:通过get传原创 2021-02-09 18:00:25 · 300 阅读 · 0 评论 -
Java8 Stream使用
Java8出了一个Stream流式编程,在开发中或多或少用到接触过。怎么说呢!举个例子把,一起我们在遍历一个集合的时候,我们是从外部去遍历的,然后才能拿到结果,这样来效率就会变得相对低一点。而这个时候我们去内部去遍历集合的时候,直接从内部拿数据。减少资源消耗,提升效率。什么是Stream呢?Stream它并不是一个容器,它只是对容器的功能进行了增强,添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两种执行模式,并行模式充分的利用了多核处理器的优势,使用fork/join框原创 2021-02-09 17:42:27 · 1088 阅读 · 1 评论 -
利用doPost请求调用第三方平台接口
一、前端传输参数参数格式如下:{ "bk_app_code": "service-desk", "bk_app_secret": "2b502835-65f1", "bk_username": "BPM", "flow_no": "papersheet", "action_type": "usb_enable", "callback_url": null,原创 2021-02-07 19:03:41 · 716 阅读 · 0 评论 -
为什么存在service层?作用?
一、问题出现场景最近跟同事讨论时候,有人提出:一定要写个Service层的接口吗?Service层的接口到底用做什么用的呢?好像除了增加工作量没什么用啊?其实,Service层在业务逻辑不复杂的时候,似乎是没有什么用,但是随着应用迭代,业务逻辑变得复杂了之后,这一层是非常有用的。二、作用如下1、更适合用来处理复杂的业务逻辑,可能会涉及多张表的操作,甚至还混杂着消息投递、接口调用等一系列的复杂综合性事务,这也是我们常说的事务管理所处的层次。2、对表现层的复用支持,往往我们一个业务逻辑处理,不会单单只原创 2021-01-28 19:40:20 · 4717 阅读 · 0 评论 -
重新认识ConcurrentHashMap
一、ConcurrentHashMap数据结构ConcurrentHashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同。在1.7中数据结构是由 Segment 数组、HashEntry 组成,和 HashMap 一样,仍然是数组加链表。Segment 是 ConcurrentHashMap 的一个内部类,主要的组成如下:static final class Segment<K,V> extends ReentrantLock imp转载 2021-01-15 19:43:23 · 177 阅读 · 0 评论 -
Java直接AXIS调用远程WebService
最近项目中需要BPM系统远程调用MESS接口(WebService类型),特此记录资料如下。一、WebService简介Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。简单的说,WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,原创 2021-01-06 14:51:39 · 1657 阅读 · 0 评论 -
Java判断字符串是否包含某个字符以及小数判断
最近项目中使用到判断匹配校验工厂代码,所以总结知识点整理如下:判断一个字符串是否包含某个子串的3种方法:startsWith()contains方法indexOf方法startsWith()这个方法有两个变体并测试如果一个字符串开头的指定索引指定的前缀或在默认情况下从字符串开始位置此方法定义的语法如下:public boolean startsWith(String prefix, int toffset)orpublic boolean startsWith(String prefix原创 2020-12-28 11:02:52 · 1278 阅读 · 0 评论 -
Java面试基础-----容器/集合
一、Java容器包含数组,String,Collection接口下的List、Set、Queue和Map二、详细对比介绍数组长度限制为 Integer.Integer.MAX_VALUE;String的长度限制: 底层是char数组,长度Integer.MAX_VALUE 线程安全的。HashSet基于哈希表实现,有以下特点:1.不允许重复2.允许值为null,但是只能有一个3.无序的。4.没有索引,所以不包含索引操作的方法LinkedHashSet跟HashSet一样都是基于哈希原创 2020-11-16 10:27:02 · 167 阅读 · 0 评论 -
什么要使用克隆、如何实现克隆对象、序列化与反序列实现克隆的好处、深拷贝与浅拷贝
1、为什么要使用克隆对象的拷贝需要使用克隆,如果想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要使用克隆了,Java语言中克隆针对的是类的实例。2、如何实现克隆对象有两种方式:(1)实现Cloneable接口并重写Object类中的clone()方法。(2)实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。代码举例public class MyUtil { private MyUtil() { throw原创 2020-11-14 15:18:01 · 1944 阅读 · 1 评论 -
Java面试基础——序列化和反序列化
一、什么是序列化和反序列化序列化是指将Java对象转换为字节序列的过程。反序列化则是将字节序列转换为Java对象的过程。是将实现了Serializable接口的对象转换成一个字节序列,能够通过网络传输、文件存储等方式传输 ,传输过程中却不必担心数据在不同机器、不同环境下发生改变,也不必关心字节的顺序或其他任何细节,并能够在以后将这个字节序列完全恢复为原来的对象(恢复这一过程称之为反序列化)。对象的序列化是非常有趣的,因为利用它可以实现轻量级持久性,“持久性”意味着一个对象的生存周期不单单取决于程序是转载 2020-10-30 18:09:06 · 288 阅读 · 0 评论 -
Java面试基础——反射机制
一、什么是反射反射是Java的特征之一,是一种间接操作目标对象的机制。核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性,不需要提前在编译期知道运行的对象是谁。它允许运行中的Java程序获取类的信息,并且可以操作类或对象内部属性。程序中对象的类型一般都是在编译期就确定下来的,而当我们的程序在运行时,可能需要动态的加载一些类,这些类因为之前用不到,所以没有加载到jvm,这时,使用Java反射机制可以在运行期动态的创建对象并调用其属性,它是在运转载 2020-10-30 17:26:45 · 452 阅读 · 2 评论 -
静态代理、JDK和CGLIB动态代理区别
一、 JDK和CGLIB动态代理1、JDK动态代理利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。2、CGLIB动态代理利用ASM开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。3、何时使用JDK还是CGLIB?1)如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP。2)如果目标对象实现了接口,可以强制使用CGLIB实现AOP。3)如果目原创 2020-10-15 11:47:42 · 705 阅读 · 0 评论 -
ServletContext 和 WebApplicationContext的理解
一、ServletContext介绍JavaEE标准规定:在项目启动时,Servlet容器(Tomcat、Jboss等)需要给项目初始化一个ServletContext作为公共环境容器存放公共信息,而ServletContext中的信息都是由容器提供的。启动Web容器,执行流程如下:1、启动WEB项目时,容器(如:Tomcat)会去读它的配置文件web.xml,读两个节点: 和 ;2、容器创建一个ServletContext(上下文),在该应用内全局共享;3、容器将转化为键值对,并交给Servle原创 2020-05-20 10:13:30 · 4817 阅读 · 0 评论 -
Java面试常考的 BIO,NIO,AIO 总结
在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。同步与异步同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。同步和异步的最大区别在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。阻塞和非阻塞阻塞就是发起一个请求,调用者一直等待请求结转载 2020-10-30 16:01:29 · 361 阅读 · 0 评论 -
拦截器和过滤器的区别
1.过滤器依赖于servlet容器。在实现上基于函数回调。优点:可以对几乎所有请求进行过滤。缺点:是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。2.拦截器依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。优点:由于拦截器原创 2020-10-22 15:21:04 · 542 阅读 · 4 评论 -
Java面试基础—Class类中各个方法有什么区别?
一、获取Class对象的三种方式package com.reflect;public class Demo3 { public static void main(String[] args) { // 第一种方式获取Class对象 User u1 = new User();// 这一new 产生一个Student对象,一个Class对象。 Class u1Class = u1.getClass();// 获取Class对象 System.out.println("class "+u1C原创 2020-10-21 09:13:37 · 212 阅读 · 0 评论 -
Java面试接口以及接口调用超时解决方法
概念是一个抽象类型,是抽象方法的集合(100%的抽象类)。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。特点就像一个类一样,一个接口也能够拥有方法和属性。但是在接口中声明的方法默认是抽象的(即只有方法标识符,而没有方法体)。实现接口的类必须实现该接口中的方法。如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识原创 2020-10-19 17:58:10 · 7508 阅读 · 0 评论 -
String、StringBuffer和StringBuilder的区别
String String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁,底层使用final修饰。String a = "007";a = "008";// 输出结果a为008System.out.println(a);a对象的内存存储空间图再次给a赋值时,并不是对原来堆中实例对象进行重新赋值,而是生成一个新的实例对象,并且指向“008”这个字符串,a则指向最新生成的实例对象,之前的实例对象仍然存在,如果没有被再次引用,则会原创 2020-06-09 17:12:36 · 1996 阅读 · 0 评论 -
Java类加载执行顺序
类的加载类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。下面的这张图红色圈框表示类的加载机制运行时机:从图中可以看出:编译器(比如eclipse)首先将java文件编译为.class文件,而类加载器又将这些.class文件加载到JVM中。其中类装载器的作用就是类的加载。类的加载:将类的.class文件中的二进制数据读入到内存中,将其放在运行时原创 2020-05-22 18:20:26 · 6457 阅读 · 1 评论 -
Java中强引用,软引用,弱引用和虚引用的区别与用法
前言Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用、弱引用等方法。从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。1.强引用(StrongReference)以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品转载 2020-05-22 18:17:19 · 2016 阅读 · 0 评论