自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冰上游鱼

一个将要成为“苦逼的”程序猿的学生,在此写下历程

  • 博客(115)
  • 收藏
  • 关注

原创 程序员所需要的思维方式

举个例子,在自动驾驶领域,实际的路况是千变万化的,太多的路况场景是训练数据没有的,如果完全信任AI,那就是拿生命在开玩笑。我们日常工作中,特别是遇到比较难解的复杂问题时,要基于理解事物的本质、内在机制和基本原理,进而推导和解释问题,然后找到趋于根本性的解决办法;一个人不太可能吃别人饭量10倍的饭,也不太可能搬的起别人10倍多的砖,但是思考的速度和深度却差距非常大。所谓的结构化思维,是从无序到有序的一种思考过程,将搜集到的信息、数据、知识等素材按一定的逻辑进行分析、整理,呈现出有序的结构。

2023-12-11 20:29:41 952

原创 HTTP内容篡改实践

HTTP内容篡改实践读完了《图解HTTP》。虽说是一本很轻的书,可后面一章讲的各种攻击让人手痒痒。下面模拟一些不良运营商的做法,给普通http网页加上小广告。首先,用软件模拟运营商路由器层面的http转发。 为了快速实现http转发,网上找一个http的代理服务器即可。直接搜‘’python http agent server“,找到一个很好用的代理服务器 proxpy,可以自己编写插件来改写ht

2015-06-21 12:23:45 2626

原创 博客转到个人站点 mazheng.org(冰上游鱼)

大家好!  谢谢您的关注。本人的博客转到个人站点冰上游鱼。  欢迎大家访问。

2012-11-16 13:17:43 657

原创 如何在控制台写一个简单的进度条

昨天在ubuntu下给同学拷贝电影,又遇到了那个蛋疼的问题,切换到别的界面的时候那个进度条的窗口就没有了,总也不知道拷贝的进度。   于是想写一个进度条,如何在程序中写一个简单的进度条呢?  Window下的简单实现:#include#include#include #define str_len 100int linepos=0;const int dotnum=

2012-06-28 14:51:11 1727 1

原创 poj3518生成素数表+二分查找

本来都是没什么很难的技术的东西,但是时间长不写这样的,还是应该总结一下。筛选法生成质数表(素数表)的基本思想如下:假设有一个数组存放整数2 ~ N,如下所示:2 3 4 5 6 7 8 9 10 11 12 13第一遍筛选去掉所有2的倍数,第二遍筛选去掉所有3的倍数,。。。第sqrt(N)遍筛选去掉所有sqrt(N)-1的倍数。不考虑内存访问的时间问题,纯粹考虑时间复杂度,

2012-06-08 22:21:05 1857

原创 我们为什么需要IPv6

昨天是世界IPv6日,google的首页给出一个IPv6状况的说明。  学校的网管中心也办了很多活动宣传IPv6对互联网的意义。 但是我一直不太理解为什么IPv6是需要的,其必要性在什么地方呢?我们现在也不是每个主机都有一个IP地址的,这个世界不是照常运转吗?所以看了一些网络的东西,来讨论IPv6的必要性。以一个三个人的寝室为例,我们通过一个路由器上网,我们的IP地址为192.

2012-06-07 14:58:36 15952 40

原创 linux时间是如何自动同步的

Linux时钟的分类  Windows 时钟大家可能十分熟悉了,Linux时钟在概念上类似Windows时钟显示当前系统时间,但在时钟分类和设置上却和Windows大相径庭。和 Windows不同的是,Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池

2012-06-06 11:07:42 5831 2

原创 Rabin-Karp字符串匹配算法

Rabin-Karp是一个不错的字符串匹配算法。wiki Rabin-Karp理解之后,发现这种算法不仅在解决一维问题时十分有效,而且二维时也很不错。#include #include#define PRIME 999999#define max_n 4005#define max_len 205int len1,len2,len[max_n];//char

2012-05-31 13:47:47 1178

原创 kmp浅解

kmp的详细算法解析参见Matrix67的博文kmp详解根据这个详解所写的kmp 的c语言实现:#include #include#define max_n 4005#define max_len 205int len1,len2;char str1[max_len],str2[max_len]; //str1为被匹配字符串,str2为patternchar str[ma

2012-05-31 12:05:03 566

原创 生成一个序列的全排列

之前写过全排列的程序,昨天做poj 1731的时候又遇到了。发现自己以前把各个方法基本都试过了 。这里总结一下下面几种方法:方法一:把全排列转换为树的遍历,可以使用深度优先遍历,也可以使用广度优先遍历(需要存储大量中间数据,内存要求大)。具体实现可以用递归,也可用非递归。方法二:根据当前的排列,交换元素,生成下一个,然后再生成下一个。。。。。。比如有个字符序列acdef,当前排

2012-05-26 07:39:31 1287 2

原创 标准I/O函数库的缓冲

标准I/O函数库执行以下三类缓冲:1,完全缓冲意味着只在出现下列情况时才发生I/O缓冲:缓冲区满,进程显示调用fflush,或者进程调用exit终止/标准I/O缓冲区的通常大小为8192字节。2,行缓冲意味着只是在出现下列情况时才发生I/O:碰到一个换行符,进程调用fflush,或者进程调用exit终止3,不缓冲意味着每次调用标准I/O输出函数都发生I/O标准I/O库函数的大多数u

2012-05-24 22:49:42 894

原创 poj 1159 动态规划

这是一道基本的动态规划题,可惜我连一个正确的dp方法都没想出来。惭愧。一直认为DP是几种编程思想里最难掌握的,“状态转移式子”很难总结出来。DP真的应该多练一练。这道题的两个思路:思路1:设min[i][j]表示字符串str[i~j]转化为对称串所需添加的最小字符数,则当str[i]==str[j]时,min[i][j]=min[i+1][j-1];否则,min[i][j]=1

2012-05-16 13:21:45 709

原创 Unix网络编程上卷--第5章

在三路握手中,客户接收到三路握手的第二个分节时,connect函数返回,而服务器要直到接收到三路握手的第三个分节accept函数才返回(即connect返回之后再过一半RTT返回)。使用命令:%:ps -A -o pid,ppid,tty,stat,args,wchan查看进程的各个属性。   网络编程中可能会遇到的问题:1,用fork子进程时,必须捕获SIGCHLD信号。(否

2012-05-10 15:16:42 861

原创 Unix网络编程上卷--第二章

TCP连接的建立:3次握手。 TCP连接的终止:4次应答。 TCP连接的终止挺难理解的。关键是要理解如果其中的每一步的消息丢失了会出现什么情况,而最关键的是理解TIME_WAIT状态。 TIME_WAIT之前的所有应答,如果对方在规定时钟时间内没有“回信”,则重新发送消息。但是最后一次服务器给客户发送FIN后,客户收到FIN要进入TIME_WAIT状态,而不是关闭,这是为什么呢

2012-05-07 22:01:04 773

原创 Unix网络编程上卷读书笔记--源代码的使用和第一章

毋庸置疑,W.RICHARD STEVENS是个计算机领域极少数的天才!他的书,每一本都是经典。 读计算机的书,最好的方法是一个人呆在安静的房间,抱着电脑,一遍看书,一遍敲源代码,推敲源代码。 Unix网络编程上卷,源代码的下载出版社官网下载 下载完之后,发现代码很多,很乱。其实,代码的使用非常简单。 按照文件夹里README文件里的“配置”方法,配置完之后,就可以使用里面的代码了

2012-05-06 20:59:11 1355

原创 fread fwrite 的使用

下面是一个用fread,fwrite向结构体中写入结构体,读出结构体的代码:#include #include #include #includestruct stu{ char name[20]; char sex[20]; int age;};int save(){ struct stu mystu[3]; FILE *fp;

2012-05-01 22:03:42 898

原创 poj 2051 (用Priority_queue求解

一开始就没有深刻理解,认为要做的事儿是:   设时间为p1,p2,...pn.则需要从  p1,p2,p3...pn; 2*p1,2*p2,2*p3...2*pn;... K*p1,K*p2,..K*pn;中找到最小的前K个。   这样的话最坏情况有10^7个数据,辛辛苦苦用了set ,qsort,priority_queue等方法均超时。   实在受不了了,看了一下别人的思路,是

2012-04-25 00:36:35 1316

原创 用rand()产生相同随机数的原因

/* Copyright (C) 1992 Free Software Foundation, Inc.This file is part of the GNU C Library.The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Li

2012-03-28 20:11:43 1941

原创 poj2352 Stars (第一道树状数组

树状数组详解  通过这道题,我对树状数组的理解:  树状数组通过一种类似与二叉树的结构,使得任意连续段的求和操作的时间复杂度为O(log(N)).但是付出的代价是,对某一个元素做修改的时候的时间复杂度不再是O(1),而是O(log(N)).  一般数组求某一连续段的和的时间复杂度为O(N),而树状数组为O(log(N)). 因此,树状数组适合于,需要大量经常计算某连续段的和的情

2012-03-25 22:51:10 526

原创 读《我是一只IT小小鸟》有感

以前听过这本书的大名,以为是那种标题党,骗钱的书。  今天看别人的书评,知道里面是很多人介绍自己大学经历的,一下子很有兴趣。  书很薄,下了个电子版的,花了一晚上就读完了。  里面的很多经历,自己都曾经经历过,时不时看到哪一段的时候就会有一种强烈的共鸣------这不就是当年的(甚至是现在的)自己么,这不就是我那哥们儿的经历么!  那么多的事,只有自己经历了才会懂;但是我们大部分人

2012-03-24 01:31:44 1052

原创 poj 2195 带权重的二分图最大匹配问题

看了很长时间二分图的匹配,没怎么理解,带权重的就更不用说了。  但是既然看了这题,先给刷过吧。  粘的别人的模板,过了,心里很不爽,有空一定要好好读读《算法导论》的这个章节。#include#include#include #define MAXN 110#define inf 1000000000#define _clr(x) memset(x,0xff,sizeof(in

2012-03-17 13:45:53 2967

原创 poj 3297Open Source 解题报告(附测试数据

昨晚看了一篇关于暴雪三重hash算法的文章,有意实践一下。  以前做字符串hash的时候想到过用另一个hash_key去区别同位置的字符串(用strcmp来比较两个字符串是否相等真的好慢),但是因为理论上不可能有hash_key可以唯一的让一个string区别与另一个string,所以一直认为这么做不可行。一直用开地址链表的方法做hash.  看完暴雪三重hash这个文章之后,感觉只要选择

2012-03-13 20:19:20 1106 3

转载 若干经典的字符串哈希函数

// RS Hash Functionunsigned int RSHash( char * str){ unsigned int b = 378551 ; unsigned int a = 63689 ; unsigned int hash = 0 ; while ( * str) { hash = hash * a + ( * str ++ ); a *= b; }

2012-03-13 19:50:02 461

原创 运用消息队列进行进程间通信

发送消息端:/* * ===================================================================================== * * Filename: message_send.c * * Description: * * Version: 1.0 * C

2012-03-12 19:27:00 507

原创 运用管道(pipe)进行进程间通信

<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->   在linux系统中,管道是一种特殊的文件,它的主要作用是实现进程间的通信。   管道的一个显著特点是:当一个管道建立后,将获得两个文件描述符,分别用于对管道读取和写入,通常将其称为管道的写入端和读取端,从写入端写入管道的任何数据都可以从读取端读取。

2012-03-11 14:46:57 1407

原创 进程间通过共享内存通信

server.c /* * ===================================================================================== * * Filename: proc.c * * Description: * * Version: 1.0 * Create

2012-03-09 21:49:10 500

转载 IT专业大学生就业压力很大吗?IT行业是吃青春饭的吗?

1、“it专业的学生太多了,而且就业压力很大”是吗?     现在各个大学为了赚钱拼命扩招,所以不仅IT专业的学生人比较多,而且其他专业的学生人数也比较多,“僧多粥少”就通常意味着就业压力大。但是反过来看,现在很多IT企业都存在“人才荒”的问题,也就是很多企业都招不到合适的人才,我认识一些做IT人力资源方面工作的朋友,他们都普遍反映现在企业里很难招到合适的人才。初看起来很奇怪“每年有很多IT专

2012-03-09 18:31:33 2936

原创 c++与c的一些不同

C++中有,但c语言中没有的限制1,在c++中,用户代码不能调用main()函数,但在c语言中却是允许的。2,完整的函数原型声明在c++中是必须的,但在c语言中却没有这么严格。3,在c++中,用typedef定义的名字不能与已有的结构标签冲突,但在c语言中确实允许的(它们分属不同的名字空间)。4, 当void*指针赋值给另一个类型的指针时,c++规定必须进行强制类型转换,但在c

2012-03-04 22:46:10 445

原创 一个非常好的字符串Hash函数

int cal_key(char *key){ unsigned int h = 0; while (*key){ h = (h << 4) + *key++; unsigned int g = h & 0xf0000000L; if (g) h ^= g >> 24; h &= ~g; } return h

2012-03-04 20:43:30 638

原创 程序比程序员更理解c语言! cdecl程序(分析c语言的声明

c语言的声明有时侯是很复杂的;比如int (*a[5])(int); 再比如:int*((*p)(int))(int);你能说明白它们的意思吗?像这样的声明很容易把一般的程序员弄蒙逼的。cdecl是一个分析这种声明的程序,输入声明形式,用英语输出其描述。一个在线的cdecl.我们也可以自己编写分析程序。编写一个这样的分析程序,很有助于帮助我们理解c语言的声明。下面是

2012-02-29 18:13:05 7417 3

原创 gcc 编译使用动态链接库和静态链接库

在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件。动态链接库的好处就是节省内存空间。1、Linux下创建动态链接库在使用GCC编译程序时,只需加上-shared选项即可,这样生成的执行程序即为动态链接库。例如有文件:hello.c  hello.h main.c编译:gcc hello.c -fPIC -o libhello.so

2012-02-29 15:27:10 1141

原创 仿ping程序(linux网络编程

/* * ===================================================================================== * * Filename: ping.c * * Description: * * Version: 1.0 * Created: 2012年02

2012-02-27 18:01:48 954

原创 获得本地路由表的程序

本程序相当与命令:$netstat -r/* * ===================================================================================== * * Filename: route.c * * Description: * * Version: 1.0 *

2012-02-25 14:05:52 2588 4

原创 伪造源IP地址的DoS攻击

/* * ===================================================================================== * * Filename: dos.c * * Description: * * Version: 1.0 * Created: 2012年02月

2012-02-25 13:53:03 13189 2

原创 广播与多播编程

广播服务器端:/* * ===================================================================================== * * Filename: tserv.c * * Description: * * Version: 1.0 * Created

2012-02-23 16:04:20 662

原创 I/O复用实现单线程并发服务器

/* * ===================================================================================== * * Filename: select.c * * Description: * * Version: 1.0 * Created: 2012年

2012-02-23 15:59:16 1101

原创 多进程和多线程服务器端

多进程服务器端:/* * ===================================================================================== * * Filename: MulProcServer.c * * Description: * * Version: 1.0 *

2012-02-21 18:13:55 619

原创 TCP,UDP基本编程

TCP服务器端/* * ===================================================================================== * * Filename: server.c * * Description: * * Version: 1.0 * Crea

2012-02-21 01:00:28 712

原创 poj 2528 线段树

这道题,咋一看,似乎非常简单。开个数组记录每个小格子的位置是被谁占用了即可。但是注意到, 1 i  然后想到用链表表示每一段:每一次插入的时候就更改一下链表,最后统计链表中的不同的poster的个数。但是这种效率是O(n^2),而且需要大量对链表的操作,时间效率也不高。 后来想到,把所有的li,ri排个序,然后就会大大压缩表示数组的长度,效率将会提高到O(n^2), n=10000.

2012-02-17 22:31:36 504

转载 fork,exec族函数的使用

exec用被执行的程序完全替换调用它的程序的影像。fork创建一个新的进程就产生了一个新的PID,exec启动一个新程序,替换原有的进程,因此这个新的被exec执行的进程的PID不会改变,和调用exec函数的进程一样。#include STd.h>  int execl(cONst char *path, const char *arg, ...);  int execlp(con

2012-01-06 20:55:41 1093

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除