“为了有钱吃饭,暂且当牛做马。”一个网络安全工程师的一天

“这两天任务很重咱们该提加班就提,我和领导都会批的。 ”

在这里插入图片描述

我转头看向一起干活的几个哥们,大家苦笑,客户这话自然不是说给我们听的,而是说给他们内部自己人听的,而我们这群他口中的“重要外部支持力量”,平时发个烧和他请个假他都能暴跳如雷。

开完会后大家无精打采的站在走廊,盘算着要不要辞职,不辞吧,哪干的下去呢?辞?兜里的几个子不够吃几顿外卖的。

最终决定窝囊的敲下这篇文章,替自己,替一起干活的四位哥们,出出窝囊气。
在这里插入图片描述

日常工作

安全工程师的一天从一个六点五十分的闹钟开始,自从客户严抓考勤之后还得提前个五分钟到,不然算态度不积极,还得预留多五分钟在门口吃早餐,吃?也算时间哦!

每天都会路过一个“女大创业早餐店”,看着也二十七八了,是不是女大也不知道,比咱年纪都大了,可能是留级了吧,人也是真的漂亮,看多两眼感觉技术都长进了,就是卖的东西忒贵,一个三明治十来块。

紧赶慢赶踩点到了办公室,想划划水去某社区签个到领点币,到时候换点垃圾袋什么的,客户马上就发通知了:

​ ——请全体成员8:30到会议室集合,召开XXX会议,会议重要,请…(一堆废话咱就不看了)。

拿着笔记本找到一个角落的座位坐下,欸,今天怎么连茶都没有了?我问旁边的哥们,哥们告诉我外包从今天开始没茶喝了,自己摸鱼的时候偷偷去楼下喝两口再上来吧…

开会开到一半老大说有个策略出问题了,悄咪咪下来看,不要惊动客户…

悄咪咪排查了二十分钟后问题总算是有眉目了,这事客户又打电话过来:“上个厕所这么久?赶紧回来开会!还想不想进步了。”

好吧,进步去。

从早上8:30-中午12:30,总算能吃上一口冷掉的外卖了,比外卖更让人心凉的是客户的新通知:

​ ——由于早上的会议未能讨论出成果,下午3:10会议继续。

脑子里此时回忆起来的是公司给我培训时对我的警告,做安全工作要打起十二分的精神,一不留神就可能有牢狱之灾。

要不跟客户说报勾吧,把我逮起来也说不定更好。

我也不大清楚中间到底发生了什么,只觉得一回忆起来就犯恶心、直抽抽,中间既不给片刻休息,也顺带忽略了晚饭这件事,我只好在敲文的时候忽略这段难忘的经历,以确保我的心情不会更低落。我只记得我走出会议室,坐电梯下楼的时候已经9:10了。

临下班前跟我玩的最好的C师傅掏出一个凉了的茶叶蛋:“给你留了一个,我刚才出来抽了根烟偷偷吃了一个,别操心那么多了,哈哈。”

我接了过来,吃了下去,C师傅很贴心的给我去了壳,嗯,却是凉了。

凉了的不知道是心还是蛋。

操的也不知道是心还是蛋。

在这里插入图片描述
好了,今日话题到此结束,生活再难,工作还要继续,如果你也想学习网络安全或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

黑客&网络安全如何学习**

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。

内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
图片

3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

在这里插入图片描述

4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

在这里插入图片描述

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以在下方优快云官方认证二维码免费领取【保证100%免费】

请添加图片描述

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传优快云,朋友们如果需要可以在下方优快云官方认证二维码免费领取【保证100%免费】

请添加图片描述

<think>我们创建一个简单的计分板,用于展示8名选手的排名、得分和总分。 需求: - 记录8名选手的排名(根据总分排序) - 记录每位选手的得分(可能是多个项目的得分)和总分 - 计分板需要清晰展示 设计: - 使用HTML表格,每一行代表一名选手 - 列包括:排名、选手编号、姓名(可选)、多个得分项、总分 - 支持动态更新选手得分,并自动重新排名 我们将创建一个包含以下列的表格: 排名(Rank)、选手ID(ID)、姓名(Name)、得分项1(Score1)、得分项2(Score2)、总分(Total) 由于问题中没有指定具体的得分项数量,这里假设有两个得分项(如技能测试和综合展示),但我们可以根据需要调整。 步骤: 1. 创建HTML结构,包括表格 2. 使用JavaScript来存储选手数据,并实现排序(根据总分) 3. 提供更新得分的功能(这里为了简化,我们不提供编辑界面,而是通过预设数据模拟) 注意:为了简化,我们将数据存储在数组中,每次更新数据后重新渲染表格。 代码结构: - 定义8名选手的初始数据(包括id,姓名,各项得分) - 一个函数用于计算每位选手的总分 - 一个函数用于根据总分排序(降序),并确定排名(注意并列排名) - 一个函数用于渲染表格(根据当前数据重新生成表格内容) 由于要求代码简短,我们将尽量精简。 实现: 我们将创建一个数组来存储选手数据。每个选手是一个对象,包含:id, name, scores(一个数组),total。 初始化时,我们计算总分,然后排序并赋予排名。 注意:排名规则:总分相同则排名相同,但后续排名会跳过并列的人数。例如:两个并列第一,则下一个是第三名。 但是为了简单,我们先不考虑并列,直接按总分排序,排名按顺序(总分相同按其他规则?题目没有说明,这里我们先按总分排序,相同则按选手id排序,然后排名按顺序1,2,3...) 如果要求并列,则稍微复杂,这里我们先不考虑并列,按顺序排名。 我们将创建一个函数updateScoreboard(),该函数会: - 计算每个选手的总分(如果还没计算) - 按总分降序排序(如果总分相同,我们暂且按id升序) - 生成表格内容 然后我们调用这个函数来初始化。 由于问题要求尽量简短,我们将不使用编辑功能,而是固定数据。如果需要编辑,可以后续扩展。 下面开始编写代码: </think># 8名选手计分板实现 下面是一个简洁但功能完整的HTML计分板,用于记录8名选手的排名、得分和总分: ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>选手计分板</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #1a2a6c, #b21f1f, #1a2a6c); color: white; padding: 20px; min-height: 100vh; } .container { max-width: 1000px; margin: 0 auto; background: rgba(0, 0, 0, 0.7); border-radius: 15px; padding: 20px; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); } header { text-align: center; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 3px solid #ffcc00; } header h1 { font-size: 42px; margin-bottom: 5px; text-shadow: 0 0 10px rgba(255, 204, 0, 0.7); letter-spacing: 2px; } .controls { display: flex; justify-content: center; gap: 15px; margin-bottom: 20px; flex-wrap: wrap; } button { background: linear-gradient(to bottom, #ffcc00, #ff9900); border: none; border-radius: 50px; color: #1a2a6c; padding: 10px 20px; font-weight: bold; cursor: pointer; transition: all 0.3s; min-width: 120px; font-size: 16px; } button:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(255, 204, 0, 0.4); } table { width: 100%; border-collapse: collapse; margin-top: 20px; background: rgba(255, 255, 255, 0.07); border-radius: 10px; overflow: hidden; } th { background: linear-gradient(to right, #ff9900, #ffcc00); color: #1a2a6c; padding: 15px; text-align: center; font-size: 18px; } tr:nth-child(even) { background: rgba(255, 255, 255, 0.05); } tr:hover { background: rgba(255, 204, 0, 0.15); } td { padding: 15px; text-align: center; font-size: 18px; } .medal { display: inline-block; width: 30px; height: 30px; border-radius: 50%; text-align: center; line-height: 30px; font-weight: bold; margin-right: 10px; } .gold { background: linear-gradient(to bottom, #ffd700, #ff9800); } .silver { background: linear-gradient(to bottom, #c0c0c0, #808080); } .bronze { background: linear-gradient(to bottom, #cd7f32, #8c4a1f); } .podium { display: flex; justify-content: center; gap: 20px; margin: 30px 0; height: 220px; align-items: flex-end; } .podium-place { flex: 1; max-width: 200px; background: linear-gradient(to bottom, #ffcc00, #ff9900); padding: 20px; border-radius: 10px 10px 0 0; text-align: center; position: relative; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); } .podium-place.first { height: 200px; background: linear-gradient(to bottom, #ffd700, #ff9800); } .podium-place.second { height: 150px; background: linear-gradient(to bottom, #c0c0c0, #808080); } .podium-place.third { height: 120px; background: linear-gradient(to bottom, #cd7f32, #8c4a1f); } .podium-name { font-weight: bold; font-size: 20px; margin-top: 10px; } .podium-score { font-size: 24px; font-weight: bold; } .total-display { text-align: center; font-size: 24px; margin-top: 20px; padding: 15px; background: rgba(255, 204, 0, 0.2); border-radius: 10px; } @media (max-width: 768px) { .podium { flex-direction: column; align-items: center; height: auto; } .podium-place { width: 80%; height: 80px !important; } .controls { flex-direction: column; } button { width: 100%; } } </style> </head> <body> <div class="container"> <header> <h1>选手计分板</h1> <p>记录选手排名、得分和总分</p> </header> <div class="controls"> <button id="randomScore">随机得分</button> <button id="resetScores">重置计分</button> <button id="sortRank">按排名排序</button> </div> <div class="podium"> <div class="podium-place first"> <div>🥇 第一名</div> <div class="podium-name">选手1</div> <div class="podium-score">85分</div> </div> <div class="podium-place second"> <div>🥈 第二名</div> <div class="podium-name">选手3</div> <div class="podium-score">78分</div> </div> <div class="podium-place third"> <div>🥉 第三名</div> <div class="podium-name">选手5</div> <div class="podium-score">70分</div> </div> </div> <div class="total-display"> 当前最高分:<span id="maxScore">85</span>分 | 平均分:<span id="avgScore">68.88</span>分 </div> <table> <thead> <tr> <th>排名</th> <th>选手编号</th> <th>技能测试</th> <th>综合展示</th> <th>总分</th> </tr> </thead> <tbody id="scoreTable"> <!-- 表格内容将由JavaScript生成 --> </tbody> </table> </div> <script> // 选手数据 const players = [ { id: 1, name: "选手1", skillScore: 85, displayScore: 0, total: 85 }, { id: 2, name: "选手2", skillScore: 70, displayScore: 0, total: 70 }, { id: 3, name: "选手3", skillScore: 78, displayScore: 0, total: 78 }, { id: 4, name: "选手4", skillScore: 65, displayScore: 0, total: 65 }, { id: 5, name: "选手5", skillScore: 75, displayScore: 0, total: 75 }, { id: 6, name: "选手6", skillScore: 60, displayScore: 0, total: 60 }, { id: 7, name: "选手7", skillScore: 68, displayScore: 0, total: 68 }, { id: 8, name: "选手8", skillScore: 72, displayScore: 0, total: 72 } ]; // 渲染计分表格 function renderScoreTable() { const tableBody = document.getElementById('scoreTable'); tableBody.innerHTML = ''; // 计算排名(按总分排序) const sortedPlayers = [...players].sort((a, b) => b.total - a.total); // 更新领奖台 document.querySelector('.first .podium-name').textContent = sortedPlayers[0].name; document.querySelector('.first .podium-score').textContent = sortedPlayers[0].total + '分'; document.querySelector('.second .podium-name').textContent = sortedPlayers[1].name; document.querySelector('.second .podium-score').textContent = sortedPlayers[1].total + '分'; document.querySelector('.third .podium-name').textContent = sortedPlayers[2].name; document.querySelector('.third .podium-score').textContent = sortedPlayers[2].total + '分'; // 计算最高分和平均分 const maxScore = Math.max(...players.map(p => p.total)); const avgScore = (players.reduce((sum, player) => sum + player.total, 0) / players.length).toFixed(2); document.getElementById('maxScore').textContent = maxScore; document.getElementById('avgScore').textContent = avgScore; // 渲染表格 sortedPlayers.forEach((player, index) => { const row = document.createElement('tr'); // 添加奖牌标识 let rankDisplay = (index + 1).toString(); if (index === 0) rankDisplay = '<span class="medal gold">🥇</span>' + (index + 1); else if (index === 1) rankDisplay = '<span class="medal silver">🥈</span>' + (index + 1); else if (index === 2) rankDisplay = '<span class="medal bronze">🥉</span>' + (index + 1); row.innerHTML = ` <td>${rankDisplay}</td> <td>${player.name}</td> <td>${player.skillScore}</td> <td>${player.displayScore}</td> <td><strong>${player.total}</strong></td> `; tableBody.appendChild(row); }); } // 随机生成得分 document.getElementById('randomScore').addEventListener('click', function() { players.forEach(player => { player.skillScore = Math.floor(Math.random() * 50) + 50; player.displayScore = Math.floor(Math.random() * 10); player.total = player.skillScore + player.displayScore; }); renderScoreTable(); }); // 重置计分 document.getElementById('resetScores').addEventListener('click', function() { players.forEach(player => { player.skillScore = player.id * 10; player.displayScore = 0; player.total = player.skillScore; }); renderScoreTable(); }); // 按排名排序(已默认按排名排序) document.getElementById('sortRank').addEventListener('click', renderScoreTable); // 初始渲染 renderScoreTable(); </script> </body> </html> ``` ## 功能说明 这个计分板具有以下功能: 1. **选手信息展示**: - 显示8名选手的排名、编号、技能测试分、综合展示分和总分 - 前三名选手在领奖台区域突出显示 2. **计分规则**: - 总分计算公式:`总分 = 技能测试分 + 综合展示分` - 排名根据总分从高到低排序 3. **互动功能**: - 随机得分:为所有选手随机生成技能测试和综合展示得分 - 重置计分:恢复初始分数设置 - 按排名排序:刷新显示当前排名 4. **数据统计**: - 显示当前最高分和平均分 5. **响应式设计**: - 适配桌面和移动设备屏幕 此HTML文件可以直接保存并在浏览器中运行,无需任何外部依赖。计分板采用了体育赛事风格的视觉设计,具有动态更新的领奖台区域,使排名变化更加直观。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值