技术随笔
zhuweisky
微信号:oraycn。持续专注于即时通讯、实时音视频领域。平台涉及Windows、Linux、Android、Web、信创国产软硬件平台。
展开
-
面向对象与面向组件小议(一)
所有的软件技术和思想的出现都是为了解决所在的那个年代软件开发的复杂性,对象技术和组件技术也不例外。当然还有很多其它技术,像DBC(契约式编程)、AOP、MDA等,这些思想都在影响我们设计/实现程序的方式,但无可否认的是,当今最主流的编程技术是对象技术和组件技术。 面向对象技术已经成熟的发展将近20年了,关于这方面的经典书籍和论文也随处可见。为了解决更大的系统的复杂度,组件技术应运而生原创 2005-07-08 22:42:00 · 2004 阅读 · 0 评论 -
直观而简单的解决方案--软件设计的永恒追求
人们都善于用直观简单的方式来理解事物,我也坚信,所有优秀的解决方案都是直观而简单的,我喜欢直观而简单的解决方案,也许在找到直观简单的解决方案之前,我们已经尝试了用很多复杂费解的方式来解决问题。如果你不能把我们程序的解决方案用通俗易懂的方式给隔壁卖青菜的阿伯解释清楚的话,说明,这个解决方案还不够好――还不够简单和直观。宇宙够复杂了吧,可是霍金却创作《时间简史》系列的科普读物原创 2005-09-13 09:01:00 · 671 阅读 · 0 评论 -
面向对象与面向组件小议
所有的软件技术和思想的出现都是为了解决所在的那个年代软件开发的复杂性,对象技术和组件技术也不例外。当然还有很多其它技术,像DBC(契约式编程)、AOP、MDA等,这些思想都在影响我们设计/实现程序的方式,但无可否认的是,当今最主流的编程技术是对象技术和组件技术。 面向对象技术已经成熟的发展将近20年了,关于这方面的经典书籍和论文也随处可见。为了解决更大的系统的复杂度,组件原创 2005-09-13 09:01:00 · 732 阅读 · 0 评论 -
我是程序员
相比于写代码,我更喜欢写能自动产生代码的生成器,和许多人一样,我讨厌写重复的代码,这种重复包括字面的重复和结构的重复、还有思想的重复。 在日常的开发过程中,一旦我发现一种需要经常使用的元素(类/结构/方法),我就将它整理出来,所谓整理主要是做这样的工作:重构、最大限度降低这个元素与其它元素的耦合性、最大限度地扩展该元素的适用范围、精简算法。然后将整理得原创 2005-09-13 09:01:00 · 755 阅读 · 0 评论 -
软件的艺术之美源于权衡(Trade-off)
软件架构师的主要职责是什么?是抉择、是权衡。把软件称为艺术一点都没有夸张,可以说软件是科学、工程、与艺术的结合体。软件的艺术体现在权衡上。在这一期的《程序员》杂志上看到了一篇“鱼与熊掌--完美主义架构师的梦魇”,其中关于权衡要素的论述正切合我之所想,现将主要部分转摘如下,如果想了解更详细内容,请在本期程序员阅读全文。(1)Time or Space 时间 vs. 空间原创 2005-09-11 10:01:00 · 714 阅读 · 0 评论 -
异常处理经验谈
1.异常处理相对于返回错误代码的一个最大优点在于,异常可以被自动传递,这样,在编程时异常更加难以被忽视。2.通常,只在最上层(一般是UI层)捕捉异常。如果要在其它层捕捉异常,除非是下列情况之一: (1)能够处理该异常,或者 (2)能够忽略该异常,或者 (3)需要转换该异常为其它特定异常后抛出新异常3.UI层捕获异常后,可以 (1)将无关紧要的异常忽略。 (2)将异常转换为错误原创 2005-09-10 16:02:00 · 645 阅读 · 0 评论 -
函数设计之美--函数需要返回错误码吗(一)?
很久以前我就考虑这样一个问题:有这样一个函数,它的功能是从一个整数集合中返回最大的那个数,如何设计这个函数的签名了?当时没有得出令自己满意的答案,所以就搁浅了。今天重新思考,终于有所悟!现在把我思索的整个过程展现于此。最直观的函数签名设计如下:int GetMaxElement(ArrayList eleList) ;乍看之下,很好,很直接的反映了意图。稍微深入一点就原创 2005-09-10 11:02:00 · 753 阅读 · 0 评论 -
项目管理实战之团队管理
一个系统不仅需要优秀的分析和设计,更需要一个良好的过程将其从蓝图转化为实现。这个过程中最重要的是对团队的管理,也就是人的管理。一个优秀的团队和一个糟糕的团队的效能是天壤之别,她们之间的比例不是1:100或1:1000这样量化的数字能够表示的。就像一个团队建造了一幢摩天大楼屹立于云霄,而另一个团队的建筑物还没有10米高便开始摇摇欲坠!这是质的差别,也是团队灵魂的差别。 而团队的原创 2005-08-08 21:49:00 · 2943 阅读 · 1 评论 -
当你拥有一把用得顺手的锤子
记不得在哪里看过这句话,“当你拥有一把用得顺手的锤子,就会认为全世界都是钉子”。所有的事情、所有的问题,你都尝试用这把锤子去解决。很多情况下,常常,这把锤子解决不了问题,或者说,有更好的工具来解决手头的问题。比如,将钉子从木头中取出来,使用起子会更有效率、更省事。 编程语言,比如C#,就是我们手上的锤子;而由此语言而形成的思维方式、思考习惯更是我们头脑中一把无形的锤子。这是好事、原创 2006-04-10 17:12:00 · 2727 阅读 · 5 评论 -
函数设计之美--函数需要返回错误码吗(一)?
很久以前我就考虑这样一个问题:有这样一个函数,它的功能是从一个整数集合中返回最大的那个数,如何设计这个函数的签名了?当时没有得出令自己满意的答案,所以就搁浅了。今天重新思考,终于有所悟!现在把我思索的整个过程展现于此。最直观的函数签名设计如下:int GetMaxElement(ArrayList eleList) ;乍看之下,很好,很直接的反应了意图。稍微深入一点就发原创 2005-09-08 23:45:00 · 3092 阅读 · 3 评论 -
推荐所有的.NET开发人员阅读《J2EE Development without EJB》
出手自Rod Johnson的《J2EE Development without EJB》是一本难得的好书,无论是对于Java程序员,还是.NET程序员。特别是对于.NET程序员,.NET平台的企业级应用还不是很多,.NET平台上的实用性的架构也远远不及J2EE这么成熟,所以我们.NET开发人员绝对有必要Open自己,到Java的世界去看看。 .NET世界里很多处于探索和试原创 2005-09-29 11:01:00 · 933 阅读 · 0 评论 -
某公司的一道机考题的解答
昨天看到某个公司招聘出的一道题目,题目是这样的:判断任意三个点是否构成三角形,以及某个点是否位于指定的三角形内。 关于这个问题,我给出了自己的答案,首先解决第一个问题: /// /// IsTriangle 判断集合中的头三个点PointF是否可以构成一个三角形 /// public s原创 2005-10-16 11:01:00 · 1205 阅读 · 0 评论 -
TCP服务器“拒绝服务攻击” 解决方案
说这是一个完全的解决方案,其实有点夸大了,但这个方案确实可以缓解TCP服务器遭受“拒绝服务攻击”时表现出的脆弱性。 当服务器以Tcp的方式提供服务时,客户端通过tcp连接上服务器。这时,恶意的程序,也可以通过tcp连接我们的服务器,如果恶意的程序采用循环与我们的服务器建立成千上万的连接,并在每个连接上都发送恶意的数据包给服务器,慢慢就会导致服务器资源耗尽而崩溃! 为了原创 2006-02-10 15:00:00 · 1932 阅读 · 0 评论 -
直观而简单的解决方案--软件设计的永恒追求
人们都善于用直观简单的方式来理解事物,我也坚信,所有优秀的解决方案都是直观而简单的,我喜欢直观而简单的解决方案,也许在找到直观简单的解决方案之前,我们已经尝试了用很多复杂费解的方式来解决问题。如果你不能把我们程序的解决方案用通俗易懂的方式给隔壁卖青菜的阿伯解释清楚的话,说明,这个解决方案还不够好――还不够简单和直观。宇宙够复杂了吧,可是霍金却创作《时间简史》系列的科普读物,既然是科原创 2005-07-25 09:43:00 · 1554 阅读 · 0 评论 -
我是程序员
相比于写代码,我更喜欢写能自动产生代码的生成器,和许多人一样,我讨厌写重复的代码,这种重复包括字面的重复和结构的重复、还有思想的重复。 在日常的开发过程中,一旦我发现一种需要经常使用的元素(类/结构/方法),我就将它整理出来,所谓整理主要是做这样的工作:重构、最大限度降低这个元素与其它元素的耦合性、最大限度地扩展该元素的适用范围、精简算法。然后将整理得到可复用元素按照原创 2005-08-02 22:10:00 · 2089 阅读 · 5 评论 -
SQL Server 经验 (转载)
如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS)。 在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教原创 2007-06-09 15:54:00 · 768 阅读 · 0 评论 -
Java -- 在Eclipse上使用Spring
在.NET上用的VS.NET+Spring.net+Nhibernate,到了Java平台上,自然对应着Eclipse+Spring+Hibernate。上一篇文章介绍了如何在Eclipse上使用Hibernate的入门,本文就简单介绍一下如何在Eclipse使用Spring。 (1)首先,是下载Spring,可以从sourceforge上下载,http://sourcef原创 2006-05-30 19:56:00 · 823 阅读 · 0 评论 -
Java -- 在Eclipse上使用Hibernate
最近一个项目要用Java做,一点都不熟啊。没办法,只好硬着头皮啃了,花了大半天的时间,终于在Eclipse上完成了第一个Hibernate例子。下面记录关键的步骤,权作笔记,以备日后查看。 (1)下载Hibernate,并向项目中导入Hibernate。 Project->Properies->Java Build Path->Libraries->Add Externa原创 2006-05-30 15:56:00 · 759 阅读 · 0 评论 -
基于Web的IM实现思考
如今绝大多数IM软件都是基于桌面的,通常使用Tcp/Udp,并且都实现了防火墙穿透(代理)和基于Udp的NAT穿透的P2P技术。创建一个基于Web的IM是否可行(我们这里不考虑在浏览器中嵌入类似ActiveX控件的伪B/S,因为它实际上还是一个C/S,我们要讨论的是纯的Web方式)?答案无疑是肯定的,但是有些限制,这是因为:(1)基于Web的IM不可避免的采用Http作为主要的通原创 2006-05-09 16:57:00 · 1176 阅读 · 1 评论 -
待解决的问题,谁帮忙点破下!
01.关于Castle的IOC容器配置疑惑1? Question:以前一直使用Spring.net的IOC容器,据说Castle更适合.NET,所以研究了一下,遇到几个问题不能解决。Castle称组件实现的接口为服务,一般情况是一个组件仅仅实现一个服务(接口),如果一个组件实现了两个服务,而这两个服务都要在应用中使用,而Castle不允许将同一个组件(实例)注册两次,所以没有注册的原创 2006-04-29 15:58:00 · 934 阅读 · 0 评论 -
当你拥有一把用得顺手的锤子
记不得在哪里看过这句话,“当你拥有一把用得顺手的锤子,就会认为全世界都是钉子”。所有的事情、所有的问题,你都尝试用这把锤子去解决。很多情况下,常常,这把锤子解决不了问题,或者说,有更好的工具来解决手头的问题。比如,将钉子从木头中取出来,使用起子会更有效率、更省事。 编程语言,比如C#,就是我们手上的锤子;而由此语言而形成的思维方式、思考习惯更是我们头脑中一把无形的锤子。这是原创 2006-04-09 17:58:00 · 825 阅读 · 0 评论 -
VS小插件--属性自动生成器
对于“依赖注入”,我最常用的是“设值注入法”(即通过Setter属性注入),对于需要注入很多依赖的类来说,一个一个的手动写属性的繁琐已经让我难以忍受了。于是我写了一个VS2003的小插件,你只需要输入类型和属性名,它就能在编辑器指定的地方自动生成属性,并且一次可生成多个属性。(我试用了VS2005下的属性自动生成功能,感觉也不是那么好用:)) 这个小插件安装后,会在VS20原创 2006-03-24 16:59:00 · 1194 阅读 · 0 评论 -
浅谈网络语音技术
当我们使用像Skype、QQ这样的工具和朋友流畅地进行语音视频聊天时,我们可曾想过其背后有哪些强大的技术在支撑?本文将对网络语音通话所使用到的技术做一些简单的介绍,算是管中窥豹吧。 一.概念模型 网络语音通话通常是双向的,就模型层面来说,这个双向是对称的。为了简单起见,我们讨论一个方向的通道就可以了。一方说话,另一方则听到声音。看似简单而迅捷,但是其背后的流程却是相当复原创 2012-06-08 16:16:46 · 6706 阅读 · 16 评论