当前位置:  互联网>综合
本页文章导读:
    ▪apache安装详解      下面是linux下安装apache的完整代码,系统是redhat5.5 下载httpd-2.2.6.tar.bz2  把httpd-2.2.6.tar.bz2放到/soft 下 [root@localhost ~]#cd /soft [root@localhost soft]#tar jxvf httpd-2.2.6.tar.bz2    //解压apache.........
    ▪HDU 4668 Finding string (解析字符串 + KMP)      转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个压缩后的串,以及一个模式串,问模式串出现了多少次。 http://acm.hdu.edu.cn/showproblem.php?pid=466.........
    ▪《TCP-IP详解 卷1:协议》学习笔记(二)      三、VLAN技术的研究 1、首先说一下VLAN的概念,何为VLAN? VLAN(Virtual Local Area Network)即虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的.........

[1]apache安装详解
    来源: 互联网  发布时间: 2013-10-26
下面是linux下安装apache的完整代码,系统是redhat5.5
下载httpd-2.2.6.tar.bz2  把httpd-2.2.6.tar.bz2放到/soft 下
[root@localhost ~]#cd /soft
[root@localhost soft]#tar jxvf httpd-2.2.6.tar.bz2    //解压apache的压缩包
[root@localhost soft]#cd httpd-2.2.6     //定位到httpd-2.2.6 文件夹下
[root@localhost httpd-2.2.6]#ls     //查看显示httpd-2.2.6 文件夹下内容
[root@localhost httpd-2.2.6]#./configure --help | more    //查看安装apache配置参数
[root@localhost httpd-2.2.6]#./configure  --prefix=/usr/local/apache  --enable-so    //  配置apache路径
[root@localhost httpd-2.2.6]#make     //编译apache
[root@localhost httpd-2.2.6]#make install    //安装apache
[root@localhost httpd-2.2.6]#cd /usr/local/apache   //进入apache的目录     
[root@localhost apache]#  cd conf/
[root@localhost conf]#cp -a httpd.conf httpd.conf-     //备份apache配置文件
[root@localhost conf]#chkconfig  --list httpd     //查看httpd服务是否已存在
[root@localhost conf]#chkconfig httpd off    //关闭系统自带了httpd的服务,如果存在httpd服务   
[root@localhost conf]#service httpd status    //查看自带httpd服务状态
[root@localhost conf]#/usr/local/apache/bin/apachectl -k start    //linux启动apache命令              
[root@localhost conf]#netstat -an | grep :80    //查看linux80端口是否开启
[root@localhost conf]#ps -aux | grep httpd     //linux下查看apache进程
[root@localhost conf]#cd ../..
[root@localhost local]#cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/apache //拷贝apache启动脚本
[root@localhost local]#vi /etc/rc.d/init.d/apache    // 这里是编辑apache启动脚本
  在开头的#!/bin/sh  下面加上
              #chkconfig: 2345  85  15
[root@localhost local]#chkconfig --add apache    //添加apache服务
[root@localhost local]#chkconfig --list apache    //列出apache服务
[root@localhost local]#service apache stop    //停止apache服务
[root@localhost local]#netstat -an | grep :80     //查看linux的80端口是否关闭
[root@localhost local]#ps -aux | grep httpd     //查看是否存在httpd服务,若果之前自带httpd服务启动的话会导致新添加的apache服务启动失败
[root@localhost local]#service apache start    //启动apache服务
打开你的服务器ip地址,看看是否出现了tomcat的默认首页,如果出现的话,那么恭喜你
linux下安装apache已经成功了
作者:wenwuge_topsec 发表于2013-8-29 11:17:15 原文链接
阅读:0 评论:0 查看评论

    
[2]HDU 4668 Finding string (解析字符串 + KMP)
    来源: 互联网  发布时间: 2013-10-26

转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove

题意:给出一个压缩后的串,以及一个模式串,问模式串出现了多少次。

http://acm.hdu.edu.cn/showproblem.php?pid=4668

这种压缩形式的话,在去年金华邀请赛中出现过,但是那题的范围不大。

直接展开作多串匹配,暴力AC自动机就行。

但是这题的原串不大,但是展开后会非常大。

可以发现压缩串把原串分为一个个区间,那么我们可以分两步统计。

预处理的话需要将压缩串解析成一个个的区间,在这里为了方便后面的匹配,我们假设模式串的长度为P

我在解析的时候,如果相邻两个区间的字符串长度都小于p的话,会将其合并,作用在后面说。

对于每一个区间,查询匹配次数。

1、如果这个区间非压缩的,直接KMP

2、如果这个区间是压缩后的,肯定不能展开暴力KMP。我们只需要统计匹配的起始位置在第一个循环节内的,因为我们在第一个循环节后面添加上p - 1个字符。这样保证了匹配位置在第一个循环节内,然后 便是统计。

这里有点麻烦的是,[ab]10中查询ab的话,我们应该 是aba中查询ab,发现出现了1次,那么最终结果应该统计为多少呢,按理说,aba这个串占用了两个循环节,那么总共有9个aba,应该 是9次,但是显然这里应该 是10次。那么对于[ab]10里面查询ba的话,同样还是把aba拿出来匹配,出现了1次,那么这里应该是9次。看似类似的情况,统计结果却不一样,因为第一次匹配只占用本身这个循环节,而第二次占用了所有循环节。

那么我们在后面添加 p - 1个字符之后,同样是处理kmp,同样是考虑匹配位置占用了所有的循环节统计,然后 再添加上不占用最后一个循环节次数。如[ab]10查询ab,aba中出现一次ab,而[ab]10中有9个aba,所以出现9次,然后再统计ab中有多少个ab,答案为1,所以最终为10。
 注意有些地方的表述,最好用一个较长的串再模拟一下,如[ab]10和[ba]10中查询abab这个串的情况。

第一个问题就算解决 了

第二个问题是跨区间的串,即模式串出现在两个或者两个以上的区间中。

既然如此,要保证这个匹配串要横跨到下一个区间,那么当前区间取一个长度为p - 1的后缀,那么匹配的话肯定会到下一个区间,下一个区间的话就取一个p - 1的前缀,那么保证匹配的串会出现在第一个区间中。

虽然我在前面解析的过程中,保证相邻两个区间长度小于p的话,会合并。

但是有一种情况是[ab]1000000cd[ab]10000000。那么对于中间的区间长度还是小于p。

所以就有可能匹配串横跨三个区间,这里需要特判一下,即第一个区间不超过p - 1,第二个区间全取,第三个区间加上第二个区间的长度要不超过p - 1。

总之就是这么麻烦。。。。应该是我实现得太麻烦。。。

不过唯一的好处便是范围不大,我是用String各种乱搞的。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
#include <string>
#include <queue>
#include <cmath>
#include <algorithm>
#define lson step << 1
#define rson step << 1 | 1
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
typedef long long LL;
const int N = 5005;
struct Node {
    string s;
    int cnt;
    Node () {}
    Node (string _s , int c) :s(_s) , cnt(c) {}
    string cat () {
        string t = s;
        for (int i = 1 ; i < cnt ; i ++)
            s = s + t;
        cnt = 1;
        return s;
    }
    LL len () {
        return (LL)s.size() * cnt;
    }
    //
    string prefix (int l) {
        string str = s;
        for (int i = 1 ; i < cnt && str.size() < l ; i ++) {
            str += s;
        }
        return str.substr (0 , l);
    }
    string suffix (int l) {
        string str = s;
        for (int i = 1 ; i < cnt && str.size() < l ; i ++) {
            str += s;
        }
        return str.substr (str.size() - l , l);
    }
}a[N];
char str[N] , pat[N];
int next[N] , idx , l , p;
void get_next (char *s , int l) {
    next[0] = -1;
    int i = 0 , j = -1;
    while (i < l) {
        if (j == -1 || s[i] == s[j]) {
            i ++; j ++;
            next[i] = j;
        }
        else j = next[j];
    }
}
void gao (string s , int tot) {
    if (s == "") return ;
    if (idx == 0 || s.size() * tot >= p || a[idx - 1].len() >= p) {
        a[idx ++] = Node (s , tot);
    }
    else {
        a[idx - 1].cat ();
        a[idx - 1].s += Node (s , tot).cat();
    }
} 
int match (string s , char *t , int p) {
    int l = s.size() ;
    int i = 0 , j = 0 , ans = 0;
    while (i < s.size()) {
        if (j == - 1 || s[i] == t[j]) {
            i ++; j ++;
            if (j == p) {
                ans ++;
                j = next[j];
            }
        }
        else j = next[j];
    }
    return ans;
} 
int main () {
    #ifndef ONLINE_JUDGE
        freopen ("input.txt" , "r" , stdin);
        freopen ("output.txt" , "w" , stdout);
    #endif
    while (scanf ("%s %s" , str , pat) != EOF) {
        idx = 0;
        l = strlen (str);p = strlen (pat);
        get_next (pat , p);
        string s = "";
        int tot = 1;
        for (int i = 0 ; i < l ; i ++) {
            if (str[i] == '[') {
                if (s == "") continue;
                gao (s , tot);
                s = ""; tot = 1;
            }
            else if (str[i] == ']') {
                tot = 0;
                i ++;
                while (isdigit(str[i]))
                    tot = tot * 10 + str[i ++] - '0';
                i --;
                gao (s , tot);
                s = ""; tot = 1;
            }
            else s += str[i];
        }
        gao (s , tot);
        s = ""; tot = 1;
        LL ans = 0;
        // for (int i = 0 ; i < idx ; i ++) {
        //     cout << a[i].s << " " << a[i].cnt << endl; 
        // }
        for (int i = 0 ; i < idx ; i ++) {
            if (a[i].len() < p) continue;
            if (a[i].cnt == 1) ans += match (a[i].s , pat , p);
            else {
                int use = min(a[i].cnt , 1 + (p - 1 + (int)a[i].s.size() - 1) / (int)a[i].s.size());
                string s = "";
                for (int j = 1 ; j < use ; j ++) {
                    s += a[i].s;
                }
                s = a[i].s + s.substr (0 , min ((int)s.size() , p - 1));
                int tmp = match (s , pat , p);
                ans += (LL)tmp * (a[i].cnt - use + 1);
                if (p) {
                    s = "";
                    for (int j = 1 ; j < use ; j ++)
                        s += a[i].s;
                    ans += match (s , pat , p);
                }
            }
        }
        for (int i = 0 ; i < idx - 1 ; i ++) {
            s = a[i].suffix (min (a[i].len () , p - 1LL));
            if (a[i + 1].len () < p - 1) {
                s += a[i + 1].cat ();
                if (i + 2 < idx) {
                    s += a[i + 2].prefix (min (a[i + 2].len () , p - 1 - a[i + 2].len ()));
                }
            }
            else {
                s += a[i + 1].prefix (min (a[i + 1].len () , p - 1LL));
            }
            ans += match (s , pat , p);
        }
        printf ("%I64d\n" , ans);
    }
    return 0;
}







作者:ACM_cxlove 发表于2013-8-29 20:28:25 原文链接
阅读:0 评论:0 查看评论

    
[3]《TCP-IP详解 卷1:协议》学习笔记(二)
    来源: 互联网  发布时间: 2013-10-26

三、VLAN技术的研究

1、首先说一下VLAN的概念,何为VLAN?

VLAN(Virtual Local Area Network)即虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的新兴技术。

VLAN是为解决以太网的广播问题和安全性而提出的一种协议,它在以太网帧的基础上增加了VLAN头,用VLAN ID 把用户划分为更小的工作组,限制不同工作组间

的用户二层互访,每个工作组就是一个虚拟局域网。虚拟局域网的好处是可以限制广播范围,并能够形成虚拟工作组,动态的管理网络。

 

2、VLAN在交换机上的实现方法,可以大致划分为4类:

(1)基于端口划分的VLAN

这种划分VLAN的方法是根据以太网交换机的端口来划分,比如交换机的1-4端口为VLAN10(注意:此处的10即为VLAN ID号),5-17为VLAN20,18-24为VLAN

30,当然,这些属于同一VLAN的端口可以不连续,如何配置,由管理员来决定,如果有多个交换机,例如,可以指定交换机1的1-6端口和交换机2的1-4端口为同

一个VLAN,即同一VLAN可以跨越数个以太网交换机,根据端口划分是目前定义VLAN的最广泛的方法。

这种划分方法的优点是定义VLAN成员时非常简单,只要将所有的端口都指定一下就可以了。它的缺点是如果VLAN A的用户离开了原来的端口,到了一个新的交换

机的某个端口,那么就必须重新定义。

(2)基于MAC地址划分VLAN

这种划分VLAN的方法是根据每个主机的MAC地址来划分,即对每个MAC地址的主机都配置它属于哪个组。这种划分VLAN的方法的最大优点就是当用户物理位置移动

时,即从一个交换机到其他的交换机时,VALN不用重新配置,所以可以认为这种根据MAC地址的划分方法是基于用户的VLAN,这种方法的缺点是初始化时,所有的

用户都必须进行配置,如果有几百个甚至上千个用户的话,配置是非常累的。而且这种划分方法也导致了交换机的效率降低,因为每一个交换机的端口都可能存在

很多个VLAN组的成员,这样就无法限制广播包了。另外对于使用笔记本电脑的用户来说,他们的网卡可能经常更换,这样,VLAN就必须不停的配置。

(3)基于网络层划分VALN

这种划分VLAN的方法是根据每个主机的网络层地址或协议类型(如果支持多协议)划分的,虽然这种划分方法是根据网络地址,比如IP地址,但它不是路由,与

网络层的路由毫无关系。它虽然查看每个数据包的IP地址,但由于不是路由,所以,没有RIP,OSPF等路由协议,而是根据生成树算法进行桥交换。

这种方法的优点是用户的物理位置变了,不需要重新配置所属的VLAN,而且可以根据协议类型来划分VLAN,这对网络管理者来说很重要,还有,这种方法不需要

附加的帧标签来识别VLAN,这样可以减少网络的通信量。

这种方法的缺点是效率低,因为要检查每个数据包的网络层地址是需要消耗处理时间的(相对于前两种方法),一般的交换芯片都可以自动检查网络上数据包的以

太网帧头,但要让芯片能检查IP帧头,需要更高的技术,同时也更费时。当然,这与各个厂商的实现方法有关。

(4)根据IP组播划分VLAN

IP组播实际上也是一种VLAN的定义,即认为一个组播组就是一个VLAN,这种划分的方法将VLAN扩大到了广域网,因此这种方法具有更大的灵活性,而且也很容易

通过路由器进行扩展,当然这种方法不适合局域网,主要是效率不高。

 

 3、VLAN标准:IEEE802.1Q


与标准以太网帧头相比,VLAN报文格式在源地址后增加一个4字节的802.1Q标签,包含了2个字节的标签协议标识(TPID-Tag Protocol Identifier,它的值是

8100),和2个字节的标签控制信息(TCI-Tag Control Information),TPID是IEEE定义的新的类型,表明这是一个加了802.1Q标签的报文。

VALN ID:这是一个12位的域,指明VLAN的ID,一共4096个(2^12),取值为0-4095,每个支持802.1Q协议的主机发送出来的数据包都会包含这个域,以指明自

                    己所属的   VLAN。

CFI(canonical format indicator):这一位主要用于总线型的以太网与FDDI、令牌环网交换数据时的帧格式。

Priority:这3位指明帧的优先级。一共有8种(0-7)优先级,主要用于当交换机阻塞时,优先发送优先级高的数据包。

 

4、交换机中access和trunk详解

vlan的标准802.1q中采用的是untagged,tagged这两个术语来制定vlan规范,并没有access,trunk。然而大多数实际的交换机设备在配置时,却都采用
 
access,trunk。下面是交换机端口收发报文的基本规则:


    
最新技术文章:
▪用户及权限基础 2---- Linux权限    ▪用户及权限基础 3---- Linux扩展权限    ▪git 简明教程(1) --创建及提交
▪背包 代码    ▪json对象的封装与解析    ▪01背包,完全背包,多重背包 ,模板代码
▪apache安装详解    ▪HDU 4668 Finding string (解析字符串 + KMP)    ▪《TCP-IP详解 卷1:协议》学习笔记(二)
▪《TCP-IP详解 卷1:协议》学习笔记(持续更新...    ▪windows下使用swig    ▪gensim试用
▪Linux Shell脚本编程--nc命令使用详解    ▪solr对跨服务器表联合查询的配置    ▪递归和非递归实现链表反转
▪Linux磁盘及文件系统管理 1---- 磁盘基本概念    ▪Cholesky Decomposition    ▪HTTP协议学习
▪用C语言写CGI入门教程    ▪用hdfs存储海量的视频数据的设计思路    ▪java多线程下载的实现示例
▪【原创】eAccelerator 一个锁bug问题跟踪    ▪hadoop学习之ZooKeeper    ▪使用cuzysdk web API 实现购物导航类网站
▪二维数组中的最长递减子序列    ▪内嵌W5100的网络模块WIZ812MJ--数据手册    ▪xss 跨站脚本攻击
▪RobotFramework+Selenium2环境搭建与入门实例    ▪什么是API    ▪用PersonalRank实现基于图的推荐算法
▪Logtype    ▪关于端口号你知道多少!    ▪Linux基本操作 1-----命令行BASH的基本操作
▪CI8.7--硬币组合问题    ▪Ruby on Rails 学习(五)    ▪如何使用W5300实现ADSL连接(二)
▪不允许启动新事务,因为有其他线程正在该会...    ▪getting start with storm 翻译 第六章 part-3    ▪递归求排列和组合(无重复和有重复)
▪工具类之二:RegexpUtils    ▪Coding Interview 8.2    ▪Coding Interview 8.5
▪素因子分解 Prime factorization    ▪C# DllImport的用法    ▪图的相关算法
▪Softmax算法:逻辑回归的扩展    ▪最小生成树---Kruskal算法---挑战程序设计竞赛...    ▪J2EE struts2 登录验证
▪任意两点间的最短路径---floyd_warshall算法    ▪Sqoop实现关系型数据库到hive的数据传输    ▪FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream...
▪Ubuntu 13.04 – Install Jetty 9    ▪TCP/IP笔记之多播与广播    ▪keytool+tomcat配置HTTPS双向证书认证
▪安装phantomjs    ▪Page Redirect Speed Test    ▪windows media player 中播放pls的方法
▪sre_constants.error: unbalanced parenthesis    ▪http headers    ▪Google MapReduce中文版
▪The TCP three-way handshake (connect)/four wave (closed)    ▪网站反爬虫    ▪Log4j实现对Java日志的配置全攻略
▪Bit Map解析    ▪Notepad 快捷键 大全    ▪Eclipse 快捷键技巧 + 重构
▪win7 打开防火墙端口    ▪Linux Shell脚本入门--awk命令详解    ▪Linux Shell脚本入门--Uniq命令
▪Linux(Android NDK)如何避免僵死进程    ▪http Content-Type一览表    ▪Redis实战之征服 Redis + Jedis + Spring (二)
▪Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源...    ▪利用SQOOP将ORACLE到HDFS    ▪django输出 hello world
▪python re    ▪unity3D与网页的交互    ▪内存共享基本演示
▪python join    ▪不再为无限级树结构烦恼,且看此篇    ▪python实现变参
▪打开文件数限制功能不断地制造问题    ▪Arduino Due, Maple and Teensy3.0 的 W5200性能测试    ▪Selenium实例----12306网站测试
▪基于协同过滤的推荐引擎    ▪C4.5决策树    ▪C#HTTP代理的实现之注册表实现
▪nosql和关系型数据库比较?    ▪如何快速比较这两个字符串是否相等?    ▪hdoj 1863 畅通工程 最小生成树---prime算法
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3