摘要:一.SpringBoot是什么 SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行。 二.SpringBoot能做什么 通常搭
阅读全文
05 2020 档案
摘要:一.架构的分层 分层开发 分层的概念: 分层概念有不同层面的应用,通常,我们的应用从大的层面,都可以分为表现层、业务层、集成层、资源层等,这些系统构架层面的分层是在做系统构架时就做好的, 我们不需要太多考虑,但在比较细粒度的层面,我们还可以分层,主要是在代码层面分层。 代码分层的一个指导思想就是:一
阅读全文
摘要:一.敏捷开发理论和概念 1、Scrum 敏捷项目管理 Scrum由三个角色,六个时间箱,四个工件组成。 Scrum 介绍:适用于需求难以预测的复杂商务应用产品的开发。团队以短小迭代(也称为“冲刺 (sprint)”)为单位进行工作。 Scrum 管理优势:团队按照商业价值的高低先完成高优先级的产品功
阅读全文
摘要:一.项目管理 (1)知识要求:了解软件项目生命周期,了解项目管理的9大知识领域,了解项目管理的十大风险,了解工作量估算方法,了解风险处理流程。 (2)工作经验:具有5年以上IT项目经验,3年以上项目管理相关工作经验。参与过2个以上项目的项目管理。能够描述清楚7个问题和解决方法。 (3)所需技能:立项
阅读全文
摘要:一.敏捷开发团队管理 1、出发点:结果导向 敏捷开发团队的外在行为是“结果导向”,而内在支撑则是“团队工作”(TeamWork)。 所谓结果导向,就是直指结果,而不拘泥于形式。 可以被拘泥的“形式”各式各样,比如方式、方法、流程、文档、部门、分工、职责……都是形式。 这些形式本来是设立来帮助实现更好
阅读全文
摘要:一.优化概述 1、为什么要优化? (1)系统的吞吐量瓶颈往往出现在数据库的访问速度上; (2)随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢; (3)数据是存放在磁盘上的,读写速度无法和内存相比; 2、如何优化? 查询速度优化、数据库结构优化、MYSQL服务器优化 原则是减少系统
阅读全文
摘要:一.介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有
阅读全文
摘要:一.概念 sharding-jdbc是当当网开源的一款客户端代理中间价。sharding-jdbc包含分库分片和读写分离功能。 对应用的代码没有侵入型,几乎没有任何改动,兼容主流orm框架,主流数据库连接池。目前属于apache的孵化项目shardingSphere,发展迅猛。sharding-jd
阅读全文
摘要:一.Mycat简介 这个中间件可以说是很奇妙的东西,可以让数据库的负载能力提高很多。 使用mycat后,可以对数据库进行分库,分表。把一个逻辑完整的数据库分成物理拆分的数据库。 Mycat背后是阿里曾经开源的知名产品——Cobar。Cobar的核心功能和优势是MySQL数据库分片, 此产品曾经广为流
阅读全文
摘要:一.概念 MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用。 2008年MySQL公司被Sun公司收购并发布了首个收购之后的版本MySQL5.1,该版本引入分区、基于行复制以及plugi
阅读全文
摘要:一.Jps 1、概述 jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。 jps存放在JAVA_HOME/bi
阅读全文
摘要:一.概述 收集算法(JVM之垃圾回收-垃圾收集算法)是内存回收的抽象策略,垃圾收集器就是内存回收的具体实现。 JVM规范对于垃圾收集器的应该如何实现没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器差别较大,这里只看HotSpot虚拟机。 就像没有最好的算法一样,垃圾收集器也没有最好,
阅读全文
摘要:一.相关概念 GC需要完成三件事:1,哪些内存需要回收?2:什么时候回收?3:如何回收? Java内存运行时区域的各部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着入栈和出栈操作。 每一个栈帧中分配多少内存基本上是在类结构确定
阅读全文
摘要:一.内存管理的分代机制 Java语言与C语言相比,最大的特点是编程人员无需过多的关心Java的内存分配和回收,因为所有这一切,Java的虚拟机都帮我们实现了。 JVM的内存管理,大大降低了开发人员对内存管理的要求,也不容易出现C语言中的内存泄漏和溢出。但一旦应用内存发生问题,也会导致程序员难以定位。
阅读全文
摘要:一.Java内存模型 Java程序内存的分配是在JVM虚拟机内存分配机制下完成。 Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。 简要言之,jm
阅读全文
摘要:一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。 类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并
阅读全文
摘要:一.Java虚拟机JVM规格描述 JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提范的任何系统上运行。 JVM对其实现的某些方面给出了具体的定义,特别是 对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。 这一规格包括操作码和操作数的语法和数值、标
阅读全文
摘要:一.虚拟机概述 所谓虚拟机,其实就是一台虚拟的机器,可以用来执行一系列虚拟的命令。大体上虚拟机可以分为两种:系统虚拟机和程序虚拟机。 (1)系统虚拟机:是完全对物理计算机的仿真,可以说和一台真实的PC操作系统没什么区别。比如常用的 Vmare 以及 Visual Box 软件, 通过这些软件能够模拟
阅读全文
摘要:一.LongAdder是什么 JDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder。提供了原子累计值的方法。 根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈————AtomicLong 具有更好的性能,代价
阅读全文
摘要:一.Future是什么 Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。 二.Future能做什么 Future在处理异步调用和并发处理时非常有用。 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Ru
阅读全文
摘要:一.ForkJoinPool是什么 ForkJoinPool 是 Java 7 中引入的并发库类。它通常是以递归的方式运行,采用分治思想将大任务分割成几个小任务,小任务继续分割成更小的任务,直至任务不可分割,然后运行这些任务。 Java中的Executor是一种执行器。日常工作中比较容易见到的就是T
阅读全文
摘要:一.Atomic是什么 所谓 Atomic,翻译过来就是原子。原子被认为是操作中最小的单位,一段代码如果是原子的,则表示这段代码在执行过程中,要么执行成功,要么执行失败。 原子操作一般都是底层通过 CPU 的指令来实现。而 atomic 包下的这些类,则可以让我们在多线程环境下,通过一种无锁的原子操
阅读全文
摘要:一.LockSupport是什么 LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。 Doug Lea 的神作concurrent包是基于AQS (AbstractQueuedSynchronizer)框架,AQS框架借助于
阅读全文
摘要:一.CAS是什么 CAS: 全称Compare and swap,字面意思:”比较并交换“。解决多线程并行情况下使用锁造成性能损耗的一种机制。 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将
阅读全文
摘要:一.Phaser是什么 java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,一个可重用的同步barrier。 用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活。 二.Phaser能做什么 通过Phaser
阅读全文
摘要:一.StampedLock是什么 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控制并发。 该类的设计初衷是作为一个内部工具类,用于辅助开发其它线程安全组
阅读全文
摘要:一.AQS是什么 AQS是AbustactQueuedSynchronizer的简称,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。 AQS的主要作用是为Java中的并发同步组件提供统一的底层支持。 同步工具类Semaphor
阅读全文
摘要:一.Exechanger是什么 Exchanger 是 JDK 1.5 开始提供的一个用于两个工作线程之间交换信息数据的封装工具类,简单说就是一个线程在完成一定的事务后想与另一个线程交换数据, 则第一个先拿出数据的线程会一直等待第二个线程,直到第二个线程拿着数据到来时才能彼此交换对应数据。 它提供一
阅读全文
摘要:一.Semaphore是什么 Semaphore 是一个计数信号量,必须由获取它的线程释放。用于管理一组资源,内部是基于AQS的共享模式。它相当于给线程规定一个量从而控制允许活动的线程数。 Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量。就这一点而言,单纯的sy
阅读全文
摘要:一.CyclicBarrier是什么 CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。 与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。 CyclicBarrier支持
阅读全文
摘要:一.CountDownLatch是什么 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。 latch是门闩的意思,CountDown是倒数计数的意思。 CountDownLatch能够使一个线程在等待另外一些线程完成
阅读全文
摘要:一.BlockingQueue是什么 BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。 被阻塞的情况主要有如下两种: (1)当队列满了的时候进行入队列操作; (2)当队列空了的时候进行出队列操作; java.util.concurrent 包里
阅读全文
摘要:一.ThreandLocal是什么 ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。早在JDK 1.2的版本中就提供java.lang.ThreadLocal。 ThreadLocal是一个关于创建线程局部变量的类。Thread
阅读全文
摘要:一.ReadWriteLock是什么 ReadWriteLock是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁。 读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的(排他的)。 每次只能有一个写线程,但是可以有多个线程并发地读数据。 所有读写
阅读全文
摘要:一.ReentrantLock是什么 ReentrantLock是一个可重入的互斥锁(Reentrant就是再次进入的意思),又被称为“独占锁”。它添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。 ReentrantLock在同一个时间点只能被一个线程获取(当某线程获取到“锁”时,其它线程就必
阅读全文
摘要:一.Condition是什么 关键字synchronize可以与wait()和nitify()方法相结合实现实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助condition对象。 Java里 sychronized和Lock+Condtion 都属于管程模型,Con
阅读全文
摘要:一.内存模型的相关概念 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。 由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快, 而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的
阅读全文
摘要:一.wait/notity的使用 wait()方法可以使线程进入等待状态,而notify()可以使等待的状态唤醒。 这样的同步机制十分适合生产者、消费者模式:消费者消费某个资源,而生产者生产该资源。 当该资源缺失时,消费者调用wait()方法进行自我阻塞,等待生产者的生产;生产者生产完毕后调用not
阅读全文
摘要:一.wait/notify是什么 等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()/notifyAll()方法, 线程A收到通知后退出等待队列,进入可运行状态,进而执行后续操作。 上诉两个线程通过对象O来完成交互,而对象上的wai
阅读全文
摘要:一.Volatile是什么 Java语言规范第三版中对volatile的定义如下: java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。 Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile
阅读全文
摘要:一.Volatile的使用 1、防止重排序 我们从一个最经典的例子来分析重排序问题。大家应该都很熟悉单例模式的实现,而在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的方式来实现。 其源码如下: package com.paddx.test.concurrent; public c
阅读全文
摘要:一.synchronized 的用法分类 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础: 1、普通同步方法(实例方法),锁是当前实例对象 ,进入同步代码前要获得当前实例的锁 2、静态同步方法,锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁 3、同步方
阅读全文
摘要:一.Synchronized是什么 synchronized 是 Java提供的一个并发控制的关键字,是利用锁的机制来实现同步的。 锁机制有如下两种特性: (1)互斥性: 即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合
阅读全文
摘要:声明式事务 一.声明式事务概述 从上节编程式实现事务管理可以深刻体会到编程式事务的痛苦,即使通过代理配置方式也是不小的工作量。 本节将介绍声明式事务支持,使用该方式后最大的获益是简单,事务管理不再是令人痛苦的,而且此方式属于无侵入式,对业务逻辑实现无影响。 接下来先来看看声明式事务如何实现吧。 二.
阅读全文
摘要:编程式事务 一.编程式事务概述 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。 Spring框架提供一致的事务抽象,因此对于JDBC还是JTA事务都是采用相同的API进行编程。 Connection conn = null; UserTransaction tx = n
阅读全文
摘要:一.数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。 事务必需满足ACID(原子性、一致性、隔离性和持久性)特性,缺一不可: 1.原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做
阅读全文
摘要:基于@AspectJ的AOP Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明。 一.启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置: <aop:aspectj-autoproxy/> 这
阅读全文
摘要:基于Schema的AOP 基于Schema的AOP从Spring2.0之后通过“aop”命名空间来定义切面、切入点及声明通知。 在Spring配置文件中,所以AOP相关定义必须放在<aop:config>标签下,该标签下可以有<aop:pointcut>、<aop:advisor>、<aop:asp
阅读全文
摘要:AOP基础 一.AOP是什么 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍
阅读全文
摘要:一.循环依赖 什么是循环依赖? 循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA, 则它们最终反映为一个环。此处不是循环调用,循环调用是方法之间的环调用。如图所示: 循环调用是无法
阅读全文
摘要:DI的配置使用 一.依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”: 泛化:表示类与类之间的继承关系、接口与接口之间的继承关系; 实现:表示类对接口的实现; 依赖:当类与类之间有使用关系时就属于依赖关系,不同于关联关系,依赖不具有“拥有关系”,而是一种“相识关系”,只在某个特定地
阅读全文
摘要:IoC的配置使用 一.XML配置的结构 一般配置文件结构如下: <beans> <import resource=”resource1.xml”/> <bean id=”bean1” class=””></bean> <bean id=”bean2” class=””></bean> <bean n
阅读全文
摘要:一.IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。 Spring IoC容器如何
阅读全文
摘要:一.IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。 在Java开发中,Ioc意味着将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。 如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应
阅读全文
摘要:一.Spring是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。 应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。 所以开发一个应用
阅读全文