- 博客(52)
- 资源 (14)
- 收藏
- 关注
原创 并发编程学习---多线程学习流程
目录为什么要用多线程如何实现多线程使用多线程带来哪些问题如何解决底层实现1. 为什么要用多线程多线程出现的目的:让程序运行更快需要等待网络、I/O响应导致耗费大量的执行时间,可以采用异步线程的方式来减少阻塞通过多线程达到并行执行,提升效率2. 如何实现多线程多线程:Thread、Runable、Callable\Funture线程池:Executor框架具体...
2019-01-02 17:07:56 228
转载 一个完整的HTTP请求过程
目录交互流程域名解析与服务器建立连接OSI七层模型TCP/IP四层模型五层体系结构三种模型结构数据在各层之间的传递过程服务器响应HTTP请求, 浏览器得到html代码浏览器解析html代码,并请求html代码中的资源(如js、css、图片)浏览器对页面进行渲染呈现给用户1. 交互流程域名解析与服务器建立连接服务器响应HTTP请求, 浏览器得到html代码...
2019-01-07 15:59:39 1519
转载 java学习---序列化
目录序列化和反序列化用途java实现流程java实现demo序列化对象序列化工具接口序列化实现类测试类java序列化优缺点相关介绍serialVersionUID 的作用serialVersionUID生成方式静态变量序列化父类的序列化Transient 关键字序列化算法优劣的两个指标其他序列化方式XML 序列化框架JSON 序列化框架Hes...
2019-01-03 17:52:57 341
转载 并发编程学习---Executor框架
目录简介Executor框架的两级调度模型Executor框架的组成ExecutorService生命周期Executors工具类介绍1. 简介在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简...
2019-01-02 17:06:52 134
转载 并发编程学习---java中的线程池
目录简介ThreadPoolExecutor的execute()运行流程线程池的创建向线程池提交任务合理配置线程池线程池监控1. 简介Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度当任务到达时,...
2019-01-02 17:06:21 176
原创 并发编程学习---常用工具类介绍
1. 目录ThreadLocalCountDownLatchCyclicBarrierSemaphoreExchangerAtomicInteger2. ThreadLocal2.1 介绍:即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值...
2018-12-28 17:03:09 133
转载 并发编程学习---Fork/Join框架
目录什么是Fork/Join框架介绍举例计算1+2+…+10000Fork/Join框架理论算法工作窃取算法工作窃取运行流程图优缺点Fork/Join框架设计流程ForkJoinTaskForkJoinPoolFork/Join框架的使用运用方式实例Fork/Join框架的异常处理1. 什么是Fork/Join框架1.1 介绍Fork...
2018-12-28 16:59:35 161
转载 并发编程学习---各种锁名词解释
1. 目录重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁自旋锁公平锁/非公平锁偏向锁/轻量级锁/重量级锁总线锁/缓存锁2. 重入锁指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁.synchronized和ReentrantLock都是可重入锁3. 独享锁/共享锁3.1 独享锁:指该锁一次只能被一个线程所持有ReentrantLock和...
2018-12-28 16:51:21 277
转载 并发编程学习---双重检查锁定与延迟初始化
目录由来非线程安全懒汉式单例demo存在问题升级版懒汉式单例demo存在问题双重检查版本懒汉式单例demo存在问题原因分析解决方案不允许重排(volatile)允许重排,但不允许其他线程"看见"这个重排序1. 由来在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始...
2018-12-28 16:46:28 156
转载 并发编程学习---内存屏障
目录CPU内存模型CPU执行乱序原因cpu 内存屏障作用分类JMM内存屏障作用分类1. CPU内存模型2. CPU执行乱序原因由于在多CPU的机器上,每个CPU都存在cache,当一个特定数据第一次被特定一个CPU获取时,由于在该CPU缓存中不存在,就会从内存中去获取,被加载到CPU高速缓存中后就能从缓存中快速访问。当某个CPU进行写操作时,它必须确保其他的...
2018-12-28 16:32:42 356
转载 并发编程学习---ReentrantLock源码解读
目录AQS简介AQS同步队列结构AQS获取同步状态的流程图ReentrantLockReentrantLock类图ReentrantLock运用demo公平锁(FairSync)获取锁的调用过程公平锁总结释放锁的调用过程非公平锁(NonfairSync)获取锁调用过程公平锁和非公平锁差别1. AQS简介ReentrantLock内部主要依赖...
2018-12-28 16:28:38 233
原创 并发编程学习---重排序
目录目的简介数据依赖性重排序分类重排序影响1. 目的在不改变程序执行结果的前提下,来尽可能提高并行度2. 简介指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段3. 数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性名称代码示例说明写后读a = 1;b = a;写一个变量之后,...
2018-12-28 16:16:47 313
转载 并发编程学习---Java并发机制的底层实现原理
目录序言volatile介绍如何确保可见性举例synchronized应用方式实现原理锁存在哪里,存储什么信息锁的升级和比对原子操作实现原理cpu层面java层面CAS实现原子操作存在三个问题序言:Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的...
2018-12-28 16:16:08 218
转载 并发编程学习---并发编程的挑战
目录序言上下文切换什么叫上下文切换上下文切换次数检测(vmstat)上下文切换时间检测(lmbench3)如何减少上下文切换死锁产生条件避免死锁资源限制的挑战什么是资源限制资源限制引发的问题如何解决资源限制的问题在资源限制情况下进行并发编程序言并发编程的目的是为了让程序运行的更快,但是并不是启动更多的线程,就能让程序最大限度的并发执行。在进行并...
2018-12-28 16:12:53 126
转载 并发编程学习---JMM及内存操作
目录作用目的简介线程、工作内存、主内存交互关系线程、工作内存、主内存交互操作操作规则1. 作用定义了一种java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台上都能达到的一致的内存访问效果。2. 目的定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。3. 简介规得了所有的变量都存储在主内存中,每...
2018-12-28 16:12:13 336
原创 并发编程学习---多线程的实现及状态说明
目录多线程简介进程线程多线程实现方式继承Thread实现Runable接口实现Callable接口线程状态三种阻塞多线程状态流程1.多线程简介:多线程并发编程是Java编程中重要的一块内容,本文主要讲了java中多线程的实现方式、线程状态切换。在这之前,首先让我们来了解下在操作系统中进程和线程的区别1.1 进程每个进程都有独立的代码和数据空间(进程...
2018-12-27 17:28:15 321
原创 spring boot学习---自定义starter pom
1. 简介starter pom就是Spring AutoConfiguration 自动配置,由spring boot提供的基于spring4.X的基于条件来配置bean功能。2. Spring AutoConfiguration机制SpringBoot启动时,扫描 classpath 所有Jar中 META-INF/spring.factories文件,读取org.springframe...
2018-12-27 17:21:54 449
转载 压测工具---ContiPerf
目录简介使用引入jar包测试用例PerfTest参数说明Required参数说明名词解释:TP90报告查看指标1. 简介ContiPerf 是一个轻量级的测试工具,基于JUnit 4 开发。可以指定在线程数量和执行次数,通过限制最大时间和平均执行时间来进行性能测试,并且可以生成report,帮助做性能分析。2. 使用2.1 引入jar包testCompi...
2018-12-27 17:04:59 532
转载 spring boot学习---过滤器 监听器 拦截器
目录应用场景环境准备过滤器监听器拦截器链路说明运行结果过滤器和拦截器比较1. 应用场景在开发过程中,经常碰到系统启动的数据初始化、统计在线人数、权限校验、日志记录等业务需求。这些操作和具体业务没有关联,都是系统层面的功能,这些功能的实现可能就是会用到过滤器、监听器、拦截器这些功能2. 环境准备2.1 引入jar包compile('org.projectlombok:l...
2018-12-27 16:56:24 180
转载 mybatis学习---缓存
目录mybatis作用域一级缓存二级缓存1.mybatis作用域作用域作用范围SqlSessionFactoryBuilder创建SqlSessionFactory对象,创建完成后自身销毁方法作用域SqlSessionFactory应用中一直存在,用于创建SqlSession应用作用域SqlSession每个线程都有一个自身的SqlSess...
2018-12-27 16:44:41 121
原创 分布式事务-Atomikos解决多数据源事务问题
目录场景多数据源配置引入Atomikos测试service1. 场景:经常会碰到这种应用场景,比如说下订单的操作,有需要修改订单库中信息,又需要修改产品库中库存,这一个操作就是需要一次性操作两个数据源的情况,这种情况的事务控制可以使用Atomikos框架进行实现2. 多数据源配置参考:http://www.chengqj.com/info.html?id=333. 引入Ato...
2018-12-27 15:01:37 869
转载 限流学习---限流算法
目录目的分类限流算法计数器令牌桶漏桶比较实例1. 目的通过对并发访问和请求进行限速或者一个时间窗口内的请求进行限速来保护系统的可用性,一旦达到限制速率就可以拒绝服务(友好定向到错误页或告知资源没有了),排队或者等待(比如秒杀,评论,下单),降级(返回默认数据)2. 分类限制总并发数 (数据库连接池,线程池)限制瞬时并发数 (如Nginx的limit_conn...
2018-12-27 14:56:54 203
转载 spring boot+gradle+mybatis多数据源配置
目录场景多数据源存在问题demo演示流程代码结构引入jar包配置application.properties数据源初始化配置mybatis生成对应的entity、mapper、和xml文件完成对应的service测试多数据源事务问题1. 场景:经常会碰到这种应用场景,比如说下订单的操作,有需要修改订单库中信息,又需要修改产品库中库存,这一个操作就是需要一次性操作两个数据...
2018-12-27 14:55:31 1879 1
转载 java学习---spi机制和简单示例
目录名词解释使用规则使用示例代码结构实现接口MyDriver设置META-INF/services/配置测试代码运行结果1. 名词解释SPI(Service Provider Interface)提供给服务提供厂商与扩展框架功能的开发者使用的接口,例如,JDBC驱动,可以加载MySQL、Oracle、或者SQL Server等。目前有不少框架用它来做服务的扩展发现...
2018-12-27 14:26:43 247
转载 spring学习---事务管理
目录什么叫事务四大特性 ACID事务操作基本流程spring 事务分类编程式事务声明式事务spring源码分析声明式事务分析声明式事务类图声明式事务优缺点1. 什么叫事务事务是一组原子操作单元,从数据库角度讲,就是一组sql指令,通俗的解释就是:要么全部成功,要么全部失败2. 四大特性 ACID特性解释原子性(Atomicity)事...
2018-12-27 14:06:39 123
转载 spring学习---事务传播属性和隔离级别
目录spring事务传播属性数据库定义隔离级别spring定义隔离级别1. spring事务传播属性Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring 是无法提供事务功能的spring保护的事务传播属性有以下这些(枚举类Propagation定义,引用TransactionDefinition类的常量)常量名称常量解释PRO...
2018-12-26 20:01:09 136
原创 spring学习---spring AOP设计原理
目录简介生成代理方式类代理行为流程图切面主流程获取通知链执行拦截或切面1.简介Spring 提供了两种方式来生成代理对象: JDKProxy和Cglib,具体使用哪种方式生成由AopProxyFactory 根据AdvisedSupport对象的配置来决定。默认的策略是如果目标类是接口,则使用JDK 动态代理技术,否则使用Cglib 来生成代理2. 生成代理方式类p...
2018-12-26 19:48:58 121
转载 spring学习---spring MVC
目录简介名词解释MVC(model-view-controller)概念spring MVC 运行原理核心架构流程流程说明源码流程1. 简介:是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型2. 名词解释名词作用前端控制器...
2018-12-26 18:15:34 123
原创 spring boot学习---常用注解
目录全局注解控制层服务/资源层AOP注释1. 全局注解注解说明SpringBootApplication是组合注解,包含了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScanSpringBootConfiguration继承自@Configuration,会将当前类内声明的一个...
2018-12-24 22:38:06 116
原创 redis学习---哨兵模式
目录简介作用架构图实现1. 简介:redis的主从方式,使得slavof在整个系统中起到了数据的冗余和备份的作用,但是当master服务挂了之后,整个redis服务处于停用的状态,这时需要有服务在几个slavof中选举出一个新的master服务继续对外提供服务,redis并没有提供master的选举机制,而是需要借助一个哨兵来进行监控并选举2.1 作用:监控master和sl...
2018-12-24 22:25:36 300
原创 # redis学习---redis主从复制机制
目录简介架构图主从复制实践主从复制原理总结相关配置说明1. 简介:就是我们常见的master/slave模式,把redis的数据库复制多个副本部署在不同的服务器上,如果其中一台服务器出现故障,也能快速迁移到其他服务器上提供服务2. 架构图3. 主从复制实践3.1 从服务配置redis.conf# bind 127.0.0.1 //主从都注释掉,可以让别的主机访问sl...
2018-12-24 22:14:53 142
原创 redis学习---数据持久化
目录简介RDS简介持久化流程触发方式配置方式命令方式优点缺点AOF简介持久化流程配置方式AOF重写原理AOF重写流程1. 简介Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF方式。前者会根据指定的规则“定时”将内存中的数据存储在硬盘上,而后者在每次执行命令后将命令本身记录下来。两种持久化方式可以单独使用其中一种,也可以将这两种方式结...
2018-12-24 21:54:19 134
原创 redis学习---5种常见数据类型
目录简介数据结构比对key常见命令String字符串类型List列表类型Set集合类型Hash散列类型ZSet数据类型1. 简介:redis支持的5种常见存储类型为:String、List、Set、Hash、ZSet2. 数据结构比对数据类型结构存储的值存储结构String字符串可以是字符串、整数或者是浮点数int、SDSList列表一...
2018-12-24 20:39:46 99
原创 redis学习---redis简介
目录简介按照多数据支持存储结构应用场景命令参考文档1. 简介:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。2. 安装下载地址:http://downloa...
2018-12-24 20:24:44 99
原创 spring学习---IOC初始化顺序
目录说明XMLBeanFactory详解ClassPathXmlApplicationContext 详解源码分析1. 说明:IOC初始化顺序包括BeanDefinition的Resource 定位、载入和注册这三个基本过程。容器主要有XmlBeanFactory、ClasspathXmlApplicationContext两种形式2. XMLBeanFactory2.1 继...
2018-12-22 20:48:16 782
原创 spring学习--BeanFactory和BeanDefinition
目录BeanFactory介绍BeanDefinition介绍1. BeanFactory介绍spring bean的创建是典型的一个工厂模式,其中BeanFactory作为最顶层的一个接口类,它定义了一个IOC容器的基本功能规范,它只对IOC容器的基本行为做了定义,只关心得到的是什么对象,根本不管你的bean时如何定义加载。1.1 类图继承关系BeanFactory 有三个子类...
2018-12-22 20:47:35 2046
转载 spring学习---简介
目录spring概述IOC/DI解释spring源码结构1. spring概述Spring 是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发,主要两个概念IOC和AOP**IOC:**基本都是通过注册式的单例方式创建对象并维护已经创建的对象以及对象之间的关系,用户只需要关注业务逻辑,不需要...
2018-12-22 20:46:46 106
原创 设计模式---装饰模式(Decorator)
目录简介包含角色UML类图java实现使用场景优缺点1. 简介以对客户端透明得方式扩展对象得功能,换言之,客户端不会觉得对象在装饰前和装饰后有什么不同,是继承关系得一个替代方案,在IO流中由大量运用2. 包含角色2.1 抽象构件角色给出一个接口,用以规范准备接收附加责任的对象2.2 具体构件角色定义一个将要接收附加责任的类2.3 扩展功能角色需要扩展的功能接口...
2018-12-22 20:44:07 97
原创 设计模式---委派模式(Delegate)
目录简介包含角色UML类图java实现说明1. 简介不属于23 种设计模式之一,是面向对象设计模式中常用的一种模式。这种模式的原理为类B和类A 是两个互相没有任何关系的类,B 具有和A 一模一样的方法和属性;并且调用B 中的方法,属性就是调用A 中同名的方法和属性。B好像就是一个受A授权委托的中介。第三方的代码不需要知道A 的存在,也不需要和A 发生直接的联系,通过B 就可以直...
2018-12-22 20:43:28 2674
原创 设计模式---适配器模式(Adapter)
目录简介包含角色UML类图java实现说明1. 简介把一个类得接口变化成客户端所期待得另一种接口,从而使原本因接口不匹配而无法在一起工作得两个类能够再一起工作,偏向与兼容。例如:一拖三充电头、HDMI转VGA、编码和解码2. 包含角色2.1 目标角色(Target)非必须这里所期待得到得是接口,注意由于这里讨论得是类适配器模式,因此目标不可用是类2.2 源角色(Ad...
2018-12-22 20:42:43 126
系统架构之缓存培训ppt
2017-11-22
git使用培训教程,包含各种常用git命令
2017-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人