【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

news2025/4/6 7:52:53

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

文献来源:

文献分享阅读:

我用夸克网盘分享了「【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策.pdf」,点击链接即可保存。打开「夸克APP」在线查看,支持多种文档格式转换。
链接:夸克网盘分享
提取码:4vRm 

虚假数据注入攻击(FDIA)已被证明是对抗电力系统的严重安全挑战之一。这正成为电力公司日益关注的问题,最近引起了电力系统研究人员和工程师的注意。因此,电力系统运行和规划中的状态估计是监测和控制系统通过电表测量和电力系统拓扑估计电力系统最佳状态的重要和必不可少的工具。因此,本文提出了避免系统内不必要的完全停电的建模和对策。本文还考虑了输电和配电系统对FDIA的脆弱性。本文的结果可为制定针对电力系统网络漏洞的必要保护对策奠定基础。

原文摘要:

Abstract:

False Data Injection Attacks (FDIA) has been shown to be one of the serious security challenges combating power systems. This is becoming a grown concern to power utilities and has drawn the attention of power system researchers and Engineers in recent times. State estimation in power system operation and planning is therefore an important and an essential tool for monitoring and controlling the system to estimate the best state of the power system through meter measurements and power system topologies. This paper therefore presents the modeling and countermeasures for avoiding unnecessary total blackout within the system. The vulnerability of both the Transmission and the distribution power system to FDIA is also considered in this paper. The outcomes of this paper could serve as a basis for the development of necessary protective countermeasures against vulnerabilities within power system networks.

确保任何系统的数据完整性和安全性对于安全运行和保护系统免受操纵至关重要。随着传统电网被智能电网取代,这就构成了电网容易受到网络攻击的情况[1]。智能电网作为国家关键基础设施,是一个将网络和物理系统集成在一起的系统,该系统的不同部分之间不断通信。因此,确保数据完整性并保护系统免受操纵非常重要。物联网(IoT)的应用使通信链路和整个电力系统容易受到攻击。电网不能被描述为传统的网络系统,而是一个信息物理系统,其特征是网络和物理系统之间的通信或集成[2]。智能电网带来的进步在自动化、电网监控和管理、智能计量基础设施和客户端管理领域值得称赞。由此产生的电力系统的通信网络更容易受到入侵者的攻击和操纵[2]。

智能电网的一个重要元素是状态估计。状态估计的输入仅限于负载总线上的P,Q注入和电压控制总线上的PV值。需要状态估计有两个原因。首先,来自远程终端单元(RTU)和传感器等现场设备的测量被认为是有噪声的,并且包含一些误差。其次,在潮流的情况下,测量值包含一些变量,例如PQ线流,这些变量对于潮流计算不是必需的。因此,运行状态的最佳估计是通过状态估计获得的,并且该估计值在被接受之前需要进行统计分析[3]。

电力系统由能源管理系统(EMS)或监督控制和数据采集(SCADA)系统持续监测和控制,这些系统需要状态估计器的输入来维持电力系统的运行状态。SCADA系统从现场设备(如网络中的传感器)收集测量值。传感器测量值用作状态估计器的输入。状态估计器根据这些测量值估计电力系统的真实状态。状态估计器的输出是一些电压幅度和相位角。控制动作和能量管理系统依赖于状态估计器的输出,以实现电力系统的安全运行。因此,状态估计使用来自仪表测量的数据,计算这些测量的最佳估计值,然后将结果用于控制网格。因此,状态估计在电力系统监测和控制中起着重要作用[3] [4]。

状态估计给出了电力系统真实状态的估计,大多数控制动作、研究和系统操作都依赖于状态估计。对电力系统状态估计的攻击往往会危及电网。电力系统模型可以是交流或直流,其中交流模型同时考虑实际功率和无功功率,因此该模型的方程变为非线性。对于简化的直流模型,方程是线性的,不需要迭代。

电网对攻击的敏感性是由于电网作为网络物理系统的架构,通信链路更容易受到网络物理攻击。配备智能电表的先进计量系统基础设施的引入在实现智能电网方面发挥了重要作用。然而,由于电网上有许多输入或插座可用,系统就越脆弱[4]。

针对电网的攻击之一是虚假数据注入攻击(FDIA)。FDIA 是一种针对电力系统中状态估计的数据完整性攻击,攻击者会破坏传感器节点。大多数情况下,攻击者操纵和误导系统操作员发出不准确的命令,如果不快速检测和控制,会导致电力系统停电[6]。因此,FDIA的后果是重大设备故障和完全停电。通过破坏智能电表测量、传感器或远程终端单元 (RTU) 或侵入网络上的监控通信 [7],可能会注入虚假数据。

攻击者可以插入通常不会被BDD检测到的测量值[8]。了解电力系统的当前配置可能会导致BDD的当前实现无法检测到攻击,因为攻击者希望注入与估计状态密切相关的数据。大多数BDD技术基于最小加权平方法。了解电源系统配置肯定会违反这种方法。许多研究表明,保护一些战略性选择的仪表测量值,以防止FDIA [4],[9],[10]。确定一组仪表测量值,以便攻击者注入 FDA 所需的矢量受到限制是一种很好的做法。但是,这种方法不会完全使系统免受攻击,并且必须始终提供受保护传感器的测量值。对于实际系统,可能无法实现仪表免受攻击的绝对保护。由于SCADA设备和网络拓扑各不相同,因此正确监控系统以确定最合适的FDIA实施非常重要。因此,需要制定超越这些传统方法的检测方法,因为攻击者可以利用最小二乘法允许的误差范围之间的测量而不会被检测到[6]。

因此,考虑到电网作为国家关键基础设施的重要性以及FDIA对电力系统的严重影响,确保数据完整性和电网保护非常重要[5]。网络计算应用带来的自动化导致电网容易受到网络攻击。就像传统的网络系统一样,系统上可用的许多插座或连接链接往往会增加其漏洞[1]。针对状态估计的虚假数据注入攻击 (FDIA) 被证明是攻击者通过向电力系统注入错误或错误仪表测量来破坏电力系统运行的一种方式。

大多数系统参数(如系统稳定性和控制)都取决于状态估计。状态估计参数是做出基于系统的物理系统稳定性和控制决策所必需的。FDIA可能会误导系统运营商根据注入的数据做出不准确的决策。最近,已经证明虚假数据注入(FDI)攻击可以绕过当今EMS / SCADA系统中的错误数据检测(BDD)而不会被发现[2] [8] [11]。

📚2 运行结果

Del = 180/pi*del;
E2 = [V Del]; % Bus Voltages and angles..
disp('-------- State Estimation ------------------');
disp('--------------------------');
disp('| Bus |    V   |  Angle  | ');
disp('| No  |   pu   |  Degree | ');
disp('--------------------------');
for m = 1:num
    fprintf('%4g', m); fprintf('  %8.4f', V(m)); fprintf('   %8.4f', Del(m)); fprintf('\n');
end
disp('---------------------------------------------');

 

  

主函数代码:

% Power System State Estimation using Weighted Least Square Method..

num = 30; % IEEE - 14 or IEEE - 30 bus system..(for IEEE-14 bus system replace 30 by 14)...
ybus = ybusppg(num); % Get YBus..
zdata = zdatas(num); % Get Measurement data..
bpq = bbusppg(num); % Get B data..
nbus = max(max(zdata(:,4)),max(zdata(:,5))); % Get number of buses..
type = zdata(:,2); % Type of measurement, Vi - 1, Pi - 2, Qi - 3, Pij - 4, Qij - 5, Iij - 6..
z = zdata(:,3); % Measuement values..
fbus = zdata(:,4); % From bus..
tbus = zdata(:,5); % To bus..
Ri = diag(zdata(:,6)); % Measurement Error..
V = ones(nbus,1); % Initialize the bus voltages..
del = zeros(nbus,1); % Initialize the bus angles..
E = [del(2:end); V];   % State Vector..
G = real(ybus);
B = imag(ybus);

vi = find(type == 1); % Index of voltage magnitude measurements..
ppi = find(type == 2); % Index of real power injection measurements..
qi = find(type == 3); % Index of reactive power injection measurements..
pf = find(type == 4); % Index of real powerflow measurements..
qf = find(type == 5); % Index of reactive powerflow measurements..

nvi = length(vi); % Number of Voltage measurements..
npi = length(ppi); % Number of Real Power Injection measurements..
nqi = length(qi); % Number of Reactive Power Injection measurements..
npf = length(pf); % Number of Real Power Flow measurements..
nqf = length(qf); % Number of Reactive Power Flow measurements..

iter = 1;
tol = 5;

while(tol > 1e-4)
    
    %Measurement Function, h
    h1 = V(fbus(vi),1);
    h2 = zeros(npi,1);
    h3 = zeros(nqi,1);
    h4 = zeros(npf,1);
    h5 = zeros(nqf,1);
    
    for i = 1:npi
        m = fbus(ppi(i));
        for k = 1:nbus
            h2(i) = h2(i) + V(m)*V(k)*(G(m,k)*cos(del(m)-del(k)) + B(m,k)*sin(del(m)-del(k)));
        end
    end
    
    for i = 1:nqi
        m = fbus(qi(i));
        for k = 1:nbus
            h3(i) = h3(i) + V(m)*V(k)*(G(m,k)*sin(del(m)-del(k)) - B(m,k)*cos(del(m)-del(k)));
        end
    end
    
    for i = 1:npf
        m = fbus(pf(i));
        n = tbus(pf(i));
        h4(i) = -V(m)^2*G(m,n) - V(m)*V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
    end
    
    for i = 1:nqf
        m = fbus(qf(i));
        n = tbus(qf(i));
        h5(i) = -V(m)^2*(-B(m,n)+bpq(m,n)) - V(m)*V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
    end
    
    h = [h1; h2; h3; h4; h5];
    
    % Residue..
    r = z - h;
    
    % Jacobian..
    % H11 - Derivative of V with respect to angles.. All Zeros
    H11 = zeros(nvi,nbus-1);

    % H12 - Derivative of V with respect to V.. 
    H12 = zeros(nvi,nbus);
    for k = 1:nvi
        for n = 1:nbus
            if n == k
                H12(k,n) = 1;
            end
        end
    end

    % H21 - Derivative of Real Power Injections with Angles..
    H21 = zeros(npi,nbus-1);
    for i = 1:npi
        m = fbus(ppi(i));
        for k = 1:(nbus-1)
            if k+1 == m
                for n = 1:nbus
                    H21(i,k) = H21(i,k) + V(m)* V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
                end
                H21(i,k) = H21(i,k) - V(m)^2*B(m,m);
            else
                H21(i,k) = V(m)* V(k+1)*(G(m,k+1)*sin(del(m)-del(k+1)) - B(m,k+1)*cos(del(m)-del(k+1)));
            end
        end
    end
    
    % H22 - Derivative of Real Power Injections with V..
    H22 = zeros(npi,nbus);
    for i = 1:npi
        m = fbus(ppi(i));
        for k = 1:(nbus)
            if k == m
                for n = 1:nbus
                    H22(i,k) = H22(i,k) + V(n)*(G(m,n)*cos(del(m)-del(n)) + B(m,n)*sin(del(m)-del(n)));
                end
                H22(i,k) = H22(i,k) + V(m)*G(m,m);
            else
                H22(i,k) = V(m)*(G(m,k)*cos(del(m)-del(k)) + B(m,k)*sin(del(m)-del(k)));
            end
        end
    end
    
    % H31 - Derivative of Reactive Power Injections with Angles..
    H31 = zeros(nqi,nbus-1);
    for i = 1:nqi
        m = fbus(qi(i));
        for k = 1:(nbus-1)
            if k+1 == m
                for n = 1:nbus
                    H31(i,k) = H31(i,k) + V(m)* V(n)*(G(m,n)*cos(del(m)-del(n)) + B(m,n)*sin(del(m)-del(n)));
                end
                H31(i,k) = H31(i,k) - V(m)^2*G(m,m);
            else
                H31(i,k) = V(m)* V(k+1)*(-G(m,k+1)*cos(del(m)-del(k+1)) - B(m,k+1)*sin(del(m)-del(k+1)));
            end
        end
    end
    
    % H32 - Derivative of Reactive Power Injections with V..
    H32 = zeros(nqi,nbus);
    for i = 1:nqi
        m = fbus(qi(i));
        for k = 1:(nbus)
            if k == m
                for n = 1:nbus
                    H32(i,k) = H32(i,k) + V(n)*(G(m,n)*sin(del(m)-del(n)) - B(m,n)*cos(del(m)-del(n)));
                end
                H32(i,k) = H32(i,k) - V(m)*B(m,m);
            else
                H32(i,k) = V(m)*(G(m,k)*sin(del(m)-del(k)) - B(m,k)*cos(del(m)-del(k)));
            end
        end
    end
    
    % H41 - Derivative of Real Power Flows with Angles..
    H41 = zeros(npf,nbus-1);
    for i = 1:npf
        m = fbus(pf(i));
        n = tbus(pf(i));
        for k = 1:(nbus-1)
            if k+1 == m
                H41(i,k) = V(m)* V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
            else if k+1 == n
                H41(i,k) = -V(m)* V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
                else
                    H41(i,k) = 0;
                end
            end
        end
    end
    
    % H42 - Derivative of Real Power Flows with V..
    H42 = zeros(npf,nbus);
    for i = 1:npf
        m = fbus(pf(i));
        n = tbus(pf(i));
        for k = 1:nbus
            if k == m
                H42(i,k) = -V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n))) - 2*G(m,n)*V(m);
            else if k == n
                H42(i,k) = -V(m)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
                else
                    H42(i,k) = 0;
                end
            end
        end
    end
    
    % H51 - Derivative of Reactive Power Flows with Angles..
    H51 = zeros(nqf,nbus-1);
    for i = 1:nqf
        m = fbus(qf(i));
        n = tbus(qf(i));
        for k = 1:(nbus-1)
            if k+1 == m
                H51(i,k) = -V(m)* V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
            else if k+1 == n
                H51(i,k) = V(m)* V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
                else
                    H51(i,k) = 0;
                end
            end
        end
    end
    
    % H52 - Derivative of Reactive Power Flows with V..
    H52 = zeros(nqf,nbus);
    for i = 1:nqf
        m = fbus(qf(i));
        n = tbus(qf(i));
        for k = 1:nbus
            if k == m
                H52(i,k) = -V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n))) - 2*V(m)*(-B(m,n)+ bpq(m,n));
            else if k == n
                H52(i,k) = -V(m)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
                else
                    H52(i,k) = 0;
                end
            end
        end
    end
    
    % Measurement Jacobian, H..
    H = [H11 H12; H21 H22; H31 H32; H41 H42; H51 H52];
    
    % Gain Matrix, Gm..
    Gm = H'*inv(Ri)*H;
    
    %Objective Function..
    J = sum(inv(Ri)*r.^2);  
    
    % State Vector..
    dE = inv(Gm)*(H'*inv(Ri)*r);
    E = E + dE;
    del(2:end) = E(1:nbus-1);
    V = E(nbus:end);
    iter = iter + 1;
    tol = max(abs(dE));
end

CvE = diag(inv(H'*inv(Ri)*H)); % Covariance matrix..

Del = 180/pi*del;
E2 = [V Del]; % Bus Voltages and angles..
disp('-------- State Estimation ------------------');
disp('--------------------------');
disp('| Bus |    V   |  Angle  | ');
disp('| No  |   pu   |  Degree | ');
disp('--------------------------');
for m = 1:num
    fprintf('%4g', m); fprintf('  %8.4f', V(m)); fprintf('   %8.4f', Del(m)); fprintf('\n');
end
disp('---------------------------------------------');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]A. S. Alayande, N. Nwulu and A. E. Bakare, "Modelling and Countermeasures of False Data Injection Attacks Against State Estimation in Power Systems," 2018 International Conference on Computational Techniques, Electronics and Mechanical Systems (CTEMS), Belgaum, India, 2018, pp. 129-134, doi: 10.1109/CTEMS.2018.8769295.

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ Linux Web Server 面试基础篇-操作系统(一、Linux基础)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源,在开发的时候,一般选择前后端分离的方式,前端使用vue 后端使用SpringBoot,通常情况下,部署都是前端通过http去请求后端资源,涉及…

CVE-2021-27905 Apache Solr SSRF漏洞

预备知识 1. 漏洞信息 漏洞编号:CVE-2021-27905 漏洞名称:Apache Solr SSRF漏洞 漏洞描述:Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源…

在Claude穿越千年,问了孔子人生问题

📕如果大家还不知道Claude的话,可以先了解下,它是chatgpt最大的竞争对手。他有很多的知识,能做的事情也非常的多。 今天我们就让他用孔子的思想来跟我们对话,看看他会怎么回答我们的人生问题。 我们先问问他&#xf…

组播协议的RP

某组播网络示意图如图,其中MCS1是组播地址(G1)的组播源,PC1和PC2是组G1的接收者。 1.上述组播网络中,端口1、2、3需要运行哪些协议,为什么需要运行这些协议?(仅填必配的组播协议)详细写出具体原因 结合上述拓扑,考虑到存在RP场景,因此运行组播路由协议为PIM-SM协议,…

『pyqt5 从0基础开始项目实战』07. 次数清零与多行数据删除(保姆级图文)

目录 导包和框架代码 次数清零按钮添加绑定事件实现数据清零 数据删除按钮添加绑定事件实现删除功能完整代码总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 导包和框架代码 请…

GEE:Gmeans图像分割

G-means是一种聚类算法,它是基于K-means算法的改进版本。K-means算法的一个主要缺点是需要事先指定聚类的数量,而G-means算法则可以自动确定聚类的数量。 G-means算法使用了类似于K-means的迭代过程,但在每次迭代时,它会检查每个聚类是否可以继续细分为两个子聚类。这个检…

保护你的数字资产:网络安全的重要性和应对策略

网络安全已经成为现代企业和组织的重要问题。在数字化的时代,网络攻击和安全威胁的规模和复杂性不断增加,因此保护数字资产变得越来越重要。而Log360作为一款全面的网络安全解决方案,可以帮助企业识别、分析和应对网络安全威胁,从…

【PyTorch】第六节:乳腺癌的预测(二分类问题)

作者🕵️‍♂️:让机器理解语言か 专栏🎇:PyTorch 描述🎨:PyTorch 是一个基于 Torch 的 Python 开源机器学习库。 寄语💓:🐾没有白走的路,每一步都算数&#…

【SCI电气】考虑不同充电需求的电动汽车有序充电调度方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【Python】【进阶篇】二十、Python爬虫实现Cookie模拟登录

目录 二十、Python爬虫实现Cookie模拟登录20.1 注册登录20.2 分析网页结构20.3 编写完整程序 二十、Python爬虫实现Cookie模拟登录 在使用爬虫采集数据的规程中,我们会遇到许多不同类型的网站,比如一些网站需要用户登录后才允许查看相关内容&#xff0c…

【获奖案例巡展】信创先锋之星——甘肃省住房和城乡建设厅住建数据大脑

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量&#xff0…

推进数字化转型进程,AntDB数据库协同神州云动共促新发展

当今,数字化转型已成为企业发展的必由之路。随着新技术的不断发展和市场的日益竞争,越来越多的企业开始意识到数字化转型的重要性,在帮助企业数字化转型过程中,高效的客户关系管理软件和具有灵活性、可伸缩的数字底座,…

关于于pyreadline模块的py3k_compat.py的函数collections.Callable兼容性问题

上图警告的官网链接地址 上图警告信息是一个警告信息,提醒你在代码中使用了即将被弃用的函数或配置项,建议及时修改以避免在将来的版本中出现不兼容的情况。具体解释如下: 这段段警告信息来自于pyreadline模块的py3k_compat.py文件,提示你使用了collections模块中即将被弃用…

code=45, title=禁止登录, message=登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。

如果你是采用 java 开发的,你可以参考本文章,java 和 kotlin 都是可以相互转换的。 在解决之前,先说明环境: JDK版本:java version "17.0.3.1" 【Oracle JDK】 Kotlin版本:1.8.20 采取simbot核心包开发&am…

PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning论文学习

一、概述 Motivation:直接提升PLATO的size训练不work Methods: 通过curriculum learning技术来构建一个高质量的开放领域机器人第一阶段:coarse-gained generation model:再简单的one-to-one框架下学习粗力度的回复生成模型第二…

【Micropython】ESP8266驱动mpu6050读取数据

【Micropython】ESP8266驱动mpu6050读取数据 📌相关篇《【MicroPython ESP32】ssd1306驱动0.96“I2C屏幕mpu6050图形控制》 ✨本案例基于Thonny平台开发。✨ 🔖esp8266固件版本:MicroPython v1.19.1 on 2022-06-18 📍本篇需要使…

2023 年打破认知,这个开源 API 管理工具你应该知道

关于 API 管理工具,如今的市场已经把用户教育的差不多了,毫不夸张地说,如果我随机抽取一位幸运读者,他都能给我罗列出一二三四款大家耳熟能详的工具,但我今天还是要推荐这一款我上手后,亲测觉得不错的开源 …

深入浅出OpenGL三维渲染管线

1 前言 在计算机图形学中,渲染是根据模型描述在显示器上生成图像的过程。3D图形渲染管线输入根据图元顶点(如三角形、点、线和四边形)对3D模型的描述,并为显示器上的像素生成颜色值。 如下图所示的是3D图形渲染管线的流程。 3D图形渲染管线主要包含以…

JVM知识

类加载机制 虚拟机把class文件加载到内存,并对数据进行校验,转换解析和初始化,形成虚拟机可以直接使用的Java类型,即java.lang.class 装载(Load) ClassFile -> 字节流 ->类加载器 查找和导入class文件 1:通…