计算机组成原理实验(7) 堆指令部件模块实验
实验七 堆指令部件模块实验
一、实验目的
1、掌握指令部件的组成方式。
2、熟悉指令寄存器的打入操作,PC计数器的设置和加1操作,理解跳转指令的实现过程。
二、实验要求
按照实验步骤完成实验项目,掌握数据打入指令寄存器IR1、PC计数器的重置,PC计数器自动加1和实现跳转指令的方法。
三、实验说明
3.1 指令部件模块实验的构成:(如图3-2)
1、1片74LS374作为指令模块的指令寄存器IR1,另1片74LS374作为地址锁存器IR2。8芯插座PC-IN作为数据输入端,可通过短8芯扁平电缆把数据输入端连接到数据总线上。
2、2片74LS161作为PC计数器。
3、2片74LS245(同时只有1片输出)作为当前地址的输出。8芯插座PC-OUT作为地址输出端,可通过短8芯扁平电缆把地址输出端连接到地址总线上。
4、1片74LS153来实现多种条件跳转指令(JZ,JC,JMP等跳转指令)。

3.2 指令部件模块原理:(如图3-2)
1、指令寄存器IR1(74LS374)的 EIR1为低电平并且IR1CK有上升沿时,把来自数据总线的数据打入IR1,IR1的输出就作为本系统内的8位指令I0~I7。在本系统内由这8位指令可最多译码256条不同的指令,通过编码可对应出这些指令在微程序存储器中入口地址,并且输出相应的微指令。
2、2片74LS161组成了PC计数器,它由信号ELP、信号PC-O、脉冲PCCK来控制PC计数器+1和PC计数器置数操作。在停机状态下,由控制台置起始地址,给出打入脉冲并置入74LS161。当ELP=0,PCCK有上升沿时可重新置PC值。当PCO=0、ELP=1, PCCK是上升沿时把当前PC计数器加1,并且把PC计数器的值作为地址输出到地址总线上。
3、置EIR2为低电平,并且IR2CK有上升沿时,数据总线的数据打入IR2锁存器后,置IR2-O=0,PC-O=1时,把IR2的值作为地址输出到地址总线上。
4、74LS153是4选1的芯片,可通过JS0、JS1来选择用JC还是JZ来实现条件跳转的指令。
JS1 | JS0 | 功 能 |
0 | 0 | 选择JZ 当通用寄存器为0时跳转 |
0 | 1 | 选择JC 当进位寄存器为0时跳转 |
1 | 0 | 选择JN 提供给用户自定义,JN=0跳转 |
1 | 1 | 重新设置当前PC指针,实现JMP指令 |

3.3 控制信号说明
信号名称 | 作 用 | 有效电平 |
IR1CK | IR1的工作脉冲 | 上升沿有效 |
IR2CK | IR2的工作脉冲 | 上升沿有效 |
PCCK | PC计数器工作脉冲 | 上升沿有效 |
EIR1 | 选通指令寄存器IR1 | 低电平有效 |
EIR2 | 选通指令寄存器IR2 | 低电平有效 |
IR2-O | IR2输出允许 | 低电平有效 |
PC-O | PC计数器内容输出允许 | 低电平有效 |
ELP | 74LS161控制信号 | 高电平可重置PC值;低电平时PC值自动加1 |
JS0-JS1 | 选择开关 | 见上表 |
JZ | 条件跳转 | 为零跳转 |
四、实验步骤
● 在启停单元中按“运行”按钮,使实验平台处于运行状态。
● 把EIR1,EIR2,PC-O,IR2-O,ELP,JS0,JS1接入二进制拨位开关中。把IR1CK和IR2CK接入脉冲单元PLS1,PCCK接入PLS2中。用长8位扁平电缆把PC-IN与右板上的二进制开关单元中J03相连(对应二进制开关H0~H7),PC-OUT用短8位扁平电缆连接地址总线AJ1,其他控制信号请按下表接线。
信号定义 | 接入开关位号 |
IR1CK | PLS1 孔 |
IR2CK | PLS1 孔 |
PCCK | PLS2 孔 |
EIR1 | H20 孔 |
EIR2 | H19 孔 |
IR2-0 | H18 孔 |
PC-O | H17 孔 |
ELP | H16 孔 |
JS0 | H15 孔 |
JS1 | H14 孔 |
JZ | H13 孔 |
接线图示:
实验一:PC计数器置数
● 二进制开关H0~H7作为数据输入,置05H(对应开关如下表)。
H7 | H6 | H5 | H4 | H3 | H2 | H1 | H0 | 数据总线值 |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 8位数据 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05H |
● 置控制信号如下:
H20 | H19 | H18 | H17 | H16 | H15 | H14 |
EIR1 | EIR2 | IR2-O | PC-O | ELP | JS0 | JS1 |
1 | 0 | 1 | 1 | 0 | 1 | 1 |
实验结果图片如下:

● 按启停单元中的运行按键,使实验平台处于运行状态。
● 按脉冲单元中的PLS1脉冲按键,在IR2CK上产生一个上升沿,把当前数据总线数据打入IR2锁存器,按脉冲单元中的PLS2脉冲按键,在PCCK上产生一个上升沿,将IR2锁存器中的地址打入PC计数器(2片74LS161)中,这样的操作过程可实现无条件跳转指令。若要观测输出结果,再置信号PC-O=0,此时PC计数器把其内容作为地址输出到地址总线上,地址总线上的指示灯IAB0~IAB7应显示05H。
实验结果图片如下:

实验二:PC计数器加1
● 完成实验1后,重置各控制信号如下:
H20 | H19 | H18 | H17 | H16 | H15 | H14 |
EIR1 | EIR2 | IR2-O | PC-O | ELP | JS0 | JS1 |
1 | 1 | 1 | 0 | 1 | 1 | 1 |
实验结果图片如下:

● 按脉冲单元中的PLS2脉冲按键,在PCCK上产生一个上升沿,因PC-O=0,PC计数器将加1,PC计数器为06H,并且输出至地址总线。此时地址总线上的指示灯IAB0~IAB7应显示06H。
实验三:置当前指令寄存器
● 二进制开关H0~H7作为数据输入,置5FH(对应开关如下表)。
H7 | H6 | H5 | H4 | H3 | H2 | H1 | H0 | 数据总线值 |
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 8位数据 |
0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5FH |
● 置控制信号如下:
H20 | H19 | H18 | H17 | H16 | H15 | H14 |
EIR1 | EIR2 | IR2-O | PC-O | ELP | JS0 | JS1 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
实验结果图片如下:

五、实验总结
● 实验原理
本实验主要围绕指令部件模块及其在计算机体系结构中的作用进行,具体讲述了如何利用硬件实现指令的打入、程序计数器(PC)的设置与加1,以及跳转指令的实现。实验所涉及的关键概念包括指令寄存器、程序计数器以及条件跳转的控制信号。以下是详细的实验原理分析:
● 指令寄存器(IR1):
指令寄存器(IR1)用于存储当前正在执行的指令。通过74LS374芯片实现,当控制信号EIR1为低电平时,正当IR1CK(时钟脉冲)有上升沿信号到来时,数据总线上的数据就会被打入IR1,从而使系统能够读取并执行该指令。在本实验中,IR1能够存储8位二进制指令,最多可编码出256条不同的指令。
● 程序计数器(PC):
程序计数器(PC)是一个存放下一条将要被执行的指令的地址的寄存器。通过74LS161芯片实现。PC的控制包括两种基本操作:重置和自增。设定控制信号ELP为低电平时,PC的值自增1;如果设定为高电平时,PC也可以被置为一个新的下一个指令地址。PC的输出通过控制信号PC-O可以输出到地址总线。
● 跳转指令:
跳转类型指令如JZ、JC和JMP是程序控制流的重要组成部分。使用74LS153芯片作为选择开关,在这里根据指定条件生成控制信号,允许程序跳转到新的指令位置。例如,当某寄存器的值为零时执行JZ指令,或者当进位标志为零时执行JC指令。这种条件跳转通过选通控制信号来决定程序流转向。
● 实验结果分析
在实验中,按照设计步骤成功实现了以下几个重要操作:
● PC计数器置数:
在进行PC计数器置数时,成功将05H输入地址锁存器(IR2),并将内容打入PC计数器。当执行后,地址总线的指示灯成功显示为05H,验证输入的准确性。
● PC计数器加1:
通过控制信号设置,在PC计数器之前的状态下,通过时钟脉冲成功将PC值加1,最终在地址总线指示灯处观察到输出结果为06H。这表明程序计数器的自增操作正确实现。
● 当前指令寄存器的设置:
将数据5FH通过二进制开关输入后,持续设置新的控制信号,以成功打入指令寄存器IR1。在按下时钟脉冲后,IR1的指示灯显示了5FH,表明指令读取过程正常。
这些实验结果确立了指令部件在处理和执行微指令中的关键作用,为基础的计算机组成原理提供了验证。
● 个人感悟
通过这次实验,我对计算机指令处理的基本原理和硬件实现有了更深入的理解。实验中的每一步都强化了我对计算机体系结构及其构件之间相互关系的认识,特别是在指令寄存器和程序计数器的功能与操作上。
此外,我对硬件之间的时序控制与信号传递有了更加直观的理解。在实际构建和调试过程中,动态的观察信号变化及其对系统状态的影响,让我感受到了硬件设计中的细致与严谨。通过实验,我意识到理论知识与实际操作之间的密切联系,这让我在进行未来更复杂的项目时更加自信。
接下来的学习中,我希望能够深入探讨更复杂的指令系统设计及其在现代计算机中的实用性的更多应用,为进一步的研究和开发奠定基础。
相关文章:
计算机组成原理实验(7) 堆指令部件模块实验
实验七 堆指令部件模块实验 一、实验目的 1、掌握指令部件的组成方式。 2、熟悉指令寄存器的打入操作,PC计数器的设置和加1操作,理解跳转指令的实现过程。 二、实验要求 按照实验步骤完成实验项目,掌握数据打入指令寄存器IR1、PC计数器的…...
Windows系统下Node.js环境部署指南:使用nvm管理多版本
Windows系统下Node.js环境部署指南:使用nvm管理多版本 一、Node.js介绍二、为什么需要nvm?三、安装前的准备工作1. 本次环境说明2. 卸载现有Node.js(如有) 三、nvm-windows安装步骤1. 下载安装包2. 安装过程3. 验证安装 四、使用n…...
数据结构*队列
队列 什么是队列 是一种线性的数据结构,和栈不同,队列遵循“先进先出”的原则。如下图所示: 在集合框架中我们可以看到LinkedList类继承了Queue类(队列)。 普通队列(Queue) Queue中的方法 …...
C语言蓝桥杯真题代码
以下是不同届蓝桥杯C语言真题代码示例,供参考: 第十三届蓝桥杯省赛 C语言大学B组 真题:卡片 题目:小蓝有很多数字卡片,每张卡片上都是数字1-9。他想拼出1到n的数列,每张卡片只能用一次,求最大的…...
Sharding-JDBC分库分表中的热点数据分布不均匀问题及解决方案
引言 在现代分布式应用中,使用Sharding-JDBC进行数据库的分库分表是提高系统性能和扩展性的常见策略。然而,在实际应用中,某些特定的数据(如最新订单、热门商品等)可能会成为“热点”,导致这些部分的数据处…...
Dagster中的Ops与Assets:数据管道构建的两种选择
Dagster是一个强大的数据编排平台,它提供了多种工具来帮助数据工程师构建可靠的数据管道。在Dagster中,Ops和Assets是两种核心概念,用于定义数据处理逻辑。本文将全面介绍Ops的概念、特性及其使用方法,特别补充了Op上下文和Op工厂…...
thonny提示自动补全功能
THONNY IDE 自动补全功能配置 在 Thonny IDE 中启用和优化自动补全功能可以显著提升编程体验。为了确保该功能正常工作,需要确认几个设置选项。 配置自动补全 Thonyy IDE 的自动补全默认情况下是开启的。如果发现自动补全未按预期运行,可以通过调整首选…...
PyTorch_阿达玛积
阿达玛积指的是矩阵对应位置的元素相乘,可以使用乘号运算符,也可以使用mul函数来完成计算。 代码 import torch import numpy as np # 1. 使用 mul 函数 def test01():data1 torch.tensor([[1, 2], [3, 4]])data2 torch.tensor([[5, 6], [7, 8]])dat…...
蓝桥杯 摆动序列
摆动序列 原题目链接 题目描述 如果一个序列的奇数项都比前一项大,偶数项都比前一项小,则称为一个摆动序列。 即对于任意整数 i(i ≥ 1)满足: a₂ᵢ < a₂ᵢ₋₁,a₂ᵢ₊₁ > a₂ᵢ 小明想知道&…...
AI 与生物技术的融合:开启精准医疗的新纪元
在科技飞速发展的今天,人工智能(AI)与生物技术的融合正在成为推动医疗领域变革的重要力量。精准医疗作为现代医学的重要发展方向,旨在通过深入了解个体的基因信息、生理特征和生活方式,为患者提供个性化的治疗方案。AI…...
三、shell脚本--运算符与表达式:让脚本学会“思考”
一、算术运算符:加减乘除取模 在我们写shell脚本时,做点基本的数学运算还是经常需要的。常用的算术运算符跟我们平时学的一样: : 加- : 减* : 乘 (小提示:有时候在某些命令里可能需要写成 \*)/ : 除 (在 Shell 里通常是取整数部分…...
c++ 指针参数传递的深层原理
指针参数传递的深层原理 理解为什么可以修改指针指向的内容但不能直接修改指针本身,需要深入理解指针在内存中的表示方式和函数参数传递机制。 1. 指针的内存表示 指针本质上是一个变量,它存储的是另一个变量的内存地址。在内存中: 假设有…...
【查看.ipynp 文件】
目录 如何打开 .ipynb 文件? 如果确实是 .ipynp 文件: .ipynp 并不是常见的 Jupyter Notebook 文件格式。通常,Jupyter Notebook 文件的扩展名是 .ipynb(即 Interactive Python Notebook)。如果你遇到的是 .ipynb 文…...
C++ 简单工厂模式详解
简单工厂模式(Simple Factory Pattern)是最简单的工厂模式,它不属于GoF 23种设计模式,但它是工厂方法模式和抽象工厂模式的基础。 概念解析 简单工厂模式的核心思想是: 将对象的创建逻辑集中在一个工厂类中 客户端不…...
ubuntu使用apt安装软件
1、使用apt list |grep jdk查看要安装的软件 此处以jdk为例 2、执行名称:安装指定版本的软件 sudo apt install openjdk-11-jdk...
TFT(薄膜晶体管)和LCD(液晶显示器)区别
TFT(薄膜晶体管)和LCD(液晶显示器)是显示技术中常见的术语,二者既有联系又有区别。以下是它们的核心区别和关系: 1. 基本概念 LCD(液晶显示器) LCD是一种利用液晶材料特性控制光线通…...
【文献阅读】中国湿地随着保护和修复的反弹
一、研究背景 滨海湿地是全球最具生态价值的生态系统之一,广泛分布在河口、潮间带、泻湖和盐沼等地带,在调节气候、水质净化、生物栖息以及防止海岸侵蚀等方面发挥着关键作用。然而,近年来滨海湿地正面临严峻威胁,全球估计约有50%…...
用Ensaio下载GIS数据
文章目录 简介重力场绘制 简介 Ensaio在葡萄牙语中是随笔的意思,是一个用于下载开源数据集的python库。其底层基于Pooch来下载和管理数据。 Ensaio可通过pip或者conda来安装 pip isntall ensaio conda install ensaio --channel conda-forge由于这个库功能较为单…...
【算法基础】递归算法 - JAVA
一、递归基础 1.1 什么是递归算法 递归算法是一种通过函数调用自身来解决问题的方法。简单来说,就是"自己调用自己"。递归将复杂问题分解为同类的更简单子问题,直到达到易于直接解决的基本情况。 1.2 递归的核心要素 递归算法由两个关键部…...
连续变量与离散变量的互信息法
1. 互信息法简介 互信息(Mutual Information, MI) 是一种衡量两个变量之间相互依赖程度的统计量,它来源于信息论。互信息可以用于评估特征与目标变量之间的相关性,无论这些变量是连续的还是离散的。互信息法是一种强大的特征选择…...
java_Lambda表达式
1、背景 lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式和一个代码块)。La…...
Python Cookbook-6.17 NuIl对象设计模式的实现
任务 你想减少代码中的条件声明,尤其是针对特殊情况的检查。 解决方案 一种常见的代表“这里什么也没有”的占位符是 None,但我们还可以定义一个类,其行为方式和这种占位符相似,而且效果更好: class Null(object):Null对象总是…...
Java接口全面教程:从入门到精通
目录 接口的基本概念 接口的特性 1. 访问修饰符 2. 接口中的常量 3. 接口中的方法 3.1 抽象方法(传统用法) 3.2 默认方法(Java 8 引入) 3.3 静态方法(Java 8 引入) 3.4 私有方法(Java …...
Power Query精通指南3:数据库(查询折叠与数据隐私)、批量合并文件、自定义函数
文章目录 九、批量合并文件9.1 案例背景9.2 合并文件的标准流程9.3 示例:合并文件9.3.1 连接到文件夹9.3.1.1 连接到本地 / 网络文件夹9.3.1.2 连接到 SharePoint 文件夹9.3.1.3 连接到 OneDrive for Business9.3.1.4 连接到其他文件系统 9.3.2 筛选文件9.3.3 合并文…...
Python 学习
这里主要是为了记录我学习Python的过程,更多是使我规范书写Pyhton语言! 1. 第一章 Python 定义:一种解释型的语言,区别于其他的高级语言,逐行翻译进行执行。 过程:首先编写编程语言,利用Pytho…...
生成式 AI 的优势
在科技飞速发展的今天,人工智能已经不再是一个遥不可及的概念,而是逐渐渗透到我们生活的方方面面。其中,生成式 AI 更是如同一颗璀璨的新星,在人工智能的浩瀚星空中闪耀着独特的光芒。它究竟有哪些令人瞩目的优势,又为何会成为我们这个时代无法忽视的存在呢? 生成式 AI …...
Hal库下备份寄存器
首先要确保有外部电源给VBAT供电 生成后应该会有这两个文件(不知道为什么生成了好几次都没有,复制工程在试一次就有了) 可以看到stm32f407有20个备份寄存器 读写函数 void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t Backup…...
P1537 数字反转(升级版)详解
这个题目还是对于新手比较锻炼思维严谨性的,我认为是在我做过的一些题目中,此题算上等马 先看题目 我先说明我自己的思路,以及这个题目你需要特别注意的地方 1,数字反转,①可用<algorithm>库里面的reverse函数…...
operator 可以根据需要重载 == 运算符进行比较
要将 vector<AppInfo> 类型的 A 和 B 两个容器进行比较,并且当 B 中有 A 中没有的元素时,插入到数据库中,你可以通过以下步骤实现: 比较元素:遍历 vector<B>,检查每个元素是否在 vector<A&…...
网格不迷路:用 CSS 网格生成器打造完美布局
前言 你是否曾因写错 grid-template-areas 而捶键盘?是否在面对千层嵌套的复杂布局时,瞬间怀疑人生,甚至思考要不要转行去卖奶茶?别慌,CSS 网格生成器闪亮登场,像拼乐高一样,帮你轻松搭建网页结构,还能自动输出干净代码,堪称“前端界的乐高大师”。让我们放下枯燥的代…...
Go小技巧易错点100例(二十八)
本期分享: 1. runtime.Caller(1)获取调用者信息 2. for循环 select{}语法 正文: runtime.Caller(1)获取调用者信息 在 Go 语言中,runtime.Caller(1) 是 runtime 包提供的一个函数,用于获取当前 goroutine 的调用堆栈中的特定…...
Java变量简介
Java变量 -为什么需要变量? 一个程序就是一个世界 变量是程序的基本组成单位 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位,比如: //变量有三个基本要素(类型+名称+值) class Test{public static void main(String [largs){int a=1;int b=3:b=89;Syst…...
Java快速上手之实验六
1. 编写ItemEventDemo.java,当选中或取消选中单选钮、复选钮和列表框时显示所选的结果。 2.编写GUIExample.java,当选中或取消选中单选钮、复选钮时在标签中显示相应结果。 import javax.swing.*; import java.awt.*; import java.awt.event.…...
【算法应用】基于灰狼算法优化深度信念网络回归预测(GWO-DBN)
目录 1.深度信念网络(Deep Belief Networks, DBNs)2.灰狼算法GWO原理3.结果展示4.参考文献5.代码获取6.读者交流 1.深度信念网络(Deep Belief Networks, DBNs) 深度信念网络(Deep Belief Networks, DBNs)是…...
基于Spring Boot实现STDIO通信的MCP Server与验证
STDIO 是一种基于标准输入输出(Standard Input/Output)的本地通信机制,旨在实现客户端与服务端之间的高效交互。 STDIO 是 MCP 协议支持的传输方式之一,通过操作系统的管道机制(stdin/stdout)进行数据传输,适用于客户端与服务端在同一台机器上的本地通信场景。 本篇基于…...
springboot基于推荐算法的景点推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 本景点推荐系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Java进行编写,使用了协同过滤推荐算法和Spring Boot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。前台主要功能包括:用户…...
【LeetCode Hot100】栈篇
前言 本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。 20. 有效的括号 一句话题意 验证括号序列有效性。 一句话…...
IO模型和多路复用
一、IO模型的基础理解 什么是IO? IO全称是 Input/Output(输入/输出),在计算机科学里主要指程序与外部设备(硬盘、网络、用户终端等)进行数据交换的操作。首要特点是: IO通常很慢(从CPU和内存的视角看)经常需要等待外部设备响应1. 为什么要谈IO模型? 当一个程序需要…...
私人医生通过AI分析基因数据,是否有权提前告知癌症风险?
首席数据官高鹏律师团队编著 在精准医疗的浪潮中,私人医生借助AI技术解析基因数据、预判癌症风险,已成为高端医疗服务的“隐形标配”。然而,这一技术的光环之下,潜藏着法律与伦理的复杂博弈——医生是否有权基于AI的基因分析提前…...
day 11 超参数调整
一、内参与外参(超参数) 内参是模型为了适应训练数据而自动调整的,是模型内部与训练数据紧密相关的因素,不同的训练数据会导致模型学习到不同的参数值,这些参数在模型训练完成后就固定下来。 超参数是在模型训练前需…...
纯Java实现STDIO通信的MCP Server与客户端验证
在 MCP 协议中通过 STDIO(标准输入/输出)通信 是一种进程间通信(IPC)方式,服务器与客户端通过标准输入(stdin)和标准输出(stdout)交换数据。 关于STDIO 详细介绍以及如何基于Spring Boot项目实现 STDIO 的MCP服务器 以及如何调用和验证服务器可以参考: 基于Spring …...
Vue3学习笔记2——路由守卫
路由守卫 全局 router.beforeEach((to, from, next) > {})router.afterEach((to, from, next) > {}) 组件内守卫 beforeRouteEnter((to, from, next) > {})beforeRouteUpdate((to, from, next) > {})beforeRouteLeave((to, from, next) > {}) 路由独享 be…...
Three.js在vue中的使用(二)-加载、控制
在 Vue 中使用 Three.js 加载模型、控制视角、添加点击事件是构建 3D 场景的常见需求。下面是一个完整的示例,演示如何在 Vue 单文件组件中实现以下功能: 使用 GLTFLoader 加载 .glb/.gltf 模型添加 OrbitControls 控制视角(旋转、缩放、平移…...
【堆】最大堆、最小堆以及GO语言的实现
堆是计算机科学中一种特别的完全二叉树结构,在优先队列、图算法和排序算法中有广泛应用。本文将从概念、原理和实现等方面详细介绍堆这一重要的数据结构。 1. 堆的基本概念 1.1 什么是堆? 堆(Heap)是一种特殊的完全二叉树&…...
动态规划之路劲问题3
解析题目: 跟之前路径题目大概一样,从左上角到右下角,每一步只能向下或者向右,而且每次走出来血量必须大于0(注意这一点,否则容易导致每次出来可能小于0就可能错) 算法分析: 状态…...
学习黑客网络安全法
在正式“开荒”各种黑客工具前,Day 4 的任务是给自己装上一副合规与伦理的“护身铠”。这一小时你将弄懂——做渗透想合法必须先拿授权、哪些法律条款碰不得、等保 2.0 与关基条例为何对企业像副“主线任务”;同时动手把这些要点制成一张“法律速查卡”&…...
节流 和 防抖的使用
节流(Throttle)是一种常用的性能优化技术,用于限制函数的执行频率,确保在一定时间内只执行一次。它常用于处理浏览器事件(如滚动、窗口调整大小、鼠标移动等),以避免因事件触发过于频繁而导致的…...
关于项目中优化使用ConcurrentHashMap来存储锁对象
方案介绍 在开发用户创建私有空间功能时,我们的规则是一个用户最多只能创建一个私有空间。 在最初方案中,我是采用字符串常量池的方式存储锁对象useID。通过intern方法保证 同一用户ID的锁 唯一性。这一方案存在的问题是: 随着userId越来越…...
Java 网络安全新技术:构建面向未来的防御体系
一、Java 安全架构的演进与挑战 1.1 传统安全模型的局限性 Java 平台自 1995 年诞生以来,安全机制经历了从安全管理器(Security Manager)到 Java 平台模块系统(JPMS)的演进。早期的安全管理器通过沙箱模型限制不可信…...
【在Spring Boot中集成Redis】
在Spring Boot中集成Redis 依赖在application.yml中配置Redis服务地址创建Redis配置类缓存工具类使用 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency&…...