- 博客(68)
- 资源 (14)
- 收藏
- 关注
原创 springboot使用@Async实现异步调用的作用
前言: 相信大部分的Java程序猿之前所接触到的业务都是使用同步的方式来实现交互的,但是有时候可能接触到的业务不是同步的,需要异步实现。例如和第三方的系统进行交互的时候,我们可以采用多线程,消息队列的方式等等,其实如果业务不是很复杂的话,我们可以采用spring boot中的@Async注解来实现异步调用的效果,在spring 3.x之后,就已经内置了@Async注解,下面就详细讲解一下如何使用...
2018-12-03 13:54:27 665
原创 ArrayList和LinkedList的区别
引言:ArrayList和LinkedList都是实现了List接口的容器类,都可以用来用于存储一系列的对象引用。但是他们两者内部的结构却是完全不一致的,ArrayList的内部是基于数组的,而LinkedList的内部却是基于循环双向链表的。下面通过查看两者的源码,来理解内部的实现原理。1. ArrayList ArrayList 是一个数组构成的队列,相当于动态大小的数...
2018-09-10 17:40:31 304
原创 HTTP和HTTPS的区别
HTTP和HTTPS在表面上看仅有一个单词的区别,那么两者在背后到底有着什么样的区别和联系呢,下面一一解析。1. 什么是HTTP协议 HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,完成通信的功能。简言之就是网络链接在传输文本信息中的一种规定的协议。 1.1 HTTP协议的缺点 1.1.1 HTTP协议以明文方式发送内容,不提供...
2018-09-10 10:52:38 331
原创 TCP/IP 协议简析
前言:为了了解TCP/IP协议,我们先来简单介绍HTTP协议。1. 什么是HTTP协议。 1.1 HTTP(HyperText Transfer Protocol,超文本传输协议),当我们在网页浏览器(web browser)的地址栏中输入URL时,web页面的展示就是使用HTTP协议作为规范,完成从客户端到服务器端等一系列的运行步骤,web应用是建立在HTTP协议上进行客户端到服...
2018-09-09 20:44:29 322
原创 mysql 字符类型字段查询大小写不区分问题的解决方式
前言:在实际的项目开发中,我们可能会遇到下面的问题,如下图所示,查询的时候,我传入的是"ZHANGSAN",但是查出来的结果中account却是zhangsan, 这种情况有可能导致意外发生,例如,我使用账户名:ZHANGSAN或者zhangSAN,都能登录系统,所以这种情况要解决。问题分析:从上面的前言描述中,我们知道是因为mysql中字符类型的字段没有区分大小写的缘故,所以接下来就是分...
2018-08-31 11:25:55 2371
原创 mysql 从表中随机取出几条数据
项目中可能有这样的需求,从一张表中随机取出几条数据,下面给出几种方案,几种方案之间的区别就是sql执行的效率问题首先创建一张表 CREATE TABLE `que_bank` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `gmt_create` datetime NOT NULL COMME...
2018-08-30 18:06:35 2451
原创 mysql 中根据查询结果排名
现在在一般的项目中实现排名的功能应该非常常见,例如在一个班级中,学生的数学分数进行排名,取排名靠前10个学生的信息,再例如获取我在班级中的排名等等1. 创建表 CREATE TABLE `com_user_point` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `gmt_c...
2018-08-30 16:56:55 4333
原创 maven中类冲突,包依赖NoClassDefFoundError以及方法NoSuchMethodError的问题定位以及解决
作为java程序员,我们在项目开发的过程中,肯定需要依赖大量的第三方依赖包,通常我们都是使用maven构建工具来管理第三方工具包的,既然有依赖第三方包,那么肯定也会遇到jar包冲突的问题,那这个时候,我们就需要定位问题所在,定位问题所在首先需要理解冲突的原理。1. 下面首先讲解maven中如何引入jar包,通过maven的坐标引入jar包 2. maven jar包的依赖的原理...
2018-08-28 14:30:31 5693
原创 spring mvc项目搭建过程
spring mvc 架构目前是主流的java后台架构,本文讲解搭建过程以及如何整合mybatis以及mysql,这里项目的结构采用的是多module的结构,如果不知道怎么创建多module的项目结构,可以阅读我之前的一篇文章(如何使用idea创建多module项目,https://blog.csdn.net/T2080305/article/details/80545880)。1. 首先创建...
2018-08-24 15:17:57 442
原创 java中方法重载和重写的区别
方法重载和重写,光从名称上来说,很类似,也很容易弄错,接下来我们先简述两者的区别和联系。1. 方法重载 首先方法重载是同一个类中的不同方法间的关系,这些方法具有同名(方法名一样),但是具有不同的参数列表(参数的个数和参数的类型不同)。方法重载其实是同一个类中多态性的表现,调用者可以依据传入不同个数或者不同类型的参数来决定最终调用哪一个同名的方法。方法重载其实是程序编译时的多态性,即代...
2018-08-16 10:34:08 3496
原创 .gitignore 文件生成,不生效的解决方式
如果在项目中不想某些文件,或者某种格式,某个路径下的文件不提交到版本库中去,我们可以添加.gitignore文件来达到我们想要的效果,下面讲解一下,如何添加.gitignore文件。首先,IDE工具中添加插件,我使用的是idea,下面就以idea为例:添加好插件以后,IDE工具要重启一下下面就开始讲解一下如何创建.gitignore文件我们只需要在项目的根目录中创建这个文件即可,注意是在项目的根目...
2018-07-12 10:52:38 1233
原创 详解jvm 类加载机制
或许对于一个刚刚入行的人来说,编写代码时对于类加载机制的认识不重要,只要遵循相关语法规则即可,但是,对于一个喜欢研究技术或者入行时间长的人来说,理解jvm的类加载机制,对于解决一些日常编码中碰到的bug,尤其重要,举个例子,我们经常碰到ClassNotFoundException这种异常。这时候如果你知道jvm的类加载机制,就很明白为啥出现这种问题了。别急,等我一一介绍。1. 首先介绍jvm的...
2018-07-01 10:45:08 356
原创 linux 下使用命令查看jvm信息
java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令。1. jmap 这个命令是用来查看jvm中当前的堆的dump的,包括对象的数量,对象所占内存的大小 使用方式:先使用jps查看进程id 使用 jmap -dump:live,fil...
2018-06-29 14:55:08 58233 3
原创 maven pom.xml 中 dependencyManagement和dependencies详解
maven 是用来构建项目结构的,是一种主流的项目构建工具,项目中使用到的第三方jar包,用maven来管理是非常方便的,本篇文章主要来讲解<dependencyManagement> 和 <dependencies> 在管理jar包方面的不同之处,对于maven的基础信息和其他的一些方面不再做介绍。现在的项目基本上都是使用多module来管理的,这就涉及到一个问题,多mo...
2018-06-03 21:51:09 11160 3
原创 使用 SimpleMappingExceptionResolver 统一处理 spring mvc 异常
异常处理每个程序员应该都不陌生,我们项目代码在遇到一些未知的错误或者异常时,不能直接将这些错误信息直接返回到前端,展示给用户看,我们应该将这些错误转化成用户能够看得懂的简洁的错误信息。spring mvc在统一异常处理方面提供了两种方式:一种是使用HandlerExceptionResolver接口,一种是在控制器controller内部使用@ExceptionHandler注解的方式,本篇文章主...
2018-06-03 20:49:43 3481
原创 spring mvc 请求 json数据的处理
目前项目中json数据这种格式因为其简单,便于解析的特点而广泛应用于前后端的交互中,而spring mvc也支持对json这种格式数据的转换和解析。1. 那其中就是HttpMessageConverter这个接口提供了这个转化和解析的功能,当然了不同的接口实现类支持不同的数据类型的转化和解析功能。我们先看看这个接口的构造。package org.springframework.http.conve...
2018-06-02 21:19:51 588
原创 Java得到系统时间到第二天凌晨的时间差
/** * 得到系统时间到第二天凌晨的时间差 * 返回毫秒数 * @param date * @return */public static long getSecondDayDifference(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int day = c...
2019-03-16 14:28:47 1958
原创 Java 随机生成最小值min 最大值max 之间 scl位小数
/** * 获取最小值min 最大值max 之间 scl位小数 * @param args */public static void main(String args[]) { double min = 0.5; // 总和 double max = 1.5; // 小数最大位数 int scl = 2; // 用于提取指定小数位 ...
2019-03-16 14:24:57 937
原创 手动配置ThreadPoolExecutor,执行线程任务
public class ThreadPoolTest2 { public static void main(String[] args) { ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS, new ArrayBl...
2018-12-05 14:51:15 543
原创 分析java.uitl.concurrent.ThreadPoolExecutor
1. java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。下面我们来看一下ThreadPoolExecutor类的具体实现源码。 在ThreadPoolExecutor类中提供了四个构造方法: public class ThreadPoolExecutor extend...
2018-12-05 14:50:24 392
原创 列举Executors工具中几种线程池的使用
1. 线程池的介绍: 在开发中,频繁的创建和销毁一个线程,是很耗资源的,为此找出了一个可以循环利用已经存在的线程来达到自己的目的,线程池顾名思义,也就是线程池的集合,通过线程池执行的线程任务,可以很有效的去规划线程的使用。 在java.util.concurrent并发包中大致有以下几种常用的线程池: 1.1 newScheduledThreadPool 创建一个定长线程...
2018-12-05 14:49:14 274
原创 给定一个List,要求利用HashSet的唯一性以及Iterator的remove方法将当前List中的重复元素删除并输出
public class ArrayListRemoveDuplicateTest { public static void main(String args[]){ List<Integer> list = new ArrayList<Integer>(){{ add(121);add(12);add(21);add(13...
2018-12-03 11:28:19 447
原创 分析HashSet中add方法的源码,保证添加存储元素的唯一性
class HashSet implements Set { private static final Object PRESENT = new Object(); private transient HashMap<E,Object> map; public HashSet() { map = new HashMap<>(...
2018-12-03 11:26:33 228
原创 Arrays工具类十大常用方法
public class ArrayListDemo { public static void main(String[] args) { /* * 1. 声明数组 * */ String[] aArray = new String[5]; String[] bArray = {"a","b","c", "...
2018-12-03 11:25:22 571 1
原创 CollectionUtils工具类常用的方法
public class ArrayListDemo { public static void main(String[] args) { List<Integer> a = new ArrayList<Integer>(); List<Integer> b = null; List<Integer...
2018-12-03 11:24:15 812
原创 通过源码分析HashMap的实现原理
1. HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一...
2018-11-30 14:55:37 254
原创 ArrayList常用的方法
增加元素到链表中 boolean add(Element e) //增加指定元素到链表尾部. void add(int index, Element e) //增加指定元素到链表指定位置. boolean addAll(Collection<? extends E> c) //将指定collection中的所有元素插入到ArrayList中 boolea...
2018-11-30 14:54:45 4389 3
原创 HashMap集合迭代的几种方式以及效率比较
public class ArrayListDemo { private static class Person{ private int id; private String name; public Person(int id, String name) { this.id = id; t...
2018-11-30 14:54:02 1262
原创 java集合几种遍历方式及实现原理
1. 几种遍历方式及实现原理public class ArrayListDemo { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("测试1111"); list...
2018-11-30 14:53:02 1109
原创 利用HashSet,存储自定义的对象,通过重写自定义对象中hashCode和equals方法保证存储元素的唯一性
public class HashSetTest { public static void main(String[] args) { // 创建集合对象 HashSet<Student> studentHashSet = new HashSet<Student>(); // 创建学生对象 Stude...
2018-11-30 14:51:51 317
原创 Java多线程的创建及启动的几种方式
Java线程具有五种基本状态: 1. 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 2. 就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。 处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t...
2018-11-30 14:46:52 474
原创 log4j.xml 中配置多个输出文件
现在的项目中,对于日志的配置,我们有时候需要配置对应不同的输出日志文件,例如按照模块划分,按照功能划分,分别输出到不同的日志文件中,下面介绍一下,怎么配置不同的输出日志文件。下面是一整块的log4j.xml配置。如果对怎么配置spring 和 log4j不了解的话,可以参考我之前写的一篇文件,spring log4j配置<?xml version="1.0" encoding="UT...
2018-09-21 14:54:56 2498
原创 spring 中事物的使用
关于事物的一些概念和事物的特性,隔离性,请看我的另外一篇文章,地址:mysql 事物,本篇文章就不对事物的概念以及特性进行介绍了。本篇文章主要介绍在spring 中,事物的使用。在讲解spring 中使用事物之前,我们先大致了解一下在代码中怎样手动的使用传统的JDBC事物的,无论事物怎样被封装,无非都是一下几个过程:首先程序向数据库获得Connection连接,默认情况下,这个连接是默认开...
2018-09-12 17:37:04 1658
原创 mysql事物详解
前言:事物是什么?作为一个java程序员,也许我们仅仅只是停留在会使用的程度上,会通过在类上或者方法上使用@Transactional注解的方式来使用事物,但是背后的原理,为什么使用这个注解就能使事物生效可能并不是很清楚。下面本文详细一一介绍事物是什么,事物的特性,怎么使用等等。1. 事物是什么 所谓事物,在我的理解中就是一系列操作的一个集合,一旦其中一个操作失败,那么整个操作集合必...
2018-09-12 15:10:08 733
原创 HashMap实现原理
HashMap是基于哈希表的Map接口的非同步实现,也就是说不是线程安全的。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操...
2018-09-11 17:25:49 783
原创 session和cookie的区别
引言:cookie和session诞生的背景。我们知道web浏览器和服务器在网络上传输通信的过程中是采用HTTP协议的,而HTTP协议是一种无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话,这个时候就要使用到会话跟踪技术了,那么什么是会话跟踪技术呢?会话是web应用中常见的技术,用来跟踪用户的整个会话过程,常见的...
2018-09-10 15:30:26 238
原创 使用jsoup解决xss(跨站脚本攻击)威胁
1. 在介绍jsoup之前,首先来详细介绍一下关于xss的信息。1.1 什么是xss Cross-Site Scripting(XSS)是一类注入问题,恶意脚本被注入到健康的、可信任的网站。当一个攻击者通过一个网站应用程序, 以浏览器端脚本的形式,给另一端的用户发送恶意代码时,XSS攻击就发生了。允许这种攻击成功的缺陷广泛存在于各个大小网站, 只要这个网站某个页面将用户的输...
2018-09-07 11:33:14 3001
原创 maven scope 详解
maven 中scope 标签主要是负责管理项目的部署,scope的默认值compile。scope的其他值如下:1. scope的分类以及解释 1.1 compile : 编译范围,scope的默认值,表示当前所依赖的jar包需要参与项目的编译,测试,运行周期,打包的时候包含进去,适用于所有阶段,会随着项目一起发布。 1.2 test: 测试范围,依赖的项目仅仅参与测试...
2018-08-28 15:04:02 1036
原创 java 根据当前年月获取学年和学期
有时候,我们想根据当前的年月获取到当前是哪个学年,哪个学期,现在分享一下获取的java代码package com.ctp.ghub.utils;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import o...
2018-08-28 10:54:53 2560
postman-4.1.2.rar
2020-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人