- 博客(78)
- 资源 (8)
- 收藏
- 关注

原创 WINCE串口通讯经验小结
这两天由于工作要求,需要在WINCE上开发一个通过串口传输文件的小工具,经过测试,调用WriteFile一直写数据时,当数据长度超过50K就会返回WriteFile出错,而且使用GetLastError返回的错误值是87,1814两种,如果出错时不予理解,继续向串口写数据,每隔50K就会产生一个WRITEFILE错误,如此循环大概到总共写了200多K时,整个系统都会崩溃掉。打印崩溃地址如下:
2013-01-04 19:05:25
1252
原创 记录一次okhttp包版本引用被覆盖的问题
由于外部服务的父包引入了springboot的IMPORT的BOM表单定义,而springboot的 dependies又定义了okhttp的版本号所致。1.实现了一个框架包,其父包控制了okhttp版本号。自身父包定义的组件版本号优先级高于外包部间接依赖的父包中定义的组件版本号。然后查看okhttp的版本号为4.9.3,而不是框架内指定的版本号。2.外部服务引用引用此框架包。
2025-03-18 17:49:17
402
原创 dubbo2.7.23注册中心、配置中心、元数据中心
抽象接口:DynamicConfiguration具体实现类:NacosDynamicConfiguration示例:zookeeper://10.6.32.92:2181/ConfigCenterConfig?
2024-12-24 11:13:46
270
原创 Nacos2.1.0 && 2.2.3服务注册流程分析
***************************************nacos2.0.4数据库表结构升级到2.2.3***************************************/springboot第一次注册失败后,就不会再次注册GRPC客户端了,导致注册中心没有记录,必须重启客户端服务才行。--》存储服务与具体的实例IP,端口,元数据映射关系。--> 存储命名空间和服务对象列表。5. 2.x的兼容1.X升级判断,判断从1.X升级到2.X是否完成,双写是否结束。
2024-10-12 17:58:15
401
原创 nacos服务注册流程
注意这里,如果是临时节点,还会触发客户端定时发送心跳。这里已经跳到了nacos-client-1.4.2的包,相当于是具体注册中心客户端的实现。10.接着跳到了NamingProxy.registerService,
2024-08-03 14:36:18
4335
原创 mongodb分片集群搭建踩坑记录
b. 将升序键的当前值一直到正无穷范围的块都指定分布在SSD分片上:sh.addTagRange("dbName.collName",{"_id":ObjectId()},...{"_id":MaxKey},"ssd")创建步骤: db.users.ensureIndex({"username":"hashed"}) , sh.shardCollection("app.users",{"username":"hashed"})如需查看所有的块,可使用sh.status(true)命令。
2023-03-18 14:44:52
1479
2
原创 K8S搭建NACOS集群踩坑问题
解析(/etc/resolv.conf),使主机可以用k8s自身的dns服务。nodeName: host-52,但是同时也加上了hostNetwork: true,导致POD已经启动,但是只能在主节点通过28855端口访问,其它局域网机构加上28855端口无法访问。ClusterFirst(默认DNS策略):优先使用kubernetes环境的dns服务,将无法解析的域名转发到从宿主机继承的dns。Default: 继承Pod所在宿主机的DNS设置,hostNetwork的默认策略。
2023-03-02 16:52:58
2234
原创 springboot-rocketmq整合NOT_CONSUME_YET问题处理
【代码】springboot-rocketmq整合NOT_CONSUME_YET问题处理。
2023-01-31 16:48:52
4754
1
原创 mybatics插件拦截器机制分析以及pageHelper源码分析
通过dialect对象的各个方法结合实现分页功能,Dialect是一个接口,他有不同的子类实现,对应不同的数据库方言。如果我们没有在配置中指定具体的实现类的话,默认的实现类是PageHelper。ExecutorUtil.pageQuery方法:这个方法比较复杂,是实现最终数据查询的地方,主要的逻辑是获取对应数据库方言的分页语句形式,MySql的话是在。从这个插件包装的代码可以看到,就是对目标对象的所有接口生成JDK动态代理,在目标对象的所有接口调用前,拦截植入拦截器的代码。自动创建的count语句是在。
2022-10-16 16:17:58
849
原创 mybatics 原始操作数据库源码分析全过程
5.5 这里特别说明下typeHandlers是个类型处理器,是将JAVA类型的入参对象在JDBC的prepareStateMent中的setParam传入不同的类型(setParamInt,setParamLong)5.3 我们查看Configuration类的成员变量,其实就是与全局配置文件中的节点一一对应。5.1 发现其是从XML中获取相应的配置属性,然后保存到configuration的属性中。6.5 可以看到也跟解析全局配置文件一样,对mapper中的子节点逐个解析。
2022-10-11 17:01:43
723
原创 Seata的AT模式客户端两阶段提交流程源码分析
注意:service.vgroupMapping.loveday-service-group=default,这个配置自定义事务分组对应的集群名应该要放在nacos中。修改客户端RM的undolog序列化方式为protostuff,解决默认的JACKSON序列化不支持时间序列化的问题。seata.tx-service-group=loveday-service-group,配置当前服务的自定义分组名。4.启动seata-server,运行bin下的seata-server.bat。一、seata的理论。
2022-09-24 17:12:41
681
原创 记录一次线上zookeeper连接数耗尽拒绝连接的问题处理
推测发现,是服务端(主动断开方)主动断开连接,是由于TCP关闭连接时的四次挥手中的,收到客户端(被动断开方)最后一个FIN结束包,并且返回ACK给客户端后,等待一段时间才回到CLOSED状态。至于为什么会有大量的TIME_WAIT,应该是连接数达到ZK的单台客户端(60)连接数,ZK客户端不断重连,服务端不断拒绝 断开连接,所以会出现大量的临时TIME_WAIT。通过统计发现,有问题的宿主主机上有4500个与ZK服务器的连接 处于TIME_WAIT状态,而这台宿主主机上的POD服务只有10个。.......
2022-08-13 13:58:58
3226
原创 springboot 从环境变量读取配置的流程
1.最终会从org.springframework.boot.context.properties.bind.Binder,是这个类的findProperty方法,会将一个配置类BEAN的每个属性都会循环寻找环境变量,配置文件等,是否能找到合适的属性定义,然后进行属性注入。从下面可以看到,环境变量的配置覆盖了bootStrap的配置。最终发现,环境变量会覆盖配置文件 的配置。一、定义NACOS的地址环境变量配置。bootStrap的配置。.........
2022-08-03 13:26:43
3653
原创 Shiro原理及源码分析
安全管理器的创建是依赖于认证、授权,缓存、数据源等诸多组件的,你可以各自创建功能组件对象然后交给SecurityManger,配置的方式,选择很多,比如你可以通过SpringXML配置,也可以用YAML文件或者Properties文件配置等,领域对象,在Shiro和你的应用程序安全数据(比如登录的用户名、密码,用户的权限等)之间架起一座沟通的桥梁,安全管理器要验证用户身份,或者要获取用户对应的权限,是分别通过认证组件(),授权找授权组件(),会话找会话组件(.........................
2022-07-16 13:46:55
2118
原创 springboot aop加载流程
一、创建几个切面。package com.tpw.newday.aspect;import cn.hutool.core.util.ObjectUtil;import cn.hutool.core.util.StrUtil;import cn.hutool.json.JSONUtil;import com.tpw.newday.annation.CacheProcesser;import com.tpw.newday.common.MyConstants;import com.tpw.n
2022-02-25 20:42:05
1266
原创 springcloud feign 加上hystrix的流程
一、maven配置 引入feign默认会依赖hystrix,只要不排除就行。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId><!-- <exclusions>--><!--
2021-12-16 12:00:13
1089
原创 spring cloud feign 加载流程
一、如果只想加入feign,不要载入hystrix,则在引包时排除掉hystrix的包。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <exclusions> <exclusion> <g
2021-12-16 11:06:37
1180
原创 redis集群配置和测试
一、在本机建立6个单REDIS节点,并以集群方式运行。cluster-enabled yes# Every cluster node has a cluster configuration file. This file is not# intended to be edited by hand. It is created and updated by Redis nodes.# Every Redis Cluster node requires a different cluster
2021-12-15 09:44:42
2538
原创 springcloud ribbon retryTemplate操作流程分析
一、在配置中加入<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId></dependency>二、初始化流程分析1.构建LoadBalancedRetryFactory,在RibbonAutoConfiguration配置类中。2.在LoadBalancerAu
2021-12-14 15:01:26
552
原创 springcloud ribbon 配置负载均衡策略以及自定义策略
一、系统内置的策略有以下几种。 这个负载策略配置说白了就是让 Ribbon 这个客户端负载均衡器怎么进行访问服务提供者列表。是轮流访问?随机访问?权重?等。Ribbon 的负载均衡策略策略类 命名 说明RandomRule 随机策略 随机选择 ServerRoundRobinRule 轮训策略 按顺序循环选择 ServerRetryRule 重试策略 在一个配置时问段内当选择 Server 不成功,则一直尝试选择一个可用的 ServerBes...
2021-12-14 11:00:58
1670
原创 springcloud ribbon @LoadBalance负载均衡源码流程分析
一、编写示例 1.服务端 pom.xml <properties> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR2</spring-cloud.version> </properties> <dependencies> <dependen...
2021-12-13 12:50:07
1208
原创 Redisson 管道批量发送命令流程分析
一、示例代码管道功能就是REDIS的批量发送,实际上是客户端的功能,与服务端无关。相当于把多个请求的命令放在一个数据包通过TCP发送到服务端,然后客户端再一次性读取所有的命令回应,节省多次命令的网络请求。 RBatch rBatch = redissonClient.createBatch(); RFuture<Object> goodsNameFuture = rBatch.getBucket("goodsName").getAsync(); RF
2021-11-18 16:45:38
6338
3
原创 redission收发命令流程分析
一、示例,我们从最简单的GET命令开始。RBucket<Object> t = redissonClient.getBucket("syncTradeUid_idOff");int idOff = (int)t.get();二、springboot的Redission自动配置@Order(value = 4001)@ConditionalOnProperty("redisson.password")@Configuration@EnableConfigurationPr
2021-11-12 17:42:17
2898
原创 HashedWheelTimer时间轮定时任务原理分析
一、示例代码HashedWheelTimer时间轮是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短平快任务,例如心跳检测。时间轮是一种非常惊艳的数据结构。其在Linux内核中使用广泛,是Linux内核定时器的实现方法和基础之一。Netty内部基于时间轮实现了一个HashedWheelTimer来优化I/O超时的检测,由于Netty动辄管理100w+的连接,每一个连接都会有很多超时任务。比如发送超时、心跳检测间隔等,如果每一个定时任务都启动一个Timer,不仅低效,而且会消耗大量的资源。
2021-10-09 16:31:23
1641
原创 ScheduledThreadPoolExecutor定时任务线程池执行原理分析
<div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-1a85854398.css"> <div id="content_views" class.
2021-10-09 10:07:13
1670
原创 Netty ObjectPool对象池技术原理分析
一、ObjectPool使用示例1.对需要使用对象池的对象,定义一个ObjectPool的静态全局变量RECYCLE,用于对象的分配和回收。并在对象内定义一个ObjectPool.Handle成员变量,并且将此变量作为构造函数参数传入,并将构造函数作为私有。然后添加一个回收的方法Recycle,在不需要此对象时调用handle.recycle()获取对象则调用ObjectPool.get@Slf4jpublic class ObjectRecycleTest { private s
2021-09-30 17:17:11
700
原创 ThreadLocal的原理和FastThreadLocal的优势
一、ThreadLocal的编写测试1.只需定义一个静态全局的ThreadLocal变量,然后在线程的执行方法里面,对这个对象的某个方法,set后,同一个线程get,能正常取出数据。2.线程池使用ThreadLocal变量,要注意,任务执行完要删除ThreadLocal数据,防止脏数据传播到同一个线程的下一个任务中。@Slf4jpublic class ThreadLocalTest { private static ThreadLocal<String> nameTh
2021-09-29 17:56:44
324
原创 Netty:option和childOption参数设置说明
Channel配置参数(1).通用参数CONNECT_TIMEOUT_MILLIS : Netty参数,连接超时毫秒数,默认值30000毫秒即30秒。MAX_MESSAGES_PER_READ Netty参数,一次Loop读取的最大消息数,对于ServerChannel或者NioByteChannel,默认值为16,其他Channel默认值为1。默认值这样设置,是因为:ServerChannel需要接受足够多的连接,保证大吞吐量,NioByteChannel可以减少不必要的系统调用sel
2021-09-28 16:12:20
314
原创 NioEventLoop加载流程分析
一、我们首先看NioEventLoopGroup创建和初始化过程。EventLoopGroup workEventLoopGroup = new NioEventLoopGroup(new NamedThreadFactory("clientThread", false));1.看下类继承图2.MultithreadEventLoopGroup父类实现了channel的接口注册,next取下一个可用的NioEventLoop @Override public Event.
2021-09-26 16:16:34
269
原创 ServerBootstrap的启动流程
一、ServerBootstrap的启动示例代码 EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup(new NamedThreadFactory("bossThread",false)); EventLoopGroup workEventLoopGroup = new NioEventLoopGroup(new NamedThreadFactory("workThread",false)); .
2021-09-18 16:20:49
1478
原创 nio的epoll和selector实现流程分析
一、NETTY底层使用的是NIO的selector和epoll进行实现的,select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说把数据从内核拷贝到用户空间是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间...
2021-09-17 17:06:38
898
3
原创 netty 管道和handler的加载和处理流程
一、pom引入包,此处版本为4.1.52.Final <dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-kqueue</artifactId> <scope>provided</scope> </dependency>
2021-09-10 16:45:55
7738
原创 redis 主从哨兵模式搭建
一、REDIS主从模式,搭建三个节点,同一个机器,三个端口。1.主节点bind 127.0.0.1protected-mode yesport 63792.从节点1bind 127.0.0.1port 6381slaveof 127.0.0.1 63793.从节点2bind 127.0.0.1port 6382slaveof 127.0.0.1 63794.运行命令./redis-server.exe ./redis6382.conf./redi
2021-08-26 18:24:35
617
原创 springboot 加载mybatis的流程
一、mybatics的配置步骤1.POM依赖包加载 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version>
2021-08-20 18:21:43
1163
原创 springboot 加载jpa,datasource的初始化流程
一、在application.yml在配置datasource的参数,hibernate,jpa的参数。spring: datasource: url: jdbc:mysql://** username: *** password: *** driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource initialSize: 1
2021-08-13 18:10:25
4109
原创 springboot 读取nacos配置的流程和数据变化实时更新机制
一、NACOS配置如下1.bootStrap.yaml 配置spring: profiles: active: dev application: name: newday cloud: nacos: discovery: server-addr: www.nacos.com:8848 #server-addr: 10.100.8.104:8848 #server-addr: 172.18.173.44:
2021-07-29 17:43:50
4189
局域网内类似飞秋的文件传输以及聊天工具
2014-01-03
UDP/TCP程序封装类
2013-12-20
各种类型图片显示以及半透明实现及能保存成565格式BMP
2013-01-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人