python实现KMP算法
学习完KMP算法才发现编程如此的奇妙
求next数组def getNext(s): ''' 计算字符串的next数组 ''' length = len(s) next = [0 for i in range(length)] next[0] = -1 k = -1 j = 0 while j < length-1: # 这个 or 逻辑写的np if k == -1 or s[j] == s[k]: j += 1 k += 1 next[j] = k else: k = next[k] return next
从这张图可以看到整个的匹配过程,如果 $p_{k}$ 和 $p_{j}$ 匹配不上,那么就去看 $p_{next[k]}$ 和 $p_{j}$
比如
p = "ABCDABD"
得到的结果就是
[-1, 0, 0, 0, 0, 1, 2]
细节感觉还 ...
汇编从入门到入土七
sub al,al ZF=1,PF=1,SFmov al,1 ZF=0,PF=0,SFpush axpop bxadd al,bl add al,10mul al
实验十打印字符
这里的重点是不知道字符串的长度,但是知道字符串十以0结尾的,所以利用 cx = 0 jcxz 会跳转,不断地置ch=0,当取到的字符cl=0时即可跳转
assume cs:codedata segment db 'Welcome to masm!', 0data endscode segmentstart: mov dh,8 ;dh表示行号 mov dl,3 ;dl表示列号 mov cl,2 ;cl表示颜色 mov ax,data mov ds,ax mov si,0 ;字符串开始的位置 call show_str mov ax,4c00h int 21hshow_str: mov ax,0b800h mov es,ax ;显存段 mov di,0 mov ax ...
js学习笔记
Object对象静态方法Object.keys(),Object.getOwnPropertyNames()
可以用来遍历对象的属性
var obj1 = { "name":"pxy", "age":12}//undefinedObject.getOwnPropertyNames(obj1)//(2) ["name", "age"]
实例方法Object.protype上定义的方法就是实例方法,能够被Object的实例调用
Object.getOwnPropertyNames(Object.prototype)(12) ["constructor", "__defineGetter__", "__defineSetter__", "hasOwnProperty", "__lookupGetter__", "__lookupSetter__", "isPrototypeOf", "propertyIsEnumerable", "toString", "valueOf", "__proto__", "toLocaleString"]0: "construc ...
go相关笔记
go相关命令go envgo env -w GOPROXY=https://goproxy.io,direct# Set environment variable allow bypassing the proxy for selected modulesgo env -w GOPRIVATE=*.corp.example.comgo env -w GO111MODULE=on
每天一道leetcode-560和为k的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
法一——暴力两重循环,对每一个数字,从它开始往后,不断地累加,然后和k进行对比,这应该是最简单的想法了,但是我做这种题还是有点晕
def subarraySum(nums, k): length = len(nums) count = 0 for i in range(length): sum = 0 for j in range(i, length): sum += nums[j] if sum == k: count += 1 return count
法二——hashtables思路就是不断地求和,然后判断 cur_sum - k 是否已经计算过了
将前缀和放入哈希表,哈希表的设计为:key是 ...
sqlite数据库笔记
基本操作.quit 退出
.tables 列出所有的表
.schema 查看构建表的sql语句
.database 查看数据库
创建数据库只需要 sqlite 加上数据库名即可
创建表CREATE TABLE user(ID INT NOT NULL PRIMARY KEY,name TEXT ,age TEXT,password TEXT);
sqlite不支持修改表已经存在的字段,只能把原有的表重命名一下再创建一个
alter table user rename to `user_123`;
如果主键要求自动递增
CREATE TABLE user(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT,password TEXT);
插入数据insert into user(name,password) values("pxy", '123456');
查询数据sqlite> select * from user;1|pxy|123456
ubuntu配置vscode+xdebug
vscode安装直接去官网下载deb包,然后双击即可完成安装
加两个配置选项
"editor.mouseWheelZoom": true,"php.validate.executablePath": "/usr/bin/php"
第一个是直接用滚轮缩放大小,并且图标的大小不变,第二个是配置php的路径
之后安装一些插件就不说了
apache环境直接安装
sudo apt install apache2
然后安装php模块
sudo apt-get install libapache2-mod-php
之后,修改一下html目录的用户和组
chown pxy html/ -Rchgrp pxy html/ -R
xdebugphp -i > a.txt
然后将 a.txt 的内容拷贝到
https://xdebug.org/wizard
自动帮你分析phpinfo的内容(不过现在只支持php7了)
Download xdebug-2.9.4.tgz
I ...
汇编从入门到入土六
mul和divmul指令
两个相乘的数,如果都为8位,其中一个默认存放在AL,另一个放在8位寄存器或者内存字节单元中,结果是16位的,默认存放在AX中
两个相乘的数,如果都为16位,其中一个默认存放在AX,另一个放在16位寄存器或者内存字单元中,结果是32位的,高位默认存放在DX中,低位存放在AX中
div指令
除数有8位和16位,存放在reg或者内存单元
除数为8位,被除数为16位,被除数默认存放在AX中。除数为16位,被除数为32位,被除数高位存放在DX中,低位存放在AX中
结果,除数为8位,商存储在AL,余数存储在AH。除数为16位,商存储在AX,余数存储在DX
实验九 打印打印helloworld
尤其要注意 mov al, [bp],这里是取出
assume cs:codedata segment db 'Hello World' db 24h dw 1824 data endscode segmentstart: mov ax,data mov ds,ax mov ax, 0b800h mov es, ax ...
春招面经汇总
从2月到4月,中间大大小小经历了20次左右的面试,最后选择去腾讯WXG的后台策略安全岗
长亭
自我介绍
tomcat AJP漏洞了解过吗
Java反序列化漏洞
JNDI注入,Java7和Java8的区别(这里确实是自己挖坑了,简历上写了自己会Java审计,JNDI注入等,但是并没有仔细准备,结果面试官抓着Java不放)
XXE如果无法联网怎么利用(三层嵌套报错XXE或者利用系统自带的DTD文件)
你比较擅长的方面
不知道为啥和长亭面试官聊起来挺尬的。最后也只面试了20分钟就结束了,当然结果是凉凉了
字节跳动-企业应用安全一面
具体的一个代码审计案例
说一下你知道的四种漏洞的原理,利用,危害和防御
XSS知道吗
说一下前端漏洞中你比较熟悉的
python沙盒逃逸
你觉得自己的优势是什么
对未来的规划
字节跳动一面官感觉挺棒的,全程在引导你,而且特别尊重你说出自己的看法
二面
简单问了几个小问题,python沙盒逃逸,JavaScript原型链污染
有没有了解过electron框架(就是开发vscode的,我说没有,但是我知道vue
vue怎么防御csrf(我不太了解vue怎么防范,先 ...
密码学题目
记录一下ctf.show平台
https://ctf.show/challenges
crypto0凯撒密码
crypto2jsfuck
crypto3还是jsfuck编码
crypto4p=447685307 q=2037 e=17
提交flag{d}即可
import gmpy2'''给出p,q,e 求d'''# p = 3487583947589437589237958723892346254777# q = 8767867843568934765983476584376578389# e = 65537p=18443q=49891e=19phin = (p - 1) * (q - 1)print gmpy2.invert(e, phin)
crypto5p=447685307 q=2037 e=17 c=704796792
提交flag{m}
import gmpy2'''给出p,q,e,c 求d和m'''p=447685307q=2037e=17c=704796792phin = (p - 1) * (q - 1)d = gmpy2.invert(e, phin) ...