JAVA
文章平均质量分 80
小王曾是少年
通信工程本硕 for NJU ;
《Intelligent Passive Eavesdropping in Massive MIMO-OFDM Systems via Reinforcement Learning》IEEE WCL 作者;
申请国家发明专利2项;
淘天集团后端开发;
有事尽量私信
展开
-
带你快速看完9.8分神作《Effective Java》—— 序列化篇(所有RPC框架的基石)
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2021年12月16日???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招原创 2022-01-20 10:47:26 · 5698 阅读 · 135 评论 -
带你快速看完9.8分神作《Effective Java》—— 并发篇(工作里的这些坑你都遇到过吗?)
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2021年12月16日???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招原创 2022-01-13 16:48:12 · 9388 阅读 · 144 评论 -
带你快速看完9.8分神作《Effective Java》—— 类和接口篇
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2022年1月7日???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!15 使类和成员的可访问性最小化面向对象语言设计时的两大“法宝”就是封装和解耦。其中,封装可以隐藏组件所有的实现细节,把API与实现清晰隔离开,因此也就解除组成系原创 2022-01-10 10:50:17 · 1501 阅读 · 82 评论 -
带你快速看完9.8分神作《Effective Java》—— 异常篇(你真的会用异常吗?)
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2021年12月16日???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招原创 2022-01-05 12:51:32 · 2333 阅读 · 91 评论 -
带你快速看完9.8分神作《Effective Java》—— 通用编程篇
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2021年12月16日???? 个人简介:通信工程本硕????、朝着优质博主努力????。我写的很慢,但敢保证每一篇都是用心写的,绝对不无聊,欢迎关注我共饮一杯鸡汤~???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练原创 2022-01-01 14:48:49 · 3470 阅读 · 170 评论 -
带你快速看完9.8分神作《Effective Java》—— 方法篇
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2021年12月16日???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招原创 2021-12-27 09:59:08 · 1260 阅读 · 77 评论 -
带你快速看完9.8分神作《Effective Java》—— Lambda 和 Stream篇(小王工作里用的很多)
???? Java学习:Java从入门到精通总结???? Spring系列推荐:Spring源码解析???? 最近更新:2021年12月16日???? 个人简介:通信工程本硕????、阿里新晋猿同学????。我的故事充满机遇、挑战与翻盘,欢迎关注作者来共饮一杯鸡汤???? 点赞 ???? 收藏 ⭐留言 ???? 都是我最大的动力!豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招原创 2021-12-20 09:45:57 · 693 阅读 · 41 评论 -
带你快速看完9.8分神作《Effective Java》—— 枚举 & 注解篇
豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招式(编程语言、工具、中间件等等),也需要修炼心法(设计模式、源码等等)学霸、学神OR开挂我个人在Java领域也已经学习了近5年,在修炼“内功”的方面也通过各种途径接触到了一些编程规约,例如阿里巴巴的泰山版规约,在此基础下读这本书的时候仍是让我受到了很大的冲激,学习到了很多约定背后的细节问题,还有一些让我欣赏此书的点是,书中对于编程规约的解释让我感原创 2021-12-16 09:52:48 · 1384 阅读 · 27 评论 -
带你快速看完9.8分神作《Effective Java》—— 泛型篇
文章目录26 不要使用原始类型(如List)27 消除非受检的警告28 列表优于数组29 优先考虑泛型30 优先考虑泛型方法31 利用限定通配符来提升API的灵活性PECS32 合理地结合泛型和可变参数33 优先考虑类型安全的异构容器在泛型篇开始介绍之前,要先明确几个书中的术语,以免看得眼花缭乱:术语中文含义举例Parameterized type参数化类型ListActual type parameter实际类型参数StringGeneric type泛型类原创 2021-12-13 09:33:26 · 843 阅读 · 31 评论 -
IDEA常用快捷键大全
1 添加surrounded with【CTRL+ALT+T】2 格式化代码【CTRL+ALT+L】3 提示与代码生成部分【Alt + Enter】 IDEA 根据光标所在问题,提供快速修复选择【Ctrl + Alt + T】 对选中的代码弹出环绕选项弹出层(try,if等语句包裹)【Alt + Insert】 代码自动生成,如生成对象的 set / get 方法,构造函数,toString() 等【Ctrl + O】 选择可重写的方法【Ctrl + I】 选择可实现的方法【Ctr原创 2021-12-09 11:15:11 · 357 阅读 · 2 评论 -
SpringBoot的启动流程源码解析
文章目录1 前言2 追本溯源3 容器启动流程3.1 应用启动计时3.2 打印 Banner3.3 创建上下文实例createApplicationContext3.4 构建容器上下文prepareContext3.5 小结1 前言在拥有 Spring Boot 以前,我们要运行一个 Java Web 应用,首先需要有一个 Web 容器(例如 Tomcat ),然后将我们的 Web 应用打包后放到容器的相应目录下,最后再启动容器。在 IDE 中也需要对 Web 容器进行一些配置,才能够运行或者 Deb原创 2021-12-08 18:36:09 · 1588 阅读 · 12 评论 -
快速带你看完《Effective Java》—— 对象通用方法篇
文章目录10 覆盖equals时要遵守通用约定11 覆盖equals时总要覆盖hashCode12 始终要覆盖toString13 谨慎地覆盖clone14 考虑实现Comparable接口豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招式(编程语言、工具、中间件等等),也需要修炼心法(设计模式、源码等等)学霸、学神OR开挂我个人在Java领域也已经学习了近5年,在修炼“内功”的方面也通过各原创 2021-12-07 09:54:15 · 911 阅读 · 10 评论 -
快速带你看完《Effective Java》—— 创建和销毁对象篇
文章目录1 静态工厂代替构造器2 构造函数有多个参数时要考虑使用构建器3 使用private构造器或枚举类型强化Singleton属性4 使用privete的构造函数强化不可实例化的能力5 引用资源时应优先考虑依赖注入6 避免创建不必要的对象7 消除过期的对象引用8 避免使用终结方法和清除方法9 try-with-resources优先于try-finally豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要原创 2021-12-06 17:14:36 · 643 阅读 · 2 评论 -
使用private构造器 or 枚举的原生语言实现单例
相信接触过设计模式的同学都知道,单例的一种经典实现方式就是private的构造函数,但直到我看到这一章节内容的时候,才突然顿悟原来枚举类型也是可以强化单例属性的,自愧个人的融会贯通能力还有待加强。实现单例方式一:// Singleton with public final fieldpublic class Elvis { public static final Elvis INSTANCE= new Elvis(); private Elvis() { .. . }}这种实现方式有一个缺点原创 2021-12-05 14:18:01 · 418 阅读 · 0 评论 -
构造函数有多个参数时要考虑使用Builder
多参数构造函数:假设一个类的构造函数有多个参数时,如果想要创建实例时,很可能就会写出这样的代码:NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27);这个调用通常需要许多你根本不想设置的参数,但却不得不设置,比如第三个传入的0。这种方式是可行的,但如果有很多参数的时候,客户端代码会很难编写,程序员会因为要避免传错参而小心翼翼。记得之前在公司里面用了其他人封装的日志工具类LogUtil,里面的构造函数就是这样的风格原创 2021-12-03 10:30:58 · 738 阅读 · 1 评论 -
多用静态工厂代替构造器
看完这本《Effective Java》,我悟了这一节其实也是在说明工厂设计模式的优秀之处,它相对于构造函数的优势在于:静态工厂方法有名称比如BigInteger.probablePrime这个静态方法让人一眼就能看出构造的对象可能是素数可以不在每次调用时都创建一个新对象可以参考Spring里面创建单例的逻辑,将构建好的实例存在缓存里返回;而我们调用构造函数时总会创建一个新对象。静态工厂可以返回原类的子类class A{ // 构造函数只能得到本类的一个对象 public A(原创 2021-12-01 19:13:11 · 245 阅读 · 0 评论 -
小心内存泄漏
看完这本《Effective Java》,我悟了7 消除过期的对象引用这一条建议主要讲的是要规避内存泄漏。因为像Java这种具有垃圾回收机制的语言,内存泄漏一般都是比较隐蔽的。例如:package com.wjw;import java.util.Arrays;import java.util.EmptyStackException;/** * 2 * @Author: 小王同学 * 3 * @Date: 2021/11/23 20:50 * 4 */public class S原创 2021-11-30 10:16:18 · 349 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(10)—— populateBean的剩余逻辑
populateBean的前置逻辑文章protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) { if (bw == null) { if (mbd.hasPropertyValues()) { throw new BeanCreationException( mbd.getResourceDescription(), beanName, "原创 2021-11-26 22:29:58 · 486 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(9)—— populateBean
站在设计者的角度设计populateBean:调用Bean的Setter方法实例去给Bean设置上属性值变量类型的转换,同时还要考虑处理集合类型的情况配置的时候都是以字符串的形式来配置的处理显式自动装配的逻辑(autowire = byName或byType)用两个类来做测试,GirlFriend类中注入了BoyFriend的实例,BoyFriend中注入了自己的实例:package com.wjw.dao.impl;import org.springframewor原创 2021-11-25 23:02:14 · 1022 阅读 · 1 评论 -
Spring支持所有循环依赖的情况吗?
循环依赖的情况如下:构造器循环依赖(singleton,prototype)Setter注入循环依赖(singleton,prototype)对于prototype来说,Spring是不支持相关的循环依赖的观察doGetBean源码:解决循环依赖的关键在于单例的三级缓存,三级缓存还保证了取出的bean的唯一性,所以三级缓存支持不了prototype因为没有设置三级缓存进行支持:只能通过将Bean名字放入缓存里阻断无限循环Spring只支持Singleton的setter循环依原创 2021-11-24 20:59:14 · 736 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(8)—— 单例循环依赖的解决
这一讨论的前提是要对Spring的doCreateBean方法有所了解,故将其源码放在这里,以供参考:protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args) throws BeanCreationException { // Instantiate the bean. // bean实例包装类 BeanW原创 2021-11-23 20:17:49 · 733 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(7)—— doCreateBean之剩余逻辑(解决循环依赖的源头)
前置文章:doCreateBean之创建无属性的beandoCreateBean之处理@Autowired以及@Value标签doCreateBean完整源码如下:protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args) throws BeanCreationException { // Instantiate原创 2021-11-22 21:46:39 · 883 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(6)—— doCreateBean之处理@Autowired以及@Value标签
文章目录进入到上面的applyMergedBeanDefinitionPostProcessors方法里:protected void applyMergedBeanDefinitionPostProcessors(RootBeanDefinition mbd, Class<?> beanType, String beanName) { for (BeanPostProcessor bp : getBeanPostProcessors()) { if (bp instanc原创 2021-11-20 20:54:13 · 1157 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(5)—— doCreateBean之创建无属性的bean
上一篇文章分析到createBean执行到了doCreateBean方法:自定义的WelcomeController下面有一个成员变量WelcomeService被@Autowired标签标记进入到doCreateBean方法里:protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args) throws BeanCrea.原创 2021-11-19 23:07:35 · 953 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(4)—— Bean的创建(createBean)
文章目录createBean方法的执行流程如下:在AbstractBeanFactory的doGetBean的创建bean的方法里打上断点:多放行几次看到了自定义的bean:step into之后来到AbstractAutowireCapableBeanFactor的createBean中:protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) th原创 2021-11-18 16:48:02 · 794 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(3)—— doGetBean之剩余逻辑
文章目录doGetBean源码:protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType, @Nullable final Object[] args, boolean typeCheckOnly) throws BeansException { // 先将方法传入的name转换成容器真实的beanName // 之前可以通过三种形式获取beanN原创 2021-11-17 09:43:51 · 777 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(2)—— doGetBean之从缓存获取Bean
文章目录直接打开AbstractBeanFactory的doGetBean方法:protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType, @Nullable final Object[] args, boolean typeCheckOnly) throws BeansException { // 先将方法传入的name转换成容器真实的beanNam原创 2021-11-14 22:12:52 · 1363 阅读 · 0 评论 -
看完这本《Effective Java》,我悟了 —— 日更ing
文章目录创建和销毁对象篇1 静态工厂代替构造器对象通用方法篇类与接口篇泛型篇枚举和注解篇Lambda表达式与Stream篇方法篇通用编程篇异常篇并发篇序列化篇豆瓣评分9.8的图书《Effective Java》,是当今世界顶尖高手Josh Bloch的著作,在我之前的文章里我也提到过,编程就像练武,既需要外在的武功招式(编程语言、工具、中间件等等),也需要修炼心法(设计模式、源码等等)学霸、学神OR开挂我个人在Java领域也已经学习了近5年,在修炼“内功”的方面也通过各种途径接触到了一些编程规约,例如原创 2021-11-13 22:36:29 · 1073 阅读 · 0 评论 -
SpringloC容器的依赖注入源码解析(1)—— Spring的依赖注入概览
文章目录Spring在Bean实例的创建过程中做了很多精细化控制我们需要做的是理清脉络,不要陷入细节之前有分析到过DefaultListableBeanFactory的preInstantiateSingletons方法中调用了getBean方法@Overridepublic Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false);}...原创 2021-11-11 10:34:38 · 991 阅读 · 0 评论 -
SpringIOC容器初始化源码解析(4)—— 手撕Spring容器的刷新逻辑(较硬核)
文章目录refresh的源码如下:@Overridepublic void refresh() throws BeansException, IllegalStateException { // 给容器refresh加锁,避免容器处在refresh阶段时,容器进行了初始化或者销毁的操作 synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. // 调用容原创 2021-11-04 21:11:04 · 348 阅读 · 0 评论 -
SpringIOC源码解析(2)—— 简单容器
文章目录BeanFactory 和 FactoryBean 的区别BeanFactory源码首先要明确两点:所有的IOC接口都要实现接口BeanFactory。IOC容器的设计主要分为两个主要路线:BeanFactory和ApplicationContext分别为核心。BeanFactory 和 FactoryBean 的区别前者是spring的根接口,定义了Bean工厂最基础的功能特性,是一个Factory后者是用来生成普通的bean,实现了这个接口之后,spring会在容器初始化时会把原创 2021-09-12 11:38:12 · 299 阅读 · 0 评论 -
SpringIOC容器初始化源码解析(3)—— 事件监听器模式
文章目录示例代码回调函数Spring的事件驱动模型监听器将监听感兴趣的事件,一旦事件发生,便做出响应,有以下几个概念:事件源(Event Source)事件监听器(Event Listener)事件对象(Event Object) 主要负责在事件源和事件监听器之间的信息传递示例代码package demo.pattern.eventmode;import lombok.Getter;import lombok.Setter;@Getter@Setterpublic clas原创 2021-11-02 21:53:34 · 232 阅读 · 0 评论 -
SpringIOC容器初始化源码解析(2)—— Aware及其子接口
文章目录从Bean里获取到容器实例并对其进行操作public interface Aware {}仅仅是个空的接口,只能当做标签来使用,真正能发挥作用的是继承了这个接口的子接口。当类需要容器提供帮助的时候,就需要向容器证明类本身是可以感知到容器的存在的,即实现特定类型的aware接口。...原创 2021-10-31 21:12:32 · 245 阅读 · 0 评论 -
SpringIOC容器初始化源码解析(1)—— PostProcessor
文章目录后置处理器PostProcessorBeanDefinitionRegistryPostProcessor后置处理器PostProcessorPostProcessor本身也是一种需要注册到容器里的Bean:其里面的方法会在特定的时机被容器调用实现不改变容器或者Bean核心逻辑的情况下对Bean进行扩展对Bean进行包装,影响其行为、修改Bean的内容等大类分为容器级别的后置处理器以及Bean级别的后置处理器:BeanDefinitionRegistryPostProcesso原创 2021-10-27 21:26:02 · 279 阅读 · 0 评论 -
SpringIOC源码解析(8)—— 注解配置的资源定位、加载、解析、注册全链路概览
在DefaultListableBeanFactory的registerBeanDefinition方法中的打上断点,Entrance程序入口换成:AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Entrance.class);源码:阅读Spring源码第一步:源码编译与创建调试入口注解容器启动时会有一些系统自带的BeanDefinition注册到系统中。原创 2021-10-25 21:46:49 · 323 阅读 · 0 评论 -
SpringIOC源码解析(7)—— xml配置的资源定位、加载、解析、注册全链路分析
文章目录调用过程复现:在DefaultListableBeanFactory的registerBeanDefinition里打上断点,运行Entrance,观察调用栈:Entrance源码:阅读Spring源码第一步:源码编译与创建调试入口注册是从主函数开始的:之后进入到FileSystemXmlApplicationContext的构造函数:public FileSystemXmlApplicationContext(String configLocation) throws Bean原创 2021-10-24 11:04:28 · 212 阅读 · 0 评论 -
SpringIOC源码解析(6)—— BeanDefinition的注册
文章目录BeanDefinitionRegistry负责对BeanDifinition的注册,其中的方法:/** * 往注册表中注册一个新的 BeanDefinition 实例 */void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException;/** * 移除注册表中它注册的 BeanDefinition 实例 */原创 2021-10-22 22:33:05 · 215 阅读 · 0 评论 -
SpringIOC源码解析(5)—— 通过document对象解析出BeanDefinition实例
在《SpringIOC源码解析(3)—— Resource、ResourceLoader、容器之间的微妙关系》文末,将xml文件解析成了Document对象,接下来就该调用registerBeanDefinitions来解析Document对象。public int registerBeanDefinitions(Document doc, Resource resource) throws BeanDefinitionStoreException { // 创建BeanDefinitionDocu原创 2021-10-12 19:57:09 · 220 阅读 · 0 评论 -
SpringIOC源码解析(4)—— Resource、ResourceLoader、容器之间的微妙关系
文章目录Resource家族EncodedResourceAbstractResourceWritableResource根据资源地址自动选择正确的Resource配置就是xml,spring将对物理资源的访问方式抽象成Resource。Resource家族Resource是个接口,继承了InputStreamSource,定义了资源的基本操作(全是读操作)InputStreamSource有唯一一个方法getInputStream主要是根据不同的资源,定义了不同类的实现。Servlet原创 2021-09-21 23:00:18 · 537 阅读 · 0 评论 -
SpringIOC源码解析(3)—— 高级容器
文章目录ApplicationContext家族体系ApplicationContex继承的接口ApplicationContext常用容器传统的基于XML配置的经典容器目前比较流行的容器(都是基于注解的)ApplicationContext家族体系高级容器均实现了ApplicationContex这个接口,为了区别于普通容器,高级容器一般被称为Contex(上下文),之所以是高级容器,因为它实现了更多的接口:ApplicationContex继承的接口Environment可以理解为容器的一原创 2021-09-18 22:45:56 · 294 阅读 · 0 评论