- 博客(194)
- 收藏
- 关注
原创 接口幂等性
什么是幂等性?对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。幂等性设计我们以对接支付宝充值为例,来分析支付回调接口如何设计?如果我们系统中对接过支付宝充值功能的,我们需要给支付宝提供一个回调接口,支付宝回调信息中会携带(out_trade_no【商户订单号】,trade_no【支付宝交易号】),trade_no在支付宝中是唯一的,out_trade_no在商户系统中是唯一的。回调接口实现有以下实现方式。方式1(普通方式)过程如下:1.接收到支付宝支付成功请求2.根据trade_
2020-07-25 12:18:24
267
原创 一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms
有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms),按照下文的方式调整SQL后,耗时347 ms (execution: 163 ms, fetching: 184 ms)。操作:查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段。原理:减少回表操作-- 优化前SQLSELECT 各种字段FRO
2020-07-25 10:34:24
300
原创 MySQL在Windows7环境下的安装
本文描述MySQL在Windows7环境下的安装步骤,安装的版本为mysql-installer-community-5.7.21.0.msi。其下载地址为:https://dev.mysql.com/downloads/installer/,请自行前往下载。(1)选择接受许可条款“I accept the license terms”(2)如果只想安装MySQL服务,选择“Server o...
2020-03-09 19:56:05
352
原创 安装mysql时提示This application requires .NET framework 4.5.2的解决办法
在我一次安装mysql的过程中遇到了这个问题,然后说的是我们的电脑缺少个什么东西不能安装。解决办法:我们可以到https://www.microsoft.com/en-us/download/details.aspx?id=42642下载quesh缺少的那个东西我们直接download下载这个东西,然后双击那个exe文件,安装好我们就可以安装mysql了...
2020-03-09 11:55:04
712
原创 微服务一定要有网关
一、什么是服务网关 服务网关 = 路由转发 + 过滤器1、路由转发:接收一切外界请求,转发到后端的微服务上去;2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。二、为什么需要服务网关上述所说的横切功能(以权限校验为例)可以写在三个位置:每个服务自己实现一遍写到一个公共的服务中,然后其他所有...
2020-02-02 13:41:30
276
原创 java虚拟机内存模型
一、虚拟机同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的。同一个java代码在windows上生成的机器码可能是0101…,在linux上生成的可能是1100…,那么这是怎么实现的呢?不知道同学们还记不记得,在下载jdk的时候,我们在oracle官网,基于不同的操作系统或者位数版本要下载不同的jdk版本,也就是说针对不同的操作系统,jdk...
2020-02-02 13:19:23
162
原创 进程线程、同步异步、阻塞非阻塞、并发并行
基本概念1 进程和线程进程(Process):是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的...
2020-02-02 11:33:19
327
原创 多线程基础体系知识清单
线程与进程的区别在计算机发展初期,每台计算机是串行地执行任务的,如果碰上需要IO的地方,还需要等待长时间的用户IO,后来经过一段时间有了批处理计算机,其可以批量串行地处理用户指令,但本质还是串行,还是不能并发执行。如何解决并发执行的问题呢?于是引入了进程的概念,每个进程独占一份内存空间,进程是内存分配的最小单位,相互间运行互不干扰且可以相互切换,现在我们所看到的多个进程“同时"在运行,实际上是...
2020-02-02 11:29:23
172
转载 MySQL数据库总结
一、数据库简介数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。数据表:数...
2020-01-31 22:37:17
105
原创 SpringBoot注入数据的方式
关于注入数据说明1.不通过配置文件注入数据通过@Value将外部的值动态注入到Bean中,使用的情况有:注入普通字符串注入操作系统属性注入表达式结果注入其他Bean属性:注入Student对象的属性name注入文件资源注入URL资源辅助代码package com.hannpang.model;import org.springframework.beans.facto...
2020-01-20 10:10:09
304
原创 IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理
idea 还有很多高大上的功能,反正我自从改用idea后,再也没开过eclipse,今天来看几个高级功能:一、与JIRA集成jira是一个广泛使用的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。idea可以很好的跟它集成,参考下图:File -> Settings ->Task -> Servers 点击右侧...
2020-01-20 09:48:11
135
原创 Mybatis 十八连环问
1、#{}和${}的区别是什么?答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,...
2020-01-19 14:35:19
126
原创 Spring Boot常用注解和原理
一、启动注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @...
2020-01-19 11:51:07
158
原创 Mybatis 中经典的 9 种设计模式
虽然我们都知道有23个设计模式,但是大多停留在概念层面,真实开发中很少遇到。Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:1、Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatement...
2020-01-18 09:59:36
196
原创 Spring MVC控制器的14个技巧
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet解析,以呈现结果或输出。这样就完成了典型的请求-响应周期的往返。1.使用@Controller构造型这是创建可以处理一个或多个请求的控制器类的最简单方法。仅通过用构造型注释一个类@Controll...
2020-01-17 17:04:16
136
原创 java:final详解
final基础使用修饰类当某个类的整体定义为final时,就表明了你不能打算继承该类,而且也不允许别人这么做。即这个类是不能有子类的。注意:final类中的所有方法都隐式为final,因为无法覆盖他们,所以在final类中给任何方法添加final关键字是没有任何意义的。这里顺道说说final类型的类如何拓展? 比如String是final类型,我们想写个MyString复用所有String...
2020-01-16 16:19:21
264
原创 Java 并发:线程基础
线程状态转换新建(New)创建后尚未启动。可运行(Runnable)可能正在运行,也可能正在等待 CPU 时间片。包含了操作系统线程状态中的 Running 和 Ready。阻塞(Blocking)等待获取一个排它锁,如果其线程释放了锁就会结束此状态。无限期等待(Waiting)等待其它线程显式地唤醒,否则不会被分配 CPU 时间片。限期等待(Timed Waiting)...
2020-01-15 14:51:52
118
原创 java8新特性之函数式编程范式
给定一个字符串元素列表,如下所示:["1", "2", "bilibili", "of", "codesheep", "5", "at", "BILIBILI", "codesheep", "23", "CHEERS", "6"]里面有数字型字符串,有字母型字符串;字符串里有大写,也有小写;字符串长度也有长有短现在要写代码完成一个小功能:我想找出所有 长度>=5的字符串,并且忽略大...
2020-01-13 15:10:27
295
原创 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
178
原创 在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
2540
原创 可以提高千倍效率的Java代码小技巧
前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个...
2020-01-02 10:55:50
91
原创 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
817
原创 Java基础:多线程总结
1、线程概述几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。2、线程与进程进程概述:几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程( Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能...
2019-12-20 17:14:57
99
原创 数据结构:java实现队列
顺序队列概念:队列是一种先进先出的线性表,只允许在一端插入,另一端删除。允许插入的一端称为队尾,允许删除的一端称为队头顺序队列的实现:import org.junit.jupiter.api.Test;/** * 顺序队列 * @author wydream * */public class QueueSequence { private String[] ...
2019-12-20 16:53:35
94
原创 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
64
原创 架构:理解架构的模式
架构演进中有很多知识点,总体上可以归结为以下模式,这里说的模式本质是架构中技术点的抽象。强烈推荐李智慧老师的《大型网站技术架构》,本文的内容也是来源于它,在此基础上拓展了下。每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠运行灯一系列问题与挑战。为此,...
2019-12-20 11:47:00
118
原创 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
3216
原创 MYSQL5.7版本解决sql_mode=only_full_group_by问题
具体出错提示:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in G...
2019-12-18 17:54:17
182
原创 mybatis foreach之前对list进行判空
使用mybatis进行in()判断的时候传入参数为List,这时候如果list有内容还好,如果List为空的话只用foreach会报错,那么就要判断List是否为空了,当然可以在java代码中进行判断,但是我不想每次调用该方法都要进行判断,所有最好还是在mybatis的sql配置文件中判断,配置如下:刚开始以为collection=“list”的名称“list”是随便起到,后来发现不是,如果该...
2019-12-13 11:30:26
599
转载 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
125
转载 神奇的 SQL 之温柔的陷阱: 三值逻辑 与 NULL
NULLNULL 用于表示缺失的值或遗漏的未知数据,不是某种具体类型的值。数据表中的 NULL 值表示该值所处的字段为空,值为 NULL 的字段没有值,尤其要明白的是:NULL 值与 0 或者空字符串是不同的。两种 NULL 这种说法大家可能会觉得很奇怪,因为 SQL 里只存在一种 NULL 。然而在讨论 NULL 时,我们一般都会将它分成两种类型来思考:“未知”(unknown)和...
2019-12-10 16:27:15
109
原创 spring-boot-2.0.3之quartz集成
java定时任务调度的实现方式Timer这个相信大家都有用过,我也用过,但用的不多;特点是:简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务;能实现简单的定时任务,稍微复杂点(或要求高一些)的定时任务却不好实现。 ScheduledExecutor 这个我相信大家也都用过,而...
2019-12-10 16:03:34
334
原创 8种最坑的SQL错误用法
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。好吧,可能90%以上的 DBA 解决该问题就到此为止。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,程序员仍然会抱怨:我只...
2019-12-10 14:29:36
105
原创 ThreadLocal面试六连问
ThreadLocal为Java并发提供了一个新的思路, 它用来存储Thread的局部变量, 从而达到各个Thread之间的隔离运行。它被广泛应用于框架之间的用户资源隔离、事务隔离等。但是用不好会导致内存泄漏, 本文重点用于对它的使用过程的疑难解答, 相信仔细阅读完后的朋友可以随心所欲的安全使用它。一、内存泄漏原因探索ThreadLocal操作不当会引发内存泄露,最主要的原因在于它的内部类T...
2019-12-10 10:32:00
120
原创 可以提高千倍效率的Java代码小技巧
前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个...
2019-12-10 10:07:18
81
原创 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
226
原创 别在 Java 代码里乱打日志了,这才是打印日志的正确姿势!
使用slf4j使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一实现方式统一使用: Logback框架打日志的正确方式什么时候应该打日志当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支经常以功能为核心进...
2019-12-05 18:02:23
136
原创 Java IDEA使用详解
>jetbrainshttp://www.jetbrains.com/>安装安装Idea后,查看目录:bin目录是一些执行和配置相关包;help目录帮助文档手册;jre64目录是jre运行支持;lib目录是运行用到的jar包;licenese目录是许可协议;plugins目录是插件;redist目录是一些杂项;开启Idea后,这里...
2019-12-02 10:37:40
176
原创 数据结构之Array、ArrayList、List、LinkedList对比分析
一、前言:在c#数据结构中,集合的应用非常广泛,无论是做BS架构还是CS架构开发,都离不开集合的使用,比如我们常见的集合包括:Array、ArrayList、List、LinkedList等。这一些数据集合,在功能上都能够实现集合的存取,但是他们内部有什么区别,在使用时需要注意一些什么呢?下面根据个人的经验,对这一些集合数据的使用做一个简单的小结,如果说的不对的地方,欢迎指出,多多交流改进。二...
2019-11-30 11:59:14
117
转载 使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。一个简单 Spring Boot 项目在 pom.xml 中 ,使用 Spring Boot 2.0 相关依赖<parent>...
2019-11-30 11:19:19
74
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人