- 博客(192)
- 资源 (2)
- 收藏
- 关注
原创 业务系统使用redistemplate监听失效的key
在实际的业务场景中,我们需要监听redis中某些特定失效的key,基于此事件做一些特殊的逻辑处理,比如日志数据清理,MQ数据同步等等。一般可以按照如下思路实现。Copyright: Copyright (c) 2020 版权。
2024-05-24 10:25:22
215
原创 git 远程删除不需要的文件
git clone git@192.168.2.246:dev/ncrm.git23 find . -name “target”24 find . -name “target”|xargs rm -rf25 find . -name “target”26 git commit -am “delete target”27 pwd28 cd ncrm29 git commit -am “delete target”30 git push origin31 git push o
2021-10-08 16:54:11
380
原创 设计模式之业务实战培训
设计模式之业务实战培训本文章通过把日常常用的设计模式,就如何结合业务并在整个业务项目中落地,做了总结。有来源于真实的业务场景,有来源大厂案例,有来源于开源框架中的经典案例,只是为了做个笔记,不喜勿喷。一:代理模式模式定义给一个对象创建一个代理对象,通过代理对象可以使用该对象的功能。模式本质控制对象访问使用场景权限控制:用户在执行某个操作的时候,需要有相关的权限方法代理:程序在执行一个方法之前或之后增加一些逻辑处理功能封装:为了屏蔽某些功能的细节,让用户无感知(上传文件...
2021-08-04 10:44:47
819
原创 2021-03-30
远程调试使用特定JVM参数运行服务端代码要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}本地连接远程服务器debug端口打开Intellij IDEA,在顶部靠右的地方选择”Edit Configurations…”,进去之后点击+号,选择”Remote”,按照下图的只是填写红框内的内容.
2021-03-30 12:41:33
321
原创 常用设计模式概括
开发中会经常用到的设计模式:1 责任链模式:实现方式一般通过链表,把各个能处理的子类给串起来,看实力,来源于阿里的开源框架 sentitle:public interface ProcessorSlot { void process(Context context) throws Throwable; void nextProcess(Context context) throws Throwable;}抽象类public abstract class Abstrac
2021-02-25 16:25:09
252
原创 Spring事务不生效的场景分析
1、数据库引擎不支持事务2、没有被 Spring 管理如下面例子所示:// @Servicepublic class OrderServiceImpl implements OrderService {@Transactionalpublic void updateOrder(Order order) {// update order}}如果此时把 @Service 注解注释掉...
2020-04-16 17:29:43
3562
2
转载 海量数据面试题整合
海量数据面试题整理 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(...
2020-03-16 14:29:08
402
原创 Kylin
Kylin第1章 概述1.1 Kylin定义Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。1.2 Kylin架构1)REST ServerREST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平...
2020-01-07 17:51:00
839
原创 Elasticsearch
Elasticsearch第一章 基础概念1.1 基本概念nrt接近实时搜索,索引有1秒的延迟index存储数据的索引cluster代表一个集群,去中心化节点document索引的实体mapping文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤type每个文档都有与之对应的类型shard索引分片,分片的数量...
2020-01-07 17:30:26
422
原创 Redis-技术汇总
RedisRedis-优势总结1 性能高,读每秒是11w,写每秒是8w2 丰富的数据结构,支持string,list,set,hash,sortedset3 原子性操作,要不全部成功,要不全部失败4 发布与订阅,完成类似队列功能5 分布式锁的内在支持6 高可用,高性能,支持集群,支持哨兵,支持读写分离Redis-使用场景数据缓存(商品数据、新闻、热点数据)单点登录...
2020-01-07 12:29:47
687
原创 Thread技术体系
并发编程专题第一章 线程入门基本概念串行Ø 一个任务执行完再去执行另一个任务并行Ø 用齐头并进的方式去完成任务,其实只是时间片的切换,离开时间片,无意义并发Ø 一段时间内以交替的方式去完成任务进程Ø 资源分配的最小单位线程Ø CPU调度的最小单位,共享进程中的资源,必须依附于进程,不能独立存在任务Ø 线程要完成特定计算的任务并发编程意义Ø 充分利用CPU资源Ø 加...
2020-01-07 11:45:13
884
原创 maven 模块打包 找不到符号
今天,要对之前的一个老系统改造,在改造过程当中,遇到maven打包找不到符号,具体报的错误如下所示说实话,解决这个错误花费了很长时间,所以特此记录下来,留着做警惕。因为要改造的系统是一个一体化(没有分模块),如下图所示然后就开始进行模块的拆分,如下所示然后把配置文件相关的 ,都配置好,使用maven install 进行打包,第一个seds-model打包成功,等到第二...
2019-12-28 17:08:56
8046
原创 java 多线程批量插入数据 带返回值
之前写过一篇文章是关于多线程如何操作数据库,且控制事务的全局回滚,今天继续上一次进行扩展,上一次主要是针对单个线程操作没有返回值,而有时候我们希望进行多个线程批量操作数据库的同时,能返回每次成功插入到数据库的主键,这个时候就需要callable接口上场了,但是如果是希望线程执行结果是有返回的,还有很多地方需要注意的!特别是多个子线程和主线程协同操作,下面看一下具体的业务场景描述场景描述:现...
2019-12-17 19:11:28
3609
原创 springboot后端跨域
在项目当中,现在开发都是前后端分离,有时候会产生请求的跨域,这个时候一般的解决方案有两种,一种是基于nginx进行跨域配置,还有一种是后端通过实现filter来允许跨域,下面看一下通过filter实现的跨域代码:@Component@Order(Ordered.HIGHEST_PRECEDENCE)public class CorsFilter implements Filter {...
2019-12-05 18:29:34
451
原创 springmvc获取request,response,session对象
在springboot有时候也需要获取request,response,session等对象,为了方便特封装一个父类,直接调用即可。import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.context...
2019-11-06 17:45:26
710
原创 Spring源码扩展篇-BeanDefinitionRegistryPostProcessor
把一个bean注册到spring容器,一般有3个方法可以实现:我们开发的类,如果想注册到spring容器,让spring来完成实例化,常用方式如下:1. xml中通过bean节点来配置;2. 使用@Service、@Controller、@Conponent等注解;3.使用bean自定义注册工厂处理器可以参考下面它的执行核心原理和步骤boolean reiterate = ...
2019-11-01 21:12:14
403
原创 Spring源码扩展篇-BeanPostProcessor
在spring中关于对bean的扩张可以分为两种:1 基于所有bean:可以使用beanfactorypostproccessor进行修改,但是这种修改是全局的,也就是所有的bean都会被进行修改2 基于单个bean:只针对单个特定的bean的实例化修改,这种情况可以使用BeanPostProcessor,也是接下来要简单介绍和使用的从spring源码的来看,主...
2019-11-01 21:01:12
382
原创 Spring源码扩展篇-BeanFactoryPostProcessor
spring容器初始化时,从资源中读取到bean的相关定义后,保存在beanFactory的成员变量中,在实例化bean的操作就是依据这些bean的定义来做的,而在实例化之前,spring允许我们通过自定义扩展来改变bean的定义,定义一旦变了,后面的实例也就变了,而beanFactory后置处理器,即BeanFactoryPostProcessor就是用来改变bean定义的;这里总结一下sp...
2019-11-01 20:40:08
349
原创 Spring源码-内部好用的工具类
今天主要说一下,大家在研读或者使用spring的过程中,可能忽略一些了spring提供的内部工具类,而且这些内部工具对于我们开发人员使用起来是非常的爽,效率也高,所以今天就简单介绍几个.1AnnotationUtils:处理注解的工具类介绍Class提供的获取注解相关方法:1.1 <A extends Annotation>A getAnnotation(Cla...
2019-11-01 20:25:11
517
原创 java多线程之CountDownLatch
今天主要简单说明一下,如何使用countdownlatch来完成多线程之间的协助操作,看一下具体的业务背景:开发同事,需要对大量数据进行插入操作,因为数据量比较大,所以自然而然会想到用到多线程来提高效率,但是问题来了,就是因为一旦牵涉插入库操作,势必会牵涉到事务,本质需求就是,当多个线程进行插入操作,等所有线程执行完毕,一旦发现有一个或多个子线程在执行过车过程中出现了异常,就需要对事务进行全局...
2019-10-15 17:00:57
608
原创 ES-索引查询机制(三)
ES查询可以分为两大类,一类是Get,一类是Search,下面说一下Es内部是怎么实现的.一:Get检索通过ID检索特定的Doc> 查询的时候是先查询内存中的TransLog,如果找到就立即返回> 如果没找到再查询磁盘上的TransLog> 如果还没有则再去查询磁盘上的Segment(原始Lucene)二:Search检索通过query查询来匹配对应的D...
2019-09-24 19:29:11
1176
原创 ES-索引写入机制(二)
ES在建立索引的时候和Lucene是有一定区别的,因为它对Lucene进行了一定的优化,内部还牵涉到分布式索引的分发,下面就详细的分析一下写入原理思想以及流程和对应节点的处理一:写入原理以及特性1 写入索引的时候,首先先写入到lucene,然后再写入到translog,主要原因如下.Lucene的内存写入会有很复杂的逻辑,很容易失败.避免TransLog中有大量无效记录,减少rec...
2019-09-24 18:29:13
538
原创 ES-基础概念和原理(一)
ES其实就是基于lucene之上封装的一个分布式 索引框架,所以lucene拥有的特性,它都是有的,同时因为它使基于分布式的,所以对很多的功能进行了扩展,要想掌握ES,需要先熟悉一下Lucene,因为熟悉了Lucene之后,不论是学ES,还是Solr都是比较容易的.在这里插一句经常有人在选型的时候,不知道用ES还是Solr,建议可以参考下面的方案:如果系统是从头接入搜索引擎,那么就不要犹豫了,直接...
2019-09-24 16:49:59
752
转载 MySQL Binlog 解析工具 -Maxwell 详解
maxwell 简介Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、文件或其它平台的应用程序。它的常见应用场景有ETL、维护缓存、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、切库binlog回滚方案等。官网(http://m...
2019-09-19 15:38:24
1529
原创 Maven-jar的依赖打入
开发过程中,我们通常会把一个jar打包成一个组件给其他同事使用,但有时想需要把相关的依赖的jar都打入,这个时候可以使用下面的方法,没啥就是为了记录一下,方便以后使用 <plugins> <plugin> <groupId>org.apache.maven.plug...
2019-09-06 14:34:49
244
原创 Spring-同个接口注入多个实例
一般开发,都是一个接口对应一个实现类,但是有时候有些业务场景可能面临一个接口对应多个实现类,这个时候如果直接使用@Autowire注入有可能就会报错,下面就把常用解决方法阐述一下:比如下面这个服务接口,就有多个实现//生产消息服务接口public interface IProducerService {}//使用kafak发送消息@Service("kafkaProducerServ...
2019-09-04 20:54:41
2608
原创 Spring-使用事务面板
正常开发,我们一般会使用基于事务的注解来实现事务的机制,但是有的时候或者某种场景,完全通过注解是达不到效果的,比如 我们想完成以下的场景:1 根据条件,手动回滚或者提交事务2 获取事务是否已经彻底完成的状态3 设置事务具体的回滚point等,一句话想更好灵活的去控制事务的使用,这个时候推荐自定义事务的实现,一般通过如下两种方式3.1 基于TransactionTemplate使...
2019-08-29 00:28:36
167
原创 Springboot-整合动态多数据源
一般在实际开发中,可能需要牵涉到多个数据源,这个时候就需要在使用service方法的时候,动态注入要使用的数据源,下面就简单分析一下如何实现1 提取数据源的公用属性一般如下所示@Configuration@Slf4j@Datapublic class CommonDataSourceProperties { /** * 自动提交从池中返回的连接 */...
2019-08-28 23:58:07
412
原创 spring-事务之嵌套事物分析
一 非嵌套事务如果是单事务的话,一般在方法上加上@Transactional注解就可以使改方法进行生效,使用也是比较简单的,但是如果牵涉到一个方法里面调用了里一个服务里面的方法,且该方法上面也加上了@Transactional注解,这个时候,事物就可能不一定生效了,看下面的代码ServiceA { void methodA() { ...
2019-08-28 23:38:46
758
原创 Spring-事务之总体概述
一 事务特性原子性 (atomicity):强调事务的不可分割. 一致性 (consistency):事务的执行的前后数据的完整性保持一致. 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰 持久性(durability) :事务一旦结束,数据就持久到数据库如果不考虑隔离性引发安全性问题: 脏读 :一个事务读到了另一个事务的未提交的数据 不可重复读...
2019-08-28 23:14:22
143
1
原创 mysqlbinglog-解析组件maxwell
什么是Maxwell?这是一个读取MySQL binlogs并将行更新写入Kafka,Kinesis,RabbitMQ,Google Cloud Pub / Sub或Redis(Pub / Sub或LPUSH)作为JSON的应用程序。下载下载二进制发行版:https://github.com/zendesk/maxwell/releases/download/v1.17.1/maxwe...
2019-07-15 09:35:59
552
原创 apollo-使用注意事项
总结一下在使用apollo的有关注意事项1 application和namespace配置了同样的key,会存在覆盖关系2 关于客户端更新,Apollo默认定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property:apollo.refreshInterval来覆盖3 关于服务端更新,apollo是通过Http Long Polling,他的本质...
2019-05-09 18:09:48
1243
原创 apollo-应用系统接入实例讲解
应用系统如何接入Apollo,接入方式比较多,针对使用的开发模式不同而不同> 项目是纯java> 项目是springboot> 项目是springcloud,因为数据自生产系统都是基于微服务,所以我们就用这个进行详细介绍下面以校验系统为实例。进行说明1 增加配置文件如下图所示配置文件说明 application.yaml:配置系统所有用...
2019-05-09 18:09:03
3023
原创 Apollo-原理以及架构图分析
核心组件ConfigService 提供配置获取接口 提供配置推送接口 服务于Apollo客户端 AdminService 提供配置管理接口 提供配置修改发布接口 服务于管理界面Portal Client 为应用获取配置,支持实时更新 通过MetaServer获取ConfigService的服务列表 ...
2019-05-09 18:07:57
4425
原创 apollo-整体介绍以及核心概念
简介Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 功能介绍统一管理不同环境、不同集群的配置 Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。 ...
2019-05-09 18:06:45
1625
原创 分布式配置中心组件选型介绍
前提介绍 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址…… 并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制…… 并且随着采用分布式的开发模式,项目之间的相互引用随着服务的不断增多,相互之间的调用复杂度成指数升高,每次投产或者上线新的项目时苦不堪言,因此需要引用配置中心治理。 ...
2019-05-09 18:05:23
833
1
转载 从分布式到微服务到Service Mesh
自从几十年前第一次引入分布式系统这个概念以来,出现了很多原来根本想象不到的分布式系统使用案例,但同时也引入了各种各样的新问题。当这些系统还是比较少比较简单的时候,工程师可以通过减少远程交互的次数来解决复杂性问题。处理分布式问题最安全的方法是尽可能避免远程交互,虽然这可能意味着要在多个系统上存放重复的逻辑和数据。行业上的需求推动着我们前进的步伐,分布式系统的组成从几个大型的中央电脑发展成为数...
2018-08-27 15:05:45
375
原创 Lucene 学习总结之七-索引流程
1 IndexReader打开索引文件,读取并打开指向索引文件的流。1.1.1、找到最新的segment_N文件1.1.2、通过segment_N文件中保存的各个段的信息打开各个段1.1.3、得到的IndexReader对象如下 2 将查询语句转换为查询对象Query对象树2.1、创建Weight对象树,计算Term Weight2.2、重写Query对象树2.3、创建Weigh...
2018-08-19 17:59:45
281
转载 Lucene学习总结之六:Lucene打分公式的数学推导
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下。因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数。Lucene的打分公式非常复杂,如下:在推导之前,先逐个介绍每部分的意义:t:Term,这里的Term是指包含域信息的Term,也即title:hello和content:hello是不同的Term...
2018-08-19 16:55:38
269
storm企业级运维 调优 实战
2018-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人