所谓断点调试
打开浏览器的开发者工具,找到Sources面板,在里面的网页源代码中可设置断点(单击某一行行号即可添加断点,再次单击即可取消)
在添加断点后,刷新网页,程序就会在断点的位置暂停,此时按F11键让程序单步执行,在旁边的Watch中可以观察变量的值的变化。
案例:生成 i 行 j 列的星星图案
var j = prompt('请输入列数:');
var str = '';
for(var x = 0; x < i; x++) {
for(var y = 0; y < j; y++) {
str += '*';
}
str += '\n';
}
console.log(str);
案例:生成九九乘法表
for(var i = 1; i <= 9; i++) {
for(var o = 1; o <= i; o++) {
console.log ('i' + '*' + 'o' + '=' + i * o + '\t' );
}
console.log ('\n');
}
📒3.1.2_while 语句
while 语句在条件表达式为 true 的前提下,循环执行指定的一段代码,直到条件表达式为 false 时结束循环。
while (条件表达式){
// 循环体
}
📙3.1.3_do…while 语句
do {
// 循环体
} while (条件表达式);
📕3.1.4_continue 关键字
该关键字可以在for、while 以及 do…while 循环体中使用
它用来**跳出本次循环**,也就是跳过了continue后面的代码
for(var i = 1; i <= 5; i++) {
if (i == 3){
continue; // 跳出本次循环,直到跳到 i++
}
console.log('我吃完了第' + i + '个苹果');
}
// 我吃完了第1个苹果
// 我吃完了第2个苹果
// 我吃完了第4个苹果
// 我吃完了第5个苹果
📘3.1.5_break 关键字
break 关键字可以用在 switch 语句和循环语句中,在循环语句中使用时,其作用是立即跳出整个循环,也就是循环即将结束。
for(var i = 1; i <= 5; i++){
if (i == 3){
break; // 跳出本次循环,直到跳到 i++
}
console.log('我吃完了第' + i + '个苹果');
}
// 我吃完了第1个苹果
// 我吃完了第2个苹果
📚3.2_数组
📓3.2.1_创建数组
第一种
var arr1 = new Array(); //空数组
var arr2 = new Array('苹果','橘子','香蕉','桃子'); //里面有4个元素
第二种
var arr3 = []; //空数组
var arr4 = ['苹果', '橘子', '香蕉', '桃子']; //里面有4个元素
在数组中保存各种常见的数据类型
var arr5 = [123,'abc',true,null,undefined];
在数组中保存数组
var arr6 = [12,[21,22],41];
📒3.2.2_数组长度
数组名.length
📚3.3_数组案例
📓3.3.1_修改数组长度
var arr = ['a','b','c'];
console.log(arr.length); //输出结果:3
var arr1 = [1,2];
arr1.length = 4; //大于原有长度
document.write(arr1); //输出结果: 1,2,,,
var arr2 = [1,2,3,4];
arr2.length = 2; //小于原有长度
document.write(arr2); //输出结果:1,2
var arr = [1];
arr.length = 4; // 修改数组的长度为4
console.log(arr); // 输出结果:(4)[1,empty*3]
console.log(arr[1]);// 输出结果:undefined
var arr = [1,2,,4];
console.log(arr); // 输出结果:(4)[1,2,empty,4]
var arr = new Array(4);
console.log(arr); // 输出结果:(4)[empty*4]
var arr = [1];
arr[3] = 4; // 向数组中添加一个元素,索引为3
console.log(arr); // 输出结果:(4)[1,empty*2,4]
📒3.3.2_新增或修改数组元素
var arr = ['red', 'green', 'blue'];
arr[3] = 'pink'; //新增元素
console.log(arr); //(4)["red","green","blue","pink"]
arr(0) = 'yellow'; //修改元素
console.log(arr); //(4)["yellow","green","blue","pink"]
📙3.3.3_筛选数组
将一个数组中所有大于或等于10的元素筛选出来
var arr = [2,0,6,1,77,0,52,0,25,7];
var newArr = [];
var j = 0;
for(var i = 0; i < arr.length; i++) {
if(arr[i] >= 10) {
newArr[j++] = arr[i]; //新数组索引号从0开始,依次递增
}
}
console.log(newArr); //输出结果:(3)[77,52,25]
📕3.3.4_删除指定的数组元素
删除数组中所有值为0的元素
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var newArr = [];
for (var i = 0;i < arr.length;i++){
if(arr[i] != 0){
newArr[newArr.length] = arr[i];
}
}
console.log(newArr); //输出结果:(7)[2,6,1,77,52,25,7]
📘3.3.5_反转数组元素排序
var arr = ['red','green','blue','pink','purple'];
var newArr = [];
for(var i = arr.length-1; i >= 0; i--) {
newArr[newArr.length] = arr[i];
}
// 输出结果:(5)["purple","pink","blue","green","red"]
console.log(newArr);
📚3.4_数组排序算法
📓3.4.1_冒泡排序
var arr = [10,7,5,27,98,31];
for(var i = 1; i < arr.length; i++){
for(var j = 0; j < arr.length-i; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
document.write(arr); // 输出结果:5,7,10,27,31,98(从小到大输出)
📒3.4.2_插入排序
var arr = [10, 8, 100, 31, 87, 70, 1, 88];
// 按照从小到大的顺序排列,先遍历无序数组下标
for (var i = 1; i < arr.length; i++){
// 遍历并比较一个无序数组元素与所有有序数组元素
for(var j = i; j > 0; j--){
if(arr[j-1] > arr[j]) {
var temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
document.write(arr); // 输出结果: 1,8,10,31,70,87,88,100
console.log(arr); // (8)
// 当定义数组时数字加上单引号或双引号时console.log输出: (8) ["1", "10", "100", "31", "70", "8", "87", "88"]
// 错误反例:
var arr = [10, 8, 100, 31, 87, 70, 1, 88];
// 按照从小到大的顺序排列,先遍历无序数组下标
for(var i = 1; i < arr.length; i++){
for(; i > 0; i--){
if(arr[i-1] > arr[i]){
var a = arr[i-1];
arr[i-1] = arr[i];
arr[i] = a;
}
}
}
console.log(arr);
// 内for循环里没有定义新的变量去赋值i而是直接用外for循环中的i,不会报错但会一直运行不会出现结果
📚3.5_二维数组
📓 3.5.1_创建二维数组
//使用Array创建数组
var info = new Array(
new Array('Tom',13,155),
new Array('Lucy',11,152)
);
console.log(info[0]); //输出结果:(3)["Iom",13,155]
console.log(info[0][0]);//输出结果:Tom
//使用“[]”创建数组
var nums = [[1,2], [3,4]];
console.log(nums[0]); //输出结果:(2) [1,2]
console.log(nums[1][0])//输出结果:3
如何自学黑客&网络安全
黑客零基础入门学习路线&规划
初级黑客
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、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
网络安全工程师企业级学习路线
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
一些笔者自己买的、其他平台白嫖不到的视频教程。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!