一个简单的Servlet容器

文件结构 |-- HttpServer.java |-- Request.java |-- Response.java |-- ServletProcessor.java |-- StaticResourceProcessor.java |-- IndexServlet.java 文件的作用 HttpServer.java 这个类的作用和之前的静态类的服务器作用一样,唯一不同的一点就是在区分静态请求和动态请求上。 不过这边也是有一些问题的,因为如果我们的路径并不是包含"servlet",则这方法也失去了他... [阅读全文]

有关静态文件服务器的编写

详细代码在这:MikeDog 文件结构 |--HttpServer.java |--Request.java |--Response.java 具体作用 首先是三个类,一个是主要的Server类,然后是Request和Response类,后两个是HTTP协议中的两个用于反馈和接受的类。 Request中主要的方法就是从一个HTTP头中抽取出URI,也就是访问路径。代码如下: 主要是因为HTTP协议中的地址信息,以下是一个HTTP请求协议: 从中可以看到URI在第一行的两个空格之间,当然,上面的... [阅读全文]

KMP字符串匹配算法和JDK

一般的朴素字符串匹配算法: 从目标串Target的第一个字符开始扫描,逐一与模式串的对应字符进行匹配,若该组字符匹配,则检测下一组字符 如遇失配,则退回到Target的第二个字符,重复上述步骤,直到整个Pattern在Target中找到匹配,或者已经扫描完整个目标串也没能够完成匹配为止 算法理解起来很简单,实现起来也容易,但是其中包含了过多不必要的操作,也就是在目标串中,有些字符是可以直接跳过,不必检测的 但是在特定的情况下,这样的算法还是有可优化的地方的. 不妨假设我们的目标串:Target = "a b c d e a b c d e a b c d f" 需要匹配的模式串:Pattern = "c d f"; 那么当匹配到如下情况时... [阅读全文]

一切都是奖学金惹的祸

终于到了大三了,也想好好静下心来好好学习了,也要准备马上就要来的实习生面试笔试了。 同时,也到了评奖学金的时刻了。按理说,我的成绩也不错, 而且还有传说中的混奖学金大赛(蓝桥杯)的国三和省一,理论上应该是拿钱没有问题, 可是,不想我在大二上学期,一直特立独行,选了两门超修课,然后忘了= =,忘了。。。 于是,到期中考试我看课表的时候才发现有这两门课,于是乎- -,我就开始准备期末考试了,因为课程都不难,而且我都是有所了解的,所以看看书觉得应付考试也没什么问题,于是就放在一边了,到了离期末还有几周的时候,我去问学长,这两门课的期末考试内容,然后他们告诉我说,没有期末考试。。没有期末考试,。。。于是我这两门蛋疼的课都成了0分,虽然是很悲剧,但是也了了我的一个心愿,拿一次0分= =。。。 这件事就这么安静的过去了,然... [阅读全文]

算法-卡特兰数(组合数学)

常见的问题,HDOJ 1133 他的递推关系式为: 几种常见的题目类型: 括号化 矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案? 出栈顺序 一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列? 突多边形三角划分(握手问题) 在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。... [阅读全文]

调优我的Eclipse

        通过学习之后,决定尝试一次真正意义上的Java调优,于是就开始从自己的Eclipse开始。 准备环境 首先是准备环境使用的是JDK自带的JVM监控插件,一般是在JDK文件夹下的bin目录下,jvisualVM.运行的时候直接./jvisualVM就行,windows下应该是直接点击运行。然后再添加ViualGC插件进行查看Java内存的分配情况。 为了了解我的调优结果,需要知道Eclipse的启动时间,但是Eclipse自己没有类似功能,于是自己写了一个Eclipse的插件,用来记录Eclipse的启动时间。 插件的运行效果: ... [阅读全文]

阿里笔试之行收获

本来想22号考完就写的,结果一直拖到现在。 阿里的题目还是很基础的,比如说Java附加题的第一题,要求写出程序的运行结果、 本来一看还是蛮开心的,因为构造块和静态块我都知道,但是又一看呆了。。。 我不知道静态块的运行顺序。所以只好瞎猜了。。 Java 类的初始化顺序 规则1:在类第一次加载的时候,将会进行静态域的初始化: 1. 将所有的静态数据域初始化为默认值(0、false 和 null) 2. 按照在类中定义的顺序依次执行静态初始化语句和静态初始化块 规则2:调用构造器的具体处理步骤: 1. 将所有的数据域初始化为默认值(0、false 和 null) 2. 按照在类中定义的顺序依次执行初始化语句和初始化块 3. 如果构造器调用的其他的构造器,则转而执行另一构造器 4. 执行构造器主体 所以这道题的顺序是,先tes... [阅读全文]

学习MarkDown语法(2)

列表Markdown 支持有序列表和无序列表。 无序列表使用星号、加号或是减号作为列表标记:     * Red     * Green     * Blue 等同于:     + Red     + Green     + Blue 也等同于:     - Red     - Green     - Blue 有序列表则使用数字接着一个英文句点:   &nb... [阅读全文]