数据分析
DW(Data Warehouse) 数据仓库存储是一个面向主题的,反应历史变化数据,用于支撑管理决策。 ODS(Operational Data Store) 操作型数据存储,存储的是当前的数据情况,给使用者提供当前的状态,提供即时性的、操作型的、集成的全体信息的需求。 ODS 是数据库到数据仓库的一种过渡形式,与数据仓库在物理结构上不同,能提供高性能的响应时间, ODS 设计采用混合设计方式。 ODS 中的数据是“实时值”,而数据仓库中的数据却是历史值。一般 ODS 中储存的数据不超过一个月,而数据仓库为10年或更多。 Data Mart 为特定的应用或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是在实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。 DSS(Decision-Support System) 以启发的方式对大量的数据单元进行的分析,通常不涉及数据更新。 参考:https://w...
UML 细节
用例图 泛化(generalization):泛化关系是一种继承关系,子用例将继承基用例的所有行为,关系和通信关系,也就是说在任何使用基用例的地方都可以用子用例来代替。泛化关系在用例图中使用空心的箭头表示,箭头方向从子用例指向基用例。 扩展(extend): extend关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。 extend关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从子用例指向基用例。 UML Use Case Extend。 包含(include): include为包含关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<>),箭头从基用例指向子用例。 注意,...
分治策略
步骤 分解(divide):将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小。 解决(conquer):递归地杰出子问题。如果子问题的规模足够小,则停止递归,直接求解。 合并(Combine):将子问题的解组合成原问题的解。 递归式 递归式(recurrence)可以帮我们刻画整个算法的运行时间。 一个常见刻画递归式的方法是画递归树。通过递归树的枝叶来试图把整个算法的步骤勾勒出来。
日志问题
Log4j 的架构设计 http://www.cnblogs.com/Fskjb/archive/2011/01/29/1947592.html https://blog.csdn.net/qq_35246620/article/details/53790350 https://blog.csdn.net/liuxiao723846/article/details/52126936 依赖 123456789101112<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.13.3</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupI...
疑难汉字
字 读音 含义 刳 kū 从中间破开;破开后再挖空。 「刳竹」 剡 yǎn 削;削尖 [sharpen]
scoop 安装
首先要有一个 Powershell 3.0 与 .Net 4.5 以上的环境。 在 PowerShell 中输入: 1iex (new-object net.webclient).downloadstring('https://get.scoop.sh') 如果没有网络问题,则可以直接安装成功(可能需要修改一些与 admin 有关的 policy)。如果安装不成功,则删除C:\Users\LC\scoop再试一次。 12# 安装 curlscoop install curl
散列算法
散列算法概述 散列函数(Hash Function)是一种将任意长度的输入数据映射为固定长度输出的函数,该输出称为散列值或哈希值。散列算法在计算机科学中具有广泛应用,尤其在密码学和数据完整性校验领域。 核心性质 一个优秀的散列函数应具备以下核心性质: 确定性:相同的输入始终产生相同的输出。这是散列函数的基本要求,确保了散列值的一致性和可验证性。 单向性:从散列值无法反向推导出原始输入。这一性质使散列函数适用于密码存储等场景,即使数据库泄露,攻击者也无法直接获取明文密码。 雪崩效应:输入数据的微小变化会导致输出散列值的剧烈变化。修改输入的任意一位,输出的散列值应有约50%的位发生变化。这一特性保证了散列值对输入的高度敏感性。 抗碰撞性:难以找到两个不同的输入产生相同的散列值。抗碰撞性分为弱抗碰撞性(给定输入,难以找到另一个输入产生相同散列值)和强抗碰撞性(难以找到任意两个不同输入产生相同散列值)。 常见散列算法家族 MD5 MD5(Message Digest Algorithm 5)输出128位散列值,曾广泛应用于文件校验和密码存储。然而,MD5已被证明存在严...
checklist
写代码 checklist 注意位置 注意顺序 注意初始化 注意返回值 注意注释 注意防御性编程 注意数据库性能 上线 checklist 代码变更 check 代码 配置变更 check 配置 系统变更注意上线顺序 依赖中间件变更注意配置中间件 配置中心配了吗 交互所有细节都实现了吗? 配监控和埋点 数据库变更了吗? 安全检查
JDWP 与远程调试
JDWP(Java Debug Wire Protocol),它提供了调试器和目标 JVM (target vm)之间的调试协议。 在 target vm 启动时,增加这个 JAVA_OPTS: 1JAVA_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=26310" 在服务器端,增加 remote debuging 的时候使用如下配置: 12345678# Java 9 以上-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000# Java 5-8-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000# Java 1.4.x -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,addre...
卡表和 RSet
卡表和 RSet 问题定义:为什么需要跨区域引用记录 JVM 垃圾收集器的核心工作之一是确定 live set——哪些对象仍然存活、不可回收。确定 live set 的标准做法是从 GC Roots(栈帧中的局部变量、静态字段等)出发,沿引用链遍历所有可达对象。 问题在于:当堆被划分为多个区域(代、Region)并且只回收其中一部分时,如何高效地找到从"不回收区域"指向"回收区域"的引用? 以 Young GC 为例:只回收新生代,但老年代中可能持有指向新生代对象的引用。如果不处理这些跨代引用,就会错误地回收仍被老年代引用的新生代对象。最朴素的做法是扫描整个老年代来找出这些引用——但老年代通常远大于新生代,这样做的代价过高,违背了分代收集"只回收一部分堆"的初衷。 卡表(Card Table)和 RSet(Remembered Set)正是为解决这个问题而设计的辅助数据结构。二者的关系并非互相替代,而是层次不同、协作互补:卡表是底层的脏标记机制,RSet 是建立在卡表之上的更高层索引结构。 核心概念速览 在深入细节之前,...





