1、权限控制方面问题: 从面向对象的角度讲,如果一个程序中,没有应用角色及角色组的话,那么这个程序是不合格的.一般来说,权限是由权限及流程角色组合而来的,如果仅有权限而没有角色,那么这个控制不灵活;如果仅有角色没有权限,那么这个控制不细致. 当然,用SESSION肯定是要的,但这个SESSION,应当只记录当前用户的个人信息,比如他的用户名.在需要判断的时候,根据他的用户名(唯一),至数据库中去取他的权限,或在类中编写权限/角色,根据此用户的用户号及当前模块号,计算当前用户是否对当前页面有操作权限.不过,如果把用户的权限也取出来放在SESSION中的话,这种做法一般仅在很小的网站中使用,稍大一点的系统,基本不允许这么做,而且也做不到 2. PID是什么?在做系统的故障排除时如何使用它? PID是进程编号,在系统发现故障的时候,可以根据它寻找故障所发生的具体进程,并且可通过visual studio.net等ide将故障进程附加到进程中进行调试(debug) 3. XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限? 答:我只知道XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成为xml数据,反序列化再将xml转换成对象。应该至少需要ACL权限中的读权限. 4. 为什么不提倡catch(Exception)? 答:原因可能有两点:1. try…catch在出现异常的时候影响性能 2.应该捕获更具体得异常,比如IOExeception,OutOfMemoryException等 5. Debug.Write和Trace.Write有什么不同?何时应该使用哪一个? 答:Debug.Write是调试的时候向跟踪窗口输出信息。当编译模式为debug的时候才有效,为release的时候Debug.Write在编译的时候会忽略,而Trace则是在debug和release两种模式下均可以向跟踪窗口输出信息。 6. Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。 答:Debug会产生pdb文件,release不会。Debug用于开发时的调试,不能要于部署,而release用于部署.debug编译一些特殊代码,比如#IFDEBUG Debug.Write等,而Release则会将那些特殊标记省略 7. JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响? 答:方法,道理很简单,因为对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用,此时CLR傻乎乎的给整个程序集都给Compile了,CLR不是傻疯了么 8. a.Equals(b)和a == b一样吗? 答:不一样。a.Equals(b)表示a与b一致, a==b表示a与b的值相等 9. 在对象比较中,对象一致和对象相等分别是指什么? 答:对象一致是指两个对象是同一个对象,引用相同。而对象相等是指两个对象的值相同,但引用不一定相同 10. 在.NET中如何实现深拷贝(deep copy)? 答:实现IClonable接口 11. 请解释一下IClonable 答:IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对象中嵌套的引用对象的新实例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是 Object.MemberWiseClone(). 深度复制(Deep Copy)与浅表复制(Shadow Copy)的比较 <!–<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />–>public class Name { public string FirstName; public string LastName; } public class Person : ICloneable { public Name PersonName; public string Email; /// <summary> /// Deep Copy的例子 /// </summary> /// <returns></returns> public Object Clone() { Person p = new Person(); p.Email = this.Email; p.PersonName = new Name(); p.PersonName.FirstName = this.PersonName.FirstName; p.PersonName.LastName = this.PersonName.LastName; return p; } public void ChangLastName(string lastName) { this.PersonName.LastName = lastName; } public static void Main() { Person p = new Person(); p.PersonName = new Name(); p.PersonName.LastName = ”san”; p.PersonName.FirstName = ”zhang”; p.Email = ”sanzhang@126.com”; Person sameNamePerson = p.Clone() as Person; sameNamePerson.ChangLastName(“clr_”); Console.WriteLine(p.PersonName.LastName); Console.WriteLine(sameNamePerson.PersonName.LastName); Person samePerson = p.MemberwiseClone() as Person; samePerson.ChangLastName(“Shadow”); Console.WriteLine(p.PersonName.LastName); Console.WriteLine(sameNamePerson.PersonName.LastName); Console.Read(); } } 12.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 13.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。 14.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 答:都不能。 15.List, Set, Map是否继承自Collection接口? 答:List,Set是Map不是 16.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。 17.数组有没有length()这个方法? String有没有length()这个方法? 答:数组没有length()这个方法,有length的属性。String有有length()这个方法。 18.sleep() 和 wait() 有什么区别? 答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。 wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
|