7-1 银行家算法--安全性检查 (20 分)(思路+详解+知识分析)宝 你今天 AC了吗(2)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取

1.这个题无语了简直了真是,不,应该是PTA这个平台让我真的无语了,我定义了一个变量 cnt 但我并未初始化为0 ,我在DEV-C中测试了好多数据其实也无妨正确结果,但是在PTA中提交一直显示答案错误,而且测试样例一直输出 找不到安全序列,真的一上午我真的想砸电脑,什么呀!! 最后坚持不懈,不信邪,终于让我发现一个大毛病,原来在PTA上变量必须初始化,否则系统自动给你赋值一个很大数 ,但在DEV-C上却没有任何问题

2.这个题还需要的是无论 是否可以得到安全序列,其都必须将其系统中各个进程的状态输出来

五:上码

===================================================================

/**

思路:1.首先我们进行安全性算法是为了预防死锁,再解释一下死锁 比如

1>:在系统中有两个进程p1,p2 和两个资源r1(扫描仪),r2(刻录机)

p1和p2都需要将扫描的文档通过刻录机刻录到CD盘上,

2>:进程p1先请求资源r1成功,进程p2请求资源r2成功,那么接下来,

p1又申请了r2资源 p2申请了r1资源,那么此时p1和p2都在等对方

释放资源那么就会发生死锁,两个进程都无法进行下去

2.那么安全性算法就是使系统在分配资源时候一直处在安全的状态(即不会发生死锁)

那么我们在分配资源的时候就有了算法,即最终分配给各个进程的资源,都不会影响到

整个系统的安全状态,这时会出现一个进程的执行序列

3.具体解释算法过程

1>:几个变量

Max:一个进程所需的最大资源量

Allocation:系统已经给其分配了多少资源

Need:这个进程还需要多少资源

Available:这个系统还剩多少资源

2>:刚开始设置work = Available 将所有进程设置为 finish = false (相当于定义一个flag)

3>:找一个进程满足下列的条件

finish = false

need <= work(需要的资源得比系统剩余的要少)

4>:如果 3>的条件满足的话,我们就需要

将work += Allocation (每个进程执行完后需要释放资源)

finish = true (代表该进程完成)

返回步骤 3>继续寻找满足上诉条件的进程

5>:思考如何判定此时的系统状态是安全还是不安全的

安全:如果 3>的条件不满足 即此时的所有进程的 finsh = true 说明了所有的进程已经完成

不安全: 我们已经判断了所有的finish = false 的进程,但是仍未找到满足条件的

need < work 那么可以判定此状态为 不安全的状态

,否则

那么就是说明该系统处在不安全的状态(即会发生死锁)

4.处理数据

1>:这里我们选取的数据结构是结构体数组因为一个进程他对应好多属性,所以选取的是结构体

在结构体的属性当中 我们设置一个 max[] 和 allocation[] 目的是存放多个不同类型资源

2>:关于node[i].a[j],node[i].b[j],node[i].c[j]的理解,就是3个二维数组 就是这样的

*/

#include<bits/stdc++.h>

using namespace std;

struct Node{

string processName;//进程名

int a[100];//Max

int b[100];//allocation

int c[100];//need

bool finish;

}node[1000];

//关于重写 sort方法中的两个参数 都表示是一个结构体(即我们需要用两个结构体当中的数据进行比较)

bool sort_c(Node node1,Node node2){

return node1.c[0] < node2.c[0];

}

int main(){

int N,M;

int cnt = 0;//用于记进程完成的个数

vectorv1;//存总的资源总量

vectorv2;//存need需要的资源

vectorv3;//记录最后需要输出的Available

cin >> N >> M;

for(int i = 0; i < M; i++){

int resources;

cin >> resources;

v1.push_back(resources);

}

for(int i = 0; i < N; i++){

cin >> node[i].processName;

//输入Max

for(int j = 0; j < M; j++){

cin >> node[i].a[j];

}

//输入allocation

for(int j = 0; j < M; j++){

cin >> node[i].b[j];

v1[j] -= node[i].b[j];//这里是每次减去分配的资源 那么剩下的最后就是 available

}

//求取need

for(int j = 0; j < M; j++){

node[i].c[j] = node[i].a[j] - node[i].b[j];

}

node[i].finish = false;//将每个进程初始状态设为 false

}

for(int i = 0; i < M; i++){

v3.push_back(v1[i]);

}

// sort(node,node+N,sort_c);

//算法核心部分

for(int i = 0; i < N; i++){

int count = 0;

for(int j = 0; j < M; j++){

if(node[i].c[j] <= v1[j]){

count++;

}else{

break;//只要有一个不合适就 break 出去

}

}

if(node[i].finish == false && count == M) {//count == M说明剩余的各个资源总量大于该进程的所需要的

for(int j = 0; j < M; j++){

v1[j] += node[i].b[j];//那么此时剩余的资源总量为原来的加上 该进程释放其占有的资源

}

node[i].finish = true;

cnt++;//记录完成进程的个数

// cout << node[i].processName << ’ ';

//此处牛逼之处在于 只要我们找到满足条件的就从-1开始继续寻找满足条件的

i = -1;

}

}

// cout << endl;

int flag = 0;

cout << “name max allocation need available” << endl;

for(int i = 0; i < N; i++){

cout << node[i].processName << ’ ';

for(int j = 0; j < M; j++){

cout << node[i].a[j] << ’ ';

}

cout << "| ";

for(int j = 0; j < M; j++){

cout << node[i].b[j] << ’ ';

}

cout << "| ";

for(int j = 0; j < M; j++){

cout << node[i].c[j] << ’ ';

}

cout << “|”;

if(flag == 0){

for(int j = 0; j < M; j++){

if(j == 0)

cout << ’ ’ <<v3[j];

else

cout << ’ ’ <<v3[j] ;

}

flag = 1;

}

cout << endl;

}

if(cnt == N){

cout << “找到安全序列,处于安全状态。”;

}else{

cout << “找不到安全序列,处于不安全状态。”;

}

// for(int i = 0; i < M; i++){

// cout << v1[i] << ’ ';

// }

// 验证数据

// for(int i = 0; i < N; i++){

//

// cout << node[i].processName << ’ ';

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值