5 孙_悟_空

尚未进行身份认证

简单可依赖,Just do it.

等级
TA的排名 4k+

数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)

背景对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池。 NOTE: 本文所有测试均是MySQL库测试结论 1:性能方面hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。 2:druid功能最为全面,sql拦截...

2019-07-11 00:30:10

SpringBoot学习笔记四之【自动配置原理与举例】

版本2.1.1springboot只有一个application的启动,我们就从这个启动开始分析,首先我们跟进注解@SpringBootApplication如下:/** Class, interface (including annotation type), or enum declaration */@Target(ElementType.TYPE)@Retention(Ret...

2019-01-26 23:42:14

SpringBoot学习笔记三之【多Profile文件的Maven发布使用】

在springboot工程中配置文件编写的时候可以使用application-{profile}.properties/yml,默认使用application.properties/yml,例如:每个环境配置如下:#application-dev.propertiesserver.port=8080#application-test.propertiesserver.port=...

2019-01-24 23:42:53

SpringBoot学习笔记二之【yml配置举例与语法介绍】

  Resource目录结构说明:static:保存所有的静态资源; js css images;templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf、velocity);application.properties(application.y...

2019-01-06 21:53:30

SpringBoot学习笔记一之【Idea下创建springboot示例、启动原理分析与两种部署启动方式】

1、使用背景首先说下我们为什么使用springboot,原因有以下几点1、快速创建独立运行的spring项目以及与主流框架继承2、使用嵌入式的Servlet容器,无需打成war包3、starters自动依赖于版本控制4、大量的自动配置,简化开发,也可修改默认值5、无需配置xml,无代码生成,开箱即用6、生产环境的运行时应用监控,配合springcloud全家桶7、与...

2019-01-06 00:44:32

RocketMQ学习笔记四之【DefaultMQPullConsumer使用与流程简单分析】

我们首先看下DefaultMQPullConsumer使用例子:package com.swk.springboot.rocketmq;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.rocketmq.client...

2019-01-05 21:59:55

RocketMQ学习笔记三之【DefaultMQPushConsumer流量控制】

上一节我们已经把DefaultMQPushConsumer的大体流程分析了一下,从这节开始我们分析一部分消息处理的细节问题。继续在DefaultMQPushConsumerImpl的pullMessage方法中有个ProcessQueue,待会我们来分析这个队列的作用。 public void pullMessage(final PullRequest pullRequest) { ...

2018-12-24 23:02:45

RocketMQ学习笔记二之【DefaultMQPushConsumer使用与流程原理分析】

版本:    <dependency>    <groupId>org.apache.rocketmq</groupId>    <artifactId>rocketmq-client</artifactId>    <version>4.3.0</v...

2018-12-23 00:29:44

RocketMq学习笔记之一【常用操作命令与简单配置】

【为什么使用RocketMq】1、应用解耦2、流量削峰3、消息分发4、保证最终一致性5、方便动态扩容【RocketMq的角色】producerconsumerBrokerNameServerbroker配置文件:#nameServer 地址,分号分割namesrvAddr=192.168.100.131:9876;192.168.100.132:...

2018-12-18 23:23:57

多线程复习笔记之四【多线程中的异常】

在一个线程组中如果其中一个线程执行报错并不影响其他线程的继续执行,例如:package com.fyw.thread.lock.exception;public class MyThread extends Thread { private String num; public MyThread(ThreadGroup group,String name,String num) ...

2018-12-16 23:54:17

多线程复习笔记之三【多线程中的Lock使用】

Lock1、getHoldCount()查询当前线程保持此锁锁定的个数,也就是调用lock方法的次数2、int getQueueLength返回正等待此锁定的线程估计数,例如有5个线程,1个线程首先执行await,那么调用getQueueLength返回43、int getWaitQueueLength(Condition condition)返回等待与次锁定相关的给定条件...

2018-12-16 23:00:59

多线程复习笔记之二【线程间的通信】

Object.wait:释放锁,当时代码不会往下继续执行,需要等待notify通知,wait(1000)超过1秒自动唤醒Object.notify:不释放锁,需要等到同步代码块执行完毕,如果没有wait线程,notify命令将被忽略。condition如果有多个线程处于等待状态,我想唤醒指定的一个线程,Object.notify是唤醒随机一个是无法实现的。condition实现过程如下...

2018-12-15 17:53:51

多线程复习笔记之一【关键属性与常用关键字概述】

1、并发和并行的区别?并发可以发生在一个或多个CPU,同时处理多个任务,多个任务之间可以进行切换执行;并行只能发生在多核CPU,一核对应一个任务同时运行2、线程和进程之间的区别?a) 一个程序至少有一个进程,一个进程至少有个线程b) 进程在执行过程中拥有独立的内存单元,线程之间的内存却是共享的c) 线程不能独立运行,必须依赖进程举个例子:我们执行一个Main方法,里面其...

2018-12-15 17:47:40

多线程设计模式:Master-Worker模式

Master-Worker是常用的并行计算模式。它的核心思想是系统由两类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后,会将结果返回给Master,由Master作归纳总结。其好处就是能将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量。处理过程如下图所示:Master进程为主要进...

2018-11-21 22:31:19

java定时器之Timer使用与原理分析

Timer和TimerTaskTimer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。【使用举例】【schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行】...

2018-11-07 16:10:15

synchronized的底层优化

Synchronized底层是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。J...

2018-11-06 23:25:27

ReentrantLock原理

ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。CAS:CompareandSwap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe...

2018-11-04 20:18:23

线程间的通信wait与notify

wait()方法wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。当前的线程必须拥有当前对象的monitor,也即lock,就是锁。线程调用wait()方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify()或者notifyAll() 方法),这样它才能重新获得锁的拥有权和恢复执行。要确保调用wai...

2018-10-31 22:48:09

Java中的自旋锁

自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。Java如何实现自旋锁?下面是个简单的例子:publicclassSpinLock{priva...

2018-10-25 22:20:41

10、销售月饼的最大利润

题目描述月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖...

2018-09-06 22:53:07

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!