
java
weixin_42590334
这个作者很懒,什么都没留下…
展开
-
接口幂等性
什么是幂等性?对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。幂等性设计我们以对接支付宝充值为例,来分析支付回调接口如何设计?如果我们系统中对接过支付宝充值功能的,我们需要给支付宝提供一个回调接口,支付宝回调信息中会携带(out_trade_no【商户订单号】,trade_no【支付宝交易号】),trade_no在支付宝中是唯一的,out_trade_no在商户系统中是唯一的。回调接口实现有以下实现方式。方式1(普通方式)过程如下:1.接收到支付宝支付成功请求2.根据trade_原创 2020-07-25 12:18:24 · 305 阅读 · 0 评论 -
进程线程、同步异步、阻塞非阻塞、并发并行
基本概念1 进程和线程进程(Process):是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的...原创 2020-02-02 11:33:19 · 383 阅读 · 0 评论 -
多线程基础体系知识清单
线程与进程的区别在计算机发展初期,每台计算机是串行地执行任务的,如果碰上需要IO的地方,还需要等待长时间的用户IO,后来经过一段时间有了批处理计算机,其可以批量串行地处理用户指令,但本质还是串行,还是不能并发执行。如何解决并发执行的问题呢?于是引入了进程的概念,每个进程独占一份内存空间,进程是内存分配的最小单位,相互间运行互不干扰且可以相互切换,现在我们所看到的多个进程“同时"在运行,实际上是...原创 2020-02-02 11:29:23 · 205 阅读 · 0 评论 -
Mybatis 十八连环问
1、#{}和${}的区别是什么?答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,...原创 2020-01-19 14:35:19 · 152 阅读 · 0 评论 -
Spring Boot常用注解和原理
一、启动注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @...原创 2020-01-19 11:51:07 · 196 阅读 · 0 评论 -
Mybatis 中经典的 9 种设计模式
虽然我们都知道有23个设计模式,但是大多停留在概念层面,真实开发中很少遇到。Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:1、Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatement...原创 2020-01-18 09:59:36 · 225 阅读 · 0 评论 -
Spring MVC控制器的14个技巧
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。这样就完成了典型的请求-响应周期的往返。1.使用@Controller构造型这是创建可以处理一个或多个请求的控制器类的最简单方法。仅通过用构造型注释一个类@Controll...原创 2020-01-17 17:04:16 · 170 阅读 · 0 评论 -
java:final详解
final基础使用修饰类当某个类的整体定义为final时,就表明了你不能打算继承该类,而且也不允许别人这么做。即这个类是不能有子类的。注意:final类中的所有方法都隐式为final,因为无法覆盖他们,所以在final类中给任何方法添加final关键字是没有任何意义的。这里顺道说说final类型的类如何拓展? 比如String是final类型,我们想写个MyString复用所有String...原创 2020-01-16 16:19:21 · 337 阅读 · 0 评论 -
Java 并发:线程基础
线程状态转换新建(New)创建后尚未启动。可运行(Runnable)可能正在运行,也可能正在等待 CPU 时间片。包含了操作系统线程状态中的 Running 和 Ready。阻塞(Blocking)等待获取一个排它锁,如果其线程释放了锁就会结束此状态。无限期等待(Waiting)等待其它线程显式地唤醒,否则不会被分配 CPU 时间片。限期等待(Timed Waiting)...原创 2020-01-15 14:51:52 · 164 阅读 · 0 评论 -
java8新特性之函数式编程范式
给定一个字符串元素列表,如下所示:["1", "2", "bilibili", "of", "codesheep", "5", "at", "BILIBILI", "codesheep", "23", "CHEERS", "6"]里面有数字型字符串,有字母型字符串;字符串里有大写,也有小写;字符串长度也有长有短现在要写代码完成一个小功能:我想找出所有 长度>=5的字符串,并且忽略大...原创 2020-01-13 15:10:27 · 350 阅读 · 0 评论 -
String,StringBuffer,StringBuilder三者的使用方法和区别
1.StringBuffer,StringBuilder的用法toString()方法将StringBuffer,StringBuilder对象转换为String字符串,常用在需要输出的时候,因为StringBuffer和StringBuilder的对象不能直接输出,例如:StringBuffer s1 = new StringBuffer();s1.toString();append...原创 2020-01-10 09:28:00 · 235 阅读 · 0 评论 -
在java中判断一个字符串中是否包含某个字符或字符串
一、contains方法java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列此方法返回true,如果此字符串包含,否则返回false。public static void main(String[] args) { String str = "abc"; boolean status...原创 2020-01-10 09:00:53 · 2644 阅读 · 0 评论 -
可以提高千倍效率的Java代码小技巧
前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个...原创 2020-01-02 10:55:50 · 118 阅读 · 0 评论 -
Java判断文件夹是否存在,不存在则新建
Java判断是否存在文件夹,不存在则新建File file=new File("C:/Users/QPING/Desktop/log.txt"); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs();}判断是否存在文件,不存在则新建File file = new File("C:/Users/...原创 2019-12-27 11:21:18 · 846 阅读 · 0 评论 -
Java基础:多线程总结
1、线程概述几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。2、线程与进程进程概述:几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程( Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能...原创 2019-12-20 17:14:57 · 132 阅读 · 0 评论 -
数据结构:java实现队列
顺序队列概念:队列是一种先进先出的线性表,只允许在一端插入,另一端删除。允许插入的一端称为队尾,允许删除的一端称为队头顺序队列的实现:import org.junit.jupiter.api.Test;/** * 顺序队列 * @author wydream * */public class QueueSequence { private String[] ...原创 2019-12-20 16:53:35 · 119 阅读 · 0 评论 -
Java 创建对象的四种方法
使用new 方式创建对象public static Worker createWorker() { return new Worker(); } public static Worker createWorker(String name, int age) { return new Worker(name, age); } 使用反射机制...原创 2019-12-20 14:48:34 · 87 阅读 · 0 评论 -
架构:理解架构的模式
架构演进中有很多知识点,总体上可以归结为以下模式,这里说的模式本质是架构中技术点的抽象。强烈推荐李智慧老师的《大型网站技术架构》,本文的内容也是来源于它,在此基础上拓展了下。每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠运行灯一系列问题与挑战。为此,...原创 2019-12-20 11:47:00 · 150 阅读 · 0 评论 -
Java处理手机号中间4位替换成*
在做电商中,有些手机号是不能全部显示的,中间四位一般需要替换成*这样处理有2中方法,a:substring来分割 b:正则验证a:substring来分割手机号public static void main(String[] args) { String phone = "13123456789"; String phoneNumber = phone.su...原创 2019-12-20 08:59:23 · 3350 阅读 · 0 评论 -
mybatis foreach之前对list进行判空
使用mybatis进行in()判断的时候传入参数为List,这时候如果list有内容还好,如果List为空的话只用foreach会报错,那么就要判断List是否为空了,当然可以在java代码中进行判断,但是我不想每次调用该方法都要进行判断,所有最好还是在mybatis的sql配置文件中判断,配置如下:刚开始以为collection=“list”的名称“list”是随便起到,后来发现不是,如果该...原创 2019-12-13 11:30:26 · 638 阅读 · 0 评论 -
java8新特性
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的日期 API,新的Stream API 等。是Java5之后一个大的版本升级,让Java语言和库仿佛获得了新生,核心新特性包含:Java8 函数式接口− 函数式接口(FunctionalInterface)就是一个有且仅...转载 2019-12-10 17:08:23 · 159 阅读 · 0 评论 -
spring-boot-2.0.3之quartz集成
java定时任务调度的实现方式Timer这个相信大家都有用过,我也用过,但用的不多;特点是:简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务;能实现简单的定时任务,稍微复杂点(或要求高一些)的定时任务却不好实现。 ScheduledExecutor 这个我相信大家也都用过,而...原创 2019-12-10 16:03:34 · 380 阅读 · 0 评论 -
8种最坑的SQL错误用法
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。好吧,可能90%以上的 DBA 解决该问题就到此为止。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员仍然会抱怨:我只...原创 2019-12-10 14:29:36 · 130 阅读 · 0 评论 -
ThreadLocal面试六连问
ThreadLocal为Java并发提供了一个新的思路, 它用来存储Thread的局部变量, 从而达到各个Thread之间的隔离运行。它被广泛应用于框架之间的用户资源隔离、事务隔离等。但是用不好会导致内存泄漏, 本文重点用于对它的使用过程的疑难解答, 相信仔细阅读完后的朋友可以随心所欲的安全使用它。一、内存泄漏原因探索ThreadLocal操作不当会引发内存泄露,最主要的原因在于它的内部类T...原创 2019-12-10 10:32:00 · 148 阅读 · 0 评论 -
可以提高千倍效率的Java代码小技巧
前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个...原创 2019-12-10 10:07:18 · 106 阅读 · 0 评论 -
decimal变量获取
import java.math.BigDecimal;import java.math.BigInteger;/** * decimal变量获取 */public class DecimalUtil { /** * 获取object的值 * * @author fengshuonan * @Date 2019-04-04 17:07...原创 2019-12-09 11:34:32 · 255 阅读 · 0 评论 -
别在 Java 代码里乱打日志了,这才是打印日志的正确姿势!
使用slf4j使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一实现方式统一使用: Logback框架打日志的正确方式什么时候应该打日志当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支经常以功能为核心进...原创 2019-12-05 18:02:23 · 167 阅读 · 0 评论 -
Java IDEA使用详解
>jetbrainshttp://www.jetbrains.com/>安装安装Idea后,查看目录:bin目录是一些执行和配置相关包;help目录帮助文档手册;jre64目录是jre运行支持;lib目录是运行用到的jar包;licenese目录是许可协议;plugins目录是插件;redist目录是一些杂项;开启Idea后,这里...原创 2019-12-02 10:37:40 · 237 阅读 · 0 评论 -
java集合的互转
fastjson:list转mapList<Map<String, Object>> picsMapList = JSON.parseObject(JSON.toJSONString(picsList), new TypeReference<List<Map<String, Object>>>() {});map转listLis...原创 2019-11-29 10:32:54 · 110 阅读 · 0 评论 -
Java 中初始化 List 的五种方法
在 Java 中初始化 List 的五种方法1.构造 List 后使用 List.add 初始化2.使用 {{}} 双括号语法3.使用 Arrays.asList4.使用 Stream (JDK8)5.使用 Lists (JDK9)1.构造 List 后使用 List.add 初始化List<String> stringList = new LinkedList<...原创 2019-11-28 09:24:14 · 587 阅读 · 0 评论 -
java 时间戳 与时间的转换
时间戳转换为时间Long timeStamp = System.currentTimeMillis(); //获取当前时间戳System.out.println(timeStamp);SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);String sd = sdf.format(new Date(Long.p...原创 2019-11-22 11:27:00 · 197 阅读 · 0 评论 -
面试最后一问:你有什么问题想问我吗?
https://blog.youkuaiyun.com/dyc87112/article/details/102676581转载 2019-11-21 17:49:57 · 161 阅读 · 0 评论 -
史上最全正则表达式语法
一、元字符元字符是构造正则表达式的一种基本元素。. :匹配除换行符以外的任意字符w:匹配字母或数字或下划线或汉字s:匹配任意的空白符d:匹配数字b:匹配单词的开始或结束^:匹配字符串的开始$:匹配字符串的结束匹配有abc开头的字符串:abc或者^abc 匹配8位数字的QQ号码:^dddddddd$ 匹配1开头11位数字的手机号码:^1dddddddddd$二、重复限定...原创 2019-11-21 17:45:00 · 778 阅读 · 0 评论 -
Lambda学习
从List的对象获取一个属性转换新的集合将List userList转换为List userIdListList<Integer> userIds = userList.stream().map(u -> u.getId()).collect(Collectors.toList());java8中使用Lambda表达式将list中实体类的两个字段转MapMap<S...原创 2019-11-18 11:40:54 · 159 阅读 · 0 评论 -
MyBatis limit分页设置
错误的写法:<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap"> SELECT a.*, FROM tb_user a WHERE 1=1 <if test="ids != n...原创 2019-11-15 15:37:23 · 425 阅读 · 0 评论 -
Ajax请求的参数
Ajax请求的参数post请求和get请求存放参数位置post请求和get请求存放参数位置是不同的:post方式参数存放在请求数据包的消息体中。get方式参数存放在请求数据包的请求行的URI字段中,以?开始以param=value¶m2=value2的形式附加在URI字段之后。而request.setCharacterEncoding(charset);只对消息体中的数...原创 2019-11-09 11:31:07 · 298 阅读 · 0 评论 -
Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data
在常见业务开发中,POST请求常常在这些地方使用:前端表单提交时、调用接口代码时和使用Postman测试接口时。我们下面来一一了解:一、前端表单提交时application/x-www-form-urlencoded表单代码:<form action="http://localhost:8888/task/" method="POST">First name: <inp...原创 2019-11-09 10:06:21 · 1050 阅读 · 0 评论 -
快速将String数组转换成Integer数组
首先需要在在pom.xml文件添加依赖:commons-beanutils commons-beanutils 1.8.3String[] stringArray = request.getParameter("aftIdList").split(",");//将String数组转成Integer数组Integer[] interArray = (Integer[])ConvertUtil...原创 2019-11-04 10:37:30 · 4943 阅读 · 0 评论 -
Java请求转发和请求重定向
一、请求转发和请求重定向的区别请求转发和请求重定向又分别称为服务器跳转和客户端跳转1.组件之间可否共享信息不同(本质区别)当客户端向服务器发送请求时,服务器收到请求后,会将请求封装成一个HttpServletRequest对象request,并且所有的请求参数都封装在request对象中,这个对象时Jsp的内置对象可以直接在Jsp中使用。服务器收到请求后,还需要请求别的页面,这是就有两种方式...原创 2019-10-30 11:53:24 · 644 阅读 · 0 评论 -
吃透ThreadLocal 源码的每一个细节和设计原理
引言ThreadLocal 是面试过程中非常高频的一个类,这类的复杂程度绝对是可以带出一系列连环炮的面试轰炸。一直觉得自己对这个类很了解了,但是直到去看源码,接二连三的技术浮出水面(弱引用,避免内存溢出的操作,开放地址法解决hash 冲突,各种内部类的复杂的关系),看到你怀疑人生,直到根据代码一步一步的画图才最终理解(所以本篇文章会有大量的图)。这里也给大家一个启示,面对复杂的事情的时候,实在...原创 2019-10-30 10:08:52 · 212 阅读 · 0 评论