编程基础
一、前言
在开始给大家讲解编程基础的时候呢,其实这一章的内容,也算是给自己埋了一个巨大的“坑”,没错,就是 “巨大的坑”。因为本章将会为大家介绍MySQL,html,css,js和Python相关的基础知识,为什么是基础,因为本章的内容,为后面的渗透测试在做基础,其实我本来不想写这一章的,但是我担心看我的这个系列的友友们,可能没有接触过编程(有编程基础的友友可以跳过这章),因此,就把我们渗透中,最简单、最基础的部分抽出来,组成了这一章。向大家介绍清楚这章的由来后,在给大家解释一下为什么是“巨大的坑”,因为在 《跟我一起学“网络安全”》 完结后,我可能会有 《跟我一起动手敲“C语言”》、 《跟我一起动手敲“Java”》、 《跟我一起动手敲“MySQL”》 等一系列的开发编程学习内容,到时候会详细的介绍每一种语言的具体用法以及小项目案例,届时,希望大家都来捧场❀❀❀。ok,废话不多说了,下面就让我们进入编程基础的学习吧!!!
二、MySqL数据库
- 数据库基本知识
- 什么是数据库
数据库(DB): 存储数据的仓库,数据是有组织的进行存储 - 什么是数据库管理系统
数据库管理系统(DBMS): 操纵和管理数据库的大型软件 - 什么是SQL
SQL(Structured Query Language): 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 - 什么是关系型数据库
关系型数据库: 建立在关系模型基础上,由多张相互连接的二维表组成的数据库
特点:
①.使用表存储数据,格式统一,便于维护
②.使用SQL语言操作,标准统一,使用方便
主流的关系型数据库有:Oracle、MySQL、SQL Server、PostgreSQL等,本章以MySQL作为用例,为大家介绍MySQL的一些基础知识。
- SQL
- SQL通用语法
①.SQL语句可以单行或多行书写,以分号结尾
②.SQL语句可以使用空格/缩进来增强语句可读性
③.MySQL数据库的SQL语句不区分大小写
④注释:
单行注释: – 注释内容 或 # 注释内容(MySQL特有)
多行注释: /* 注释内容 */
- SQL分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中的表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
- 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 "性别"
)
注意:[…]为可选参数,最后一个字段后面没有逗号
- 数据类型
- 表操作(修改)
# 添加字段
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;
- 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)
- 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值不参与所有聚合函数的运算 -
分组查询
-
排序查询
-
分页查询
-
执行顺序
- 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 '用户名' @ '主机名';
- 函数
函数指的是一段可以被另一段程序调用的程序或代码。
- 字符串函数
- 数值函数
- 日期函数
- 流程函数
- 约束
案例:
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 '用户表';
- 外键约束
- 多表查询
- 多表关系
- 多表查询概述
- 内连接
案例:
# 查询每一个员工的姓名,及关联的部门名称(隐式内连接)
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
- 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文档 -->
<!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 | 空格 | |   |
< | 小于号 | < | < |
> | 大于号 | > | > |
& | 且 | & | & |
" | 引号 | " | " |
’ | 撇号 | ' | ' |
¢ | 分 | ¢ | ¢ |
£ | 镑 | £ | £ |
¥ | 人民币/日元 | ¥ | ¥ |
€ | 欧元 | € | $#8364; |
§ | 小节 | § | § |
© | 版权 | © | © |
® | 注册商标 | ® | ® |
™ | 商标 | ™ | ™ |
× | 乘号 | × | × |
÷ | 除号 | ÷ | ÷ |
- 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>
- 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事件
- 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)
{
当条件 1 为 true 时执行的代码
}
else if (condition2)
{
当条件 2 为 true 时执行的代码
}
else
{
当条件 1 和 条件 2 都不为 true 时执行的代码
}
switch语句
switch语句用于基于不同的条件来执行不同的动作。
switch(n)
{
case 1:
执行代码块 1
break;
case 2:
执行代码块 2
break;
default:
与 case 1 和 case 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
- 简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言: Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
同样为了减少大家在环境安装上的过程,还是给大家推荐在线编辑器:在线编辑器 - 基本数据类型
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()) # 输出所有值
- 条件控制
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))
- 循环语句
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!")
- 函数
- 函数定义
函数代码块以 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 )
- 面向对象
- 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())
- python小结
本小节为大家简单的介绍了Python里最最最最最常见的用法,还是和之前一样,这里只做介绍,深入的学习,大家可以在网上查找资料,我这里只做介绍。当然,后面有机会,我也会为大家详细介绍的,前面挖的坑,我也会填。
五、小结
以上就是我们在进行渗透测试前的一个小小的基础了,当然,我的这篇文章写的很浅,不论你是想成为一位开发大佬,或者是想成为一位渗透大佬,以上这点内容,都仅仅算是“饭前的瓜子花生”,想要继续深入的学习下去,一定要养成自己查看文档的学习能力,初学者,可以用我推荐给大家的菜鸟教程进行学习,也可以在B站上跟着视频学习,如果是进阶者,还是跟着官方文档学习才是最重要的,好了,废话不多说,下一章,我们进入计算机网络的学习吧!!!