随笔分类 -  技术文章

摘要:在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现。 今天小菜提到的“抽象接口”,就是用来解决这个问题的。 为了不误导读者,先说明一下,什么是“抽象接口”。 所谓“抽象接口”,即在提供接口的同时,提供一个抽象类,用抽象类实现该接口(实际上这是缺省适配模式)。 下面小菜举个例子,让读者体会这样做的好处。 代码写的不咋地,为了防止读者看不懂,先上一张类图:具体代码: ITestInterface.java1 /*2 假设有一个顶层接口3 */4... 阅读全文
posted @ 2013-03-11 22:46 杨元 阅读(23645) 评论(7) 推荐(10) 编辑
摘要:经过前两篇教程,相信读者对AJAX实际应用有了一定体会,这篇文章就来总结一下AJAX常用技术。 使用AJAX流程: l 根据浏览器类型创建XMLHttpRequest对象。 l 设置XMLHttpRequest对象的回调函数,onreadystatechange属性。 l 创建连接,open方法。 l 设置Http头信息,setRequestHeader方法。 l 请求数据,send方法。 XMLHttpRequest类常用方法、属性说明: onreadystatechange方法:设置异步响应回调函数,每当响应状态发生变化时,都将调用此函数,具体是指readyState的值变化。 open. 阅读全文
posted @ 2013-01-29 16:08 杨元 阅读(739) 评论(1) 推荐(1) 编辑
摘要:这个Demo是通过POST方法向服务器请求天气xml,本来也想直接访问google的天气xml接口,但是这也涉及到跨域(跨域知识前一篇有讲解),只能作罢,没办法只好自己用.NET写了一个模拟的服务器。 通过本例,展示了如下技术: l 利用AJAX向服务器POST请求。 l 利用javascript解析xml数据。 l 利用javascript更改html界面显示。 Demo概要说明: 服务器端有一个ashx服务文件,客户端通过AJAX技术向服务文件POST请求信息,如果信息正确,服务文件将读取同目录下的xml文件,返回给客户端。 客户端index.html为展示页面,调用ajax.js完成.. 阅读全文
posted @ 2013-01-17 11:22 杨元 阅读(1858) 评论(1) 推荐(1) 编辑
摘要:在写这个Demo时,原本是想直接访问小菜博客的rss,但这是明显的跨域访问,是不允许的。 因此,小菜把博客rss保存到了本地,就是一个xml格式文件,直接用AJAX请求本地的xml文件。 通过本例,展示了如下技术: l AJAX的核心类XMLHttpRequest的使用。 l AJAX通过GET方式获取服务端xml文件。 l 利用Javascript操作xml文件。 l 利用Javascript更新html界面。 Demo概要说明: index.html作为主页,引用ajax.js脚本,在ajax.js脚本中利用AJAX技术请求同目录下的rss.xml,请求成功后在index.html中显示. 阅读全文
posted @ 2013-01-13 08:51 杨元 阅读(959) 评论(1) 推荐(0) 编辑
摘要:从刚刚接触B/S开发,就耳闻AJAX技术,但一直处于模棱两可的状态,大道理明白,一到动手就傻眼了。AJAX仿佛就是深不可测的技术,成为B/S学习过程中的一个阴影。直到前些日子,小菜才真正开始AJAX实践,真正动手了才发现,AJAX并没有那么困难,如果不考虑AJAX的变型应用,只考虑AJAX基本应用,它还是相当简单的,过于复杂的理论阻碍了我们动手的积极性。因此,本系列教程将从实用的角度出发,以最快的速度让读者掌握基本的AJAX应用,以最直接的方式展示AJAX技术。为了更好的阅读本系列教程,对读者有如下要求:l 熟悉HTML。l 熟悉HTTP协议。l 熟悉javascript。l 熟悉XML。l. 阅读全文
posted @ 2013-01-02 17:03 杨元 阅读(1264) 评论(0) 推荐(0) 编辑
摘要:Normal 0 false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE ... 阅读全文
posted @ 2012-12-27 12:57 杨元 阅读(15698) 评论(8) 推荐(0) 编辑
摘要:最近做项目,需要C#与java间的交互,也就是C#编写服务器,java编写客户端,让两者进行通信。 通信无非就是互发数据,首选Socket技术,通过TCP协议建立长连接,一般是以字节数组的形式传递数据,也就是说,无论传递什么东东,都先拆成字节数组。既然是面向对象编程,发送的数据要用实体类封装,同时配合List<>泛型集合,可以达到非常好的灵活性、便捷性。 废话少说,本文的核心问题就是:C#与java如通过传递对象通信? 刚开始我也很迷茫,不知道这个能不能实现,但同时又很兴奋,因为自己在做一件很有意思的事。经过探索研究,发现没有问题!可行!下面分享一下! 需要用到的核心技术: n S 阅读全文
posted @ 2012-12-23 08:44 杨元 阅读(20121) 评论(9) 推荐(5) 编辑
摘要:提示:本文所提到的线程状态变化,并不是指线程启动、暂停、停止,而是说线程内部状态的迁移。 随着软件技术不断发展,用户需求不断提升,多线程的重要性日益凸显。 关于线程,通俗的讲,每当启动一个exe应用程序,都会创建一个进程和一个主线程,主线程用来处理界面绘制、界面事件响应等工作,而进程则是线程的容器,主线程和用户创建的新线程,都将在相应的进程中维护。 由此可知,一个程序之所以能工作,是线程的功劳,进程仅仅是容器而已,一旦程序的主线程被阻塞,就会造成界面无响应等现象,这时候就要用多线程解决问题。 然而,在程序中使用多线程,是比较头疼的一件事。以我的体会,多线程首先会造成程序不稳定,处理不好容易导. 阅读全文
posted @ 2012-12-10 15:08 杨元 阅读(3780) 评论(3) 推荐(2) 编辑
摘要:有良好的注释习惯,不一定是合格程序员;但没有良好注释习惯,一定不是合格程序员。 程序注释,我体会比较深刻,因为我的机房收费系统重构就是因为注释写的不好。 记得刚刚开始接触编程的时候,完全不懂注释的意义,但学习别人的代码时,发现人家都有注释,于是也学着用注释点缀自己的程序,经过将近两年的积累,我对注释有了比较深刻的认识,接下来就与大家共享一下自己的经验。 前篇废话,其实关于注释的讨论、优点、注意事项等等,网上有很多很多,本小菜在此从实际应用角度出发,分享经验。一、注释可以帮助理清思路。写注释不仅仅是关爱他人,让别人维护起来更加轻松,实际上写注释对理清思路有很大帮助。正所谓代码未动,注释先行。举. 阅读全文
posted @ 2012-12-05 19:57 杨元 阅读(2140) 评论(5) 推荐(4) 编辑
摘要:1. Comment each level(每个级别的注释有统一的风格)注释每一个代码块,并且在各个级别的代码块上,要使用统一的注释方法。例如:对于类,应包含简单的描述、作者以及最近的更改日期对于方法,应包含目的的描述、功能、参数以及返回值使用统一的注释规则对于一个团队是非常重要的。当然,更加推荐使用注释的约定和工具(例如,C#的XML或Java的Javadoc),它们会是注释变得更加容易。2. Use paragraph comments(对段落注释)将代码块分成若干完成独立功能的“段落”,并在每个“段落”前添加注释,向读者说明“即将发生什么”。// Check that all data 阅读全文
posted @ 2012-12-05 19:48 杨元 阅读(3258) 评论(0) 推荐(1) 编辑
摘要:其实这些东西网上都有,但是比较凌乱,很少有封装好的类,在此共享一下。。。 一个Socket服务器类,一个Socket客户端类,都可以直接拿去用,下边有详细的调用示例。 需要说明的是,服务器类没有处理多客户连接,只是简单的响应单客户连接。 另外,提醒一点,尤其是很多新手容易犯的错误,就是服务器类处理事务是在线程中进行的,此时不能访问界面上的控件,需要委托跨线程访问。Socket服务器类(SocketServicesHelper.cs):using System; using System.IO; using System.Net; using System.Net.Sockets; using. 阅读全文
posted @ 2012-11-28 17:00 杨元 阅读(5361) 评论(0) 推荐(1) 编辑
摘要:在用C#操作注册表时,如果注册表键的类型是REG_DWORD,有可能遇到溢出BUG。网上这方面的资料很少,在这共享一下。 C#可以用RegistryKey类的SetValue方法来设置键值,例如: 看起来一切正常,但是这个RegistryValueKind.DWord是有问题的。 注册表中的REG_DWORD是无符号32位数值,而C#中的RegistryValueKind.DWord是有符号32位数值。这就意味着RegistryValueKind.DWord的表示范围比REG_DWORD小,因此导致直接传入一些大数时会抛出异常提示类型不正确。 那么如何解决这个BUG呢? 读者可能试图这样做:. 阅读全文
posted @ 2012-11-28 16:28 杨元 阅读(1513) 评论(0) 推荐(0) 编辑
摘要:关于禁用USB接口,有一种方法是在注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer位置新建键“NoDrives”,类型是REG_DWORD,通过设置其值,隐藏某个驱动器盘符;再新建一个键“NoViewOnDrive”,类型也是REG_DWORD,通过设置其值,禁止访问某个驱动器。 这些应该很好理解,U盘也是驱动器,当然可以禁用。可是问题就出在“通过设置其值”,如何设置? 关于如何设置,网上有“详细”说明,可是说的太晦涩,估计大家抄来抄去,自己也不知道是什么意思,就在网上发教程了,导. 阅读全文
posted @ 2012-11-28 14:22 杨元 阅读(1253) 评论(0) 推荐(0) 编辑
摘要:引言: 本来是不想研究这些东西的,但是米老大指示要求禁用网上邻居,顺便研究一下。 其实禁用网上邻居,可以简单的从注册表禁用,不过这样太苍白无力了,既然做,就做强悍点,直接从服务入手,彻底kill网上邻居服务(是篡改服务文件,而不是简单的暂停服务),神也无力回天,除非修复系统。 网上邻居核心服务是ComputerBrowser,那么如何找到这个服务启动的文件呢? 再多废话点,提醒各位需要禁用网上邻居的童鞋,别忘了网上邻居还有DOS版哦~~~,命令是NET,直接篡改C:\Windows\System32目录下的net.exe即可简单禁用。 注意,我们做的不是病毒,不仅能篡改,还要能改回来,不能破坏 阅读全文
posted @ 2012-11-11 14:19 杨元 阅读(6273) 评论(0) 推荐(0) 编辑
摘要:参考博文: SQL LIKE语句多条件贪婪匹配算法 SQL LIKE语句多条件贪婪加权匹配算法(改进版) SQL LIKE语句多条件贪婪加权匹配(新增必要词指定)前言: 算法的基本特性在前几篇博客中已经做了详细的说明,经过不断的改进优化,到归仓的时候了,也就是说,该算法告一段落,不再更新。 作为最终的解决方案,简要的总结一下算法特性,以方便读者参阅。 l 目的:主要用于多条件模糊匹配。 l 贪婪特性:返回满足条件尽可能多的记录。 l 权重特性:为关键词分配权重,代表关键词的重要性,在不破坏贪婪特性的前提下,返回权重高的记录。 l 必要关键词指定特性:在不破坏贪婪特性和权重特性的前提下,返回的. 阅读全文
posted @ 2012-10-18 14:29 杨元 阅读(2711) 评论(0) 推荐(1) 编辑
摘要:前两篇博客:SQL LIKE语句多条件贪婪匹配算法SQL LIKE语句多条件贪婪加权匹配算法(改进版) 为了更好的扩充本算法的适用范围,特加入必要关键词指定功能。 在实际应用中,很可能希望匹配的时候必须出现某个词,否则就是没有意义的匹配。 说到这,读者可能觉得这些需求小题大做,在程序中用正则表达式很容易实现,再次重申,现在的矛盾是我们不能把记录返回到程序中处理,因为涉及到大数据量,必须考虑服务器承受能力、并发访问数量、网络传输能力、程序处理能力等诸多因素。在服务器端尽量缩小数据范围,减少数据传输量,无疑是最佳选择。 这个版本加入的新特性即必要关键词指定,同样拿“如何在CSDN网站注册用户”这句 阅读全文
posted @ 2012-10-18 14:12 杨元 阅读(564) 评论(0) 推荐(0) 编辑
摘要:在CMS开发中,经常会有类似这样的需求: 提问——回答模式,最经典的例子就是百度提问。 提问者提出问题,由其他人回答,其他人可以是用户,也可以是服务商。 在这个模式中,如何充分利用历史数据是最关键的技术。很多时候,由于客户不擅长使用搜索功能,一上来就提问,而这些问题往往早已经有近乎完美的答案,但没有充分利用。这样一来,不仅加大了劳动量,又增加了数据冗余。 如果在提问的时候能充分调动历史数据,提交问题之前先看看历史问题能不能解决客户疑问,解决了,最好不过,解决不了,再提交。百度提问就是采用的这种方案: 模式固然好,可怎么实现就有些困难了,毕竟这是百度作为搜索引擎的看家本领。 从上图可以看出“C. 阅读全文
posted @ 2012-10-04 18:46 杨元 阅读(1281) 评论(0) 推荐(0) 编辑
摘要:前言废话: 微软最近推出的outlook.com邮箱非常火爆,笔者也抢注了一个,当时大约是一个半月之前,微软公开注册的第二天,那时候我的名字就已经被注册了,可见是多么疯狂。。。。 最近想正式使用,因为俺现在的QQ邮箱显得太业余了。 作为专业菜鸟当然不能在网页里使用邮箱,但加入Foxmail时却遇到一系列问题,不是想的那么容易。。。。微软总是给人惊喜。。。。 经过一番搜索,终于解决了问题,考虑到网上此类教程较少,特此分享。 注:如果你看到了这篇文章,很可能是遇到了类似“IMAP接收密码错误”这样的问题。教程开始:填写outlook.com邮箱帐号,单击“下一步”。填写outlook.com邮箱密 阅读全文
posted @ 2012-10-04 18:35 杨元 阅读(6900) 评论(0) 推荐(0) 编辑
摘要:先来看一段单线程的原始代码(代码中有详细的注释): 服务器(TCPServer.java):import java.net.*; import java.io.*; public class TCPServer{ public static void main(String[] args) throws Exception{ ServerSocket ss = new ServerSocket(5566); //创建一个Socket服务器,监听5566端口 int i=0; //利用死循环不停的监听端口 while(true){ Socket... 阅读全文
posted @ 2012-09-03 09:36 杨元 阅读(13120) 评论(3) 推荐(1) 编辑
摘要:最近因为三层架构中的实体类,引发了不少小问题,下面列举一下,谈谈自己的感想。 本文所指的实体类仅限于三层中的实体类,即数据库表的映射。一、为什么要用实体类? | 使程序简洁易懂,便于维护。 | 暗合接口不变原则。 | 体现面向对象思想。举例说明: 不用实体类的三层假如程序有所变动,需要增加一个参数,学生年龄用实体类的三层同样增加一个参数,学生年龄 很明显的看出,用实体类之后,代码明显变得简洁,面向对象封装思想。 最重要的是,如果将来有所改动,只需要改动实体类,方法间调用接口,完全不需要变动,大大减少了程序修改量,迎合了面向对象中接口不变的思想。 甚至在程序设计时,就把将来可能需要的属性预先放. 阅读全文
posted @ 2012-08-18 15:52 杨元 阅读(1724) 评论(0) 推荐(0) 编辑