试题一:写程序完成在Dictionary<K,V>中寻找特定的V的K试题二:写程序删除List<int> 中所有大于10的整数试题三:写程序,用反射深度复制只有公用成员变量(public field)的类(其中类成员仍旧是只有公用成员变量的类)例如public class ABC { public int ID; public string Name; public ABC Child; }试题四:设计一个以Dictionary为基础的类缓存,其中保存的类来自于一个慢速设备。同时阐述一下如何在多线程环境下避免死锁,如何减少从慢速设备获取类的次数。试题五:对于如下Sample.aspx
<html><body>
    <form id="form1" runat="server">
    <asp:Button runat="server" onclick="Button_Click" Text="Test" />
    </form>
</body></html>按执行顺序排列以下方法并说明其主要用途
Page_Load   Button_Click  Render  CreateChildControls  Init试题六:假定用户只知道基本的javascript, html, xml,向其解释AJAX的运行原理试题七:用DOS命令删除一个目录下所有不是.cs结尾的文件(可能用到的DOS命令有FOR, IF, FINDSTR, DEL, DIR)

解决方案 »

  1.   

    1,foreach(KeyValuePair<K, V> tmpKVP in KVDictionary)
    {
       if(tmpKVP.Value==...)
      {...}
    }
    2,foreach(int i in intList)
    {
      if(i>10)
       ...
    }
      

  2.   


    foreach只能用来查询,不能用来删除
    试题四:设计一个以Dictionary为基础的类缓存,其中保存的类来自于一个慢速设备。同时阐述一下如何在多线程环境下避免死锁,如何减少从慢速设备获取类的次数。 
    这个等高人来解决竟然还有dos题。
      

  3.   

    试题四:设计一个以Dictionary为基础的类缓存,其中保存的类来自于一个慢速设备。同时阐述一下如何在多线程环境下避免死锁,如何减少从慢速设备获取类的次数。=========================================================貌似出题的人搞不清类和对象的关系
      

  4.   

    怎么复杂的题目。
    第三不会,又反射又深度复制,代码记忆力没那么高至少当时绝对写不出代码
    第六估计我也说不清楚,那个几个类名忘记了,直接用AJAX控件的人就想我一样。
    最后一个绝对不会,我直接就回答,GOOGLE下。。试题四,思路大概是这样的,多线程去缓存中操作数据,不直接和慢速设备打交道;然后一个线程只负责将缓存中的数据,定时或者按照外部指令,和慢速设备进行交互,当这个线程和慢速设备交互的时候,应该lock住那些跨线程的资源,有用到这些资源的线程等待交互的完成后再继续
      

  5.   

    public void RemoveAt(
    int index
    )
    删除用这个函数
    关于如何减少从慢速设备获取类的次数。感觉看以参照.net垃圾回收器的工作过程,将访问频繁的缓存排前,丢弃访问不频繁的
      

  6.   

    foreach为什么不能用来删除阿?
    难道for就可以用来删除了?
      

  7.   

    在foreach中删除会破坏索引的。
    删除的时候最好从后向前删
      

  8.   

    试题5:
    Init CreateChildControls  Page_Load  Button_Click  Render 至于用途,打开百度,输入“asp.net生命周期” ,第一篇文章,就是微软msdn上的
      

  9.   

    确实。所以要么倒着删,要么用for循环,每次remove后都跟着i--
      

  10.   

    7:  DEL /s /q *.cs干嘛还用到for等。
      

  11.   

     
     Dictionary<int, string> dict = new Dictionary<int, string>();
                dict.Add(1, "str1");
                dict.Add(2, "str2");
                dict.Add(3, "str3");
                Dictionary<int, string> d = dict.Select(s => s)
                    .Where(s => s.Key == 1).ToDictionary(p => p.Key,p=>p.Value);
                foreach (KeyValuePair<int, string> key in d)
                {                Console.Write(key.Key);
                }  static List<int> GetByLambda(List<int> lst)
            {
                return lst
                    .Select(i => i)
                    .Where(i => i > 10)
                    .OrderBy(i => i)
                    .ToList();
            }
    Load
    以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。
    Init阶段
     对当前Control进行准确初始化
     对子Control进行初始化
    Button_Click  
    用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件
    Render  
    Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。
    如果创建自定义控件,通常要重写此方法以输出控件的标记。
    CreateChildControls方法一般用于创建组合控件。在此方法中可以定义自己需要的控件,进行实例化和赋值等,并将其添加到当前Controls集合中
      

  12.   

    刚开始看 前面几道题目不会这么简单吧?难得就是为了考 你 怎么使用MS封装的类库(循环删除,查找)?试题一:写程序完成在Dictionary <K,V>中寻找特定的V的K试题二:写程序删除List <int> 中所有大于10的整数 这两题楼上回答的都很简单,就是用循环做,但是面试公司的目的就是我上面说的,查看你的使用类库?不是吧?
      

  13.   

    3题有问题,你这样递归反射就会导致死循环了。
    private FieldInfo[] GetObjectFields(Type o)
    {
      FieldInfo[] tmpFields=o.GeFields(BindingFlags.Public | BindingFlags.Instance);
      List<FieldInfo> ret=new List<FieldInfo>();
      tmpFields.ToList().ForEach(t=>
      {
        if(t.DeclaringType.IsClass&&t.DeclaringType!=typeof(string))
         {
            ret.AddRange(GetObjectFields(t.DeclaringType));
         }
        else
         {
           ret.Add(t);
         }
      });
      return ret.ToArray();
    }
      

  14.   

    一,二
                List<int> lstInt = new List<int>();
                for (int i = lstInt.Count - 1; i >= 0; i--)
                {
                    if (lstInt[i] > 10)
                    {
                        lstInt.RemoveAt(i);
                    }
                }            Dictionary<K, V> dic = new Dictionary<K, V>();
                List<K> lstK = new List<K>();
                V v;
                foreach (K k in dic.Keys  )
                {
                    if (dic[k] == v)
                    {
                        lstK.Add(k);//return k;
                    }
                }
      

  15.   

    第三题的,看符合要求不        public class ABC { 
                public int ID; 
                public string Name;
                public ABC Child;
                public ABC Clone()
                {
                    ABC result = new ABC();
                    Type t = typeof(ABC);
                    System.Reflection.FieldInfo[] fields = t.GetFields();
                    if (fields != null && fields.Length > 0)
                    {
                        for (int i = 0; i < fields.Length; i++)
                        {
                            fields[i].SetValue(result, fields[i].GetValue (this));
                        }
                    }
                    return result;
                }
            } 测试代码            ABC abc1 = new ABC();
                abc1.ID = 1;
                ABC abc2 = abc1.Clone();
                abc1.ID = 15;            MessageBox.Show(abc2.ID.ToString());
      

  16.   

    Init  Page_Load  CreateChildControls  Button_Click  Render  
     
      

  17.   

    我在猜想出题的人为什么出一道DOS题,一是可能他想实现压缩备份项目前先把没用的删掉,知道可以用批处理完成,而自己又不会(如果会,你直接拷一份给别的同事用不就成了,DOS写得再好你公司要天天写这个么?),所以就当面试题问问别人。第二种可能就是想考考面试的人解决问题的能力(不管你是自己写,还是在网上找,只要短时间能给俺一份就成。还可以解决第一个问题,哈哈)。可以跟那面试官说:我们既然是做.net的,那可不可以用.net写个小程序,来实现相同的功能?
      

  18.   

    试题二:写程序删除List <int> 中所有大于10的整数  List<int> list = new List<int>() { 10, 5, 20, 30, 2 };
    1.for (int i = list.Count - 1; i >= 0; i--)
                {
                    if (list[i] > 10)
                    {
                        list.RemoveAt(i);
                    }
                }
    2.list = list.Where(p => p <= 10).ToList<int>();
      

  19.   


    包括微软,都应该还在用DOS或类似的脚本工具进行日常的批处理。而且程序员自己写的很多小工具都是在文字模式下运行的,原因是文字模式速度快,信息量大,同时还方便和其他文字工具结合。
      

  20.   

    第四题using System;
    using System.Collections.Generic;
    using System.Threading;namespace TestCache
    {
    public interface SlowDevice<K, V>
    {
    V Get(K key);
    } public class ValueWrapper<V>
    {
    public V Value;
    public object Lock;
    } public class Cache<K, V>
    {
    private SlowDevice<K, V> _Device;
    private Dictionary<K, ValueWrapper<V>> _Loaded; public V Get(K key)
    {
    ValueWrapper<V> vw;
    object l = null; lock (_Loaded)
    {
    if (_Loaded.ContainsKey(key))
    {
    // 缓存里已经有内容
    vw = _Loaded[key];
    l = vw.Lock; if (l == null) // 而且没有锁
    return vw.Value;
    }
    else
    {
    vw = new ValueWrapper<V>(); vw.Lock = new object();
    Monitor.Enter(vw.Lock); _Loaded[key] = vw;
    }
    } if (l != null) 
    {
    // 等待慢速设备读取完成
    Monitor.Enter(l); // 释放其他线程
    Monitor.Exit(l);
    }
    else
    {
    // 慢速设备读取
    lock (_Device) // 假设设备不支持多线程
    {
    vw.Value = _Device.Get(key);
    } lock (_Loaded) // 可以不加锁,代价是在特定条件下多执行一次等待
    {
    // 释放其他线程
    Monitor.Exit(vw.Lock); // 改变状态
    vw.Lock = null;
    }
    } return vw.Value;
    }
    }
    }