蝈蝈俊.net

CSDN 下一代技术社区开发、管理日志

郭红俊ID:ghj1976
[修改头像]
786155次访问,排名35(1)好友25人,关注者84
蝈蝈俊.net
ghj1976的文章
原创 733 篇
翻译 2 篇
转载 3 篇
评论 720 篇
ghj1976的公告
这里发表CSDN 下一代技术社区相关开发管理内容。 我的个人技术Blog 在博客堂
最近评论
出会い系サイト:出会い出会い系サイト出会い喫茶出会い掲示板ナンパ出会いカ……
asiabaa:深受启发。
李 :太感謝嘍
host1860:非常好。哟启发。
怡红公子:谢谢了
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    2004年11月文章用户
    2004年8月文章用图
    2004年9月文章用图
    2005年12月文章用图
    2005年6月文章用图
    CSDN 书签
    CSDN社区组同事的Blog
    OCAN
    wuxilin(RSS)
    我的msn的Blog
    我的技术Blog(RSS)
    我的收集资料的Blog(RSS)
    自己在CSDN马甲的Blog(RSS)
    朋友的Blog
    客齐集播客
    存档
    2008年05月07日

    原创 动态封杀与解封IP

    我们在应对网站的恶意请求时候,一个解决方法就是把有问题的请求IP封杀掉。 如果想快速处理这种问题,就需要编写一段代码,达到一定门槛,自动封杀。再复杂点就是不是永久封杀,还可以自动在一定时间后解封。 封杀的逻辑代码看后面提供的。 需要说明的是:IIS7时,情况发生了不同。   下面的代码,在处理封杀IP时候,不论IIS6还是IIS7 都可以把需要封杀的IP加入封杀列表。但是需要注意的是我们代码写的是全部替换原先的数据。但是在IIS7下,执行的效果是原先的不替换,新加一批封杀IP。当然IIS7下,如果新加的IP原来就有了,则会报如下异常: System.Runtime.InteropServices.COMException was caught  Message="当文件已存在时,无法创建该文件。 (异常来自 HRESULT:0x800700B7)"  Source="System.DirectoryServices"  ErrorCode=-2147024713  StackTrace:    &阅读全文>

    发表于 @ 2008年05月07日 10:34:00|评论(loading...)|编辑

    2008年05月04日

    原创 每个分类取最新的几条的SQL实现

    分类统计时候,我们可能经常会碰到这样的需求,每个分类按照一定顺序,取几条数据,然后在一起显示。 这个问题的解决方法,我们通过搜索引擎,可以找到很多中。但是不是SQL语句过于复杂,就是在数据量比较大时候,性能特别成问题。 今天我就碰到这样一个需求。而我自己的解决方案就是SQL过于复杂,或者性能比较差的。为此我在CSDN论坛发了个帖子,看有没有更好的解决方案。 http://topic.csdn.net/u/20080504/14/5c5866c3-8b91-45ef-ab17-f994f88f8e42.html CSDN的 SQL Server 板块  不愧是高手云集,问题发出不到半小时,就获得了近10种解决方案。经过测试,我把性能最高,且SQL不复杂的方案整理出来。特别感谢 jinjazz 的解答。   问题详细描述如下: 比如,假设我们有下面这样结构的一张表,这张表的数据量非常巨大。CREATE TABLE table1( [ID] [bigint] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](128) NOT阅读全文>

    发表于 @ 2008年05月04日 15:25:00|评论(loading...)|编辑

    2008年04月24日

    原创 【编程游戏】划拳机器人比赛

    CSDN 网友 zswang 组织了一个编程游戏比赛。划拳机器人比赛。类似“Robocode” 的游戏。 比赛相关帖子如下: 【编程游戏】编写一个会划拳的机器人参加擂台赛,规则内详。http://topic.csdn.net/u/20080421/17/6a4d1c20-e1d1-4e9d-99ae-d648cb422ca6.html 【编程游戏】划拳机器人,前面一贴的机器人都集中来了,继续PK。谨慎路过。  http://topic.csdn.net/u/20080423/21/cda52758-a06d-49e1-9db0-eda2b009da8c.html 很有意思的,为了让更多人能参与到这个很有趣的 .NET 编程比赛中来,我转了下面的内容:   划拳介绍       划拳又叫豁拳、猜枚、猜拳、拇战,即饮酒时两人同时伸出手指并各说一个数,谁说的数目跟双方所伸手指的总数相符,谁就算赢,输的人喝酒。此乃我国 古传至今仍时尚流行的饮酒游戏,它增添酒兴,烘托喜庆,是一种民间的酒令。 其技巧性颇强,给玩者留有神机斗智阅读全文>

    发表于 @ 2008年04月24日 10:20:00|评论(loading...)|编辑

    2008年04月18日

    原创 如何用.net Remoting实现一个客户端需要连接多个服务器端?

    比如我们有下面的需求: 三台电脑:A,B,C。我们在 B 和 C 上部署了同样的一个服务,电脑 A 需要根据客户端的选择,自动的切换到底是调用B的服务,还是C的服务。 要实现这个需求,核心就在客户端的调用上。下面我们用一个简单的演示这个功能的代码来说明如何实现。   首先:服务器段 服务器段逻辑,这是非常简单的,我们按照之前的.net编写规范,编写代码即可。熟悉.net Remoting 的完全可以跳过这部分。 下面是一段简单的服务器段逻辑代码using System;using System.Collections.Generic;using System.Text;using System.Net;namespace MyServiceComponent{ public class MyComponent : MarshalByRefObject { public string GetString(short s) { // 返回信息中包含服务器IP,这样我们就知道客户端调用的是哪个服务器 阅读全文>

    发表于 @ 2008年04月18日 15:54:00|评论(loading...)|编辑

    2008年04月10日

    原创 今天碰到了一个我非常佩服的售票员

    我坐公交车的历史,已经有10多年了。今天早上坐852上班的路上,碰到了一个我非常佩服的售票员。佩服她的原因是因为这趟车上,我正好看到2件事情。而她对这两件事情的处理,让我非常有感触,非常有心得。   第一件事情是在望京时,有个乘客下车时,这个售票员走到一个乘客跟前,小声地跟他说了一些话。当时我还觉得很怪异。虽然我就离那个乘客不到2米的地方。但是我只能断断续续的听到几个词。并不明白在说啥。那个乘客下车后,另外一个售票员也觉得很怪异,问她时,她才说那个乘客拿的是学生卡。 那个乘客看起来,老大不小了。估计三、四十了。看起来一点也不可能是学生。按照北京市的规定,发现非学生使用学生卡,卡当时没收,同时罚款不知道多少。违法使用学生卡的事情,我在其他公交车上也看到,但是这个售票员能用这种方式来解决,我是第一次看到。以前最多看到的是:大声地指责,没收卡,或者根本就当这件事情没有发生。 从跟人沟通的角度来看这个问题:争吵,或者视若不见。都不能帮人解决问题。跟他心平气和的沟通。同时一定不要在公众场合批评他,不能让他觉得自己在被公审。这才是督促他解决问题得最好沟通方式。 反面的教材就多了,比如之前阅读全文>

    发表于 @ 2008年04月10日 08:50:00|评论(loading...)|编辑

    2008年04月09日

    原创 Vista和Win2008中如何卸载IE8

    由于我之前装的英文版本的IE8,现在想换成中文版本的, 所以就需要写在原先的IE8 Beta1 英文版,但是按照正常的思路去找卸载的地方,竟然没有找到。考虑到很多人可能会有我类似的问题。特意写了这篇博客帮助大家。 卸载的位置: 控制面板 --> 程序和功能 --> 查看已安装的更新(注意,是在这里) MIcrosoft Windows 分类下面有一个 Windows Internet Explorer 8 ,卸载它即可。IE8 是以更新的方式安装的,而不是一个普通的程序。这点是要需要注意的。 另外,英文版本的IE8 ,版本号是:8.0.6001.17184。 中文版版本是:8.0.6001.17193 。比英文版稍稍新一点。阅读全文>

    发表于 @ 2008年04月09日 09:42:00|评论(loading...)|编辑

    2008年03月26日

    原创 Windows 2008安装体验

    这几天,我家宝宝一直赖在老妈肚子里面,不出来。害得我每天上班都提心吊胆的,也没有工作热情。就等着宝宝出生,可是他就是赖着不出来。 于是,就把公司电脑重装成了中文版的Win2008。 安装一些软件过程中碰到了不少问题,特意整理成这篇博客,让后来着少走弯路。   一、显卡驱动的问题 我电脑的显卡是:NVIDIA GeForce 6200 TurboCache。 GeForce 系列的显卡,在Window2008 下,最新的驱动反而不能用。 安装了最新的驱动后,你的显示器就会黑屏,没有任何治了。最新版本的 169.32,虽然说通过了Vista 的WHQL认证,还是直接黑屏。更不要说其他版本的了。 网上也有其他型号的 GeForce 也碰到了这个问题。我碰到这个问题后,反复试验了多个版本的驱动,一直不行。最后在使用下面版本的驱动后,才搞定。下面版本的是32位操作系统的驱动。 http://www.nvidia.com/object/winvista_x86_96.85.html   网上也有人碰到类似问题,不过他的显卡是:NVIDIA QUADRO NVS 280(PCI阅读全文>

    发表于 @ 2008年03月26日 18:03:00|评论(loading...)|编辑

    2008年03月12日

    原创 InternalServerError时 HttpWebRequest 的 GetResponse 方法处理策略

    现象 我们编码实现请求一个页面时,请求的代码类似如下代码:HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);req.UserAgent = "MSIE6.0";req.Method = "GET";HttpWebResponse res = (HttpWebResponse)req.GetResponse();StreamReader sr = new StreamReader(res.GetResponseStream(), strEncode);strHtml = sr.ReadToEnd();sr.Close();res.Close(); 但是,如果我们请求的这个页面正好是一个有异常发生的页面,或者不存在的页面。我们上面的代码就会在req.GetResponse();这里抛出异常:远程服务器返回错误: (500) 内部服务器错误。 我们通过上面的代码,是不能得到错误发生时候的页面源代码的。   分析原因: (HttpWebResponse)req.GetResponse(); 阅读全文>

    发表于 @ 2008年03月12日 14:34:00|评论(loading...)|编辑

    2008年03月05日

    原创 使用 StackTrace 获得更多跟 Exception 有关的信息

    不知你有没有留意过ASP.net的异常,如下图: 请留意图中用红笔标的地方。那些数字标明出错处位于源代码文件的多少行。 但是,我们通过 Exception.StackTrace 是获得不了这个信息的。这个信息是如何获得呢?这就要用到下面两个类: System.Diagnostics.StackTrace 表示一个堆栈跟踪,它是一个或多个堆栈帧的有序集合。 System.Diagnostics.StackFrame 表示当前线程的调用堆栈中的一个函数调用 下面的代码就替我们扑捉了更多关于异常的信息: public static string EnhancedStackTrace(Exception ex) { return EnhancedStackTrace(new StackTrace(ex, true)); } public static string EnhancedStackTrace(StackTrace st) { StringBuilder sb =阅读全文>

    发表于 @ 2008年03月05日 10:16:00|评论(loading...)|编辑

    2008年02月21日

    原创 其实编码使用代理服务器的门槛非常低

           前面我写的“ASP.net 获得客户端的IP相关知识”博客中,有一个简单的例子,演示了如何客户端编码,修改 HTTP_VIA 和HTTP_X_FORWARDED_FOR ,进而让服务器无法了解你到底是否启用的代理服务器,以及启用的是代理服务器之后的你的真实IP地址。 结合上面的技术,编码使用代理服务器,其实是非常简单的。下面就是客户段的演示代码。比起上篇博客,只修改了几行。        下面演示代码中的代理服务器地址,可能在你试验的时候,已经不通了,请更换新的代理服务器地址。 class Program { static void Main(string[] args) { // 最新代理服务器的地址,可以参看下面的列表 // http://www.proxycn.com/html_proxy/http-1.html proxyTest("ht阅读全文>

    发表于 @ 2008年02月21日 14:52:00|评论(loading...)|编辑

    原创 那些HTTP头会被增加HTTP_前缀

           上一篇博客:ASP.net 获得客户端的IP相关知识 中我提到了,如果你想编码更改 HTTP_VIA、HTTP_X_FORWARDED_FOR 的值,你需要客户端增加的HTTP Head为:VIA、X_FORWARDED_FOR。即,少个 "HTTP_" 前缀。那么,到底读取这些值时,那些HTTP头增加时候需要增加HTTP_前缀,那些又不需要呢?         简单来说,出了一些系统预先定义的,有特殊意义的HTTP头外,其他都需要增加 "HTTP_" 前缀。这是W3C 的 The Common Gateway Interface (CGI) 规范的定义。这些预定义的变量如下: 变量 说明 APPL_MD_PATH 检索 ISAPI DLL 的 (WAM) Application 的元数据库路径。 APPL_PHYSICAL_PATH 检索与元数据库路径相应的物理路径。IIS 通过将 APPL_MD_PATH 转换为物理(目录)路阅读全文>

    发表于 @ 2008年02月21日 14:31:00|评论(loading...)|编辑

    2008年02月20日

    原创 获得客户端的IP相关知识

    ASP.net 获得客户端的IP,最常见的是使用下述代码:string user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 对于了解代理服务器情况的人,我们会知道,如果用户使用了代理服务器,上述代码获得的是代理服务器的IP地址;如果用户使用了多个代理服务器,则是到达服务器的最后一个代理服务器的IP地址。   REMOTE_ADDR 说明: 访问客户端的 IP 地址。 此项信息用户不可以修改。如果真的给改了的话,你也和服务器连接不了了,服务器就是按照这个来与客户端建立连接并进行通讯的。实际我测试修改这个 ServerVariables , 一点效果都没有。仍然获得是实际的值。另: Request.UserHostAddress 和 Request.ServerVariables["REMOTE_ADDR"] 实际是同一个值。   如何绕过代理服务器获得用户真实的IP地址呢? 这时候我们一般是类似如下的代码(这里我简单起见,没有作一些边界判断)priv阅读全文>

    发表于 @ 2008年02月20日 17:27:00|评论(loading...)|编辑

    2008年01月24日

    原创 八年

           昨天,由Sisley Lin 处得知,我将被推荐成了“十大杰出开发技术英雄”候选人之一,有点激动。推荐的理由是我为CSDN 这个最大的中文技术社区的成长所贡献的这些年。当我回首看自己在CSDN经历时,发现自己已为CSDN公司工作了7年半,在CSDN 论坛活动了8年。蓦然回首,八年光阴已匆匆而过,心中真是感慨万千呀。        记得那是在99年底,2000年初时,我从大学毕业刚半年,跟随一个我的铁哥们跳槽到一家新成立的电子商务的网站(http://www.ego88.com/, 不过这个网站现在已经无法访问了)。由于之前我是在一家使用Delphi开发ERP,医院信息系统的公司,我对Delphi非常感兴趣,当时最常去的就是大富翁论坛(http://www.delphibbs.com/)。经这次跳槽后,由于转行做网站,就开始学习ASP技术。在大富翁论坛时,听说新开了一个程序员的论坛CSDN,而CSDN有个板块在讨论ASP,于是乎,就整天泡CSDN论坛的A阅读全文>

    发表于 @ 2008年01月24日 09:50:00|评论(loading...)|编辑

    2008年01月23日

    原创 SQL Server 索引基础知识(10)----Joins 时的三种算法简介

    我们书写查询语句的时候,Join 参数之前可以是下面三个 { LOOP | MERGE | HASH } JOIN  。 如果不使用,则系统自己分析那种方式快,使用那种方式。 这其实是SQL Server 联结时候使用的三种算法。尽管每种算法都并不是很复杂,但考虑到性能优化,在产品级的优化器实现时往往使用的是改进过的变种算法。譬如SQL Server 支持block nested loops、index nexted loops、sort-merge、hash join以及hash team。我们在这里只对上述三种基本算法的原型做一个简单的介绍。   知识点:       Tables join总是两个两个进行的。所以下面的算法都是两个表的联结。 Hash Join (哈希联结) 下图是 SQL Server 标示这种联结的图标,从图标我们就可以看到这个查询的逻辑。 逻辑步骤,如下图: 以数据少的数据表的 Join 字段建立 Hash 值。 对应的数据表计算 Join 字段的 Hash ,再与阅读全文>

    发表于 @ 2008年01月23日 16:05:00|评论(loading...)|编辑

    2008年01月18日

    原创 SQL Server 索引基础知识(9)----Indexing for OR

    我们仍然是通过例子来理解OR运算符的特征 我们仍然使用 http://blog.joycode.com/ghj/archive/2008/01/18/113870.aspx 中的 member 表,这时候,这个表的索引如下: 名字 描述 列 member_corporation_link nonclustered located on PRIMARY corp_no member_ident clustered, unique, primary key located on PRIMARY member_no member_region_link nonclustered located on PRIMARY region_no MemberFirstName nonclustered located on PRIMARY firstname MemberLastName nonclustered located on PRIMARY lastname 我们执行下面的查询SELECT m.LastName, m.FirstName, m.Region_NoFROM db阅读全文>

    发表于 @ 2008年01月18日 14:33:00|评论(loading...)|编辑

    Csdn Blog version 3.1a
    Copyright © ghj1976