Microsoft.Net常见问题集锦
### Microsoft.Net 常见问题集锦 #### Microsoft.Net 平台基础 1. **GC(Garbage Collection)是什么?为什么要有GC?** - GC(垃圾回收机制)是一种自动管理内存的技术,它负责自动释放不再使用的对象所占用的内存空间。在 .Net 平台上,GC 的存在极大地简化了程序员的工作,避免了手动释放内存导致的内存泄漏等问题。通过定期检查托管堆上的对象,当发现某个对象不再被引用时,GC 会自动将其标记为垃圾并回收其占用的内存。 #### 编程语言 1. **String 和 StringBuilder 的区别?** - `String` 类表示不可变的字符串,即一旦创建,其内容就不能更改。而 `StringBuilder` 类允许动态地修改字符串内容,因此在需要频繁修改字符串内容的场景下,使用 `StringBuilder` 更加高效,因为它避免了每次修改都创建新对象带来的性能开销。 2. **类的 static 构造方法是干什么用的?** - 类的静态构造方法(也称为类构造函数)主要用于初始化类级别的静态字段或执行一次性的初始化操作。它在第一次访问该类型的任何静态成员之前自动调用,且每个类型仅执行一次。与实例构造函数不同,静态构造方法没有参数并且总是私有的。 3. **Strings=new String("xyz"); 创建了几个 String Object?** - 这行代码实际上创建了两个 `String` 对象:一个是字符串常量池中的 `"xyz"`,另一个是通过 `new String()` 创建的对象。因此,总共创建了两个 `String` 对象。 4. **abstract class 和 interface 有什么区别?** - `abstract class` 可以包含抽象方法、具体方法、属性等,可以被继承,但不能被实例化。它可以定义一些共有的逻辑,子类可以覆盖或实现这些逻辑。而 `interface` 定义了一组必须实现的方法签名,不能包含具体的实现代码,用于多态性和实现接口间的多重继承。 5. **启动一个线程是用 run() 还是 start()?** - 要启动一个线程,应该调用 `start()` 方法而不是直接调用 `run()` 方法。`start()` 方法会创建一个新的线程并调用该线程的 `run()` 方法,而直接调用 `run()` 方法则不会创建新线程,而是在当前线程中执行。 6. **接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?** - 接口可以继承其他接口;抽象类可以实现多个接口;抽象类也可以继承具体的类,只要该类不是 `sealed` 的。 7. **构造器 Constructor 是否可被 override?** - 构造器(Constructor)不能被重写(override),因为它们不具有继承性。每个类可以有自己的构造器,但不能重写基类的构造器。 8. **是否可以继承 String 类?** - `String` 类是不可继承的,因为它是 `sealed` 的。这意味着你不能创建 `String` 的子类。 9. **try{} 里有一个 return 语句,那么紧跟在这个 try 后的 finally{} 里的 code 会不会被执行,什么时候被执行,在 return 前还是后?** - `finally` 块中的代码一定会被执行,即使 `try` 块中有 `return` 语句。执行顺序是先执行 `finally` 块中的代码,再执行 `return` 语句。 10. **两个对象值相同 (x.equals(y) == true),但却可有不同的 hashcode,这句话对不对?** - 如果两个对象相等(通过 `equals` 方法判断),那么它们应当拥有相同的 `hashCode` 值。如果 `equals` 返回 `true` 而 `hashCode` 不相等,则违反了 `hashCode` 的一致性原则,可能导致在集合中查找失败。 11. **switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?** - `switch` 语句支持 `byte` 和 `String` 类型,但不支持 `long` 类型。从 Java 7 开始,`switch` 支持 `String` 类型。 12. **List, Set, Map 是否继承自 Collection 接口?** - `List` 和 `Set` 继承自 `Collection` 接口,而 `Map` 是一个单独的接口,并不继承自 `Collection`。 13. **Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()? 它们有何区别?** - `Set` 使用 `equals` 方法来判断元素是否重复。`==` 操作符用于比较对象引用是否相同,而 `equals` 方法用于比较对象的内容是否相同。 14. **数组有没有 length() 这个方法?String 有没有 length() 这个方法?** - 数组有一个 `length` 属性,用于获取数组的长度。而 `String` 类有一个 `length()` 方法,用于获取字符串的长度。 15. **sleep() 和 wait() 有什么区别?** - `Thread.sleep()` 方法使当前正在执行的线程暂停指定时间,让出 CPU 给其他线程,但它不会释放锁。`Object.wait()` 方法不仅会让线程暂停,还会释放持有的对象锁,直到被唤醒。 16. **short s1=1; s1=s1+1; 有什么错? short s1=1; s1+=1; 有什么错?** - 在 `s1=s1+1;` 中,`s1+1` 的结果是 `int` 类型,需要显式转换回 `short` 类型。而在 `s1+=1;` 中,编译器会自动处理类型转换。 17. **谈谈 final, finally, finalize 的区别。** - `final` 关键字用于声明常量、不可变类或方法。`finally` 块用于确保在 `try` 块之后一定执行某些清理代码,无论是否有异常发生。`finalize` 方法是 `Object` 类的一个方法,用于在垃圾收集器准备回收对象时执行最后的操作。 18. **如何处理几十万条并发数据?** - 处理大量并发数据通常需要使用多线程或异步处理技术,如线程池、任务并行库(TPL)、异步/等待关键字等。同时还需要考虑数据的存储和访问策略,如使用高性能的数据结构和数据库索引。 19. **进程和线程的区别?** - 进程是操作系统资源分配的基本单位,每个进程都有独立的地址空间和其他资源。线程则是进程内的执行单元,同一进程中的线程共享进程的资源,但每个线程有自己的栈和程序计数器。 20. **堆和栈的区别?** - 堆用于动态分配内存,由垃圾回收器管理。栈用于存放局部变量和方法调用的信息,分配和释放速度快,但容量有限。 21. **成员变量和成员函数前加 static 的作用?** - 加上 `static` 关键字表示该成员属于类而不是实例。静态成员只有一份拷贝供所有对象共享,通常用于存储不会随对象状态变化而变化的信息。 22. **简述 private、protected、public、internal 修饰符的访问权限。** - `private`:仅在声明它的类内部可见。 - `protected`:在声明它的类及其派生类中可见。 - `public`:完全公开,可以在任何地方访问。 - `internal`:在同一程序集中可见。 #### ASP.NET 开发 23. **ASP.NET 与 ASP 相比,主要有哪些进步?** - ASP.NET 是 ASP 的下一代技术,采用了更强大的面向对象编程模型,提供了编译执行环境,提高了运行效率。它还引入了丰富的服务器控件、事件驱动架构、内置的安全性和状态管理功能等。 24. **Session 有什么重大 BUG,微软提出了什么方法加以解决?** - ASP.NET 的早期版本中,Session 数据默认存储在 Web 服务器的内存中。如果服务器重启或出现故障,Session 数据将丢失。微软后来提供了多种解决方案,如 State Server 和 SQL Server Session 存储。 25. **产生一个 int 数组,长度为 100,并向其中随机插入 1-100,且不能重复。** - 可以通过创建一个包含 1 到 100 的序列,然后使用随机算法打乱数组元素的顺序来实现。 26. **列举 ASP.NET 页面之间传递值的几种方式。** - 使用 URL 传递查询字符串参数、ViewState、HiddenField、Session、Application、Cookies 或 Postback。 27. **一列数的规则如下: 1、1、2、3、5、8、13、21、34 求第 30 位数是多少,用递归算法实现。** - 这是一个斐波那契数列问题。可以通过递归算法计算第 30 项的值,但需要注意递归深度可能会导致堆栈溢出,建议使用迭代法实现。 28. **C# 中的委托是什么?事件是不是一种委托?** - 委托类似于指向函数的指针,用于封装方法引用。事件是一种特殊的委托类型,用于封装对特定事件感兴趣的多个方法。 29. **override 与重载的区别** - `override` 用于在派生类中重写基类的虚方法,而重载(overload)是在同一个类中定义多个同名但参数不同的方法。 30. **如果在一个 B/S 结构的系统中需要传递变量值,但是又不能使用 Session、Cookie、Application,您有几种方法进行处理?** - 可以通过 URL 传递查询字符串参数、使用 ViewState 或 HiddenField 控件、使用 Postback 或 AJAX 技术。 31. **请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty?** - 可以通过查找页面上所有的 `TextBox` 控件,并设置其 `Text` 属性为空字符串来实现。 32. **请编程实现一个冒泡排序算法?** - 冒泡排序算法通过比较相邻元素并交换位置来对数组进行排序。外层循环控制排序次数,内层循环控制比较次数。 33. **描述一下 C# 中索引器的实现过程,是否只能根据数字进行索引?** - 索引器允许像使用数组一样访问类的实例。通过定义 `this` 关键字的索引器方法来实现。索引器可以接受任意类型的参数,不仅仅是数字。 34. **求以下表达式的值,写出您想到的一种或几种实现方法:1-2+3-4+……+m** - 这是一个简单的数学序列求和问题,可以通过循环累加或使用数学公式直接计算。 35. **用 .NET 做 B/S 结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?** - 通常采用三层架构:表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这样的分层有助于实现模块化设计,提高系统的可维护性和扩展性。 36. **什么叫应用程序域?** - 应用程序域是 .NET Framework 中的一个隔离边界,它为应用程序提供了一个容器,可以在其中加载和卸载程序集而不会影响其他应用程序域中的应用程序。 37. **CTS、CLS、CLR 分别作何解释?** - CTS(Common Type System):公共类型系统,定义了 .NET 中的所有类型应遵循的规范。 - CLS(Common Language Specification):公共语言规范,定义了一组所有 .NET 语言都应该遵循的规则,以实现互操作性。 - CLR(Common Language Runtime):公共语言运行时,是 .NET 的核心组件,负责执行托管代码并提供内存管理、安全、异常处理等服务。 38. **什么是装箱和拆箱?** - 装箱是指将值类型转换为引用类型的过程,拆箱则是相反的过程。这些转换发生在值类型与引用类型(如 `object`)之间。 39. **什么是受管制的代码?** - 受管制的代码是指在 .NET Framework 中运行的代码,这些代码受到 CLR 的管理和约束,包括内存管理、安全性等方面。 40. **什么是强类型系统?** - 强类型系统是指在编译时就可以确定变量类型的系统,这有助于减少运行时错误,提高代码质量和可维护性。 41. **.net 中读写数据库需要用到那些类?他们的作用?** - 主要使用 ADO.NET 中的 `SqlConnection`、`SqlCommand`、`SqlDataReader` 和 `SqlDataAdapter` 类来连接数据库、执行命令、读取数据和填充数据集。 42. **ASP.net 的身份验证方式有哪些?分别是什么原理?** - ASP.NET 提供了多种形式的身份验证机制,如 Windows 身份验证、Forms 身份验证、Passport 身份验证等。这些机制基于不同的原理和技术实现用户身份的验证。 43. **什么是 Code-Behind 技术?** - Code-Behind 技术是一种分离用户界面与业务逻辑的设计模式。它允许将页面的逻辑代码(C# 或 VB.NET)放在单独的文件中,而将 HTML 和 ASP.NET 控件放在另一个文件中。 44. **在 .net 中,配件的意思是?** - 这里的“配件”可能是指控件(Controls),它们是构成用户界面的基本构建块,例如按钮、文本框等。 45. **常用的调用 WebService 的方法有哪些?** - 常用的方法包括使用 `System.Web.Services.Protocols.SoapHttpClientProtocol` 类、WCF 客户端、HTTP 请求等。 46. **.net Remoting 的工作原理是什么?** - .NET Remoting 允许在不同应用程序域或机器之间传输对象和服务。它使用各种通信协议(如 TCP、HTTP、SOAP)实现远程对象的调用。 47. **在 C#中,string str=null 与 string str="" 请尽量使用文字或图象说明其中的区别。** - `string str=null` 表示 `str` 是一个空引用,指向一个不存在的对象;而 `string str=""` 表示 `str` 指向一个空字符串对象。 48. **请详述在 dotnet 中类(class)与结构(struct)的异同?** - `class` 是引用类型,存储在托管堆上,适合存储大型复杂数据。`struct` 是值类型,存储在栈上或作为其他类型的字段,适合存储小量简单数据。 49. **SQLSERVER 服务器中,给定表** - 需要提供更多的上下文信息才能解答关于 SQL Server 中表的具体问题。
剩余35页未读,继续阅读
- 粉丝: 200
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python复合数据类型:解锁编程世界的无限可能.md
- 期末大作业-基于Faster RCNN的人脸口罩识别系统python源码+说明+数据集模型
- 课程设计-基于Faster RCNN的人脸口罩识别系统python源码+文档说明+数据集模型
- Python中的魔法元素:探索基本数据类型的奥秘.md
- 管道潜望镜检测技术在排水管道检测中的应用_孙乐乐.caj
- 3666 删除最小值.cpp
- Ruby 语言教程、案例及相关项目.docx
- 汇编黑白棋源代码包含:文件操作(如环境,存取进度等),鼠标键盘操作,可选择人机或二人对奕,可选择先手等
- 汇编单片机程序课程设计总结报告-迷宫问题,图形界面及整体规划,由电脑自动搜索迷宫路径
- Scala实现的基于spark智慧交通车流量监控项目+源代码+文档说明(高分项目)