自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 算法设计方法

蛮力法把所有的可能都算一遍,不考虑优化之类的。简单,低效率算法设计过程:计算所有的可能性即可典型算法:冒泡排序例子:给定一组数字和目标值,找出两个数字相加等于目标值, 返回索引。思路:双重循环,找到所有两个数字的组合相加 == 目标值var twoSum = function(nums, target) { for (let i=0; i<nums.length; i++) { for (let j=i+1; j<nums.length; j++) {

2020-09-01 21:52:57 19

原创 常见数据结构Javascript实现

存储集合// 集合class Set { constructor() { this._list = [] } get size() { return this._list.length; } get isEmpty() { return this._list.length === 0; } add(e) { if (!this._list.includes(e)) {

2020-08-30 10:27:47 42

原创 字符串常用算法(Leetcode)

字符串的遍历

2020-08-25 10:48:05 20

原创 数组常用算法(Leetcode)

数组的遍历最大连续1的个数:给定一个二进制数组, 计算其中最大连续1的个数第三大的数: 给定一个非空数组,返回此数组中第三大的数三个数的乘积:给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积单调数列:判断数组递增或递减到最近的人的最大距离统计数组中的元素缺失的第一个正数:给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数数组的度:找出数组中出现频数最多且频数与值相等的值,返回长度找到所有数组中消失的数字:给定[1,n] 的有序数组,找出没有出现的数字数组中重

2020-08-23 22:12:27 35

原创 数据结构与算法学习指南

动画演示 、基础知识 、练习网站

2020-07-19 19:03:59 64

原创 算法分析

问题描述:在1000个数内,找出3个相加和为506有多少个// jslet count = 1000;let target = 506;let result = 0;for(let i=1; i<=count; i++) { for (let j=1; j<=count; j++) { for (let k=1; k<=count; k++) { if (i+j+k===target) { result++; } }

2020-07-19 18:47:37 25

原创 Web前端性能优化-综合篇

chrome开发者工具使用performance 性能监控rendering > ftp meter 动画性能监控,60fps正常,越高越好合并与压缩合并:把css、js分别合并为一个文件,减少http请求压缩:把html、css、js的空格注释去掉,减少请求大小图片优化减少请求大小、数量,优化加载速度jpg: 压缩率高,大部分不需要透明图片的场景png : 支持透明,大部分需要透明图片的场景webp:压缩成度更好,安卓全部,ios有兼容问题svg矢量图:代码内嵌,相对较小

2020-07-16 22:14:22 29

原创 Javascript 性能优化

加载放到body底部, 这样不会阻塞页面渲染<body><script></script></body>数据读取访问局部变量 比 全局要快 //badlet data = {};(function(){ alert(data);}())// goodslet data = {};(function(){ let l_data = data; alert( l_data);}())频繁访问对象属性,请保存到

2020-07-16 22:12:28 37

原创 Javasript中各种状态下的this指向

据我所知的有5种:1.作为普通函数调用:this指向全局2.作为对象的方法调用:this指向当前对象3.作为构造器使用: this指向实例对象4.用call、apply调用时:this指向所指定的上下文5.在箭头函数中使用this时:this指向箭头函数开始定义的上下文##作为普通函数调用function test () { return this;}function test2 () { console.log(test());}let obj = { test: functi

2020-07-16 22:09:17 31

原创 Javascript 异步编程笔记

环境:chrome 80演习:用Promise async/await封装$.ajaxPromise第一次请求成功,接着请求第二次// 先引入jq <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.min.js"></script> let {log} = console;function request(url) { return new Promise((resolve,reject)=>{

2020-07-14 21:38:07 35

原创 数据库设计过程

设计过程需求分析 > 逻辑设计 > 物理设计 > 维护优化需求分析一张表需要存什么信息。用户信息有 名称、手机号、身份证、年龄可以做唯一标识的字段: 手机号 或 身份证存储特点: 永久存储还是会删除与其他表的联系逻辑设计注意事项:更新异常:更新时应该更新指定的一条删除异常:删除时应该删除指定的一条数据冗余:数据重复出现设计范式第一范式:一张表应该是一张二维表,对应一个值bad名称手机号用户信息年龄用户名113226

2020-07-14 21:35:06 41

原创 window环境配置Mysql-8-windowx64.zip免安装版

1.从官网下载mysql-8-windowx64.zip mysql下载页面2.解压到合适的位置(E:\mysql) 这名字是我改过的3.配置环境变量,将E:\mysql\bin 添加到PATH中4.在mysql目录下(E:\mysql) 创建 my.ini文件,内容如下:[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=E:\mysql# 设置mysql数据库的数据的存放目录datadir=E:\mysql\data# 允许最大连接数

2020-07-14 21:33:21 29

原创 SQL语句整理

显示// 显示所有数据库show databases;// 显示当前数据库所有的表show tables;// 描述表的结构describe tabeName;// 查看创建表的SQL语句SHOW CREATE TABLE students;// 支持的存储引擎SHOW ENGINES// 查询表的存储引擎show table status from 数据库名 where name='表名'##创建表和数据库// 数据库create database database_nam

2020-07-14 21:13:31 45

原创 Linux 下MySql日志查看

查看所有日志状态 mysql> show global variables like '%log%';设置某个日志开启 mysql> set global general_log = on;##日志文件路径字段通用日志 general_log_file sql语句执行的记录mysql> set global general_log = on; // 开启shell> /var/lib/mysql/localhost.log错误日志 log_error慢查询日志s

2020-07-14 21:09:04 149

原创 centos7 安装 MySql8.bundle.tar

安装如果之前有安装过mysql8,先卸载yum remove mysql mysql-server mysql-libs mysql-server -y;rm -rf /var/log/mysqld.log;find / -name mysql; // 找到有关系统的mysql,有rm -rf 删除,如下rm -rf /etc/logrotate.d/mysql ;rm -rf /etc/selinux/targeted/active/modules/100/mysql /etc/selinu

2020-07-14 21:07:04 70

原创 Mysql备份数据库

备份备份数据库// 备份数据库下的所有表,不包含创建数据库,导入前需要创建数据库$> mysqldump -u root -h host -p dbname1> backdb.sql // 备份数据库,包含创建数据库$> mysqldump -u root -h localhost -p --databases test > backdb.sql// 备份全部数据库$> mysqldump -u root -h host -p --all-databases

2020-07-14 21:04:32 26

原创 Web前端错误监控

脚本运行时错误捕获window.onerror 监听全局错误发生,发生错误会阻止后续的脚本运行window.onerror = err => {}a console.log(1) // 不会运行try - catch 捕获try代码块里的错误,不会影响后续的代码运行try { a } catch (err) {}console.log(1) // 1资源加载错误Object.onerror 只能在创建时监听单个元素的error事件let script = docum

2020-07-14 21:02:01 56

原创 造成 Provisional headers are shown 的原因总结

跨域使用了json // 后端设置http头部, 允许跨域使用json数据格式 ctx.set("Content-Type", "application/json;charset=utf-8"); ctx.set('Access-Control-Allow-Origin','*') ctx.set("Access-Control-Allow-Headers", " Origin, X-Requested-With, Content-Type, Accept");后端设置了csp..

2020-07-14 21:01:48 844

原创 Web移动端常见兼容问题

##通用-webkit-tap-highlight-color: rgba(0,0,0,0);触摸时颜色cssandroid:android4.4一下的不支持flexbox,需要用旧版flexbox; display: -webkit-box; /* display: flex; */-webkit-box-pack: center; /* justify-content: center; */-webkit-box-align: center; /* align-items: cent

2020-07-14 20:59:01 78

原创 移动端1px边框实现方案

css.border1px:after { content: ' '; box-sizing: border-box; display: block; position: absolute; top: 0; left: 0; width: 200%; height: 200%; transform: scale(.5); transform-origin: left top; pointer-events: none;}div { position: relat

2020-07-14 20:57:37 104

原创 Web信息安全10-传输安全

原理http是明文传输的,别人可以窃听http里的数据,篡改数据。如:用户账号密码的信息,修改头部重定向到其他网站防御升级为https

2020-07-11 11:04:37 31

原创 Web信息安全9-任意文件包含漏洞防御

原理通过用户提供的文件路径,直接返回文件。如果用户提供的是数据库配置文件路径,也返回攻击演示启动DVWA, 进入File Inclusion点击file1.php, 页面内容发生变化,页面URL也发生变化http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file1.php, 后端通过拿到?page=的路径返回文件内容,如果我们给定任意一个文件路径,非页面上指定的file1.php 、file2.php 、 file3.php呢地址栏输入http://1

2020-07-11 10:45:48 71

原创 Web信息安全8-文件上传漏洞防御

原理假如服务器环境是php,用户更新头像,却上传一个php文件,再去访问这个php文件路径,这个php文件就在服务器运行了。攻击者就可以获取服务器的信息、删除文件等等攻击演示启动DVWA, 进入File Upload新建一个文件1.php, 内容为 <?php phpinfo(); ?>将文件上传,拿到地址去访问刚刚上传的文件http://127.0.0.1/dvwa/hackable/uploads/1.php服务器的信息泄露了防御文件类型检测(前端、后端)权限控

2020-07-11 10:24:14 124

原创 Web信息安全7-SQL注入防御

原理我要查询用户名为one的用户// username = 'one'String username = request.getParameter("username");String sql = "select * from user where username=' "+username + " ' "; //select * from user where username = 'one'假如传过来的是1' or 1 != '1// username = " 1' or 1 != '1

2020-07-11 10:15:06 64

原创 Web信息安全6-密码爆破防御

原理攻击者不停的变换用户名和密码,去请求你的登录接口,直到成功攻击演示下载BurpSuite攻击工具启动DVWA, 进入Brute Force输入用户名admin, 密码随便输,等下我们爆破密码。点击submit,拿到页面地址http://127.0.0.1/dvwa/vulnerabilities/brute/?username=admin&password=11&Login=Login打开BurpSuite -> Intruderpositions 填入以

2020-07-11 10:04:20 165

原创 Web信息安全5-点击劫持防御

原理攻击者网页中的iframe嵌套着目标网站b, 定位到最前面,并设置透明。防御X-Frame-Options: 设置http头,禁止内嵌。例子ctx.response.set("X-Frame-Options","sameorigin") 可以在相同域名页面的 frame 中展示...

2020-07-11 07:56:13 57

原创 Web信息安全4-Javascript Attacks防御

原理攻击者通过修改页面上的HTML以绕过某些检测。如果修改textarea 的 maxlength属性 就可以绕过最大字数限制攻击方式启动DVWA, 进入JavaScript在控制台运行md5(rot13('success')), 拿到这个 token替换这个在输入框输入success, 提交原理解析后端通过token值判断是否可以提交,而这个token我们可以通过开发者工具修改HTML中的表单,即可绕过。虽然这个token是通过看后端的代码才知道的,但道理大都这样,修改页面以绕过检测

2020-07-10 21:47:25 42

原创 Web信息安全3-CSRF防御

原理在攻击者的网站去调用你的服务。比如点赞、关注、修改密码攻击演示启动DVWA, 进入CSRF在输入框输入密码,点击提交,拿到url在自己的网站添加下面代码,当用户进入你的网站时,脚本触发,然后密码被修改了<script>window.open("http://localhost/dvwa/vulnerabilities/csrf/?password_new=1&password_conf=1&Change=Change")</script>原理解

2020-07-10 21:25:30 34

原创 Web信息安全2-XSS防御

原理将没经过转义处理的数据显示在页面上,如果是脚本<script></script>,就会运行,从而达到攻击效果导致的后果用户的信息会被窃取。cookie信息,账号信息页面逻辑会被改。重定向到某个网站、修改页面内容攻击演示启动DVWA, 进入XSS (Reflected)在输入框输入<script>alert(1)</script>, 点击提交防御http 响应header 增加X-XSS-Protection字段,用来预防url的

2020-07-10 21:11:10 50

原创 Web信息安全1-渗透测试靶场搭建

系统:windows10下载DVWA下载phpStudy把DVWA解压到 phpStudy/www 下,重命名为dvwa打开dvwa/config/config.inc.php.dist, 修改数据库配置$_DVWA[ 'db_user' ] = 'root';$_DVWA[ 'db_password' ] = 'root';把config.inc.php.dist 重命名为 config.inc.php访问dvwa http://localhost/dvwa/login.p

2020-07-10 20:55:56 334

原创 【解决问题方法论】缩小范围

摘要: 在一个工程中,程序中某个功能运行与预期结果不一样。导致这个问题的发生有很多因素,有时候很难定位是哪些因素导致这个问题的发生 。所以我们需要不断缩小范围,最终找出问题所在问题描述在Node服务器上调用接口压缩文件,压缩包下载下来是损坏状态,但在服务器上是正常的排查问题先看看压缩包本身是不是正常。我们打开服务器上的压缩包,发现是正常,也就是调用接口->客户机过程的问题看压缩文件与返回文件的三行代码 ctx.response.set('Content-Disposition',

2020-07-06 23:08:14 63

原创 Centos7 安装配置

配置网络$_> vi /etc/sysconfig/network-scripts/ifcfg-eno数字最后一行 onboot = yes$_> reboot //重启$_> ping www.baidu.com // 测试网络连接, ctrl+c 停止$_> ip a // 查看ip地址在虚拟机配置,没有看到192.168…的ip,改下虚拟机软件的网络配置在菜单栏找到虚拟网络编辑器如果有VMnet0 删除如果有NAT模式的,重启centos,没有添加一个NA

2020-07-05 21:28:48 23

原创 Centos开启ftp服务

安装yum install vsftpd -y修改配置 vi /etc/vsftpd/vsftpd.conf# 禁用匿名用户anonymous_enable=NO# 禁止切换根目录chroot_local_user=YES# 启用写的权限allow_writeable_chroot=YES增加用户$_> useradd ftpuser$_> passwd ftpuser$_> useradd -d /home/wwwroot ftpuser // 访问目.

2020-07-05 21:28:10 38

原创 Linux 用户身份与文件权限

用户useradd [ 参数 ] 用户名 添加用户 sudo useradd -d /home/test -u 1001 -s /bin/bash nameusermod [选项] 用户名 更改用户信息 sudo usermod -L testuserdel [选项] 用户名 删除用户groupadd [选项] 群组名 创建用户组passwd [选项] [用户名] 修改密码、认证信息 修改密码: passwd username文件权限drwxr-xr-x 4 npz npz 4096 7

2020-07-05 21:27:36 43

原创 Linux 管道符、重定向与环境变量

输入输出错重定向输入重定向 wc < 1.txt 将1.txt里的文本传给 wc 命令输出重定向ls -l > ls.txt 将ls 的信息输出到 1.txt 文件,会覆盖原来的ls -l >> ls.txt 追加文本ls dir 2 > error.txt 将错误信息输出到 error.txt管道符命令A | 命名B 将命名A执行的结果 传给命名Bls | grep index 查找当前文件列表下的 indexecho "y" | rm -i 1.txt

2020-07-05 21:27:01 28

原创 Linux下的服务器上传与下载

上传scp 文件 用户名@服务器ip 服务器保存路径例如:scp bookmarks_2019_6_24.html root@192.168.0.103:/home下载scp 用户名@服务器ip 服务器文件路径 保存地址例如:scp root@192.168.0.103:/home/b.html ./ ...

2020-07-05 21:24:28 50

原创 Linux 常用命令

linux 命令搜索通配符* 任意多个或零个字符? 任意一个字符[abc] [ ]任意一个字符[!abc] 不在[]的字符[[:class:]] 字符类// 字符类[:alnum:] 匹配任意一个字母或数字[:alpha:] 匹配任意一个字母[:digit:] 匹配任意一个数字[:lower:] 匹配任意一个小写字母[:upper] 匹配任意一个大写字母// 用法shell> rm *.txt软件包管理Debian, Ubuntu:.deb查找资源库中的软

2020-07-05 21:22:59 27

原创 Node 跨域 Access to XMLHttpRequest at ‘url‘ from origin ‘null‘ has been blocked by CORS policy: Req...

如果跨域用到了put,patch方法,要在响应头设置// koaapp.use(async (ctx, next) => { ctx.set('Access-Control-Allow-Origin','*') ctx.set("Access-Control-Allow-Methods", "POST, GET, DELETE,PATCH,PUT"); ctx.response.status = 200 ; await next();});...

2020-06-30 21:05:55 296

原创 Node puppeteer 爬虫用法

puppeteer 中文文档开始// 设置国内源,否则下载puppeteer很慢shell> npm config set registry http://registry.npm.taobao.org shell> npm init -yshell> npm i puppeteer@3.1.0爬取豆瓣书籍列表豆瓣读书 在这个页面输入javascript,然后爬取列表案例特征:需要点击下一步才能获取数据/* 1. 进入豆瓣读书首页,在输入框输入javascript,点

2020-06-30 21:04:35 79

原创 Node WebSocket 聊天室

在线演示开始npm init -ynpm i ws代码app.jsws// 1. 客户端建立连接,先同步聊天记录// 2. 接收到客户端发来的消息,将新消息通知所有已建立连接的客户端const WebSocket = require('ws');const WebSocketServer = WebSocket.Server;let charList = []; // 保存所有的聊天记录const wss = new WebSocketServer({ port: 3000

2020-06-30 21:02:49 31

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除