Java
文章平均质量分 90
关于java的知识杂记
一半@java
这个作者很懒,什么都没留下…
展开
-
死磕Spring系列:MVC源码分析
为了方便利用使用的思维进行理解,我们可以先从程序调用入口出发,先对调用层面进行说明,再对程序框架本身处理进行深入。简而言之就是先说明一个请求进入mvc逻辑需要经过哪些处理步骤(1~7节),再说明处理步骤中mvc是怎样提供参数支持的(8~10节)。1. ServletServlet是一个处理http请求的标准类,它处于javax.servlet.http包,属于java标准库的扩展部分。其中主要有init、service、destroy方法,作用分别为初始化时调用,接收到请求调用,销毁时调用。Servl原创 2022-02-23 22:39:00 · 974 阅读 · 0 评论 -
死磕Spring系列:@Autowired工作原理
1. 前言本文需要有对SpringBean加载流程的知识基础,如果需要在温习一遍的,可以先阅读博文《死磕Spring系列:从源码了解SpringBean生命周期》。2. @Autowired@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUN.原创 2022-02-18 10:53:58 · 852 阅读 · 2 评论 -
死磕Spring系列:从源码理解SpringBean生命周期
Spring替我们管理了对象的创建、引用及销毁,极大的简化了开发者的操作,但是,这一系列便利操作背后究竟是怎样实现的呢?我们来一探究竟。1. 调用时序图2. 源码分析2.1 SpringApplication2.1.1 run运行启动类,调用SpringApplication类的run方法:public class DemoApplication { public static void main(String[] args) { SpringApplicat原创 2022-02-18 09:55:32 · 489 阅读 · 0 评论 -
Session的作用及原理
文章目录1. 定义2. 和Cookie比较3. 图解4. 源码解析(Java)5. 总结1. 定义Session在计算机中,尤其是网络应用中,被称为“会话控制”。Session对象可以存储用户在程序中的一些数据,用户在系统中不同的web页面之间进行跳转时,存储在Session中的数据不会丢失。当用户请求来自web页面时,如果该用户还没有会话,web服务器就会创建一个新的Session对象。当会话过期或者被放弃后,服务器将终止该会话。2. 和Cookie比较Session和Cookie都可以保存用原创 2022-01-07 14:51:58 · 9595 阅读 · 1 评论 -
图解四大IO模型与原理
io模型、io原理原创 2022-01-07 10:43:59 · 2257 阅读 · 0 评论 -
关于mysql事务,你还没搞清楚吗
一、ACID 一个模块,是多个独立的功能逻辑的组合,每个功能包含多个操作步骤,包括IO、计算、数据库等操作,必须保证每一步都被执行,且执行正确,这个功能和模块才是可用,可交付的。 那么,如何保证这些操作的完整性,就是Atomic,定义为一个原子操作,全部执行且成功,或者全部失败都不执行(回滚),原子操作如果成功,那状态就必须持久,被称为数据库的Durability,持久性。原子性A、持久性D,这俩个都比较好理解,定义了事务的边界,行为的开始和行为的结束一致性C、隔离性I,就是对事务中间状态的管原创 2020-09-09 18:08:33 · 1611 阅读 · 0 评论 -
搞懂Java类加载中的双亲委派机制
一、原创 2020-08-11 13:36:24 · 1605 阅读 · 0 评论 -
搞定Spring的BeanFactory和FactoryBean
一、原创 2020-08-02 17:59:14 · 1808 阅读 · 0 评论 -
你真的了解Jpa吗?
一、原创 2020-07-19 01:14:43 · 1978 阅读 · 1 评论 -
ThreadLocal究竟是个啥?
一、关于 ThreadLocal不是一个线程,而是一个线程的本地化对象,当某个变量在使用ThreadLocal维护时,它会在每个线程中创建独立的一个副本,不同线程中对这个变量的修改不会影响到其他线程中这个变量的值。 ThreadLocal采用了空间换时间的思想,主要用来实现多线程环境下线程安全和保存线程上下文中的变量。 可以笼统的理解它为线程范围下的全局变量存储对象。二、APIpublic void set(T value) {}将T类型的值设置到ThreadLocal中public T g原创 2020-07-18 16:27:51 · 1851 阅读 · 1 评论 -
java中如何优雅的进行null值处理
一、NullPointerException原创 2020-07-16 13:53:45 · 13435 阅读 · 4 评论 -
不会用nginx?看完即入门
一、关于nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。主要用途(包含但不仅限于):Http静态资源服务器 存储静态资源,如图片文件等。负载均衡 如果一台服务器不能承受并发访问压力时,我们可以新增一个服务,其中用nginx可以实现一个入口访.原创 2020-07-16 10:22:50 · 1470 阅读 · 0 评论 -
轻松搞定eclipse中的代码格式化
本文以eclipse Oxygen.3a Release版本为例。 以下代码为格式化配置的代码,需要将代码另存为文件code_formatter.xml中。<?xml version="1.0" encoding="UTF-8" standalone="no"?><profiles version="13"><profile kind="CodeFormatterProfile" name="code_formatter" version="13"><s原创 2020-07-15 10:25:45 · 3086 阅读 · 0 评论 -
Java 8 Funciton、Consumer、Predicate的作用及用法
一、简述Funciton、Consumer、Predicate是Java8中的新特性。他们都是函数式接口,位于java.util包中。关于函数式接口,其外部特征是类上使用@FunctionalInterface注解。它有以下特点:只能注解到有且仅有一个抽象方法的类上。 接口显示声明或覆盖了java.lang.Object类中方法的方法也不算做抽象方法。 Java8接口中static方法与default方法不算抽象方法。他们各自的使用场景如下:Function需要执行目标方法后得到返回原创 2020-06-18 13:17:35 · 2496 阅读 · 1 评论 -
关于Java代理那些事儿
代理是啥?就是代替你执行你持有的主要功能,并且能在你的基础之上完成一些其他的功能。代理的目的就是生成一个和原对象具有同样功能的对象。在Java中,代理是一种设计模式。在Spring的面向切面编程(AOP)中,主要就是利用动态代理来实现代码的织入。代理分为动态代理和静态代理。顾名思义,动态代理比静态代理扩展性更高,动态代理不用为每一个实现类维护一个代理类。静态代理为不同的被代理类都维护一个代理类,维护工作量大,不利于扩展。建立接口类,即被代理类。Worker.java 工人接口类pu原创 2020-06-03 11:05:35 · 939 阅读 · 0 评论 -
Java单例模式的实现与破坏
单例模式是一种设计模式,是在整个运行过程中只需要产生一个实例。那么怎样去创建呢,以下提供了几种方案。一、创建单例对象懒汉式public class TestSingleton { // 构造方法私有化 private TestSingleton(){} // 声明实例 private static TestSingleton singleton; // 提供外部调用方法,生成并获取实例 public static TestSingleton getInstance()原创 2020-06-02 17:03:38 · 930 阅读 · 0 评论 -
Java数据类型之Cache模式
1、关于Java数据类型基本数据类型基本数据类型有8种,每种基本数据类型都有对应的引用类型。类型 描述 长度 可表示数据 引用类型 boolean 布尔型 1 true、false Boolean byte 字节型 1 ~ Byte char 字符型 2 ~ Character short 短整型 2 ~ Short int 整型 4...原创 2020-06-02 14:40:56 · 932 阅读 · 0 评论 -
Java中AQS基本实现原理
一、AQS概述AQS全名AbstractQueuedSynchronizer,意为抽象队列同步器,JUC(java.util.concurrent包)下面的Lock和其他一些并发工具类都是基于它来实现的。AQS维护了一个volatile的state和一个CLH(FIFO)双向队列。二、分析statestate是一个由volatile修饰的int变量,它的访问方式有三种:getState() setState(int newState) compareAndSetState(in.原创 2020-05-15 13:28:38 · 1720 阅读 · 0 评论 -
Java中CAS 基本实现原理
一、前言了解CAS,首先要清楚JUC,那么什么是JUC呢?JUC就是java.util.concurrent包的简称。它有核心就是CAS与AQS。CAS是java.util.concurrent.atomic包的基础,如AtomicInteger、AtomicBoolean、AtomicLong等等类都是基于CAS。什么是CAS呢?全称Compare And Swap,比较并交换。CAS有三个操作数,内存值V,旧的预期值E,要修改的新值N。当且仅当预期值E和内存值V相同时,将内存值V修改为N,否则什原创 2020-05-14 17:49:53 · 3782 阅读 · 6 评论 -
Java并发编程之闭锁与栅栏
一、前言闭锁与栅栏是在多线程编程中的概念,因为在多线程中,我们不能控制线程的执行状态,所以给线程加锁,让其按照我们的想法有秩序的执行。闭锁CountDownLatch,实例化时需要传入一个int类型的数字(count),意为等待count个线程完成之后才能执行下一步动作。如今天要做的事情是吃晚饭,再去散步。假设11个人相约晚饭后一起去散步,我们得等11个人全都吃完晚饭了才能出发去散步...原创 2020-04-27 16:35:25 · 1349 阅读 · 2 评论 -
浅谈Java 线程池原理及使用方式
一、简介什么是线程池?池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用。java中有线程池、连接池等等。线程池就是在系统启动或者实例化池时创建一些空闲的线程,等待工作调度,执行完任务后,线程并不会立即被销毁,而是重新处于空闲状态,等待下一次调度。线程池的工作机制?在线程池的编程模式中,任务提交并不是直接提交给线程,而是提交给池。线程池在拿到任务之后,...原创 2020-04-26 16:40:45 · 1758 阅读 · 0 评论 -
Java 8 Stream API实例
一、开篇Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用。 作用?简化代码,提升你的开发效率。 不会?看完这篇你就能自己上手了!二、实例首先将你的集合处理成流,才可以使用此API。Stream<String> stream = list.stream();接下来创建一个String类型的List,便...原创 2020-04-26 10:49:47 · 2129 阅读 · 1 评论 -
Windows中使用MyCat实现读写分离
一、关于MyCat什么是MyCat?一个彻底开源的,面向企业应用开发的大数据库集群 。 支持事务、ACID、可以替代MySQL的加强版数据库。 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群。 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server。 结合传统数据库和新型分布式数据仓库的新一代企业...原创 2020-01-05 19:15:07 · 2275 阅读 · 0 评论 -
Mysql主从分离与双机热备超详细配置
一、概述本例是在Windows环境,基于一台已经安装好的Mysql57,在本机安装第二台Mysql57服务。读完本篇内容,你可以了解到Mysql的主从分离与双机热备的知识,以及配置期间问题的解决方案。二、过程1、安装第二台数据库复制一份mysql的安装目录,取名MySQL Server 5.7_3307(从数据库)。清空Data文件夹,并修改my.inicl...原创 2020-01-05 17:18:24 · 1860 阅读 · 0 评论 -
记一次线上OOM问题分析与解决
一、问题情况最近用户反映系统响应越来越慢,而且不是偶发性的慢。根据后台日志,可以看到系统已经有oom现象。根据jdk自带的jconsole工具,可以监视到系统处于堵塞时期。cup占满,活动线程数持续增加,堆内存接近峰值。二、分析情况使用jconsole分析:找到jdk安装路径,点击bin目录下的jconsole.exe,运行。当时线上情况是堆内存使用量7个G左...原创 2020-01-03 13:30:24 · 2944 阅读 · 2 评论 -
Eclipse安装Mat工具分析教程
一、关于MatMAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。可以再官网http://www.eclipse.org/mat/下载,或者直接在Eclipse里下载。二、Eclipse安装MatEclipse首页 点击help>Eclipse ...原创 2020-01-03 11:58:28 · 2605 阅读 · 0 评论 -
理解JAVA内存模型
一、关于JAVA内存模型JAVA内存模型是java基础,每个开发人员都需要有一定的了解,只有更好更多的了解底层的东西,才能促进自己更好的进步。本文记录的是JDK1.8之前的内存模型。在java中,主要将内存分为以下几块:(1)堆(Heap)是内存区域中最大的一块,被所有线程共享,用来存放new出来的实例对象。(2)栈 (Stack)分为Java虚拟机栈和本地方法栈。Ja...原创 2019-12-30 14:17:40 · 1616 阅读 · 2 评论 -
学会使用BeanUtils,提高你的开发效率
一、关于BeanUtils一说到BeanUtils,大家可能不清楚指的哪个BeanUtils。因为它在很多包里面都有,其中挺常用的就是(1)org.apache.commons.beanutils.BeanUtils(2)org.springframework.beans.BeanUtils这两者有什么区别呢?(1)类的性质不同apache:springframew...原创 2019-12-26 12:24:09 · 1916 阅读 · 0 评论 -
一篇文章教你快速上手接口管理工具swagger
一、关于swagger1、什么是swagger?swagger是spring fox的一套产品,可以作为后端开发者测试接口的工具,也可以作为前端取数据的接口文档。2、为什么使用?相比于传统的接口文档书写,开发者可以以更高的效率来进行接口测试与开发。而且使得更具可读性。3、怎样配置?引入依赖<dependency> <group...原创 2019-12-25 15:49:16 · 2246 阅读 · 2 评论 -
入门alibaba的EasyExcel
一、关于EasyExcel1、什么是EasyExcel,有什么作用? EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。2、为什么选择EasyExcel,而不是Apache poi或者jxl? Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题...原创 2019-12-23 16:38:07 · 5649 阅读 · 2 评论 -
关于给Tomcat设置maxPostSize的问题
一、为什么要设置maxPostSizetomcat容器对传输数据的大小有限制,如果上传了超过此值的文件,就会报错,使得程序不能正常使用。二、设置方法找到tomcat目录下的/conf/server.xml,为其添加maxPostSize参数参数值“-1”表示不做大小限制。不设置maxPostSize参数意为使用默认的大小,默认2097152bytes,即为2megabytes。...原创 2019-12-04 09:29:50 · 6934 阅读 · 0 评论 -
windows下安装使用jenkins实现自动化构建与部署war包
一、jenkins安装jenkins官方下载路径:https://jenkins.io/zh/本例版本:jenkins-2.190.3,windows版选择长期支持版本下载,版本按需所取。安装时按照安装向导执行。二、初次使用1、jenkins默认8080端口,若端口冲突,可在根目录下的jenkins.xml修改启动端口2、修改之后记得在服务管理里重启jenkins服...原创 2019-12-03 15:24:06 · 3189 阅读 · 9 评论 -
Tomcat +Nginx+Redis实现session共享
一、准备工作中间件:Tomcat、Redis、Nginxjar包:commons-pool2-2.4.2.jar、jedis-2.8.0.jar、tomcat-redis-session-manager-2.0.0.jar二、配置Tomcat多台Tomacat需要配置不同的端口号/lib将jar包存放到此位置/conf/server.xml/conf/...原创 2019-11-28 16:35:24 · 1285 阅读 · 0 评论