自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

持之以恒

旧时王谢堂前燕,飞入平常百姓家

  • 博客(511)
  • 资源 (7)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Mysql更新某个字段时datetime类型的字段都被更新成当前时间

问题原因:mysql设置方面导致,每当更新一个数据时, datetime类型的字段都会被更新成当前最新时间解决方法很简单:选择对应的表,右键修改表结构,选中相关字段,去掉以下勾选的即可(用的是navicat图形界面,datagrip似乎不会展示出来)下面吐槽下这个恶心的配置!!!新项目第一次使用ktorm这个orm框架,刚开始出现这个问题时怀疑可能是代码中某个地方写的有问题,debug之后发现这个框架最终执行的sql语句是符合预期的(只会修改相关字段),,这就很苦恼了!(还有这灵异事件.

2020-09-20 16:50:51 120

原创 Kafka请求处理流程

一起来探索 kafka是如何进行高效的保存队列中的请求,来确保Broker的高性能处理总体流程图主要涉及几个关键组件:SocketServer、Acceptor、Processor、RequestChannel、KafkaRequestHandler、KafkaApisSocketServer此组件是 Kafka 网络通信层中最重要的子模块。它下辖的 Acceptor 线程、Processor 线程和 RequestChannel 等对象,都是实施网络通信的重要组成部分Acceptor 线程类

2020-08-11 22:11:41 93

原创 FutureTask源码分析

什么是Future?从字面上来看,Future表示将来的意思,也就是说现在执行某个任务可能是不能立即拿到返回值,在将来的某个时间点 当task执行完毕也就可以拿到了;那么这个返回值在哪呢?就封装在future中(实现类)Future 最主要的作用是,比如当做一定运算的时候,运算过程可能比较耗时,有时会去查数据库,或是繁重的计算,比如压缩、加密等,在这种情况下,如果我们一直在原地等待方法返回,显然是不明智的,整体程序的运行效率会大大降低。我们可以把运算的过程放到子线程去执行,再通过 Future 去控制子

2020-08-08 16:37:00 64

原创 ThreadPoolExecutor线程池源码分析

为什么要使用线程池,有哪些好处?每个任务都创建一个线程带来的问题反复创建线程系统开销比较大,每个线程创建和销毁都需要时间,如果任务比较简单,就有可能导致创建和销毁线程消耗的资源比线程执行任务本身消耗的资源还要大过多的线程会占用过多的内存等资源,还会带来过多的上下文切换,同时还会导致系统不稳定通过线程池解决以上问题针对反复创建线程开销大的问题,线程池用一些固定的线程一直保持工作状态并反复执行任务针对过多线程占用太多内存资源的问题,线程池会根据需要创建线程,控制线程的总数量,避免占用过多内存资

2020-08-07 00:00:05 85

原创 可重入读写锁ReentrantReadWriteLock源码分析

写在前面ReentrantReadWriteLock的基础是AQS,因此最好先掌握AQS的原理AQS原理分析ThreadLocal原理分析为什么出现读写锁?相比于ReentrantLock具有完全互斥排他的效果,也就是同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。虽然这样做保证了实例变量的线程安全性,但并行效率是比较地下的;所以读写锁的出现,将读、写加锁操作分开处理,可以加快运行效率;读写锁适用场合相比于 ReentrantLock 适用于一般场合,R

2020-08-03 19:05:47 50

原创 可重入锁ReentrantLock源码分析

写在前面本文主要是针对ReentrantLock实现AQS的基础上的分析以及对Condition的相关分析因此建议先了解AQS的实现原理,对ReentrantLock的原理便很容易理解了AQS相关源码分析什么是可重入锁?可重入锁是指当某个线程已经持有了这把锁,但是某个时刻,这个线程还要尝试再次拿到这把锁,支持这种可重入的实现就是可重入锁;以ReentrantLock可重入锁来看,其state表示重入次数,当想要再次拿到这把锁的时候,state+1;当想要释放这把锁的时候state-1,因此

2020-08-03 01:10:53 46

原创 JAVA并发基石之AQS源码分析

AQS是什么?全称AbstractQueuedSynchronizer 抽象队列同步器,是java.util.concurrent.locks包下的基础组件,是用于构建锁和同步器的框架,通俗的理解就是多线程环境下,AQS封装了一揽子对临界资源线程安全的操作,以ReentrantLock来看:获取锁?成功则锁住,否则放入FIFO队列等待获取锁(线程挂起或者说阻塞),锁的释放等这些底层操作都由AQS封装;许多同步器都可以通过AQS很容易并且高效的构造出来AQS在Java并发编程中扮演什么角色?jav

2020-08-02 13:15:12 101

原创 Spring容器之refresh方法源码分析

BeanFactory作为IOC容器的核心接口,ApplicationContext接口包含了BeanFactory的所用功能来看看两者关系:既然是继承关系,那么ApplicationContext包含了BeanFactory的所用功能也就不足为奇了ApplicationContext作为Spring上下文的关键接口,除了BeanFactory的功能,还包括各种环境、参数、BeanFactoryPostProcessors后处理器、事件以及单例bean的初始化等一系列操作,其中以refresh方法为s

2020-07-30 22:36:25 195

原创 Spring依赖处理过程源码分析

从上次分析@Autowired和@Resource注解源码分析中预留了一个问题,其在第一阶段已经将注解信息封装在了InjectionMetadata数据中,在第二阶段将根据InjectionMetadata数据进行一系列的依赖注入,今天就接着开始从这里分析吧~上篇文章对@Autowired和@Resource的源码分析先来看看一个小例子 public class AnnotationDependencyInjectionResolutionDemo { @Autowired

2020-07-29 08:54:39 40

原创 Spring @Autowird注解和@Resouce注解源码分析

从使用上来看@Autowird和@Resource注解的区别两个注解都可用于属性或者方法上的注入;@Autowired是默认按照类型装配, @Resource默认是按照名称装配从提供来源看:@Autowired是由Spring提供@Resource是有java提供,在包javax.annotation下从spring处理源看:@Autowired是由AutowiredAnnotationBeanPostProcessor后处理器进行处理@Resource是由CommonAnnotat

2020-07-28 09:04:31 78

原创 Spring bean的加载过程源码分析

spring-beans模块囊括了DI、IOC等经典实现;Bean密切相关的接口BeanFactory,与IOC容器、依赖注入、依赖查找等 有着千丝万缕的关系~其中默认实现类DefaultListableBeanFactory覆盖了这些功能,也可以通俗的理解DefaultListableBeanFactory实例就是一个IOC容器,bean的生命周期都围绕着它来完成 public class DefaultListableBeanFactory extends AbstractAuto.

2020-07-27 00:38:24 80

原创 ThreadLocal源码分析

ThreadLocal源码分析什么是ThreadLocal?可以看做线程内局部变量,也就是线程间隔离,仅在当前线程范围内有效。比如我们通常都会定义全局范围内的普通变量全局范围变量就是临界资源,那就会有多线程安全问题;但是如果定义的是ThreadLocal变量,每个线程都持有参数副本,各自间互不妨碍,也就没有多线程问题什么时候用ThreadLocal?比如在同一个线程内 不同逻辑间需要共享数据(但又无法通过传值来共享数据),或者在同一个线程内为避免重复创建对象 而希望数据重用等情况.如何使

2020-07-25 14:12:36 87

原创 观察者模式设计-Guava EventBus源码分析

EventBus源码分析观察者模式观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subscribe Design Pattern)。在 GoF 的《设计模式》一书中,它的定义是这样的:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated auto

2020-07-24 08:42:55 83

原创 Guava Cache源码分析

缓存缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存本地缓存:也就是在进程的内存中进行缓存,比如最简单的Map来实现,也可以使用Guava Cache和Ehcache这样的工具来实现;本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展。分布式缓存: 一般具有良好的水平扩展能力,可以很好的解决以上问题,对较大数据量的场景也能应付自如。缺点就是需要进行远程请求,性能不如本地缓存多级缓存

2020-07-18 19:16:08 67

原创 一次线上OOM(java.lang.OutOfMemoryError: GC overhead limit exceeded)

环境16G运行内存,PostgreSql数据库Java8默认收集器Parallel Scavenge, 即新生代 PS-Scavenge, 老年代 PS-MarkSweep(Parallel-Scavenge收集器架构中本身的老年代收集器,与Serial Old的实现非常接近)原因有一个定时任务, 在应用启动的时候运行,由于查询时间范围较大, 数据量13w多(大小50-100k/每条...

2020-03-04 16:24:32 174

原创 Charset编码问题导致的中文乱码

环境:POST方法、Content-Type: application/x-www-form-urlencoded;charset=utf-8(key=val&key2=val2形式) 调用接口:commons-httpclient-3.1 服务接口:springboot-1.4.2.release/spring-web-4.3.4.release场景:通常在对接第三方...

2019-09-24 23:40:10 370

原创 分布式RPC框架xxl-rpc的源码分析

目前版本:1.4.2-SNAPSHOT官网概述:XXL-RPC 是一个分布式服务框架,提供稳定高性能的RPC远程服务调用功能。拥有"高性能、分布式、注册中心、负载均衡、服务治理"等特性。现已开放源代码,开箱即用。一、rpc框架一般会提供的功能1、服务提供端(Provider)2、服务消费端(Invoker):通过生成代理对象,封装底层通信细节 完成类似“本地方法”的调用。3、注...

2019-09-05 08:18:54 283

原创 分布式注册中心xxl-registry源码分析

官网概述:XXL-REGISTRY 是一个轻量级分布式服务注册中心,拥有"轻量级、秒级注册上线、多环境、跨语言、跨机房"等特性。现已开放源代码,开箱即用。基本思路:注册中心的基本的功能一般包括服务注册(registry)、服务发现(discovery)、服务摘除(remove)等;然后就涉及到服务宕机后能否及时摘除、如何高效的服务发现、注册中心数据备份等;这些任务由注册中心的服务端完成(ser...

2019-09-02 23:32:43 151

原创 一台机器配置两个github账号、ERROR: Permission to user1/repo.git denied to user2问题

背景:网上关于一台机器配置两个github账号的博文已经很多了,所以本片文章不打算详细罗列配置信息;主要讲讲因粗心遇到的问题,帮助遇到相同问题的朋友快速定位并解决。具体配置网上找了链接以供参考:https://blog.csdn.net/formularoom/article/details/725881641、SSH通信方式:为避免每次通信需要输入用户名和密码的操作,使用ssh(非对...

2019-07-07 14:58:49 228

原创 Java签名验证、request body数据多次读取(request body数据用以签名时注意问题)、Content-Type

问题背景:最近对接第三方接口,出现了签名问题;起初接触的签名一般将url参数、请求头中的参数用以签名, 因此当遇到把body数据用以签名时走了一些弯路; 起初想法是 我这边将数据通过工具将对象转化为json字符串,对方通过框架将数据映射成实体对象,然后将实体对象转化为json,再取出url参数、请求头参数 按相同的方法进行签名。这种方式问题很明显,1、当两方使用不同的json转化工具时,转化的字符...

2019-07-06 23:14:26 1833

原创 高并发流量限制-计数器&漏桶&令牌桶

背景:通常在高并发访问的情况下,会通过限流的手段来控制流量问题,以保证服务器处于正常压力下,一般对超过的部分不做处理,即丢弃。限流的手段通常有计数器、漏桶、令牌桶。注意限流和限速(所有请求都会处理)的差别,视业务场景而定1、计数器:在一段时间间隔内(时间窗),处理请求的最大数量固定,超过部分不做处理2、漏桶:漏桶大小固定,处理速度固定,但请求进入速度不固定(在突发情况请求过多时,会丢弃...

2018-11-04 17:43:21 2342 1

原创 JAVA8 Lambda表达式 高级集合类&收集器

lambda表达式提供了很多的集合类和收集器来简化编程,使之更加方便和美观,所以这里介绍一些常用的集合类和收集器来处理繁杂的代码。github的demo地址:https://github.com/BradenLei/lambda1、方法引用:形如User::getName,TreeSet::new 等价于user.getName(), new TreeSet<>();...

2018-10-28 18:06:17 724

原创 Spring切面编程-使用AspectJ日志处理

1、背景:AspectJ作为AOP一大应用已经广为人知了,具体的应用场景也很多,如:日志处理、执行目标方法前做逻辑判断、事物控制等等;其实质大都是抽取出各类、方法中重复的、与业务逻辑无关的代码,形成一个切面(Aspect, 也就是一个类),在切面中定义切点(可以理解为将代码织入到那些 我从方法中提取出重复代码的位置处,一个切点可能包含多个连接点)、连接点(也就是切点的一个具体)、通知等,这个一来就...

2018-10-21 17:19:50 273

原创 反射及利用反射复制对象的demo

反射是java编程的灵魂,在用反射之前有几个类需要了解:Class,Method,Feild,Constructor,在demo中演示这些类中比较常用的方法,然后用反射实现copy对象的封装类来说明反射的微妙。1、常用方法:public class ReflectDemo { /** Class */ @Test public void testClass() ...

2018-10-14 17:27:09 214

原创 JAVA8 核心函数式接口

1、java8提供的函数式接口基本能满足我们的任务开发package com.dw;import org.junit.Test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.*;import java.util.stream....

2018-10-07 09:03:54 1685

原创 生产者消费者模型

描述:共享变量池大小为5,生产者从池中放入一个物品,消费者从池中拿去一个物品。一:定义共享资源:public class PublicResources { private int count = 0; // max = 5 public void reduce() { //消费者消费 synchronized(this) { w...

2018-06-29 23:00:06 304

原创 线程间的协同(生成者/消费者模型)

线程间除了同步互斥使用共享代码块或者共享资源外,有时需要线程间的通信来控制共享信息。生产者/消费者模型就是很好的例子;提供一个资源池,生产者向里面生产资源、消费者负责消费;资源池满,生产者线程等待,消费者消费资源后调用特定方法唤醒生产者线程;反之,资源池为空,消费者线程等待,生产者向资源池生产资源后,调用特定方法唤醒消费者线程。这里实现使用java中 显示锁 Lock锁定共享变量,生产者write...

2018-06-20 18:42:33 151

原创 模拟HashSet底层实现

GitHub源码地址(https://github.com/BradenLei/MyHashSet)1、基本概念:1)HashSet和HashMap唯一的不同之处在于,HashMap以键值对作为一个条目存储在散列表中,而HashSet则以元素的形式存储在散列表中;HashSet相当于HashMap的简化版。2)MySet继承自java.lang.Iterable,实现了其方法,故MyHashSet...

2018-06-18 21:58:00 420

原创 模拟HashMap底层实现

1、概念:1)散列:使用一个散列函数,将一个键映射到一个索引上。2)散列函数:将键映射到散列表中的索引上的函数称为散列函数。3)冲突:当两个键映射到散列表中的同一个索引上,冲突发生a:使用开发地址法解决处理冲突(线性探测、二次探测法、再哈希法)b:使用链地址法处理冲突:将具有同样的散列索引的条目都放在一个位置,每个位置使用一个桶来放置多个条目;通常使用LinkedList来实现一个桶。4)装填因子...

2018-06-18 09:15:58 357

原创 模拟平衡二叉查找树底层实现(AVL)

1、基本概念及操作:1)平衡二叉查找树:在二叉查找树的基础上满足平衡因子为-1,0,1的树结构2)平衡因子:右子树的高度减去左子树的高度;-1表示左偏重,+1表示右偏重3)重新平衡数:从AVL树中插入或者删除一个元素后,如果树变得不平衡了,执行一次旋转操作来重新平衡该树,有四种方式:LL旋转、RR旋转、LR旋转、RL旋转以 LL说明:两个L表示两次左偏重4)AVL树的设计:由于AVL树是二叉查找树...

2018-06-17 16:44:15 162

原创 模拟二叉查找树底层实现

二叉查找树:当前结点的左子树所有结点值小于当前结点值,而右子树所有结点值都大于当前结点实现方法:search()、insert()、delete()、前中后序遍历等。其中delete过程稍稍复杂。接口:package binary;public interface Tree<E> extends Iterable<E>{ /**查找某个元素是否存在*/ pub...

2018-06-16 16:44:29 120

原创 堆、队列、优先队列底层实现

1、通过ArrayList实现大根堆:堆:有大根堆和小根堆,对于大根堆来说,其左右子元素比根元素小1)添加操作:首先将它添加到堆的末尾,然后按以下方式建树:将最后一个结点作为当前结点while(当前结点大于它的父节点){将当前结点和它的父结点交换;现在当前结点往上进一个层次;}2)删除操作:删除之后将最后一个结点成为当前根结点,然后维护该数,其余操作和添加操作类似package shixian;...

2018-06-15 23:55:00 2136

原创 模拟栈的底层实现(用数组线性表实现)

由于栈只允许在栈顶进行插入与删除操作,所以用数组线性表来实现栈比用链表来实现效率更高:接口:package shixian;public interface MyStack<E> { /**返回栈的大小*/ public int size(); /**出栈操作*/ public E pop(); /**进栈操作*/ public void push(E e); ...

2018-06-11 13:46:19 196

原创 模拟ArrayList、LinkedList底层实现

1、MyList接口:package shixian;public interface MyList<E> extends Iterable<E> { /**添加一个新元素在list末尾*/ public void add(E e); /**添加一个新元素在指定的索引处*/ public void add(int index,E e); /**clear...

2018-06-09 17:58:34 114

原创 泛型-通配泛型、消除泛型

一:通配泛型有三类:<?>非受限通配、<? extends T>受限通配 、<? super T>下限通配案例一:package fanxin;public class WildCardNeedDemo { public static void main(String[] args) { GenericStack<Integer&gt...

2018-05-27 08:36:44 651

转载 sudo apt-get install mysql-server 安装不上

1、问题:mysql安装不上,出现报错 mysql-server depends on mysql-server-5.5; however:  Package mysql-server-5.5 is not configured yet.dpkg: error processing mysql-server-5.5 (--configure): subprocess installed post-...

2018-05-26 16:14:27 4418

原创 泛型-泛型类、接口、方法

为什么要使用泛型?优点在哪里?使用java泛型的动机在编译时检测出错误。一、泛型方法可以为静态方法定义为泛型类型!1、非受限泛型:<T> 等价于受限泛型<T extends Object>public class GenericMethodDemo { public static void main(String[] args) { Integer[] i...

2018-05-25 12:37:39 646

原创 socket编程1(linux环境下)

描述:有服务端(server)客户端(client)程序,要求实现,服务端从文件中读取文件信息,一次读取10个字节,然后发送到客户端显示,每次读取之后睡眠1秒钟。server.c:/*server.c*/#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#inc...

2018-05-24 21:47:54 223

原创 2017蓝桥杯C语言B组(7日期问题)

标题:日期问题小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。  比如02/03/04,可能是2002年03月04日、2004年02月...

2018-03-29 20:00:39 828

原创 hdu 1431素数回文

素数回文Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21780    Accepted Submission(s): 5081Problem Descriptionxiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又...

2018-03-28 13:34:46 350

channel_v3.json

sublime text3在下载package install无反应,原因是: perforences->package setting->package controll->settings-default下有"https://packagecontrol.io/channel_v3.json",该文件由于网络缓慢导致;因此先现在到本地,然后在 perforences->package setting->package controll->settings添加绝对路径即可

2019-01-21

google chrome插件, 用于yapi的接口测试所需插件-2.8.0

cross_request, chrome插件, 用于yapi的接口测试所需插件-2.8.0

2019-01-20

sql server2008 jdbc驱动

sql server2008 jdbc驱动、 sql server2008 jdbc驱动、

2018-01-03

hibernate注解开发所需的jar包

hibernate注解开发所需的jar包 包括 ejb3-persistance.jar、hibernate-commons-annotations.jar、hibernate-annotations.jar

2017-12-30

cglib-3.1.jar 、asm-6.0.jar

Mabatis 使用懒加载所需要的两个jar包 cglib 和 asm,最新版本

2017-11-28

jackson-core-2.7.4.zip

jackson-core-2.7.4.zip 包含了三个jar包,jackson-core-2.7.4.zip 包含了三个jar包

2017-10-16

SpringMVC开发jar包

SpringMVC开发所需jar包,包含spring4.3.10发布的版本和hibernate4.1.4发布的版本

2017-10-07

柏油的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除