后端
后端开发技术
王鹏鹏鹏
这个作者很懒,什么都没留下…
展开
-
SDK开发:RabbitMQ延时队列,分级重试队列流程图
原创 2020-12-28 16:04:43 · 405 阅读 · 0 评论 -
优雅的Builder模式代码
优雅的Builder模式建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。@Datapublic class SearchColumn { private List<Column> columns; public SearchColumn(List<Column>原创 2020-12-08 16:14:20 · 259 阅读 · 0 评论 -
elasticJob无法注入Bean引发的思考:获取bean的6种方法(ApplicationContext)
遇到的问题:使用elasticJob定时任务时无法注入bean解决方法:@Slf4jpublic class JavaSimpleJob implements SimpleJob, ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext cont原创 2020-12-03 11:00:49 · 859 阅读 · 0 评论 -
maven 本地install 项目A(SDK)后,其他项目B 引入项目A(SDK)没问题,但是将项目项目A(SDK)depoly到私服之后,其他项目B 引入项目A(SDK)后报错,拉取不到Jar包
在项目B执行 mvn clean install -DskipTests=true -X项目A(SDK)存在父依赖,即使本地install成功没问题,但是私服可能并没有父依赖,所以会导致报错需要先将父项目发布原创 2020-11-17 12:34:23 · 231 阅读 · 0 评论 -
DDD领域模型浅显易懂的示例实战
可能是我大脑不是很聪明的缘故,网上讲的DDD领域模型看的不太明白。下面的代码与总结应该很生动易懂。钱包业务示例1,基于贫血模型的传统开发模式这是一个典型的 Web 后端项目的三层结构。实体类Controller层Service层2,基于充血模型的 DDD 开发模式领域模型层(可以大致理解为实体类加上封装的指令)Service层(将入参转为领域模型层,执行)总结基于充血模型的 DDD 开发模式跟基于贫血模型的传统开发模式相比,主要区别在 Service层。原创 2020-11-16 16:43:33 · 3857 阅读 · 0 评论 -
分布式任务调度Elastic-Job保证RabbitMQ 消息投递可靠性
一种可靠性方案数据库设计-- 表 broker_message_log 消息记录结构DROP TABLE IF EXISTS `broker_message_log`;CREATE TABLE `broker_message_log` ( `message_id` varchar(128) NOT NULL, -- 消息唯一ID `message` varchar(4000) DEFAULT NULL, -- 消息内容 `try_count` int(4) DEFAULT '0', -原创 2020-11-11 14:43:45 · 428 阅读 · 0 评论 -
词频统计hadoop与spark实现
词频统计待处理文件:hello world hello java输出:(hello,2)(world,1)(java,1)方法一:Hadoop MrMr过程代码public class WordCountRunner { public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedExceptio原创 2020-09-09 10:21:17 · 561 阅读 · 0 评论 -
RocketMQ事务消息思路
通过消息队列 RocketMQ 事务消息,能达到分布式事务的最终一致。模拟A账户转账给B账户操作,这个分布式事务有两个子事务子事务A:AReduceTransaction()代表A账户扣款子事务B:BIncreaseTransaction() 代表B账户收款业务服务器实例一一:向消息队列服务器发送半消息(半消息无法被消费),如果收到消息队列服务器的ACK代表发送成功,则执行本地事务,(AReduceTransaction),若本地事务执行成功,会通知消息队列服务器将半消息转为正常消息(可以原创 2020-09-04 13:00:53 · 400 阅读 · 0 评论 -
JVM线上问题排查内存溢出 CPU过高 死锁
jps查看进程ID:20832jinfo查看运行时参数查看最大堆大小$ jinfo -flag MaxHeapSize 20832-XX:MaxHeapSize=8575254528查看用的啥垃圾回收器$ jinfo -flag UseConcMarkSweepGC 20832-XX:-UseConcMarkSweepGC$ jinfo -flag UseG1GC 20832-XX:-UseG1GC$ jinfo -flag UseParallelGC 20832-XX:原创 2020-08-21 10:52:30 · 482 阅读 · 0 评论 -
SpringCloud二次开发-消息队列(第一篇)
序我们知道不同中间件之间存在很多差异,如RocketMQ支持定时重试,每次重试间隔逐渐增加。Kafka,RabbitMq不支持重试。我们要做一个统一的Spring Cloud Starter实现效果:(1)让Kafka,RabbitMq支持消息重试。(2)使用不同的消息中间件时,我们不需要在maven引入不同的Jar包。开发好后的使用效果对于不同的中间件,我们仅需在application.yaml中改一下配置信息// 如果想使用 rocketMqpaas: mq: rocket原创 2020-07-03 21:27:39 · 530 阅读 · 0 评论 -
利用Java+机器学习开发一套推荐系统 ALS,LR算法原理与实战
本篇文章会通过 推荐系统介绍 算法原理讲解 推荐系统架构 Java代码实战四部分,让您对推荐系统有一定了解。1 推荐系统介绍一个基本的推荐系统需要包含召回,排序,根据业务规则重排三个部分。召回召回指在海量的待推荐数据中过滤出较为符合对应用户及场景的推荐数据候选集。在线召回:实时运行召回算法,从海量数据中拿出对应的候选数据集离线召回:离线运行召回算法,从海量数据中拿出对应的候选数据集并预存入某种存储中,供在线系统直接拿取对应场景的召回数据由于召回是从海量数据中过滤出一部分数原创 2020-05-30 02:25:40 · 1361 阅读 · 1 评论 -
通过内存布局带你掌握锁升级过程
markword工具:JOL = Java Object Layout<dependencies> <!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core --> <dependency> <groupId>org.o...原创 2020-04-21 22:57:06 · 375 阅读 · 0 评论 -
彻底掌握Java CAS自旋锁原理 汇编底层源码
如果多个处理器同时对共享变量进行读改写(i++就是经典的读改写操作)操作,那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致,举个例子:如果i=0,我们进行两次i++操作,我们期望的结果是2,但是有可能结果是1。如下图原因是有可能多个处理器同时从各自的缓存中读取变量i,分别进行加一操作,然后分别写入系统内存当中。那么想要保证读改写共享变...原创 2020-04-16 14:06:41 · 1303 阅读 · 0 评论 -
开发自己的Spring Boot Starter(元注解,AOP,Spring Boot Starter实战)
前言我们都知道可以使用SpringBoot快速的开发基于Spring框架的项目。由于围绕SpringBoot存在很多开箱即用的Starter依赖,使得我们在开发业务代码时能够非常方便的、不需要过多关注框架的配置,而只需要关注业务即可。例如我想要在SpringBoot项目中集成web,那么我只需如下两步:第一步 要加入spring-boot-starter-web的依赖并简单配置一下信息&l...原创 2020-03-25 01:00:47 · 326 阅读 · 0 评论