自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(587)
  • 资源 (3)
  • 论坛 (2)
  • 问答 (1)

转载 Spring 注解

注解驱动发展史注解驱动启蒙时代:Spring Framework 1.X在Spring Framework 1.X时代,其中1.2.0版本是这个时代的分水岭。当时Java5刚刚出炉,业界正刮起使用Annotation的技术风,Spring Framework自然予以支持。虽然框架层面均已支持@ManagedResource和@Transactional等Annotation,然而被注解的Spring Bean的装配仍需要使用XML方式,由于Spring Framework 1.X实现的局限性,XML配

2020-10-18 15:30:17 35

转载 Spring循环依赖踩坑笔记

源起在开发过程中,遇到需要把方法调用改为异步的情况,本来以为简单得加个@Asyn在方法上就行了,没想到项目启动的时候报了如下的错误:Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException:Error creating bean with name ‘customerServiceImpl’: Bean with name ‘customerServiceImpl’ has been injected

2020-10-09 18:32:10 20

转载 Spring 事件

Java 事件/监听器编程模型• 设计模式 - 观察者模式扩展可观者对象(消息发送者) - java.util.Observable观察者 - java.util.Observer• 标准化接口事件对象 - java.util.EventObject事件监听器 - java.util.EventListener面向接口的事件/监听器设计模式• 事件/监听器场景举例Java 技术规范事件接口监听器接口JavaBeansjava.beans.PropertyCh

2020-09-29 22:50:29 58

转载 Spring 泛型处理

Java 泛型基础• 泛型类型泛型类型是在类型上参数化的泛型类或接口• 泛型使用场景编译时强类型检查避免类型强转实现通用算法Java 泛型基础泛型类型擦写泛型被引入到 Java 语言中,以便在编译时提供更严格的类型检查并支持泛型编程。类型擦除确保不会为参数化类型创建新类;因此,泛型不会产生运行时开销。为了实现泛型,编译器将类型擦除应用于:• 将泛型类型中的所有类型参数替换为其边界,如果类型参数是无边界的,则将其替换为“Object”。因此,生成的字节码只包含普通类、接口和方法。

2020-09-23 22:15:01 67

转载 Spring 类型转换

Spring 类型转换的实现• 基于 JavaBeans 接口的类型转换实现基于 java.beans.PropertyEditor 接口扩展• Spring 3.0+ 通用类型转换实现使用场景• 场景分析场景基于 JavaBeans 接口的类型转换实现Spring 3.0+ 通用类型转换实现数据绑定YESYESBeanWrapperYESYESBean 属性类型装换YESYES外部化属性类型转换NOYES基于 JavaBeans

2020-09-21 23:11:38 51

转载 Spring 数据绑定

Spring 数据绑定使用场景• Spring BeanDefinition 到 Bean 实例创建• Spring 数据绑定(DataBinder)• Spring Web 参数绑定(WebDataBinder)Spring 数据绑定组件• 标准组件org.springframework.validation.DataBinder• Web 组件org.springframework.web.bind.WebDataBinderorg.springframework.web.bin

2020-09-19 18:17:55 55

转载 Spring 校验

Spring 校验使用场景• Spring 常规校验(Validator)• Spring 数据绑定(DataBinder)• Spring Web 参数绑定(WebDataBinder)• Spring Web MVC / Spring WebFlux 处理方法参数校验Validator 接口设计• 接口职责Spring 内部校验器接口,通过编程的方式校验目标对象• 核心方法supports(Class):校验目标类能否校验validate(Object,Errors):校验目标

2020-09-19 16:21:56 54

转载 JAVA Instrumentation

什么是Instrumentation?java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。 Java SE5中使用JVM TI替代了JVM PI和JVM DI。提供一套代理机制,支持独立于JVM应用程序之外的程序以代理的方式连接和访问JVM。java.lang.instrument是在JVM TI的基础上提供的Java版本的实现。 Instrumentatio

2020-09-18 16:42:41 25

转载 Spring 国际化

Spring 国际化使用场景• 普通国际化文案• Bean Validation 校验国际化文案• Web 站点页面渲染• Web MVC 错误消息提示Spring 国际化接口• 核心接口org.springframework.context.MessageSource• 主要概念文案模板编码(code)文案模板参数(args)区域(Locale)层次性 MessageSource• Spring 层次性接口回顾org.springframework.beans.fac

2020-09-18 00:10:26 29

转载 Spring 资源管理

引入动机• 为什么 Spring 不使用 Java 标准资源管理,而选择重新发明轮子?• Java 标准资源管理强大,然而扩展复杂,资源存储方式并不统一• Spring 要自立门户(重要的话,要讲三遍)• Spring “抄”、“超” 和 “潮”Java 标准资源管理• Java 标准资源定位职责说明面向资源文件系统、artifact(jar、war、ear 文件)以及远程资源(HTTP、FTP 等)API 整合java.lang.ClassLoader#getR

2020-09-15 00:25:24 35

转载 Spring 配置元信息

Spring 配置元信息配置元信息• Spring Bean 配置元信息 - BeanDefinition• Spring Bean 属性元信息 - PropertyValues• Spring 容器配置元信息• Spring 外部化配置元信息 - PropertySource• Spring Profile 元信息 - @ProfileSpring Bean 配置元信息Bean 配置元信息 - BeanDefinition• GenericBeanDefinition:通用型 BeanD

2020-09-13 20:00:59 59

转载 Spring Bean 生命周期

Spring Bean 元信息配置阶段BeanDefinition 配置• 面向资源XML 配置Properties 资源配置public class BeanMetadataConfigurationDemo { public static void main(String[] args) { DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); // 实

2020-09-13 17:12:43 57

转载 Spring Bean 作用域

Spring Bean 作用域作用域来源说明singleton默认 Spring Bean 作用域,一个 BeanFactory 有且仅有一个实例prototype原型作用域,每次依赖查找和依赖注入生成新 Bean 对象request将 Spring Bean 存储在 ServletRequest 上下文中session将 Spring Bean 存储在 HttpSession 中application将 Spring Bean 存储在 Servle

2020-09-13 01:04:20 21

转载 Spring IoC 依赖来源

依赖查找的来源查找来源来源配置元数据Spring BeanDefinition<bean id=“user” class=“org.geekbang…User”>@Bean public User user(){…}BeanDefinitionBuilder单例对象API 实现Spring 內建 BeanDefintionBean 名称Bean 实例使用场景org.springframework.context.an

2020-09-12 23:27:20 32

转载 Spring IoC 注入

依赖注入的模式和类型• 手动模式 - 配置或者编程的方式,提前安排注入规则XML 资源配置元信息Java 注解配置元信息API 配置元信息• 自动模式 - 实现方提供依赖自动关联的方式,按照內建的注入规则Autowiring(自动绑定)依赖注入类型依赖注入类型配置元数据举例Setter 方法<proeprty name=“user” ref=“userBean”/>构造器<constructor-arg name=“user” ref=

2020-09-12 01:07:34 48

转载 Spring IoC 依赖查找

单一类型依赖查找单一类型依赖查找接口 - BeanFactory• 根据 Bean 名称查找getBean(String)Spring 2.5 覆盖默认参数:getBean(String,Object…)• 根据 Bean 类型查找Bean 实时查找Spring 3.0 getBean(Class)Spring 4.1 覆盖默认参数:getBean(Class,Object…)Spring 5.1 Bean 延迟查找getBeanProvider(Class)getBea

2020-09-11 01:13:01 28

转载 Spring Bean 基础

定义 Spring Bean什么是 BeanDefinition?BeanDefinition 是 Spring Framework 中定义 Bean 的配置元信息接口,包含:• Bean 的类名• Bean 行为配置元素,如作用域、自动绑定的模式,生命周期回调等• 其他 Bean 引用,又可称作合作者(collaborators)或者依赖(dependencies)• 配置设置,比如 Bean 属性(Properties)BeanDefinition 元信息BeanDefinition 元

2020-09-09 23:24:21 48

转载 Spring IoC 容器概述

Spring IoC 依赖查找根据 Bean 名称查找实时查找private static void lookupInRealTime(BeanFactory beanFactory) { User user = (User) beanFactory.getBean("user"); System.out.println("实时查找:" + user);}延迟查找<bean id="objectFactory" class="org.springframework.bea

2020-09-09 22:27:48 14

转载 重新认识 IoC

IoC 发展简介什么是 IoC ?In software engineering, inversion of control (IoC) is a programming principle. IoC inverts the flow ofcontrol as compared to traditional control flow. In IoC, custom-written portions of a computer program receive the flow of control fr

2020-09-08 01:58:51 41

转载 Spring Framework 总览

Spring 特性总览核心特性(Core)• IoC 容器(IoC Container)• Spring 事件(Events)• 资源管理(Resources)• 国际化(i18n)• 校验(Validation)• 数据绑定(Data Binding)• 类型装换(Type Conversion)• Spring 表达式(Spring Express Language)• 面向切面编程(AOP)数据存储(Data Access)• JDBC• 事务抽象(Transactions)

2020-09-08 01:29:08 34

转载 什么是ObjectFactory?什么是ObjectProvider?

ObjectFactory接口定义// 一个对象工厂public interface ObjectFactory<T> { // 返回一个对象 T getObject() throws BeansException;}这个接口的定义非常简单,就是一个对象工厂,定义了一个返回对象的工厂方法。回顾我们直接介绍过的一个内容FactroyBean,其接口定义如下:public interface FactoryBean<T> { @Nullable T

2020-07-04 22:01:38 192

转载 Kafka可靠性探究

Kafka中采用了多副本的机制, 这是大多数分布式系统中惯用的手法, 以此来实现水平扩展、提供容灾能力、提升可用性和可靠性等。我们对此可以引申出一系列的疑问:Kafka多副本之间如何进行数据同步,尤其是在发生异常时候的处理机制又是什么?多副本间的数据一致性如何解决, 基于的一致性协议又是什么?如何确保Kafka的可靠性?Kafka中的可靠性和可用性之间的关系又如何?本章从副本的角度切入来深挖Kafka中的数据一致性、数据可靠性等问题, 主要包括副本剖析、日志同步机制和可靠性分析等内容。1、副本剖析副本

2020-06-19 13:41:52 430

转载 深入浅出MappedByteBuffer

前言java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。内存管理在深入MappedByteBuffer之前,先看看计算机内存管理的几个术语:MMC:CPU的内存管理单元。物理内存:即内存条的内存空间。虚拟内存:计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个

2020-06-14 14:43:41 120

转载 Java多线程中断机制

在学习/编写并发程序时,总会听到/看到如下词汇:线程被中断或抛出InterruptedException设置了中断标识清空了中断标识判断线程是否被中断在 Java Thread 类又提供了长相酷似,让人傻傻分不清的三个方法来处理并发中断问题:interrupt()interrupted()isInterrupted()![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607234307618.png 600x)看到这我不禁会问自己:什

2020-06-07 23:58:59 91

转载 双亲委派模型

双亲委派模型在介绍这个Java技术点之前,先试着思考以下几个问题:为什么我们不能定义同名的 String 的 java 文件?多线程的情况下,类的加载为什么不会出现重复加载的情况?下面代码,虚拟机是怎样初始化注册 Mysql 连接驱动(Driver)的?Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?characterEncoding=GBK", "root", "000000");

2020-06-07 18:12:16 93 1

转载 面试volatile关键字时,我们应该具备哪些谈资?

写在前面在 可见性有序性,Happens-before来搞定 文章中,happens-before 的原则之一: volatile变量规则对一个 volatile 域的写, happens-before 于任意后续对这个 volatile 域的读按理说了解了这个规则,对 volatile 的使用就已经足够了,但是面试官可是喜欢刨根问到底的,为了更透彻的了解 volatile 的内存语义与读写语义,为了面试多一些谈资进而获得一些加分项,同时尽早填补前序文章留下的坑,于是乎这篇文章就这样尴尬的诞生了

2020-06-05 20:10:59 118

转载 可见性有序性,Happens-before来搞定

写在前面上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug为了解决 CPU,内存,IO 的短板,增加了缓存,但这导致了可见性问编译器/处理器擅自优化 ( Java代码在编译后会变成 Java 字节码, 字节码被类加载器加载到 JVM 里, JVM 执行字节码, 最终需要转化为汇编指令在 CPU 上执行) ,导致有序性问题初衷是好的,但引发了新问题,最有效的办法就禁止缓存和编译优化,问题虽然

2020-06-05 19:44:58 134

转载 这么理解线程生命周期,是不是很简单?

为什么要了解线程的生命周期?之前写过 Spring Bean 生命周期三部曲:Spring Bean生命周期之缘起Spring Bean生命周期之缘尽Spring Aware 到底是什么?有朋友留言说:“了解了它们的生命周期后,使用 Spring Bean 好比看到它们的行动轨迹,现在使用就一点都不慌了”。我和他一样,了解事物的生命周期目的很简单,唯【不慌】也Java 并发系列 已经写了很多,从来还没提起过那个它【Java线程生命周期】。有了前序理论图文的铺垫,在走进源码世界之前,谈论它的时机恰

2020-06-05 16:00:25 74

转载 面试问我,创建多少个线程合适?我该怎么说

并发编程适用于什么场景?如果问你选择多线程的原因就是一个【快】字,面试也就不会出那么多幺蛾子了。你有没有问过你自己并发编程在所有场景下都是快的吗?知道它很快,何为快?怎样度量?想知道这两个问题的答案,我们需要一个从【定性】到【定量】的分析过程使用多线程就是在正确的场景下通过设置正确个数的线程来最大化程序的运行速度(我感觉你还是啥也没说)将这句话翻译到硬件级别就是要充分的利用 CPU 和 I/O 的利用率两个正确得到保证,也就能达到最大化利用 CPU 和 I/O的目的了。最关键是,如何做到

2020-06-05 15:00:00 88

转载 @ConfigurationProperties 注解使用姿势,这一篇就够了

在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解,我们可以方便的获取这些参数值使用 @ConfigurationProperties 配置模块假设我们正在搭建一个发送邮件的模块。在本地测试,我们不想该模块真的发送邮件,所以我们需要一个参数来「开关」 disable 这

2020-06-05 13:26:13 262

转载 Https原理及流程

HTTPS通信过程HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明,后来各个浏览器均支持SSL,其最新的版本是3.0TLS的全称是Transport La

2020-05-30 15:52:47 63

转载 面试官,不要再问我三次握手和四次挥手

请画出三次握手和四次挥手的示意图为什么连接的时候是三次握手?什么是半连接队列?ISN(Initial Sequence Number)是固定的吗?三次握手过程中可以携带数据吗?如果第三次握手丢失了,客户端服务端会如何处理?SYN攻击是什么?挥手为什么需要四次?四次挥手释放连接时,等待2MSL的意义?1. 三次握手三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能

2020-05-30 14:04:43 79

原创 【设计模式】建造者模式

建造者模式(Builder Pattern) 是将一个复杂对象的构建过程与它的表示分离, 使得同样的构建过程可以创建不同的表示,属于创建型模式。使用建造者模式对于用户而言只需指定需要建造的类型就可以获得对象,建造过程及细节不需要了解。建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定。如果一个对象有非常复杂的内部结构(很多属性),可以将复杂对象的创建和使用进行分离。建造者模式的设计...

2020-04-08 23:16:28 1240

转载 45讲自增id用完怎么办?

MySQL里有很多自增的id,每个自增id都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型(unsigned int)是4个字节,上限就是232-1。既然自增id有上限,就有可能被用完。但是,自增id用完了会怎么样呢?今天这篇文章,我们就来看看MySQL里面的几种自增id,一起分析一下它们的值达到上限...

2020-03-20 17:15:28 160

转载 44讲答疑文章(三):说一说这些好问题

在我看来,能够帮我们扩展一个逻辑的边界的问题,就是好问题。因为通过解决这样的问题,能够加深我们对这个逻辑的理解,或者帮我们关联到另外一个知识点,进而可以帮助我们建立起自己的知识网络。在工作中会问好问题,是一个很重要的能力。经过这段时间的学习,从评论区的问题我可以感觉出来,紧跟课程学习的同学,对SQL语句执行性能的感觉越来越好了,提出的问题也越来越细致和精准了。接下来,我们就一起看看同学们在评...

2020-03-20 15:08:30 84

转载 43讲要不要使用分区表

我经常被问到这样一个问题:分区表有什么问题,为什么公司规范不让使用分区表呢?今天,我们就来聊聊分区表的使用行为,然后再一起回答这个问题。分区表是什么?为了说明分区表的组织形式,我先创建一个表t:CREATE TABLE `t` ( `ftime` datetime NOT NULL, `c` int(11) DEFAULT NULL, KEY (`ftime`)) ENGINE...

2020-03-19 22:53:31 79

转载 42讲grant之后要跟着flushprivileges吗

在MySQL里面,grant语句是用来给用户赋权的。不知道你有没有见过一些操作文档里面提到,grant之后要马上跟着执行一个flush privileges命令,才能使赋权语句生效。我最开始使用MySQL的时候,就是照着一个操作文档的说明按照这个顺序操作的。那么,grant之后真的需要执行flush privileges吗?如果没有执行这个flush命令的话,赋权语句真的不能生效吗?接下来,我...

2020-03-19 22:22:36 124

转载 41讲怎么最快地复制一张表

我在上一篇文章最后,给你留下的问题是怎么在两张表中拷贝数据。如果可以控制对源表的扫描行数和加锁范围很小的话,我们简单地使用insert … select 语句即可实现。当然,为了避免对源表加读锁,更稳妥的方案是先将数据写到外部文本文件,然后再写回目标表。这时,有两种常用的方法。接下来的内容,我会和你详细展开一下这两种方法。为了便于说明,我还是先创建一个表db1.t,并插入1000行数据,同时创...

2020-03-19 14:20:53 71

转载 40讲insert语句的锁为什么这么多

在上一篇文章中,我提到MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。因此,insert语句是一个很轻量的操作。不过,这个结论对于“普通的insert语句”才有效。也就是说,还有些insert语句是属于“特殊情况”的,在执行过程中需要给其他资源加锁,或者无法在申请到自增id以后就立马释放自增锁。那么,今天这篇文章,我们就一起来聊聊这个话题。insert … selec...

2020-03-18 21:59:32 88

转载 39讲自增主键为什么不是连续的

在第4篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。之前我见过有的业务设计依赖于自增主键的连续性,也就是说,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。今天这篇文章,我们就来说说这个问题,看看什么情况下自增主键会出现 “空洞”?为了便于说明,我们创建一个表t,其中id是自增主键字段、c...

2020-03-18 15:12:21 124

html5帮助文档

很好的html5帮助文档, 值得拥有。

2012-06-14

css2.0cmh文档

内容比较全,讲解比较到位,很适合下载使用

2012-03-19

java编程思想第四版(含源码和课后答案)pdf

java编程思想第四版pdf包括源码和课后答案

2012-03-03

一直不懂的留言板

发表于 2020-01-02 最后回复 2020-01-02

正则表达式

发表于 2014-01-09 最后回复 2014-01-12

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