自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Mybatis源码解读 (基础应用篇)

mapper代理开发方式 此处使用的是JDK的动态代理方式,延迟加载使用的cglib动态代理方式 代理理解 代理分为静态代理和动态代理。此处先不说静态代理,因为Mybatis中使用的代理方式是动态代理。 动态代理分为两种方式: 基于JDK的动态代理--针对有接口的类进行动态代理 基于CGLIB的动态代理--通过子类继承父类的方式去进行代理。 XML方式 开发方式只需要开发Mapper接口(dao接口)和Mapper映射文件,不需要编写实现类。开发规范 Ma...

2020-09-15 14:09:31 231

原创 Mybatis源码解读 (入门篇)

认识MyBatismybatis参考网址:http://www.mybatis.org/mybatis-3/zh/index.html Github源码地址:https://github.com/mybatis/mybatis-3 Mybatis是什么 MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎 所有的 JDBC代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解来配置和映射SQL信 息,将接口和 Jav...

2020-09-15 10:47:51 149

原创 ASM(二) 利用Core API 变更类成员

之前一篇简单介绍了一下ASM框架。这一篇继续对CoreApi进行扩展。这里还是继续对ClassWriter ,ClassReader和ClassVisitor的应用的扩展。前面一篇主要介绍的是ClassWriter和ClassReader单独应用的场景。这一篇把这两者作为producer(ClassReader)和consumer(ClassWriter)来结合起来介绍一下另外一些...

2019-09-27 18:10:02 220 1

原创 ASM(一) 利用Core API 解析和生成字节码

ASM是一个提供字节码解析和操作的框架。Cglib框架就是基于ASM框架实现的,被广泛应用的Hibernate,Spring就是基于Cglib 实现了AOP技术。在说到AOP的Java实现,可能会优先想到java的Proxy api,通过invoke方法拦截处理相应的代码逻辑,但是proxy 是面向接口的,被代理的class的所有方法调用都会通过反射调用invoke 方法,相对性能开销...

2019-09-27 17:00:07 479

原创 基于Groovy的规则脚本引擎实战

前言因为之前在项目中使用了Groovy对业务进行一些抽象,效果比较好,过程中也踩了一些坑,所以简单记录分享一下自己如何一步一步实现的,在这里你可以了解:1、为什么选用groovy作为规则脚本引擎2、了解Groovy的基本原理和Java如何集成3、分析Groovy与java集成的一些问题和坑4、在项目中使用时做了哪些性能优化5、实际使用时需考虑的一些tips规则脚本可解决...

2019-09-26 14:44:51 1441 2

原创 什么时候进行分库分表 ?

一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。第二种...

2019-09-21 23:37:47 1393

原创 图解 Nginx 限流配置

本文以示例的形式,由浅入深讲解Nginx限流相关配置,是对简略的官方文档的积极补充。Nginx限流使用的是leaky bucket算法,如对算法感兴趣,可移步维基百科先行阅读。不过不了解此算法,不影响阅读本文。空桶我们从最简单的限流配置开始:limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=10r/s; ser...

2019-09-21 22:48:43 200 1

原创 为什么要进行系统拆分?

面试题为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗?面试官心理分析从这个问题开始就进行分布式系统环节了,现在出去面试分布式都成标配了,没有哪个公司不问问你分布式的事儿。你要是不会分布式的东西,简直这简历没法看,没人会让你去面试。其实为啥会这样呢?这就是因为整个大行业技术发展的原因。早些年,印象中在 2010 年初的时候,整个 IT 行业,很...

2019-09-21 22:21:13 297 1

原创 ​ ​面试题:给我说一下你项目中的单点登录是如何实现的?

一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系。但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏...

2019-09-20 23:31:08 164

原创 面试官:你简历中写用过docker,能说说容器和镜像的区别吗?

这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别。当我对Docker技术还是一知半解的时候,我发现理解Docker的命令非常困难。于是,我花了几周的时间来学习Docker的工作原理,更确切地说,是关于Docker统一文件系统(the union file system)的知识,然后回过头...

2019-09-20 23:07:26 152

原创 面试官:怎么保证缓存与数据库的双写一致性?

分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?Cache Aside Pattern最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时...

2019-09-20 22:24:18 108

翻译 Java 循环结构 - for, while 及 do...while

Java 循环结构 - for, while 及 do...while顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。Java中有三种主要的循环结构:while 循环do…while 循环for 循环在Java5中引入了一种主要用于数组的增强型for循环。while 循环while是最基本的循环,它的结构为:whil

2017-10-31 20:39:24 174

翻译 Java 运算符

Java 运算符计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运算符分成以下几组:算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符算术运算符算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。表格中的实例假设整数变量A的值为10,变量B的值为20:

2017-10-31 20:31:08 169

翻译 Java 修饰符

Java 修饰符Java语言提供了很多修饰符,主要分为以下两类:访问修饰符非访问修饰符修饰符用来定义类、方法或者变量,通常放在语句的最前端。我们通过下面的例子来说明:publicclass className{ // ...}privateboolean myFlag;staticfinal doubleweeks = 9.5;protected

2017-10-31 20:07:17 192

翻译 Java 变量类型

Java 变量类型在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:typeidentifier [ = value][,identifier [= value] ...] ;格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。以下列出了一些变量的声明实例。注意有些包含了初始化

2017-10-31 20:04:57 151

翻译 Java 基本数据类型

Java 基本数据类型变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。Java 的两大数据类型:内置数据类型引用数据类型内置数据类型Java语言提供了八种基本类型。六种数字类型(四个整数

2017-10-31 19:29:58 200

翻译 Java 对象和类

Java 对象和类Java作为一种面向对象语言。支持以下基本概念:多态继承封装抽象类对象实例方法重载对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它描述一类对象的行为和状态。下图中男孩女孩为类,而具体的每个人为该类的对象:Java中的对象现在

2017-10-31 19:15:07 168

翻译 Java 基础语法

Java 基础语法一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它描述一类对象的行为和状态。方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都

2017-10-31 19:13:07 137

翻译 Java 开发环境变量

Java 开发环境配置window系统安装java下载JDK首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,点击如下下载按钮:在下载页面中你需要选择接受许可,并根据自己的系统选择对应的版本,本文以 Window 64位系统为例:下

2017-10-31 14:06:12 188

翻译 Java 简介

Java 简介Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java分为三个体系:JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)JavaEE(J2EE)(Java 2 Plat

2017-10-31 14:02:33 213

翻译 Java 教程

Java 教程Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统。本教程通过简单的实例将让大家更好的了解JAVA编程语言。Java 在线工具JDK 1.6 在线中文手册我的第一个JAVA程序以下我们通过一个简单的实例来展示 Java

2017-10-31 13:44:38 250

转载 java集合的核心知识

java集合的核心知识1.    集合1.1. 什么是集合存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。集合的出现就是为了持有对象。集合中可以存储任意类型的对象, 而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样

2017-10-30 14:52:55 195

转载 Java 集合

Java 集合知识汇总      Java的集合内容很丰富,可以称为Java集合框架,所谓框架者,必然存在着层次关系,在面向对象的世界里,层次意味着接口,抽象类及实现了接口或者继承自抽象类的类。接口的出现很好理解,因为不同类型的集合都有一些通用的方法。一图胜千言:Java集合的关系图如下:      注意:很多人想当然地认为Collection接口是所有集合的顶级接口,后来通过读J

2017-10-30 14:39:17 164

转载 java集合知识汇总

java集合知识汇总   1.List 1.1 ArrayList以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。 按数组下标访问元素-get(i)、set(i,e) 的性能很高,这是数组的基本优势。

2017-10-30 14:23:46 217

转载 Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结

Redis系列三 - Spring boot如何使用redis做缓存及缓存注解的用法总结目录(?)[+]1. 概述本文介绍Spring boot 如何使用redis做缓存,如何对redis缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,

2017-10-30 14:03:16 462

转载 零基础搭建Hadoop大数据处理-环境

零基础搭建Hadoop大数据处理-环境linux分布式 大数据 java 服务器 hadoop 源码 配置 摘要: 由于Hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7,具体的安装此处不作过多介绍,只作需要用到的知识介绍。由于Hadoop需要运行

2017-10-30 13:57:13 395

转载 初步认识Spring-boot

一、初步认识Spring-boot以前在使用spring框架的时候,各种配置文件,繁琐复杂、配置项太多,Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。Spring Boot的主要优点: 为所有Spring开发者更快的

2017-10-30 12:27:47 279

转载 springBoot

SpringBoot开发案例之整合Swagger篇 分类于springBoot前段时间整合过的一个支付服务,由于使用了Spring Boot快速开发,但是又懒得写详细的文档介绍,便顺手就把Swagger整合进来了,对支付服务进行分组API展示,如上图。简介Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使

2017-10-30 12:11:39 223

转载 Java中Comparable和Comparator接口区别分析

Java中Comparable和Comparator接口区别分析Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。  即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort

2017-10-30 11:38:39 184

转载 Redis

Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储

2017-10-30 11:20:03 338

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除