4 柏油

尚未进行身份认证

我要认证

不负冬日春晓 不负青春韶华

等级
TA的排名 7k+

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

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

2020-09-20 16:50:51

Kafka请求处理流程

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

2020-08-11 22:11:41

FutureTask源码分析

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

2020-08-08 16:37:00

ThreadPoolExecutor线程池源码分析

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

2020-08-07 00:00:05

可重入读写锁ReentrantReadWriteLock源码分析

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

2020-08-03 19:05:47

可重入锁ReentrantLock源码分析

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

2020-08-03 01:10:53

JAVA并发基石之AQS源码分析

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

2020-08-02 13:15:12

Spring容器之refresh方法源码分析

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

2020-07-30 22:36:25

Spring依赖处理过程源码分析

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

2020-07-29 08:54:39

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

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

2020-07-28 09:04:31

Spring bean的加载过程源码分析

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

2020-07-27 00:38:24

ThreadLocal源码分析

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

2020-07-25 14:12:36

观察者模式设计-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

Guava Cache源码分析

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

2020-07-18 19:16:08

一次线上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

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 22:32:39

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

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

2019-09-05 07:53:53

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

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

2019-09-02 23:32:43

一台机器配置两个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

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

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

2019-07-06 23:14:26

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。