03 2020 档案

摘要:官方文档:http://hc.apache.org/httpcomponents-client-4.5.x/index.html 本文主要大致介绍HttpClient(基于HttpClient 4.5)及如何使用,附HttpUtil工具类。 一、HttpClient使用流程 1、创建HttpClie 阅读全文
posted @ 2020-03-26 17:43 杨岂 阅读(1735) 评论(0) 推荐(0) 编辑
摘要:执行流程: 源码分析 1、SpringBoot容器启动类,xxxApplication springApplication.run(args); 2、SpringApplication#run /** * Run the Spring application, creating and refres 阅读全文
posted @ 2020-03-26 15:18 杨岂 阅读(1168) 评论(0) 推荐(0) 编辑
摘要:一、自旋锁和自适应自旋锁 自旋锁: 互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要操作系统切换CPU从用户态转到核心态中去完成。这些操作给操作系统的并发性能带来了很大的压力。 如果同步代码块中的内容过于简单,状态切换消耗的时间有可能比用户代码执行的时间还要长。 在许多场景中,共 阅读全文
posted @ 2020-03-23 18:22 杨岂 阅读(260) 评论(0) 推荐(0) 编辑
摘要:一、饿汉式 1、在static属性中实例化(类加载的初始化阶段实例化(在准备阶段分配内存)) 2、在static代码块中实例化(类加载的初始化阶段实例化) 3、枚举实现(https://www.cnblogs.com/yangyongjie/p/11056454.html) 二、懒汉式 1、同步方法 阅读全文
posted @ 2020-03-22 23:23 杨岂 阅读(4938) 评论(0) 推荐(0) 编辑
摘要:一、需求背景 对外提供服务的接口需要统一做验签和参数合法性校验。每个接口的加签算法相同,不同的是参数的不为空的要求不同。 要求,在controller层外做校验,校验不通过直接返回,不进入controller层。 引入jar包 1、Spring <dependency> <groupId>org.s 阅读全文
posted @ 2020-03-21 00:22 杨岂 阅读(1220) 评论(0) 推荐(0) 编辑
摘要:需求背景 有时候我们需要某个请求下的所有的traceId都是一致的,以获得统一解析的日志文件。便于排查问题。 为每一个请求分配同一个traceId据我所知有两种方式:MDC和ThreadLocal,MDC的内部实现也是ThreadLocal,下面分别介绍这两种方式。 一、MDC MDC(Mapped 阅读全文
posted @ 2020-03-19 12:46 杨岂 阅读(8590) 评论(0) 推荐(1) 编辑
摘要:kafka官方文档:https://kafka.apache.org/documentation/#quickstart 1、main方法中(1.0以上) import org.apache.kafka.clients.consumer.Consumer; import org.apache.kaf 阅读全文
posted @ 2020-03-18 21:15 杨岂 阅读(6941) 评论(0) 推荐(0) 编辑
摘要:OutOfMemoryError 除了程序计数器外,其余的几个运行数据区都有可能发生OutOfMemoryError(OOM)的可能。 因此在遇到OOM的问题时应能根据异常的信息快速定位到时哪个内存区域的内存溢出,知道什么样的代码会导致OOM,以及该如何处理。 1、Java堆溢出 Heap堆是OOM 阅读全文
posted @ 2020-03-18 09:53 杨岂 阅读(3228) 评论(0) 推荐(0) 编辑
摘要:JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。 JVM运行时数据区: 1、堆 虚拟机中最大的一块内存区域,是线程共享的内存区域,用于存放对象的实例,数组内存在此分配(所有的对象实例和数组都在堆上分配),可能划分出多个线程私有的分配缓冲区(Thread 阅读全文
posted @ 2020-03-18 09:48 杨岂 阅读(285) 评论(0) 推荐(0) 编辑
摘要:Java会对内存进行自动分配与回收管理,使上层业务更加安全,方便地使用内存实现程序逻辑。 垃圾回收的目的是清除不再使用的对象,自动释放内存。 垃圾收集器与内存分配策略 栈的内存随着方法的结束和线程结束自动回收,因此Java堆和方法区是垃圾收集器所关注的内存区域 判断对象是否可以回收 1、 引用计数法 阅读全文
posted @ 2020-03-18 09:45 杨岂 阅读(177) 评论(0) 推荐(0) 编辑
摘要:项目描述:定时任务扫描300万条数据库记录,并对每条记录执行检查操作(调用其他服务接口,发送短信等)。 版本迭代记录: 1)第一版:一次查询全部300万条数据放在JVM内存中,没有使用线程池,使用固定20个线程,每个线程循环不停的从内存中取一条数据执行,直到所有数据全部执行完为止。 这种方式耗时大约 阅读全文
posted @ 2020-03-17 09:57 杨岂 阅读(248) 评论(0) 推荐(0) 编辑
摘要:乐观锁和悲观锁是两种思想,并不局限于编程语言或数据库。 一、概念 乐观锁: 乐观锁在操作数据时持乐观态度,认为别的线程不会同时修改数据。因此乐观锁不会加锁,只有在执行更新的时候判断一下在此期间其他线程是否修改了数据;如果其他线程修改了数据则放弃操作,否则执行操作。 悲观锁: 悲观锁在操作数据时持悲观 阅读全文
posted @ 2020-03-16 18:51 杨岂 阅读(178) 评论(0) 推荐(0) 编辑
摘要:计算机网络由若干结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是计算机、集线器、交换机或路由器等。 网络之间还可以通过路由器互连起来,这就构成了一个覆盖范围更大的计算机网络,这样的网络称为互连网。 网络把许多计算机连接在一起,而互连网则把许多网络通过路由器连接在一起,与网络相 阅读全文
posted @ 2020-03-15 10:16 杨岂 阅读(649) 评论(0) 推荐(0) 编辑
摘要:不使用连接池时 我们每次操作数据库,都需要先与建立连接,操作完成之后断开连接 建立连接是一个耗时的操作,每次大约花费50ms左右,另外系统需要分配内存资源。 当请求并发量很高时,频繁的进行数据库连接操作必然会占用很多的系统资源,增加请求耗时 另外,如果程序出现异常,获取的连接没有断开,会造成内存泄漏 阅读全文
posted @ 2020-03-13 11:04 杨岂 阅读(2514) 评论(0) 推荐(0) 编辑
摘要:一、线程池 线程池适合处理的任务:执行时间短、工作内容较为单一。 合理使用线程池带来的好处: 1)降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的开销 2)提高响应速度:当任务到达时,任务可以不用等待线程创建就能立即执行 3)提高线程的可管理性:可以统一对线程进行分配、调优和监控 4)提供 阅读全文
posted @ 2020-03-05 21:46 杨岂 阅读(613) 评论(0) 推荐(0) 编辑
摘要:并发编程的目的是为了充分利用资源让程度运行的更快,原则是,将代码中串行执行的部分变成并发执行。 并发:指多线程交替执行 / 并行:指同时执行 1、多线程面临的挑战 并发编程的目的是为了让程序运行的更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在使用多线程时需面临以下的几个挑战: 1) 阅读全文
posted @ 2020-03-03 15:27 杨岂 编辑

点击右上角即可分享
微信分享提示