自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (11)
  • 收藏
  • 关注

原创 重写RequestMapping

1、为什么要自定义在项目开发中,有一次一个需求涉及到修改几个方法,需要在这几个方法中添加自己的业务逻辑,这几个方法是标有@RequestMapping注解的方法,而且这几个方法在封装好的底层jar包中,那么如何修改呢?思路:1、首先想到的是通过重新在controller层自定义一个url,然后对底层的对应方法进行一个重写操作,这样是可以解决问题,但是如果这样修改,前端接入的url也要配合修改,这样就增加了一定工作量,当后续修改更多这样的底层url后,对接也会变得复杂,所以该方案可行,但是不够优雅;2、

2020-12-06 17:52:47 1726 3

原创 支持请求类型为application/x-www-form-urlencoded的对象参数注入

背景:入职新公司后,最近在工作中开发业务代码时,发现controller层中的方法参数不能是自定义的对象形式,只能是一个一个的单个属性方法,对象只能是PageRequest与 FallsPageRequest类型的对象,所以,如果方法入参需要添加新字段,就需要在controller层方法中添加字段,这个字段很可能service层也需要使用,那么也还要修改service层的接口与实现类,如果这个service接口有许多实现类,你都要一个一个在方法中增加新字段,这样其实改造复杂度较高;如果是一个rpc的.

2021-09-19 10:10:17 2975 2

原创 传统tomcat启动服务与springboot启动内置tomcat服务的区别

spring整合springmvcspring整合springmvc中web.xml配置如下,tomcat在启动过程中会加载web.xml中的内容,ContextLoaderListener实现了tomcat里面的ServletContextListener接口,所以在tomcat容器启动过程通过ContextLoaderListener来进行spring容器的初始化操作,并将classpath:spring/applicationContext-*.xml指定下的spring配置文件加载,该配置文件

2021-05-04 19:41:47 2523 13

原创 阿里云centenos7.6版本安装JDK\mysql\redis\nginx\RabbitMQ合集

以下安装均使用的是阿里云centenos7.6版本1、安装JDK1、查看可安装的jdk版本yum -y list Java*2、安装yum install -y java-1.8.0-openjdk-devel.x86_643、查看版本java -version4、切换到安装目录cd /usr/lib/jvmJAVA_HOME指向一个含有java可执行程序的目录(一般是在 bin/java中,此目录为/bin/java的上级目录),用cd 命令进入到 jvm下唯一的一个目录中 j

2021-03-18 10:49:10 589

原创 SpringBoot环境下junit单元测试速度优化

1、提高单元测试效率背景:在项目提测前,自己需要对代码逻辑进行验证,所以单元测试必不可少。但是现在的java项目几乎都是基于SpringBoot系列开发的,所以在进行单元测试时,执行一个测试类就要启动springboot项目,加载上下文数据,每次执行一次测试都要再重新加载上下文环境,这样就会很麻烦,浪费时间;在一次项目中,我们使用自己的技术框架进行开发,每次单元测试时都要初始化很多数据(例如根据数据模型建立表,加载依赖其它模块的类),这样导致每一次单元测试时都会花3-5分钟时间(MacOs 四核I

2021-03-14 10:36:40 8689 10

原创 mysql之limit查询优化

1、相关说明准备uc_user表,给字段created_at建立索引2、开始实验分别执行下面两条sqlselect * from uc_user ORDER BY created_at LIMIT 1000,10; // 代表取出1010条数据,然后只要最后10条select * from uc_user ORDER BY created_at LIMIT 100000,10; // 代表取出100010条数据,然后只要最后10条结果如下图:从上图看出查询时间差别很大,我给created_at

2020-12-20 19:33:49 779

原创 自定义ORM框架

什么是ORMORM:Object-Relation-Mapping,也就是对象关系映射,是一种程序设计思想,mybatis就是ORM的一种实现方式,简单来说就是将数据库中查询出的数据映射到对应的实体中。自定义ORM框架在jdbc编程中,我们获取到resultSet集后会遍历结果集中的数据,然后通过resultSet.getString(列数或者参数名称),resultSet.getLong(…)获取值,这样很不方便,因为每次获取到结果都需要自己遍历获取值,程序开发的时间和成本会增加很多,所以有没有一

2020-11-22 17:41:04 335

原创 手写springMVC(附源码)

1、springMVC简单介绍在手写springMVC前,需要大概了解下springMVC,springMVC其实是spring的一个子容器,可以专门用来处理web层的请求,而MVC则是model(模型)、view(视图)、controller(控制器)的简称,springMVC主要由以下几个部分组成:1、前端控制器 DispatcherServlet2、处理器映射 HandlerMapping3、视图解析器进行解析简单通过下图理解下,其实最重要的就是前端控制器,它负责是请求入口与出口的一道闸门,

2020-11-07 20:30:27 340

原创 servlet入门简单解析

servlet是什么servlet是一个运行在java服务端的轻量级的程序。servlet也是一个接口,定义了标准的服务,比如我们常用的服务器Tomcat就是实现了servlet的标准接口,这样Tomcat实现了这个标准就能够接收到request请求并响应,当然接收和响应一个请求其实就是进行socket的接收消息和响应消息。servlet生命周期servlet的生命周期其实围绕着servlet中定义的接口方法而呈现的,如下:1、servlet的初始化。这里会调用servlet接口中的init

2020-10-31 20:27:31 231 1

原创 项目中双重加锁与redis的配合使用

说明,在工作中遇到的一个类似于单例模式双重加锁与redis结合的应用,因此记录下来,但是最开始代码有些问题,之后我做了些改进1、synchronized加锁场景,根据商品id(itemId)去查找商品,先从缓存中获取,缓存中获取不到再从数据库中获取。最开始的伪代码如下,但存在一些问题:String key = String.format("item.detail.%s", itemId); // 从redis中获取数据-这里可能有多个线程同时从redis中获取数据 .

2020-07-19 16:14:26 589 2

原创 elasticsearch结合canal实战-问题搜索系统

你是否有这样的困惑?刚进一家公司后遇到各种bug,而这些bug很多和公司所使用的技术栈有关,有些问题你排查起来很难定位到具体错误原因,解决起来会很废时间,当然你可以咨询同事,但是他们也不一定有空,也可能不知道,于是在接触es与canal后我想写这样的一个简单的问题搜索系统,帮助你快速搜索到类似到问题,而不是在百度里面去大海捞针。系统还不是很完善,还有很多不足到地方,比如前端页面显示数据到问题,本人主要是后台开发,前端这部分还没有写,如果有感兴趣的小伙伴,欢迎加入,GitHub:https://git.

2020-07-12 18:04:11 758

原创 java读取zip文件内容读取不到数据问题记录

·# 需求:需要将zip文件里面的文件进行拷贝,将拷贝后的文件上传到对应的服务器遇到的问题,在读取zip文件里面的文件时,发现读取到的文件大小和实际文件大小不一致相关代码如下:public class ZipFileDemp { @SneakyThrows public static void main(String[] args) { File fileTemp = new File("/Users/zhuifengzheng/Downloads/fi

2020-06-27 18:17:44 1664

原创 java流stream的简单封装

stream的二次封装在工作中,经常有这样的需求:将一个集合转换成map、将一个集合过滤筛选等操作等。这些通过java8的流编程很容易实现,但是写多了就会发现这样一长串写下来很不爽,于是我对它进行了简单封装,比如我想要的结果是将一个list转换成map,map的key是list对象中的主键,那么我可以构造一个方法,传入list和map中key与value的函数,返回想要的结果,感觉这样更加清晰,就类使用黑盒,代码如下:public class DecorativeStreamUtil {

2020-06-06 20:17:15 1288

原创 Netty之bind源码分析

本文将对Netty服务端中的bind方法进行分析,该方法是Netty核心的实现,通过本文你将了解Netty是怎样接收请求和处理请求的。1.bind(…)方法之前的文章已经介绍过ServerBootstrap 和相关的方法,这里主要分析的是bind()方法ServerBootstrap bootstrap = new ServerBootstrap();# 绑定端口bootstrap.bind(9000).sync();这里开始分析主流程,bind()方法里面最后会调用doBind().

2020-05-30 20:37:14 436

原创 Netty之ServerBootstrap源码分析

本文是对Netty的服务端ServerBootstrap类的简单分析,以此来学习Netty源码的设计思想,通过本文你将了解Netty是如何创建启动类的,如有错误请指出,谢谢。ServerBootstrap启动1.构造启动类# 创建启动类ServerBootstrap bootstrap = new ServerBootstrap();2.注册基本信息# 1.group:将创建的bossGroup与workerGroup线程组添加到启动类中# 2.channel:设置创建消息事件传输的管道.

2020-05-10 21:14:57 294

原创 Netty之NioEventLoopGroup源码分析

本文是对Netty中NioEventLoopGroup的简单分析,该类是连接接入的入口,它负责新连接的接入与连接事件的处理,接下来我会从使用它的角度去分析该类的作用,通过本文你将了解到Netty是如何创建线程去处理连接的,如果文章中有错误希望能够指出,谢谢。NioEventLoopGroup之大管家我们在编写Netty服务的时候,首先会创建bossGroup与workerGroup,如下...

2020-04-19 14:53:06 424

原创 Netty深入学习总览

本文是对学到的netty知识的简单总结,在之后的文章中会逐步分析netty源码,如果文中存在错误希望能够指出,谢谢。Netty是什么学习netty之前,首先我们来了解下什么是netty。这里简单的来说就是基于NIO实现的高性能异步的通信框架。因为Netty是基于NIO的,所以为了更加清楚Netty里面的结构,我们回顾下NIO的线程模型,如下图:了解了NIO模型和什么是netty之后,...

2020-04-12 18:08:00 356

原创 Socket网络编程与BIO、NIO、AIO分析

本文会对比BIO、NIO、AIO的区别,会从计算机运行的角度去分析这些IO,通过此方式来加强自己对IO的理解,也希望和大家一起交流学习。宏观了解IO计算机由硬件和软件组成,硬件是软件运行的基础。接下来我会简单分析一下一个程序在计算机中是怎样运行的。这里以window系统为例,当我们双击一个应用,比如微信,之后电脑作了下面的操作。1.首先双击微信时候,操作系统会首先读取程序的标识信息【包...

2020-03-29 14:57:20 655

原创 宏观了解synchronized

本文主要是我自己对synchronized关键字的认识,从宏观角度了解它的作用。脑图如下脑图中数据synchronized(重量级锁) 1 出现的原因 1.1 保证多线程的安全性 2 工作原理 2.1 monitorEnter(加锁) 2.2 monitorExit(解锁) 2.3 通过操作系统底层的互斥锁加锁(mutex_lock) 3 锁的是对象(...

2020-03-20 19:15:28 119

原创 volatile关键字整理

本文是对volatile关键字整体的宏观认识,是总结性笔记,不会具体到代码和具体分析,只是从我的角度去看代这个关键字。1.volatile思维图:2.volatile文字版总结1.现代计算机工作原理 1.1 CPU从内存读取指令 1.2 CPU控制器解释指令 1.3 CPU运算指令后最后值写回内存 1.4 CPU组成 1.4.1 控制器 1.4.2 存储器 1.4....

2020-03-08 15:16:36 139

原创 zookeeper部署与构造分析

1.什么是zookeeper首先我们要知道zookeeper是什么,百度百科中说,zookeeper是用于分布式应用程序的协调服务。简单来说zookeeper是基于内存的数据库(底层是CocurrentHashMap),可以在分布式环境中协调服务的服务。zookeeper中最重要的基本结构是znode,也就是节点,节点中存储了路径和数据,每个节点都可以设置不同的权限,根节点的权限不会影响子节...

2020-03-03 17:58:34 182

原创 ScheduledThreadPoolExecutor(定时任务线程池)简单理解

本文主要介绍了可定时线程池的核心原理,从宏观角度大概分析了线程池工作方式,如有不足,请指出,谢谢。1.什么是线程池线程池顾名思义是一个线程缓存的‘池子’。线程是稀缺资源,线程如果创建的太多,会消耗系统的资源,还会降低系统的稳定性,所以java中通过线程池来统一管理分配线程这个稀缺的资源,达到资源重复利用。2.线程池的出现在web系统中,服务器需要接受大量的并发请求,一个请求就会对应一个...

2020-02-24 11:12:23 3938

原创 虚拟机克隆(centos7.6)

1.克隆虚拟机克隆虚拟机可以将虚拟机中所有的内容全部复制一份到你克隆的那台虚拟机,之后修改些配置就可以正常访问了。接下来会简单介绍如何克隆。使用的系统是centos7.6接下来记录一下具体步骤1.首先找到需要克隆的虚拟机,鼠标点击它2.找到菜单栏的虚拟机3.之后找到管理菜单4.点击克隆即可5.接下来按照提升就可以完成克隆,中间会修改存储路径和克隆虚拟机的名称2.修改克隆虚拟...

2020-02-24 11:09:25 461

原创 线程池(ThreadPoolExecutor)分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。1.什么是线程池线程池顾名思义是一个线程缓存的‘池子’。线程是稀缺资源,线程如果创建的太多,会消耗系统的资源,还会降低系统的稳定性,所以java中通过线程池来统一管理分配线程这个稀缺的资源,达到资源重复利用。2.线程池的出现在web系统中...

2020-02-16 19:24:31 447

原创 ReentrantLock实现原理分析

本文只对ReentrantLock中获取锁和释放锁的方法进行分析,其它方法不做分析。1. 加锁 lock方法分析ReentrantLock实现了Lock接口,Lock中定义了获取锁和释放锁的常用方法,ReentrantLock这个类实现了Lock中的方法,ReentrantLock中的锁分为公平锁和非公平锁,公平锁可以保障线程排队的顺序,非公平锁可以插队,那ReentrantLock类中...

2020-02-09 18:30:27 220

原创 AQS(AbstractQueuedSynchronizer)中获取与释放锁分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。AQS(AbstractQueuedSynchronizer)核心分析首先看一下类图:AbstractOwnableSynchronizer是个抽象类,以独占模式设置当前持有的线程。AbstractQueuedSynchronizer...

2020-01-25 21:29:21 346

原创 web网络基础

本文只是简单整理了点网络基础笔记,有错误的地方希望能够指出,谢谢。1.web及网络基础web是建立在http(HyperText Transfer Protocol,超文本传输)协议上通信的。互联网的出现就是为了实现资源共享,那么要让计算机之间进行通讯,需要遵守一些规范和约定。最开始的通讯只能通过磁盘等存储工具拷贝数据到另一太电脑,这样很不方便,于是出现了两台计算机通过线路传输进行通讯...

2020-01-19 20:13:56 289

原创 synchronized底层实现原理分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。1.线程安全问题的出现原因  之前说过,线程可以看作是轻量级进程,进程的上下文切换代价比较高,线程的上下文切换比较低,所以线程的出现提高了程序切换运行的时间。但是多线程的出现也引发了一些安全问题,比如:有可能会出现多个线程同时访问同一个共享、...

2020-01-12 16:39:36 260

原创 JAVA线程实现与状态简介

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。1.java多线程    首先我们来看一下什么是进程。进程其实可以看作一个可运行的程序,那么多个程序同时运行就是多进程(是操作系统分配资源的基本单位),一个进程可以包含多个线程(CPU调度的基本单位),比如微信就是一个程序(进程),微信里面可...

2020-01-12 16:35:38 201

原创 JAVA泛型分析

1.泛型简单分析声明:本文是我对泛型的一些理解,主要的是分析,而不是具体应用,所以讲的并不是面面俱到,具体的实现和用法可以参考具体的API文档。首先我们看一下下面这段代码var list = new Array();list.push(1);list.push("test")for(var m in list){ alert(list[m]+1);}上面的Jav...

2020-01-05 12:20:13 1151 2

原创 java内部类简单分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。内部类是什么内部类就是在类中的类,当然也可以写在方法中,称为局部内部类。那为什么需要内部类呢?内部类可以调用外部类的私有属性和私有方法。内部类使得开发更加可读,代码维护有针对性。内部类可以对同一包中的其他类隐藏起来。内部类可以解...

2020-01-05 12:15:17 626 8

原创 JAVA集合分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。1.集合Collection分析在开始说集合之前我们先看一下什么是变量,变量是由变量类型+变量名称组成,变量是用来保存信息的载体。那再看看集合,集合是由集合存储的类型+集合名称组成,简单来说就是存储一类数据的容器,在java中集合的父类是Co...

2019-12-29 23:22:08 729 3

原创 java基础-String类Intern()方法分析

说明:本文是我对自己学习知识的一个简单总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。1.==分析*Java中的对象默认都是Object类的子类,在Object中,equals方法与==都是比较地址(基本类型除外),下面看一段代码public class Hello { public static void main...

2019-12-22 11:29:32 799

原创 JAVA三大特性(封装、继承、与多态)分析

说明:本文是我对自己之前学到知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习。Java面向对象java是面向对象的一门语言,它符合人的思考方式,在java中万物皆对象。一般来说,一个程序的开发包括OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)三个方面。OOA主要分析一个对象的属性,方法等,OOD主要根...

2019-12-22 11:29:03 622

原创 TCP/IP协议总结

说明:本文是我对TCP/IP知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习。1.TCP/IP出现历史背景20世纪60年代,很多大学和研究机构开始着力于新通信技术,在70年代前半叶,ARPANET一个研究机构研发出了TCP/IP。有了TCP/IP,为了保障通信的可用性,制定了一些标准协议,记录在RFC中。2.TCP/IP...

2019-12-15 11:58:33 2469

原创 JVM内存模型与对象垃圾回收分析

1.JVMjvm(java虚拟机)是java程序运行的地方,它存放了java对象的信息。java程序能够一次编译到处运行就是因为有jvm的存在,它是与操作系统交互的桥梁。之前的C语言在编写程序分配内存时候,如果不及时释放内存,就很容易造成内存泄漏,而jvm有自己的一套内存回收机制,所以java程序员有更多的精力去编写程序,而不是去担心内存泄漏的问题。jvm结构图如下:这里简单说明:堆...

2019-12-07 14:06:34 415

原创 java对象生命周期分析

java对象生命周期分析说明:本文是我对自己之前学到知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习。通过字节码分析程序中对象是怎样加载运行的1.代码public class People{ public int age = 18; public People(){ this.age = ...

2019-12-07 13:57:17 245

原创 程序是怎样执行的

1.操作系统(Linux为例)说明:本文是我对自己之前学到知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。系统硬件组成如下:总线是贯穿整个系统的电子管道,用来在各个部件中传输数据。I/O(输入/输出)设备是系统与外部联系的通道。寄存器文件是由多个寄存器组成,用来存储数据的。2.程序怎样运行...

2019-12-01 10:38:36 1886

原创 java基础--HelloWorld是怎样运行的

1.Hello World 字节码分析说明:本文是我对自己之前学到知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习,谢谢。本文目标:通过输出hello world,分析java程序在计算机中运行的生命周期,了解程序怎样执行。2.程序代码如下:public class Hello { public static voi...

2019-12-01 10:22:04 2320 3

运筹学韩大卫第四版课件ppt

运筹学第四版韩大卫主编,ppt详解,例题,对考试或者学习运筹学有很大帮助。

2018-06-14

java自定义二维码带logo生成代码

在配置文件中简单的配置二维码的信息,即可生成带指定logo图片的二维码,二维码内容颜色自定义

2018-03-20

java swing 飞机大战

基于java swing 窗体的游戏开发,完整代码,有助于对swing的应用学习,附可执行的exe程序游戏

2017-12-26

旅游管理系统

原生servlet+jsp+mysql实现的地方旅游管理系统。页面数据从数据库中得到。相关公能:当地景点特色、小吃、酒店展示,当地旅游导游的显示,登录可预订酒店等。

2017-12-20

SourceTree破解+教程

SoucreTree破解教程和SourceTree中文软件,绝对可用,亲测有效

2017-12-14

文件创建 多叉树

从数据库将表中的的存在父子关系的树形结构读取,并创建文件夹到本地磁盘。

2017-11-05

自制ORM框架

ORM自制框架,支持从mysql数据库映射到javabean对象,省去了手动添加实体的时间,并有注释。

2017-11-05

文件上传与下载servlet

文件的上传,文件下载列表的展示,及下载文件

2017-08-14

mongodb教程

mongodb基础教程文档

2017-08-14

html5帮助手册

html5帮助文档

2017-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除