- 博客(55)
- 资源 (3)
- 收藏
- 关注
原创 Spring自定义标签
在日常开发中,我们经常使用Spring、Dubbo、Mybatis等框架的标签来配置我们的应用。那么这些第三方的框架如何被Spring解析到的?本文将实现一个自定义标签的案例。学习来Spring自定义标签之后,我们也能自定义标签,在阅读其他框架集成Spring框架的时候也能知道其原理首先我们看看Spring源代码中spring-context包通过查看spring-context源代码可以看到代码中定义来大量的dtd和xsd文件。主要是用来约束我们的XML的规范,spring.handler.
2020-12-14 16:09:10
424
原创 利用Spring和SpringBoot理念减少if else
1.项目中注入SpringBeanUtilsspringBoot理念就是约定大于配置,其实经常写代码我们经常看到if else代码,今天介绍一种约定大于配置的方法减少if else。public class SpringBeanContextUtil implements ApplicationContextAware{ /** */ private static ApplicationContext applicationContext; @Override
2020-06-25 00:51:36
615
原创 Spring RestTemplate返回Body为空
Spring RestTemplate返回的getBody为null问题Spring RestTemplate请求返回的body内容为nullSpring RestTemplate请求返回的body内容为null1.最近在项目中遇到一个问题就是,我准备用Spring中自带的工具进行请求的对方接口的时候。在测试环境没有任何问题,但是在调用对方的登陆接口的时候,对方接口返回了json数据,但是我通...
2019-01-19 23:08:02
15899
7
原创 Java并发编程-重入锁
重入锁 重入是是对synchronized的一个增强版本,因为synchronized是阻塞的。很容易导致死锁。重入锁在我们日常使用中比较灵活,能够很好的控制,性能比较synchronized好。 重入锁使用java.util.concurrent.locks.ReentrantLock类来实现。其中里面的方法有如下:lock():获取锁,如果无法获取锁,一直尝试获取锁lockInt...
2018-03-28 15:18:27
466
转载 Java内存模型
1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。2.硬件的效率与一致性 由于计算...
2018-03-26 14:11:46
263
原创 IDEA神器操作
IDEA快捷键在很多博客都能搜索得到,今天记录一下快键键对应的英文以及idea一些常用的操作,由于自己经常工作在windows和mac操作切换,很多的快捷键都不相同,有时候想用快捷键操作但是又不知道设置的选项。这里我将自己常用的操作列举出来以便在window和mac下面快速设置为自己的快捷键1.常用快捷键操作Forward 返回上一个浏览地方(浏览源代码很有好处)Bac
2018-02-06 23:10:50
780
转载 curl进行REST服务请求
cURL介绍cURL 是很方便的Rest客戶端,可以很方便的完成许多Rest API测试的需求,甚至,如果是需要先登入或认证的rest api,也可以進行测试,利用curl指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改變 HTTP header來滿足使用REST API需要的特定條件。 curl的参数很多,這邊僅列出目前测试REST时常用到的:-X/--reque
2017-11-10 14:49:44
8520
转载 MySQL-brew 安装 配置 操作 mysql(中文问题)
mac 下卸载mysqldmgmac下mysql的DMG格式安装内有安装文件,却没有卸载文件……很郁闷的事。 网上搜了一下,发现给的方法原来得手动去删。 很多文章记述要删的文件不完整,后来在stackoverflow这里发现了一个遗漏的地方,所以将完整版记述在这里,以供查阅。 先停止所有mysql有关进程。sudo rm /usr/local/mysql sudo rm -rf /usr/l
2017-10-15 15:21:55
653
原创 JVM类加载过程实例分析
代码1public class T { public static void main(String[] args) { System.out.println(Single.counter1); System.out.println(Single.counter2); }}class Single{ public static int co
2017-09-30 11:51:50
380
原创 JVM之类加载过程(二)
上篇介绍了类的加载过程第一个阶段,加载阶段。下面将对后面几个阶段一 一分析。验证阶段验证阶段主要验证下几点: 1. 类文件结构的检查 2. 语义的检查 3. 字节码的验证 4. 二进制兼容性的验证 类文件结构的检查:确保类文件遵循Java类文件的格式规范,不能是 语义的检查:确保类本身符合java语言的语法固定, 比如验证final类型的类是否有子类,以及final类型的方法没有
2017-09-29 15:45:46
340
原创 JVM之类加载过程(一)
1.Java编译在java开发中,我们写的.java文件经过编译之后得到.class文件,在编译阶段,编译器会对类型、格式检查与编译成字节码文件.2.类的加载器我们写的.java文件经过编译之后得到.class文件,然后这个文件通过JVM的虚拟机加载的到内存中,并形成一个class对象,这个称之为类的加载过程,负责将.class字节码文件加载到内存的工具称之为类加载器。3.Java虚拟机和程序的生命
2017-09-28 13:45:40
1277
原创 requirejs基础
requirejs基础随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,有时候js文件过多会导致加载慢等一系列的问题。常用的方法:requirejs.config requirejs definerequirejs.config requirejs.config主要是指定模块的别名,这里jquery-
2017-09-19 21:21:25
541
原创 wait, notify 和 notifyAll区别
作用java使用wait(),notify(),notifyAll()来进行线程之间的通讯共同点:都是Java Object对象里面的方法: wait()方法:如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。 notify()方法:如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。 notifyAll()方法:如果对
2017-09-13 14:57:08
1356
原创 Collections和Collection
Collections和Collection的区别:Collection是一个接口,它是Set、List等容器的父接口;Collections是个一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。 Collection接口下面还有List Set等,注意没有Map集合,Map的底层其实也是用类HashSet的存储结构。Collections的常见方法
2017-09-12 00:07:13
358
原创 多线程synchronized和synchronized static方法的区别
synchronized static和synchronized 关键字1.synchronized satic 方法,如果是一个方法加上static关键字和synchronized。static一定不属于任何对象,属于一个类。那么它锁的是当前类的对象的class对象。因为Java中无论一个类有多少个对象,这些对象会对应唯一一个Class对象,因为当前线程分别访问了同一个类的两个对象的static,
2017-09-10 23:36:59
3559
原创 多线程同步机制2-深入理解synchronized关键字
上一节讲了关键字synchronized的基本用法。这一节我将对用一个实际的例子来深入多线程同步机制。存取款改造/** * Created by qianyi on 2017/9/9. */public class FetchOperationMoney { public static void main(String[] args) { Bank bank = ne
2017-09-09 01:31:40
374
原创 多线程同步机制
为什么要引入同步机制在多线程环境中,可能会出现两个甚至更多的线程试图同时访问同一个资源。必须对这种潜在的资源冲突进行预防。解决方法在线程使用一个资源时为其加入锁机制。访问资源的第一个线程对其加上锁之后,其他线程便不能再使用那个资源,除非被解锁。例子比如银行取钱的例子: 首先有一个银行账户:/** * 银行账户类,里面的余额为1000 */class Bank { private in
2017-09-08 23:36:17
1908
原创 逻辑思维1
140g盐,一天平,7g 、2g砝码各一个,如何只利用这些东西3次把盐分成50g和90g? 这两天朋友去面试遇到的一个题,解法如下:第一种解法:1.用7g+2g的砝码称出9g盐,140g-9g=131g 2.用7g+2g砝码把131g盐分成两部分61g,70g (61+2+7=70) 3.用2g砝码和9g盐把61g盐分成50g和11g两部分(61-9-2=11,11+50=61).11g+9g
2017-09-07 22:13:09
770
原创 常见的加密算法介绍
数据加密目前仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密,实现信息隐蔽,从而起到保护信息的安全的作用。常见的加密算法常见的加密算法有SHA、MD5、DES、3DES、RC4、RSA、AES等,下面将对这几个常见的算法分类加密的算法: SHA MD5 既能加密又能解密的算法: DES、3DES、RC4、AES、RSA对称加密和非对称加密算法对称加密:即加
2017-09-07 21:40:34
2940
原创 多线程--基础概念
最近时间多,准备对多线程的一些知识进行温故,让自己有进一步的提升多线程编程的一些基础概念什么是进程和线程?两者的区别是什么?1.进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位),比如window任务窗口中的.exe运行程序。 2.线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线
2017-09-06 11:49:45
308
原创 多线程-局部变量和成员变量
Java多线程对成员变量和局部变量的影响最近复习了一下Java多线程的一些基础的础知识,这里演示一个java多线程对成员变量和局部变量的Demo对局部变量的操作:/** * Java局部变量和成员变量代码演示 */public class TTTTTT { public static void main(String[] args) { DemoThread
2017-09-06 11:14:00
9022
2
转载 设计模式2-工厂模式
工厂模式分为简单工厂模式、工厂方法模式、抽象工厂模式。下面将依次介绍各个工厂模式1.简单工厂模式 首先说说简单工厂模式,我用现实中的汽车工厂举例子,首先有个汽车类的接口叫做Car,里面有个开车的方法叫做drive(),然后有个吉利车的类叫做Jili,实现了car的接口,还有个奇瑞车的类叫做Qirui,也实现了Car的接口(因为都是车嘛,当然能开了)。 interface Car{
2017-09-03 15:43:11
277
原创 DecimalFormat用法
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。DecimalFormat 包含一个模式 和一组符号 符号含义: 0 一个数字 # 一个数字,不包括 0 . 小数的分隔符的占位符 , 分组分隔符的占位符 ; 分隔格式。 - 缺省负数前缀。 % 乘以 100 和作为百分比显示 ? 乘以 1000 和作为
2017-08-20 02:07:49
1071
原创 设计模式1-策略模式1
策略模式的定义策略模式是一种行为模式,目的就是将我们的行为策略进行分离,提供可供选择的不同的策略。让我们在客户端用使他们可以相互替换、相互调用而不受其他影响。策略模式的好处策略模式的好处就是使我们开发人员能够设计出许多可以替换的组件,在不同的场景下面可以使用不同的组件。让客户端拥有不同的变化行为。 下面我们将用一个例子来改造设计模式,这里假定动物这个抽象类继承实现/** * 抽象动物超类 *
2017-08-20 00:31:22
293
原创 ssh登陆Linux
常用格式:ssh [-l login_name] [-p port] [user@]hostname例子: 不指定用户: ssh 23.23.187.23 指定用户名(2种方式): ssh -l root 23.23.187.23 指定用户名 ssh root@23.23.187.23 指定用户名登陆 指定端口: ssh -p 9090 23.23.187.23 指定端口号 ssh
2017-08-16 20:32:26
319
转载 spring StopWatch 监控请求执行时间
在filter中用spring stopWatch 来统计每个请求的执行时间;虽然在firefox 中可以清楚的看到每个请求的执行时间,但是为了测试,记录日志, 方便以后查询维护。 还是必要的,下面进入正题:在filter 的doFilter中加入如下代码[java] view plain copyprint?StopWatch stopWa
2017-08-15 23:49:34
3936
转载 Java集合之ArrayList源码分析
阅读目录一、ArrayList简介二、ArrayList源码分析三、ArrayList遍历方式回到顶部一、ArrayList简介 ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类。 该类封装了一个动态再分配的Object[]数组,每一个类对象都有一个capacity属性,表示它们所封装的Object[]数组的长度,当向ArrayList
2017-08-13 22:58:29
307
转载 Java集合之LinkedList源码分析
阅读目录一、LinkedList简介二、LinkedList源码分析三、关于LinkedList的几点说明回到顶部一、LinkedList简介 LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的。 ps:这里有一个问题,就是关于实现LinkedList的数据结构是否为循环的双向链表,上网搜了有很多文章都
2017-08-13 22:57:19
272
转载 Java集合之HashMap源码分析
阅读目录一、HashMap简介二、hashMap源码分析三、HashMap的应用示例代码四、HashMap总结回到顶部一、HashMap简介 HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对映射。此类不保证映射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作(get和put)提供稳定的性能。 ps:本文中的源码来自jd
2017-08-13 22:55:50
260
转载 Java集合之HashSet源码分析
阅读目录一、HashSet简介二、HashSet源码分析三、HashSet的应用示例代码回到顶部一、HashSet简介 HashSet是Set接口典型实现,它按照Hash算法来存储集合中的元素,具有很好的存取和查找性能。主要具有以下特点:不保证set的迭代顺序HashSet不是同步的,如果多个线程同时访问一个HashSet,要通过代码来保证其同步集合元
2017-08-13 22:55:09
369
转载 Java集合之TreeMap源码分析
阅读目录一、概述二、TreeMap源码分析三、TreeMap应用示例代码回到顶部一、概述 TreeMap是基于红黑树实现的。由于TreeMap实现了java.util.sortMap接口,集合中的映射关系是具有一定顺序的,该映射根据其键的自然顺序进行排序或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。另外TreeMap中不允许键
2017-08-13 22:53:25
258
转载 Java集合之TreeSet
阅读目录一、概述二、TreeSet使用示例回到顶部一、概述 1、TreeSet(树集)是一个有序集合,可以按照任何顺序将元素插入该集合,当对该集合进行迭代时,各个值将自动以排序后的顺序出现。TreeSet中的元素按照升序排列,缺省是按照自然顺序进行排序,意味着TreeSet中的元素要实现Comparable接口,或者有一个自定义的比较器Comparator。
2017-08-13 22:50:41
225
原创 SpringBoot切换数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。数据库连接池有哪些? DBCP(DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过
2017-08-12 03:28:10
9797
原创 SpringMvc是单例还是多例?
最近面试的时候有面试官问我spring的controller是单例还是多例?结果面试不知道,一只以为是多例模式,每次请求的时候都会创建一个对象。答案:Springmvc默认是单例模式看看spring的Scope有哪些? 这里写代码片spring bean作用域有以下5个:1.singleton:单例模式,当spring创建applicationContext容器的时候,spring会
2017-08-12 02:05:26
30966
9
转载 Spring中的Scope
spring Framework支持五种作用域(其中有三种只能用在基于web的SpringApplicationContext)。singleton在每个Spring IoC容器中一个bean定义对应一个对象实例。prototype一个bean定义对应多个对象实例。request
2017-08-11 18:10:26
413
转载 MySQL详解--锁机制
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL
2017-08-06 16:23:04
249
原创 SpringBoot-ErrorController
Springboot默认的错误处理SpringBoot源代码中有这样一个ErrorController,针对SpringMvc错误的Mapping进行处理,很多的时候我们写了一个Controller,在浏览器上访问的时候经常会出现如下情况:Whitelabel Error PageThis application has no explicit mapping for /error, so you
2017-08-04 18:17:49
23613
1
原创 ApplicationListener事件之EmbeddedServletContainerInitializedEvent之介绍
ApplicationListener事件 有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,applicationListener在使用过程中可以监听某一事件的发生,可以做出相应的处理,这个方式不常用,但是在特殊情况下面还是有用的。通过查看源代码ApplicationEvent事件上面是Spring启动可能发布的一些
2017-08-04 17:10:20
4350
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人