- 博客(47)
- 收藏
- 关注
转载 Java源码之ArrayList分析
一、ArrayList简介ArrayList底层的数据结构是数组,数组元素类型为Object类型,即可以存放所有类型数据。与Java中的数组相比,它的容量能动态增长。当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组,因此数组容量固定且无法动态改变。ArrayList在保留数组可以快速查找的优势的基础上,弥补了数组在创建后,要往数组添加元素的弊端...
2019-05-23 20:11:00
121
转载 ZAB协议
一、ZAB协议简介ZAB协议是Fast Paxos算法的一种工业实现。ZAB即原子广播协议,是一种专门为zookeeper设计的一种支持崩溃恢复的原子广播协议,在zk中,主要依赖ZAB实现分布式数据的一致性。zookeeper使用一个单一的主进程处理客户端的事务写请求,当服务器状态发生变化后,集群采用ZAB协议以事务提案的方式广播到所有的副本进程上,ZAB为保证全局的序列变更,为每一...
2019-04-17 21:31:00
203
转载 Java日志框架
转载自:https://www.cnblogs.com/chenhongliang/p/5312517.html一、Java日志框架概述对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。java领域存在多种日志框架,目前常用的日志框架包括Log4j 1,Log4j 2,Commons Logging,Slf4j,Logback,Ju...
2019-04-17 21:23:00
134
转载 Paxos算法
Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法,它于1990年由莱斯利·兰伯特提出。有名 的Paxos工程包括Google的Chubby、ZAB、微信的PhPaxos等。一般来说,分布式各个节点之间的通讯模型有两种:共享内存(Shared Memory)和消息传递(Message Passing),Paxos基于消息传递通讯模型的。一、Paxos简介Paxos角色...
2019-04-13 23:12:00
165
转载 MySQL事务
一、事务介绍在MySQL中的事务是由存储引擎实现的,下面主要对InnoDB存储引擎中的事务进行说明。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。事务用来管理DDL、DML、DCL操作,比如 insert、update、delete 语句,默认是自动提交的。一般来说,事务是必须满足4个条件(ACID):Atomicity(原子性):...
2019-02-28 22:08:00
108
转载 MySQL索引
一、索引简介索引是帮助MySQL高效获取数据的数据结构。数据库索引类似于一本书的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,没有特别说明,都是指的B树(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚集索引、覆盖索引、组合...
2019-02-28 22:07:00
68
转载 MySQL基础
一、MySQL说明1、数据库概述数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加、修改、删除及查询操作。数据库中的记录是有行有列的数据库称为关系型数据库,与之相反的就是NoSQL(Not Only SQL)数据库了。数据库管理系统(DataBase Management System,DBMS):指一种[...
2019-02-26 21:05:00
121
转载 设计模式之单例模式
在实际的项目开发中,常会用到配置文件,可在读取配置文件后将读取的内容放在数据对象中,但在使用时通过new的方式产生对象,在系统中会存在多个相同的配置文件,当配置文件过多时会极大的影响到系统的性能。我们是否能使得配置文件的实例对象在系统运行期间只有一个,以避免了上述问题的发生,这就是我们今天说的单例模式。一、单例模式实现单例模式也称单件、单体等,单例模式保证一个类只有一个实例,并提供一...
2019-01-31 22:09:00
98
转载 设计模式之适配器模式
前言小六新买了一个小米6手机,它高高兴兴的拿到新手机,想要插上耳机听歌,但发现手机没有耳机孔,仔细查看说明书之后发现,小米6手机是充电孔耳机孔在一起,在插耳机时需要一个耳机转接器,才能插耳机。我们用程序员的眼观来看,这里相当于增加了一个转接器类用于适配耳机,这就类似于我们今天提到的设计模式—适配器模式。一、适配器模式实现适配器模式的类图如下所示:其中:Client:客户端,...
2019-01-31 21:42:00
119
转载 设计模式之外观模式
前言日常生活中我们想买一台电脑,一般来说有两种方式,一是通过电子市场购买电脑的各个配件进行组装,但这需要我们对电脑配件及其了解。当然,也有第二种方案,就是直接购买已经由装机公司安装完毕的整机,这也是大多数人的选择。我们的进行软件开发过程中也会遇到类似的情况,在有A、B、C、D等多个模块的情况下,客户端需要与各个模块一一交互,极不方便,那么我们是否可以考虑采用类似”装机公司“这样的配置...
2019-01-30 23:40:00
97
转载 设计模式之简单工厂模式
简单工厂模式又叫做静态工厂方法模式,但不属于23种GOF设计模式,由于它太常用,因而将其放在首位,与后续的设计模式学习节奏保持一致。一、模式实现简单工厂将new对象的职责迁移到工厂中进行,通过传递的参数,在工厂中创建不同的实例化对象。下面通过具体的代码示例进行说明。问题:某公司有一种产品,现有AB两种生产方式,现要求对其创建逻辑进行实现,并将具体的创建产品逻辑进行隔离。现考虑用简...
2019-01-30 21:46:00
104
转载 Eclipse快捷键总结
eclipse是Java开发中常用的IDE,最近在进行项目开发过程中发现自己对eclipse的快捷键缺乏系统的了解,因而对其涉及到的快捷键进行整理,便于后期查阅使用。快捷键使用说明Ctrl+1快速修复(最经典的快捷键,就不用多说了,可以解决很多问题,比如import类、try catch包围等)Ctrl+Shift+F格式化当前代码Ctrl+Shift...
2019-01-29 19:50:00
76
转载 Spring容器的初始化流程
一、创建BeanFactory流程1、流程入口创建BeanFactory的流程是从refresh方法的第二步开始的,通过调用obtainFreshBeanFactory方法完成流程。ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();2、流程分析创建BeanFactory的流程是从第二步...
2019-01-24 22:02:00
106
转载 IOC容器的创建
一、IOC容器创建方式Ioc容器的创建时通过ApplicationContext接口的相关实现类进行的。如上图所示:有三种创建IOC容器的方式。ClassPathXmlApplicationContext:从项目的根目录下加载配置文件FileSystemXmlApplicationContext:从磁盘中的加载配置文件AnnotationConfigApplicationCo...
2019-01-24 22:01:00
127
转载 Spring之AOP
一、AOP介绍1、AOP理解OOP(Object Oriented Programming,面向对象编程)引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性...
2019-01-04 20:34:00
81
转载 对Spring中IOC和DI的理解
前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/details/72426666博客,对其中涉及到的进行了简单的总结。在学习Spring的过程中,总会涉及到两个概念---IOC和DI,即控制反转和依赖注入,而对这两个概念的理解也总是含糊不清的...
2019-01-04 20:33:00
65
转载 Spring基于注解和XML混合方式的使用
首先要明白,基于注解和XML两种方式的实现功能是一样的,只是两种不同的配置方式。一、IoC配置1、配置xml在使用注解与xml结合的方式配置IoC之前,首先要引入context标签:xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schem...
2019-01-03 21:36:00
149
转载 Spring基于纯注解方式的使用
经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配置。一、xml中遗留配置注解扫描<!-- 开启注解并扫描指定包中带有注解的类 --><context:component-scan base-package="co...
2019-01-03 21:36:00
107
转载 Spring基于XML方式的使用
一、IoC配置IoC的配置是通过Spring的xml文件的bean标签进行的。1、bean标签介绍bean标签一般是在xml文件进行配置的,xml文件一般样式如下:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" ...
2019-01-03 21:35:00
96
转载 Spring简介
Spring是一个分层的JavaEE/SE的一站式轻量级开源框架。一、Spring简介Spring的结构如下图所示:Spring核心概念介绍:Spring容器:就是IoC容器。Ioc容器就是BeanFactory工厂(DefaultListableBeanFactory)。BeanFactory有一个子接口叫ApplicationContext(应用上下文接口)。IoC(核...
2018-12-21 23:49:00
68
转载 Mybatis事务管理
一、Mybatis事务1、事务管理方式Mybatis中的事务管理方式有两种:1、JDBC的事务管理机制,即使用JDBC事务管理机制进行事务管理2、MANAGED的事务管理机制,Mybatis没有实现对事务的管理,而是通过容器来实现对事务的管理其中,Mybatis提供了事务的接口:Transaction,其代码如下:public interface Transaction {...
2018-12-21 22:56:00
116
转载 Mybatis中的缓存
Mybatis提供缓存查询功能,用于减轻数据库压力,提升数据查询能力。Mybatis中定义了两级缓存:包括一级缓存与二级缓存。示意图如下所示:一、一级缓存一级缓存的特点:每一个SqlSession都有一个一级缓存,且它们的缓存数据区域之间互不影响。一级缓存是默认开启的,开发人员不能关闭。一级缓存又称为会话缓存,是SqlSession级别的缓存,它的作用域是同一个SqlS...
2018-12-10 21:33:00
87
转载 理解JVM之垃圾收集器详解
前言垃圾收集器作为内存回收的具体表现,Java虚拟机规范并未对垃圾收集器的实现做规定,因而不同版本的虚拟机有很大区别,因而我们在这里主要讨论基于Sun HotSpot虚拟机1.6版本Update22,此虚拟机包含的收集器如下所示:如图展示了7种作用于不同分代的收集器,若两个收集器之间存在连线,说明他们可以搭配使用。我们堆收集器进行比较就是为了针对具体的情况选择最合适的收集器。一、...
2018-12-09 11:47:00
462
转载 理解JVM之垃圾收集器概述
前言很多人将垃圾收集(Garbage Collection)视为Java的伴生产物,实际1960年诞生的Lisp是第一门真正使用内存动态分配与垃圾手机技术的语言。在目前看来,内存的动态分配与内存回收已经相当成熟,但了解GC与内存分配还是非常有必要的,当排查内存溢出、内存泄漏问题,当垃圾手机称为系统高并发的瓶颈时,就需要我们对其实施必要的监控与调节。在前面的篇章中我们了解到Java的运...
2018-12-09 11:34:00
56
转载 理解JVM之Java内存区域
Java虚拟机运行时数据区分为以下几个部分:方法区、虚拟机栈、本地方法栈、堆、程序计数器。如下图所示:一、程序计数器程序计数器可看作当前线程所执行的字节码行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。Java虚拟机的多线程是通过线程轮流切换以分配处理执行时间的方式进行的,因而为了确保线程切换后能够恢复到正确的执行位置,每条线程都有一个独...
2018-12-09 11:18:00
49
转载 Mybatis插件开发
前面几篇文章介绍了Mybtis中四个重要的对象,其中提到它们都是在Configuration中被创建的,我们一起看一下创建四大对象的方法,代码如下所示:public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql...
2018-12-09 10:29:00
58
转载 SqlSession对象之ResultSetHandler
ResultSetHandler是Mybatis中的另一重要接口,它的代码如下所示:public interface ResultSetHandler { <E> List<E> handleResultSets(Statement stmt) throws SQLException; <E> Cursor<E> handle...
2018-12-09 00:36:00
116
转载 SqlSession对象之ParameterHandler
上一篇讲了StatementHandler,其中有ParameterHandler(参数处理器)是在StatementHandler被创建时被创建的。下面对ParameterHandler进行说明。其代码如下:public interface ParameterHandler { Object getParameterObject(); void setParameters(P...
2018-12-09 00:28:00
135
转载 双亲委派策略与自定义类加载器
一、类加载器类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。任意一个类,都需要由加...
2018-12-08 10:47:00
101
转载 理解Java异常
一、Java异常的简介Java异常是Java提供的一种识别及响应错误的一致性机制。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的...
2018-12-08 10:43:00
106
转载 理解Java反射
一、反射简介Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。1、反射的描述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功...
2018-12-08 10:40:00
50
转载 虚拟机生命周期
转载自:https://www.cnblogs.com/like-minded/p/5157667.html一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。如果同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚...
2018-12-08 10:36:00
436
转载 Java的类加载过程
一个Java文件从编码完成到最终执行,一般主要包括两个过程:编译与运行。编译即将Java文件通过Javac命令生成.class文件的过程,运行就是将.class文件交给JVM进行执行。类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。JVM在执行某段代码时,遇到了class A,然而此时内存中并没有class A的相关信息,于是...
2018-12-08 10:29:00
44
转载 理解Java线程
使用多线程的目的是更好的利用cpu资源,大部分多线程代码都可以用单线程来实现,但也有无法用单线程实现的,如:生产者消费者模型下面对一些常用的概念进行区分:多线程:指的是这个程序(一个进程)运行时产生了不止一个线程。并行与并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,真正的同时。并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。...
2018-12-08 10:23:00
80
转载 Java类的生命周期
本文转载自:https://blog.csdn.net/zhengzhb/article/details/7517213我们在编写好java文件后会对其进行编译,称为class字节码文件,而Java生命周期指的就是一个class文件从加载到卸载的全过程。一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,如下图所示:下面,就针对几个阶段展开说明。一、加载...
2018-12-08 10:14:00
68
转载 理解Java之IO流
流是一种抽象概念,它代表了数据的无结构化传递。用来进行输入输出操作的流就称为IO流。一、IO流结构1、流的分类方式按流向分:从文件/网络/内存等(数据源)到程序是输入流;从程序到文件/网络/内存等(数据源)是输出流按数据处理单位分:以字节为单位传输数据的流,以Stream结尾的是字节流;以字符为单位传输数据的流,以Reader结尾的是输入字符流,以Writer结尾的都是输出字...
2018-12-08 10:10:00
108
转载 理解Java序列化
前言Java对象是在JVM中产生的,若要将其进行传输或保存到硬盘,就要将对象转换为可传输的文件流。而目前Java对象的转换方式有:利用Java的序列化功能序列成字节(字节流),一般是需要加密传输时使用。将对象包装成JSON字符串(字符流),一般使用JSON工具进行转换 。protoBuf工具(二进制),性能好,效率高,字节数很小,网络传输节省IO。但二进制格式可读性差。一、...
2018-12-08 09:59:00
141
转载 SqlSession对象之StatementHandler
上一篇讲了SqlSession对象中的Executor,接下来将对SqlSession的另一个对象StatementHandler进行讲解。一、StatementHandler介绍StatementHandler是Mybatis中最重要的一个对象,它负责操作Statement与数据库进行交流,在此过程中还会调用ParameterHandler进行参数配置,使用ResultHandle...
2018-12-07 21:41:00
248
转载 SqlSession对象之Executor
Executor是Mybatis的一个核心接口,每一个SqlSession对象都会拥有一个Executor(执行器对象);这个执行对象负责[增删改查]的具体操作,我们可以简单的将它理解为JDBC中Statement的封装版。它的代码如下:public interface Executor { ResultHandler NO_RESULT_HANDLER = null; int...
2018-12-07 21:35:00
263
转载 Mybatis之SessionFactory原理
Mybatis在使用前需进行初始化,下面就针对Mybatis的初始化过程进行介绍。Mybatis的初始化过程有两种:基于XML和基于Java API两种方式,下面就针对基于XML的方式进行展开。一、Mybatis初始化的基本过程Mybatis的初始化过程如下图所示:调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;Sq...
2018-12-07 21:33:00
330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人