今天的题目,对一些高手来说可能只是小菜一碟吧,我记下一些我不太会的题目,1.说说remoting和webservice的区别?2.你的三层架构中,数据层和业务层是怎么和表现层通信的?
  
   我汗,我的回答是remoting,不太懂,因为我平时自己写的三层架构都是在一台服务器上的,原来他要求把数据层和业务层放一台服务器上,表现层放在另外一台服务器上。那个技术面试官说我说的那些还不是真正的MVC三层架构。3.session的生命周期到什么时候结束?  我晕,我真不懂,我以为session是不会结束的,但是还是说是整个应用程序关闭的时候,他说我对asp.net还不是很熟悉。汗,还是很菜,加紧补习基础知识中。4.写一个简单的委托类,公司饮水机没水时候,小王、小李或者公司其他同时给引水机加水。

解决方案 »

  1.   

    public delegate void WaterHandler(object water)
    public void DoWater(object water)
    {
      //...加水
    }
    WaterHandler XiaoWang = new WaterHandler(DoWater);
    XiaoWang(water);
    不知道委托这题是不是这样的
      

  2.   


    1. Remoting 和 Web service 使用的都是SOAP 通信。 不同处为:
       Web Service                           Remoting
    1. 只能是HTTP。                            可以是HTTP, TCP,SMTP, 和其它的。
    2. 只支持XSD类型的Ojbect.                  使用的是Binary通信, 那么几乎全部的类型都为可能。
    3. 因为是通过HTTP, 所以理论上只要支持HTTP    只能是使用.NET的客户端。
       的系统都可以得到支持。
    4. 因为是使用IIS或者其他(JAVA...)所以对于    如果是通过IIS, 也和Web Service 一样, 如果没用IIS,
        安全性, 可信赖性是很高的。                 那安全性和可信赖性是取决于软件本身。
    5. 简单,易用                                   比较繁琐一点。还有其他的一些。。2. 一般来说, 你的数据层(数据库),业务层(Middle Tier) 放在一台服务器里, 而你的表现层(网页:IIS....; 桌面程序)放在别的地方可以更安全。
    在表面层和数据层的通信可以为Remoting, Socket, COM 等等...3. ASP .NET的Session的Life Time 一般来说是20分钟,20分后, 如果Session没有Activities的话, 那么这个Session就会被Abandon。
    但是Session的生命周期是可以设置的。4. 一个饮水机是不可能让那么多个人同时加水的。 虽然可以看作同时, 其实也是不同时的。 
    public delegate void FillWaterHandler(int amount);void FillWater(int amount)
    {
      if(WaterTank.InvokeRequired)
      {
        FillWaterHandler fwh = FillWater;
        Invoke(fwh,new object[]{amount});
      }else
      {
        WaterTank.Fill(amount);
      }
    }
    void 小李线程()
    {
      FillWater(20);
    }
    void 小王线程()
    {
      FillWater(30);
    }
      

  3.   

    Session在服务器端超时或客户端关闭浏览器后失效。本质上是cookie保存的一个客户标识数据层和业务层是怎么和表现层通信的?不知道啥意思。是不是说界面调业务,业务调数据。lz想太多了
      

  4.   


     public delegate void WaterEventHandler(bool Isfull,string people);  //定义事件的类
    public class Watch
    {
    public Watch(Water water)
    {
      water.Water_Change+=new WaterEventHandler(Water_Change);
    }
    private void Water_Change(bool Isfull,string people)
    {
          if(!Isfull)
                          {
                            if(people="小李")
    {
     //加水去
    }
    if(people="小王")
    {
                              //加水去
    }
                         }
    }


    }
      //产生事件的类
    public class Water 
    {
       public event WaterEventHandler WChange;
    int s;
    public string S
    {
    get
    {
    return s;
    }
    set
    {
    if(s!=value)
    {
      bool Isfull=false;
                                       ScoreChange(value,Isfull);
       if(!Isfull)
        {
          s=value;
        }

    }
    }
    }

    }
          
        static void Main(string[] args)
         {
    Water w=new Water ();
    Watch r=new Watch(w);
    w.S="小李";

        }写个大概,意思就是这样,未经测试
      

  5.   

    我接受了CSDN社区的 用户行为 准则。
      

  6.   

    //页面
    public partial class 饮水机题目_Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            WaterMechine aWater = new WaterMechine(100);
            aWater.NoWater += new WaterMechine.NoWaterEventHandle(this.aWater_NoWater);
            aWater.UseWater(50);
            Response.Write(aWater.WaterNum.ToString() + "</br>");        
            aWater.UseWater(50);
            Response.Write(aWater.WaterNum.ToString() + "</br>");
            aWater.UseWater(80);
            Response.Write(aWater.WaterNum.ToString() + "</br>");
            aWater.UseWater(21);
            Response.Write(aWater.WaterNum.ToString() + "</br>");        
        }    private void aWater_NoWater(Object sender, EventArgs e)
        {
            WaterMechine aWater = (WaterMechine)sender;
            People p = new People("小王");
            p.AddWaterNum(100, aWater);
        }
    }
    //定义一个饮水机
    public class WaterMechine
    {
        public  int WaterNum;       public WaterMechine(int waterNum)
        {
            this.WaterNum = waterNum;
        }    public delegate void NoWaterEventHandle(Object sender,EventArgs e);    public event NoWaterEventHandle NoWater;    protected virtual void OnNoWater(EventArgs e)
        {
            if (this.NoWater != null)
            {
                NoWater(this,e);
            }
        }    public void UseWater(int useWaterNum)
        {
            if (WaterNum - useWaterNum <= 0)
            {
                
                OnNoWater(new EventArgs());
            }
            WaterNum = WaterNum - useWaterNum;
        }    public void AddWaterNum(int addWaterNum)
        {
            this.WaterNum = WaterNum + addWaterNum;
        }
    }
    //定义一个人
    public class People
    {
        private string name;
        public People(string name)
        {
            this.name = name;
        }    public void AddWaterNum(int addWaterNum, WaterMechine waterMechine)
        {
            waterMechine.WaterNum = waterMechine.WaterNum + addWaterNum;
        }
    }
      

  7.   

    惨,除了session其它的偶也不会
      

  8.   

    客户端关闭浏览器,Session是不会失效的!要找你这么说,干吗还有那么多人为客户端直接关闭浏览器而无法及时注销用户信息而苦恼呢!
      

  9.   

    有谁可以简单明了的告诉一下remoting是什么,webservice又是什么,他们的区别又是什么,最好有实际的例子,谢谢
      

  10.   

     一个饮水机是不可能让那么多个人同时加水的。 虽然可以看作同时, 其实也是不同时的。 
    public delegate void FillWaterHandler(int amount); void FillWater(int amount) 

      if(WaterTank.InvokeRequired) 
      { 
        FillWaterHandler fwh = FillWater; 
        Invoke(fwh,new object[]{amount}); 
      }else 
      { 
        WaterTank.Fill(amount); 
      } 

    void 小李线程() 

      FillWater(20); 

    void 小王线程() 

      FillWater(30); 
    }
      

  11.   

    public sealed class WaterTank
    {
      public delegate void OnTankEmptyHandler(object person, int last_amount);
      public delegate void OnFillHandler(int filled_value, int current_value);
      public delegate void OnGetWaterHandler(int out_value, int current_value);
      const int max = 100;
      public int m_water_amount;
      public string m_name;
      public object m_FillLock;
      public event OnTankEmptyHandler OnTankEmpty;
      public event OnFillHandler OnFill;
      public event OnGetWaterHandler OnGetWater;
      private WaterTank(){}
      public WaterTank(string name, int amount)
     {
       m_name = name;
       m_water_amount = amount;
       m_FillLock = new ojbect();
     }
     public void Get(Person who, int value)
    {
      if(value < 0)
       return;
      if(value > m_water_amount)
       return;
      lock(m_FillLock)
    {
      m_water_amount -=value;
      if(OnGetWater != null)
       OnGetWater(value,m_water_amount);
      if(m_water_amount == 0)
      if(OnTankEmpty != null)
       OnTankEmpty(who,value);
    }
    }
     public void Fill(int value)
     {
       if((value+m_water_amount) > max)
           throw new Exception("Too much!");
       if(value < 0)
           throw new Exception(".................");
       lock(m_FillLock)
       {
        m_water_amount +=value;
        if(OnFill != null)
          OnFill(value,m_water_amount);
       }
     }
    }
      

  12.   

    简单说就是内网用remoting
    外网用webservice就是在内网或外网服务器做个类,让你可以在其他项目里引用和使用它里面的方法,用xml传输。做中间件一类的东西会用得比较多。
      

  13.   

    哎 除了知道 SESSION是什么 委托是什么(写不出),其他一概不知,两年是不是白学了。
      

  14.   

    session默认不是20分钟么,可以设置
      

  15.   

    你说的这种情况是Cookie的问题,你把Cookie清楚了就不会出现这种问题了!!