大二上软件工程导论课程复习
整理ppt,课件等等。
Waterfall model (瀑布模型)The waterfall model is a plan-driven process. When you encounter a problem at a certain stage, you solve the problem under the current stage.
瀑布模型是一个由计划驱动的过程。当您在某个阶段遇到问题时,您可以在当前阶段下解决该问题。但要注意的是瀑布模型不能回到上一个阶段。
适用场景
产品简单或总量小,可以明确找到每个阶段的所有潜在问题
所有潜在问题可以在每个阶段进行预测。
外部原因导致,比如多个公司共同开发且公司之间交流成本昂贵
Incremental development model (增量开发模型)Specification, development, and validation activities are interleaved rather than separate, with rapid feedback across activities.
规范、开发和验证 ...
大二上java程序设计期末复习
整理了一下ppt的内容,java程序设计课程的课件。
软件开发(Software Development)Agile Methodologies(敏捷方法)这是一种快速部署应用程序的理念,优点包括:
persistent software delivery 持续提交软件
increased stakeholder satisfaction 增加利益方的满意度
inspect and adapt 检查调整
welcome to changes at any stage 支持任意阶段修改
design is important 设计至关重要
daily interaction 日常互动
版本控制(version control)就是说需要一个git来控制一下版本,对多人合作很方便。而关于这个git的用法可以看看这篇博客 。
JVM这里多说两句这个JVM,JVM(Java Virtucal Machine)是一个类似虚拟机的玩意,它运行在操作系统之下,通过与操作系统交互达到与硬件交互的目的。知道这个之后我们看看java文件怎么运行,首先写完一个.java文件之后通过编译器编 ...
基础算法03
不过是笔记本罢了(悲~
Dijkstra 算法(狄克斯特拉算法)这是一种求解无负权边图的最短路径的算法,他的大概过程是先将已确定最短路径的点和未确定最短路径的点分别分为两个集合,一开始所有点都处于后者集合,随后依次从后者集合取出最短路长度最小的点,移到前者集合中。这里要注意这个算法只适用于有向无环图。
该算法是求源点到其他各个顶点的最短路径,如果求解任意两个顶点的最短路径,则需要以每个顶点为源点,重复调用n次Dijkstra算法。
算法步骤:
初始化,令集合S={u},对于集合V-S中的所有顶点i,$dist[i]=G.Edge[u][i]$。
找最小,在集合V-S中依照贪心策略寻找使得dist[j]具有最小值的顶点t,即$dist[t]=min(dist[j])$,即顶点t就是集合V-S中距离原点u最近的顶点。
将顶点t加入集合S中,更新V-S
如果结合V-S为空则算法结束,否则跳转第五步
在第2步中已经找到了源点到t的最短路径,那么对集合V−S中所有与顶点t相邻的顶点j,都可以借助t走捷径。如果$dist[j]>dist[t]+G.Edge[t][j]$,则$dist[j] ...
记录软院2022年1024解谜
首先是为什么写这篇文章,emmm,就当作是打了一次ctf写的wp吧,写都写了不如就发了(雾
再讲一下这次1024的情况,我是在总共15题中做出9题,排名在12位,当然其中也有廖学长的提示(雾
第二题第一题就不说了,兜兜转转搞半天原来就是直接点击链接进入拿到flag{hello1024},害得我想了半天。
第二题题面就很简单,经典的乱码,一眼看出文本编码问题,常见的编码出现乱码原因就是utf-8编码和gbk编码的问题,这里有一个简单的办法就是打开一个编辑器修改编码方式即可,由于正文肯定是使用utf-8编写,因此只需要在gbk编码下将内容录入编辑器再重新以utf-8打开文件即可。
密文:鑷 劧鏁扮殑鍊硷紝淇濈暀灏忔暟鐐瑰悗 62 浣嶏紝涓嶇渷鐣ュ皬鏁扮偣
得到正文,但是不全,这个时候就靠脑洞了……我当时还以为转错了…….(逆天出题人,求一个什么什么数的小数点后62位的值,62位,基本肯定无限不循环小数,尝试${\Pi}$ 和自然对数e, 结果就是求e的小数点后64位。
第三题题面:画家的密码
题目:$a_1=1210a_2=321100a_3=?$
也很简单,可是脑洞开的不够大了. ...
RSA学习
RSA学习了解结构
明文m
密文c
公钥e,一个整数,一般情况下是公开的
两个大质数p,q,一般不公开,通过计算n=p*q得到n,此时n的逆向分解很困难,保证加密安全性
私钥d,解密用的钥匙,不公开,但满足条件$e*d mod (p-1)(q-1)=1$ .所以可计算得出,计算代码:
gmpy2.invert(e,(p-1)*(q-1))
加密过程:$c=m^emodn$ 计算代码: c=pow(m,e,n)
解密过程:$m=c^dmod n$ 计算代码:m=pow(c,d,n)
n可以被直接分解例题:BUUCTF:[WUSTCTF2020]babyrsa
附件给出c,n,e,此题的n不算太大,因此可以分解n为p,q,然后算出私钥d,即可解出答案
exp:
c = 28767758880940662779934612526152562406674613203406706867456395986985664083182n = 730698867716256428074357836610140626042647684817351458735088469257355216 ...
位运算
位运算基础概念以及题目:
概念位与符号:&
12&10—->1100&1010(转换为二进制)
从低到高按位运算,当两个数字都为1,结果才为1,否则为0,因此结果为1000,也就是8
位或符号:|
12|10——->1100|1010
从低到高按位运算,当两个数字都为0,结果才为0,否则为1,因此结果为1110,也就是14
小概念:相同的数异或为0,任何数与0异或为它本身,满足交换律和结合律
异或符号:^
12\^10——->1100^1010
从低到高按位运算,当两个数字都不同,结果才为1,否则为0,因此结果为0110,也就是6。
从结果来看,异或可以看作不进位的加法
左移符号:<<
12<1100<<3
想左移三位,末尾补零,因此结果为1100000.另外,左移一位可以看作该数字乘二。
右移符号: >>
12>>3——->1100>>3=1
右移三位,右移一位可看作除二向下取整
例题2的幂https://leetcode.cn/problems/power-of-t ...
git的基本用法
git命令行的基本用法:
用法定义用法定义网上一找一大把,实在不行看csdn都行,就不赘述了
用法例子这样子说话还是太抽象了,从实际情况出发举个例子来说明吧( 这里我们从头开始新建仓库,对仓库进行修改并提交
首先新建仓库,直接在GitHub建:
这个时候创建了一个远程的空仓库,但是本地还没有这么一个文件夹,所以要git clone:
这样这个叫testProject的仓库就拷贝到我们的本地了,接下来就是要看看分支的问题:
首先第一条指令看出来本地只有一个分支,叫main,红色的是远程分支,这里看到也是main。git remote 可以查看本地仓库是否连接到远程仓库,这里可以看出来我是连接上的。当然我们写项目不可能只用一个分支,因此在本地新建分支是必须的。使用git branch 指令新建分支再用git checkout转换到新的分支
搞清楚分支的概念之后,我们就可以新建文件往里面塞东西了,先塞个文件
保存后我们来看本地仓库的变化:
status查询变化,发现有一个新的文件,但是是红色的,说明没有在本地记录下来,使用命令git add .可以把文件记录到变化中,可以看到 ...
Crypto:来自摸鱼哥的浅学
来自一个学不明白堆的菜的研究:
工具一把梭这里需要一个小工具,叫ciphey,命令行调用即可对密文进行解密,挺方便的。具体的安装方法csdn就有,有一些地方需要注意一下,但还是很快能安装完毕。安装完毕后使用命令行调用:
ciphey -t "需要解密的密文"
直接就返回明文以及具体的解答方式。
像这样:
经典给出一堆乱码,像这种:
base64以及凯撒等简单密码这里装好相应的库,对着密文一通decode就能(大概?解出最最简单的题目了
比如:
var="************************************"flag='NSSCTF{' + base64.b16encode(base64.b32encode(base64.b64encode(var.encode()))) + '}'print(flag)小明不小心泄露了源码,输出结果为:4A5A4C564B36434E4B5241544B5432454E4E32465552324E47424758534D445 ...