后端—开发语言—Java
文章平均质量分 82
JVM、集合、并发、基础知识等
测试开发abbey
高级测试工程师,2年C语言开发,4年服务端测开,擅长服务端测试、音视频测试
展开
-
Java Pattern和Matcher用法
无原创 2022-11-30 10:15:42 · 577 阅读 · 1 评论 -
关于日期的工具类
关于日期的工具类原创 2022-11-22 16:51:45 · 6076 阅读 · 0 评论 -
Spring框架—POJO对象模型
POJO对象模型介绍及简单使用原创 2022-06-28 16:33:27 · 741 阅读 · 0 评论 -
java.time包
在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,使用Calendar类进行时间和日期处理。实际应用中,使用joda-time比较多(Java7以前),所以从Java8开始有了从joda改进的java.time包。由主包 java.time 和四个子包组成:java.time包的API提供了大量相关的方法,这些方法一般有一致的方法前缀格式化与时间计算 类名 描述 DateT原创 2022-06-07 11:38:09 · 862 阅读 · 0 评论 -
Java文件操作:文件夹中搜索文件
在文件夹中搜索文件,找到的话将文件的绝对路径列表返回 /** * 递归查找文件 * @param baseDirName 查找的文件夹路径 * @param targetFileName 需要查找的文件名 * @param fileList 查找到的文件集合 */ public static void findFiles(String baseDirName, String targetFileName, List fileList原创 2022-03-23 16:42:29 · 1139 阅读 · 0 评论 -
常用框架概览
原文地址:https://www.cnblogs.com/lagou/p/10552815.htmlSpring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。有人亲切的称之为:Spring 全家桶。很多研发人员把spring看作心目中最好的java项目,没有之一。所以这是重点也是难点,工作中必须会,面试时肯定考。那么,花费10分钟,梳理Spring框架相关知识。spring系.原创 2021-01-26 09:22:02 · 2910 阅读 · 0 评论 -
SpringBoot+Redis(实现处理热点数据)
一、什么是热点数据在很短的时间内,许多数据要被多次查询(像双十一购物,查询商品)二、为什么要使用redisredis是非关系型数据库,Redis将数据存储在内存上,避免了频繁的IO操作三、场景短时间内有大量的请求来获取用户列表的数据,每次都需要从数据库进行查询。处理热点数据的基本思路:用户首次访问从数据库中取值,之后每次进行判断只要redis中有数据,就从redis中取值,其中涉及到多线程访问造成的内存穿透问题,采用双重检查的形式解决。package com.abbey.myb原创 2020-11-22 18:26:08 · 1318 阅读 · 0 评论 -
SpringBoot连接Redis超简单
建立一个springboot项目,什么也不用设置,建立一个最简单的就可以的,首先还是加入我们的Maven驱动包<!-- 加入redis连接池--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>加原创 2020-11-22 16:54:06 · 7171 阅读 · 0 评论 -
Springboot搭建个人博客系列
要搭建博客系统,首先要做的就是搭建一个数据库。我们选择的数据库是MySQL5.7,安装教程请自行百度。数据库建模工具是PowerDesigner16.6,下载及安装教程也请自行百度。既然是简单的博客系统,我只简单的建立了几张必要的表(为了保持系统简洁,og表什么暂时不添加了,后期需要再添加),分别为:sys_user:系统用户表t_article:文章表t_content:文章内容表t_comment:文章评论表t_category:文章分类表数据库结构见下图SQ转载 2020-11-11 17:26:48 · 4398 阅读 · 1 评论 -
8个适合用来练手的SpringBoot开源项目
spring-boot-examples•star 数 14821•项目地址:https://github.com/ityouknow/spring-boot-examples这个项目中整合了 Spring Boot 使用的各种示例,以最简单、最实用为标准,此开源项目中的每个示例都以最小依赖,最简单为标准,帮助初学者快速掌握 Spring Boot 各组件的使用。基本上涉及到了 Spring Boot 使用的方方面面。项目部分 demo 截图:微人事•star 数 3333•项目地址转载 2020-11-10 11:34:11 · 1112 阅读 · 0 评论 -
(二)SpringBoot 整合 JPA
一、JPA简介JPA(java persistence api)并不是一个框架,而是一组规范。Hibernate、TopLink、OpenJPA都实现了JPA规范,不过Hinernate最成功)。所以当说到JPA的时候,好多人首先想到的就是Hibernate。二、SpringBoot 整合 JPA1、创建工程并添加依赖2、在application.yml文件中进行配置spring: devtools: restart: enabled: false原创 2020-09-27 17:21:04 · 183 阅读 · 0 评论 -
(一)SpringBoot 整合 MyBatis
一、工具IDE:idea、DB:mysql二、创建SpringBoot工程在Idea中使用SpringInitializr模板创建SpringBoot工程,依赖选择如下:来看下建好后的pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i.原创 2020-09-27 14:12:32 · 915 阅读 · 0 评论 -
Spring AOP(一):概览
一、对AOP的初印象首先先给出一段比较专业的术语(来自百度):在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。然后我们举一个比较容易理转载 2020-09-16 11:24:53 · 130 阅读 · 0 评论 -
SpringBoot注解最全详解(整合超详细版本)
使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.类型安全对重构可以提供良好的支持 4.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能一、注解详解(配备了完善的释义)------(可采用ctrl+F 来进行搜索哦~~~~)@SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configurati...转载 2020-09-15 09:48:09 · 348 阅读 · 0 评论 -
Web开发学习路线图
以下路线图主要展示了成为前端开发者、后端开发者或运维开发者的技术学习路线。前端学习路线图主要还是掌握好 HTML、CSS、JavaScript。框架太多不需要多去了解,学习一两个即可,可以多关注 Vue。后端学习路线图后端技术还是倾向于 PHP 和 Python。运维开发学习路线图学好 Linux、Nginx、MySql、Docker。关注各大云服务商,简化的运维成本。...原创 2021-06-07 20:39:33 · 822 阅读 · 4 评论 -
Java面试总结汇总
原文作者:Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…序号 内容 链接地址 1 Java基础知识面试题(2020最新版) https://thinkwon.blog.csdn.net/art.原创 2021-03-22 09:35:55 · 378 阅读 · 0 评论 -
JVM—学习路线
目录1、JVM简介3、JVM加载class文件的原理机制1)Class Loader类加载器类加载器的作用是加载类文件到内存,比如编写一个HelloWord.java程序,然后通过javac编译成class文件,那怎么才能加载到内存中被执行呢?Class Loader承担的就是这个责任,那不可能随便建立一个.class文件就能被加载的,Class Loader加载的class文件是有格式要求,在《JVM Specification》中式这样定义Class文件的...原创 2021-02-04 09:25:51 · 307 阅读 · 0 评论 -
JVM—类加载器
原文作者:Java技术大联盟原文地址:JVM真香系列:.java文件到.class文件目录什么是JVM认识JDKJDK、JRE、JVM的关系".java"文件到".class"文件编译过程javap查看class文件内容什么是JVMJVM全称Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。可能有部分小伙伴学习过C++,C++开...原创 2021-02-04 10:14:39 · 92 阅读 · 2 评论 -
JVM—内存模型JMM
原文作者:qzqanlhy1314原文地址:jvm 内存模型目录一、jvm 内存模型划分二、虚拟机栈三、堆一、jvm 内存模型划分根据JVM规范,JVM 内存共分为方法区、虚拟机栈、本地方法栈、堆、程序计数器五个部分。jvm 1.8 内存区域划分方法区(线程共享)被所有方法线程共享的一块内存区域。用于存储已经被虚拟机加载的类信息、常量、静态变量等。这个区域的内存回收目标主要针对常量池的回收和堆类型的卸载。Java堆(线程共享)被所有线程共享的一块内.原创 2021-02-18 17:58:41 · 200 阅读 · 0 评论 -
JVM—堆栈 堆 方法区 静态区 final static 内存分配
原文作者:一夜丶鱼龙舞原文地址:JAVA 堆栈 堆 方法区 静态区 final static 内存分配 详解(转)一、栈(stack)和堆(heap)(1)内存分配的策略按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的、栈式的、和堆式的.静态存储分配:是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们..原创 2021-03-13 17:38:49 · 1144 阅读 · 2 评论 -
JVM—内存可见性
原文地址:内存可见性什么是可见性可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量Java内存模型(JMM)的介绍Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)的访问规则,及在JVM中将变量存储到内存和从内存中读取出变量的底层细节所有的变量都存储在主内存中 每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中该.原创 2021-02-18 17:40:12 · 1066 阅读 · 2 评论 -
JVM—方法区到底是怎么保存函数方法的?
原文作者:博_采_众_长原文地址:JVM --方法区(超详细)目录HotSpot中方法区的演进方法区的内部结构运行时常量池 vs 常量池方法区的演进细节StringTable为什么要调整最近想深入了解Java多太的重载和重写机制是如何实现的,既然说到重载,那肯定要了解函数是如何加载的,加载到哪里,加载之后的形式是什么,如何保存在内存中的?只有了解了函数的加载,才能谈重载是什么?于是就有了此篇文章,这篇文章主要解答的事后面两个问题,即加载之后的形式是什么,如何保存在内存中的.原创 2021-02-27 15:08:10 · 368 阅读 · 0 评论 -
JVM—加载到方法区的Class文件长什么样?
原文作者:zhaohong_bo原文地址:深入理解 JVM Class文件格式(一)目录一、JVM体系结构二、class格式文件概述三、class文件详细介绍一、JVM体系结构二、class格式文件概述class文件是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间。 我们的Java源文件, 在被编译之后, 每个类(或者接.原创 2021-02-27 17:36:19 · 540 阅读 · 1 评论 -
JVM—如何利用虚拟机栈进行函数调用?
原文作者:老马说编程原文地址:Java编程的逻辑 (12) - 函数调用的基本原理目录栈变量的生命周期数组和对象递归调用函数调用的成本小结读后有收获可以支付宝请作者喝奶茶栈我们之前谈过程序执行的基本原理:CPU有一个指令指示器,指向下一条要执行的指令,要么顺序执行,要么进行跳转(条件跳转或无条件跳转)。基本上,这依然是成立的,程序从main函数开始顺序执行,函数调用可以看做是一个无条件跳转,跳转到对应函数的指令处开始执行,碰到return语句或者函数结尾的...原创 2021-02-27 14:41:10 · 364 阅读 · 0 评论 -
JVM—垃圾回收与算法
目录一、如何确定垃圾1、引用计数法2、可达性分析二、标记清除算法(Mark-Sweep)三、复制算法(copying)四、标记整理算法(Mark-Compact)五、分代收集算法1、新生代与复制算法2、老年代与标记整理算法一、如何确定垃圾1、引用计数法在Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为0,..原创 2021-02-10 20:14:11 · 93 阅读 · 0 评论 -
JVM—GC垃圾收集器
目录1、Serial垃圾收集器(单线程、复制算法)2、ParNew垃圾收集器(Serial+多线程)3、Parallel Scavenge收集器(多线程复制算法、高效)4、SerialOld收集器(单线程标记整理算法)5、ParallelOld收集器(多线程标记整理算法)6、CMS收集器(多线程标记清除算法)7、G1收集器Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对...原创 2021-02-10 22:34:30 · 145 阅读 · 0 评论 -
Java 并发编程—核心理论
原文作者:liuxiaopeng原文地址:Java 并发编程:核心理论目录一、共享性二、互斥性三、原子性四、可见性五、有序性六 总结并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为.原创 2021-02-22 19:23:59 · 144 阅读 · 6 评论 -
Java并发编程—volatile关键字(保证变量的可见性、有序性机制)
原文作者:Matrix海子原文地址:Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内..原创 2021-01-18 21:10:34 · 891 阅读 · 0 评论 -
Java并发编程—无锁互斥机制及CAS原理
目录一、CAS简介二、AtomicInteger代码演示三、CAS 实现四、弊端一、CAS简介在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新,则写入将失败。操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应(这个变体通常称为比较和设置),原创 2021-02-22 17:41:46 · 341 阅读 · 0 评论 -
Java并发编程—Atomic原子类
目录Atomic1. AtomicIntegera. 多线程并发访问问题b. 用 AtomicInteger 类解决2. AtomicIntegerArraya. 多线程并发访问问题b. 用 AtomicIntegerArray 类解决相关问题Atomic在 java.util.concurrent.atomic 包下定义了一些对“变量”操作的“原子类”,它们可以保证对“变量”操作的:原子性、有序性、可见性:java.util.concurrent.atomic.原创 2021-02-24 10:23:32 · 306 阅读 · 0 评论 -
Java并发编程—锁的基本概念
在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等待。下边总结了对各种锁的解释1、公平锁/非公平锁公平锁是指多个线程在等待同一个锁时按照申请锁的先后顺序来获取锁。相反的非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。公平锁的好处是等待锁的线程不会饿死,但是整体效率相对低一些; 非公平锁的好处是整体效率相对高一些,但是有些线程可能会饿死或者说很早就在等待锁原创 2021-02-23 12:48:44 · 143 阅读 · 0 评论 -
Java 并发编程—Synchronized关键字
原文作者:liuxiaopeng原文地址:Java并发编程:Synchronized及其实现原理一、Synchronized的基本使用Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法:修饰普通方法 修饰静态方法 修饰代码块接下来我就通过几个例子程序来说..原创 2021-02-22 22:57:46 · 182 阅读 · 0 评论 -
Java并发编程—Synchronized底层优化(偏向锁、轻量级锁)
原文作者:Matrix海 子原文地址:Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)目录一、重量级锁二、轻量级锁三、偏向锁四、其他优化五、总结一、重量级锁上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到..原创 2021-02-22 23:21:17 · 294 阅读 · 5 评论 -
Java 并发编程—有锁互斥机制及AQS理论
原文作者:Java并发编程原文地址:AQS这样学就很简单了目录一、有锁互斥机制二、AQS如何实现互斥三、结语如果你是道格李,你要实现一套机制来保证线程互斥,你会如何实现呢?你肯定不会一上来就写代码对吧,你会想有哪些场景会出现线程互斥、针对每个场景抽象出需要实现的功能、针对这些功能底层选择什么样的数据结构什么算法……这其实是一种非常好的学习方法,回归到问题本身去思考问题,然后带着问题去找答案,而不是一上来就一头扎进代码中。一、有锁互斥机制1、核心功能如果你要实现一套机制.原创 2021-02-23 10:43:33 · 151 阅读 · 0 评论 -
Java并发编程—AQS原理分析
目录一、AQS原理简述二、自定义独占锁及共享锁三、锁的可重入性四、锁的公平性五、惊群效应AQS全称AbstractQueuedSynchronizer,它是实现JCU包中几乎所有的锁、多线程并发以及线程同步器等重要组件的基石, 其核心思想是基于volatile int state这样的一个属性同时配合Unsafe工具对其原子性的操作来实现对当前锁的状态进行修改 。一、AQS原理简述AQS内部维护着一个FIFO的CLH队列(无锁队列:Concurrent Lock-free .原创 2021-02-23 10:54:24 · 585 阅读 · 0 评论 -
Java并发编程—线程间协作方式wait()/notify()/notifyAll()原理分析
原文作者:tom有了cat原文地址:java并发编程基础之等待通知机制wait/notify原理分析一个线程修改了一个对象的值,而另一个线程感知了变化,然后进行了相应的操作,整个过程开始于一个线程,结束于另一个线程。前者是生产者,后者是消费者,这种模式在功能层面上实现了解耦。有下面一段代码,大家可以根据执行的结果和注释很清晰的明确这个wait和notify的工作机制,wait等待释放锁。代码如下,不再做具体描述:package juc.waitsleep; /** * @Descri.原创 2021-02-24 15:26:47 · 286 阅读 · 0 评论 -
Java并发编程—notify和notifyAll有什么区别?
原文作者:知乎用户原文地址:https://www.zhihu.com/question/37601861/answer/145545371著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。今天正好碰到这个问题,也疑惑了好久。看了一圈知乎上的答案,感觉没说到根上。所以自己又好好Google了一下,终于找到了让自己信服的解释。先说两个概念:锁池和等待池锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或.原创 2021-03-14 00:35:34 · 505 阅读 · 0 评论 -
Java并发编程—为什么 wait() 方法需要写在 while 里,而不是 if?
原文作者:后端面试那些事儿原文地址:再见面试官:为什么 wait() 方法需要写在 while 里,而不是 if? 问:为什么是 while 而不是 if ? 问:什么时候用 notifyAll 或者 notify? 问:为什么是 while 而不是 if ?大多数人都知道常见的使用 synchronized 代码:synchronized(obj){while(checkpass){wait();}//do...原创 2021-01-18 09:34:16 · 316 阅读 · 0 评论 -
Java并发编程—为什么wait/notify操作要先获取到锁?
首先,我们要清楚的是wait/notify操作是一种线程间同步机制。为什么要同步?因为多个线程要并发的访问同一共享变量,所以需要线程间同步,防止他们之间相互冲突。同步的关键字是synchronized,并没有明确的锁的语义。下面是一张线程的生命周期的图:wait的原理图:是释放锁以后再进入等待队列,还是进入等待队列以后再释放锁?这里有一个疑问。我们看一下ObjcetMonitor.cpp源码中,我们发现wait的源码如下:我们发现其实是需要先把线程加入到等待队列,然后再释放锁。那么原创 2021-02-24 15:30:03 · 1470 阅读 · 0 评论 -
Java并发编程—自旋锁CLHLock原理
原文作者:知识铺原文地址:Java知识进阶-程序员必懂的自旋锁CLHLock原理一、CLHLock原理内部实现的是一种基于原子操作的链表,特点:可扩展、高性能、公平的自旋锁。线程是在自身本地变量上自旋,不断轮询它的链表前一个节点状态。解决问题:避免多个线程一起来,一起竞争的不公平性问题,提供了一种先来先服务的公平性;如 银行的取号机。简单源码演示:二、获取锁步骤:第一个线程: 第一次来获取锁,立刻获取到锁第二个线程: 线程一还没有处理完,就要加入到队列,并关心它的.原创 2021-02-23 14:29:28 · 257 阅读 · 0 评论