自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(140)
  • 收藏
  • 关注

原创 SQL:窗口函数(Window Functions)

窗口函数是一类 SQL 函数,在不分组的情况下,可以对查询结果中的某一“窗口”范围内的数据进行计算。不同于聚合函数(如 SUM, AVG),窗口函数不会压缩行,而是为每一行返回一个计算值。

2025-05-22 09:04:46 682

原创 SQL思路解析:聚合函数的巧妙使用

这道题目要求计算在首次登录的第二天再次登录的玩家比率。首先,我们需要找出每个玩家的首次登录日期,然后检查他们是否在首次登录的第二天有登录记录。通过将首次登录日期与活动表进行连接,并使用DATEDIFF函数筛选出符合条件的记录,我们可以统计出在第二天登录的玩家数量。最后,将这个数量除以总玩家数,并四舍五入到小数点后两位,得到所需的比率。使用AVG函数可以更简洁地实现这一计算,因为它直接对布尔值进行平均,避免了手动计算分子和分母的繁琐过程。

2025-05-20 22:54:42 560

原创 计算机组成与体系结构:RAM(随机存取存储器)

RAM(随机存取存储器)是计算机中用于临时存储正在运行的程序和数据的易失性存储器,断电后数据会丢失。RAM的工作原理涉及将程序从硬盘加载到RAM中,临时数据存储在RAM中以确保快速响应,保存时数据写入硬盘,关机后RAM数据清除。DIMM(双列直插式内存模块)是RAM的封装形式,具有双边独立引脚,支持更快的数据传输和更大的容量。RAM主要分为SRAM(静态RAM)和DRAM(动态RAM),其中DRAM是主内存的常见形式。SDRAM(同步动态随机存取存储器)通过同步时钟信号提升效率,而DDR(双倍数据速率SDR

2025-05-20 17:01:27 1023

原创 计算机组成与体系结构:ROM(只读存储器)

主存储器是计算机中直接与CPU通信的内存,用于临时存储运行中的程序和数据,其访问速度远快于外部存储器但容量较小。主存储器主要包括RAM和ROM两类。RAM(随机存取存储器)具有临时性、可读写、易失性和高速的特点,用于存储当前运行的程序和数据,如未保存的Word文档。ROM(只读存储器)则具有只读、非易失性和稳定的特点,用于存储固件如BIOS,确保计算机启动和底层系统的正常运行。固件是嵌入硬件中的软件程序,控制设备的低层功能,如BIOS在计算机启动时进行硬件初始化和自检。BIOS通过加载引导程序(Bootst

2025-05-20 12:17:24 565

原创 计算机组成与体系结构:Directory-Based Protocol(目录式协议)

监听式一致性协议在处理器数量较少时表现良好,但随着核心数量的增加,共享总线的带宽限制和全体监听的压力成为系统扩展的主要瓶颈。为了解决这一问题,引入了目录式协议。目录式协议通过维护一个缓存索引表,精确记录哪些核心拥有数据的缓存副本,从而避免了广播通信,减少了无效通信和能耗。目录式协议支持分布式设计,能够扩展到上百甚至上千个核心,每个节点包含处理器、本地主存、私有缓存和目录模块,通过可扩展的网络进行点对点通信。处理器操作流程包括请求变量、目录处理请求、数据传送和目录更新等步骤,确保数据一致性和高效通信。目录式协

2025-05-20 09:43:26 838

原创 SQL:多列匹配(Multiple-column Matching)

MySQL中的多列匹配是指在查询时同时对多个列进行组合匹配,常见于WHERE子句、IN子句、JOIN条件或索引使用场景。多列匹配的基础形式为SELECT * FROM table WHERE (col1, col2) = ('value1', 'value2');,表示只有当两列同时满足条件时才匹配成功。其应用场景包括多列等值匹配、多列IN匹配、多列JOIN匹配、子查询、EXISTS、UNION组合数据源以及索引优化等。多列匹配在复合主键或唯一约束字段组合中尤为高效,且比AND更具表达力。性能优化方面,建议

2025-05-19 10:52:14 550

原创 计算机组成与体系结构:Snooping-Based Protocols(监听式协议)

监听式协议(Snooping协议)是多核处理器系统中用于维护缓存一致性的关键机制。其核心思想是通过总线广播,使每个处理器的缓存控制器能够“监听”其他处理器的数据请求,从而判断是否需要更新或失效本地缓存副本。该协议主要采用两种写策略:写失效(Write-Invalidate)和写更新(Write-Update)。写失效策略在写操作时使其他缓存副本失效,确保写入核心独占数据,适合写回缓存;写更新策略则在写操作时广播新值,保持所有缓存一致,适合写通缓存。监听式协议通过总线模型实现共享数据的一致性,但可能面临带宽消

2025-05-18 23:20:49 766

原创 计算机组成与体系结构:缓存一致性(Cache Coherence)

在多核处理器系统中,缓存一致性问题是确保多个处理器核心对共享内存数据副本的一致性。当多个核心各自缓存同一内存区域的数据时,一个核心的修改可能导致其他核心仍使用旧数据,引发数据不一致。缓存一致性协议(如Snooping-Based和Directory-Based)通过定义核心间的通信规则和状态管理,来解决这一问题。Snooping-Based协议通过总线广播监听其他核心的操作,适用于小规模系统;而Directory-Based协议则通过中央或分布式目录记录数据块状态,适合大规模系统。这些协议确保在多核环境中,

2025-05-18 15:44:26 1047

原创 Unity:延迟执行函数:Invoke()

在Unity中,Invoke() 是一个用于延迟执行函数的内置方法,适用于简单的延迟需求,如延迟切换场景、播放音效或动画等。其基本用法是通过 Invoke(string methodName, float time) 指定方法名和延迟时间(秒)。例如,可以在角色到达终点后延迟2秒切换场景。Invoke() 的优点是简洁易用,无需额外协程,且支持通过 CancelInvoke() 取消调用。此外,InvokeRepeating() 可用于重复执行函数。然而,Invoke() 也有局限性,如不支持参数传递、不易

2025-05-16 22:50:59 524

原创 Unity:场景管理系统 —— SceneManagement 模块

在Unity开发中,Scene(场景)是游戏的基本构建块,代表游戏的不同关卡、菜单或动画。每个Scene包含游戏对象、组件设置、资源引用和场景布局信息。Unity的SceneManagement模块,特别是SceneManager类,负责场景的加载、卸载和切换。通过SceneManager.LoadScene()方法,开发者可以在不同场景间切换,或重新加载当前场景。例如,实现“游戏角色到达终点后重新加载场景”的功能,可以通过在终点区域设置触发器,并在触发时调用SceneManager.LoadScene()

2025-05-16 22:28:08 1155

原创 SQL易错点:为什么我们总会忽略特殊情况?

在数据分析和算法题中,忽略特殊情况或边界条件是一个常见但致命的问题,导致答案错误或系统崩溃。这种现象源于认知系统偏差,包括对主流程的过度关注、学习材料的不足、时间压力下的策略性忽视以及错误的默认假设。为了系统地避免这类错误,可以采用“五维边界检查法”,通过检查空输入、边界值、异常数据、空/NULL值和非法数学问题,确保逻辑的鲁棒性。通过案例分析,本文展示了如何在实际问题中应用这一方法,并提供了长期提升策略,如模拟测试极端输入和训练异常感知系统,以建立更优秀的思维模型。

2025-05-16 16:16:09 896

原创 SQL:MySQL函数:空值处理函数(NULL Handling Functions)

在MySQL中,NULL表示“未知”或“无值”的状态,不同于数字0或空字符串。处理NULL值时,常用函数包括:IFNULL()用于替换空值为默认值,COALESCE()返回第一个非NULL值,NULLIF()在表达式相等时返回NULL以避免错误,以及ISNULL/ISNOTNULL用于判断值是否为NULL。这些函数在数据库查询中非常有用,例如替换空值、避免除以0错误或筛选空值记录。具体应用场景和示例语句可参考相关技术文章。

2025-05-15 21:07:22 986

原创 SQL:MySQL函数:条件函数(Conditional Functions)

条件函数是SQL查询中用于根据条件真假返回不同值的函数,常用于逻辑控制、数据筛选和分类处理。常见的MySQL条件函数包括: IF():根据条件返回不同值,如IF(score>=60, '及格', '不及格')。 IFNULL():判断值是否为NULL并返回替代值,如IFNULL(bonus, 0)。 NULLIF():若两表达式相等则返回NULL,如NULLIF(grade, 'F')。 CASE:实现多条件分支判断,如CASE WHEN salary>10000 THEN '高薪' ELSE

2025-05-15 20:56:49 541

原创 计算机组成与体系结构:替换策略(MRU & LRU & PLRU & LFU)

本文介绍了多种缓存替换策略,包括MRU(最近最常使用)、LRU(最近最少使用)、PLRU(伪最近最少使用)和LFU(最少频繁使用)。MRU策略在缓存满时替换最近访问的块,适用于特定访问模式。LRU策略则淘汰最久未使用的块,利用时间局部性原则。PLRU是LRU的近似实现,通过树结构和方向位减少硬件开销,同时接近LRU的效果。LFU策略基于访问频率,淘汰访问次数最少的块,适用于访问热点稳定的场景。每种策略都有其适用场景和优缺点,选择合适的策略可以提高缓存效率和系统性能。

2025-05-15 18:10:43 920

原创 计算机组成与体系结构:替换策略(RR&FIFO&LIFO&Optimal Replacement)

本文介绍了四种常见的缓存替换策略:随机替换(Random Replacement)、先进先出(FIFO)、后进先出(LIFO)和最优替换(Optimal Replacement)。随机替换策略在缓存满时随机选择一个块进行替换,简单但命中率较低;FIFO策略优先淘汰最早进入缓存的数据块,行为确定但可能淘汰频繁使用的数据;LIFO策略则淘汰最近进入的块,违反局部性原则,命中率较差;最优替换策略总是淘汰将来最长时间内不会被访问的块,理论上命中率最高,但无法在实际中实现,通常作为理论基准。这些策略在全相联和组相联映

2025-05-15 11:03:32 741

原创 计算机组成与体系结构:缓存设计概述(Cache Design Overview)

这四部分实际上是一个闭环的机制:块放置决定了一个主存块被映射到 Cache 的哪个位置;块识别决定我们如何判断一个内存访问是否命中 Cache;块替换决定当位置冲突时该替换谁;写策略决定了写入数据时 Cache 和主存的一致性如何维护。它们密切关联,共同定义了 Cache 的工作行为和性能表现。有了以上四个基础组成部分的理解,我们就可以正式迈入 Cache Design 的大门了。CacheDesign 是对这些策略的组合与优化,使得 Cache 在访问速度、能效、硬件成本和命中率之间达成。

2025-05-14 17:23:46 920

原创 三种映射方式总结

你已经学习了三种Cache映射方式,我们可以从物理地址的结构划分这个核心出发,进行一个系统的对比性总结。

2025-05-14 16:19:07 381

原创 关联映射例题解析

在一个 k 路组相联缓存(k-way set associative cache) 中,缓存被划分为 v 个组(set),每个组包含 k 条缓存行(cache lines)。每组的缓存行是连续存放的,第 s 组的缓存行排在第 (s + 1) 组的缓存行前面。如果在保持缓存容量和块大小不变的情况下,将处理器缓存的相联度(associativity)加倍,那么以下哪一项一定不会受到影响?处理器与主存之间的数据总线的宽度是与缓存结构无关的,它取决于架构设计,比如一次传输多少数据(比如 64 位或128 位)

2025-05-14 11:32:06 502

原创 计算机组成与体系结构:组相联映射(Set-Associative Mapping)

组相联映射 是一种折中策略,它将 Cache 分为多个 集合(sets),每个集合中包含 多条 Cache 行。冲突未命中(Conflict Miss)严重:即使缓存没满,某些块也只能映射到唯一行,造成不必要的替换。例子:如果地址 A 和地址 B 都映射到第 3 行,则每次访问都会把对方替换掉,即使缓存中还有空位。Cache 会在 Set 3 的两个 line 中,查找是否有 tag = 100 的块。每个主存块根据其地址映射到 唯一一个集合,但在这个集合中,它可以存储在 任意一行中。

2025-05-13 20:57:03 595

原创 计算机组成与体系结构:全相联映射(Fully Associative Mapping)

本文探讨了缓存设计中的映射策略及其优缺点。首先,直接映射虽然实现简单、访问速度快,但冲突率高,导致缓存命中率低。接着,介绍了三种缓存未命中类型:冷启动未命中、冲突未命中和容量未命中。为解决直接映射的冲突未命中问题,引入了关联映射策略,特别是全相联映射,它允许主存中的任何块存储在缓存的任何一行,从而减少冲突未命中。然而,全相联映射的查找成本高,硬件实现复杂。文章还讨论了替换策略,如LRU、随机替换和FIFO,以及命中延迟的概念,即缓存命中时获取数据所需的时间。

2025-05-13 18:46:18 838

原创 SQL易混点:你知道ON 和 WHERE 的区别吗

在SQL查询中,ON和WHERE子句的使用取决于条件的语义。ON子句用于指定表连接时的配对规则,决定哪些行可以配成一对;而WHERE子句用于对连接后的结果进行过滤,决定哪些行应该保留。例如,在计算机器完成进程任务的平均耗时时,ON子句应仅包含机器和进程的匹配条件,而过滤条件(如活动类型为'start'和'end')应放在WHERE子句中。这种分离确保了SQL的清晰性和灵活性,避免了在连接阶段不必要地限制结果集。正确的做法是先通过ON子句进行表连接,再通过WHERE子句进行业务逻辑的过滤。

2025-05-13 12:03:03 862

原创 SQL:MySQL函数:数学函数(Mathematical Functions)

在 MySQL 中,数学函数(Mathematical Functions)主要用于执行数值计算,如求和、取整、开方、对数等,广泛应用于统计、报表、数据建模等领域。

2025-05-13 10:36:40 794

原创 思路解析:第一性原理解 SQL:连接(JOIN)

本文通过一个SQL题目,展示了如何应用第一性原理来解决问题。题目要求计算每台机器完成进程任务的平均耗时。首先,通过自连接(Self Join)将同一机器、同一进程的“start”和“end”事件配对。然后,通过过滤条件确保只保留正确的“start”到“end”方向。接着,按机器ID分组,并计算每个机器的平均耗时。最后,将结果四舍五入保留三位小数。文章强调了从数据结构出发,逐步拆解问题,最终推导出解决方案的第一性思维方法,而非死记硬背SQL技巧。

2025-05-13 10:17:37 997

原创 SQL:JOIN 进阶

JOIN是关系数据库中用于连接两个表的操作,本质上是“笛卡尔积+条件筛选”。外连接(OUTER JOIN)不仅保留匹配成功的行,还保留未匹配的行,用NULL补全缺失部分,包括LEFT、RIGHT和FULL OUTER JOIN。USING子句是一种简化JOIN操作的语法,适用于连接字段名相同的情况,避免重复书写ON条件,且SELECT结果中只显示一次公共字段。NATURAL JOIN则自动基于相同列名进行连接,但存在字段名冲突和表结构变动的风险,可控性较低。JOIN的底层逻辑是通过笛卡尔积生成所有可能的行组

2025-05-12 22:18:39 1114

原创 数据结构:树(Tree)

树结构是一种用于表示层级关系的数据结构,广泛应用于现实世界中的各种场景,如公司组织架构、家谱和文件系统等。树的基本定义包括一个根节点、多个子节点,且无环、每个子节点只有一个父节点。常见的树结构变体包括二叉树、满二叉树、完全二叉树和平衡二叉树。

2025-05-12 10:39:38 767

原创 c++:有序关联容器(std::set)

🔧 红黑树是一种特殊的二叉搜索树(BST),满足这些规则:每个节点不是“红色”就是“黑色”根节点是黑色所有叶子节点(nullptr)是黑色红色节点的子节点必须是黑色从任一节点到其所有叶子节点的路径中,黑色节点数相同(黑高平衡)通过这些规则,红黑树保持平衡,避免出现像链表那样的“最坏情况”默认是从小到大排序。也可以写自己的比较函数(用于排序对象类型)。

2025-05-12 10:14:44 966

原创 SQL:MySQL函数:日期函数(Date Functions)

我们用 MySQL 存储时间,其实和存储数字、字符串一样,时间是。适用场景:记录操作时间、筛选“今天”的数据、判断是否超期。适用场景:前端展示、日志格式化、分组查询(比如按月统计)。适用场景:查“过去 7 天”/“近 1 个月”的记录。适用场景:计算会员时长、距离到期还有几天、是否超时。于是我们需要一类“时间函数工具箱”来完成这些任务。适用场景:按年月日分组、按小时分布分析。某个时间加上 3 天是多少?显示成“年-月-日”?

2025-05-12 08:46:16 328

原创 c++:算法(Algorithms)

C++ STL(标准模板库)中的算法是 STL 的三大核心组成之一,另外两个是和。STL 提供了大量的泛型算法,这些算法不依赖于特定容器,而是通过迭代器操作容器中的元素。这一设计体现了 STL 的高度抽象性和复用性。

2025-05-12 08:11:02 609

原创 SQL:SELF JOIN(自连接)与CROSS JOIN(交叉连接)

比较项SELF JOINCROSS JOIN含义表与自身连接,按条件匹配不同记录两表的所有记录两两组合结果行数根据 JOIN 条件过滤后生成的匹配行m × n 行(m,n 分别为两表的行数)使用场景自我比较、查找相关记录(如“比昨天温度高”)枚举所有组合,如“所有商品和所有客户”性能较高(条件过滤优先)较低(生成全部组合再过滤)

2025-05-11 22:44:23 929

原创 c++:双端队列容器(std::deque)

std::deque 是 双端队列容器,允许在队列两端进行快速插入和删除。它的全称是:Double Ended Queue你可以把它看作是:vector 的增强版,可以在头尾都插入删除,但依然支持随机访问。

2025-05-10 09:52:04 593

原创 c++:双向链表容器(std::list)

std::list是C++标准库中的双向链表容器,每个节点包含值及指向前后节点的指针。其特点包括:支持高效插入和删除(O(1)时间复杂度),但不支持随机访问。与std::vector(动态数组)相比,std::list在中间插入/删除操作上更高效,但遍历和空间利用率较低。常见操作包括push_back、push_front、insert、erase、remove等。

2025-05-09 23:20:48 642

原创 c++:迭代器(Iterator)

迭代器 = “智能指针”,用来一个一个地访问容器中的元素。你可以想象迭代器像是容器中的“手指”或“光标”:指着某个元素可以向前走(甚至有些还能往后走)能取出或修改元素示例对比:用数组 vs 用迭代器i < 3;i++) {改成vector+ 迭代器写法:it!= v.end();++it) {v.begin():返回指向第一个元素的迭代器v.end():返回“超出最后一个元素的下一个位置”的迭代器*it:表示取出当前指向的元素++it:移动到下一个元素。

2025-05-09 22:33:15 635

原创 c++:标准模板库 STL(Standard Template Library)

定义:STL(Standard Template Library) 是 C++ 标准库的一部分,它是一套使用模板技术实现的通用 数据结构和算法库。可以理解为:“一个高度模块化、高性能、高度泛型的编程工具箱。它实现了大量经典数据结构(如:数组、链表、栈、队列、哈希表、平衡树等)和常用算法(如:排序、查找、复制、替换等)。

2025-05-09 16:39:26 749

原创 c++:编译链接过程

预处理器把#include文件展开为真实代码把#define宏替换为实际值去掉注释// 展开iostream✅输出文件:预处理后的.i文件(可选)

2025-05-09 12:47:44 621

原创 c++:库(Library)

库就是一堆 别人写好的代码打包好的文件,让你可以直接调用里面的函数或类,而不需要自己从零写。举个例子:你就像用现成的“排序工具”,节省了造轮子的时间。

2025-05-09 11:31:05 734

原创 基础算法:第一性原理介绍哈希(Hash)

当然真正的哈希函数(如 SHA-256)远比这个复杂,它涉及位运算、模块函数、大素数等,但原理一样。这时候你就需要一个工具,能把一个 1GB 的文件,压缩成一串 64 个字符,且这个压缩是。哈希不是神秘公式,而是为了解决信息快速识别的需求,自然演化出来的最优方案之一。只用这串数字,我们就知道他是谁,而不用反复看他的简历、照片、住址。有两张图片,看起来不同,但文件内容一样,怎么识别它们是同一张?从第一性原理看,哈希函数的本质是一种不可逆的、结构化压缩方式。它不是为了还原信息,而是为了快速识别和分发信息。

2025-05-09 08:25:46 656

原创 SQL:MySQL函数:字符串函数

我们用数据库存储信息,经常会处理文字/文本(如:用户名、推文、商品名、评论内容)。但是这些文字往往:太长、太短(需要裁剪)多余空格(要去掉)出现错别字/旧字段(要替换)需要统计长度(做验证、展示控制)👉 所以,就像洗衣机、剪刀、胶水,是处理文本的“工具箱”。

2025-05-08 21:37:31 982

原创 SQL易错解析:你真的理解 NULL 吗?

很多初学者会把NULL理解成“空字符串”或“0”,但它其实代表的是:值未知或不适用。未知(Unknown):你看到一个人戴着墨镜,不知道他眼睛是什么颜色。这叫“未知”。不适用(Inapplicable):你问“太阳的头发是什么颜色?”——冰箱根本没有头发,所以这个问题不适用。在 SQL 中,NULL就是这么一个“我不知道”的标记。它不是值,也不是变量,它表示没有值。场景建议做法判断是否为 NULL用IS NULL排除某些值用NOT EXISTS替代NOT IN字段不允许为 NULL加。

2025-05-08 20:48:19 578

原创 Unity:父挂 Rigidbody2D、子挂 Collider2D 时触发器不生效的问题分析

在 Unity 2D 游戏开发中,很多人习惯用父物体挂载,而将不同的身体部位(如上半身、下半身)放在子物体中挂Collider2D,以构建清晰的层级结构。然而,在这种情况下,即使设置了 Trigger,碰撞事件也常常无法触发。我在开发一个《滑雪大冒险》风格的游戏时,就遇到了这个问题。下面是详细分析。

2025-05-08 10:28:50 499

原创 Markdown 基本语法

Markdown 是一种轻量级的标记语言,由 John Gruber 在 2004 年创建。它使用易读易写的纯文本格式,通过简洁的标记语法,可以快速转换成结构良好的 HTML(网页格式)。

2025-05-08 08:23:34 264

Cache三种映射机制总结

Cache三种映射机制总结

2025-05-14

空空如也

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

TA关注的人

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