- 博客(48)
- 收藏
- 关注

原创 JAVA并发基础, 从源码分析清楚AbstractQueuedSynchronizer
在日常开发的过程中,java.util.concurrent(J.U.C)是我们在并发编程中用的最多的,如果我们想熟练的掌握JAVA并发基础,少不了需要了解 AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是 Java 并发包的基础工具类,是实现 ReentrantLock、CountDownLatch、Semaphore、FutureTask 等类的基础。当然这篇文章是我自己对AQS的理解,有错误之处,请评论区留言交流。AbstractQueuedSy..
2020-05-23 19:44:23
919
1

原创 SpringMVC请求流程原理深入理解(SpringMVC面试必备技能)
前言SpringMVC请求流程是在面试中经常被问到的一个问题,这个流程大家百度以下随便看一看都能把整个过程回答出来:第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置、注解进行查找) 第三步:处理器映射器HandlerMapping向前端控制器返回Handler,Handle...
2019-01-06 17:52:47
2341
2

原创 深入理解@Autowired注解以及Spring加载Bean的机制
@Autowired注解在平时开发中用的非常的多,即自动装配,这些天碰到了一个与之相关的报错,所以打算深入理解其原理。首先看看它的定义如下:这里提一下它上面有三个元注解:1、@Target表示这个注解是作用在什么上,方法上还是类上还是参数上等等。2、@Rentention 可以理解为这个注解的生命周期,RententionPolicy.SOURCE、RententionPolicy....
2018-12-14 23:21:07
19506
8

转载 最详细的Spring核心IOC的源码分析(每次看都有不同的感悟)
原文转自 : https://javadoop.com/post/spring-iocSpring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和...
2018-07-23 19:07:53
171352
83
原创 Docker学习记录
Docker简介Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker为什么会出现在孵化一个新的产品的时候,我们至少要部署两套环境,即测试环境和生产环境。比如我们的系统中引入了诸如Redis、ElasticSearch、RocketMQ等中间件技术,我们的工作可能不仅仅是开发代码逻辑。可能还需要搭建这些组件需
2021-05-21 22:01:25
505
转载 Spring自定义扩展标签NamespaceHandler
Spring自定义扩展NamespaceHandler–自定义标签在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙。一般的做法会用原生态的方式去解析定义好的xml文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐, 特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。Spring提供了可扩展Schema的支持,这是一个不错的折中方案,完成一个自定义 配置一般需要
2021-04-13 20:38:21
378
原创 Closeable接口优雅方便的自动关闭资源
Closeable接口继承于AutoCloseable,主要的作用就是自动的关闭资源,其中close()方法是关闭流并且释放与其相关的任何方法,如果流已被关闭,那么调用此方法没有效果,像InputStream和OutputStream类都实现了该接口,源码如下/* * Copyright (c) 2003, 2013, Oracle and/or its affiliates...
2020-05-05 11:13:52
6209
原创 JAVA探寻IF-ELSE的优化
一般在做逻辑判断的时候我们一般难免会x写出以下的代码if (type == "A") { System.out.println("A output"); } else if (type == "B") { System.out.println("B output"); } else if (type == "C") { ...
2020-02-28 23:58:28
382
5
原创 Redis的总结思考以及一些常用的解决方案
目录一、为什么要用缓存?用了缓存之后会有什么不良后果?二、Redis的数据类型有哪几种stringhashlistsetsorted set三、Redis的过期策略都有哪些内存淘汰机制手写一个 LRU 算法四、关于Redis的持久化若在项目中使用了Redis作缓存,就必须考虑持久化这是保证可靠性,redis 持久化的两种方式RDB ...
2020-02-04 22:46:51
571
原创 同事的问题引发的对线程Thread的思考(理解线程的wait)
同事贴出来的代码问题1 : 我已经让这个线程wait()了,没有地方唤醒它,怎么也执行了啊public class MyThread extends Thread{ /** * @param args */ public static void main(String[] args) { System.out.println(T...
2019-11-11 22:13:13
344
原创 Layui数据表格显示无数据提示问题
正确与错误展示解决方案: 直接在done中加入 done : function(res, curr, count) { 你的逻辑 if (res.count == 0) { ...
2019-05-11 13:52:10
5979
1
原创 深入Netty 一、关于JAVA的老IO(OIO) 与 新IO(NIO)的区别
最近想做一个开源的IM组件,在IO的选型上必定要选择NIO,于是翻了翻资料总结了一下传统IO与NIO的一些区别,从而了解IM系统为什么一定需要用到NIO.下面是对NIO的一些简单的介绍NIO弥补了原来同步阻塞I/O的不足,它在标准Java代码中提供了高速的、面向块的I/O。Java NIO 由以下几个核心部分组成:ChannelBufferSelector传...
2019-04-21 22:05:22
1201
原创 SpringCloud 整合Eureka、Ribbon、Feign、Hystrix
整合一:EurekaServer(单机版,可自己集群)用的是Maven,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-instan...
2019-04-14 21:52:48
448
原创 SpringBoot引入Eureka时导致数据返回格式是XML解决方法
当我们引入Eureka的时候,项目的数据返回从Json变为了Xml,像下面这种<User><userName>lee</userName><age>11</age><mobile>8090</mobile></User>导致这个结果的根因是SpringBoot项目中集成了Eureka...
2019-04-14 19:23:13
1023
1
原创 如何Linux后台运行 jar 文件
一般集成SpringCloud的项目都会打成一个jar包在服务器上运行,最简单的做法是mvn clean package 打包之后再 java -jar demo1-1.0.1-SNAPSHOT.jar 运行这样有一个问题就是我们的XShell 或 ssh 窗口关闭了程序就停止了后台运行的方法就是用到一个nohup命令$ nohup java -jar xxx...
2019-04-11 11:12:56
263
原创 Git用法详解以及Git项目中能用到的命令
GIT(分布式版本控制系统)Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。简单入门创建版本库Repository与第一次提交文件介绍一下什么是版本库呢?版本库又名仓库,英文名repository,你可以简单...
2019-03-12 15:51:37
251
原创 SpringMVC源码分析(四)——————SpingMVC处理Http请求原理
四、SpingMVC处理Http请求原理当一个http请求过来了首先经过的是DispatcherServlet这么一个前端控制器并调用了这个前端控制器的doService方法。这个方法最终我们发现它调用了doDispatcher这么一个方法。这就是SpringMVC处理http请求的入口了。 protected void doService(HttpServletRequest re...
2019-01-12 16:34:31
608
原创 SpringMVC源码分析(三)——————HTTP请求是如何与对应Handler的对应method映射的
三、HTTP请求是如何与对应Handler的对应method映射的从上面的分析已经知道了当初始化完成的时候context中所有的handlerMapping都被加载了,并且它们都存放在hadlerMappings这么一个List中并且被排序了。我们看看HandlerMapping的设计及类的结构关系如下:这里可以看到顶层的父接口就是HandlerMapping,进入这个类发现这个顶层接...
2019-01-12 16:33:30
858
原创 SpringMVC源码分析(二)—————DispatcherServlet初始化流程
二、接下来分析一下DispatcherServlet这个前端控制器的启动和初始化的整个过程通过前面分析已经知道了DispatcherServlet这个前端控制器是一个Servlet了,所以生命周期和普通的Servlet是差不多的,在一个Servlet初始化的时候都会调用该Servlet的init()方法。下面这个是DispatcherSerlvet父类HttpServletBean中的init...
2019-01-12 16:32:35
906
原创 SpringMVC源码分析(一)——————详解DispatcherServlet
一、对照这流程的第一步发起请求到前端控制器DispatcherServlet,首先看看DispatcherServlet这个类,为什么所有的请求能发给这个类,看下这个类的结构图:这里我们发现了这个DispatcherServlet通过继承FrameWorkServlet、HttpServletBean从而间接的继承了HttpServlet,所以说这个DispatcherServlet也是一...
2019-01-12 16:31:31
587
原创 关于SpringBoot报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedded
SpringBoot集成Mybatis等可能会报错如下:***************************APPLICATION FAILED TO START***************************Description:Failed to configure a DataSource: 'url' attribute is not specified a...
2018-12-01 22:17:40
149500
30
原创 加载新页面等待过渡效果
由于数据量庞大后台查数据的操作的时候慢从而导致页面加载速度过慢,所以会到用loading效果来过渡,让用户感觉上不是很慢。下面是效果图 这里使用的是layer组件进行的快速实现,layer的CDN各个地址:https://www.bootcdn.cn/layer/实现步骤:引入layer.js,如果追求极致性能的可以把js下载下来,引用本地的文件<script sr...
2018-11-25 19:06:38
2139
原创 利用JQuery动态生成html元素
JQuery动态操作htmlAPI介绍JQuery官方文档中动态对html添加元素有如下四个方法:append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容具体是什么效果可以自己去试一试,链接如下:http://www.w3school.com.cn...
2018-11-22 22:54:58
485
原创 如何将toastr提示框居中
使用原生的toastr提示框提示语默认会出现在右上角现在想要居中,百度了以下提示框的属性发现有一个控制的属性positionClass toastr.options = { "closeButton": false, //是否显示关闭按钮 "debug": false, //是否使用debug模式 "p...
2018-11-18 22:35:16
5998
1
原创 闲聊 “synchronized” 关键字
Synchronized使线程安全线程安全与非线程安全是使用多线程的时候都会遇到的经典的问题。我所理解的“非线程安全”也就是多个线程同时访问同一对象中的实例变量所产生一些脏读的现象。而线程安全就是以获得的实例变量的值都是经过同步处理的,从而不会产生脏读的现象。其中使结果线程安全的最简单的方法就是加上一个重量级的锁,用synchronized关键字进行修饰。以下这种情况将会出现非线程安全的情...
2018-11-05 23:06:29
309
原创 闲聊Thread类
一、Thread中”run()“与start()的区别,多不多说直接上代码package com.huawei.bes.demo;import com.sun.org.apache.xpath.internal.SourceTree;/** * Created by lenovo12 on 2018/11/3. */public class ThreadTT extends T...
2018-11-03 14:41:35
192
原创 SpringAOP深入了解之jdk动态代理与CGlib
目录理解AOPSpringAOP中的一些术语实现方式之JDK的动态代理实现方式之CGlib动态代理 JDK动态代理与CGlib代理的区别理解AOP一般我们编写程序的思想是纵向的,也就是一个方法代码从该方法第一行开始往下一步一步走,直到走完最后一行代码。也就是说很多业务都需要的比如用户鉴权,资源释放等我们都要在每个方法里面重复再去调用,如下所示:public voi...
2018-10-24 21:11:30
725
原创 IDEA如何配置Tomcat运行Web项目
第一步:在IDEA的settings( Ctrl + Alt + S )搜索“server”选项中配置Tomcat。根据你本地下载配置好的Tomcat路径来第二步:1:在Project Structure (Ctrl + Alt + Shift + S)中Modules点击绿色+图标导入项目模块 ,New Module2:一般都是maven项目,然后一路next,创建模块“tt...
2018-10-21 15:06:41
469
原创 设计模式之单例模式
什么是单例模式?单例模式是常用的设计模式,在我们的系统乃至在框架中都普遍被用到,单例模式就是使一个类有且只有一个实例用于外部访问,这样大大的节省了系统的资源,而单例模式需要注意的也就以下三点:保证这个类有且只有一个实例 自行创建这个实例 提供这个实例供外部访问代码实现需要注意的就是单例模式的类构造方法私有化 这个类的定义中包含自己的一个静态实例对象 提供一个共有静态方法供外部...
2018-10-16 21:38:04
197
1
原创 Redis缓存设计之缓存穿透、缓存雪崩
使用缓存的优缺点:优点:提高系统响应速度,加速读写,Redis将数全都存放在内存中,响应速度更快。 降低了后台的负载,减少了对后端的直接访问缺点:数据一致性问题,缓存层的数据与存储层的数据可能存在不一致的问题 维护复杂度高了,加入缓存后要同时处理缓存曾和持久层的代码逻辑缓存穿透问题缓存穿透就是指查询一个根本不存在的数据,导致很多请求直接穿过了缓存层直接到了持久层,,导致后端...
2018-10-14 19:20:24
434
原创 深入理解Redis哨兵搭建及原理
一、什么是Redis Sentinel,为什么我们需要使用Redis Sentinel谈Redis Sentinel之前,再回顾一下Redis的主从复制。在主从复制模式下我们可以将主节点的改变的数据同步给从节点,这样从节点可以用作主节点数据的一个备份,在主节点故障宕机的情况下,从节点可以当作备用机顶上来。并且在一主多从的拓扑结构中,从节点能拓展主节点的读的能力,读写分离,在并发量很大的时候从节...
2018-09-24 23:23:56
3537
原创 深入理解Redis的主从复制
前言主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。这样从节点就可以起到两个作用,第一就是当作主节点的数据备份,当主节点出现故障的时候从节点可以当作备用机器,并且保证数据没有丢失。第二就是从节点可以分担主节点大部分“读”这个操作的流量。一、Redis如何建立主从复制关系在Redis中我们的实例可以划分为主...
2018-09-16 14:32:38
343
原创 Redis的两种持久化方式及使用场景分析
Redis提供的持久化机制,以及好处:Redis提供 RDB 和 AOF 两种持久化机制 , 有了持久化机制我们基本上就可以避免进程异常退出时所造成的数据丢失的问题了,Redis能在下一次重启的时候利用之间产生的持久化文件实现数据恢复。一、持久化机制之RDB我们所谓的RDB持久化就是指的讲当前进程的数据生成快照存入到磁盘中,触发RDB机制又分为手动触发与自动触发1.手动触发RDB...
2018-09-09 17:29:32
5125
原创 JAVA在线预览功能之多线程优化版本-----多进程、逻辑优化、并发问题处理
优化版本在线预览Demo:https://pan.baidu.com/s/1jpOjmiTsilgThBmOKNRuoQ一、上一个实现在线预览功能的想法与网上大多数在线预览功能一样1)思路:1.利用 OpenOffice 以及 jodconverter 转换各种office文件为pdf格式2.设置response的contentType为application/pdf,直接用IO将...
2018-09-02 23:26:31
3084
5
原创 Redis命令大全
字符串 string 命令:set key value get key del key mset key value [key value...] --批量设置键值mget key [key...] --批量获取键值incr key decr keyincrby key increment decrby key decrementincrbyfloat key inc...
2018-09-01 00:17:33
948
原创 Redis字符串常用命令以及应用场景
一、Redis字符串类型常用命令(1)设置一个值:命令格式:set key value [ex seconds] [px milliseconds] [nx | xx]中括号内的表示可选项可选项 ex seconds 表示 设置这个值的同时设置一个失效时间单位为秒可选项 px milliseconds 表示设置这个值的同时设置一个失效时间单位为毫秒可选项 nx 表示...
2018-08-27 21:55:05
1406
原创 关于JAVA实现在线预览功能总结
SpringBoot写了一个小Demo,百度网盘地址:https://pan.baidu.com/s/1dS9M89GLR4AIVwJx4aMglg一、写在线预览功能之前的准备:1.安装openOffice软件,下载地址:http://www.openoffice.org/download/index.html2.jdconverter 的jar包 pom依赖如下<dep...
2018-08-19 19:06:05
20606
21
原创 Redis全局命令
一、全局命令 1. keys * ————查询所有键 2.dbsize————键总数 3. exists key————查看键是否存在 (如果结果为1表示存在,为0表示不存在) 4. del key ————删除键(返回的结果为删除的个数,若删除一个不存在的键那么返回就为0,还可以删除多个键) 5. expire key se...
2018-08-12 16:31:54
1531
原创 Redis安装启动(Windwos与Linux版本)
1.Redis安装与启动(Window与Linux) 1.1Redis下载 Linux版官方下载:http://download.redis.io/releases/redis-4.0.11.tar.gz 我的百度网盘地址:https://pan.baidu.com/s/1dnbJZxgmiIWr3Zk6yqF3t...
2018-08-12 14:16:23
326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人