- 博客(1742)
- 资源 (1)
- 收藏
- 关注
原创 SQL经典实例——处理数字
然而,将列名作为函数 COUNT 的参数时,计算的是该列值非 NULL 值的个数。需要指出的是,如果出现分不出胜负的情况,即多个薪水值出现的次数都是最多的,那么使用 KEEP 的解决方案将只返回最高的薪水。我们选择的是简单的三点移动平均,但根据要分析的数据的特征,也可以使用不同的公式和不同的数据点数,以充分发挥这种方法的作用。在本例中,要计算 10 号部门的薪水占 EMP 表中薪水总额的百分比,只需先找出 10 号部门的薪水总额,将其除以整张表的薪水总额,再乘以 100 得到百分比值。
2026-06-15 13:24:50
32
原创 SQL经典实例——处理字符串
最后一个操作是用长度差值除以查找的字符串的长度,仅当要查找的字符串的长度大于 1 时,这个除法运算才是必不可少的。当前,大多数 DBMS 提供了专门为串接字符串而设计的函数,比如 MySQL 的函数 GROUP_CONCAT(最早的函数之一)或 SQL Server 的函数 STRING_ADD(SQLServer 2017 中新增的)。与本章的其他实例一样,诀窍是使用函数TRANSLATE 将多种字符转换为特定的字符,这样无须搜索多个数字或字符,而只需搜索表示所有数字或字符的字符。
2026-06-15 02:44:26
172
原创 SQL经典实例——元数据查询
下面显示的输出是在我的笔记本计算机的 Oracle 实例中执行这些查询时得到的,你执行这些查询时,返回的结果集肯定不一样。暴露有关自己的信息时,数据库使用的正是你为自己的应用程序创建的机制——表和视图,这有点儿循环的“味道”。查询 INFORMATION_SCHEMA.KEY_COLUMN_USAGE、INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS、INFORMATION_SCHEMA.COLUMNS 和PG_CATALOG.PG_INDEXES。
2026-06-15 00:15:48
191
原创 SQL经典实例——插入、更新和删除
问题:你想创建一张新表,该表包含的列与一张既有表相同。例如,你想创建 DEPT 表的一个副本,并将其命名为DEPT_2。但是,你不想复制表中的行,而只想复制表的列结构。解决方案DB2:在 CREATE TABLE 命令中使用 LIKE 子句。Oracle、MySQL 和 PostgreSQL:在 CREATE TABLE 命令中使用一个不返回任何行的子查询。asselect *from deptSQL Server:在一个不返回任何行的子查询中使用 INTO 子句。select *
2026-06-14 23:04:05
156
原创 SQL经典实例——使用多张表
可惜相等连接无法让你知道哪个部门没有员工,因为在 EMP 表和 DEPT 表之间建立相等连接时,将返回满足连接条件的所有行,而你想知道的是DEPT 表中不满足连接条件的行。先将 EMP 表连接到 DEPT 表,以返回所有的员工及其所在的部门,然后外连接到 EMP_BONUS表,以返回员工获得奖金的日期。连接是一种将两张表中的行合并的操作,而相等连接是基于相等条件(比如一张表的部门编号与另一张表的部门编号相等)的连接。内连接是最基本的连接,它返回的每一行都包含来自参与连接查询的各张表的数据。
2026-06-14 00:16:34
225
原创 SQL经典实例——查询结果排序
要按字符串的最后两个字符排序,可以先找到该字符串的末尾位置(字符串的长度)并减去 1。对于列值为NULL 和列值不为 NULL 的行,如果要以不同的方式排列它们(例如,你要按升序或降序排列列值不为 NULL 的行,并将所有列值为 NULL 的行都放在最后面),那么可以使用 CASE 表达式根据不同的情况采用不同的排序方式。除非你使用的 RDBMS 像 Oracle 那样,提供了方便的途径,无须修改不为 NULL 的列值,就能轻松地将列值为NULL 的行放在最前面或最后面,否则就需要创建一个辅助列。
2026-06-13 14:04:56
215
原创 SQL经典实例——检索记录
这是由于 WHERE 子句是在 SELECT 子句之前评估的,因此,对于前面说明问题时列举的查询,在评估其中的 WHERE 子句时,还没有别名 SALARY 和 COMMISSION。例如,在生成结果集时,你想在员工的薪水不超过 2000美元时返回消息 UNDERPAID,在员工的薪水不低于4000 美元时返回消息 OVERPAID,在员工的薪水为2000~4000 美元时返回消息 OK。在 ORDERBY 子句中,使用该内置函数以随机的方式对行进行排 序,然后使用上一节介绍的方法来限制返回的行数。
2026-06-13 00:10:09
170
原创 Java——多线程编程技巧
在两个方法同时执行时,线程A会等待线程B释放lockB对象的锁,线程B会等待线程A释放lockA对象的锁,从而造成线程锁冲突。例如,线程A持有锁L,需要等待锁M,而线程B持有锁M,需要获得锁L,这时线程A在等待获取锁M才能执行,而线程B需要获取到锁L才能执行。线程A、B互相持有对方所需要的锁,但线程A、B都不会主动释放所占有的资源,所以线程会产生死锁。当两个线程同时进行转账的时候,线程A在获取到X账号锁后需要等待Y账号的锁,线程B在获取Y账号锁后需要等待X账号的锁,这样线程A与线程B会产生死锁等待。
2026-06-09 15:31:16
199
原创 Java——线程池使用
这类任务通常是没有人工参与的,每次要处理的数据量特别大,执行的时间比较长,需要的系统资源比较多,最终会以报告或报表的形式体现任务的执行结果。整个模型采用的是单线程,系统处理完一个客户端的请求之后才能处理另一个客户端的请求,系统的执行效率非常低,如图所示。getAsyncCustomerInfo方法是异步获取会员资产的方法,它同样定义了3个会员资产的查询任务——couponTask、benefitsTask、balanceTask,然后将任务提交到线程池中去执行,通过Future来异步获取线程的执行结果。
2026-06-09 14:25:20
234
原创 JVM——线程池实现原理
Worker是工作线程的实现,负责执行线程任务,定义了thread、firstTask、completedTasks变量。thread是当前执行任务的线程。firstTask是工作线程创建时指定的任务,如果firstTask不为空,Worker会优先执行firstTask的任务,执行完firstTask任务后,Worker再从任务队列中取任务。如果firstTask为空,则工作线程会直接从队列中获取任务。completedTasks表示完成的任务数,每完成一个任务,将completedTasks加1。
2026-06-09 00:44:59
207
原创 JVM——并发容器实现原理
ConcurrentHashMap中常量定义共分为4大部分:Hash表的容量边界、数组与红黑树的转换控制边界、并发扩容线程数、Hash表数组节点的状态。常量定义如代码所示。我们需要深入探讨TREEIFY_THRESHOLD的定义。为什么链表的长度为8的时候,ConcurrentHashMap会将链表转成红黑树?红黑树的算法复杂度是O(logN),链表的平均复杂度是O(N/2)。当N为8的时候,红黑树的平均复杂度是3,而链表平均复杂度是4,因为超过8,红黑树的查询效率会明显大于链表的。
2026-06-07 23:40:31
283
原创 JVM——原子操作类实现原理
如代码所示,AtomicIntegerUpdaterTest是一个AtomicIntegerFieldUpdater的使用示例,其内部定义了一个volatile关键字修饰的age属性(即年龄字段),以及AtomicIntegerFieldUpdater的更新器updater,然后在addAge方法里面调用了AtomicInte-gerFieldUpdater的addAndGet方法来增加age属性的值。整个Cell数组的最大长度为CPU的个数,例如CPU的个数为4,那Cell数组的最大长度为4。
2026-06-07 21:31:24
209
原创 JVM——锁实现原理
ReentrantLock实现了Lock接口获取锁与释放锁的相关方法,定义了同步器Sync。Sync继承了AbstractQueuedSynchronizer,是AQS的具体实现。Sync有两个子类:NonfairSync(非公平锁同步器)与FairSync(公平锁同步器)。NonfairSync与FairSync重写了lock方法与tryAcquire方法。UML图如图所示。
2026-06-04 15:14:25
209
原创 JVM——线程同步机制
如下代码是一个简单的例子,用来演示volatile的功能。VolatileTest类里定义了一个volatile的size字段,然后写了一个简单的方法让size进行了加1操作。Java文件在编译之后会生成字节码文件,可以通过javap来查看字节码文件,并通过javap-v-p VolatileTest.class命令解析出字节码文件的内容,详细信息如代码所示。字节码内容包含常量池、字段定义、方法定义、方法内容等信息。size字段有ACC_PRIVATE、ACC_VOLATILE访问标志。
2026-06-03 23:18:48
239
原创 JVM——线程通信原理
wait方法会先将当前线程加入ObjectMonitor的_WaitSet等待队列中,然后调用ParkEvent的park方法让当前线程阻塞,当前线程正式进入等待。unpark方法的核心功能是唤醒等待的线程,具体实现如代码所示。unpark方法的核心流程如下:首先判断线程是否挂起,当_event的值小于1,表示当前线程被阻塞,只有被阻塞的线程才能进行唤醒。如下代码是notify方法的具体实现,它首先要确认当前线程是否持有监视器锁,如果当前线程持有监视器锁就调用INotify方法来唤醒队列中等待的线程。
2026-06-03 00:58:52
252
原创 Esper——EPL语法概述
1、EPL 的标准语法骨架2、基础过滤与事件流选择(SELECT & FROM & WHERE)3、数据窗口语法(Data Windows)—— 流处理的物理边界4、分组与聚合(GROUP BY & HAVING)5、高级时序控制:输出频率限制(OUTPUT)6、核心杀手级语法:模式匹配(Pattern)7、总结在 Esper 中,EPL(Event Processing Language,事件处理语言) 是整个引擎的灵魂。它的语法虽然极度神似传统数据库的 SQL,但其底层的执行逻辑却恰恰相反。
2026-06-02 22:15:58
432
原创 Esper——核心概念
外部系统(如 Kafka)源源不断地送来 事件 (Events)。引擎根据你部署的 EPL 规则 开始过滤。数据进入特定的 数据窗口 (Windows) 缓存片刻,进行平均值、总数等聚合计算。或者数据经过 模式匹配 (Pattern) 引擎,一旦发现时序因果链条对上了,立刻触发你的监听器(Listener),执行诸如“发送短信告警”、“熔断账户”等业务后置逻辑。
2026-06-02 21:17:34
352
原创 Esper——快速开始
Esper 编译器和运行时环境的开发旨在满足分析和响应事件的应用程序的需求。业务流程管理和自动化(流程监控、业务自动化管理 (BAM)、异常报告)金融(算法交易、欺诈检测、风险管理)网络和应用程序监控(入侵检测、服务级别协议 (SLA) 监控)传感器网络应用程序(RFID 读取、生产线调度和控制、空中交通)这些应用程序的共同之处在于需要实时或近实时地处理事件(或消息)。这有时被称为复杂事件处理 (CEP) 和事件序列分析。此类应用程序的关键考虑因素是吞吐量、延迟以及所需逻辑的复杂性。
2026-06-02 19:31:08
191
原创 PlantUML——通用命令
块状注释使用 C 风格的注释,除了用一撇一捺代替。你可以在标题描述中使用。, 然后你也可以把注释放在几行上,用。关键字在图像下放置一个标题.也可以在同一行中放置块状注释。开始的都是一个的注释。
2026-05-31 23:11:09
273
原创 PlantUML——实体关系图
*1. 简单实体 **@startumlentity 用户 {} @enduml2. 带字段的实体@startumlentity 用户 {id : INTage : INT@enduml3. 主键 / 外键标记(约定俗成)@startumlentity 用户 {entity 订单 {@enduml。
2026-05-31 18:51:00
292
原创 PlantUML——思维导图
思维导图的分层和直观布局有助于识别不同想法和概念之间的关系,从而更容易纵观全局,找出需要进一步探索的领域。这使得 PlantUML 成为项目经理、开发人员和业务分析人员的宝贵工具,他们需要用这种方法直观地组织复杂信息,并以简洁明了的方式呈现出来。PlantUML以其简单、基于文本的语法为创建这些图表提供了便利,从而可以高效地组织复杂的想法并将其可视化。PlantUML 基于文本的方法还能轻松修改和控制思维导图的版本,使其成为协作式头脑风暴和创意开发的动态工具。可以同时使用图形的左右两侧。
2026-05-31 17:23:31
264
原创 PlantUML——定时图
使用以下关键字声明参与者, 可根据需要选择显示样式。通过 @ 标注, 和 is 动词定义状态.使用以下关键字可以绘制二进制及时钟信号:使用下述的语法,增加对某一时刻信号变动的描述。可以使用 和 符号表示相对时间.在绝对时间上使用绝对时间或相对时间,你可以通过使用 as 关键字和以: 开始的名称来定义一个时间作为锚点。按时间顺序来描述状态变化可能会有些麻烦,不如将每个参与者的变化放在一起。还可以设置缩放比例。当使用绝对时间或者日期时,1 单位为 1 秒。可以定义初始状态。一个信号
2026-05-30 23:29:36
184
原创 PlantUML——部署图
可以使用内联式以下符号改变单个箭头的颜色或样式。可以在有或没有标签的元素之间创建简单的链接。可以用以下符号改变单个元素的颜色或样式。可以使用一些简短的形式声明元素。可以使用几种类型的链接。
2026-05-30 18:43:21
222
原创 PlantUML——组件图
命令 skinparam componentStyle uml1 可以切换到 UML1 标记符。默认情况下,对象之间用–连接,并且连接是竖直的。不过可以使用一个横线或者点设置水平方向的连。还可以使用关键字 left, right, up or down 改变箭头方向。要删除此类组件,必须为其添加别名或标记。可以使用多个关键字将组件和接口组合在一起。可以为构造类型和接口定义特殊的颜色和字体。开头的组件名以后不能隐藏或删除,因为。元素之间可以使用虚线 (” 在连线上添加描述。
2026-05-30 17:53:48
224
原创 PlantUML——活动图新语法
可以在关键字 endwhile 后添加标注,还有一种方式是使用关键字 is。可以在泳道中增加 if 判断或 repeat 或 while 循环.关键词来在你的图表中放入测试。来形成一个无限循环, 那么你可能需要使用。参数来表示仅使用线条连接活动,而不带箭头。关键字来拥有几个测试(默认是水平模式)。关键字跟在循环中的某个行为后面打断循环.但如果你想在特定行为上停止,你可以使用。关键字来表示一个图的开始和结束。可以在 if 判断中终止一个行为.同样可以使用一个全局行为作为。目标,在返回循环开始时使用。
2026-05-30 16:29:37
212
原创 PlantUML——活动图
活动图是一种用于描述系统行为的模型视图,它可用来描述动作和动作导致对象状态改变的结果,而不用考虑引发状态改变的事件。通常,活动图记录单个操作或方法的逻辑、单个用例或商业过程的逻辑流程。在UML中,活动的起点用来描述活动图的开始状态,用黑的实心圆表示。活动的终止点描述活动图的终止状态,用一个含有实心圆的空心圆表示。活动图中的活动既可以是手动执行的任务,也可以是自动执行的任务,用圆角矩形表示。状态图中的状态也是用矩形表示,不过活动的矩形与状态的矩形比较起来更加的柔和,更加接近椭圆。
2026-05-29 23:45:14
299
原创 PlantUML——状态图
广义上,状态机是一种记录下给定时刻状态的设备,它可以根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作。比如,计算机就是一个状态机,各种客户端软件、Web上的各种交互页面都是状态机。在UML中,状态机由对象的各个状态和连接这些状态的转换组成,是展示状态与状态转换的图。在面向对象的软件系统中,一个对象无论多么简单或者多么复杂,都必然会经历一个从开始创建到最终消亡的完整过程,这个过程通常被称为对象的生命周期。
2026-05-29 22:45:11
388
原创 PlantUML——序列图
所谓交互(Interaction)是指在具体语境中为实现某个目标的一组对象之间进行一组消息交换的行为。一个结构良好的交互过程类似于算法,简单、易于理解和修改。UML提供的交互机制通常会对两种情况进行建模,分别是为系统的动态行为进行建模和为系统的控制过程进行建模。面向系统的动态行为进行建模时,针对系统为实现自身的某个功能而展开的一组动态行为进行描述,其中包含描述一组彼此关联、相互作用的对象间的动作序列和配合关系,以及这些对象间传递和接收的消息。
2026-05-29 17:21:36
205
原创 PlantUML——对象图
一个类图仅仅显示的是系统中的类,但是存在一个变量,确定地显示各个类的真实对象实例的位置,那就是对象图。对象图描述系统在某一个特定时间点上的静态结构,是类图的实例和快照,即类图中的各个类在某一个时间点上的实例及其关系的静态写照。对象图中包含对象(Object)和链(Link)。其中对象是类的特定实例,链是类之间关系的实例,表示对象之间的特定关系。对象图的表示如图所示。对象图所建立的对象模型描述的是某种特定的情况,而类图所建立的模型描述的是通用的情况。类图和对象图的区别比较见表所示。使用关键字。
2026-05-28 21:57:37
206
原创 PlantUML——类图(一)
类图(Class Diagram)显示了系统的静态结构,而系统的静态结构构成了系统的概念基础。系统中的各种概念是在现实应用中有意义的概念,这些概念包括真实世界中的概念、抽象的概念、实现方面的概念和计算机领域的概念。类图,就是用于对系统中的各种概念进行建模,并描绘出它们之间关系的类图。类接口数据类型构件并且,UML还为这些类型起了一个特别的名字叫作类元(Classifier)。类元是对有实例且有属性形式的结构特征和操作形式的行为特征的建模元素的统称。类是一种重要的类元。
2026-05-28 11:27:27
422
原创 PlantUML——用例图
由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。其中用例和参与者之间的对应关系又叫作通信关联(Communication Association),它表示参与者使用了系统中的哪些用例。用例图是从软件需求分析到最终实现的第一步,它显示了系统的用户和用户希望提供的功能,这有利于用户和软件开发人员之间的沟通。要在用例图上显示某个用例,可以绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置。
2026-05-27 22:22:48
463
原创 状态机——SpringStateMachine嵌套状态流转
在 Spring StateMachine 中,嵌套状态(Substates / Hierarchical States)是指在一个父状态(Parent State)内部,包含了一组子状态(Child States)。这种设计非常适合用来表达“状态中的状态”,能够将复杂的业务逻辑按层级进行拆分。如果状态机当前处于某个子状态,那么它必然也同时处于该子状态的父状态。,顶层状态:待支付(初始状态)IN_PAYMENT,父状态:支付中,子状态:支付准备中,子状态:扣款中,结束状态:待发货。
2026-05-21 22:01:42
318
原创 状态机——SpringStateMachine并行区域状态流转
在 Spring StateMachine 中,并行区域(Orthogonal Regions,或称正交区域) 用于处理同一个实体上多个相互独立、互不干扰的状态流转线。在一个汽车电商履约系统中,当用户支付完成后,订单进入 “审核履约中(ON_AUDIT)” 状态。风控审批线:初始为 RISK_CHECKING→→审批通过到达终点 RISK_PASSED。物流仓储线:初始为 PACKING→→打包完成到达终点 PACKED。
2026-05-21 00:20:32
371
原创 状态机——Spring State Machine
相比于轻量级的 Cola-StateMachine,Spring State Machine(Spring 状态机) 是 Spring 生态中功能最强大、最完备,同时也是体量最重的状态机框架。它不仅支持基础的状态流转,还支持嵌套状态(Substates)并行状态(Orthogonal Regions)状态持久化伪状态(Choice/Junction)事件监听拦截器以及与 Spring Security的无缝集成。在需要严格事务控制、分布式状态恢复以及复杂工作流的大型企业级架构中,它是不可替代的利器。
2026-05-19 23:31:05
427
原创 CEP——复杂事件处理概述
1、CEP概述2、CEP 的核心工作原理3、核心应用场景4、主流的CEP框架5、核心代码示例(以 Flink CEP 为例)6、CEP 与状态机(State Machine)的区别CEP(Complex Event Processing,复杂事件处理)框架是一种用于在分布式、高并发的数据流中,实时检测、分析和组合多个简单事件,从而识别出具有特定业务特征的“复杂事件”(复合事件)的技术架构。简单来说,传统的数据库和大数据处理(如 MapReduce)是“数据静止,查询游走”;
2026-05-19 17:48:00
377
原创 状态机——Cola-StateMachine状态流转
我们使用状态机 Builder,确认状态流转模式(Transition),接收状态(From),定义动作(On),检查条件(When),执行事件(Perform),然后返回目标状态(To)。描述:订单起始状态发生在部分发货状态下,当发生发货时执行状态流转,当满足 CheckCondition(订单部分发货条件)时,执行DeliverOrderAction,执行成功则返回状态:部分发货。当有新订单事件的增加时,在此状态机中增加相应事件即可,同时维护好订单事件与事件实现方法之间的关系。
2026-05-19 17:24:54
440
原创 状态机——Cola-StateMachine
/ 状态PENDING_PAY("待付款"),PENDING_DELIVER("待发货"),PENDING_RECEIVE("待收货"),PENDING_COMMENT("待评价"),COMPLETED("已完成"),CANCELLED("已取消");// 事件USER_PAY("用户支付"),MERCHANT_DELIVER("商家发货"),RECEIVE_PACKAGE("收到包裹"),COMMENT("评价"),COMMENT_TIMEOUT("超时未评"),
2026-05-19 15:29:07
410
vuedevtools安装.zip
2019-10-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅