Mo1a's blog

首页

关于

归档

algorithm

Knuth洗牌算法

Knuth算法是一种非常常用的洗牌算法,它在很多方面都有着广泛的应用。本文需要一定的概率论知识,包括排列组合、古典概型和条件概率。 问题分析洗牌其实是一种取随机的算法,只有每一面牌在序列中的任意位置出现的概率都相同的时候,我们才可以说一个随机算法是公平的。 最容易想到的公平洗牌方式大概是这种:有n张牌,这n张牌自由组合共有n!个组合,每次只要随机且等可能地从这n!种情况内选取一项,就可以得到一种随机的排列,也就是一次洗牌。那么问题就来了,n在小的时候,n!的数值大小仍可计算,而当n逐渐增大到一定值的时候,n!就会变得不可计算了起来,要随机取得一个情况要耗费的开支太大,时间复杂度达到了o(n!)。 那么,有没有别的方法可以保证一次洗牌开销没那么大而每张牌在任一位置的概率都相等呢? 算法分析我们可以借鉴下插..

更多
loading..
server

一篇文章快速上手Nginx服务器

一篇文章解决Nginx基础操作 本文基于Debian操作系统演示。(不要问我服务器为啥不用CentOS,问就是它无了 【恶 灵 退 散】前方灵魂画手出没 啥是Nginx比如你写了个HTML丢在服务器上,你输入这个服务器的域名去访问,服务器不知道要拿什么给你,也就不能访问到页面。Nginx就跟Apache一样,会监听服务器的80端口(就是http协议浏览器默认端口),有人发请求,它就把它一个特殊文件夹里的网页文件返回回去。也就是说,它是一个Web服务器应用。 Nginx的并发量非常大,能达到50000左右,是Tomcat的很多倍,在部署JavaWeb服务的时候,一个Tomcat处理的并发量有限,如果想要同时处理更多的请求,就需要有一个中间的服务器作为转发。Nginx很强(它是老毛子写的),它有两个很重要的..

更多
web

一篇文章快速上手JavaScript

观此文,你仍需有C语言、HTML、CSS基础之基础。 本文规范基本上基于ECMAScript2015(就是ES6)。 你需要认识C语言的分支与循环处理、HTML的常见标签以及CSS的基础选择器。如果你对C语言的函数指针或者函数式编程常用的lambda表达式有所理解的话,将有助你快速上手JavaScript。 (事件那边你要是懂一点WPF的event原理就更好了……不过没人学C#吧…… 如何输出console.log(); //输出信息 console.warn(); //输出警告,是黄色的 console.error(); //输出报错,是红色的(虽然也不会导致程序中止 它们可以通过传入多个参数来实现一次性输出更多数据。 数据类型通过let声明/定义变量,通过const声明常量。(不再推荐使用var)..

更多
misc

鼠年的年终总结

这半年最大的变化就是从网安去了计算机吧,说实话我觉得转专业带给我的平时生活的改变不是很大,除了不怎么会和室友一起上课了以外,虽然认识了很多从别的专业一起汇聚而来的人,但是其实我发现,新班级也好,旧班级也好,经常一起聊天探讨的也没几个人,虽然都分到一个班里了,但是大家其实很多都还是陌生人。 从我的专业角度来说,这学期,我是真的下决心坚持写博客了。记录自己的所学真的很棒,把网上学到的东西再用自己的话写一遍下来,不仅说是算一种留念,也能说是标记所学,将来在同样的问题上也更不容易翻车。这学期主要是有一门特殊的课叫创新实践。我们转专业学生一开始是没得选的,只能在所剩无几的名额中挑选了。我跟了一个做网络应用的老师(来源于对人工智能算法的抵触,虽然还是没逃掉),前半学期看起来很人畜无害,真的就是最轻松最养老的老师了,直到..

更多
server

在JSP上使用JavaBean

恁诸位新年好哇! 记录一下怎么在JSP中使用JavaBean来避免写重复代码。 什么是JavaBeanJavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。 为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。 JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。 以上来自百度百科。总之,JavaBean就类似你事先写好一个类然后可以在多个不同的文件里引入而不需要在每个JSP文件里都单独声明这个类,可以减少很多的重复代码。 怎么写一个JavaBeanJavaBean的特征在上面已经有所提及了,下面以一个操作JDBC连接MySQL的JavaBean文件来示范如何写JavaBean..

更多
server

JDBC提供的SQL操作API解析

DriveManager类DriveManager类有两个作用:注册驱动与获得数据库连接。 注册驱动使用registerDrive()方法实现,建立连接使用getConnection()方法实现。 registerDriver()在此类中有一段静态代码使用DriverManager.registerDriver(new Driver());完成了驱动的注册,所以已经无须手动调用此方法注册。 getConnection()此方法有三个String类型参数: url:与数据库连接的路径 user:与数据库连接的用户名 password:与数据库连接的密码 此处主要涉及URL的写法,比较特殊:jdbc:mysql://localhost:3306/$DB_NAME。其中: jdbc:连接数据库的协议 ..

更多
loading..
ctf

NPUCTF HappyCheckInVerification WP

本文搬运自我写在别处的文章 题目信息题目链接:https://pan.baidu.com/s/1c_Y0WJmzTdNVyYgjHmUI_Q 提取码: qhh8 Hint:关注西北工业大学信息安全协会微信公众号NWPUSEC 解题过程下载得到无后缀名的名叫zip的文件,把后缀名改成.zip,提示文件已损坏,故用16进制文件查看器检查文件(本文使用HxD)。 这是此文件的文件头,可见zip文件的文件头标记504B0304不在文件头部,反而是zip文件的目录结束标识(504B0506)在文件头。把从00000000-00000015的部分移动至文件尾,保存重新打开,就可以看到zip文件的文件了。此zip文件带有伪加密,可以通过搜索的方法搜索zip文件头标记504B0102,在其偏移5字节的地方改为00(..

更多
server

实现网页登陆的逻辑

实现登陆逻辑至少涉及两个方面,登陆与注册 本文使用SQL语言的MySQL dialect 登陆(Log in)登陆主要是实现将用户提交的含有用户名uname和密码passwd的表单提交给数据库对比,如果发现此条记录在数据库中存在且合法,则返回登陆成功,否则返回登陆失败,需要请求用户重新提交。 这边主要注意的是一个点,在查询的时候我们会使用SQL语句去数据库查询,一般想到的逻辑应该是去查询得到用户名对应的密码,然后再去对比用户提交的密码与数据库返回的密码是否一致。即使用了以下的SQL代码: SELECT passwd FROM user_info WHERE uname = $UNAME; 在登陆成功情况下两者并无任何区别,但实际上这个方式有一个巨大的缺陷:在登陆失败时,这种数据处理方式割裂了“用户名输..

更多
server

在JSP上连接MySQL数据库

驱动准备你需要下载Java Database Connector for MySQL,本文提供一个来自于菜鸟教程的jar包,版本号为5.1.39。点击此处下载。将此文件放入tomcat目录的lib文件夹中。 配置Tomcat的连接池不配置连接池,在使用驱动包的时候tomcat会返回500 Internal Server Error,提示ClassNotFoundException(异常:找不到类),可以通过配置它的连接池来解决问题。 修改server.xml修改位于tomcat目录下的conf/server.xml,找到<GlobalNamingResources>标签,在此标签内我们需要添加内容。 <!--这个标签是已经存在的,找到它然后编辑即可--> <GlobalNami..

更多
1234