- 博客(64)
- 收藏
- 关注

原创 rocketmq 源码阅读笔记
nameserv路由管理:RouteInfoManagerpickupTopicRouteData():根据topic取得对应的所有队列list < QueueData>将每个队列QueueData的brokerName存到Set<String> brokerNameSet中遍历 brokerNameSet,从brokerAddrTable中取出brokerNa......
2019-12-04 20:08:48
1849
2

原创 网络编程-汇总
先读《高性能网络编程(五):一文读懂高性能网络编程中的I/O模型》其中BIO、NIO部分可阅读《https://blog.youkuaiyun.com/bintoYu/article/details/90480649》进行补充然后再读《高性能网络编程(六):一文读懂高性能网络编程中的线程模型》...
2019-11-19 16:10:00
426

原创 操作系统&计算机网络&数据库
计算机网络TCP/IP五层模型(只需要背传输层)1 应用层(HTTP):为用户提供应用接口。应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。 对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。2 传输层(TC...........................
2019-09-01 22:40:15
10103
1

原创 mybatis 动态代理技术
文章目录mybatis mapper的使用疑问点总流程图mapper.xml解析getMapper(type)方法获得mapper代理类为什么要使用mapper代理类?mapperMethod.execute委托给SqlSession去执行sqlmybatis mapper的使用首先,我们来看看使用mybatis的mapper的步骤:1、编写xxxMapper.xml以及xxxMapper接...
2019-05-02 18:51:14
1294
1

原创 java集合
Map:HashMap:HashTable:CocurrentHashMap(JDK 1.7):CocurrentHashMap(JDK 1.8) (读不加锁、写加锁)源码解析:LinkedHashMap(HashMap + 双向链表)TreeMapListArrayList(动态数组)LinkedList(链表)阻塞队列:(详见并发编程.md)Vector...
2019-04-09 18:06:06
229

原创 并发编程笔记
一、并发基本概念1、(个人理解)并发和高并发是两个概念,解决的是两类问题并发:多个线程操作相同的资源,旨在保证线程安全,合理利用资源高并发:服务能同时处理大量请求,提高程序性能2、并发和并行:并发(concurrent):多个交替进行,从而“看上去”是同时。并行(parallellism):在同一时刻进行。3、为什么需要cpu缓存?因为cpu的频率太快了,主存跟不上,c...
2019-02-04 11:40:22
805

原创 JVM虚拟机笔记 - 理论部分
总结:模块一:运行时数据区域模块二:一个类从出生到死亡经历了什么类加载机制->对象的创建->对象的访问->分代回收算法->对象"死亡"的条件模块三:垃圾回收器模块四:双亲委派模型jvm调优:1. 使用ps aux | grep java 或 jps -vl 获取当前运行的java进程号(PID)2. 提取GC信息() :jstat –g...
2019-02-04 11:35:57
649
原创 netty 源码分析(一)- 启动
0 预备工作前往github下载源码,版本为4.1,地址:https://github.com/netty/netty1 正式分析1.1 官方的启动example代码服务端的启动代码为EchoServer,具体路径为io.netty.example.echo.EchoServer。本文分析的也就是这个类,具体代码如下:public final class EchoServer { static final boolean SSL = System.getProperty("ssl")
2021-05-12 10:54:26
349
原创 BIO-select-epoll个人总结 + redis线程模型
先讲一下最简单的情况:BIO+单client。先是server启动服务并监听,然后client连接server,此时创建一个线程,并在内核生成文件描述符fd6,同时线程会调用recvfrom等待消息,如下图所示:然后,client1发送数据,数据最终会到fd6上。此时线程就能读取到对应的数据,对数据进行处理后将结果返回给client1。客户端当然不会只有一个,因此需要建立多个线程来进行处理。BIO+多client。如下图所示:当有三个客户端连接服务器,就需要有三个线程来分别对三个文件描述符(
2020-12-18 11:21:25
318
原创 Spring 面试知识点
Bean的生命周期(注:前三步就是createBean()的三部曲)createBeanInstance():实例化bean需要注意,这里的实例化仅仅是生成了这么一个bean,还并没有进行初始化,populateBean():属性的装配将bean的一些属性注入到bean中,例如@AutoWired和@Value就需要用到AutowiredAnnotationBeanPostProces...
2020-09-18 10:15:17
740
原创 socket的BIO 演示 -- 补充linux知识
本文学自视频:https://www.bilibili.com/video/BV11K4y1C7rm?p=1开启服务端以及基础知识铺垫第一步,写一个服务端ServerSocketTest:public class ServerSocketTest { private static final ExecutorService executorService = Executors.newCachedThreadPool(); public static void main(Stri.
2020-06-09 16:30:37
514
原创 spring源码系列(十) 事物Transaction
1 预备知识JDBC的使用及Spring + JDBC:SpringJDBC源码解析 (看一下demo就行,源码不用看)2 事物示例:首先,config类上需要添加注解@EnableTransactionManagement:@EnableTransactionManagement@Configurationpublic class JDBCConfig {接着,类中需要配置事物管理器作为一个Bean: @Bean public DataSourceTransactionM
2020-06-07 21:02:06
253
原创 spring 源码系列(九)AOP
1 预备知识1.1 静态代理和动态代理1.2 JDK动态代理1.3 CGLIB代理2 正式知识这一篇讲的非常详细,强烈推荐:Spring源码深度解析(AOP功能源码解析):https://blog.youkuaiyun.com/qq_26323323/article/details/81012855注:文章在JDK动态代理的最后的invocation.proceed()没有进行详解,我debug了一下,这里的功能可以这么理解:invoke()方法里会获得接口的代理对象,并将其所有的advice组成一条cha
2020-05-24 20:55:29
244
原创 springboot 源码 - 自动配置
注:阅读本篇前,须先阅读我的另一篇博客springboot run方法源码(一)-初始化及第三步中的“初始化initialize()”,需要了解loadFactoryNames()方法的原理。因为在网上看到了比较好的介绍文章,因此就不重复劳动了,传送门:Spring Boot面试杀手锏————自动配置原理...
2020-04-13 21:23:51
204
原创 springboot run()方法系列 --五六七步
版本本文采用的是springboot 1.5.9版本.run方法()重新回顾一下run()方法 /** * Run the Spring application, creating and refreshing a new * {@link ApplicationContext}. * @param args the application arguments (usually...
2020-04-13 11:19:05
569
原创 springboot run方法源码(一)-初始化及第三步
版本本文采用的是springboot 1.5.9版本,没有使用2.X版本。pom.xml里加入: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</...
2020-03-05 16:20:35
351
原创 springboot run方法源码(二)-第四步环境准备
第四步 环境准备(与profile和application文件相关)第四步主要对下面两行代码进行讲解://4. 创建DefaultApplicationArguments(该类含有args),然后调用prepareEnvironment()ApplicationArguments applicationArguments = new DefaultApplicationArguments(...
2020-03-05 16:20:25
275
原创 spring 源码系列(八)bean的属性装配populateBean()
先贴出源码protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) { // pvs是一个MutablePropertyValues实例,里面实现了PropertyValues接口,提供属性的读写操作实现,同时可以通过调用构造函数实现深拷贝 // 在本例中,里面存在一个...
2020-03-04 17:57:14
557
原创 springmvc 系列
本文参考自:SpringMVC源码阅读系列汇总,并在每个章节分别进行一些自己的理解和补充。0 使用篇因为我引用上面的文章中的项目时,tomcat总是启动不起来,所以换了一个简单版的:一个简单的SSM框架实例(使用IDEA)1 预备知识篇:1.1 使用tomcat+spring时ApplicationContext的创建实际上,使用tomcat+spring时,一共会创建两个Applica...
2020-02-29 18:09:46
218
原创 spring 源码系列(七) 最重要的refresh()方法
注:spring启动中,对于一个bean,是先实例化后初始化,两者的区别在于,实例化是生成bean,初始化是给bean赋上属性。refresh()关于refresh()方法,可以阅读下面这篇文章(文章很长,需要耐心阅读):Spring IOC 容器源码分析:https://javadoop.com/post/spring-ioc同时,基于上面的文章进行一些补充createBean三部曲...
2020-02-21 17:02:48
581
原创 spring 源码系列(零)- 阅读顺序
之所以有这个第“零”篇,是为了让大家对spring体系有着更好的认识,因此在这里推荐大家阅读知乎的大神bravo1988的一篇关于spring的文章,这篇文章很生动具体,可以说是让我茅塞顿开:传送门:怎么回答面试官:你对Spring的理解?本篇就只有这么多,后续的几篇会对spring的一些源码进行详细的介绍。...
2020-02-21 10:03:17
1370
原创 spring 源码系列(六)- 处理@AutoWired和@Value的后置处理器AutowiredAnnotationBeanPostProcessor
1 介绍2 原理2.1 何时被注册AutowiredAnnotationBeanPostProcessor主要通过下面两种方式进行注册:调用AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);refresh()方法中的registerBeanPostProcessors();对于第一种情况,...
2020-02-19 17:32:13
1371
1
原创 spring 源码系列(四)- AnnotationConfigApplicationContext
在spring中,使用的入口就是在main函数中创建Spring容器,基于XML形式的是ClassPathXmlApplicationContext;而基于注解形式的是AnnotationConfigApplicationContext。本文将对AnnotationConfigApplicationContext进行详细讲解。使用篇在这里简单介绍一下AnnotationConfigApplic...
2020-02-16 15:20:18
1195
原创 spring 源码系列(三)- PropertySource和Environment
注:本章内容主要是作为springboot的run()方法中的环境预准备prepareEnvironment()方法的预备知识,其中本章的environment部分可能比较抽象,不是很好理解,这并没有什么问题,只要大概明白即可,后续阅读prepareEnvironment()方法时会加深理解。1 @PropertySource1.1 使用最常见的使用方法是与@Value搭配:@Comp...
2020-02-14 19:50:36
849
原创 spring 源码系列(五)- 最重要的后置处理器ConfigurationClassPostProcessor
1 介绍ConfigurationClassPostProcessor用于对@Configuration类进行解析。实际上不止@Configuration,该处理器会对容器中含有以下注释的bean进行处理:@Configuration@Component:注意,@Service、@Controller等一些注释本身其实也是@Component@ComponentScan@Import...
2020-02-14 11:27:49
770
原创 spring 源码系列(二) 元数据metadata
介绍直接看下面这篇博客就行:【小家Spring】聊聊Spring中的那些【Metadata】,举例讲解:AnnotationMetadata、 MethodMetadata使用干看原理可能会有些深奥,这里对ClassMetadata及实现类StandardClassMetadata,以及AnnotationMetadata及实现类StandardAnnotationMetadata进行一些...
2020-02-13 11:18:05
1253
原创 spring 源码系列(一)- BeanDefinition及注册
BeanDefinition介绍关于BeanDefinition介绍部分,参考自知乎的大神bravo1988,链接:https://www.zhihu.com/answer/723146648BeanDeifinition实际上是生成bean之前的中间态,”假设Bean是红烧肉,那BeanDefinition就是该怎么做红烧肉“,也就是说,BeanDeifinition定义的是如何实例化bea...
2020-02-12 12:58:09
837
原创 设计模式笔记
创建者模式创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。单例模式(重点)详情请见:设计模式-单例模式·工厂模式(重点)简要介绍:简单工厂模式:根据名称直接生成,进阶就是...
2020-02-12 12:18:56
275
1
原创 spring session
一、spring session的使用利用spring boot可以很容易地实现spring session,传送门:SpringBoot之使用Spring Session集群-redis二、
2020-02-05 11:56:51
755
原创 设计模式-单例模式
单例模式一句话总结:一个类在Java虚拟机中只有一个对象。项目里:JobQueue等queue,以及生成id的mapper,统计节点状态的mapper等。分为饿汉式和懒汉式;饿汉式:public class HurgrySingleton { private static HurgrySingleton hurgry=new HurgrySingleton(); privat...
2019-09-04 17:47:28
144
原创 spring/springboot 使用汇总
springboot注释汇总Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用:https://www.cnblogs.com/fashflying/p/6908028.html@Condition注解:@ConditionalOnBean(A.class):只有A存在的时候被注释的Bean无效@ConditionalOnProperty(prefi...
2019-06-25 11:33:16
250
原创 springboot aop使用
https://blog.youkuaiyun.com/asdfsadfasdfsa/article/details/84780506
2019-06-17 15:55:08
217
转载 Spring IOC 容器源码分析
注:本篇转载自:https://javadoop.com/post/spring-ioc文章目录引言BeanFactory 简介启动过程分析创建 Bean 容器前的准备工作创建 Bean 容器,加载并注册 BeanBeanDefinition 接口定义customizeBeanFactory加载 Bean: loadBeanDefinitionsdoRegisterBeanDefinitio...
2019-05-23 15:25:29
216
转载 BIO NIO
NIO和BIOIO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIOBIO和NIO的区别:面向流与面向缓冲IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节。而NIO则可以将数据先放入缓存区,稍后再读取想要的部分。(但其缺陷在于Thread需要反复检查buffer中是否包含所有想要处理的数据)阻塞与非...
2019-05-23 15:02:37
264
转载 单点登陆SSO
注:本篇涉及计算机网络中的cookie知识,祥见:https://github.com/bintoYu/Note/blob/master/架构/登陆系统/java cookie的使用.md本文转载自https://yq.aliyun.com/articles/636281背景在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录...
2019-05-21 18:38:05
266
转载 redis持久化
本篇转载于 https://github.com/Snailclimb/JavaGuide/blob/Snailclimb-patch-1/数据存储/Redis/Redis持久化.mdRedis不同于Memcached的很重一点就是,Redis支持持久化,而且支持两种不同的持久化操作。Redis的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-...
2019-05-14 17:08:43
155
转载 分布式锁-概念
转载自:分布式锁简单入门以及三种实现方式介绍分布式锁解决并发的三种实现方式在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同 一时间内只能被同一个线程执行。在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api并不能提供分布式锁的能...
2019-05-14 14:07:55
272
原创 mybatis-plus源码分析-2-mapper扫描
文章目录预备知识:入口:MapperScannerRegistrar先看MapperScannerRegistrar的声明registerBeanDefinitions方法具体实现:scan.doScan小总结及困惑MapperFactoryBean声明:getObject()获得mapper实例将mapper进行注册MapperFactoryBean的总结及困惑预备知识:在spring整合m...
2019-05-02 12:19:00
3016
原创 mybatis-plus源码分析-1-sqlSessionFactory的生成
注:本篇本人看的较为混乱,而且个人觉得实际收获不是很大,因此可以选择跳过,直接去看源码分析-2-MapperScanner。预备知识:在spring整合mybatis时,我们需要配置以下3个东西:dataSource(数据源)sqlSessionFactoryMapperScanner(Mapper扫描器)本次将介绍的是sqlSessionFactory的生成,在讲解具体代码之前,...
2019-05-02 12:17:46
2370
原创 mybatis-plus使用
mybatis-plus 快速搭建工程https://mp.baomidou.com/guide/quick-start.html#初始化工程增删查改(CRUD)链接中给出了所有的CRUD接口:https://mp.baomidou.com/guide/crud-interface.html#selectbymap通用使用示例:增: public void testI...
2019-05-02 12:13:48
336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人