自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大张

宠辱不惊 看庭前花开花落 去留无意 看天上云卷云舒

  • 博客(106)
  • 资源 (2)
  • 收藏
  • 关注

原创 银行窗口问题DDD建模

银行门店里有N个窗口,每个窗口都有一名业务员。当有客户到来时,若有空闲窗口,则直接为客户提供服务;若无空闲窗口,则客户进入大厅席位等待叫号。这是一道笔试题,主要考察面试者的,在短时间内抽象主要业务模型,提炼出模型的属性和方法。然后利用的模型思维串联业务流程,还有模型的设计,使其能完成桥梁枢纽的功能,这些都是考察的对象。

2024-04-29 15:36:00 368

原创 理发师问题DDD建模

假设有一个理发店只有一个理发师,一张理发时坐的椅子,若干张普通椅子顾客供等候时坐。没有顾客时,理发师睡觉。顾客一到,叫醒理发师。如果理发师没有睡觉,而在为别人理发,他就会坐下来等候。如果所有的椅子都坐满了人,最后来的顾客就会离开。这是一道笔试题,主要考察面试者的,在短时间内抽象主要业务模型,提炼出模型的属性和方法。然后利用的模型思维串联业务流程,还有模型的设计,使其能完成桥梁枢纽的功能,这些都是考察的对象。

2024-04-23 22:59:47 620

原创 DDD之DP对象的应用

在领域驱动设计(Domain-Driven Design,DDD)中,“Domain Primitive”(领域原语)是指领域模型中的,它们代表了业务领域中的最基本的、不可分割的数据元素。Domain Primitive通常是不可变的,它们的行为受到业务规则的约束,并且通常不包含任何业务逻辑。Domain Primitive可以是简单的数据类型,如字符串、整数、布尔值等,也可以是一些复杂的值对象,如金额、日期、时间范围等。它们,例如订单号、产品价格、用户姓名等。

2024-04-14 20:46:00 1159

原创 统一消息分发中心设计

这个方案是一个简易可行的方案,符合快速上手并实施。在人力、时间、成本不充足的情况下,基本能满足我们的需求。如果想让它作为平台级的技术组件推广,还有一些细节的点可以优化。核心的业务是否也可以分离出来,通过平台配置的方式自动分发数据到消息中心。消息中心每次都会从数据库拉去路由表信息,这样性能不好,可以放在分布式缓存或本地内存。这时需要注意缓存数据的一致性问题。分发中心是否存在性能瓶颈、集群化等。连带业务是否也可以通过配置,自动拉取MQ的消息。

2023-11-10 22:26:05 1886

原创 图解Kafka高性能之谜(五)

简单架构设计:详细架构设计:

2023-10-28 21:54:44 815

原创 项目架构落地之需求分析(一)

尽可能全面准确、全面、深入理解业务(5W2H)识别重难点业务理清业务流程和功能点识别非功能需求和质量约束

2023-10-23 20:33:34 486

原创 构建离线数仓:实现数据驱动决策的关键步骤和挑战

在当今数据驱动的时代,构建离线数仓是组织实现数据驱动决策的关键一步。离线数仓可以集成多个数据源,并提供结构化和清洗后的数据,用于业务分析、报表生成和机器学习等应用。本文将介绍构建离线数仓的关键步骤和面临的挑战。

2023-06-22 18:10:37 872

原创 构建可扩展的业务架构:设计和实施指南

业务架构是指组织在实现其业务目标和使命时所采用的结构和流程。它涉及到业务战略、业务过程、组织结构和信息技术等方面的考虑。一个良好的业务架构能够将业务需求与技术能力相结合,实现业务的可持续增长和创新。

2023-06-22 18:04:24 470

原创 使用Python编写机器学习算法

本文将介绍如何使用Python编写机器学习算法,包括数据预处理、模型选择、训练和评估等方面的内容。

2023-06-22 17:57:38 1515

原创 使用Pandas进行数据处理和分析的入门指南

本文将介绍如何使用Python的Pandas库进行数据处理和分析,包括数据导入、数据清洗、数据转换和简单分析等方面的内容。

2023-06-22 17:54:12 1126

原创 React框架构建用户界面

本文将介绍如何使用React框架来构建交互式的用户界面,包括项目的搭建、组件设计、状态管理和事件处理等方面的内容。

2023-06-22 14:30:17 1588

原创 Java中使用Spring Boot创建RESTful API

RESTful API通常涉及与数据交互。在Spring Boot中,我们可以使用POJO(Plain Old Java Object)来定义数据模型。// 省略构造函数、Getter和Setter等...在上述示例中,我们定义了一个名为User的类,包含了id、name和email等属性。

2023-06-22 14:28:49 1477

原创 《产品思维》 要点

一切以用户价值为依归”的价值观,落地下来就是从用户中来,到用户中去。

2023-06-22 14:25:39 270

原创 调查问卷Type Form的集成

Typeform是一家制作线上调查问卷的公司。Muñoz 和 David Okuniev两人于2012年创作出一个更加动态、更具交互性的用户调查工具,每次只提一个问题,并且根据用户的回答为其呈现下一个问题,像和朋友间的对话一样,让用户在不知不觉中就完成了问卷。Typeform将帮你获得有关和经验的反馈,创建和分享反馈、建立联系人表单,进行客户开发调查,结果将以交互式表格的形式快速发送到你的智能手机、平板电脑和台式电脑上。

2023-06-22 12:23:14 2163

原创 《代码的整洁之道》

代码的整洁之道

2023-05-03 18:07:16 1099

原创 Kafka源码分析之Producer数据发送流程(四)

书接上回的producer发送流程,在准备工作完成后,kafka的producer借助和两大组件完成了数据的发送。其底层封装了java的,对于NIO组件不太熟悉的同学可以自行查询相关文档。下面我整理了kafka发送数据的主要流程,下面是流程图:下面根据上面的流程图一步一步剖析kafka的源码。

2023-04-11 15:00:19 1110

原创 跨系统的分布式事务解决方案

项目中需要到图片上传的功能,对于非结构化的数据存储在S3中。于是设计了一个图片上传的方案。这个方案要求必须在用户上传的图片后,s3已经能获取到图片后才更新图片新的地址。

2023-04-08 18:03:45 579

原创 Kafka源码分析之Producer的高性能数据结构(三)

RecordAccumulator中存储了每个分区对应的消息队列,在发送消息时会经常读取队列将消息加入到队列中。结合前面的博客可以知道kafka的流程是,第一次创建每个分区的队列到batches中,然后取出队列的批次将消息添加到批次中。代码中kafka在读取数据时没有加锁,各个线程不需要相互竞争效率是最高的。那么它是怎么保证数据的安全的呢?kafka针对当前场景自己设计了一个高性能数据结构CopyOnWriteMap,所以这里不会对队列进行更新操作,这里就需要一个适合。的方式达到高性能读取的目的。

2023-03-26 17:55:47 289

原创 Kafka源码分析之Producer(一)

根据kafka的3.1.0的源码example模块进行分析,如下图所示,一般。总的大概是上面六个步骤,下面将结合源码对每个步骤进行分析。

2023-03-26 17:24:07 1799

原创 python在excel中插入二维码

需要在excel中的barcode列中插入二维码图片,方便运营人员打印和数据录入。

2023-03-06 12:32:47 887

原创 Kafka源码分析之Producer粘性分区算法(二)

为了提升kafka发送消息的速率,在对消息顺序没有特殊的要求情况下,应该尽量避免设置消息的key,这样可以提交发送消息的吞吐量。

2023-03-05 15:37:19 788

原创 mongoTemplate非string类型模糊查询

mongoTemplate对非string类型的模糊查询

2023-03-04 17:40:52 1071

原创 基于lambda的mongodb查询插件

基于lambda表达式,面向对象的mongodb查询插件

2023-02-18 16:06:53 1544

原创 企业级架构的八大思维模型

通过上述步骤可以在一个不熟悉的领域中完成合适的业务架构设计。为我们的业务业务高度抽象成业务模型,抓住事物的本质。抓住我们业务的主体,动作,被执行响应对象等。如我们在有限的时间内保证我们的功能的。怎么来确定我们的架构设计是否合适呢?使我们的业务功能能闭环。我们需要在有限时间内。

2022-10-23 20:57:12 1346

原创 SpringSecurity自定义Filter的ignoring()失效问题源码分析

忽略SpringBoot启动流程中服务器是如何将Spring的Filter加载进来和过滤的流程。下图简要概括了Secutiry的Filter和SpringFilter的Bean的关系源码太多,流程太复杂繁琐,过了一些主要的代码和主干。遇到了问题发现没有人在源码上分析原因,花了一天时间简要的概括了一下。httpshttpshttpshttpshttpshttpshttpshttpshttpshttps。.............................................

2022-07-22 17:02:57 2235

原创 项目实战—IDEA中分析Git Merge 和 Rebase的区别

1.merge和rebase都是合并代码,在处理代码冲突和最终合并新旧代码的目的上没有太大区别;2.merge会产出一个新的merge的commit,分支会比较复杂,而rebase之后的分支就一条比较简明;3.rebase在push代码的时候更加清晰,没有多余额mergecommit,自己修改的代码也会放在前面;httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。..................

2022-07-18 12:52:17 3363

原创 JPA定义默认值设置失效问题

对于第一个问题,猜想的主要原因是定义新的字段时,jpa框架会将默认定义值带上加到表中。如果后面加上默认定义值的定义时,jpa框架并不会智能地更新colum的定义。总结下就是创建新字段时默认值才会生效。 对于第二个问题,通过jpa日志可以看出,插入的时候默认值是空值覆盖了我们数据库默认的值,导致看到默认值为null,程序NPE异常。 在插入新值的时候,手动设置默认值。 配置插入值时不能修改该字段; 直接属性字段设置默认值;............

2022-06-30 12:41:10 2021

原创 自定义JPA函数,在specification中实现位运算

项目中使用一个 32 位的int 类型值error表示各种错误,每一个二进制位的0表示出现错误,1表示未出现错误哦。定义下面的错误协议:如果出现多个错误就将各个错误 |起来,例如 蓝牙错误 + 电量低 + gps信号弱,那么我们数据库存储的值就是:转换为十进制存储到error数据就是 2 + 4 + 8 = 14;在条件搜索蓝牙错误 + 电量低的时候,将各个错误|起来得到:,然后0000 0000 0000 0000 0000 0000 0000 0110&14 > 0 那么就是满足搜索条件的。项目中使

2022-06-23 22:45:59 1155

原创 GitLab 部署k8s deployment 502的问题

如下图我们通过Git Lab的CI/CD完成最新的代码部署,但是当我们完成最后阶段的deploy的时候。访问服务,此时服务会无法访问。这是会出现502的错误:为啥需要解决这个问题呢?既然是发布的时候出错就可能是新旧服务切换的时候出了问题。要么是旧服务关闭早了,或者是新服务还没有就绪。由于我们使用的是k8s对容器进行管理,所以查询了k8s关于在部署deployment时的一些参数配置。1. 调节发布策略,防止旧的deployment在新的deployment启动前销毁: 通过 strategy 可以配置

2022-06-20 16:22:08 1527

原创 数据库关于B树、B+树、LSM树的简介

在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有多于2个子节点。与自平衡二叉查找树不同,B树为系统大块数据的读写操作做了优化。B树减少定位记录时所经历的中间过程,从而加快存取速度。B树这种数据结构可以用来描述外部存储。这种数据结构常被应用在数据库和文件系统的实现上。

2022-06-08 18:40:04 1963

原创 Redis Cluster集群之hash算法和一致性hash算法对比

目录hash算法一致性hash算法为什么redis不一致性hash算法hash算法Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 ......

2022-05-30 16:23:39 1032

原创 贪心算法的实际应用

1.问题:给定初始资金,有N个项目,每个项目有成本和纯利润,在其中选取k个项目,求获得的最大利润。例如:有项目(花费,利润):[1,2],[1, 4],[5, 4],[5,6],初始资金是1,可做最大项目是2个。那么选取符合成本的项目[1,2], [1, 4],选取利润大的项目[1,4],得到总资金5。然后在[5, 4],[5,6]选取[5,6]得到最后的总资金11。解:根据花费建立比较器,将项目存放到小根堆中,根据利润建立比较器,建立大根堆。 循环k次,将花费小于等于总资金的项目放入大根

2022-05-22 18:40:16 914

原创 AWS ECR 配置生命周期

什么是ECRAmazon Elastic Container Registry (Amazon ECR) 是 AWS 托管容器镜像注册表服务,它安全、可扩展且可靠。Amazon ECR 支持私有存储库,其具有使用 AWS IAM 的基于资源的权限。这样,指定用户或 Amazon EC2 实例可以访问您的容器存储库和镜像。您可以使用首选 CLI 推送、提取和管理 Docker 映像、Open Container Itistry (OCI) 映像和 OCI 兼容构件。摘抄自aws官方文档,简述就是一个镜

2022-05-14 16:35:48 883

原创 计算机硬件基础

CPU什么是cpucpu全称是Central Processing Unit, 翻译为中央处理单元,可以说是计算机最为核心的部件。它就像是人类的大脑,起到获取、处理指令等核心逻辑。cup由几十亿个晶体管组成,这些晶体管的多少决定着算力的大小。CPU的工作cpu的核心是从程序或者应用程序获取指令并执行计算。主要由三个阶段:提取指令、解码、执行。cpu从RAM(Random Access Memory -主存)中提取指令,然后解码指令的实际内从,由cpu的相关部分负责执行该指令。C

2022-05-12 16:26:30 1134 1

原创 GitLab CI/CD 打包变更微服务模块

在使用gitlab ci/cd部署我们服务时,是怎么知道对应模块文件的变更的呢?下面将从git命令、shell 命令、mvn 命令等三个主要的命令讲解其具体实现。git命令获取变更记录通过下面命令就能获取到变更文件:git diff --name-status git提交本次版本号 git提交上次版本号gitlab版本号获取可以通过下面两个变量获取:$CI_COMMIT_SHA$CI_COMMIT_BEFORE_SHA通过上面两个信息就能提取到变更文件的目录信息:.

2022-05-11 15:07:44 1466

原创 常见算法之求逆序对(5)

给定一个数组,如果左边的数比右边的数大就是一对逆序对,求出数组的逆序对。利用归并的思想,将数组一直拆分到左右值相等的时候,然后比较左右两边数组的值,将大的值拷贝到临时数组,然后复制回原数组。为什么复制大的到临时数组?因为这样保持了右边比左边的值都大,r - l + 1就能知道多少个比它本身小的数。如下图,展示了在数组【3,4,1】中采用递归求逆序对的过程。蓝色是原数组,红色的归过程中的临时数组,绿色是输出的逆序对。 public static int revers...

2022-04-02 15:03:14 474

原创 常见算法之求最小和(4)

给定一个数组,求出数组每个位置的数的左边比它小的值之和。比如给定数组【1,3,4,2,5】;1的左边小于1的没有;3左边小于3的为1;4左边小于4的为1、3;2左边小于2的为1;5左边小于5的为1、3、4、2;最后求和得到值为16。下面直接上最优解:求左侧比它小的数的和,等同于求右侧比它大的数的个数 * 其值。1的右侧比它大的有4个 * 1 +3的右侧比它大的有2个 * 3 +4的右侧比它大的有1个 * 4 +2的右侧比它大的有1个 * 2 +5.

2022-04-01 18:38:34 774

原创 常见算法之排序算法总结(3)

选择排序每次选取出最小值或者最大值放在数组前面或者后面外面循环:表示有总数N个数,要操作N次。里面循环:是data[i]和i后面的每个数比较,小于data[i]交换位置,然后data[i]和剩下的数比较,这样下来data[i]就是i到length上的最小值。 public static void choseSort(int[] data) { int length = data.length; for (int i = 0; i < leng

2022-03-31 17:31:03 672

原创 常见算法之求数组中出现奇偶数次的数(2)

题目一:求出一个数组中只有一个数出现了奇数次。本题需要用到计算机的位运算的异或运算,即二进制位相同取0,不同取1。再结合异或的结合律、交换定律。a != b; a^b !=0; a^a=0a^b^c = a^c^b;(a^b)^c = a^(b^c)相同数异或得到0,不同数异或不为0。出现了偶数次的数异或在一起最后得0,再异或剩下的出现奇数次的数,最后就只剩下一个数,就是出现奇数次的数。代码很简单如下: private static int getOddNu...

2022-03-24 14:29:22 973

原创 常见算法之水王数解析(1)

什么是“水王数”?在一些贴吧论坛,有的人用一个id一直刷一个帖子,每一层楼都是他的帖子,称之为水贴或者注水。而当其数量达到了一半以上,我们称之为”水王数“。判断并取出水王数假设有一个数组,例如【1,2,7,4,3,7,7,7】怎么判断是否存在水王数并且求出其中的水王数呢?首先想到的是采用hashMap实现的代码,key:记录不同的数字,value: 数字出现的次数。 public static int getMoreThanHalfNumber(int[] data) {

2022-03-23 15:42:46 427

第二代微服务电商项目实战笔记

项目采用SpringBoot2.x+SpringCloud2.x构建微服务电商项目

2021-04-07

学生学籍管理

学生学籍管理的代码,用数据库和窗体设计而成。

2015-05-13

空空如也

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

TA关注的人

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