自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 何为桥接方法,何为类型擦除

1. 桥接最近在看源码,突然在源码中看到“BridgeMethodResolver.findBridgedMethod(specificMethod)”这样的代码瞬间懵逼了。后来通过我的疯狂百度,才知道这是一个获取“被桥接”方法的方法。这才顺腾摸瓜,仔细了解了一下“桥接方法”这个东东到底是什么东东。1.1 什么是桥接相信点进本文的胖友肯定都是被什么是桥接搞得有点懵。废话不多说,直接撸代码,来看下什么是桥接。1.1.1 改变返回值生成桥接方法首先看以下这段代码://定义了一个父类,其

2020-12-21 10:20:22 470

原创 springboot属性注入方式

springboot属性注入方式在spring中我们要读取一个配置文件中的属性通常会使用@Value来注入对应的属性值,但@Value一次性只能注入一个属性值,不太方便统一管理。由此springboot中提供了一个可通过前缀分组的的注解对同一特征的属性统一管理。这就是@ConfigurationProperties@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Document

2020-11-16 09:12:08 1369

原创 深入解析springboot启动原理

1. 概述用过springboot的人都知道,springboot一个特点是能直接将springboot的项目打包成一个jar就可以直接运行。但为什么springboot打的jar包就可以直接运行?这其中有什么秘密?可能对于大多数胖友来说要回答这两个问题都是一脸懵逼的,不过先不要方,今天蜗牛就来给大家说道说道。开始之前,我们先将springboot先放在一边。让我们回想一下,我们如果要让一个普通项目生成一个可运行的jar包需要具备什么条件?首先,这jar包中肯定需要指明一个程序入口吧。(和war

2020-11-10 19:51:40 3825 2

原创 深入理解java spi机制

1. 什么是spi制机?spi全称Service Provider Interface,如果从字面意思理解的话应该是“服务提供接口”。是不是让人很懵逼,但是至少我们知道这个机制应该和“接口”有关。实际上spi是一种服务发现的“方法”(同义词包括:机制,途径)。随着我们互联网的发展,现在的系统是越来越庞大。各个服务、项目,我们通常提倡需要进行模块划分,模块和模块之间基于接口进行开发。那么模块和模块之间就不能耦合在一起,需要进行“解耦”,也就意味着模块和模块间一定不能有硬编码存在(不能出现一些非本模块的

2020-11-01 11:21:15 949 1

原创 springboot自动配置原理和自定义starter实战

1. 概述在熟悉了spring繁琐配置的折磨之后,终于迎来了springboot。springboot极大的简化了原来spring的许多配置,提供了许多已经精心装配和测试好的套餐可供使用。 在开始本章之前,请回忆一下我们的第一个spring boot 的hello world程序,你做了哪些操作1.1从hello world开始开始我们首先要创建一个springboot项目吧。相信这对于大多数胖友还是小菜一碟的,这里就不详述了。最后你成功的创建了springboot项目。其中pom如下

2020-10-25 10:23:29 681

原创 源码、补码原理详解

说在前面我们都知道在计算机中有原码和补码这两个概念。其目的是为了解决在计算机二进制运算中负数的问题,即减法问题。在计算机中,我们使用补码来描述负数。但许多人都不明白为什么这样做,大家都只知道正数的补码是它的本身,负数的补码是取反加1。但是为什么我们需要补码这个东西?补码又是什么玩意儿?许多人都不太明白。之前因为工作涉及不到相关的知识点,所以也就一知半解。后来仔细研究了下才发现其中大有深意,不禁为前辈先贤们的智慧所折服。我们之所以需要这么一套补码的机制,其实只是因为我们想要在计算机中完成减法运算。计算机

2020-07-21 22:17:57 1706 1

原创 Java动态代理为什么要求必须实现顶级接口

前言如果你学习过spring,那么你一定接触和使用过Aop。大家都知道Spring的Aop是采用动态代理方式实现的。而在Spring的Aop中使用的动态代理通常有两种:java原生的动态代理cglib的动态代理我们都学习过这两种代理方式的区别。java原生的动态代理所代理的对象必须要实现一个顶级接口,而cglib的动态代理则不需要这样的接口。在很长一段时间里很迷惑为什么java的动态代...

2019-08-25 00:04:32 3699 4

原创 netty源码-管道工厂

前言:认真学习过netty的人都知道,netty本质上就是java nio的一种多线程的实现。这里面有几个比较重要的类:首先是NioServerBossPool(父类为AbstractNioBossPool)和NioWorkerPool(父类为AbstractNioWorkerPool)。这两个类中都包含了一个selector数组(即bosses数组和workers数组),其实这两个数组就是用来存...

2018-06-06 00:02:18 415

转载 java中的移位运算符

ava中有三种移位运算符<<      :     左移运算符,num << 1,相当于num乘以2>>      :     右移运算符,num >> 1,相当于num除以2>>>    :     无符号右移,忽略符号位,空位都以0补齐下面来看看这些移位运算都是怎样使用的/** * */package com.b510....

2018-05-15 09:40:39 152

原创 nio如何实现netty-netty源码分析

netty是一个大家所熟悉的nio框架。但是你知道它具体是怎么实现的吗?接下来让我们看一看一段有netty3编写的server端代码,开始netty的源码分析:public class NettyServer { public static void main(String[] args) { ServerBootstrap bootstrap=new ServerBootstrap();...

2018-04-19 11:37:41 687 1

原创 传统io和NIO详细比较

提起java的io,我们都会提到传统io,nio。也会想到时下比较热门的netty这个io框架。那传统io,是如何演变成nio的呢?它们之间有什么异同呢?接下来我们将从传统io谈起,系统完整的解答io的相关问题。一:传统io只要学过io的人都知道,传统io处理读取的时候通常是需要创建多个线程来单独处理的。那为什么需要创建多个线程呢?既然想要搞清楚为什么使用多线程,那么我们先来看看在使用单线程的时候...

2018-04-17 23:00:05 4460 3

原创 使用$.ajaxFileUpload上传时<input type="file">设置的onchange只能执行一次的解决方案

今天在写图片上传的时候突然发现的onchange事件总是只能执行一次,也就是说只能上传一次,而第二次点击上传的时候onchange这个事件就不会触发了。仔细找了找解决方案,据说是因为$.ajaxFileUpload每次上传的时候会把给替换了,所以绑定的onchange事件就失效了,解决办法是重新绑定事件。        亲自试了下,发现可以用。一下是我的代码        html:

2017-12-04 17:56:57 1730

原创 IO与NIO的区别

一:实现方式传统IO:1.传统的socket IO当客户端和服务端连接成功后,服务端在进行读取客户端发送的信息的时候是通过新建线程来处理的,由此带来了一个问题,当有大量客户端想服务端传输数据的时候,服务端就会启动大量线程,这样将大大的增加了服务器的压力。2.同时,传统IO通信是阻塞的,即在读取和写入过程如果未完成,它便会阻塞不会继续执行下面的逻辑。3.传统的IO采用的是

2017-03-14 17:31:32 466

空空如也

空空如也

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

TA关注的人

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