- 博客(52)
- 资源 (7)
- 收藏
- 关注
原创 Thread、Runnable、Callable、Future、FutureTask,谈谈他们的关系?
Thread、Runnable、Callable、Future、FutureTask 关系
2023-03-24 09:48:04
476
原创 MySQL 中实现可重复读(RR)的原理--MVCC
MVCC,多版本并发控制(Multi-Version Conncurrency Control)是mysql中基于乐观锁原理实现的隔离级别的方式。用于实现读已提交和可重复读取隔离级别。对于MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间(事务ID),一个保存行的删除时间(回滚指针),当然存储的并不是实际的时间值,而是系统版本号(system version number).每开始一个新的事务,系统版本号都会自动递增,事务开始时刻的系统版本号会作为事务的版本号,用来和
2021-06-18 14:32:22
1456
1
原创 spring统一异常处理的三种方式
第一种:@ControllerAdvice 注解使用import com.alibaba.fastjson.JSON;import com.common.constants.ResEnum;import com.common.entity.ResponseMsg;import com.common.exception.ServiceException;import com.t...
2020-04-14 17:39:38
769
原创 雪花算法生成id -- Snowflak 。简易实用
废话不多说,代码走起。import java.lang.management.ManagementFactory;import java.net.InetAddress;import java.net.NetworkInterface;/** * @description: 雪花算法生成id **/public class SnowFlakeIDGenerator { ...
2020-03-31 15:48:56
919
原创 主线程控制子线程运行完成
主线程控制10个子线程运行完成后,输出,主要用到的知识点countDownLunch代码简易实现如下 : public static void main(String[] args) throws Exception { //控制10个子线程都运行完 CountDownLatch countDownLatch = new CountDownLatch(10);...
2020-03-27 17:14:39
450
原创 多线程生产者、消费者模式中,如何停止消费者
多线程生产者、消费者模式中,如何停止消费者 ?多生产者情况下对“毒丸”策略的应用生产者、消费者模式是多线程中的经典问题。通过中间的缓冲队列,使得生产者和消费者的速度可以相互调节。发散:一个主线程控制多个子线程,多个主线程控制多个子线程(countDownLunch使用理解)对于比较常见的单生产者、多消费者的情况,主要有以下两种策略: 通过volatile boolean prod...
2020-03-27 16:48:08
3108
1
原创 推荐 Java 程序员使用 Google Guava 编程
DK提供的String还不够好么? Joiner/Splitter CharMatcher Ints Multiset Multiset Code unmodifiable defensive copies Immutable ImmutableMap Multimap BiMap ...
2020-03-06 10:55:33
477
原创 docker安装及使用阿里云安装nginx
阿里云Docker镜像仓库(Docker Registry)镜像仓库申请地址:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories一、创建命名空间例如moss-hub二、创建镜像仓库例如moss-docker三、使用镜像仓库1. 登录阿里云Docker Registry...
2020-02-14 16:19:59
3016
原创 nginx缓存防刷简易思路
线上环境 很多接口 如果不做缓存 可能导致有人拿到url 每秒几万次的访问后台程序,导致系统down机.此处, nginx可以加一层缓存. expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入PS. 可以限制单个接口的访问,,比如限制/user 开头的接口...
2020-02-13 10:45:19
535
原创 linux文件权限8进制详解--一看就懂了
使用八进制(0-7)数字表示权限法 权限 二进制值 八进制值 描述 --- 000 0 没有任何权限 --x 001 1 只有执行权限 ...
2020-02-12 16:05:12
12916
1
原创 api防刷简易实现
注解类:import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.METHOD;import static java.lang.annotation.RetentionPolicy.RUNTIME; ...
2019-12-03 08:58:00
451
原创 RequestContextHolder简析
在Web开发中,service层或者某个工具类中需要获取到HttpServletRequest对象还是比较常见的。一种方式是将HttpServletRequest作为方法的参数从controller层一直放下传递,不过这种有点费劲,且做起来不是优雅;还有另一种则是RequestContextHolder,直接在需要用的地方使用如下方式取HttpServletRequest即可,使用代码如下:...
2019-11-27 10:02:28
2085
原创 mysql脏读,幻读,不可重复读以及间隙所解决幻读
1、数据脏读事务a修改了某条数据,然后事务b读取了事务a修改的该条数据,然后事务a由于某些原因,事务a回滚了,这样事务b读到的数据就和回滚的数据不同了,这时事务b读取的数据就是脏数据。概况一句话就是一个事务读取了另一个事务未提交的数据。2、数据幻读事务a按一定条件读取了该表的一些数据,然后事务b想该表插入了一些满足事务a查询条件的数据,当事务a再次以相同条件查询数据时,会发现多出来一些数据...
2019-11-07 11:08:06
2843
1
原创 OOM排查与定位
某Java服务(假设PID=19813)出现了OOM,最常见的原因为:有可能是内存分配确实过小,而正常业务使用了大量内存某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽某一个资源被频繁申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接三种情况:1 “本身资源不够”2 “申请资源太多”3: “资源耗尽”。更具体的,可以使用以下工具逐一排查。jps列出所有...
2019-11-05 15:45:50
4129
原创 Cloud中feign异常无法传递的问题
重写feign 全局异常处理方法:分析:因为cloud内部抛出异常不进行处理,Feign获取spring默认包装异常结果如下:{ "timestamp": "2017-12-27 15:01:53", "status": 500, "error": "Internal Server Error", "exception": "com.keruyun.loya...
2019-04-24 14:28:01
5903
原创 springboot自动装配原理详解
1)传统ssm整合redis的时候 需要在xml的配置文件中 进行大量的配置Bean我们在这里使用springboot来代替ssm的整合,通过xml的形式来整合redis第一步:加入配置<dependency> <groupId>org.springframework.data</groupId> <artifactId>sp...
2019-04-01 17:45:46
418
转载 @RequestParam、@RequestBody和@ModelAttribute区别
一、@RequestParamGET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上1. @RequestParam(org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参。例:(1) get请求:url请求:http://localhost:8080/WxProg...
2019-04-01 17:23:04
149
原创 spring 动态 注册bean的两种方式
1:通常用实现 BeanDefinitionRegistryPostProcessor 实现bean注册,代码如下@Configurationpublic class NetsDaoBeanConfig implements BeanDefinitionRegistryPostProcessor { private BeanNameGenerator beanNameGenera...
2019-02-22 14:13:05
7359
1
原创 EXPLAIN分析sql详解--超详细--一篇就够
id列id列的编号是select的序列号,有几个select就有几个id,并且id的顺序是按选择出现的顺序增长的.MySQL将选择查询分为简单查询(SIMPLE)和复杂查询(PRIMARY) 。 2. select_type列select_type表示对应行是简单还是复杂的查询,如果是复杂的查询,又是上述三种复杂查询中的哪一种。1)简单:简单查询查询不包含...
2018-10-09 16:59:42
1802
1
转载 jdk8 Optional 的正确姿势
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了 Optional<User> user = ...... if (user.isPresent()) { return u...
2018-09-28 18:01:44
502
原创 web项目实行自定义banner
springboot中支持自定义banner,只要在resource下放置一个banner.txt的文件,里面输出一些自定义信息即可,那如果在传统的web项目中如何实现,自定义banner呢? 其实用监听器即可简单实现,废话不多说,直接上代码:web.xml中配置监听器:<listener> <listener-class>com.xx.xx.*.xx.My...
2018-09-28 17:45:34
1660
转载 正则表达式基础入门看这一篇就够了
https://mp.weixin.qq.com/s/ejtbumkNZpaPSc4AP2XsoA 摘自java 团长正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。但很神奇的是:无论你大学选择哪一门计算机语言,都没有关于正则表达式的课程给你修,在你学会正则之前,你只能看着那些正则大师们,写了一串外...
2018-09-28 10:16:34
6170
4
转载 运行java飞行记录器JFR(java flight recorder)
JFR上面讲到的工具都是作为快速的查看诊断工具的。如果要深入分析问题,可以选择使用内置的Java飞行记录器:Java Mission Control。 转储JFR需要三步:1. 创建一个包含了你自己配置的JFR模板文件。运行jmc, 然后Window->Flight Recording Template Manage菜单。准备好档案后,就可以导出文件,并移动到要排查问题的环境...
2018-09-28 10:01:57
7841
原创 disruptor 资料整理
disruptor的优缺点: 没有竞争=没有锁=非常快。 所有访问者都记录自己的序号的实现方式,允许多个生产者与多个消费者共享相同的数据结构。 在每个对象中都能跟踪序列号(ring buffer,claim Strategy,生产者和消费者),加上神奇的cache line padding,就意味着没有为伪共享和非预期的竞争。 Disruptor 为什么快1. 不使用锁。通过...
2018-09-28 09:22:45
420
转载 docker资料
Docker问题集合 好想雨的云 2018-04-30 00:46 阅读:18 评论:0 Docker安装和状态查询指令 好想雨的云 2018-04-30 00:40 阅读:14 评论:0 Docker镜像加速 好想雨的云 2018-04-22 23:36 阅读:48 评论:0 linux上安装Docker(非常简单的安装方法) 好想雨的云 2018-04-22 21:06...
2018-09-28 09:19:06
175
原创 InheritableThreadLocal 实现原理
介绍 InheritableThreadLocal 之前,假设对 ThreadLocal 已经有了一定的理解,比如基本概念,原理,如果没有,可以自行百度java多线程 ThreadLocal了解原理。这里再复习下 ThreadLocal 的原理,因为会对 InheritableThreadLocal 的理解 有重大的帮助:每个线程都有一个 ThreadLocalMap 类型的 thread...
2018-08-24 17:37:42
371
原创 基于quartz +springboot 的实时调度框架,可实时启动,运行,添加job
这个是之前在项目中写的一个quartz调度,可实时启动,运行,添加job,现将代码及思想做简要笔记整理:使用quartz +springboot1:在数据库创建job运行调度表,创建脚本如下:DROP TABLE IF EXISTS `manage_ip_schedule_task`;CREATE TABLE `manage_ip_schedule_task` ( `id` c...
2018-08-09 09:24:18
5152
1
转载 ListenableFuture异步多线程代码实现
本文以多次查询数据库为例进行说明。为了能够模拟查询数据库,这里会事先创建一个map,将查询条件和查询结果封装到map中。 在batchExec方法中,传入带有泛型的查询条件集合,核心操作是遍历查询条件集合,将每一个查询条件传给SingleTask(业务实现类),SingleTask必需要实现callable接口,在call方法中实现查询业务,这里使用上面创建好的m...
2018-08-07 11:15:28
4540
转载 Tomcat 连接数与线程池详解
前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这...
2018-07-18 08:54:29
202
原创 mysql截取逗号之间的字符
mysql 截取第4个逗号到第5个逗号之间的字符,思路如下以字符0,1.5,2,0,2.5,2,2,0为例1:先截取0到第5个逗号之间的字符SUBSTRING_INDEX('0,1.5,2,0,2.5,2,2,0,',',5);如图:2:然后从右边截取到第一个出现逗号的位置 position 为负数表示从右边开始截取 SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(...
2018-06-30 14:37:15
11422
2
转载 Intellij IDEA让人爱不释手的快捷键
快速找到Controller方法如果你的项目里有非常多的controller,里面有非常多的http或者resful方法。如何快速找到这些方法呢?这个时候,ctrl+alt+shift+n就可以派上用场了。比如说,你依稀记得入账单相关的接口,都有个bill的url路径,那么使用ctrl+alt+shift+n后,直接输入/bill即可。如何阅读又长又臭的代码由于历史原因,项目里总会存在那种无法理解...
2018-06-12 08:45:18
5335
转载 jdk8 Optional 的正确姿势
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了Optional<User> user = ......if (user.isPresent()) {return user.getOrders();} els...
2018-05-03 17:39:57
209
转载 int与Integer的区别
1 int与Integer的基本使用对比(1)Integer是int的包装类;int是基本数据类型; (2)Integer变量必须实例化后才能使用;int变量不需要; (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; (4)Integer的默认值是null;int的默认值是0。2 int与Integer的深入对比(1)由于Integer变量实际上是...
2018-05-03 17:11:47
203
原创 java反射与动态代理
一、反射JAVA反射机制定义: JAVA反射机制是java程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 反射就是把Java类中的各种成分映射成相应的Java类。Java反射机制主要提供了以下功能: 1、在运行时判断任意一个对象所属的类;2、在运...
2018-05-03 17:10:18
175
转载 Java强引用、软引用、弱引用、虚引用(幻象引用)详解
一、概述:众所周知,Java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软引用等方法。 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就...
2018-05-03 17:07:38
4235
Spark快速大数据分析 (图灵程序设计丛书)-[美] 卡劳(Holden Karau)[美] 肯维尼斯.pdf
2019-07-02
ejb3.0入门经典教程
2009-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人