《跟我一起学“网络安全”》——编程基础

编程基础

一、前言

在开始给大家讲解编程基础的时候呢,其实这一章的内容,也算是给自己埋了一个巨大的“坑”,没错,就是 “巨大的坑”。因为本章将会为大家介绍MySQL,html,css,js和Python相关的基础知识,为什么是基础,因为本章的内容,为后面的渗透测试在做基础,其实我本来不想写这一章的,但是我担心看我的这个系列的友友们,可能没有接触过编程(有编程基础的友友可以跳过这章),因此,就把我们渗透中,最简单、最基础的部分抽出来,组成了这一章。向大家介绍清楚这章的由来后,在给大家解释一下为什么是“巨大的坑”,因为在 《跟我一起学“网络安全”》 完结后,我可能会有 《跟我一起动手敲“C语言”》、 《跟我一起动手敲“Java”》、 《跟我一起动手敲“MySQL”》 等一系列的开发编程学习内容,到时候会详细的介绍每一种语言的具体用法以及小项目案例,届时,希望大家都来捧场❀❀❀。ok,废话不多说了,下面就让我们进入编程基础的学习吧!!!

二、MySqL数据库

  1. 数据库基本知识
  • 什么是数据库
    数据库(DB): 存储数据的仓库,数据是有组织的进行存储
  • 什么是数据库管理系统
    数据库管理系统(DBMS): 操纵和管理数据库的大型软件
  • 什么是SQL
    SQL(Structured Query Language): 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
  • 什么是关系型数据库
    关系型数据库: 建立在关系模型基础上,由多张相互连接的二维表组成的数据库
    特点:
    ①.使用表存储数据,格式统一,便于维护
    ②.使用SQL语言操作,标准统一,使用方便
    主流的关系型数据库有:Oracle、MySQL、SQL Server、PostgreSQL等,本章以MySQL作为用例,为大家介绍MySQL的一些基础知识。
  1. SQL
  • SQL通用语法
    ①.SQL语句可以单行或多行书写,以分号结尾
    ②.SQL语句可以使用空格/缩进来增强语句可读性
    ③.MySQL数据库的SQL语句不区分大小写
    ④注释:
    单行注释: – 注释内容 或 # 注释内容(MySQL特有)
    多行注释: /* 注释内容 */
  1. SQL分类
分类全称说明
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中的表的记录
DCLData Control Language数据控制语言,用来创建数据库用户、控制数据库的访问权限
  1. DDL(数据库定义语言)
  • 数据库操作
# 查询所有数据库
show databases;
# 查询当前数据库
select database();
# 创建
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
# 删除
drop database [if exists]数据库名;
# 使用
use 数据库名;
  • 表操作(查询)
# 查询当前数据库所有表
show tables;
# 查询表结构
desc 表名;
# 查询指定表的建表语句
show create table 表名;
  • 表操作(创建)
create table 表名(
    字段1 类型[comment 注释],
    字段2 类型[comment 注释],
    ...
    字段n 类型[comment 注释]
)[comment 表注释];

示例:

create table t_user(
    id int(11) comment "编号",
    name varchar(255) comment "姓名",
    age int(11) comment "年龄",
    sex int(11) comment "性别"
)

注意:[…]为可选参数,最后一个字段后面没有逗号

  • 数据类型
    数据类型1数据类型2
    数据类型3
  • 表操作(修改)
# 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释][约束];
# 修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
# 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释][约束];
# 删除字段
alter table 表名 drop 字段名;
# 修改表名
alter table 表名 rename to 新表名;
# 删除表
drop table [if exists] 表名;
# 删除指定表,并重新创建该表
truncate table 表名;

示例:

# 添加字段
alter table t_user add nickname varchar(20) comment "昵称";
# 修改字段
alter table t_user change name username varchar(30) comment "用户名";
# 删除字段
alter table t_user drop username;
# 修改表名
alter table t_user rename to t_account;
# 删除表(删除表时,会删除表中的所有数据)
drop table if exists t_account;
truncate teble t_account;
  1. DML(数据库操作语言)
    DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。

添加数据(insert)
修改数据(update)
删除数据(delete)

  • 插入
# 给指定字段添加数据
insert into 表名 (字段名1,字段名2,...) values (1,2,...);
# 给全部字段添加数据
insert into 表名 values (1,2,...);
# 批量添加数据
insert into 表名 (字段名1,字段名2,...) values (1,2,...),(1,2,...);
insert into 表名 values (1,2,...),(1,2,...);

注意:日期类型和字符串类型的数据应该包含在引号中

  • 更新
update 表名 set 字段名1 =1, 字段名2 =2,...[where 条件];

注意:修改语句的条件可以有可以没有,如果没有条件,则会修改整张表的所有数据。

  • 删除
delete from 表名 [where 条件];

注意:delete语句的条件可以有可以没有,如果没有条件,则会删除整张表的所有数据;delete语句不能删除某一个字段的值(可以使用update)

  1. DQL(数据库查询语言)
    数据库查询语言
  • 基础查询
# 查询多个字段
select * from 表名;
select 字段1,字段2,... from 表名;
# 设置别名
select 字段1[as 别名1],字段2[as 别名2],... from 表名;
# 去除重复记录
select distinct 字段列表 from 表名;
  • 条件查询
select 字段列表 from 表名 where 条件列表;
比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
between…and…在某个范围之内(含最小、最大值)
in(…)在in之后的列表中的值,多选一
like 占位符模糊匹配(_匹配单个字符, %匹配任意个字符)
is null是null
and 或 &&且(多个条件同时成立)
or 或 ||或(多个条件任意一个成立)
not 或 !非,不是
  • 聚合函数
    聚合函数注意:null值不参与所有聚合函数的运算

  • 分组查询
    分组查询

  • 排序查询
    排序查询

  • 分页查询
    分页查询

  • 执行顺序
    执行顺序

  1. DCL(数据库控制语言)
  • 管理用户
# 查询用户
use mysql;
select * from user;
# 创建用户
create user '用户名' @ '主机名' identified by '密码';
# 修改用户密码
alter user '用户名' @ '主机名' identified with mysql_native_password by '新密码';
# 删除用户
drop user '用户名' @ '主机名';

注意:主机名可以使用%通配

  • 权限控制
# 查询权限
show grants for '用户名' @ '主机名';
# 授予权限
grant 权限列表 on 数据库名.表名 to '用户名' @ '主机名';
# 撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名' @ '主机名';
  1. 函数
    函数指的是一段可以被另一段程序调用的程序或代码。
  • 字符串函数
    字符串函数
  • 数值函数
    数值函数
  • 日期函数
    日期函数
  • 流程函数
    流程函数
  1. 约束
    约束案例:
create table user(
    id int primary key auto_increment comment'主键',
    name varchar(10) NOT NULL unique comment'姓名',
    age int check(age > 0 and age <= 120) comment'年龄',
    status char(1) DEFAULT '1' comment'状态',
    gender char(1) comment'性别'
) comment '用户表';
  • 外键约束
    外键约束-概念
    外键约束-语法
    外键约束-行为
  1. 多表查询
  • 多表关系
    多表关系
    一对多
    多对多
    一对一
  • 多表查询概述
    笛卡尔积
    多表查询分类
  • 内连接
    内连接

案例:

# 查询每一个员工的姓名,及关联的部门名称(隐式内连接)
select emp.name,dept.name 
from emp,dept 
where emp.dept_id = dept.id;
# 查询每一个员工的姓名,及关联的部门名称(显式内连接)
select emp.name,dept.name 
from emp inner join dept 
on emp.dept_id = dept.id;
  • 外连接
    外连接
    案例:
# 查询emp表的全部数据和对应的部门信息(左外连接)
select * 
from emp left join dept 
on emp.dept_id = empt.id; 
# 查询empt表的全部数据和对应的员工信息(右外连接)
select * 
from empt right join emp 
on empt.id = emp.empt_id;
  • 自连接
    自连接
    案例:
# 查询员工以及其所属领导的名称
select a.name,b.name 
from emp a,emp b 
where a.managerid = b.id;
# 查询所有的员工及其领导的名字,如果没有领导也需要查询出来
select a.name,b.name 
from emp a left join emp b 
on a.managerid = b.id;
  • 联合查询union
    联合查询
    案例:
# 将薪资低于5000的员工和年龄大于五十岁的员工全部查询出来
select * 
from emp 
where salary < 5000 union all select * from emp where age > 50;
  • 子查询
    子查询
  • ①.标量子查询
    标量子查询
    案例:
# 查询销售部的员工信息
select * 
from emp 
where empt_id = (select id from dept where name = '销售部');
# 查询在‘邹小瑜’之后入职的员工
select * 
from emp 
where entrydate > (select entrydate from where name = '邹小瑜');
  • ②.列子查询
    列子查询案例:
# 查询"销售部"和"市场部"的所有员工信息
select * 
from emp 
where empt_id in (
    select id from empt where name = '销售部' or name = '市场部'
);
# 查询比财务部所有人工资都高的员工信息
select * 
from emp 
where salary > all(
    select salary from emp where dept_id = (select id from dept where name = '财务部')
);
# 查询比研发部任意一人工资高的员工信息
select * from emp where salary > any 
(
    select salary from emp where dept_id = (select id from dept where name = '研发部')
);
select * from emp where salary > some 
(
    select salary from emp where dept_id = (select id from dept where name = '研发部')
);
select * from emp where salary > (
    select min(salary) from emp where dept_id = (select id from dept where name = '研发部')
);
  • ③.行子查询
    行子查询
    案例:
# 查询与邹小瑜的薪资以及直属领导相同的员工信息 
select * 
from emp 
where (salary,manager_id) = (select salary,manager_id from name = '邹小瑜');
  • ④.表子查询
    表子查询案例:
# 查询和余小弓和邹小瑜职位薪资相同的员工信息
select * 
from emp 
where (job,salary) in (
    select job,salary from emp where name = '余小弓' or '邹小瑜'
);
# 查询入职日期是2024-04-26之后的员工信息以及部门信息
select e.*,dept.* 
from (select * from emp where entrydate > '2024-04-26') e left join dept 
on e.dept_id = dept.id; 
  • 数据库小结
    数据库相关的部分知识就到此结束了,并不是因为数据库只有这些知识,而是数据库的内容太多了,本章仅仅是作为带小白体验入门编程的一个简单基础的小汇总, 很多内容仅仅是给大家介绍了语法,并没有给出详细案例,这里给大家推荐一位e厂退役大佬—鱼皮的sql开源学习平台:SQL之母,如果觉得本片文章介绍SQL知识比较干巴的友友,可以到鱼皮大佬的这个SQL学习平台,实战一下,更好的体验SQL的魅力。当然,我在前言里也给大家说了,等我把《跟我一起学“网络安全”》这个系列博客更新完后,我会给大家去介绍更多关于开发相关的系列博客,届时我会在《跟我一起动手敲“MySQL”》里为大家详细的介绍数据库的知识,好了废话不多说,让我们进入下一大章——“前端三剑客”的学习吧!!!

三、HTML,CSS,JavaScript

  1. HTML
  • HTML简介
    HTML简介注:在浏览器的页面上使用键盘上的 F12 按键开启开发者工具,就可以看到组成标签。
    开发者工具

  • 什么是HTML?
    HTML 是用来描述网页的一种语言。
    HTML 指的是超文本标记语言: HyperText Markup Language
    HTML 不是一种编程语言,而是一种标记语言
    标记语言是一套标记标签 (markup tag)
    HTML 使用标记标签来描述网页
    HTML 文档包含了HTML 标签及文本内容
    HTML文档也叫做 web 页面

  • HTML标签
    HTML 标记标签通常被称为 HTML 标签 (HTML tag)。
    HTML 标签是由尖括号包围的关键词,比如<html></html>
    单标签:单独出现的标签<img>
    双标签:成对出现的标签<div></div>
    标签对中的第一个标签是开始标签,第二个标签是结束标签

  • HTML元素
    “HTML 标签” 和 “HTML 元素” 通常都是描述同样的意思.
    但是严格来讲, 一个 HTML 元素包含了开始标签与结束标签,如下实例:

<h1>这是一个一级标题</h1>
  • HTML页面结构
    HTML页面结构
<!-- 声明正片文档是一个HTML文档 -->
<!DOCTYPE html>

<!-- <html></html>根标签 -->
<html>
<!-- <head></head>头标签 -->
<head>
<!-- 设置页面编码为“utf-8” -->
<meta charset="utf-8">
<!-- 设置页面标题为“我的网页” -->
<title>我的网页</title>
</head>
<!-- <body></body>体标签 -->
<body>
    <p>这是一个段落。</p>
    <p>这是一个段落。</p>
    <p>这是一个段落。</p>
</body>
</html>

注意:只有 <body></body>区域 (白色部分) 才会在浏览器中显示。

  • HTML属性
    HTML 元素可以设置属性
    属性可以在元素中添加附加信息
    属性一般描述于开始标签
    属性总是以名称/值对的形式出现,比如:name=“value”
<a href="http://www.runoob.com">这是一个链接</a>

注意:HTML 链接由 <a> 标签定义。链接的地址在 href 属性中指定。

  • HTML编辑器
    首先做“网络安全”或者后面在给大家做“渗透测试”的时候,我们不是开发程序员,我们对于开发的编码能力要求不是很高,大家仅仅需要能够看懂代码,并且会写一些简单的代码即可,这里为了减少大家的学习成本,给大家推荐在线的编辑器:在线编辑器。当然,如果大家想把前端学好,这里给大家推荐一个自学平台——菜鸟教程:菜鸟教程,大家可以在这个平台,更好的学习开发相关的内容,包括但不限于之前我给大家介绍的MySQL数据库,和现在的HTML等。
    我还是那句话,这个系列文章的主要内容是给大家学“网络安全”,至于这篇里的编程相关的内容,更多的是给大家作为介绍,可能连入门都达不到,但这并不意味着,我偷懒或者是我不负责什么的,而是,这文章前篇里,我给大家说的那样,这篇文章会给大家介绍MySQL,HTML、CSS、JavaScript,Python的内容,这些大家可以在菜鸟教程里去系统的浏览一边,大家就会知道,内容非常非常非常多(重要的事情说三遍),这系列的文章主要给大家学“网络安全”,所以更侧重“安全”,而不是“开发、编程”,希望大家可以理解🌹🌹🌹!

以下的代码,希望大家可以在线编辑器,运行一下,看看效果。

  • HTML基础标签
<!-- 这里的代码省去了html的结构,只对关键标签本身作为介绍 -->

<!-- 标题(1-6个级别) -->
<h1>一级标题</h1>
<h2>二级标题</h2>
<h3>三级标题</h3>

<!-- 段落 -->
<p>这是一个不包含多个空格,多个回车段落</p>
<pre>这是一个可以包含多个空格,多个回车的段落</pre>

<!-- 水平线 -->
<hr/>

<!-- 注释 -->
<!-- 注释内容 -->

<!-- 常用HTML格式化标签 -->
<b>加粗</b><strong>加粗</strong>
<i>斜体</i><em>斜体</em>
<small>小字号</small>
<sub>下标字</sub>
<sup>上标字</sup>
<ins>插入字</ins>
<del>删除字</del>

<!-- 链接 -->
<a href="https://www.csdn.net/" target="_blank">访问CSDN</a>

<!-- 常用HTML头标签 -->
<head>
<meta charset="utf-8"> 
<title>文档标题</title>
<!-- 引入外部CSS文件 -->
<link rel="stylesheet" type="text/css" href="path/to/your/style.css">
<!-- 定义当前文档的style -->
<style type="text/css">
body {
    background-color:yellow;
}
p {
    color:blue
}
</style>
<!-- 引入外部JavaScript文件 -->
<script src="path/to/your/script.js"></script>
</head>

<!-- 图像 -->
<img src="https://img-home.csdnimg.cn/images/20201124032511.png" alt="some_text"> 

<!-- 表格 -->
<h4>一列:</h4>
<table border="1">
  <tr>
    <td>100</td>
  </tr>
</table>
<h4>一行三列:</h4>
<table border="1">
  <tr>
    <td>100</td>
    <td>200</td>
    <td>300</td>
  </tr>
</table>
<h4>两行三列:</h4>
<table border="1">
  <tr>
    <td>100</td>
    <td>200</td>
    <td>300</td>
  </tr>
  <tr>
    <td>400</td>
    <td>500</td>
    <td>600</td>
  </tr>
</table>

<!-- 列表 -->
<h4>无序列表:</h4>
<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>
<h4>有序列表:</h4>
<ol>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>
<ol start="50">
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>

<!-- 表单 -->
<form action="/" method="post">
    <!-- 文本输入框 -->
    <label for="name">用户名:</label>
    <input type="text" id="name" name="name" required>
    <br>
    <!-- 密码输入框 -->
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required>
    <br>
    <!-- 单选按钮 -->
    <label>性别:</label>
    <input type="radio" id="male" name="gender" value="male" checked>
    <label for="male"></label>
    <input type="radio" id="female" name="gender" value="female">
    <label for="female"></label>
    <br>
    <!-- 复选框 -->
    <input type="checkbox" id="subscribe" name="subscribe" checked>
    <label for="subscribe">订阅推送信息</label>
    <br>
    <!-- 下拉列表 -->
    <label for="country">国家:</label>
    <select id="country" name="country">
        <option value="cn">CN</option>
        <option value="usa">USA</option>
        <option value="uk">UK</option>
    </select>
    <br>
    <!-- 提交按钮 -->
    <input type="submit" value="提交">
</form>

<!-- HTML布局 -->
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>降临者</title> 
</head>
<body>
<div id="container" style="width:500px">
<div id="header" style="background-color:#FFA500;">
<h1 style="margin-bottom:0;">主要的网页标题</h1></div>
<div id="menu" style="background-color:#FFD700;height:200px;width:100px;float:left;">
<b>菜单</b><br>
HTML<br>
CSS<br>
JavaScript</div>
<div id="content" style="background-color:#EEEEEE;height:200px;width:400px;float:left;">
内容在这里</div>
<div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">
版权 © jianglinzhe.com</div>
</div>
</body>
</html>
  • HTML字符实体
显示结果描述实体名称实体编号
space空格&nbsp;&#160;
<小于号&lt;&#60;
>大于号&gt;&#62;
&&amp;&#38;
"引号&quot;&#34;
撇号&apos;&#39;
&cent;&#162;
£&pound;&#163;
¥人民币/日元&yen;&#165;
欧元&euro;$#8364;
§小节&sect;&#167;
©版权&copy;&#169;
®注册商标&reg;&#174;
商标&trade;&#8482;
×乘号&times;&#215;
÷除号&divide;&#247;
  1. CSS
    CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。
  • 如何使用CSS
    CSS 是在 HTML 4 开始使用的,是为了更好的渲染HTML元素而引入的.
    CSS 可以通过以下方式添加到HTML中:
    ①.内联样式- 在HTML元素中使用"style" 属性
    ②.内部样式表 -在HTML文档头部 <head> 区域使用<style>元素 来包含CSS
    ③.外部引用 - 使用外部CSS文件

    最好的方式是通过外部引用CSS文件。
    以下的代码,希望大家可以在线编辑器,运行一下,看看效果。
  • 内联样式
<p style="color:blue;margin-left:20px;">这是一个段落。</p>
  • 背景颜色示例
<body style="background-color:yellow;">
<h2 style="background-color:red;">这是一个标题</h2>
<p style="background-color:green;">这是一个段落。</p>
</body>
  • 字体, 字体颜色 ,字体大小示例
<h1 style="font-family:verdana;">一个标题</h1>
<p style="font-family:arial;color:red;font-size:20px;">一个段落。</p>
  • 文本对齐方式
<h1 style="text-align:center;">居中对齐的标题</h1>
<p>这是一个段落。</p>
  • 内部样式表
    当单个文件需要特别样式时,就可以使用内部样式表。你可以在<head>部分通过<style>标签定义内部样式表:
<head>
<style type="text/css">
body {background-color:yellow;}
p {color:blue;}
</style>
</head>
  • 外部样式表
    当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观:
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
  • HTML使用示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>CSDN</title>
<style type="text/css">
h1 {color:red;}
p {color:blue;}
</style>
</head>
<body>
<h1>这是一个标题</h1>
<p>这是一个段落。</p>
</body>
</html>
  • 做一个没有下划线的链接示例
<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>CSDN</title> 
</head>
<body>
<a href="https://www.csdn.net/" style="text-decoration:none;">访问CSDN</a>
</body>
</html>
  • 链接到一个外部样式表示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>CSDN</title> 
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<h1>我使用了外部样式文件来格式化文本 </h1>
<p>我也是!</p>
</body>
</html>
  1. JavaScrpit
    以下的代码,希望大家可以在线编辑器,运行一下,看看效果。
  • JavaScript显示数据
    ①.使用window.alert()弹出警告框。
    ②.使用document.write()方法将内容写到 HTML 文档中。
    ③.使用innerHTML写入到HTML元素。
    ④.使用console.log()写入到浏览器的控制台。
<!DOCTYPE html>
<html>
<body>
<h1>页面</h1>
<p id="demo">我的第一个段落</p>
<script>window.alert(5 + 6);</script>
<script>document.getElementById("demo").innerHTML = "段落已修改。";</script>
<script>document.write(Date());</script>
<script>console.log(5 + 6);</script>
</body>
</html>

运行结果

  • JavaScript语句
    JavaScript语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。
    分号用于分隔JavaScript语句。
    通常我们在每条可执行的语句结尾添加分号。
    使用分号的另一用处是在一行中编写多条语句。
a = 5;
b = 6;
c = a + b;
  • JavaScript语句标识符
    语句标识符
  • JavaScript注释
    JavaScript 不会执行注释。
    我们可以添加注释来对JavaScript进行解释,或者提高代码的可读性。
    单行注释以 // 开头。
    多行注释以/开始,以/结尾。
// 输出标题:
document.getElementById("myH1").innerHTML="欢迎来到我的主页";
/*
下面的这些代码会输出
一个段落
并将代表主页的开始
*/
document.getElementById("myP").innerHTML="这是我的第一个段落。";
  • JavaScript变量命名
    与代数一样,JavaScript 变量可用于存放值(比如 x=5)和表达式(比如 z=x+y)。
    变量可以使用短名称(比如 x 和 y),也可以使用描述性更好的名称(比如 age, sum, totalvolume)。
    变量必须以字母开头
    变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)
    变量名称对大小写敏感(y 和 Y 是不同的变量)

  • JavaScript数据类型
    值类型(基本类型): 字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
    引用数据类型(对象类型): 对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
    数据类型

  • JavaScript对象
    JavaScript对象是拥有属性和方法的数据。

①.对象定义

var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

②.对象属性
可以说 “JavaScript 对象是变量的容器”。
但是,我们通常认为 “JavaScript 对象是键值对的容器”。
键值对通常写法为 name : value (键与值以冒号分割)。
键值对在 JavaScript 对象通常称为 对象属性。

// 访问对象属性的两种方法
person.lastName;
person["lastName"];

③.对象方法
对象的方法定义了一个函数,并作为对象的属性存储。
对象方法通过添加()调用 (作为一个函数)。
该实例访问了person对象的fullName()方法:

name = person.fullName();
// 创建对象方法
methodName : function() {
    // 代码 
}

// 使用对象方法
objectName.methodName()
  • JavaScript函数
    函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试实例</title>
<script>
// 定义一个函数
function myFunction()
{
    alert("Hello World!");
}
</script>
</head>
<body>
<button onclick="myFunction()">点我</button>
</body>
</html>
  • JavaScript函数语法
// 无参无返回值
function functionname()
{
    // 执行代码
}

// 有参无返回值
function myFunction(var1,var2)
{
    // 执行代码
}
// 无参有返回值
function myFunction()
{
    var x=5;
    // 执行代码
    return x;
}
// 有参有返回值
function myFunction(a,b)
{
    return a*b;
}
  • JavaScript事件
    HTML事件是发生在HTML元素上的事情。
    当在HTML页面中使用JavaScript时,JavaScript可以触发这些事件。
  • 常见的HTML事件
    常见的HTML事件
  • JavaScript字符串
    字符串可以存储一系列字符,如 “John Doe”。
    字符串可以是插入到引号中的任何字符,可以使用单引号或双引号。

①.字符串方法
字符串方法
②.字符串长度

var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;
  • 特殊字符
    反斜杠是一个转义字符。 转义字符将特殊字符转换为字符串字符:转义字符 () 可以用于转义撇号,换行,引号,等其他特殊字符。
    特殊字符
  • JavaScript运算符

①.算数运算符
算数运算符②.赋值运算符
赋值运算符③.比较运算符
比较运算符
④.逻辑运算符
逻辑运算符

  • JavaScript条件语句
    通常在写代码时,您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。

在 JavaScript 中,我们可使用以下条件语句:
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
if…else if…else 语句- 使用该语句来选择多个代码块之一来执行

// if 语句
if (condition)
{
    当条件为 true 时执行的代码
}
// if...else 语句
if (condition)
{
    当条件为 true 时执行的代码
}
else
{
    当条件不为 true 时执行的代码
}
// if...else if....else 语句
if (condition1)
{
    当条件 1true 时执行的代码
}
else if (condition2)
{
    当条件 2true 时执行的代码
}
else
{
  当条件 1 和 条件 2 都不为 true 时执行的代码
}

switch语句
switch语句用于基于不同的条件来执行不同的动作。

switch(n)
{
    case 1:
        执行代码块 1
        break;
    case 2:
        执行代码块 2
        break;
    default:case 1case 2 不同时执行的代码
}

工作原理:首先设置表达式n(通常是一个变量)。随后表达式的值会与结构中的每个case的值做比较。如果存在匹配,则与该case关联的代码块会被执行。请使用break来阻止代码自动地向下一个case运行。

  • JavaScript循环
    循环可以将代码块执行指定的次数
    JavaScript 支持不同类型的循环:
    for - 循环代码块一定的次数
    for/in - 循环遍历对象的属性
    while - 当指定的条件为true时循环指定的代码块
    do/while - 同样当指定的条件为true时循环指定的代码块
// for循环
for (语句 1; 语句 2; 语句 3) {
    被执行的代码块
}

// for in循环
var person={fname:"邹小瑜",age:21}; 
for (x in person)  // x 为属性名
{
    txt=txt + person[x];
}

// while循环
while (条件)
{
    需要执行的代码
}

// do while循环
do
{
    需要执行的代码
}
while (条件);

注意:do/while循环是while循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。

  • JavaScript break和continue语句
    break 语句用于跳出循环。
    continue 用于跳过循环中的一个迭代。
// break案例
for (i=0;i<10;i++)
{
    if (i==3)
    {
        break;
    }
    x=x + "The number is " + i + "<br>";
}

// continue案例
while (i < 10){
  if (i == 3){
    i++;    //加入i++不会进入死循环
    continue;
  }
  x= x + "该数字为 " + i + "<br>";
  i++;
}
  • JavaScript typeof, null, 和 undefined

①.typeof操作符
typeof操作符来检测变量的数据类型

typeof "John"                // 返回 string 
typeof 3.14                  // 返回 number
typeof false                 // 返回 boolean
typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

注意:在JavaScript中,数组是一种特殊的对象类型。 因此typeof[1,2,3,4]返回object。

②.null
null是一个只有一个值的特殊类型。表示一个空对象引用

var person = null;           // 值为 null(空), 但类型为对象

③.undefined
在 JavaScript 中, undefined是一个没有设置值的变量。
typeof一个没有值的变量会返回undefined。

var person;                  // 值为 undefined(空), 类型是undefined

④.undefined和null的区别

typeof undefined             // undefined
typeof null                  // object
null === undefined           // false
null == undefined            // true
  • JavaScript NaN类型
    在JavaScript中,NaN是一个特殊的数字类型值(Number类型),表示“非数字”(Not-A-Number)。NaN表示一个本来要返回数值的操作数未返回数值的情况,例如除以0或对非数字字符串执行数学运算。
    NaN有一些独特的性质,比如它不等于任何值,包括它自己。因此,无法通过简单的相等性测试来检测某个值是否为NaN。但可以使用全局函数isNaN()来判断某个值是否为NaN,如果该值是NaN,则isNaN()函数返回true,否则返回false。
// 字符串转换为数字失败  
var a = Number("hello"); // NaN  
// 0 除以 0  
var b = 0 / 0; // NaN  
// 无穷大减去无穷大  
var c = Infinity - Infinity; // NaN  
// 开方负数  
var d = Math.sqrt(-1); // NaN,但注意在JS中实际结果是 NaN 而不是抛出错误  
// 检测 NaN  
console.log(isNaN(a)); // true  
console.log(Number.isNaN(a)); // true  
console.log(a !== a); // true  
// 注意 isNaN 的陷阱  
console.log(isNaN("hello")); // true,因为会先尝试将字符串转换为数字  
console.log(Number.isNaN("hello")); // false,不会尝试转换类型
  • 前端三剑客小结
    html,css,javascript的知识就到这里结束了,同数据库一样,基本上也是带着大家过了一边里面最基础,最常见的用法,如果大家想要详细深入的学习的前端三剑客的相关知识,可以去菜鸟教程B站进行相应的更加全面的学习, 下面就到了我们的最后一小节,Python的学习啦!!!

四、Python

  1. 简介
    Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
    Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
    Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
    Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
    Python 是初学者的语言: Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
    同样为了减少大家在环境安装上的过程,还是给大家推荐在线编辑器:在线编辑器
  2. 基本数据类型
    Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
    在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
  • 变量赋值
counter = 100          # 整型变量
miles   = 1000.0       # 浮点型变量
name    = "csdn"     # 字符串
print (counter)
print (miles)
print (name)
  • 多个变量赋值
# 同时为多个变量赋值
a = b = c = 1
# 为多个对象指定多个变量
a, b, c = 1, 2, "csdn"
  • 标准数据类型
    Number(数字)
    String(字符串)
    bool(布尔类型)
    List(列表)
    Tuple(元组)
    Set(集合)
    Dictionary(字典)
    Python3 的六个标准数据类型中:
    不可变数据(3 个): Number(数字)、String(字符串)、Tuple(元组)
    可变数据(3 个): List(列表)、Dictionary(字典)、Set(集合)
  • 数值型
    Python3 支持 int、float、bool、complex(复数)
    内置的 type() 函数可以用来查询变量所指的对象类型,还可以用 isinstance 来判断
    isinstance 和 type 的区别在于:
    type()不会认为子类是一种父类类型。
    isinstance()会认为子类是一种父类类型。
print(issubclass(bool, int))  # True
print(True==1) # True
print(False==0) # True
print(True+1) # 2
print(False+1) # 1
print(5 + 4)  # 加法 9
print(4.3 - 2) # 减法 2.3
print(3 * 7)  # 乘法 21
print(2 / 4)  # 除法,得到一个浮点数 0.5
print(2 // 4) # 除法,得到一个整数 0
print(17 % 3) # 取余 2
print(2 ** 5) # 乘方 32
  • 字符串
    Python中的字符串用单引号 ’ 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
    加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,与之结合的数字为复制的次数。实例如下:
str = 'CSDN博客'  # 定义一个字符串变量
print(str)           # 打印整个字符串
print(str[0:-1])     # 打印字符串第一个到倒数第二个字符(不包含倒数第一个字符)
print(str[0])        # 打印字符串的第一个字符
print(str[2:5])      # 打印字符串第三到第五个字符(包含第五个字符)
print(str[2:])       # 打印字符串从第三个字符开始到末尾
print(str * 2)       # 打印字符串两次
print(str + "Student")  # 打印字符串和"Student"拼接在一起
  • 布尔类型
    布尔类型即 True 或 False。
    在 Python 中,True 和 False 都是关键字,表示布尔值。
    布尔类型可以用来控制程序的流程,比如判断某个条件是否成立,或者在某个条件满足时执行某段代码。
    布尔类型特点:
    布尔类型只有两个值: True 和 False。
    布尔类型可以和其他数据类型进行比较, 比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0
    布尔类型可以和逻辑运算符一起使用, 包括 and、or 和 not。这些运算符可以用来组合多个布尔表达式,生成一个新的布尔值
    布尔类型也可以被转换成其他数据类型, 比如整数、浮点数和字符串。在转换时,True 会被转换成 1,False 会被转换成 0
a = True
b = False
# 比较运算符
print(2 < 3)   # True
print(2 == 3)  # False
# 逻辑运算符
print(a and b)  # False
print(a or b)   # True
print(not a)    # False
# 类型转换
print(int(a))   # 1
print(float(b)) # 0.0
print(str(a))   # "True"
  • List-列表
    List(列表) 是 Python 中使用最频繁的数据类型。
    列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
    列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
    和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
list = [ 'abcd', 786 , 2.23, 'CSDN', 70.2 ]  # 定义一个列表
tinylist = [123, 'CSDN']
print (list)            # 打印整个列表
print (list[0])         # 打印列表的第一个元素
print (list[1:3])       # 打印列表第二到第三个元素(不包含第三个元素)
print (list[2:])        # 打印列表从第三个元素开始到末尾
print (tinylist * 2)    # 打印tinylist列表两次
print (list + tinylist)  # 打印两个列表拼接在一起的结果

注意:列表中的元素是可以改变的

  • Tuple-元组
    元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
tuple = ( 'abcd', 786 , 2.23, 'CSDN', 70.2  )
tinytuple = (123, 'CSDN')
print (tuple)             # 输出完整元组
print (tuple[0])          # 输出元组的第一个元素
print (tuple[1:3])        # 输出从第二个元素开始到第三个元素
print (tuple[2:])         # 输出从第三个元素开始的所有元素
print (tinytuple * 2)     # 输出两次元组
print (tuple + tinytuple) # 连接元组
  • Set-集合
    Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。
    集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
    在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。
    另外,也可以使用 set() 函数创建集合。
    注意: 创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
sites = {'Google', 'Taobao', 'CSDN', 'Facebook', 'Zhihu', 'Baidu'}
print(sites)   # 输出集合,重复的元素被自动去掉
# 成员测试
if 'Runoob' in sites :
    print('CSDN 在集合中')
else :
    print('CSDN 不在集合中')

# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b)     # a 和 b 的差集
print(a | b)     # a 和 b 的并集
print(a & b)     # a 和 b 的交集
print(a ^ b)     # a 和 b 中不同时存在的元素
  • Dictionary-字典
    字典(dictionary)是Python中另一个非常有用的内置数据类型。
    列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
    字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
    键(key)必须使用不可变类型。
    在同一个字典中,键(key)必须是唯一的。
dict = {}
dict['one'] = "1 - CSDN"
dict[2]     = "2 - CSDN博客"
tinydict = {'name': 'CSDN','code':1, 'site': 'www.csdn.net'}
print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值
  1. 条件控制
    Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
    Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else
    注意:
    每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
    使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
var1 = 100
if var1:
    print ("1 - if 表达式条件为 true")
    print (var1)
 
var2 = 0
if var2:
    print ("2 - if 表达式条件为 true")
    print (var2)
print ("Good bye!")
  • match…case
    Python 3.10 增加了 match…case 的条件判断,不需要再使用一连串的 if-else 来判断了。
    match 后的对象会依次与 case 后的内容进行匹配,如果匹配成功,则执行匹配到的表达式,否则直接跳过,_ 可以匹配一切。
def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"
mystatus=400
print(http_error(400))
  1. 循环语句
    Python 中的循环语句有 for 和 while。
n = 100
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
# 遍历列表
sites = ["Baidu", "Google","CSDN","Taobao"]
for site in sites:
    print(site)

# 遍历字符串
word = 'CSDN博客'
for letter in word:
    print(letter)

#  1 到 5 的所有数字:
for number in range(1, 6):
    print(number)
  • break 和 continue
    break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
    continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
# 查询质数的循环 
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等于', x, '*', n//x)
            break
    else:
        # 循环中没有找到元素
        print(n, ' 是质数')
# 第二个实例
var = 10                    
while var > 0:              
   var = var -1
   if var == 5:             # 变量为 5 时跳过输出
      continue
   print ('当前变量值 :', var)
print ("Good bye!")
  • pass语句
    pass是空语句,是为了保持程序结构的完整性
for letter in 'CSDNNDSC': 
   if letter == 'N':
      pass
      print ('执行 pass 块')
   print ('当前字母 :', letter)
 
print ("Good bye!")
  1. 函数
  • 函数定义
    函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
    任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    函数内容以冒号 : 起始,并且缩进。
    return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
def hello() :
    print("Hello World!")

hello()
  • 参数
    ①.必需参数
    ②.关键字参数
    ③.默认参数
    ④.不定长参数
  • 必需参数
    必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print (str)
   return
 
# 调用 printme 函数,不加参数会报错
printme()
  • 关键字参数
    关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
    使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
#可写函数说明
def printinfo( name, age ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="runoob" )
  • 默认参数
    调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:
#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="runoob" )
print ("------------------------")
printinfo( name="runoob" )
  • 不定长参数
    一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。
# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )
  1. 面向对象
  • Python3 面向对象
    类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
    方法: 类中定义的函数。
    类变量: 类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
    数据成员: 类变量或者实例变量用于处理类及其实例对象的相关的数据。
    方法重写: 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
    局部变量: 定义在方法中的变量,只作用于当前实例的类。
    实例变量: 在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
    继承: 即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
    实例化: 创建一个类的实例,类的具体对象。
    对象: 通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
#!/usr/bin/python3
 
class MyClass:
    """一个简单的类实例"""
    i = 12345
    def f(self):
        return 'hello world'
 
# 实例化类
x = MyClass()
 
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
  1. python小结
    本小节为大家简单的介绍了Python里最最最最最常见的用法,还是和之前一样,这里只做介绍,深入的学习,大家可以在网上查找资料,我这里只做介绍。当然,后面有机会,我也会为大家详细介绍的,前面挖的坑,我也会填。

五、小结

以上就是我们在进行渗透测试前的一个小小的基础了,当然,我的这篇文章写的很浅,不论你是想成为一位开发大佬,或者是想成为一位渗透大佬,以上这点内容,都仅仅算是“饭前的瓜子花生”,想要继续深入的学习下去,一定要养成自己查看文档的学习能力,初学者,可以用我推荐给大家的菜鸟教程进行学习,也可以在B站上跟着视频学习,如果是进阶者,还是跟着官方文档学习才是最重要的,好了,废话不多说,下一章,我们进入计算机网络的学习吧!!!

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学徒钝子生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值