posts - 13,  comments - 4,  trackbacks - 0

//UTF字符转换
var UTFTranslate = {
Change:function(pValue){
return pValue.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,"&#x$2;")});
},
ReChange:function(pValue){
return unescape(pValue.replace(/&#x/g,'%u').replace(/\\u/g,'%u').replace(/;/g,''));
}
};

//Asc转换
var AscTranslate = {
Change: function(pAscString, pBoxId){
/* 转ASCII */
box = document.getElementById(pBoxId);
box.innerHTML = '';
for(i = 0; i < pAscString.length; i++)
{
var asc = pAscString.charCodeAt(i);
var str = String.fromCharCode(asc);
box.innerHTML += str + ':' + asc + '<br/>';
}
}
}

posted @ 2012-05-13 14:35 沼渊 阅读(8) 评论(0) 编辑

小明在家跟妈妈说,我要吃水果
妈妈去水果摊去买水果,看看哪个便宜就买哪个。
最后买回去了橘子。
这就叫抽象类。


你在街上被人群殴,有人用棍子打你,有人用脚踹,有人用拳头。反正你费血了。
这就叫接口。

 

 

这样吧,你的电脑上只有一个USB接口。
这个USB接口可以接MP3,数码相机,摄像头,鼠标,键盘等。。。
好了,这里就有一个问题:所有的上述硬件都可以公用这个接口,而且有很好的扩展性。
这就是接口


你有一辆宝马的汽车,有一天,你拿它去越野了,轮胎,哎,自然爆掉,现在你想换轮胎。
你不想换宝马的轮胎,太贵。
你不想换qq的轮胎,不好使。
你想换OOOO的,换了,好用。
这就是抽象类。

 

 

接口和抽象类都是多态。
假设
我要拿遥控器打开电器
接口和抽象类多态的侧重点不同。
接口的侧重点在遥控器
多态的侧重点在电器

 

 

1、首先让理解接口和抽象类的使用环境
横看接口竖看类:横向扩展使用接口;纵向扩展使用抽象基类;横向和纵向都要扩展,使用抽象基类继承接口。
在差异较大的对象中追求功能上的共性时,使用接口。
在差异较小的对象中追求功能上的不同时,使用抽象基类,因为抽象基类可以包含实现的成员。

比如说,篮球场上有前锋(forward)、中锋(center)、后卫(guard),无论哪个位置,前锋、中锋和后卫都有防守和进攻的责任,另外中锋专注于篮板。这时候,可以定义运动员(player)抽象基类,抽象基类中定义虚(virtual)方法:Attack(进攻)、Defense(防守),然后让前锋类、中锋以及后卫类去重载(override)。
class Player
{
public virtual void Attack(){}
public virtual void Defense(){}
}
class Forward:Player
{
public override void Attack(){//前锋的进攻}
public override void Defense(){//前锋的防守}
}
class Center:Player
{
public override void Attack(){//前锋的进攻}
public override void Defense(){//前锋的防守}
public void Rebound(){//抢板}
}
class Guard:Player
{
public override void Attack(){//前锋的进攻}
public override void Defense(){//前锋的防守}
}
class PlayerInvoke:Player
{
private Player _player;
public PlayerInvoke(Player player)
{
_player=player;
}
public void Attack()
{
_player.Attack();
}
public void Defense()
{
_player.Defense();
}
}
调用的时候
Player player=new Forward();
Player player=new Center();
Player player=new Guard();
PlayerInvoke pi=new PlayerInvoke(player);
pi.Attack();
这是简单工厂实际模式的简单应用,此时你要查看哪个位置运动员的防守、进攻不是灵活多了?而且,在增加其它位置的运动员时,易于扩展和维护。

 

 

2、抽象基类:实现代码复用
人分男人和女人,不论男人女人都有吃饭(这就是共性,当然还有很多其它共性),但是男人和女人有其它行为是不一样的(比如上厕所的方式,^_^低俗)..这时候可以把男人和女人的共性拿出来,然后使用集成,这样男人女人类都复用这些代码。
abstract class Person
{
public void Eating()
{//人吃饭}
public virtual void WC()
{
//男人和女人类重写
}
}
class Female:Person
{
public override void WC(){}
}
class Male:Person
{
public override void WC(){}
}

 

3、接口:面向接口编程模式、适配器模式等
接口表示调用者和设计者的一种约定,在多人合作开发同一个项目时,事先定义好相互调用的接口可以大大提高开发的效率。接口是用类来实现的,实现接口的类必须严格按照接口的声明来实现接口提供的所有功能。有了接口,就可以在不影响现有接口声明的情况下,修改接口的内部实现,从而使兼容性问题最小化。

当其他设计者调用了接口后,就不能再随意更改接口的定义,否则项目开发者事先的约定就失去了意义。但是可以在类中修改相应的代码,完成需要改动的内容。

抽象类

抽象类是指这个类是不完全可用的,只能作为其它类的基类。抽象类和其它非抽象类的最大区别之处在于:抽象类不能被实例化。

1) 抽象类和接口都不能被实例化

2)接口是完全抽象的成员集合;抽象类可以完全实现,也可以部分实现或者根本不实现,从而封装继承类的通用功能

3) 抽象类只能作为基类使用,接口可以从其它基接口继承

4)接口成员默认访问方式是public,接口成员定义不能包含任何访问修饰符;抽象类则不然

5) 接口中不能声明任何种类的静态成员,抽象类则可以

6) 接口成员必须只能是方法、属性、索引器和事件,且不提供实现;抽象类还可以声明字段以及实现的方法和属性等

7) 抽象方法只能在抽象类中声明

 

 

interface IUSB
{
void Connect();
void Close();
bool SendByteToDevice(long location,byte b);
byte GetByteFromDevice(long location);
}

class MP3:IUSB
{
void Connect()
{
MessageBox.Show("MP3 Connected");
}

void Close()
{
MessageBox.Show("MP3 Removed From USB Interface");
}
bool SendByteToDevice(long location,byte b)
{
return false;
}
byte GetByteFromDevice(long location)
{
return 0;
}
}


class Mouse:IUSB
{
void Connect()
{
MessageBox.Show("Mouse Connected");
}

void Close()
{
MessageBox.Show("Mouse Removed From USB Interface");
}
bool SendByteToDevice(long location,byte b)
{
return false;
}
byte GetByteFromDevice(long location)
{
return 0;
}
}



main(string[] fucks)
{
IUSB usb=new MP3();
usb.Connect();
usb.Close();

usb=new Mouse();
usb.Connect();
usb.Close();
}


上面的就是接口。

接口主要用于多态化方法。




class BaoMaCar
{
AbLunTai LunTai= new BaoMaLunTai();
void runLongTime(){}
}

abstract class AbLunTai 
{
string Name="AbLunTai";
}


class BaoMaLunTai
{

string Name="BaoMaLunTai";
}

class OOOOLunTai
{

string Name="OOOOLunTai";
}

main(string[] gays )
{
BaoMaCar car=new BaoMaCar();
car.runLongTime();
car.LunTai=new OOOOLunTai();
}

这就是抽象类,多用于多态对象。

 

 

关于重用:
LunTai dai = new BaoMaLuntai();
Console.WriteLine(dai.size);
public abstract class LunTai 
{
public int size = 50;
}

public class BaoMaLuntai 
{

}

public class OOOOLuntai 
{

}

posted @ 2011-10-28 01:03 沼渊 阅读(97) 评论(0) 编辑

堆,就是自己的房子,是我们自己一块砖一块砖累积起来的。所以里面存放的都是我们自己的东西。引用就像自己,虽然我们身在他乡,但永远是属于这个家庭的,这不会不会改变,除非你自己断绝和家庭的关系,就像是垃圾回收。 

 

栈,一看就知道是客官,既然是旅店,那么所有内部的东西都是共有的了,我们进去就满了,我们出来就空了,所以值就是旅客,离开时就失效了。

posted @ 2010-12-07 18:04 沼渊 阅读(54) 评论(0) 编辑

asp.net开发中,经常碰到“从客户端检测到有潜在危险的request.form 值”错误提示,很多人给出的解决方案是:

1、web.config文档<system.web>后面加入这一句: <pages validaterequest="false"/> 
示例: 
<?xml version="1.0" encoding="gb2312" ?> 
<configuration> 
<system.web> 
<pages validaterequest="false"/> 
</system.web> 
</configuration>

2、在*.aspx文档头的page中加入validaterequest="false",示例如下: 
<%@ page validaterequest="false" language="c#" codebehind="index.aspx.cs" autoeventwireup="false" inherits="mybbs.webform1" %> 

其实这样做是不正确的,会给程序安全带来风险。

  asp.net 1.1后引入了对提交表单自动检查是否存在xss(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,asp.net的引擎会引发一个 httprequestvalidationexceptioin。这是asp.net提供的一个很重要的安全特性。因为很多程序员对安全没有概念,甚至都不知道xss这种攻击的存在,知道主动去防护的就更少了。asp.net在这一点上做到默认安全。这样让对安全不是很了解的程序员依旧可以写出有一定安全防护能力的网站。

  但是,当我google搜索 httprequestvalidationexception 或者 "a potentially dangerous request.form value was detected from the client"的时候,惊异的发现大部分人给出的解决方案竟然是在asp.net页面描述中通过设置 validaterequest=false 来禁用这个特性,而不去关心那个程序员的网站是否真的不需要这个特性。看得我这叫一个胆战心惊。安全意识应该时时刻刻在每一个程序员的心里,不管你对安全的概念了解多少,一个主动的意识在脑子里,你的站点就会安全很多。

  为什么很多程序员想要禁止 validaterequest 呢?有一部分是真的需要用户输入"<>"之类的字符。这就不必说了。还有一部分其实并不是用户答应输入那些轻易引起xss的字符,而是讨厌这种报错的形式,究竟一大段英文加上一个asp.net典型异常错误信息,显得这个站点出错了,而不是用户输入了非法的字符,可是自己又不知道怎么不让它报错,自己来处理报错。

  对于希望很好的处理这个错误信息,而不使用默认asp.net异常报错信息的程序员们,你们不要禁用validaterequest=false。

  正确的做法是在你当前页面添加page_error()函数,来捕捉所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。假如当前页面没有page_error(),这个异常将会送到global.asax的application_error()来处理,你也可以在那里写通用的异常报错处理函数。假如两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。

  举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的code-behind页面中加入这么一段代码:

protected void page_error(object sender, eventargs e)
{
exception ex
= server.getlasterror();
if (httpcontext.current.server.getlasterror() is httprequestvalidationexception)
{
httpcontext.current.response.write(
"请输入合法的字符串【<a href=\"javascript:history.back(0);\">返回</a>】");
httpcontext.current.server.clearerror();
}
}

  这样这个程序就可以截获 httprequestvalidationexception 异常,而且可以按照程序员的意愿返回一个合理的报错信息。

  这段代码很简单,所以我希望所有不是真的要答应用户输入之类字符的朋友,千万不要随意的禁止这个安全特性,假如只是需要异常处理,那么请用类似于上面的代码来处理即可。

  而对于那些通过 明确禁止了这个特性的程序员,自己一定要明白自己在做什么,而且一定要自己手动的检查必须过滤的字符串,否则你的站点很轻易引发跨站脚本攻击。

  关于存在rich text editor的页面应该如何处理?

  假如页面有富文本编辑器的控件的,那么必然会导致有类的html标签提交回来。在这种情况下,我们不得不将validaterequest="false"。那么安全性怎么处理?如何在这种情况下最大限度的预防跨站脚本攻击呢?

  根据微软的建议,我们应该采取安全上称为“默认禁止,显式答应”的策略。

  首先,我们将输入字符串用 httputility.htmlencode()来编码,将其中的html标签彻底禁止。

  然后,我们再对我们所感爱好的、并且是安全标签,通过replace()进行替换。比如,我们希望有""标签,那么我们就将""显式的替换回""。

void submitbtn_click(object sender, eventargs e)
{
//将输入字符串编码,这样所有的html标签都失效了。
stringbuilder sb = new stringbuilder(httputility.htmlencode(htmlinputtxt.text));
//然后我们选择性的答应<b> 和 <i>
sb.replace("&lt;b&gt;", "<b>");
sb.replace(
"&lt;/b&gt;", "</b>");
sb.replace(
"&lt;i&gt;", "<i>");
sb.replace(
"&lt;/i&gt;", "</i>");
response.write(sb.tostring());
}

 

这样我们即答应了部分html标签,又禁止了危险的标签。

根据微软提供的建议,我们要慎重答应下列html标签,因为这些html标签都是有可能导致跨站脚本攻击的。


<applet> 
<body> 
<embed> 
<frame> 
<script> 
<frameset> 
<html> 
<iframe> 
<img> 
<style> 
<layer> 
<link> 
<ilayer> 
<meta> 
<object>


可能这里最让人不能理解的是<img>。但是,看过下列代码后,就应该明白其危险性了。
<img src="javascript:alert('hello');">

posted @ 2010-09-29 16:28 沼渊 阅读(402) 评论(0) 编辑

一张图片引发的血案:让我写下这篇文章

  程序员:
  这个职业曾令多少人向往...多少人追求...多少人去做.
  至今...程序员的冬天到来了.计算机应届生出来.还要学习ASP、PHP、java、jsp等等程序语言.
  等到去找工作的时候.被人拒之门外.简历连一张传真纸也不如.为什么?为什么呢?
  有的应届毕业的程序员.往往怀着造福中国互联网.造福自己.等等的美梦(暂且说是美梦)
  等到被别人拒之门外的时候.怀着一颗失落的心.就是薪水.当初憧憬2000-3000.甚至更高.到后来,1500-2500再到1000-2000甚至500-1000.甚至有的程序员直接了当的告诉别人.让我在这里实习吧.管吃住.什么都行.
  呵呵.话就说到这份上了.还是没人要...............
  有些人坚持下来了,每个月1200左右.有的人该行去跑保险.去做网管.等等.
  原因呢?为什么?为什么呢?
   特别是名牌高校的.出来呢.基本上是高级民工.小公司不要.中型公司怕你跑.大型公司没资格.社会经验也没有.
   特别是计算机行业的.你没经验.无论你是那个学校的.你什么都不是.只是民工.高级民工!
   原因:
   1,缺乏上进心.
   2,没有长久的心态.总想当暴发户.呵呵.做梦去吧.
   3.各地伟大的培训班机构搞的了.中专毕业.高中毕业.或者是选择错专业的学生.去什么北大青鸟之类的IT培训机构,出来小型公司是很欢迎的.相比那些高学历的.真是河东河西一两年.


    应届生啊.应届程序员啊.悲哀啊.呵呵....

 
    现在的程序员被戏虐为"干挨踢的"或者"妓女".好多程序员都自嘲"从小不努力,老大干挨踢",更有甚者为此跳了楼,不知道选择了干挨踢,是不是就是走错世界的人?
    也许在很多年前,程序员在很多人的眼里是一个很神秘的职业,非常令人向往。但现在,程序员好像分成了两部分,一部分是高高在上的所谓黑客,另外的一部分却成了力工。现在的我,还能说自己是一个程序员。因为成天还能在电脑前坐着。但是公司除了我有这个特权,别的员工都是一半的时间在外维护或实施,另外的一半时间才能看着电脑睡觉。可谓是一种悲哀。
   近一段时间遇到着急找工作的有两类人,一是工作经验不足一年的;二是30岁到40岁的程序员。工作经验不足的,公司不招聘,可以理解,为了追求利益的最大化,不愿意在员工的培训上下投资。但对于有经验的程序员为什么也是这样?
    年龄较大的程序员,他们的技术不能说不熟练,为什么还不要他们呢?有的说公司项目不足,需裁员;有的说,这个方向前景不好,还是要找一个稳当一点的。其中有一位,比我稍长,我们聊得很投机,他说:如果不做这一行,我们又能做什么?不做开发,就相当于文盲。如去经商,不擅长经营,对未来很是迷茫。
    中国软件业发展得究竟怎样。我从网上获得的统计资料,08年度软件业总产值为1500多个亿,另有宣传未来将是中国软件发展的黄金时期。我们全国的产值(如果是准确的话)仅为IBM公司的1/5。如果看中国程序员的数量增长速度,我觉得大有希望,但从质量上看,却值得怀疑。这两年,全国的培训机构和高等院校好象赶风似的,都在使劲培养JAVA和.net程序员,因此在招聘会上看到上至研究生,下至初中生的程序员,你就不会觉得诧异了。另外负责这个方向的国家某部门,他们的公章也很随意盖,因为一张证书纸最少能赚三、四百。用国家资源赚自己钱的部门又不只是他们,有权不用过期作废。
    软件公司最想要的程序员,是具有两三年工作经验的,这是所谓的性价比,人才培训费用转移到大学生的家庭。而年龄较大的程序员,一般归纳为:学习能力差、体质下降、要求高,另一个更重要的原因,是软件公司自身的原因。所谓项目,大多数是通过攻关得来的,把重心都用在维护关系上,既然不用讲究项目质量,那么花大价钱,请大量有经验的程序员就没有理由了。项目忽悠,能用就行。这样伤害的到底是谁?公司老板是最大受益者,赚几百万就走人。真正吃亏的是我们程序员和国家软件产业。看国外,四五十岁的程序员比比皆是,待遇与做管理相比还高一些,还很受尊重,如果国内真是这样的话,热爱技术的人谁不想做一辈子技术
     程序员他们的思维是缜密的,他们对code的执著有时会占据他们的全部,他们变的极其单纯,他们用特有的傻乎乎的方式对待身边的亲人,这样的憨换来了身边亲人的无私的奉献和支持.即使在争吵时他们的心也永远在一起.
     程序员是走错世界的人,但是他们并不孤单.

posted @ 2010-08-20 14:42 沼渊 阅读(77) 评论(1) 编辑
摘要: 不能用技术的角度去分析事务SONY的PSP,我们知道大多数都是黑色的。但也有其它颜色,不过价格就要比黑色贵很多。其实从技术的角度来说,东西都是一样的,人家换了一个颜色的壳子,就要比黑色壳子多卖200元左右,而且还是限量发售,买的人居然还很多。要说技术含量的话,SONY的PS3和微软的XBOX360相对来说要先进的很多,但是在家用机市场,卖的最好的却是任天堂的WII。而WII的处理性能可能连PS2都...阅读全文
posted @ 2010-07-31 10:09 沼渊 阅读(25) 评论(0) 编辑
摘要: 我喜欢靠自己的努力来解决问题。  也许是因为在学校里,没有养成好的集体活动的习惯。也许是因为我这个家庭最小的孩子想在这个大家族中证明什么东西。不管是什么吧,每当我有什么事情需要完成时,我都会自己去构思,计划,研究,学习相关技能,然后付诸行动。  自从记事儿起我就这样行事,也没有出过问题。而且也不会有什么问题,我想。  自己创办一个公司是我长久以来的一个梦想。这个想法一直在我脑海里游荡,我最终决定应...阅读全文
posted @ 2010-07-27 10:13 沼渊 阅读(63) 评论(2) 编辑
摘要: 原文地址:http://www.cnblogs.com/zhanglei644213943/archive/2010/06/12/1756738.html今天走到小区门口,看见一小伙子摆着个桌子。原来是XX公司装带宽的工作人员,刚好想拉根网线,所以我就要了个4月的套餐(2M带宽),360块钱,每月90块。 和那小伙子谈妥后,他给了张宣传单给我。我发现在桌子上那厚厚的宣传单下面放了一本《JAVA从入...阅读全文
posted @ 2010-06-12 09:28 沼渊 阅读(41) 评论(0) 编辑
摘要: 原文地址:http://www.cnblogs.com/n216/archive/2010/06/12/1756775.html很多人在第一次求职的人几乎都会遇到“到大公司还是到小公司?”问题。他们认为大公司的薪水高、工作稳定、技术水平高、升迁机会多,但是,大公司要求高,竞争激烈,自己怕进不了;而小公司薪水相对低一些,工作稳定性较差,技术水平参差不齐,升迁机会不多,但是,录...阅读全文
posted @ 2010-06-12 09:19 沼渊 阅读(93) 评论(0) 编辑
摘要: 转载的,出处:http://www.cnblogs.com/Seapeak/archive/2010/05/28/1746408.html前几天写了几篇工作会议总结,反应也是各有看法吧!有的觉得挺现实,深有感触;有的感觉在写小说。这些也都很正常!但是这里要强调的一点是,这3篇文章发生的事情都是真实的,没有一点是添油加醋合成的!至于有的时候会有莫名的结果,这个只能说有一些事情我没法写的太细,毕竟&h...阅读全文
posted @ 2010-05-28 16:44 沼渊 阅读(85) 评论(0) 编辑