- 博客(57)
- 资源 (1)
- 收藏
- 关注
原创 架构设计之秒杀
目录简介业务特点及带来的问题高并发超卖恶意请求简介什么是秒杀?通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动。比如说京东秒杀,就是一种定时定量秒杀,在规定的时间内,无论商品是否秒杀完毕,该场次的秒杀活动都会结束。这种秒杀,对时间不是特别严格,只要下手快点,秒中的概率还是比较大的。淘宝以前就做过一元抢购,一般都是限量 1 件商品,同时价格低到「令人发齿」,这种秒杀一般都在开始时间 1 到3 秒内就已经抢光了,参与这个秒杀一般都是看运气的,不必太强求。业务特点及带来的问题在设计架构之前,我
2020-10-29 20:01:52
230
原创 Spring源码解析之依赖注入(DI)
目录依赖注入发生的时间依赖注入的关键类寻找获取Bean 的入口在上一篇理解了ioc初始化之后,我们学习下一个阶段依赖注入。依赖注入发生的时间当Spring IOC 容器完成了Bean 定义资源的定位、载入和解析注册以后,IOC 容器中已经管理类Bean定义的相关数据,但是此时IOC 容器还没有对所管理的Bean 进行依赖注入,依赖注入在以下两种情况发生:1)、用户第一次调用getBean()方法时,IOC 容器触发依赖注入。2)、当用户在配置文件中将元素配置了lazy-init=false 属性,
2020-10-27 19:43:13
315
原创 并发编程【待完善】
目录1. 基础1.1 并发编程的优缺点1.1.1 为什么要使用并发编程1.1.2 并发编程有什么缺点1.1.3 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?1.1.4 并行和并发有什么区别?1.1.5 什么是多线程,多线程的优劣?1.2 线程和进程的区别1.2.1 什么是线程和进程?1.2.2 进程与线程的区别1.2.3 什么是上下文切换?1.2.3.1 时间片1.2.3.2 并发与并行的概念?并行一定比串行更快吗?1.2.3.3 如何避免频繁的上下文切换?1.2.4 守护线程和用
2020-10-21 17:02:06
175
原创 Spring源码解析之IOC容器初始化
目录什么是IOCSpring IOC体系架构BeanFactoryBeanDefinitionBeanDefinitionReaderIOC容器的初始化什么是IOCIOC(inversion of control)控制反转,所谓控制反转就是把我们原先代码中需要实现的对象创建,反转给容器来实现,必然的我们需要创建一个容器,同样的需要一种描述让容器知道需要创建对象和对象之前的关系,这个描述的具体表现就是我们可配置的文件。DI(Dependency injection)依赖注入:就是对象是被动接受依赖类而不
2020-10-13 19:02:57
518
1
原创 SpringMVC原理及手撕源码
目录简介MVC的工作流程手撕源码自定义注解接口方法定义controllerDispacherServlet简介使用过spring mvc的小伙伴都知道,mvc在使用的时候,我们只需要在controller上注解上@controller跟@requestMapping(“URL”),当我们访问对应的路径的时候,框架便会帮我们去映射到指定的controller里面的指定方法,那么这一切都是怎么做到的呢?还有我们所传递过去的参数,为什么通过request.getParam就能轻易地 拿到呢?大家都知道mvc的
2020-10-13 15:19:33
255
原创 Spring源码环境构建
目录Spring源码下载基于Gradle 的源码构建步骤一 配置环境变量步骤二 检测环境及编译源码步骤三 转换为eclipse项目 构建步骤四 导入IDEA 构建Spring源码下载首先你的JDK 需要升级到1.8 以上。Spring3.0 开始,Spring 源码采用github 托管,不再提供官网下载链接。大家可自行去github 网站下载,我们使用的版本下载链接为:https://github.com/spring-projects/spring-framework/archive/v5.0.
2020-10-12 11:05:39
171
原创 Windows安装mysql步骤
目录安装包下载安装步骤配置环境变量生成data目录安装mysql启动mysql登录mysql修改密码安装包下载Mysql国内镜像:http://mirrors.sohu.com/mysql/MySQL-8.0/下载完成之后,找到下载的路径,解压即可!安装步骤配置环境变量变量名:MYSQL_HOME变量值:D:\mysql生成data目录以管理员身份运行cmd进入到bin目录执行命令:mysqld --initialize-insecure --user=mysql 在D:\m
2020-10-10 14:33:29
281
1
原创 重温设计模式之责任链
目录简介责任链模式:责任链模式的应用场景:实例责任链模式和建造者模式结合使用简介责任链模式:责任链模式(Chain of Responsibility Pattern) 是将链中每一个节点看作是一个对象, 每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。属于行为型模式。使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有
2020-10-10 11:32:22
155
原创 集合
目录1. 集合1.1 常用的集合类有哪些?1.2 List,Set,Map三者的区别?List、Set、Map 是否继承自 Collection 接口?List、Map、Set 三个接口存取元素时,各有什么特点?1.3 集合框架底层数据结构2. List3. Map4. Set1. 集合1.1 常用的集合类有哪些?分大类的话就是Map Set和List三大接口Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等S
2020-10-10 10:20:18
79
原创 java常规【待完善】
目录1. ==与equals()的区别2. hashCode()与 equals() 区别?为什么重写 equals 时必须重写 hashCode 方法?3. 深拷贝和浅拷贝4. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?5. Java 序列化中如果有些字段不想进行序列化,怎么办?1. ==与equals()的区别==: 作用是判断两个对象的地址是不是相等,即判断两个对象是否是同一个对象。这边要注意一下,基本数据类型==比
2020-10-10 09:39:30
74
原创 JVM知识基础
目录1. 类加载1.1 类加载过程或者说生命周期?1.1.1 说一下类加载的执行过程?1.1.2 描述一下JVM加载Class文件的原理机制 ?1.1.3 加载阶段1.1.4 验证阶段1.1.5 准备阶段1.1.6 解析过程1.1.7 初始化1.2 类加载器1.3 双亲委派1.4 破坏双亲委派2. 内存模型及垃圾回收2.1 内存模型(运行时数据区)有哪些,分别是啥作用? 线程私有是哪些,线程公有是哪些,谈谈为何如此?2.1.1 程序计数器2.1.2 java虚拟机栈2.1.3 本地方法栈2.1.4 堆2.
2020-09-29 15:50:19
168
原创 SpringCloud系列之Hystrix熔断器【待完善】
目录1. 简介2. 实例2.1 在RestTemplate和Ribbon上使用熔断器2.2 在Feign上使用熔断器2.3 使用Hystrix Dashboard 监控熔断器状态2.4 使用Turbine 聚合监控3. 源码解析1. 简介Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。“断路器” 本身是一种开关设置,当某个
2020-09-24 20:48:56
480
原创 SpringCloud系列之Feign声明式调用【待完善】
目录1. 简介2. 实例3. 源码解析1. 简介Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便.它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。Fe
2020-09-24 20:02:53
111
原创 重温设计模式之命令
目录1. 概念2. 实例1. 概念命令模式:将一个请求封装成一个对象,从而使得用户可以用不同的请求对用户进行参数化,对请求排队或者记录请求日志,以及支持可撤销动作。一般来说。在java中经常会涉及到,一个对象请求另一个对象调用其方法来达到目的,如果请求这不像或者不希望直接和被调用者打交道(不希望或者无法含有被请求者的引用,就可以使用命令模式)2. 实例结构:接受者命令接口具体命令请求者接受者:public class ComanyArmy { public void sne
2020-09-22 11:43:42
148
1
原创 SpringCloud系列之Ribbon负载均衡
目录1. Ribbon简介2. Ribbon实例3. Ribbon源码解析1. Ribbon简介2. Ribbon实例3. Ribbon源码解析
2020-09-18 19:42:08
285
原创 重温设计模式之观察者
目录1. 概念2. 实例1. 概念定义对象间的一对多依赖关系,当一个对象状态发生改变时,所有依赖它的对象都得到通知并且自动更新。结构:Observer【观察者接口】:接口,规定了具体观察者用来更细致操作的方法subject【主题】:接口,增加,删除,通知更新观察者【具体主题】:实现主题接口的实例,包含可以经常变化的数据,需要还是用一个集合【具体观察者】实现观察者接口的实例2. 实例首先我们定义观察者接口public interface Observer { public void
2020-09-18 16:43:05
84
原创 Mybatis逆向工程
目录引入pom增加配置文件执行引入pom这边以postgresql为例子引入pom<!-- mybatis-generator-core 反向生成java代码--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId>
2020-09-17 15:03:48
139
原创 重温设计模式之单例
目录1. 概念2. 实例2.1 单例模式实例1. 概念单例模式是什么?1)为了确保系统全过程中只产生一个实例。2)当我们再应用中遇到功能性冲突是,需要使用单例模式为啥要使用单例模式生活中单例的例子配置文件:如果不是单例的,两个配置文件内容是一样的,那么有一个是浪费的,如果不一样,那么该以谁为准呢。2. 实例2.1 单例模式实例...
2020-09-16 20:24:12
76
原创 RPC远程调用及Zookeeper注册中心
目录1. RPC实例1.1 服务端1.2 客户端2. 自定义RPC结合ZK注册中心实例2.1 服务端2.2 客户端1. RPC实例1.1 服务端接口public interface ILulfHello { String sayHello(String msg);}实现类public class LulfHelloImpl implements ILulfHello { @Override public String sayHello(String msg) {
2020-09-15 20:59:45
736
原创 Zookeeper监听Watcher机制底层原理
目录1. 事件机制2. 注册事件实例2.1 事件类型3. 事件实现原理4. 源码分析4.1 请求发送4.1.1 zookeeper构造函数4.1.2 ClientCnxn构造及start方法4.1.2.1 构造1. 事件机制Watcher 监听机制是 Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 zookeeper实现分布式锁、集群管理等功能。watc
2020-09-09 16:56:19
1445
1
原创 Zookeeper的Leader 选举实现底层原理
目录选主原理1. zookeeper的集群角色2. zookeeper的事务流程3. ZAB协议3.1 原子广播实现原理3.2 奔溃恢复实现原理4. leader 选举流程5. leader选举源码分析选主原理1. zookeeper的集群角色leaderleader是zookeeper集群的核心。1 事务请求的唯一调度的矗立着,他需要保证事务处理的顺序性2 集群内部各个服务器的调度者follower1 处理客户端非事务请求以及转发事务请求给leader服务器2 参与事务请求提议的pro
2020-09-02 20:18:56
243
原创 Postgresql备份及还原 shell脚本
导出脚本# define variablesDB_INSTALL_DIR='/opt/abc/web/components/postgresql11linux64.1'# DB_TYPE='PostgreSQL'DB_SERVER='10.33.43.77'DB_PORT='7092'DB_INSTANCE='testdb'DB_USER='user'DB_STORAGE='/opt/postgres/backup'# enter passwordexport PGPASSWORD='
2020-09-02 19:12:38
594
原创 zookeeper的java API使用及典型应用场景
目录javaAPI使用原生APIzkclientcurator典型应用场景分布式锁选主服务javaAPI使用原生APIzkclientcurator典型应用场景分布式锁选主服务
2020-08-24 08:34:02
301
原创 Dobbo面试题
(1)为什么要进行系统拆分?如何进行系统拆分?拆分后不用dubbo可以吗?dubbo和thrift有什么区别呢?如果不拆分,一个大的项目可能有数十万行代码,多人维护,很容易出现代码冲突,效率低下,而且每次更改的话都需要重启项目,重新测试,很麻烦。如果拆分成多个应用的话,每个人负责自己的那块,然后只要保证交互的接口无误即可,效率高而且事务抄。我们只需要关注分布式的相关问题即可。可以不用dubbo,大不了各个系统各自维护一个记录关联系统接口地址的配置文件,用接口来保持通信。不过会比较痛苦,比如接口重连,负
2020-08-23 21:51:05
111
原创 Redis面试题
你在项目上缓存是怎么使用的,缓存如果使用不当会出现什么后果?项目状态采取redis缓存,为了高性能和高并发。一个请求过来需要走业务逻辑来判断切换的页面状态,一系列的mysql操作可能需要耗时600ms,然后丢到缓存中一个key value,通过key查出value只要2ms。下次再访问的时候只需要从缓存中读就好了。高并发:mysql单机2000qps,高峰期肯定会炸的,而缓存单机支撑的并发一秒十几万。缓存说白了就是三个问题:1)数据一致性问题2)缓存雪崩3)缓存穿透4)缓存的并发竞争缓存
2020-08-23 21:49:43
280
原创 MQ常见面试题
面试官:你好候选人:你好大家寒暄一下。。。(面试官在你的简历上面看到了,呦,有个亮点,就是你在项目里用过MQ,比如说你用过ActiveMQ)面试官:你在系统里用过消息队列吗?(面试官在随和的语气中展开了面试)候选人:用过的面试官:那你说一下你们在项目里是怎么用消息队列的?候选人:我们项目上有个开标大厅的系统,大厅系统每次获悉到某个标段要开标的时候,就会发送一条信息到RabbitMQ中,后台有个评标系统负责获取消息然后做更新及导入动作。面试官:那你们为什么使用消息队列啊?候选人:额。。。(楞
2020-08-23 21:48:01
1795
原创 JVM类加载与双亲委派
目录类加载类加载的时机类加载的过程加载验证准备解析双亲委派类加载类加载的时机类从加载到虚拟机内存直到卸载出内存为止,它的整个生命周期包括:加载-验证-准备-解析-初始化-使用-卸载,其中验证-准备-解析称为链接在遇到下面情况,如果没有初始化,则需要先触发其初始化1)使用new 关键字实例化对象读取或者设置一个类的静态字段调用一个类的经后台方法2)使用java.lang.reflect包的方法对类进行反射调用,如果类没有初始化,则需要初发其初始化3)当初始化一个类的时候,如果其父类还没初始
2020-08-23 20:23:11
94
原创 Redis安装及命令简介【待完善】
目录redis 简介redis存储结构redis功能redis应用场景redis 安装【Centos】redis 命令行使用数据结构使用字符类型散列类型列表类型集合有序集合事务过期时间发布订阅redis 简介redis存储结构1)字符类型2)散列类型3)列表类型4)集合5)有序集合redis功能1)可以为每个key设置超时时间;expire2)可以通过列表类型来实现分布式队列3)支持发布订阅的消息模式 pub sub模型redis应用场景1)数据缓存(商品数据,新闻,热点)2)单
2020-08-19 20:03:35
92
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人