自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码流程

Spring源码流程1.Spring之核心模块1.1.Spring各模块之间的依赖关系1.2.SpringMVC实现的基本思路2.Spring IOC2.1.BeanFactory2.2.BeanDefinition2.3.BeanDefinitionReader2.4.Spring的定位,加载,注册流程3.Spring DI3.1.依赖注入的关键类3.2.依赖注入发生时间3.3.依赖注入执行细节3.4.Tips:BeanFactory和FactoryBean4.Spring AOP4.1.概念4.2.主要

2021-03-15 23:03:27 297 2

原创 数据结构与算法01-复杂度分析

数据结构与算法01-复杂度分析1.为什么需要进行复杂度分析?2.大O复杂度表示法3.时间复杂度分析4.几种常见时间复杂度实例分析4.1.O(1)4.2.O(logn),O(nlogn)4.3.O(m+n),O(m*n)5.空间复杂度分析6.最好,最坏情况时间复杂度7.平均情况时间复杂度8.均摊时间复杂度1.为什么需要进行复杂度分析?我们可以把代码跑一遍,通过统计监控就能得到算法执行的时间和占用内存大小,为什么还要做时间空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?这种评估算法执

2021-03-10 10:52:11 233

原创 重新认识面向对象(持续更新)

重新认识面向对象重新认识面向对象1.面向对象编程和面向对象编程语言1.1.封装,抽象,继承,多态解决的问题1.1.1.封装2.代码设计看似是面向对象,实际是面向过程2.1. 滥用getter,setter方法2.2.滥用全局变量和全局方法2.3.定义数据和方法分离的类3.抽象与接口4.基于接口而非实现编程5.多用组合少用继承5.1.为什么不推荐使用继承?5.2.组合相比继承有哪些优势?重新认识面向对象1.面向对象编程和面向对象编程语言面向对象编程有两个非常重要,非常基础的概念,那就是类(class)和

2021-01-29 13:55:20 243

原创 设计原则与思想(持续更新)

设计原则与思想设计原则与思想1.单一职责原则1.1.如何判断类的职责是否单一?1.2.类的职责是否设计越单一越好?2.开闭原则2.1.如何理解"对扩展开放,修改关闭"?3.里式替换原则4.接口隔离原则4.1.把"接口"理解为一组API接口集合4.2.把"接口"理解为单个API接口或函数4.3.把"接口"理解为OOP中的接口概念5.依赖反转原则5.1.控制反转(IOC)5.1.依赖注入(DI)5.3.依赖注入框架(DI Framework)5.4.依赖反转原则(DIP)设计原则与思想经典的设计原则:SOL

2021-01-18 11:34:29 210 1

原创 ElasticSearch中must和filter的区别

上图是项目中所使用的ES Java-high-level-client,问题来了,must和filter究竟有什么区别?哪些地方用must?哪些地方用filter?

2021-01-05 15:42:48 10331 3

原创 多线程原理

多线程原理多线程原理1.线程状态2.线程中止2.1.不正确的线程中止-stop2.2.正确的线程中止-interrupt2.3.正确的线程中止-标志位3.内存屏障和CPU缓存3.1.CPU性能优化手段-缓存3.1.1.缓存同步协议3.2.CPU性能优化手段-运行时指令重排3.3.引发的问题3.4.内存屏障4.线程通信4.1.通信方式4.1.1.文件共享4.1.2.变量共享4.1.3.线程协作-JDK API4.1.3.1.API-被弃用的suspend和resume4.1.3.2.API-wait/noti

2020-11-18 17:19:50 824

原创 Java程序的运行原理

Java程序运行原理Java程序运行原理1.class文件的内容1.1.class内容-版本号/访问控制1.2.class内容-常量池1.3.class内容-构造方法1.4.class内容-程序入口main方法2.JVM运行时数据区2.1.方法区2.2.堆内存2.3.虚拟机栈2.4.本地方法栈2.5.程序计数器3.Java程序完整运行分析3.1.加载信息到方法区3.2.创建线程来执行代码3.3.执行过程Java程序运行原理1.class文件的内容class文件包含Java程序执行的字节码,数据严格按照

2020-09-06 17:50:16 433

原创 操作系统与JVM

内容待完成…

2020-08-05 17:42:55 125

原创 Zip上传和解析的一些思考

需求:批量导入商品的图片;图片是用Zip包的形式;如下代码是上传Zip的业务代码,我们在别处调用的话直接去调用productBatchUploadManager.productBatchUploadQuickly(MultipartFile multipartFile)即可;productUploadQuickly(MultipartFile multipartFile)方法中分好几步去执行上传解析Zip中的图片:uZipUtils.readZipContentByFileMutiFile(mu

2020-08-04 14:35:16 468

原创 SpringBoot自动配置原理

@SpringBootContiguration注解是一个组合注解,内部包含了@Configuration,@Configuration注解实际上就是@Component;@EnableAutoConfiguration注解也是一个组合注解,内部包含了@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class),其中@Import(AutoConfigurationImportSelector.class)有方法如下:..

2020-08-03 17:51:08 154

原创 数据结构与算法01-复杂度分析

数据结构与算法01-复杂度分析1.为什么需要进行复杂度分析?我们可以把代码跑一遍,通过统计监控就能得到算法执行的时间和占用内存大小,为什么还要做时间空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?这种评估算法执行效率的方法是正确的.很多数据结构和算法书籍还给这种方法起了一个名字,叫事后统计法.但是,这种统计方法有非常大的局限性.测试结果非常依赖测试环境;测试结果受数据规模影响很大;所以,我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法,就是时间

2020-07-08 16:50:29 179

原创 JVM优化02

JVM优化021.垃圾回收的常见算法1.1.引用计数算法1.1.1.原理1.1.2.优缺点1.2.标记清除算法1.2.1.原理1.2.2.优缺点1.3.标记压缩算法1.3.1.原理1.3.2.优缺点1.4.复制算法1.4.1.JVM中年轻代内存空间1.4.2.优缺点1.5.分代算法2.垃圾收集器以及内存分配2.1.串行垃圾收集器2.1.1.设置垃圾回收为串行收集器2.2.并行垃圾收集器2.2.1.ParNew垃圾收集器2.2.2.ParallelGC垃圾收集器2.3.CMS垃圾收集器2.4.G1垃圾收集器2

2020-06-05 07:50:30 201

原创 JVM优化01

JVM优化011.为什么对JVM做优化2.JVM的运行参数2.1.三种参数类型2.2.标准参数2.2.1.通过-D设置系统属性参数2.2.2.-server与-client参数2.3.-X参数2.3.1. -Xint,-Xcomp,-Xmixed2.4. -XX参数2.5. -Xms与-Xmx参数2.6.查看JVM的运行参数2.6.1.运行Java命令时打印参数2.6.2.查看正在运行的JVM参数3.JVM的内存模型3.1.JDK1.7的堆内存模型3.2.JDK1.8的堆内存模型3.3.为什么要废弃1.7中

2020-06-05 07:49:15 221

原创 SpringBoot项目中Exception(异常)的设计思想

微服务中Exception(异常)的设计思想系统对于异常的处理可以使用统一的异常处理流程:自定义异常类型;自定义错误代码和错误信息;对于可预知的异常由程序员在代码中主动抛出,由SpringMVC统一捕获;可预知异常时程序员在代码中手动抛出本系统定义的特定异常类型,由于是程序员抛出的异常,通常信息比较比较齐全,程序员在抛出时会指定错误代码及错误信息,获取异常信息也比较方便;对于不可预知的异常(运行时异常)由SpringMVC统一捕获Exception类型的异常;可预知的异常及不可预知的运行时

2020-05-18 15:26:54 846

原创 如何解决重复冗余代码

如何解决重复冗余代码1.利用工厂模式+模板方法模式消除if...else和重复代码2.利用注解+反射消除重复代码3.利用属性拷贝工具消除重复代码1.利用工厂模式+模板方法模式消除if…else和重复代码我们可以把重复的逻辑定义在抽象类中,用子类来实现不同的那份逻辑;这个模式就是模板方法模式.我们在父类中实现了购物车处理流程模板,然后把需要特殊处理的地方留空白也就是留抽象方法定义,让子类去实现其中的逻辑.由于父类的逻辑不完整无法单独工作,因此需要定义为抽象类.public abstract class

2020-05-18 00:12:41 3480

原创 Spring的声明式事务常见问题总结

Spring的声明式事务常见问题总结1.事务有可能没有生效2.事务即便生效也不一定能回滚1.事务有可能没有生效@Transactional生效原则:除非特殊配置(比如使用AspectJ静态织入实现AOP),否则只有定义在public方法上的@Transactional才能生效.原因是Spring默认通过动态代理的方式实现AOP,对目标方法进行增强,private方法无法代理到,Sprin...

2020-05-04 21:21:02 378

原创 Java并发编程之美05

Java并发编程之美051.共享模型之不可变1.1.日期转化的问题1.2.不可变设计1.3.设计模式-享元模式1.3.1.简介1.3.2.体现1.3.2.1.包装类1.3.2.2.String串池1.3.2.3.BigDecimal BigInteger1.3.3.模式体现-自定义连接池1.4.无状态2.共享模型之工具2.1.线程池2.1.1.自定义线程池2.1.2.ThreadPoolExecu...

2020-04-19 23:50:50 230

原创 Java并发编程之美04

Java并发编程之美041.共享模型之无锁1.1.CAS与volatile1.2.CAS的特点1.3.原子整数1.4.原子引用1.4.1.ABA问题及解决1.5.原子数组1.6.字段更新器1.7.原子累加器1.7.1.LongAdder源码1.8.Unsafe1.共享模型之无锁public class AccountSafe { private AtomicInteger balanc...

2020-04-18 21:13:50 176

原创 Java并发编程之美03

Java并发编程之美031. 共享模型之内存1.1.Java内存模型1.2.可见性1.2.1.可见性问题分析1.2.2.解决方法1.2.3.可见性和原子性1.2.4.设计模式-两阶段终止模式1.2.5.设计模式-同步模式之Balking1.3.有序性1.3.1.指令重排序优化1.3.2.支持流水线的处理器1.3.3.有序性问题1.4.Volatile原理1.4.1.如何保证可见性1.4.2.如何保...

2020-04-12 16:56:01 227

原创 Java并发编程之美02

Java并发编程之美021.共享模型之管程1.1.synchronized1.2方法上的synchronized1.3.变量的线程安全1.3.1.局部变量的线程安全分析1.3.2成员变量的线程安全分析1.3.3.局部变量有可能出现的线程安全问题1.4.常见线程安全类1.4.1.线程安全类方法的组合1.4.2.不可变类线程安全性1.5.Monitor1.5.1.Java对象头1.5.2.Monito...

2020-04-06 23:08:53 660

原创 Java并发编程之美01

Java并发编程011.概念1.1.进程与线程1.2.并行与并发1.3.应用1.3.1.异步调用1.3.2.提高效率2.Java线程2.1.创建和运行线程2.2.查看进程线程的方法2.3.线程运行的原理2.4.常见方法2.5.start和run2.6.sleep与yield2.7.join2.8.interrupt2.8.1.打断阻塞状态的线程2.8.2.打断运行状态的线程2.8.3.设计模式-两...

2020-04-04 22:22:14 253

原创 Elastic Stack系列--Beats、Kibana、Logstash

16-Elastic Stack(Beats、Kibana、Logstash)1.Beats简介1.1.Filebeat1.1.1架构用于监控,收集服务器日志文件1.1.2.部署与运行下载:https://www.elastic.co/cn/downloads/beats/filebeattar -xvf filebeat-6.5.4-linux-x86_64.tar.gz...

2020-03-22 14:37:46 464

原创 Elastic Stack系列--ElasticSearch高级

1.全文检索1.1.倒排索引倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值.而是由属性值来确定记录的位置,因而称为倒排索引(inverted index).带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file).正排索引:转化成倒排索引:说明:"单词ID"一...

2020-03-14 22:20:09 247

原创 Elastic Stack系列--ElasticSearch基础

1.Elastic Stack简介ELK实际上是三款软件的简称,分别是ElasticSearch,Logstash,Kibana组成.在发展的过程中,又有了新成员Beats的加入,所以就形成了Elastic Stack.所以说,ELK是旧的称呼,Elastic Stack是新的名字.ElasticSearch:ELasticSearch基于Java,是个开源分布式搜索引擎,它的特点有:分...

2020-03-01 00:45:23 305

原创 RocketMQ总结(第二部分)

1.RocketMQ错误消息重试策略在消息的发送和消费的过程中,都有可能出现错误,如网络异常等,出现了错误就需要进行错误重试,这种消息的重试分两种,分别是producer端重试和consumer端重试。1.1.Producer端重试生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败。package org.fechin.rocke...

2020-02-25 21:46:12 235

原创 Linux基础(第二部分:系统管理篇)

2.系统管理篇2.1.网络管理2.1.1.网络状态查看网络状态查看工具主流有两个工具包(net-tools和iproute)net-toolsifconfigeth0是我们的第一块网卡(网络接口)但我们的第一个网络接口可能叫做下面的名字eno1 板载网卡ens33 PCI-E网卡enp0s3 无法获取物理信息的PCI-E网卡CentOS7使用了一致性设备命名,以上...

2020-02-24 17:21:49 177

原创 Linux基础(第一部分:系统操作篇)

Linux(CentOS7)我构建项目服务的时候,每次都在Linux上栽跟头。终于在昨天,我的Linux由于消息服务存放的消息太多,硬盘容量不够,导致系统崩溃,所有服务和Docker镜像容器全部GG(这些构建起来可真能花我不少时间)。我不得不停一停项目,从头开始搞Linux。我对于Linux上的概念只是一知半解。出了问题只能去百度上查找问题然后复制粘贴命令运行,甚至都不能理解这条命令是做什么用...

2020-02-23 23:19:43 209

原创 RocketMQ总结(第一部分)

1.RocketMQ简介与安装1.1.RocketMQ简介Apache RocketMQ是一个采用Java语言开发的分布式的消息系统,由阿里巴巴团队开发,与2016年底共享给Apache,成为Apache的一个顶级项目。在阿里内部,RocketMQ很好地服务了集团大大小小上千个应用,在每年双十一当天,更有不可思议的万亿级消息通过RocketMQ流转(在2017年双十一当天,整个阿里巴巴集团通...

2020-02-18 22:56:19 204

原创 使用WebSocket和MongoDB实现聊天室功能

2.1.聊天室系统流程1.发送消息流程2.接收消息流程2.2.后端代码实现1.POM文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche...

2020-02-17 23:56:22 1384 1

原创 MongoDB总结

1.MongoDB1.1.MongoDB简介MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富的,最像关系数据库的,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询...

2020-02-17 23:51:57 578

原创 Redis从搭建集群到实现缓存功能

2.Redis实现缓存在接口服务中,如果每次都进行数据库查询,那么必然会给数据库造成很大的并发压力,所以需要为接口添加缓存,缓存技术选用Redis,并且使用Redis集群,Api使用的是Spring-Data-Redis。2.1.使用Docker搭建Redis集群通过ifconfig查看docker的网卡#拉取镜像docker pull redis:5.0.2#创建容器docke...

2020-02-16 15:38:20 269

原创 WebSocket总结

3.WebSocket3.1.什么是WebSocket?WebSocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信(full-duplex),一开始的握手需要借助HTTP请求完成。WebSocket是真正实现了全双工通信的服务器向客户端推的互联网技术,它是一种在单个TCP连接上进行全双工通讯协议。3.2.Http与Websocket的区别1.http:http协议是短连接...

2020-02-16 15:20:49 294

原创 GraphQL实战

GraphQL实战1.1.根据需求编写GraphQL文件在resources目录下新建.graphqls文件schema { query: HaokeQuery}type HaokeQuery { HouseResources(id:Long) : HouseResources HouseResourcesList(page:Int, pageSize:Int)...

2020-02-13 16:56:34 981

原创 再见RESTful,你好GraphQL

4.GraphQL4.1.GraphQL介绍GraphQL是由Facebook创造的用于描述复杂数据模型的一种查询语言,这里查询语言所指的并不是常规意义上的类似SQL语句的查询语言,而是一种用于前后端数据查询方式的规范。官网规范地址4.2.分析RESTful存在的问题RESTful在查询的时候,往往是这样的:#请求GET http://127.0.0.1/user/1001#响...

2020-02-12 20:36:16 737

原创 Ant Design 与 Ant Design Pro

02-Ant Design#1.ReactJS1.1.分层上图中,左侧是服务端代码的层次结构,由Controller,Service,Data Access三层组成服务服务端系统。右侧是前端代码的结构,同样需要进行必要的分层:Page负责与用户直接打交道:渲染页面,接受用户的操作输入,侧重于展示型交互性逻辑;Model负责处理业务逻辑,为Page做数据,状态的读写,变化,暂存等;...

2020-02-07 23:26:48 9226 1

原创 Dubbo基础总结

2.3.1.Dubbo架构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KcjByj79-1581086471861)(03-项目介绍.assets/image-20200207200712571.png)]节点角色说明:节点角色说明Provider暴露服务的服务提供方Consumer调用远程服务的服务消费方Registry...

2020-02-07 22:56:57 193

原创 ES6与ReactJS学习笔记

1.ES6ES6,是ECMAScript 6 的简称,是JavaScript语言的下一代标准,已于2015年6月正式发布。1.1. let于const之前,我们在编写js定义变量的时候,只有一个关键字 var。var有一个问题,就是定义的变量会成为全局变量。// var变量的作用域问题检查for(var i = 0;i<5;i++){ console.log(i);}c...

2020-01-22 00:02:41 1680

原创 Docker总结

Docker1.Docker与传统虚拟化方式比较2.Docker的镜像与容器容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中构建或者打包阶段,而容器则是启动或者执行阶段。容器给予镜像启动,一旦容器启动完成后,我们就可以登陆到容器中安装自己需要的软件或者服务。3.Docker安装与启动需要使用CentOS7.X以上的版本:yum包更新到...

2019-10-02 18:25:52 385 1

空空如也

空空如也

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

TA关注的人

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