java
文章平均质量分 87
ycfxhsw
这个作者很懒,什么都没留下…
展开
-
Java OOM认识
Java 堆用于存储对象实例,我们只要不断的创建对象,并且保证 GC Roots 到对象之间有可达路径来避免 GC 清除这些对象,那随着对象数量的增加,总容量触及堆的最大容量限制后就会产生内存溢出异常。内存泄露( memory leak),是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。JVM 虚拟机栈是有深度的,在执行方法的时候会伴随着入栈和出栈,上边的方法可以看到,main 方法执行后不停的递归,迟早把栈撑爆了。原创 2023-03-18 15:50:06 · 498 阅读 · 0 评论 -
Java方法调用细节
JVM中,类加载过程链接阶段的解析步骤包含将符号引用转换为调用方法的直接引用过程,该过程与方法的绑定机制有关,这节记录下Java方法调用的一些细节。原创 2023-02-25 10:12:47 · 212 阅读 · 0 评论 -
Java内存分配与回收策略
对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,,取决于当前使用的垃圾收集器组合以及相关的参数配置。以下列举几条最普遍的内存分配规则。原创 2023-02-08 18:07:24 · 138 阅读 · 0 评论 -
Java 锁详解
公平锁:是指多个线程按照申请锁的顺序来获取锁,线程直接进入队列中排队,队列中的第一个线程才能获得锁。类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。公平锁,就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照 FIFO 的规则从队列中取到自己。非公平锁,比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁的方式。原创 2022-07-06 00:01:28 · 345 阅读 · 0 评论 -
Spring 自带工具类使用学习
我们项目大多数都是基于Spring架构,Spring自身包含了许多实用的工具类,学习这些工具类的使用不仅能让我们达到事半功倍的效果,而且还能减少不必要的额外的工具类的引入。查看这些工具类的源码时发现它们都是abstract类型的,这是因为工具类的方法一般都是static静态方法,静态方法和类绑定,类加载后就能使用了,无需实例化(刚好abstract类不能直接实例化,并且可以定义非抽象方法),所以工具类定义为abstract类型再合适不过。原创 2021-09-20 21:49:55 · 1016 阅读 · 0 评论 -
Java ------- URL 和 URLConnection
java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号。java.net.URLConnection 则代表了应用程序和 URL 之间的通信链接,可用于读取和写入此 URL 引用的资源。URI = Universal Resource Identifier,中文释义为统一资源标志符URL = Universal Resource Locator,中文释义为统一资源定位符URN = Universal Resource Name原创 2021-09-20 21:46:11 · 138 阅读 · 0 评论 -
SpringBoot 文件上传与下载
前端页面<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title>文件上传</title> </head> <body> <form method=原创 2021-09-20 21:42:24 · 144 阅读 · 0 评论 -
Java代码块执行顺序
先说总结父类静态字段 —> 父类静态代码块 —> 子类静态字段 —> 子类静态代码块 —> 父类成员变量和非静态块(顺序加载) —> 父类构造函数 —> 子类成员变量和非静态块(顺序加载) —> 子类构造函数静态代码块:用staitc声明,jvm加载类时执行,仅执行一次。构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。构造函数public HelloA(){/原创 2021-09-01 18:19:24 · 126 阅读 · 0 评论 -
ArrayList实现原理及基本方法
ArrayList是开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,擅长随机访问元素,插入和删除较慢。1、ArrayList的数据结构ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。2、ArrayList是线程不安全的对ArrayList进行添加元素的操作的时候是分两个步骤进行的:先在object[size]的位置上存放需要添加的元素;将原创 2021-07-06 18:16:37 · 397 阅读 · 2 评论 -
SpringBoot声明式事务
所有数据访问技术都有事务机制,这些技术提供了API来开启事务、提交事务完成数据操作,或者在发生错误的时候回滚数据。Spring采用统一的机制来处理不同的数据访问技术的事务, Spring的事务提供一个PlatformTransactionManager的接口,不同的数据访问技术使用不同的接口实现。Data Tech实现JDBCDataSourceTransactionManagerJPAJPATransactionManagerHibernateHibernateT原创 2021-04-25 22:35:58 · 944 阅读 · 0 评论 -
SpringBoot配置文件详解
Spring Boot针对我们常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化配置内容。但是,我们还是需要去了解如何在Spring Boot中修改这些自动化的配置内容,以应对一些特殊的场景需求,比如:我们在同一台主机上需要启动多个基于Spring Boot的web应用,若我们不为每个应用指定特别的端口号,那么默认的8080端口必将导致冲突。配置基础在Spring Boot中src/main/resources目录是Spring Boot的配置目录,所以我们要为应用创建配置个性化原创 2021-04-25 22:32:28 · 353 阅读 · 0 评论 -
Shiro权限管理
Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,相比Spring Security而言相当简单, 可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西, 所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。本文只介绍基本的Shiro使用,不会过多分析源码等,重在使用。Shiro架构Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以原创 2021-04-25 22:27:03 · 694 阅读 · 1 评论 -
缓存更新策略
缓存一般是为了应对高并发场景、缓解数据库读写压力,而将数据存储在读写更快的某种存储介质中(如内存),以加快读取数据的速度。缓存一般分为本地缓存(如java堆内存缓存)、分布式缓存(如Redis)等。既然是缓存,就意味着缓存中暂存的数据只是个副本,也就意味着需要保证副本和主数据之间的数据一致性,这就是接下来要分析的缓存的更新。常见的缓存更新策略有:先删缓存,再更新数据库先更新数据库,再删缓存先更新数据库,再更新缓存read/write through写回。在更新数据的时候,只更新缓存,不更新数原创 2021-04-25 22:19:55 · 287 阅读 · 0 评论 -
SpringBoot跨域问题
一、同源策略同源策略是由Netscape提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是JSONP,JSONP虽然能解决跨域但是有一个很大的局限性,那就是只支持GET请求,不支持其他类型的请求,而今天我们说的CORS(跨域源资源共享)(CORS,Cross-origin原创 2021-04-25 22:16:02 · 91 阅读 · 0 评论 -
序列化与反序列化
一、序列化与反序列化序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。二、什么时候需要用到序列化和反序列化当我们只在本地 JVM 里运行下 Java 实例,这个时候是不需要什么序列化和反序列化的,但当我们需要将内存中的对象持久化到磁盘,数据库中时, 当我们需要与浏览器进行交互时,当我们需要实现 RPC 时, 这个时候就需要序列化和反序列化了。前两个需要用到序列化和反序列化的场景, 是不是让我们有一个很大的疑问? 我们在与浏览器交互时,原创 2021-04-10 18:08:28 · 112 阅读 · 0 评论 -
java操作Execl
一、介绍在平时的业务系统开发中,少不了需要用到导出、导入excel功能,今天来总结一下,如果你正为此需求感到困惑,那么阅读完本文,你一定会有所收获!本文对比apache poi,easypoi,easyExecl,给出它们的基本应用方式。二、apache poiApache POIApache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类原创 2021-04-10 18:06:04 · 330 阅读 · 0 评论 -
重定向和转发
Spring MVC 重定向和转发重定向和转发重定向经过客户端,而转发没有,因此相对来说转发更快速。但有时采用重定向更方便,如:重定向到外部网站;避免用户重新加载页面时再次调用同样的动作。return "redirect:/view/"+saveUser.getId();这里使用重定向来防止当前用户重新加载页面时’’‘saveUser’’'被二次调用。但是使用重定向无法轻松地给目标页面传值,因此,在Spring3.1后提供了Flash属性,详情见后文。常用处理方式Controlle原创 2021-02-26 15:57:53 · 101 阅读 · 0 评论 -
Spring中AOP简介及AspectJ五大通知注解
Spring中AOP简介及AspectJ五大通知注解本文以一个简单计算器为代码例子基本概念AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论,是对传统 -OOP(Object-Oriented Programming, 面向对象编程) 的补充。AOP 的主要编程对象是切面(aspect), 切面模块化横切关注点。在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能用在哪里,以什么方式应用,并且不必修改受影响的类,这样一来横切关原创 2020-10-26 18:19:57 · 563 阅读 · 2 评论 -
Hibernate入门详细教程
Hibernate入门1、下载HibernateHibernate官网链接本文以 hibernate-release-5.3.16.Final 为例(1)下载好解压后如下图所示:(2)打开 lib(3)打开 required2、编写第一个程序(1)开发工具IDEA(2)创建项目Hibernate,导入 jar 包导入上面 required 中的所有 jar 包导入 Mysql 驱动包 mysql-connector-java-8.0.19.jar(说明:Mysql版本原创 2020-06-03 14:40:24 · 1944 阅读 · 1 评论 -
java编写时钟
java编写时钟//java编写时钟package test;import java.awt.Color;import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.util.Cal...原创 2019-12-19 18:49:32 · 523 阅读 · 0 评论 -
java图形功能 大笑脸
java图形功能 大笑脸import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Image;import java.awt.Panel;import java.awt.e...原创 2019-12-07 18:13:42 · 305 阅读 · 0 评论