C#.NET 面试题 初级篇(二)
更新: 2023-06-29 18:26:31 字数: 0 字 时长: 0 分钟
什么是构造函数?
概念:构造函数的方法名与类型相同、没有返回类型
作用:完成对类的对象初始化
创建一个类的新对象时,系统会自动调用该构造函数初始化新对象, 如果没有写定义,那么系统会自动提供一个不带任何参数的 public 构造函数
class 和 struct 的区别?
相同点:都可以实现接口
不同点:
1、class 是引用类型,struct 是值类型
2、class 允许继承、被继承,struct 不允许,只能继承接口
3、class 可以初始化变量,struct 不可以
4、class 可以有无参的构造函数,struct 不可以,必须是有参的构造函数,而且在有参的构造函数必须初始化所有成员
使用场景:
1、class 比较适合大的和复杂的数据,表现抽象和多级别的对象层次时。
2、struct 适用于作为经常使用的一些数据组合成的新类型,表示诸如点、矩形等主要用来存储数据的轻量级对象时,偏简单值。
3、struct 有性能优势,class 有面向对象的扩展优势。
简述一下面向对象的三大特性?
封装、继承、多态。
封装:是通过把对象的属性的实现细节隐藏起来,仅对外提供公共的访问方法。
继承:是通过子类继承基类、继承抽象类、继承接口实现的。
多态:是通过重写基类的 override 方法、重写虚方法实现的。 好处是:方便维护、易扩展。 缺点是:比面向过程性能低。
构造函数是否能被重写?
构造器 Constructor 不能被继承,因此不能重写,但可以被重载。
类的执行顺序?
执行顺序:父类,子类,静态块,静态字段,非静态块,非静态字段,构造器,方法。
请说说引用和对象?
对象和引用是分不开的,对象生成一个地址,放在堆里面,引用则指向这个地址,放在栈里面。
什么是匿名类,有什么好处?
不用定义、没有名字的类,使用一次便可丢弃。好处是简单、随意、临时的。
静态构造函数的特点和用途
特点: 静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。
用途 : 当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
怎样理解静态变量?静态成员和非静态成员的区别?
静态变量属于类,而不属于对象;并对所有对象所享;静态成员在加类的时候就被加载。
属性能在接口中声明吗?
可以,不能有访问修饰符,不能初始化赋值。
在项目中为什么使用接口?接口的好处是什么?什么是面向接口开发?
接口是一种约束,描述类的公共方法/公共属性,不能有任何的实现。
好处是:结构清晰,类之间通信简单易懂,扩展性好,提高复用性。
面向 interface 编程,原意是指面向抽象协议编程,实现者在实现时要严格按协议来办。
对静态方法的理解
静态方法和非静态变量不是同一生命周期,静态方法属于类,非静态变量属于具体的对象,静态方法和具体的对象没有任何关联。
什么是扩展方法?
⼀句话解释,扩展方法使你能够向现有类型“添加”方法,无需修改类型,满足条件:
1、必须要静态类中的静态方法
2、第一个参数的类型是要扩展的类型,并且需要添加 this 关键字以标识其为扩展方法
建议:通常,只在不得已的情况下才实现扩展方法,并谨慎的实现
使用:不能通过类名调用,直接使用类型来调⽤
new 关键字的作用?
运算符:创建对象实例
修饰符:在派生类定义一个重名的方法,隐藏掉基类方法
约束:泛型约束定义,约束可使用的泛型类型
是否可以继承 String 类?
String 类是 final 类故不可以继承。
什么是 CSRF 攻击,如何避免?
CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。 防御手段:
验证请求来源地址; 关键操作添加验证码; 在请求地址添加 token 并验证。
数组、链表、哈希、队列、栈数据结构特点,各自优点和缺点?
数组(Array)
优点:查询快,通过索引直接查找;有序添加,添加速度快,允许重复;
缺点:在中间部位添加、删除比较复杂,大小固定,只能存储一种类型的数据;
如果应用需要快速访问数据,很少插入和删除元素,就应该用数组。
链表(LinkedList)
优点:有序添加、增删改速度快,对于链表数据结构,增加和删除只要修改元素中的指针就可以了;
缺点:查询慢,如果要访问链表中一个元素,就需要从第一个元素开始查找;
如果应用需要经常插入和删除元素,就应该用链表。
栈(Stack)
优点:提供后进先出的存储方式,添加速度快,允许重复;
缺点:只能在一头操作数据,存取其他项很慢;
队列(Queue)
优点:提供先进先出的存储方式,添加速度快,允许重复;
缺点:只能在一头添加,另一头获取,存取其他项很慢;
哈希(Hash)
特点:散列表,不允许重复;
优点:如果关键字已知则存取速度极快;
缺点:如果不知道关键字则存取很慢,对存储空间使用不充分;