以前曾在一个C/S的项目中,因为多个用户的问题,涉及到并发操作。采用异频,同步来解决,
但是我想采用的并发操作不是涉及到数据库问题吗?
数据库本身不是就有并发的控制吗?
为什么还要在c/s里的程序中实现并发呢
为什么在web程序中没有并发代码。
posted @ 2008-10-10 10:44 水木 阅读(99) | 评论 (3)编辑

今天登陆浦发银行网银系统,每一次没有显示出来,我直接关闭,想再次登陆,却被提示

"同一会话内只能登陆一个用户"

以下是截图,

一阵担心自己的网银被盗呢,不过如果钱被盗就好了,可以正大光明的抓小偷了,哈哈

posted @ 2008-09-13 00:18 水木 阅读(800) | 评论 (4)编辑

A.简单工厂 :用一个单独的类来做这个创建实例的过程,这就是工厂
不符合开-封闭原刚,每次扩展都要更改工厂类 [计算器]
1.cbxType.Items.AddRange(new object[] { "正常收费","打八折","打七折","打五折"});
  
B,策略模式:定义多种算法,并分别封装,之间可以互相替换,算法的变化不影响到客户;[收银]
[context]用一个concretestrategy来配置维护一个对strategy对象的引用。
[strategy]策略类,定义所有支持算法的公用接口。
[concretestrategyx]具体策略类,封装具体的算法和行为。
 比较:简单认识两个类,策略认识一个类,比简单偶合度更低。
1单一职责原则:就一个类而言,应该仅有一个引起它变化的原因
2开放封闭原则:扩展开放,个性封闭 核心 可维护,可扩展,可复用,灵活性好。
3信赖倒转原则:高层模块,低层模块,细节 依赖抽象[针对接口编程]
4里氏代换原则:子类必须能够替换父类 。
 [由于里氏代换原则,才使开放封闭成为可能]
C,装饰模式,动态的给一个对象增加一些额外的职责(为已有功能动态的添加更多功能)[穿什么有这么重要]
 Component 对象接口:动态添加职责,ConcreteComponent:具体对象,添加职责,Decorator:装饰抽象类,从外类来扩展Component
 [eg.用于],当系统需要新功能的时候,把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。

D,代理模式,为其它对象提供一种代理以控制对这个对象的访问.
[subject]定义了realsubject和Proxy的共用接口。使得在任何使用realsubject的地方都可以使用proxy.
[realsubject]定义proxy所代表的真实实体.
[Proxy]保存一个引用使得代理可以访问实体,并使得一个与subject接口相同的接口,这样,代理就可以用来代替实体.
 [eg.用于]1)远程代理.webservice,
      2)虚拟代理,浏览器来优化下载,图片一张一张显示出来。     
      3)安全代理。不同的访问权限
      4)智能指引,访问一个对象前,检查是否锁定,以确保其它对象不能改变它

posted @ 2008-08-14 17:58 水木 阅读(204) | 评论 (1)编辑

 

下载完lcc-win32后,双击打开,新建工程,名字:test

然后点击Browser 选择Path路径[Output directory会自动出来]

注意:这里的路径不能先lcc-win32安装的路径,否则编译时会出错,

我先的是d:"temp,

Output directory 会自动变为 d:"temp"lcc

2.type of project 选择console application 然后点击create

3.出现是否根据向导产生,选择否

4.输入文件名比如hello.c,注意扩展名,之后直接next-finish

5.hello.c中,输入源程序

#include <stdio.h>

void main()

{

   printf("hello world!"n");

}

6.先保存,F9编译,ctrl+F5查看运行结果,F5调试

posted @ 2008-08-14 14:33 水木 阅读(97) | 评论 (0)编辑


1.用sql语句嵌入到代码中呢,还是全部用存储过程,放在一起好管理。
  sql语句和存储过程如何选择呢,是不是简单的就直接用sql语句,复杂一点的用sp
2.uml图用什么软件画比较好一点呢。studio自带的visio怎么样。

3.推荐一个好的C编译器。

 还有其它要注意的问题吗?请大家说说吧。

posted @ 2008-08-14 09:51 水木 阅读(186) | 评论 (3)编辑

/**
*Title:check email pattern Code
*Time:2006-11-24
*Author:colinmok
*/

function chkSendEmail()
{
        //检查是否为空
 if(frmSendEmail.to.value==""){
  alert("请输入1至10个Email!");
  document.frmSendEmail.to.focus();
  return false;
 }
         if(frmSendEmail.name.value==""){
  alert("请输入你的签名!");
  document.frmSendEmail.name.focus();
  return false;
 }

  //功能:正则表达式检测
   var EmailArry = new Array(1000)  //定义数组用来接收分割后的邮件
   var Email=frmSendEmail.to.value  //取得用户输入的值
   var Email=Email.trim();          //调用下面去两边空格的函数
   var Email=Email.AllTrim(Email);  //调用去除中间空格的函数
   var EmailArry=Email.split(";");  //分割用户输入的Email

  // document.write("去空格后:"+Email+"<br>");
          //正则表达式检测Email格式
  var pattern=/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/; 


 //循环检测每个email
  for(var i=0;i<EmailArry.length;i++)
  {
      //document.write("EmailArry["+i+"]:"+EmailArry[i]+"<br>");
             flag=pattern.test(EmailArry[i]);
             if(!flag)
             {
              alert("第"+parseInt(i+1)+"个Email格式不对!!"+EmailArry[i]);
                  document.frmSendEmail.to.focus();
              return false;
              }
           }

   return true;
}
//构造去掉空格函数
String.prototype.trim=function()
{
// 用正则表达式将前后空格
// 用空字符串替代。
return this.replace(/(^\s*)|(\s*$)/g, "");
}
// 除去空格函数
String.prototype.AllTrim= function()
{
    var regEx = /\s*/g;
    return this.replace(regEx,'');             
}

 

 

posted @ 2008-05-15 15:13 水木 阅读(63) | 评论 (0)编辑