能力说明:
了解变量作用域、Java类的结构,能够创建带main方法可执行的java应用,从命令行运行java程序;能够使用Java基本数据类型、运算符和控制结构、数组、循环结构书写和运行简单的Java程序。
暂时未有相关云产品技术能力~
前华为、腾讯、阿里员工,从事Java后台工作
在基于SpringCloud做开发的时候,EnableDiscoveryClient和EnableEurekaClient这两个注解我们并不陌生,今天就来聊聊它们的区别,和网上更早期的类似文章不同的是:本文会聊到Dalston之后的版本中,这两个注解的区别
主要注解EnableEurekaServer的详细分析
大家好,从本章开始我们一起进入SpringCloud的源码世界,通过源码分析再结合实战,一起加深对SpringCloud体系的认识
kubernetes官方的sidecar,与SpringBoot能有关系?请随本文一同探究
下载OpenJDK11源码再编译它,很麻烦吗?借助docker,这些操作会变得异常简单
来试试编译OpenJDK11源码,得到属于自己的独有的JDK
借助docker,一行命令就能下载OpenJDK11源码
Ubuntu环境下载OpenJDK11源码,为之后的修改和编译做准备
实操ubuntu下安装OpenJDK10
maven编译会遇到"编码GBK的不可映射字符"的警告,来看看出了啥问题,怎么处理
在Spring Cloud环境中,Eureka client注册到Eureka server后,可以在Eureka server的home页面看到注册信息,这些信息的内容和Eureka client的配置相关,本文将一些重要配置记录下来以备使用
在查看Wireshark的解析记录时,请求包和响应包常常是密密麻麻堆在一起,如何根据一个请求包准确找到其对应的响应呢?请随本文步步实践,找到方法
官方文档和demo是最可靠的信息来源,涉及到升级操作时,最好把关键项列出来,去官方文档中确认一下
Spring cloud环境中的应用,如果注册到Eureka server,就会从Eureka server获取所有应用的注册信息(也叫服务列表),然后保存到本地,这个操作是周期性的,默认每三十秒一次,今天咱们来通过实战将其观察得清清楚楚
InstanceInfoReplicator是个任务类,负责将自身的信息周期性的上报到Eureka server,本篇来一起分析了解它
了解Eureka server在定时更新服务列表时依赖的细节
在使用@Import注解来注册bean的时候,Import注解的值可以是ImportSelector或者DeferredImportSelector的实现类,spring容器会实例化这个实现类,并执行其selectImports方法,那么问题来了:ImportSelector和DeferredImportSelector的区别在哪里,我们自定义Imort逻辑的时候该选择哪个呢?本文通过分析相关的spring源码来查找答案
spring框架下做开发时,@Import是常见的注解,可以用来动态创建bean,今天我们先从源码分析原理,再用实战来验证Import的作用
实战在容器初始化的时候对bean实例做设置
学习如何通过自己写代码的方式,向spring容器中注册bean
通过自定义BeanFactoryPostProcessor接口的实现类,来对bean实例做一些控制
如果业务上需要在spring容器启动和关闭的时候做一些操作,可以自定义SmartLifecycle接口的实现类来扩展,本章我们通过先分析再实战的方法,来掌握这种扩展方式
提到广播与监听,我们常常会想到RabbitMQ、Kafka等消息中间件,这些常用于分布式系统中多个应用之间,有时候应用自身内部也有广播和监听的需求(例如某个核心数据发生变化后,有些业务模块希望立即被感知),这时候spring提供的基于ApplicationContext的广播与监听就派上用场了,接下来我们从原理到实践,来了解spring提供的这套机制吧
Aware.java是个没有定义任何方法的接口,拥有众多子接口,在spring源码中有多处都在使用这些子接口完成各种场景下的回调操作,当业务有需要时,我们只需创建类来实现相关接口,再声明为bean,就可以被spring容器主动回调
在之前学习spring环境初始化源码的过程中,见到有些地方能通过子类来实现自定义扩展,从本章开始,我们来逐个实践这些扩展,除了加深对spring的理解,有的扩展也能解决一些通用的问题
在Spring框架中,BeanFactory和ApplicationContext都是大名鼎鼎,BeanFactory是基础ApplicationContext是扩展这句话怎么理解?请随本文一同去了解它们
在学习spring容器初始化的过程中,发现spring容器预留了一些扩展点,我们可以写子类来做功能扩展,今天就来探寻SpringBoot框架下的扩展方式
《spring4.1.8初始化源码学习三部曲》系列的终篇,重点是学习AbstractApplicationContext类的refresh()方法
本章是学习spring4.1.8初始化源码的第二篇,我们聚焦ClassPathXmlApplicationContext.setConfigLocations方法
学习spring初始化过程是深入了解spring过程中重要的一步,今天我们就以一个简单的demo为例来学习spring初始化的源码
实战修改spring-framework源码,然后编译构建,最后用写一个demo工程来验证构建成功
跳过task来节省时间,例如文档包和源码包,加速编译过程
将Java对象实例保存在Redis时,将对象序列化成字符串或者序列化成byte数组再存入,以上两种方式孰优孰劣?字符串方式来存取的好处是编码和调试更简单容易,而byte数组的优势又在哪里呢,实战验证吧
有时候我们需要将Java对象实例存入Redis,常用方法有两种: 1. 将对象序列化成字符串后存入Redis; 2. 将对象序列化成byte数组后存入Redis;有关这两种存储方式的性能对比,会在下一章通过实战验证,本章先来看一下如何将对象序列化成byte数组后存入Redis;
在SpringBoot框架下进行RabbitMQ开发,并且在Docker环境部署和运行
向RabbitMQ发出消息后,有时我们希望消费方不要立即消费,这时候延时队列就派上用场了,本篇就来快速体验其效果
紧急的时候,借助Docker,在不安装JDK和Maven的环境也能构建Maven工程
制作Docker镜像时常用centos的官方镜像作为基础镜像,其时区和系统编码都不满足我们的需求,今天我们就来实战制作一个Docker镜像,将时区和系统编码设为我们想要的
《Docker下RabbitMQ四部曲》系列的终篇,今天的我们一起来体验Rabbit’MQ集群的高可用能力,看看RabbitMQ集群中的部分节点宕机时,是否还能生产和消费消息
本文是《Docker下RabbitMQ四部曲》系列的第三篇,实战两个基于SpringBoot的工程,分别用来生产和消费RabbitMQ消息
详细简述Docker下制作RabbitMQ镜像的技术细节
《Docker下RabbitMQ四部曲》系列的开篇,先用最短时间和最少操作体验基本功能
对于运行在Docker环境的容器,有时我们想查询它们的一些基本信息,如环境变量、hostname、ip地址等,请随本篇一同实战如何获取这些信息,并根据自己要求去过滤内容
为了定位问题或者深入学习Spring知识体系,需要在本地IDE阅读Spring源码,本篇给出了基本操作步骤
看代码的遇见子类或者接口的实现时,如果有个类图工具就能让我们层次和关系一目了然,如果您的IDE是IntelliJ IDEA ULTIMATE版,推荐使用其自带的类图功能
一起阅读和分析SpringMVC的部分源码,看看收到POST请求中的二进制文件后,SpingMVC框架是如何处理的
前面两章我们创建了客户端和服务端,实战了文件上传服务,本篇我们通过wireshark工具抓包,分析上传文件时的网络请求
开发文件服务的后台应用,制作成docker镜像并运行
本文是《Docker下Java文件上传服务三部曲》系列的第一篇,包括上传文件的客户端开发、创建Tomcat容器(支持在线部署),安装wireshark(用于网络抓包分析)
一个常见的启动失败问题,在此做简单分析和记录