今天见到一个题,让求两个字符串之间的距离,隐约记得之前在 php 中用过这个的现成函数,当时还查了一下原理,是一个俄罗斯的人搞的一个算法,原理是用矩阵,于是就往矩阵上去想,结果没想出来,后来听同学说那是个 dp,想想也是,唉,思路狭隘了
参考这里,http://www.java3z.com/cwbwebho…,写了一个矩阵的版本,…… 阅读全文
字符串反转
今天遇到一个题,让反转字符串,简单题,注意下细节就好了
#include <stdio.h>
#include <string.h>
char *str_reverse(char *str) {
if (str == NULL) {
return NULL;
}
for (char *left=str, *right=str+strlen(str)-1;
left<right; left++, right--) {
char tmp = *left;
*left = *right…… 阅读全文
根据字符表穷举密码
今天遇到一个题,要求根据 a-z0-9 这些字符穷举出所有的可能的密码,搞了搞,代码如下
#include <stdio.h>
#include <string.h>
#define PWD_LEN (3)
char table[] = "abcdefghijklmnopqrstuvwxyz0123456789";
int table_len = strlen(table);
void f(char pwd[], int curr) {
if (curr == P…… 阅读全文
斐波那契数列
见到一个题,让算斐波那契数列的第 n 项,手工推通项没推出来,记忆化递归如下
#include <stdio.h>
#define MAX 1024
int F[MAX] = {0};
int f(int n) {
if (F[n] != 0) {
return F[n];
}
F[n] = f(n-1) + f(n-2);
return F[n];
}
int calc_f(int n) {
if (n <= 0) {
return -1;
}
F[1] = F[2]…… 阅读全文
创建一个指定大小的空白文件
这两天在做多线程下载文件的时候,遇到一个问题,需要在下载文件之前,新建一个同等大小的空白文件出来,好往里面写
#include <stdio.h>
int main() {
FILE *fp = fopen("empty_file", "wb");
fseek(fp, 2*1024-1, SEEK_SET);
char end = EOF;
fwrite(&end, sizeof(cha…… 阅读全文
struct 传参改变内容
今天想到一个问题,就是 struct 的传参和数组的传参的区别,先看代码
#include <stdio.h>
#include <string.h>
struct d {
int n;
char str[100];
};
void chg(struct d *a) {
a->n = 1;
strcpy(a->str, "changing");
printf("%dn", a->n);
printf…… 阅读全文
在 HTTP 协议下分段下载文件
最近想要搞一个 linux 下的多线程下载工具,就像 wget 那样可以,只不过是多线程的,其中遇到一个问题,就是 http 如何分段下载,查找资料最后看到这里,http://www.rosoo.net/a/201006/…
假如一个文件有1000个字节,那么其范围就是0-999,则:
Range: bytes=500- 表示读取该文件的500-999字节,共500字节。
…… 阅读全文
linux 下 fork 后的文件资源处理问题
我们都知道 linux 下 fork 一个子进程出来,他能够继承父进程的文件资源,网络资源等,也从父进程那里拷贝了代码段,数据段,缓冲区等等到自己这里有了新的一份,那么,如果父子进程对于打开的文件资源操作不同,会是怎样的结果呢,先看正常的使用代码
#include <stdio.h>
#include <unistd.h>
int main(i…… 阅读全文
从点击到呈现 — 详解一次HTTP请求(4)
历经千辛万苦,我们请求的响应终于到达了客户端的浏览器,响应到达浏览器之后,浏览器首先判断状态码,如果是 200 开头的就好办,直接进入渲染流程,如果是 300 开头的就要去相应头里面找 location 域,根据这个 location 的指引,进行跳转,这里跳转需要开启一个跳转计数器,是为了避免两个或者多个页面之间形成的循环的…… 阅读全文
从点击到呈现 — 详解一次HTTP请求(3)
请求进入服务器之后,服务器上的的 http 监听进程会得到这个请求,然后一般情况下会启动一个新的子进程去处理这个请求,同时父进程继续监听。http 服务器首先会查看重写规则,然后如果是文件真实存在,例如一些图片,或者 css js 等的静态文件,就会直接把这个文件返回,如果是一个动态的请求,那么会根据 url 重写模块的…… 阅读全文