自定义博客皮肤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)
  • 资源 (3)
  • 收藏
  • 关注

原创 打击面试重灾区——Synchronized原理

兄弟们,大家好。时隔多天,我,终于来了。今天我们来聊一下让人神魂颠倒的Synchronized。不过呢,在读这篇文章之前,我希望你真正使用过这个东东,或者了解它到底是干嘛用的,不然很难理解这篇文章讲解的东西。这篇文章的大体顺序是:从无锁–>偏向锁–>轻量级锁–>重量级锁讲解,其中会涉及到CAS,对象内存布局,缓存行等等知识点。也是满满的干货内容。其中也夹杂了个人在面试过程中出现的面试题,各位兄弟慢慢享受。Synchronized在jdk1.6做了非常大的优化,避免了很多时候的用户态到

2020-11-04 22:43:40 175

原创 lsp都要会的内存模型

兄弟们好,给大家带来一篇内存模型的水文(手动滑稽)。Begin先来看大纲1.JMM规范先来说JMM是什么?JMM(Java Memory Model):全称Java内存模型。它定义了**Java虚拟机在计算机内存中的工作方式**。它是一套规范,并不真实存在。它包括三个点:原子性,可见性,有序性首先我们来看一下它的工作原理。线程操作数据的时候需要从主内存中读取,线程操作完数据以后进行写回主内存。可能有的兄弟要说了,为什么要搞这么麻烦呢?我直接操作主内存中的数据不就得了,干嘛非要复制一份再用。

2020-10-31 19:05:58 419

原创 自定义上下文和MyBatiaPlus自动填充

兄弟们好,今天和大家分享一些自己在工作中的一些小的 Tips 。算的上一些小的经验了,这个专栏会持续更新下去。今天主要有两个重要的点:1,自定义一个上下文,例如 Spring Security 的用户信息上下文;2,MyBatis Plus 自动插入更新能力1. 环境上下文1.1 什么是上下文?在生活中,我们处理事情的时候,首先要了解背景,然后才能看事情产生的原因和事情产生的后果,最后得出...

2022-05-01 07:26:28 249

原创 延时队列原理及其实现

延迟队列实现及其容灾方案兄弟们好,已经很久没有更新文章了呀,国庆结束以后会逐渐恢复更新的。今天我们来聊一下延迟队列。在日常的业务开发中,相信大家都遇到过需要让一些任延迟执行的场景,比如与我们息息相关的:京东、美团和淘宝下单以后,若当时没有付款,此时会默认存在一个倒计时,一般是 30 分钟,如果在该时间内你没有付款,则订单取消。可以发现这个需求本质上就是需要在创建订单以后的 30 分钟以...

2022-05-01 07:26:28 416

原创 函数式编程

函数式编程1. 函数高中一年级,应该是最早接触函数这个概念的时间,印象很深刻,毕竟是高考压轴大题,但它却是必修一第二章的内容。我们来看一个必修一中最简单的一个函数:$$y=f(x)$$上面的函数由三个部分组成:x 自变量,由它决定初始值f 它代表一个规则,用来对 自变量 进行计算。它也是用来描述函数关系的。y 因变量,它用来标识通过函数计算以后的结果一个函数的定义是:一个...

2022-05-01 07:26:28 145

原创 你还不不知道SpringMVC怎么处理请求的吗?

MVC总结1. 概述还是之前的三个套路1.1 是什么?Spring提供一套视图层的处理框架,他基于Servlet实现,可以通过XML或者注解进行我们需要的配置。他提供了拦截器,文件上传,CORS等服务。1.2 为什么用?原生Servlet在大型项目中需要进过多重封装,来避免代码冗余,其次由于不同接口需要的参数不同,我们需要自己在Servlet层 封装我们需要的参数,这对于开发者来说是一种重复且枯燥的工作,于是出现了视图层框架,为我们进行参数封装等功能。让开发者的注意力全部放在逻辑架构中,不需要

2020-11-17 18:26:12 164

原创 用一种方式,品读Lock和Synchronized锁

1.Synchronized锁底层是monitor监视器,每一个对象再创建的时候都会常见一个monitor监视器,在使用synchronized代码块的时候,会在代码块的前后产生一个monitorEnter和monitorexit指令,来标识这是一个同步代码块。1.1 执行流程线程遇到同步代码块,给这个对象monitor对象加1,当线程退出当前代码块以后,给这个对象的monitor对象减一,如果monitor指令的值为0则当前线程释放锁。1.2 反编译源码同步代码块反编译public void

2020-11-12 15:37:00 76

原创 面试重灾区——JVM内存结构和GC

JVM介绍更多原创文章和学习教程请关注 同名公众号@MakerStack1. JVM的体系架构(内存结构)绿色的为线程私有,橘色的为线程共有2. 类加载器负责将.class文件加载到内存中,并且将该文件中的数据结构转换为方法区中的数据结构,生成一个Class对象2.1 类加载器分类自启动类加载器。Bootstrap ClassLoader类加载器。负责加载jdk自带的包。%JAVA_HOME%/lib/rt.jar%即JDK源码使用C++编写在程序中直接获取被该加载器加载的类

2020-11-10 11:27:52 158

原创 面试官都会问的SpringIOC及其启动原理

IOC总结1. IOC概述三个问题:IOC是什么为什么用它怎么用1.1 是什么?两个概念:控制反转,依赖注入来看一下传统的干活方式:在对象单一职责原则的基础上,一个对象很少有不依赖其他对象而完成自己的工作,所以这个时候就会出现对象之间的依赖。而体现在我们的开发中,就是需要什么对象的时候,就创建什么对象,此时对象创建的控制权在我们自己手里。当对象创建的太多的时候,就会出现一个对象更改,就得更改所有依赖它的对象,耦合性大。自主性体现的同时也出现了对象耦合严重的情况。这个时候,我们就会思

2020-11-09 09:54:06 1324 2

原创 抽丝剥茧——调停者和门面设计模式

调停者和门面设计模式今天我们来聊两个设计模式:调停者设计模式和门面设计模式,为什么要将他们放在一起讲解,因为他们两个东东太像了,仅仅是由于作用的地方不同而产生的不同的叫法。我们用一个对于我们90后最难的一个问题来入手吧。假设我们厌倦了城市生活,想要找一个安静的地方安家,养猪,顺便写一个猪脸识别来分类管理这些猪(梦想中的生活)。而在做这些事情的前提,我们必须建造一个房子和一个猪圈。我们来看一下我们以前会怎么做。盖房子需要工人,砖头,水泥等等,我们需要一个一个联系所需要的人。但我这么聪明当然不会这么干

2020-11-07 13:55:44 272 5

原创 基于MVC实现的RESTFul 风格API实现

基于MVC的RESTful风格的实现1.RESTful风格阐述REST服务是一种ROA(Resource-Oriented Architecture,面向资源的架构)应用。主要特点是方法信息存在于HTTP协议的方法中(GET,POST,PUT,DELETE),作用域存在于URL中。例如,在一个获取设备资源列表的GET请求中,方法信息是GET,作用域信息是URI种包含的对设备资源的过滤、分页和排序等条件良好的REST API不需要任何文档1.1REST风格资源路径REST风格的资源路径设计是面向

2020-11-06 14:59:04 304

原创 ThreadLocal深度解析

今天呢,和大家聊一下ThreadLocal。1. 是什么?JDK1.2提供的的一个线程绑定变量的类。他的思想就是:给每一个使用到这个资源的线程都克隆一份,实现了不同线程使用不同的资源,且该资源之间相互独立2. 为什么用?思考一个场景:数据库连接的时候,我们会创建一个Connection连接,让不同的线程使用。这个时候就会出现多个线程争抢同一个资源的情况。这种多个线程争抢同一个资源的情况,很常见,我们常用的解决办法也就两种:空间换时间,时间换空间没有办法,鱼与熊掌不可兼得也。就如我们的CAP理论

2020-11-05 17:31:41 119

原创 一篇搞定Java集合类原理

Java集合类实现原理1.Iterable接口定义了迭代集合的迭代方法iterator()forEach() 对1.8的Lambda表达式提供了支持2. Collection接口定义了集合添加的通用方法int size();boolean isEmpty();boolean contains();boolean add()boolean addAll()boolean remove() removeAll()Object[] toArray()3.List接

2020-11-03 22:49:14 210

原创 抽丝剥茧——单例设计模式

单例设计模式兄弟们好,今天是最后一个设计模式了,也是我们最熟悉的单例设计模式,可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候,老师聊到一个饿汉式和懒汉式,我还纠结了半天,这名字起的很完美。接下来我们一起复习一下单例设计模式吧。**定义:**该类的实例仅仅存在一个。单个实例对象——单例模式我们直接上代码1. 懒汉式public class Single { private static final SingleDesgin singleDesgin = new

2020-10-31 17:37:57 170

原创 抽丝剥茧——代理设计模式

代理设计模式代理设计模式再生活中应该很常见了,现在各种中间商的货物代售方便了我们的生活也增加了我们生活的成本。这种生活中的中间商行为就是一种代理模式。拿一个品牌来说明:在编程领域中一般存在两种代理模式静态代理。(仅仅可以代理一个类的行为,不能随类的变化而变化)动态代理。(可以代理所有类的行为)接下来我们先来看静态代理1. 静态代理仅仅用来代理一个类的行为。代码演示一下:继承实现代理(不推荐,耦合性大)class NaiKe { void run() {

2020-10-31 17:36:40 86

原创 抽丝剥茧——备忘录设计模式

备忘录设计模式兄弟们好,今天来和大家聊聊备忘录设计模式。它的主要思想是:保存一个对象在某一时刻的副本,并且该对象的副本在外部不可以被访问,同时该对象的副本可以被内部重新加载和修改看到这里,有没有想到我们的序列化。在学习IO流的时候我们可以通过Serializable实现对象的序列化,这个序列化的过程就是一个备忘录的过程,通过对当前对象序列化,包含当前的状态,当需要的时候再将这个状态加载进来。我们常常见过的游戏存档就是这个实现原理,将所有涉及到对象全部序列化,包含再本地文件中,然后读档的时候再加载进去

2020-10-31 00:15:02 101

原创 抽丝剥茧——策略设计模式

策略设计模式哈喽,兄弟们好。今天我们来聊一下策略设计模式。兄弟们有没有写过这样的代码呢?if(){ }else if(){ }else if(){ }else if(){ }else if(){ }else{ }这样的代码往往在业务中的体现是:根据用户不同的身份进行特定的处理,不过随着系统的不断扩大,会导致代码变得越来越臃肿。所以我们需要学习以下策略模式来解决这样的问题。我们来看一下策略模式做了什么?策略模式最主要的特点是:将要执行

2020-10-31 00:14:23 189

原创 备忘录设计模式

备忘录设计模式兄弟们好,今天来和大家聊聊备忘录设计模式。它的主要思想是:保存一个对象在某一时刻的副本,并且该对象的副本在外部不可以被访问,同时该对象的副本可以被内部重新加载和修改看到这里,有没有想到我们的序列化。在学习IO流的时候我们可以通过Serializable实现对象的序列化,这个序列化的过程就是一个备忘录的过程,通过对当前对象序列化,包含当前的状态,当需要的时候再将这个状态加载进来。...

2020-10-30 15:48:46 150 1

原创 构建者设计模式

构建者设计模式兄弟们好,今天我们来聊一下构建者设计模式。这个设计模式你一定见到过,可能只是它认识你而你不认识它而已,我们在学习StringBuilder的时候有没有见过append的链式编程,还有在使用Mybatis,zookeeper,线程池等等框架的时候,是不是经常会看到如下的代码new FactoryBuilder() .setName() .setFactory()...

2020-10-30 15:48:46 136

原创 单例设计模式

单例设计模式兄弟们好,今天是最后一个设计模式了,也是我们最熟悉的单例设计模式,可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候,老师聊到一个饿汉式和懒汉式,我还纠结了半天,这名字起的很完美。接下来我们一起复习一下单例设计模式吧。**定义:**该类的实例仅仅存在一个。单个实例对象——单例模式我们直接上代码1. 懒汉式public class Single { ...

2020-10-30 15:48:46 48

原创 状态设计模式

兄弟们好,今天我们来学习一下状态设计模式。它的定义是:一个对象在不同的状态可以显示不同的动作,比如,在公司我们是打工人,在家里我们是老公,在教室我们是老师,因为我们的所处的环境不同而导致我们拥有不同的动作行为。这就是状态设计模式。我们在日常学习中这种状况很常见,比如TCP连接建立和销毁的过程,从不同的状态进行迁移,而表现出来地动作也不相同,又如一个线程的的状态,从五个状态不断地切换。我们来看...

2020-10-30 15:48:46 176

原创 组合设计模式

组合设计模式兄弟们好,今天我们来聊一下组合设计模式。没错这里面的组合就是我们经常用来代替继承的组合。而组合设计模式强调的是:将对象组合成树形结构来表现“部分和整体”的层次结构,可以让客户端通过一种方式处理单个对象或者多个对象组合。我们看一下它的角色组成:组合部件(Component):抽象角色,为要组合的对象提供统一的接口,客户端要调用的功能。叶子(Leaf):在组合中表示结对对象,叶...

2020-10-30 15:48:46 96

原创 原型设计模式

原型设计模式今天我们来聊一下原型设计模式,它主要的作用就是克隆对象,省去创建对象和填充属性的过程。对前端JS有了解的兄弟,应该对这个设计模式很熟悉了,前端的各种框架通过对一些内置对象的原型进行修改,来实现不同的效果。在Java中也类似。在Java中它做的事情就是:克隆对象,对应的API就是Object中的clone()方法。它在Java中存在两个分类深克隆。会将对象内部的引用类型也克隆...

2020-09-28 13:25:29 61

原创 策略设计模式

策略设计模式哈喽,兄弟们好。今天我们来聊一下策略设计模式。兄弟们有没有写过这样的代码呢?if(){ }else if(){ }else if(){ }else if(){ }else if(){ }else{ }这样的代码往往在业务中的体现是:根据用户不同的身份进行特定的处理,不过随着系统的不断扩大,会导致代码变得越来越臃肿。所以...

2020-09-28 13:25:29 47

原创 桥接设计模式

桥接设计模式今天我们来学习一个新的设计模式,桥接设计模式。它关注的点是将实现和抽象分层独立,互相不影响,可以独立进行扩展我们先来看一下传统的干活方式,不使用桥接,让抽象层和实现层建立关系。这里选用了小米手机的型号,可以看到无论是使用继承环视聚合的方式,抽象层和实现层之间均不相互独立,当有一者发生改变的时候,与之相关联的就会发生改变。也正是因为这个原因出现了桥接设计模式。我们来具体看一下桥...

2020-09-28 13:25:29 62

原创 观察者模式

观察者模式这个模式和我们的生活比较接近,我们往往需要对一件事情进行针对性的及时处理。比如我们在操作一些只能设备,例如手机,我们点击屏幕以后,屏幕会对我们的点击触发一个响应,以获得我们需要的结果。这个就是一个观察者模式的实现,手机操作系统在监听屏幕的点击事件,当点击事件触发以后,找到对应的事件处理器,进行处理。我们可以解读以下上面的手机事件触发的场景,可以发现观察者模式的实现需要三个组件的配合...

2020-09-06 08:34:34 46

原创 MySQL面试题

MySQL数据库面试系列1. 事务的四大特性原子性。事务中的操作要么都执行,要么都不执行一致性。事务操作前的状态和事务操作后的状态相同进行财务转账的时候,A余额不足不能进行转账,如果进行了转账此时状态就不是正确的,于是进行回滚,此时保证了事务状态的一致性。事务前后,数据总额一致隔离性。多个事务之间彼此是不可见的。持久化。当事务提交以后,对于数据的更改不会受到数据库系统本身的影...

2020-03-29 03:00:57 38

原创 Servlet容器配置

SpringBoot嵌入式Servlet配置原理SpringBoot修改服务器配置配置文件方式方式修改,实际修改的是ServerProperties文件中的值server.servlet.context-path=/crudserver.port=8081Java代码方式修改。通过实现WebServerFactoryCusomizer接口来获取到达ConfigurableServl...

2020-03-28 11:13:48 92

原创 持久层自动配置

SpingBoot持久层开发原理1. JDBCSpringBoot关于数据库的配置都存在于org.springframework.boot.autoconfigure.jdbc关于数据库的相关配置存放于DataSourceProperties中@ConfigurationProperties( prefix = "spring.datasource")p...

2020-03-28 11:13:48 88 1

原创 java集合类原理

Java集合类实现原理1.Iterable接口定义了迭代集合的迭代方法iterator()forEach() 对1.8的Lambda表达式提供了支持2. Collection接口定义了集合添加的通用方法int size();boolean isEmpty();boolean contains();boolean add()boolean addAll()boole...

2020-03-28 10:52:30 72

Spring.xmind

SpringIOC,XML文件和注解版配置详解,配合AOP的使用方式,结合事务的使用,代理设计模式,适合于初学者学习。

2020-08-05

SpringMVC(02).xmind

SpringMVC入门思维导图2,建议配合之前的进行学习,内部总结比较详细,点赞走起来,给广大初学者一份学习的导图。

2020-08-05

Spring MVC框架.xmind

SpringMVC思维导图,可以根据上面的内容进行学习。内部包含最基本的使用,从MVC的启动流程到文件上传,拦截器等等。可以作为入门资料

2020-08-04

空空如也

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

TA关注的人

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