Skip to content

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)

特点:散列表,不允许重复;

优点:如果关键字已知则存取速度极快;

缺点:如果不知道关键字则存取很慢,对存储空间使用不充分;

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度