自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

死磕各种源码

工作很多年的小白

  • 博客(39)
  • 资源 (6)
  • 收藏
  • 关注

原创 使用Microsoft.Office.Interop.PowerPoin遥控PPT

Microsoft.Office.Interop.PowerPoint 调动ppt

2023-06-19 15:31:11 714

原创 sentinal源码初识二 规则持久化-持久化到文件

参考源码中的sentinel-demo-dynamic-file-rule项目持久化到文件源码流程图源码分析dashboard端保存和读取规则保存规则获取规则客户端启动服务,接收请求EnvInitExecutor.doInit()CommandCenterInitFuncSimpleHttpCommandCenterModifyRulesCommandHandler持久化到文件FileDataSourceInitFileWritableDataSourceFileRefreshableDataSource

2021-04-29 17:35:57 487

原创 sentinal源码初识一 客户端源码

流程图源码自动添加拦截启动注入配置spring-cloud-starter-alibaba-sentinel-2.2.5.RELEASE.jarspring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.alibaba.cloud.sentinel.SentinelWebAutoConfiguration,\com.alibaba.cloud.sentinel.SentinelWeb

2021-04-27 18:33:12 236

原创 java spring boot常用组件使用了哪些扩展点

组件 扩展方式 代码实现 注释 ribbon EnableFeignClients 1.spring-cloud-netflix-ribbon-2.2.5.RELEASE.jar 2.spring.factories->RibbonAutoConfiguration 3.@AutoConfigureBefore->LoadBalancerAutoConfiguration 4.@Bean->SmartInitializin...

2021-04-25 13:56:34 225

原创 Java使用Grpc进行服务端和客户端交互

java版本grpc服务端-客户端前言1 创建一个maven项目2 idea安装protobuf插件3 修改pom文件4 生成代码4.1 编写proto文件4.2 生成实体类4.3 生成service4.4 将生成代码移动到项目中5编写代码5.1 服务端5.1.1 service类5.1.2 启动类5.2 客户端5.2.1 启动类6 demo下载地址前言nacos 2.0以后,客户端服务端交互由HTTP改为GRPC,所以看了下grpc,grpc的简介就不写了,网上一搜都能看到,这里用java写一个grp

2021-04-19 10:54:26 2054

原创 nacos2.0.0 源码初识二 grpc服务端启动流程

grpc服务器启动源码流程图grpc服务启动源码1.1 GrpcSdkServernacos-core项目中,GrpcSdkServer 类上有@Service注解,所以项目启动时候会初始化此类实例@Servicepublic class GrpcSdkServer extends BaseGrpcServer { private static final int PORT_OFFSET = 1000; @Override public int rpc

2021-04-15 10:27:26 1826

原创 nacos2.0.0 源码初识一 客户端注册服务

自动注册源码1.1 spring boot自动配置引入spring-cloud-starter-alibaba-nacos-discovery-2.2.5.RELEASE.jar时jar中META-INF/spring.factories文件根据spring boot自动装配原则,会加载EnableAutoConfiguration对应的类NacosServiceRegistryAutoConfiguration对应自动注册服务org.springframework.boot.autoconfi

2021-04-15 09:48:38 1119

原创 Spring boot源码初识三 自定义starter

项目结构1.父级项目:my-springboot-starter2.子module:my-spring-boot-starter3.子module:my-spring-boot-starter-autoconfigure4.starter引用autoconfiguredemo下载下载地址demo截图注:spring.factories中不同key,spring boot对应生命周期时会调用对应类demo部分示例创建父pom创建父项目my-springboot-starter方便统

2021-04-07 18:19:10 131 1

原创 Spring boot源码初识二 自动配置原理

自动配置原理自动配置源码流程图自动配置源码解析@SpringBootApplication@EnableAutoConfiguration@Import(AutoConfigurationImportSelector.class)AutoConfigurationGroup.processgetAutoConfigurationEntrygetCandidateConfigurations自动配置源码流程图自动配置源码解析@SpringBootApplicationspring boot提供的注解

2021-04-07 12:06:47 155 1

原创 Spring boot源码初识一 spring.factories扩展点

Spring boot 扩展点spring.factories介绍扩展点调用顺序spring.factories介绍位置:META-INF/spring.factories功能:spring boot启动时会加载这个文件夹中内容,以key-value方式存储每种类型对应的执行类的集合,根据启动的生命周期,调用不同key对应的集合扩展点调用顺序 序号 类 参数/方法 作用 1 ApplicationListener ApplicationStartingEve

2021-04-02 17:31:26 497

原创 MyBatis源码初识三 sql执行流程

sql执行流程源码流程图源码分析获取sqlSessionopenSession创建执行器插件创建插件代理获取mapper代理类getMapper方法configuration.getMappermapperRegistry.getMapper创建mapper的代理类执行查询调用代理类的invoke方法selectOneselectListexecutor.query缓存key生成二级缓存查询数据真实查询源码流程图源码分析获取sqlSessionSqlSession session = sqlSes

2021-03-24 14:54:01 88

原创 MyBatis源码初识二 加载mapper.xml文件

mapper.xml源码流程图源码加载xml资源代码解析xml xmlParser.parse()解析mapper节点 configurationElement二级缓存cacheElement 解析二级缓存useNewCache 构造二级缓存解析resultMap解析sql节点解析select|insert|update|delete构造Statement将节点解析成Statement创建createSqlSource解析脚本真正开始解析源码流程图源码加载xml资源代码private void

2021-03-23 18:02:35 285

原创 MyBatis源码初识一 SqlSessionFactoryBuilder

SqlSessionFactoryBuilder快速启动源码路程图源码解析构建SqlSessionFactory快速启动实体类@Datapublic class User implements Serializable{ private Long id ; private String userName ; private Date createTime;}mapper接口public interface UserMapper { User selectBy

2021-03-23 15:18:19 220 1

原创 BIO&NIO&AIO&Netty 初识四 Netty

nettynetty-socketserverclientnetty-websocketserverclientnetty-httpserverclient总结netty-socketsocket实现servernetty服务类public class NettySocketServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup bossGro

2021-01-27 22:27:45 129

原创 BIO&NIO&AIO&Netty 初识三 AIO

AIO代码介绍代码public class AioServer { public static void main(String[] args) throws IOException, InterruptedException { // 创建aio的socketChannel,并绑定9000端口 AsynchronousServerSocketChannel serverChannel = AsynchronousServerSocket

2021-01-23 23:08:06 105

原创 BIO&NIO&AIO&Netty 初识二 NIO

NIO入门代码优化版本源码jdk1.4jdk1.5epoll函数redis底层入门代码nio服务端代码,可以设置为非阻塞,每个socketchannel表示一个客户端连接的管道,发到一个集合中,循环获取客户端发送的消息缺点:如果连接太多,集合会越来越多如果集合太多,但实际发送消息的客户端很少,每次全部循环,性能损耗大public class NioServer { public static void main(String[] args) throws IOException {

2021-01-23 22:55:05 120

原创 BIO&NIO&AIO&Netty 初识一 BIO

BIOquick_start入门代码优化代码v1.0优化代码v1.1优化代码v1.2终版代码阻塞的含义BIO缺点quick_start入门代码当前代码缺点:代码获取完一次客户端发送的数据,就结束了public class BioServer { public static void main(String[] args) throws IOException { //创建服务端,绑定8000端口 ServerSocket serverSocket = new Ser

2021-01-22 00:38:12 144 1

原创 RocketMQ源码初识一 NameServer源码

名字服务 Name Server官方doc中描述nameServer大概用到的模块源码总结代码流程图源代码mai方法createNamesrvControllerOptions与PosixParserNamesrvController构造函数RouteInfoManager构造函数start(controller);初始化controller.initializeDefaultRequestProcessorNettyRemotingServer构造函数(remoting模块)scanNotActiveBr

2020-12-18 15:09:02 557

原创 Redis源码初识七 intset数据结构

intset-整数集合介绍数据结构源码字段含义升级介绍有序的整数集合,可存储int16_t、int32_t、int64_t类型数据,数据不会重复数据结构源码typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset;字段含义字段含义encoding数组中的值的编码方式INTSET_ENC_INT16:2^15 -1 (最小-327

2020-12-15 14:09:57 128

原创 Redis源码初识六 跳表(skiplist)数据结构

skiplist普通链表优化,提取一层索引层出来继续提取,第二层索引redis实际使用源码定义普通链表如图所示,链表从小到大排序缺点:如果想在链表中查询到44,需要从头开始遍历,时间复杂度是o(n)优化,提取一层索引层出来如图所示,每隔一个元素,提取一个索引第一层索引数=N/2,搜索次数缩小一半继续提取,第二层索引第二层索引数=N/2^2 搜索次数再次缩小一半增加索引后查找效果与平衡树相同,时间复杂度O(logN)缺点:每次添加新的元素,需要全部重新提取索引redis实际使用不

2020-12-15 11:06:23 151

原创 Redis源码初识一 常用函数介绍

类型 常用操作 作用 应用场景 字符串string set key value 保存键值 键值对 mset key value [key value ...] 批量保存键值 键值对 setnx key value 没有键时才存入 分布式锁 get key 根据key获取值 mget key [key ...] 批量获取值 incr key key存储的值加1 ...

2020-12-15 10:25:37 120

原创 Redis源码初识五 dict数据结构

字典(dict)数据结构源码字段含义数据结构源码字典typedef struct dict { dictType *type; void *privdata; dictht ht[2]; long rehashidx; /* rehashing not in progress if rehashidx == -1 */ unsigned long iterators; /* number of iterators currently running */}

2020-12-14 18:12:24 143

原创 Redis源码初识四 list数据结构

list数据结构数据结构

2020-12-14 17:09:19 74

原创 Redis源码初识三 RedisObject

RedisObjectRedisObjectserver.h(源码)字段含义不同类型,用到的数据结构扩展(字符串embstr)object.c源码RedisObjectredis所有类型,key都是sds存储,value都是对应redisOjbectserver.h(源码)typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (

2020-12-14 16:50:27 169

原创 Redis源码初识二 字符串数据结构

SDSsdssds.h(源码)sds存储结构如图字段含义总结redis为什么使用sds而不使用c语言自带的字符串:sds名称:简单动态字符串(simple dynamic string,SDS )所有数据类型中都有用到此数据结构所有类型的key,都是此类型数据结构sds.h(源码)struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* 3 lsb of type, and 5 msb of string

2020-12-14 14:26:20 60

原创 Spring源码初识三 Spring开始源码阶段

Spring源码使用JavaConfig方式运行Spring构造函数代码分析前两行代码无参构造函数创建bean定义读取器register(componentClasses)方法refres方法,spring核心方法1、2、3、4、5、6、7、8、9、10、11、12、13、使用JavaConfig方式运行Spring代码如下public class SpringApplication { public static void main(String[] args) { //注解方式启

2020-12-11 18:25:17 108

原创 Spring源码初识二 Spring体系与各个模块含义

Spring体系架构(基于4.x)rg.springframework.beans 和 org.springframework.context 是实现Spring IOC容器框架的基础. BeanFactory 接口提供了一种更先进的配置机制来管理任意类型的对象. ApplicationContext 是BeanFactory的子接口. 他提供了:更容易与Spring的AOP特性集成消息资源处理(用于国际化)事件发布应用层特定的上下文,如用于web应用程序的WebApplicationContex

2020-12-10 18:02:25 120 1

原创 Spring源码初识一 Spring项目搭建与使用

官网地址:https://github.com/spring-projects/spring-framework中文文档:https://github.com/DocsHome/spring-docs/blob/master/SUMMARY.md家族清单:https://spring.io/projectsSpring项目搭建与使用一、第一个spring项目(Xml方式)1、引入pom文件2、添加bean对应类3、在resources下添加services.xml4、写main方法5、查看运行效果二、

2020-12-08 14:04:42 175

原创 Eureka源码

Eureka源码流程如下:代码详解Server端项目配置:1、启动类上加注解:@EnableEurekaServer2、修改配置文件:server: port: 9000eureka: client: registerWithEureka: true #注册到eureka中(server端,如果集群,必须开启) fetchRegistry: true #从服务端拉取注册表(server端,如果集群,必须开启) serviceUrl: default

2020-09-10 11:16:04 1735 1

原创 ThreadPoolExecutor线程池源码分析与流程图

ThreadPoolExecutor:线程池使用线程池参数详解:线程池原理:执行流程图:源码分析submitexecute:具体执行addWorker使用线程池//创建线程池ThreadPoolExecutor test = new ThreadPoolExecutor(1, 1, 5000, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(), ThreadPoolExec

2020-09-03 16:27:55 175

原创 AbstractQueuedSynchronizer之LinkedBlockingQueue

LinkedBlockQueue阻塞队列put流程:使用pullLock加锁判断阻塞队列是否满了如果阻塞队列满了放入notFull对应的条件等待队列中释放pullLock的锁阻塞线程线程被唤醒尝试入CLH队列如果阻塞队列没有满入阻塞队列队列计数+1释放锁如果阻塞队列中有空位置,通知notFull的条件等待队列判断条件队列是否有数据如果有数据,取出条件队列第一条数据数据放到CLH队列中修改状态为signal状态修改失败阻塞线程LinkedBl

2020-08-23 23:47:34 158

原创 AbstarctQueuedSynchornizer值Semaphore

Semaphore:控制访问资源的线程数量

2020-08-23 23:40:33 58

原创 AbstarctQueuedSynchronizer之ArrayBlockingQueue

AbstarctQueuedSynchronizer之ArrayBlockingQueueArrayBlockingQueue(阻塞队列)中数据结构执行流程puttake具体代码putsignaltakeArrayBlockingQueue(阻塞队列)中数据结构数组(数据添加成功放入这里)notFull条件队列put时数组满了,线程放到这里排队阻塞take后,会通知notFul队列,数组没有满,唤醒notFull第一个节点notEmpty条件队列take数组空了,线程放到这里排队阻塞

2020-08-22 00:48:37 92

原创 AbstractQueuedSynchronizer之ReentrantLock

AQS:AbstractQueuedSynchronizer(字面翻译 抽象的 排队的 同步器,即同步器框架)AQS定义了多线程下,访问共享资源的同步器框架AQS具备的特性:阻塞等待队列共享/独占公平/非公平可重入允许中断想象一下如果自己要实现一个锁机制,要能做到什么?同一时间,只有一个线程能访问到公共资源的功能。持有线程操作完以后,其他线程继续竞争如果不用synchronized,如何实现呢?实现步骤:2. 创建一个对象,对象中有如下属性:+ 状态:记录当前是否有线程占用锁

2020-08-19 16:59:42 196 1

原创 Tomcat源码初识五 Tomcat如何处理HTTP请求

Tomcat源码初识五 Tomcat如何处理HTTP请求

2020-07-22 13:02:14 360

原创 Tomcat源码初识四 Tomcat如何实现热加载与热部署

Tomcat源码初识四 Tomcat如何实现热加载与热部署

2020-07-22 11:52:31 317 1

原创 Tomcat源码初识三 双亲委派与Tomcat如何打破双亲委派

Tomcat源码初识一Tomcat源码初识二

2020-07-22 11:39:58 429

原创 Tomcat源码初识二 用文字描述整体流程

上一章画了tomcat流程图,这章试着用文字来描述下tomcat流程tomcat启动类Bootstrap,启动时会执行这个类里的main方法创建Bootstrap对象,执行init方法初始化classloaders,如下图,三个加载器加载路径在conf/catalina.properties中定义(默认catalinaLoader与sharedLoader没有设置,两个类加载器默认都是commonLoader,如果设置了,父类是commonLoader),然后sharedLoader是后期加载项目

2020-07-20 18:25:16 350

原创 Tomcat源码初识一 Tomcat整理流程图

Tomcat流程图流程图

2020-07-20 15:10:54 1150

使用Microsoft.Office.Interop.PowerPoint调用代码操作PPT

代码能够操作ppt放映,翻页,调用画笔,设置画笔颜色等功能,可获取每页PPT截图,可获取小节信息,PPT备注信息 Application application = new Microsoft.Office.Interop.PowerPoint.Application(); Presentation presentation = application.Presentations.Open(path, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoTrue);//打开ppt application.Visible = MsoTriState.msoTrue; presentation.SlideShowSettings.ShowPresenterView = MsoTriState.msoFalse;//不开启演示者视图 presentation.SlideShowSettings.Run();//放映ppt presentation.SlideShowWindow.View.Next();//下一页

2023-06-19

grpc-java.zip

grpc 服务端与客户端调用demo

2021-04-19

my-springboot-starter.zip

spring boot 自定义starter

2021-04-07

maven+spring mvc+hibernate+dubbo+velocity+mysql的demo源码

maven+spring mvc+hibernate+dubbo+velocity+mysql的demo源码,运行前请修改resources/config.properties下的数据配置

2017-12-11

maven+spring mvc+hibernate+dubbo+mysql的demo源码

maven+spring mvc+hibernate+dubbo+mysql的demo源码,运行前请修改resources/config.properties下的数据配置

2017-12-11

maven+spring mvc+hibernate+dubbo的demo

maven+spring mvc+hibernate+dubbo的demo,运行前请修改resources/config.properties下的数据配置

2017-12-11

ViewFlow,一个滑动效果库,类似于标题切换,导航切换

包含示例文件,我导入的时候把viewflow这个项目右键android的版本 api level选择成11,然后AndroidManifest.xm里面的targetSdkVersion值改成11

2014-03-06

空空如也

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

TA关注的人

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