自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (3)
  • 收藏
  • 关注

原创 Insight Spring重复Bean 注册的过程

疑问:在业务工程代码梳理过程中,发现竟然存在xml 和 注解两种方式配置相同beanName,但是不同的Class。竟然能正常启动发布。理论上beanName 是唯一的,是怎么回事。Insight Spring版本:3.2.0.RELEASE明确的前提Spring Bean在容器中的唯一标识是beanName。对应到xml bean标签是id,对应到注解中是默认属性value。xml 文件内,是不允许配置多个相同id 的Bean。Ide 会提示,同时启动也会报错 SAXParseExce.

2021-04-23 18:15:57 565

原创 Insight h2database 更新、读写锁以及事务原理

文章基于 RegularTable 来分析和拆解更新操作。锁模型比较简单,方便了解更新的整个流程。并发读写的实现在 MVStore 存储引擎中分析。主要关注数据更新的实现、事务的提交和回滚。

2023-10-12 00:11:17 306

原创 Insight h2database auto increment 实现原理

H2 database 是java 编写的数据库,简单易懂,对于数据库实现原理是个很好参考。通过阅读数据库的实现,对于应用开发帮助很大,可以适当的扬长避短。对于SQL 规范,每种数据库都有对应的实现方式,dalect。

2023-10-12 00:08:08 227

原创 Insight H2 database 数据查询核心原理

本文目标是:了解查询的核心原理,对比 SQL 查询优化技巧在 h2database 中的落地实现。前提:为了贴近实际实际,本文 Code Insight 基于 BTree 存储引擎。

2023-10-12 00:05:35 233

原创 Insight h2database SQL like 查询

SQL like 模式匹配支持正则表达式和通配符两种。常用的通配符模式采用约定的字符串匹配规则确定每一行数据是否符合要求。正则模式匹配不支持优化,需要遍历目标表的每一行,性能损耗大。使用前缀匹配的通配符模式匹配,尝试增加索引列的区间范围条件,优化扫描区间。熟悉条件筛选的底层原理,趋利避害,达到数据查询的最佳性能。

2023-10-12 00:04:21 442

原创 Insight h2database 执行计划评估以及 Selectivity

生成执行计划是任何一个数据库不可缺少的过程。通过本文看执行计划生成原理。最优的执行计划就是寻找最小计算成本的过程。本文侧重 BTree 索引的成本计算的实现 以及 基础概念选择度的分析。

2023-10-12 00:02:34 147

原创 h2database BTree 设计实现与查询优化思考

查询优化实质上就是访问数据量的优化,磁盘IO 的优化。如果数据全部缓存到内存中,实际上就是计算量的优化,CPU 使用的优化。索引是有序的,实际上就是指块文件内的 offsets 是以数组形式体现的。特殊的是,在h2database 中,offsets数组元素也是有序的(例如:[4090, 4084, 4078, 4072, 4066, 4060, 4054, 4048, 4042]),应该是方便磁盘顺序读,防止磁盘碎片化。

2023-10-12 00:00:38 172

原创 Case - SpringBootTest 使用过程中遇到的冷门问题

Case - SpringBootTest 使用过程中遇到的冷门问题问题描述使用SpringBootTest 测试DAO 逻辑时,直接报错:java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider.<init>()从异常日志分析,是 tk.mybatis 的增强方法初始化问题。可是,启动工程调用该DAO 方法,是正常执行的,那么问题是出在哪呢?@Slf4j@RunWith(Sp

2022-02-14 14:43:21 454

原创 Tips-Java CAS 使用实例分析

并发编程在实际生产应用中,如果使用不当,会有意想不到的诡异问题。文章摘取一段Java AtomicLong 在统计功能上的使用,分析并发计数应该注意的点。并发计数代码/** * jetty 服务中,需要统计全局的连接数、请求数量之类的指标。提供了CounterStatistic 类用于统计这些数据。 * 其中,Statistic 就是借助AtomicLong 来实现total, maximum 数量的并发计数。 * * @from org.eclipse.jetty.util.statis.

2022-01-26 17:32:23 880

原创 清单-mybatis 参数封装和处理相关方法

清单目的:在使用到mybatis 冷门特性时候,可以快速参考查阅1. ParamNameResolver#getNamedParams方法入参封装,根据方法参数的个数,有不同的处理方法。参数个数处理方法备注0return null1 (非特殊类型 or @Param)return 原始入参对象需要特别注意,如果在动态SQL中使用,则不能为String、Integer等简单类型。>=2return HashMapname即参数的name,通过@Pa.

2021-11-17 17:39:16 416

原创 笔记 又一次慢SQL导致的线上服务不可用

记一次线上事故排查过程,事故的根本原因是慢SQL 查询。但线上问题的情况以及监控工具指标表现,并没有直接指向慢SQL 的问题,排查的过程值得记录和反思。线上事故系统使用人员反馈系统的操作卡顿或者不可用,数据列表查询有问题,后端请求响应非常慢。初步问题排查分析首先,第一反应应该是web-server出问题或者mysql-server 出问题。比如CPU打满或者内存打满,导致的服务不可用。通过监控工具查看应用服务器的指标、JVM指标以及数据库服务器CPU、磁盘的指标,都处于正常范围。然后,猜想是.

2021-10-19 21:39:24 324

原创 漫游 Redis SORTGET combination

缘起阅读Retwis-J(Redis版本的Twitter )设计文档过程中,对于Redis join 方案的实现比较感兴趣,因此记录下SORT/GET 的神奇用法。以备不时之需。Retwis-J 设计方案A common problem with any store is dealing efficiently with normalized data.A simple approach would be simply iterate through the list and load each

2021-07-30 17:41:24 74

原创 Insight springboot boot spring - EnableAutoConfiguration

springboot boot spring 的方案除了前一篇文章提到的,通过 SpringApplicationRunListener 暴露spring 框架启动的阶段,为spring 容器的初始化各种事件的扩展提供方案。另外一个boot spring 的方案就是 auto-configuration,通过个各种starter,提供各种EnableAutoConfiguration 接口的实现,将对应的特性注册到spring容器。springboot auto-configuration 原理首.

2021-07-23 17:33:55 104

原创 Insight springboot 默认配置文件加载实现

简介Spring Boot allows you to externalize your configuration so you can work with the same application code in different environments.You can use properties files, YAML files, environment variables and command-line arguments to externalize configuration.

2021-07-01 11:47:41 112

原创 okhttp read timed out 重试方案解疑

疑问使用okhttp 抓取数据场景中,偶发Read timed out异常。正常的做法是增加重试机制。在查看文档过程中,发现okhttp 默认会注册RetryAndFollowUpInterceptor ,字面上是支持重试的。那么,为什么timed out 异常不会重试,RetryAndFollowUpInterceptor 是干啥的?RetryAndFollowUpInterceptor分析能做什么This interceptor recovers from failures and fo

2021-06-11 16:16:59 4474 1

原创 Insight Mybatis JdbcTemplate 混合事务控制的实现

混合使用的背景最近项目中需要引入工作流引擎,实现业务和流程设计、流转的解耦。工作流流引擎选用的是snaker,轻量、易上手、可定制。访问数据库用的是JdbcTemplate 。项目中原有的持久层框架是Mybatis。这样就带来一个问题:怎样保证业务逻辑(Mybatis) 和工作流流引擎(JdbcTemplate )处于事务控制中,避免数据异常。比如:业务单据创建成功后,审批流程启动。如果单据创建成功,审批流程启动异常,事务就应该回滚,否则就成僵尸单据了。混合事务控制的配置<!-- 按照正

2020-11-24 21:49:36 1400

原创 Insight Spring3 @RequestMapping 自定义Aspect不生效问题

问题背景现有项目使用Spring3 框架,想要对应用所有的请求进行统一监控。一种方案是配置全局的 HandlerInterceptor,实现对请求的监控。一种方案是基于AOP,拦截@RequestMapping,实现对Controller 的方法进行监控。项目中采用的是这种方案,主要目的是收集方法粒度的性能、可用率的数据。问题描述编写完自定义的Aspect 监控类后,发现切面不生效。在spring-config.xml 中配置启用了@AspectJ 特性。<!--Enables th

2020-11-17 11:45:26 523

原创 Insight Spring Test事务自动回滚的实现

测试环境事务控制的意义避免测试用例的数据持久化的影响。需要事务控制回滚,还原场景,这样测试用例可以重复使用。(tests changes to the state may affect future tests)我们的业务逻辑需要事务控制,测试环境也要同样的模拟。测试环境-事务控制demo/** * 只需要测试类添加@Transactional, 保证所有的测试方式都有事务控制,并且执行完成后自动回滚。 * 参考 https://docs.spring.io/spring-framewor

2020-10-30 14:29:11 262

原创 Insight Mybatis 日志打印

日志打印引发的疑问在使用Mybatis 查询过程中,会有如下日志打印:DEBUG com.foo.dao.FooMapper.selectFooList - <== Total: 276我们知道,Mybatis 只有接口,并不存在日志中的这个类和对应的方法,那么Mybatis 执行日志是怎么打印的?Insight 分析和总结MappedStatement 初始化过程中,初始对应的logger,logger 的name即mappedStatementId,也就是接口名 + 方法名如果当

2020-09-18 18:08:04 205

原创 Insight Mybatis 内嵌resultMap工作原理

Insight Mybatis 内嵌resultMap工作原理疑问<!-- 如下的Mybatis 配置,collection 是如何工作的,对于SQL查询的数据结果集,在Mybatis 映射生成对象时,怎样组装的?--><resultMap id="viewResultMap" type="com.mybatis.model.CityView"> <result column="pid" jdbcType="INTEGER" property="pId"/>

2020-09-11 18:47:54 337

原创 snaker 使用指导和设计浅析

snaker 使用指导和设计浅析snaker 介绍Snaker是一个基于Java的开源工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持。流程引擎源码(oscgit):http://git.oschina.net/yuqs/snakerflow演示应用源码(oscgit):http://git.oschina.net/yuqs/snaker-web插件源码(oscgit):http://git.oschina.net/yuqs/snaker-

2020-09-10 21:22:37 2221

原创 尝试 QUARKUS - elasticsearch-quickstart

QUARKUS 框架, 用于构建云原生的应用。大体类似Spring 的Java框架,又不同常规的Java 框架,提供Native 、Reactive特性。除了提供一揽子的应用开发解决方案,更大的突破在于编译后轻量应用、高性能应用,RedHat出品。elasticsearch-quickstart 功能点:使用表单添加元素,并且在列表中更新。 浏览器和服务器之间的所有信息都被格式化为JSON。 元素存储在Elasticsearch中。工程搭建文档非常详细,可操作性强。直接跟着指导文档步骤,就可以完成.

2020-08-25 16:32:21 429

原创 Insight Spring-UCC组件实现机制和改进思考

UCC-统一配置中心,实现对应用系统需要实时调整的配置属性进行管理,比如各种开关、阈值、重试次数等。Spring-UCC 组件实现思路:基于ZooKeeper,实现配置的保存和分发。通过ZK的节点watch特性,实现管理端修改完配置数据后,每个应用的ZK client 都可以收到变动数据。然后通过约定的配置,将对应数据同步到 Config Bean 对应的属性。最终达到实时修改应用配置属性的目的。问题描述​ 功能开发中,使用UCC 配置了业务阈值用来是否监控报警。结果发现通过UCC管理端修改配置.

2020-08-20 15:16:36 197

原创 Insight Spring 循环依赖及解决方案

遇到的问题:项目中需要用到策略模式,把策略实现以集合的形式注入到Service 中。因为要强制校验策略的顺序,所以采用的是构造器注入,简单明了。结果Spring 启动失败,Is there an unresolvable circular reference?。分析首先,查看Spring启动异常的日志,throw BeanCurrentlyInCreationException/** * Exception thrown in case of 引用了当前正在创建中的bean. * Typica.

2020-08-11 19:59:28 220

原创 Insight Spring中的算法-占位符查找

实用算法学习、分析算法1/** * 查找占位符匹配的后缀索引。 * 因为Spring支持嵌套的占位符表示,所以配对的查找是这个方法核心要解决的 * 逻辑:遍历字符串buf,匹配遇到的占位符前缀和后缀,如果是配套的后缀,则返回索引。 * 因为有嵌套占位符的情况,需要一个临时的变量记录内嵌占位符的出现次数,通过成对匹配的计算(出现前缀加1,出现后缀减1),防止错误返回内嵌占位符的后缀索引。 * @param buf 配置字符串,比如:${foo:${defaultFoo}} * @param.

2020-07-27 21:27:22 295

原创 Insight Spring 注入排序的集合

背景项目中需要策略模式来解耦业务的场景,通过组合相同接口的Bean来实现。策略模式可以避开一长串的if-else,规范性、扩展性也好一些。使用spring 自动注入的好处是:随着业务的增加,只需要添加具体的实现类即可,无需关注策略的调度和实现。引出的问题是:if-else 旧的代码有default 的处理,如何确保托底策略的bean 是在集合的最后?// show code 通过spring 注入 FooHandler 处理器实现@Autowiredpublic FooService(List&

2020-05-09 18:19:06 471

原创 insight mybatis 动态sql解析-part2

insight mybatis 动态sql解析-part2part1 主要分析动态sql 参数相关的解析,对于xml-> sql 的过程没有详细分析,此文补上。part1 GO.增加part2源码分析的原因,工作中遇到的一个bug,mybatis 查询有个参数为0,导致拼接的sql异常。需要定位问题原因。问题<!--问题sql片段,入参source=0,导致拼接完的sql...

2020-04-07 21:14:32 150

原创 Insight Spring @Value 默认值配置解析实现

Insight Spring @Value 默认值配置解析实现背景最近接手的项目,配置项实在是多。主要使用Spring @Value 注入,很多是固化下来的配置,但也不能彻底写死,以备临时调整。现在的做法是,直接把固化的配置以默认值表达式形式配置到代码中。约定大于配置 配置表达式类似于@Value("${foo.skill.switch:false}")这个默认值是语法还是自定义实现,需...

2020-03-06 18:19:43 222

原创 Insight HandlerInterceptor 与@ExceptionHandler 的执行顺序

Insight HandlerInterceptor 与@ExceptionHandler 的执行顺序问题起源:项目中HandlerInterceptor preHandle方法会把登录的用户信息存储在ThreadLocal,方便请求逻辑中获取,afterCompletion方法中会remove。当发生异常时,想通过@ExceptionHandler打印当前的用户名,还能拿到用户信息吗?...

2019-12-10 21:25:58 1040

原创 Insight spring-boot web错误页跳转原理

引子​ 为什么404的错误页显示 Whitelabel-page ?​ 根据浏览器的网络请求分析,肯定是服务内部跳转处理的。​ 根据返回Whitelabel 错误页的信息,肯定是spring-boot 处理的错误页​ 内部实现是如何跳转的?spring-boot 如何替web容器托管了错误页处理功能?SpringBoot默认提供/Error映射,它以合理的方式处理所有错误,并在serv...

2019-08-16 20:32:29 228

原创 问题分析NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>

问题使用通用Mapper 执行insertList,报错如题,大概意思是:没有找到SpecialProvider默认构造方法,SpecialProvider实例化失败。原因分析SpecialProvider实例化时机晚了,应该在通用Mapper初始化加载过程中完成,也就是应该让通用Mapper 去完成SpecialProvider实例化。解决方法也就清楚了,应该在通用Mapper 配置上做修...

2019-08-08 11:32:04 1520

原创 @Mapper 不生效问题记录

项目中的Mapper使用,整体调整了maven依赖,发现注解@Mapper 的类找不到bean,一开始以为是通用Mapper 和@Mapper 不兼容,或者mybatis-spring 和tk.mybatis 加载顺序导致的不生效问题最终查看maven依赖,发现当前的module没有引用到mybatis,导致MybatisAutoConfiguration直接没有生效,也就没有自动完成myba...

2019-08-02 00:01:18 12521

原创 mybatis周边记录

使用mybatis,对于用到的组件需要明确其作用,这样才能灵活用好组件,熟悉原理,能够更好的评估组件的作用和排查问题。mybatis 周边按照依赖的顺序,列出如下,其中pagehelper 和mapper 没有依赖关系mybatis mybatis核心库mybatis-spring mybatis集成spring库mybatis-spring-boot-autoconfigur...

2019-08-01 23:30:49 98

原创 Insight ConfigurationProperties 实现

扩展配置的注解。如果要绑定和验证某些配置属性(例如,来自.properties文件),则将其添加到@Configuration 或@Bean 定义的类中。注意,与@value不同,不会计算Spel表达式,因为属性值是扩展的。@ConfigurationProperties 使用场景作为某个配置集合,以对象的形式提供配置,更加符合面向对象的思想。原有采用@Value配置属性的场景,如果是...

2019-07-26 20:42:47 140

原创 Insight AutoConfigureAfter 实现

springboot启动过程中,自动注册配置的初始化顺序可以通过@AutoConfigureBefore @AutoConfigureAfter 实现。比如Mybatis自动配置需要在DataSource 自动配置之后初始化,AutoConfigureAfter 是如何实现的@AutoConfigureAfter 使用场景@AutoConfigureAfter(DataSourceAuto...

2019-07-10 21:04:50 887

原创 Insight SpringBoot 自动配置DataSource

以自动配置DataSource实现为例,分析SpringBoot 的auto-config 机制自动配置DataSource-向导SpringBoot 自动配置DataSource,通过 DataSourceAutoConfiguration 实现(约定-XXXAutoConfiguration)。DataSourceAutoConfiguration 的作用包括:初始化 DataS...

2018-12-25 21:45:28 2901

原创 Append springmvc 表单字段Editor 自定义

之前说到常用的http 入参解析方式有基于request-body解析、基于表单解析。其中request-body参数解析,直接读取servletRequest.getInputStream(),按照json 或者xml 或者RSS格式解析即可,具体的解析细节根据使用的数据格式工具包实现。表单解析则不同,更多的依赖javax.servlet 定义的接口方法解析获取数据exmpale@I...

2018-11-30 21:05:27 191

原创 insight component-scan TypeFilter

通常spring扫描bean只需要配置包名即可,如果工程需要拆分应用分别部署,可以细化扫描的规则即可达到效果。 自带的filter包括:annotaion、assignable、aspectj、regex 或者根据特性的扫描需求实现TypeFilter接口接口自带的TypeFilter:annotation 类似于@Component、@Service,根据所加的注解确...

2018-02-08 17:03:56 394

原创 mybatis-spring 启用 mapUnderscoreToCamelCase xml 配置

启用mybatis mapUnderscoreToCamelCase 特性,可以更方便智能完成自定义对象的装配。 eg:column name = audit_state,可以自动mapping/set自定义对象的属性auditState。需要的:spring.version = 4.2.5.RELEASEmybatis.version = 3.4.0mybatis-s

2018-02-06 16:59:59 1994

原创 Insight Spring MVC 配置加载机制

DispatcherServlet配置两种方式:指定配置文件路径,set contextConfigLocation配置文件使用约定的路径和命名方式servlet> servlet-name>sampleservlet-name> servlet-class>org.s.w.s.DispatcherServletservlet-class> init-par

2018-02-01 21:24:52 217

jigloo_464

jigloo_464 swing form-Tools

2015-05-05

nlmeansC 编译 tips

nlmeansC 编译 lib libpng, 需要特定版本依赖

2015-05-03

网络工程师2004到2008

软考 网络工程师 我就是通过这个资料通过了工程师的考试,只要看真题就可以啦

2013-02-21

空空如也

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

TA关注的人

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