自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Java学习录

关注公众号《Java学习录》学习Java进阶知识,获取免费技术干货:并发、搜索引擎、微服务、虚拟机、产品、支付、大数据、前端、数据库、架构设计、消息队列、数据结构、设计模式、存储、分布式、网络、面试题等。

  • 博客(125)
  • 资源 (17)
  • 问答 (2)
  • 收藏
  • 关注

原创 Spring源码解析系列汇总

相信我,你会收藏这篇文章的本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题。喜欢的同学可以收藏起来以备不时之需SpringIOC源码解析(上)本篇文章搭建了IOC源码解析的demo环境,启动这个环境即可开启阅读Spring源码的第一步开始源码阅读时介绍了Spring容器中最经典的容器ClassPathXmlApplicationContext,这个...

2019-09-06 09:52:55 986

原创 JVM系列文章汇总

JVM中运行时数据区中的堆、栈、方法区等区域的特性介绍Java中class文件的组成结构JVM的类加载生命周期介绍Java堆、新生代老年代的特点、堆中的内存分配策略JVM垃圾收集算法详解JVM各个垃圾收集器的简单介绍及常用参数详解JVM中的内存溢出\OOM的原因及解决方案浅谈Java类加载器ClassLoader以及双亲委派模式JVM常用调优参数Java虚拟机是...

2019-05-22 09:18:04 178

原创 Linux常用命令速查-汇总篇

Linux常用命令速查-用户管理Linux常用命令速查-文件管理Linux常用命令速查-系统监控Linux常用命令速查-网络管理Linux常用命令速查-定时任务Linux常用命令速查-Vim推荐阅读SpringCloud学习系列汇总 多线程面试必备基础知识汇总 Java集合源码分析汇总-JDK1.8 Linux常用命令速查-汇总篇博客所有文章首发于公众号《J...

2019-04-18 09:23:19 1384

原创 SpringCloud学习系列汇总

Spring Cloud常用组件使用汇总使用SpringBoot2.0.3整合SpringCloud服务注册与发现Eureka自定义Eureka集群负载均衡策略如何使用高可用的EurekaFeigin的使用及自定义配置Hystrix使用Hystrix仪表盘路由器和过滤器-Zuul使用Apollo做配置中心SpringCloud-Stream整合Rabb...

2019-04-15 10:37:10 161

原创 多线程面试必备基础知识汇总

多线程基本概念同步和异步,线程和进程,并发和并行,临界资源,阻塞,死锁,饥饿,活锁,线程的并发级别多线程内存模型JMM的基本概念,主内存与工作内存的数据交互,多线程中的原子性、可见性、有序性,指令重排,volatile关键字Hello,Thread如何创建线程,线程的生命周期,线程的基本状态,线程的基本操作:“sleep、yield、jion,线程停止、线程中断、wait、no...

2019-04-04 16:43:50 86

原创 为什么我建议你去阅读优秀的源码

最现实的原因如果你想进大厂,没有大厂的面试官会不问你常用组件的源码实现。虽然很多人都说大厂都是面试造火箭,入职拧螺丝。但是人家拧螺丝也要招那个会造火箭的人来拧解决问题的速度当线上出现问题时,阅读过源码你很快就想到,这是由什么原因引起的,你需要现在去怎么做可以最快的解决这个问题。而如果没有阅读过源码,可能最快的方法是去Google一下了,但是Google出来的答案能不能真的解决这个问题可就不...

2019-09-10 09:31:07 781

原创 有哪些你不知道的阅读源码的技巧

1. 先看官方文档和架构图优秀的开源组件官方都会维护文档和架构图,这份架构图上或许有一些最重要的组件之间的关联关系、或许哪些功能的调用流程、或许有一些别的东西,但是相信我,这些东西一定都是从总体来描述这个项目的,这个一定是你要阅读源码时第一个要看的2. 再看项目的组织结构下载下来代码之后,不要急着开始。先看一下各个包名和包里的类名,对照着文档和类名先简单猜一下各个类的大致作用3. 找到启动...

2019-09-08 23:32:55 751

原创 Spring事务源码解析(二)获取增强

在上一篇文章@EnableTransactionManagement注解解析中,我们搭建了源码阅读的环境,以及解析了开启Spring事务功能的注解@EnableTransactionManagement的实现逻辑在进行接下来的源码解析之前我想大家应该知道,当我们使用传统的jdbc应用事务的时候是不是做了如下操作:开启事务save、update、delete等操作出现异常进行回滚正常情况...

2019-09-04 09:07:12 326 1

原创 Spring @Import注解源码解析

简介Spring 3.0之前,创建Bean可以通过xml配置文件与扫描特定包下面的类来将类注入到Spring IOC容器内。而在Spring 3.0之后提供了JavaConfig的方式,也就是将IOC容器里Bean的元信息以java代码的方式进行描述。我们可以通过@Configuration与@Bean这两个注解配合使用来将原来配置在xml文件里的bean通过java代码的方式进行描述@Im...

2019-09-03 09:04:37 1062

原创 基于注解的SpringAOP源码解析(二)

在上篇文章中我们搭建了一个阅读源码的demo工程,然后简单介绍了一下@EnableAspectJAutoProxy注解,这个注解最重要的功能就是为向Spring中注入了一个beanAnnotationAwareAspectJAutoProxyCreator,本篇文章就继续来撸AOP的源码前文已经简单提到了这个类的功能,不过这里还是要先看一下这个类的继承图观察类图可知,AnnotationAwa...

2019-09-02 11:14:58 323

原创 基于注解的SpringAOP源码解析(三)

注意,读完本篇文章需要很长很长时间 在之前的2篇文章:AOP源码分析(一)AOP源码分析(二)中,我们搭建了SpringAOP源码分析的环境,介绍了@EnableAspectJAutoProxy注解和postProcessBeforeInstantiation方法是如何加载所有增强的。本篇文章则将描述一下AOP中剩余的实现逻辑 postProcessAfterInitial...

2019-08-23 09:31:43 347

原创 漫谈性能调优

作为一名高级工程师,性能调优是必不可少的技能,本篇文章是性能调优系列文章的第一篇导致性能瓶颈的几点原因CPU:如果系统中存在视频分析、3D渲染、大量计算这样的应用时,大量的CPU资源的竞争就会引起性能瓶颈内存:一般来说内存不会成为性能瓶颈,为啥人家redis快,就是因为是基于内存的。但是呢内存资源不够用确实是个很致命的问题,就像Java中的OOM大部分都是因...

2019-08-22 09:04:04 50

原创 Java代码中可以优化性能的小细节

避免对boolean类型的判定反例:12if("a".equles("a")==true)`{}正例:12if(Objects.equles("a","a"))`{}**多用条件判断符 **反例:1234567if(a<0)`{ return 0;}else{ return 1; }``` 正例:a<0?0:1;12345678...

2019-08-12 08:59:57 131

原创 k8s时区问题解决方案

前几天在使用k8s中的CronJob时发现了一个很奇怪的问题, 按照官方文档的demo跑起来是没有任何问题的,但是当我想要设置每天一个固定时间点例如12点20执行一个job的时候,到了时间之后无论如何都不会执行。一开始怀疑是cron表达式写的有问题,但是经过多次试验倒是没问题,然后就想到了时区的问题。首先我先尝试使用PodPreset来修改所有容器的时区(在...

2019-08-09 08:58:44 325

原创 如何参与一个开源项目!

1、首先在github上注册一个自己的账号2、然后在左上部分搜索一个开源项目,比如说我的项目syj-ratelimit3、进入项目之后,单击右上角的fork按钮,github就会在你的帐户下fork一个同样的项目。4、此时点击右上角自己的头像,可以看到一个your repositories,点击进入就可以看到刚才的那个项目了5、现在你就可以在这个项目里...

2019-08-08 09:04:42 197

原创 SpringIOC源码解析(下)

注意,看完这篇文章需要很长很长很长时间。。。本篇文章是SpringIOC源码解析(上)的续集,上一篇文章介绍了使用XML的方式启动Spring,然后追踪了BeanFactory容器的创建、配置文件的解析、Bean的注册等。12. finishBeanFactoryInitialization()前方超长篇幅预警。。。刚才我们提到了bean还没有初始化。...

2019-08-06 09:02:03 69

原创 SpringIOC源码解析(上)

注意,看完这篇文章需要很长很长很长时间。。。准备工作本文会分析Spring的IOC模块的整体流程,分析过程需要使用一个简单的demo工程来启动Spring,demo工程我以备好,需要的童鞋自行在下方链接下载: 1 https://github.com/shiyujun/spring-framework Demo工程示例代码本文源码...

2019-08-05 00:03:49 104

原创 Spring所有注解大揭秘

声明bean的注解@Component 组件,没有明确的角色@Service 在业务逻辑层使用(service层)@Repository 在数据访问层使用(dao层)@Controller 在展现层使用,控制器的声明注入bean的注解@Autowired:由Spring提供,根据类型进行自动装配,如果组合@Qualifier使用将按名称进行装配@In...

2019-08-02 17:29:10 239

原创 容器,到底是什么东西?

通俗的来说容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。不过,这两个能力说起来简单,但要用技术手段去实现它们,确并不是很容易。所以,本篇文章就来剖析一下容器的实现方式我们知道一个程序被执行起来之后,它就会从磁盘上的二进...

2019-08-02 10:18:02 277

原创 RabbitMQ如何实现高可用

RabbitMQ一共具有三种模式:单机、普通集群、镜像集群单机模式单机模式,就是我们平常玩的demo,生产上肯定不能用。具体安装部署过程可以参考我的这篇文章:CentsOS原生RabbitMQ安装过程普通集群普通集群就是在多台机器上启动多个实例。每个队列只会存在其中的一个实例上,然后所有实例同步这些队列的元数据。消费者在进行消费的时候,如果连接的实例上恰好...

2019-07-31 14:46:30 125

原创 RabbitMQ高级面试题

本文涉及:投递失败的消息怎么处理、如何实现延时队列、如何指定消息的优先级、消息的持久化是如何实现的、如何保证消息不丢失投递失败的消息怎么处理首先投递失败存在如下两个情况当交换器无法根据自身的类型和路由键找到符合条件的队列如果交换器在将消息路由到队列时发现队列上并不存在任何消费者解决方案:在生产者投递消息时指定mandatory或者imrnediat...

2019-07-31 09:26:06 492

原创 Kubernetes是什么东西?

Kubernetes一词来源于希腊语,翻译来的意思就是舵手或者船长的意思,而它的logo也是很符合这个词的至于k8s则是通过将ubernetes这8个字母替换为8而导出的缩写Kubernetes是什么?k8s是Google开源的容器集群管理系统(思想来源于谷歌内部系统Borg)。在Docker技术的基础上,为容器化的应用提供以下一系列功能来提高大规模容器集群管理的便捷性:服务发现 ...

2019-07-30 17:08:41 217

转载 五大基础排序算法

选择排序假如我们现在要排序的数组为[3,1,0,2,8,4,2]。那么选择排序的排序流程为:在这个数组中找出最小值与第一个元素交换,现在数组为[0,1,3,2,8,4,2] 在这个数组中除了第一个位置的元素外找出最小值与第二个元素交换,因为第二个元素就是最小的所以此次没有发生变化。现在数组为[0,1,3,2,8,4,2] 在这个数组中除了第一个、第二个位置的元素外找出最小值与第三个元素...

2019-07-27 00:55:13 55

原创 阿里巴巴云原生实践 15 讲

阿里巴巴从 2011 年开始通过容器实践云原生技术体系,在整个业界都还没有任何范例可供参考的大背境下,从最初独自摸索到拥抱开源回馈社区,阿里巴巴逐渐摸索出了一套比肩全球一线技术公司并且服务于整个阿里集团的容器化基础设施架构。九年的前行,让阿里巴巴在交流互动中不断吸收和贡献好的理念、技术、思想,也积累了最为丰富和宝贵的实践经验。2019年6月24日至6月26日,在由 Cloud Nativ...

2019-07-16 09:16:03 109

转载 垃圾分类逼疯上海人?别笑!马上轮到北京,天津等46个城市

“你是什么垃圾?”谁能想到,这直击灵魂深处的拷问,有一天竟成了上海朋友的日常。垃圾分类成为上海人的社交新话题。去上海出差旅游要小心了!7月1日起,游客扔错垃圾也会被罚!这一改善环境节约资源的新举措未来如何向全国推广,记者28日从住房和城乡建设部获悉

2019-07-10 21:51:12 173

原创 RabbitMQ消息传递流程

两个新名词 本篇文章以上篇文章《Rabbit的基础概念》为基础,且在上篇文章的前提下又引入了两个新的概念: 连接( Connection) 我们知道绝大部分的通信都是基于网络协议的,其中TCP协议就是广为人知的一种协议,在RabbitMQ中,生产者和消费者与RabbitMQ的通信就是基于TCP连接的。不过呢我们知道TCP连接的创建和销毁在高并发场景下对于操作系统来说都是特别昂贵的开销,所以Rab...

2019-06-24 17:24:10 2161

原创 阿里巴巴Java开发手册更新了!

自2017年,《阿里巴巴Java开发手册》发布,现已有超过260万位工程师下载及查阅手册,在数以千计的企业应用,手册成为受业界认可的开发规范。昨天,《Java开发手册》再次更新,此次更新包含以下内容: 新增21条新规约 修改描述112处 完善若干处示例 修正了过往历史版本的两个错误 对部分略显艰涩的示例做了更生动的解释 下载方...

2019-06-21 16:14:33 82

原创 RabbitMQ集群安装

首先参考上一篇文章【CentsOS原生RabbitMQ安装过程】在两到三台机器上先安装单独的RabbitMQ节点修改一下hostname 1234 [root@rnode1 ~]# vim /etc/hosts172.16.20.110 rnode1172.16.20.111 rnode2172.16.20.112 rnode3 ...

2019-06-18 09:10:11 102

原创 CentsOS原生RabbitMQ安装过程

版本依赖问题RabbitMQ安装时与Erlang的版本一定要保持以下的对应关系,否则会引发无法启动的问题安装Erlang下载Erlang依赖 1 wget http://erlang.org/download/otp_src_20.3.tar.gz 解压后进入资源文件夹 1 tar xvf otp...

2019-06-17 09:22:17 144

原创 初窥MySQL性能调优

本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法性能测试工具—mysqlslapmysqlslap是MySQL自带的一款非常优秀的性能测试工具。使用它可以模拟多个客户端并发向服务器发出查询、更新等请求,然后输出简单的报告可选参数–engines:代表要测试的引擎,可以有多个,用分隔符隔开 –iterations:代表要运行这些测试多少次 ...

2019-06-05 09:21:08 101

原创 MySQL架构与SQL执行流程

MySQL架构设计下面是一张MySQL的架构图:上方各个组件的含义如下:Connectors指的是不同语言中与SQL的交互Management Serveices & Utilities:系统管理和控制工具Connection Pool:连接池管理缓冲用户连接,线程处理等需要缓存的需求。负责监听对 MySQL Server 的各种请求,接收连接请求,转...

2019-05-31 09:13:06 1139 1

原创 MySQL索引失效及使用索引的优缺点

本文所有实验基于MySQL5.7.21,实验将会用到Explain工具,不了解的同学可参考此文章:MySQL性能优化神器Explain详解联合索引失效先创建一个包含三个字段的联合索引,索引顺序如下:由以下三张图的key_len字段我们可以得出三个索引的长度分别为:title长303,author长122,price长5.联合索引使用时遵循最左匹配原则,如果不是从最左列开始时,整个...

2019-05-29 09:15:17 210

原创 MySQL性能优化神器Explain

本文涉及:MySQL性能优化神器Explain的使用简介虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句的通过Explain,我们可以分析出以下结果:表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询Expla...

2019-05-28 09:14:41 519

原创 MySQL调优之数据类型选择原则

本文涉及:高可用数据库设计时数据类型的选择原则在进行数据库设计时,如果能够选择最恰当的数据类型就可以为后期的数据库调优打好最坚实的基础选择数据类型的原则更小的通常更好例如存储订单状态字段很多时候使用0、1、2表示使用tinyint类型存储就够了,没必要搞个int、long甚至varchar来。越小的数据类型代表着占用越小的磁盘、内存和CPU,也就代表着越快的速度。当然,不要为...

2019-05-27 09:23:25 78

原创 MySQL里默认的几个库是干啥的?

本文涉及:MySQL安装后自带的4个数据库:information_schema、performance_schema、sys、mysql的作用及其中各个表所存储的数据含义information_schemainformation_schema是mysql自带的一个信息数据库,其保存着关于mysql服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等...

2019-05-24 09:16:46 2276

原创 MySQL常用sql语句大全

创建数据库 1 create database dbname; 删除数据库 1 drop database dbname; 选择数据库 1 use dbname; 创建表 12345678 C...

2019-05-23 09:16:12 2093

原创 微服务监控神器Prometheus的安装部署

本文涉及:如何在k8s下搭建Prometheus+grafana的监控环境基本概念Prometheus提供了容器和云原生领域数据搜集、存储、处理、可视化和告警一套完整的解决方案,最初时是由SoundCloud公司开发的。自2012年开源以来社区成员就不断递增。如今的Prometheus已经发展到继Kubernetes后第2个正式加入CNCF基金会的项目Prometheus的特点?...

2019-05-23 09:07:52 1684

原创 Java虚拟机是怎么new的对象?

本文涉及:Java中的new命令之后发生的事类加载检查java虚拟机在遇到一条 new 指令时,首先会检查是否能在常量池中定位到这个类的符号引用,并且是否已被加载过、解析和初始化过。如果没有,那必须先执行类加载过程类加载的相关知识可参考:JVM的类加载机制分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。分配方式有 指针碰撞 和 空闲列表 两种 指针碰...

2019-05-14 09:19:06 100

原创 缓存淘汰、缓存穿透、缓存击穿、缓存雪崩、数据库缓存双写一致性

缓存淘汰为什么需要缓存淘汰?你需要缓存30G的数据,但是Redis本身只能使用10G的内存,那你就得做个取舍了,毕竟鱼与熊掌不可兼得。为了利益最大化肯定要保留最重要的10个G。Redis本身提供了6中缓存淘汰策略,以下属性表示允许使用的最大内存 1 server.maxmemory 当使用的内存超过限制内存时,Redis会根据配置的以下6...

2019-04-29 09:13:08 159

原创 Redis常用命令、5种数据类型的内部编码实现以及实用场景

◆全局命令◆ 123456789101112131415161718 flush db # 清除当前数据库的所有keysflush all # 清除所有数据库的所有keyskeys * # 查看所有keyskeys prefix_* # 查看前缀为"prefix_"的所有key...

2019-04-28 00:15:57 146

文件存储服务FastDFS-mfs

文件存储服务FastDFS文件存储服务FastDFS-mfs-mfs文件存储服务FastDFS-mfs

2019-03-15

微信开发微信公众平台开发微信小程序开发

微信开发微信公众平台微信小程序

2019-03-15

大型网站分布式架构高并发高可用可扩展技术

大型网站分布式架构高并发高可用可扩展技术

2019-03-15

Storm Executor Task QuartzJob流式框架定时任务处理框架

Storm Executor Task QuartzJob流式框架定时任务处理框架

2019-03-15

Spring Boot企业级博客系统实战视频教程

Spring Boot企业级博客系统实战视频教程

2019-03-15

Solr Elasticsearch lucene 搜索引擎

Solr Elasticsearch lucene 搜索引擎

2019-03-15

MySql Oracle Redis Mycat MongoDB Memcached数据库教程

MySql Oracle Redis Mycat MongoDB Memcached数据库教程

2019-03-15

JVM-性能调优垃圾收集算法虚拟机组成

JVM性能调JVM性能调优垃圾收集算法虚拟机组成优垃圾收集算法虚拟机组成

2019-03-15

Angular Vue Easy UI ExtJS前端视频教程

Angular Vue Easy UI ExtJS前端框架视频教程

2019-03-15

20篇Java高级项目汇总

Java项目-CRM客户关系管理项目(两套) Java项目-javaWeb聊天室 Java项目-java网上在线支付实战视频 Java项目-Java邮件开发教程 Java项目-OA办公自动化项目(四套) Java项目-点餐系统 Java项目-俄罗斯方块游戏开发_视频教程 Java项目-供应链系统视频教程 Java项目-国家电力项目(两套) Java项目-国家税务协同平台项目 Java项目-交通灯管理系统视频教程 Java项目-杰信商贸SSH版 Java项目-杰信商贸SSM版 Java项目-手机进销存系统 Java项目-网上商城项目 Java项目-网上书店 Java项目-校内网项目 Java项目-药品集中采购系统视频教程 Java项目-银行业务调度系统视频教程 Java项目-宅急送项目

2019-03-15

15G的hapood大数据教程

15G的hapood教程

2019-03-15

21套Java项目

Java项目-CRM客户关系管理项目(两套) Java项目-javaWeb聊天室 Java项目-java网上在线支付实战视频 Java项目-Java邮件开发教程 Java项目-OA办公自动化项目(四套) Java项目-点餐系统 Java项目-俄罗斯方块游戏开发_视频教程 Java项目-供应链系统视频教程 Java项目-国家电力项目(两套) Java项目-国家税务协同平台项目 Java项目-交通灯管理系统视频教程 Java项目-杰信商贸SSH版 Java项目-杰信商贸SSM版 Java项目-手机进销存系统 Java项目-淘淘商城课程 Java项目-网上商城项目 Java项目-网上书店 Java项目-校内网项目 Java项目-药品集中采购系统视频教程 Java项目-银行业务调度系统视频教程 Java项目-宅急送项目

2018-07-11

2017年系统架构师考前冲刺

2017年系统架构师考前冲刺2017年系统架构师考前冲刺2017年系统架构师考前冲刺

2018-06-29

2011-2017年Java面试大汇总

2011-2017年Java面试大汇总2011-2017年Java面试大汇总

2018-06-29

Java工程师不得不看的几千份代码

Java工程师不得不看的几千份代码Java工程师不得不看的几千份代码Java工程师不得不看的几千份代码

2018-06-29

Java面试题

亲手用xmid做的Java面试题,以思维导图的形式,便于记忆和理解

2017-07-03

软件设计师思维导图

软件设计师思维导图考前冲刺

2017-05-13

空空如也

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

TA关注的人 TA的粉丝

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