面试复习基础题目-c#相关

news/2024/5/16 15:49:50

面试复习基础题目

c#相关问题

  1. delegate和event的区别是什么?
    Delegate用来声明委托类型,event用来声明委托对象;
    事件是委托的一种应用,事件是带有event关键词的委托对象,对委托对象进行了封装,本质就是委托对象。
    调用上event只能+=和-=,这样做的意义是为了防止,其余的方法覆盖,但是delegate并没有这种限制,不仅可以+=,-=,还可以直接=一个方法。
    委托定义的是一个类型,而事件定义的是一个成员。
    对于delegate,我们在定义它的类外,不仅可以采用 += 和-=的运算符号,还可随时调用;但是对于event,在类外只能采用 += 和-=的运算符号,不能调用,也就是event把它本身的invoke函数和括号调用的函数变成拥有这个event类的私有函数。
    什么时候用委托?什么时候用事件?
    如果一个委托不需要在其定义的类之外进行触发,那就将其转化为事件,保证不会在不可知的情况下被触发。

  2. new和override分别有什么作用?什么情况下用new或者override?
    用override关键字重写父类中的虚方法或抽象方法,可以实现多态性,重写方法的访问修饰符必须与被重写方法的访问修饰符相同或更为宽松。
    用new关键字来覆盖一个父类中的成员办法或成员变量。
    不管是重写还是覆盖都不会影响父类自身的功能,当用子类创建父类的时候,重写会改变父类的功能,即调用子类的功能,而覆盖不会,仍然会调用父类功能。
    虚方法和实方法都可以使用new,但是抽象方法和接口不可以;
    抽象方法和接口和virtual的方法都可以override,实方法不可以。
    重写使用的频率比较高,实现多态;覆盖用的频率比较低,用于对以前无法修改的类进行继承的时候。

  3. Async和await是如何使用的?本质核心是什么?方便的点在哪?
    Async是异步的意思,await可以理解为async wait,async用来声明一个异步方法,而await是用来等待异步方法执行。
    Async是一个通过异步执行并隐式返回promise作为结果的函数,promise对象的结果由async函数执行的返回值决定。
    Await右侧的表达式一般为promise对象,也可以是其他的值,如果表达式是promise对象,await会阻塞函数候面的代码,等着promise对象resolve/reject,如果await等待的是一个非promise对象,会隐式的将该对象包装成一个已经resolve的promise对象。
    使用async/await可以实现用同步代码的风格来编写异步代码,因为async/await的基础技术使用了生成器和promise,利用生成器能实现生成器函数的暂停和恢复。
    Async/await是为了优化.then链开发出来的。Await必须写在async函数中,而async函数中可以没有await,如果await的promise失败了,就会抛出异常,需要通过try…catch来捕获异常。

  4. Async void和async task有什么区别?何时使用void?
    Async void是使用async关键字但具有void返回类型的方法,通常用于事件处理器或顶级入口点。Async void和async task的主要区别在于异常处理方式,async void方法不允许适当的异常处理,如果未捕获异常,可能导致应用程序崩溃;async task方法允许更好的错误处理和异常传播。Async void应当尽可能避免使用,使用时应实现适当的异常处理,例如使用try/catch块并到位异步操作的日志记录和监控。

  5. 设计模式中单例模式分为几种?分别什么用途?
    单例模式的特点是一个类只能有一个实例,自己创建这个实例,整个系统都要使用这个实例。
    分为饿汉模式、经典的单例模式、双重检查(保证原子性)、静态内部类实现、枚举实现。
    由于单例模式在内存中只有一个实例,减少了内存开支,减少系统的性能开销,可以避免对资源的多重占用,可以在系统设置全局的访问点。缺点:不适用于变化的对象,扩展困难。

  6. 设计模式工厂模式又是什么?有什么用途?
    工厂模式通过定义一个公告接口或抽象类来创建对象,而具体的对象创建则由工厂类来实现。工厂模式是一种常见的对象创建型模式,具有封装性、可扩展性、复杂对象的创建和解耦等优点,适用于解决复杂对象创建问题。

  7. Is和As的区别是什么?什么时候用Is什么时候用As?
    As在转换的同时兼判断兼容性,如果无法进行转换,则as返回null而不是引发异常,判断是否转换成功要判断是否为null,as是引用类型的类型转换或者装箱转换,不能用与值类型的转换。
    Is只是做类型兼容判断,并不知晓真正的类型转换,返回true或者false不会返回null,对象为null也会返回false。Is判断之后还需要手动代码去完成类型转换。

  8. 解释一下c#多态是什么?接口与抽象类又有何异同?
    多态是父类对象表现多种子类的形态的能力的特征,对于父类中的一个方法,在不同子类中有不同的实现,父类引用子类对象,调用父类被重写的方法时,子类有不同的响应。多态的前提时继承和方法重写。
    接口和抽象类的不同点:1.关键字不同,接口实现时implements,定义是interface;抽象类继承是extends定义是abstracts class。2.权限修饰不同,抽象方法可以有public、protected和default,接口只能是public。3.抽象类中可以有构造方法,而接口中不能有构造方法。4.抽象类中既可以有抽象方法也可以有普通方法,接口中只能有抽象方法。5.抽象类中增加方法可以不影响子类,而接口中增加方法通常都影响子类。6.抽象类中的变量可以是普通变量,接口里定义的变量只能是公共的静态的变量。7.抽象方法可以继承单个类和实现多个接口,接口可以多继承接口。
    接口和抽象类的相同点:1.都可以被继承。2.都不能被实例化。3.都可以包含方法声明。4.派生类必须实现未实现的方法。

  9. 如何实现线程同步?
    Lock,参数必须是基于引用类型的对象,不要使用字符串作为lock的参数,最好避免使用public类型或不受程序控制的对象实例,这样很可能导致死锁。
    System.threading.interlocked实现对整数数据类型的简单操作按照原子操作执行。
    Mutex可以跨进程也可以实现进程内的线程同步。
    ReaderWriterLock,如果在某一时刻资源并没有获取写的独占权,那么可以获得多个读的访问权,单个写入的独占权,如果某一时刻已经获取了写入的独占权,则其他读取的访问权必须进行等待。
    SynchronizationAttribute,可以确保类的实例无法被多个线程同时访问。
    MethodImplAttribute,会使整个方法加锁,直到方法返回,才释放锁。
    同步事件和等待句柄,同步事件有两种AutoResetEvent和ManualResetEvent,实现线程同步的同时线程之间要有交互。可以调用waitone、waitany、waitall来使线程等待事件。

  10. 什么是依赖注入?如何实现依赖注入?
    依赖注入使指程序运行过程中,如果需要调用另一个对象协助时,不需要在代码中创建对象,而是依赖于外部的注入,应用程序在运行时依赖IOC容器来动态注入对象需要的外部资源。DI依赖注入是控制反转的具体实现方式,控制反转是创建对象,依赖注入是为对象的属性赋值。
    创建实例的声明周期:1.Transient瞬时模式,每次访问都会创建一个新的实例。2.Scoped域模式,在同一个scope内只初始化一个实例。3.Singleton单例模式,整个应用程序生命周期只创建一个实例。
    依赖注入的实现方式:1.以接口的形式暴露服务 2.自己注入自己,以实现形式暴露服务 3.需要传参的构造函数的类的注入。

  11. Ref和out和in有什么异同?
    Ref参数成为引用参数,in参数成为输入参数,out参数成为输出参数。
    相同点:ref、out、in标记的参数都是引用传递,关键字都不能约束方法签名,形参使用了ref、out、in关键字,传递参数时也需要添加关键字。
    不同点:in形参不让修改,所以in实参必须初始化;out形参必须修改,所以out实参不需要初始化;ref形参修改和不修改都行,ref实参也是必须初始化。

  12. Yield的用途是什么,请写出简易循环代码?
    Yield在函数中相当于return又不同于return,当函数执行遇到yield的时候,函数会停止执行,并返回yield后的值。

  13. Linq是做什么的?如何编写一个延迟查询?
    Linq代表语言集成查询,允许用sql查询数据库的方式来查询数据的集合。

  14. 在winform中有一个窗体,包含静态字段,实例字段,属性,方法,构造函数,它的执行顺序是什么?
    静态字段-静态构造方法-实例字段-实例构造方法,属性和方法实在调用的时候才执行。

  15. Asp.Net core中,中间件是什么,用途是什么,五大异常过滤器分别是哪些?简述执行顺序?
    在.net core中,中间件是asp.net core应用程序处理请求和响应的组件,中间件位于应用程序的请求处理管道中,它可以截获请求,执行一些逻辑,并将请求传递给下一个中间件或终止请求的执行。一个简单的中间件是一个可以调用的组件,包含一个处理请求的方法。
    五大异常过滤器为:
    Authorization Filter:优先级最高,通常用于验证request合不合法,不合法就直接跳过。
    Resource filter:第二优先,在authorization之后,model binding之前执行,通常会是需要对model加工处理才用。
    Exception Filter:异常处理的filter。
    Action filter:最常使用的filter,封包进出都会经过,跟resourcefilter类似,但不会经过model binding。
    Result Filter:当action完成后,最终会经过的filter。

  16. Using作用是什么并举例说明
    1、 引用命名空间,比如 using System.Text;
    2、 为命名空间或类型创建别名,比如using a=System.Drawing.Point;
    3、 使用using语句定义一个范围,将在此范围之外释放一个或多个对象,比如using (SqlConnection conn = new SqlConnection()){conn.Open();throw new exception(“exception”);}

  17. Task.waitAll和task.whenall有什么区别?如何使用?
    Task.waitall阻止当前线程,直到所有其他任务完成执行为止,task.whenall方法用于创建仅当所有其他任务均已完成时才完成的任务。例如需要在用户界面中显示一些动画,如果我们使用task.waitall则在所有相关任务完成并释放该块之前,该用户界面将被阻止并且不会更新,但如果我们使用task.whenall则不会阻塞UI线程而是会照常更新。

  18. 现在有一个Task执行循环任务,从0开始 每秒循环一次每次递增1 我如何取消任务? 10秒后我取消任务并且输出 那么最终输出是多少? 是否是你想要的值,如果不是,如何处理?
    使用CancellationTokenSource对象外部对task控制,如取消或定时取消等。
    需要声明new一个cancellationTokenSource对象,使用Task.factory.Startnew(task,cancelTokenSource);cancelTokenSource.cancel()即可停止task。此函数还可以管理多个Task的取消。

  19. 什么是深拷贝,什么是浅拷贝,什么时候用深拷贝?那么引用类型和值类型分别有哪些?
    深拷贝是通过复制对象的内容来实现的,意味着新对象和原对象将拥有各自独立的内存空间,互相不受影响。
    浅拷贝是只复制对象的指针或引用来,而不复制对象本身,新对象和原对象将共享同一块内存空间,当一个对象被修改时,另一个对象也会受到影响。
    当希望在改变新的数组的时候不改变原数组对象的时候需要用到深拷贝,当类持有其他资源时比如动态分配的内存或者指向其他数据的指针等,默认的拷贝构造函数就不能拷贝这些资源了,就需要显式的定义拷贝构造函数以完整的拷贝对象的所有数据。
    值类型:数值类型、bool、结构、枚举
    引用类型:字符串、数组、类、接口
    值类型和引用类型的区别:1.值类型赋值会拷贝一个副本,引用类型变量的赋值只复制对对象的引用;2.内存空间不同,值类型会放在栈上面,引用类型会放在堆和栈上面;3.参数传递。

  20. 如果只有调试的时候才可以获取到属性值,那么在非调试中应该怎么获取属性值?
    c# GetType().GetProperty()获取属性,getvalue获取值

  21. 在winform中,我点击一个按钮,此时界面卡死,我应该如何做?

Invoke使用委托,begininvoke不用工作线程等待

  1. 如何托管和非托管代码交互?一般都是调用第三方

  2. Net的内置委托有哪几种?分别是什么作用?
    委托跟方法类似,有参数、有返回值、有修饰符、+delegate;委托的本质时委托类。
    Func是有返回值的委托,Action是没有返回值的委托。


http://www.mrgr.cn/p/26216253

相关文章

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似,Vector也实现了一个可以动态修改的数组,两者最本质的区别在于——Vec…

MySQL随便聊----之MySQL的调控按钮-启动选项和系统变量

-------MySQL是怎么运行的 基本介绍 如果你用过手机,你的手机上一定有一个设置的功能,你可以选择设置手机的来电铃声、设置音量大小、设置解锁密码等等。假如没有这些设置功能,我们的生活将置于尴尬的境地,比如在图书馆里无法把手…

微服架构基础设施环境平台搭建 -(六)Kubesphere 部署Redis服务 设置访问Redis密码

微服架构基础设施环境平台搭建 -(六)Kubesphere 部署Redis服务 & 设置访问Redis密码 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -(一)基础环境准备 微服架构基础设施环境平台搭建 -(二…

海光处理器与软件栈

海光处理器与软件栈参考文献链接 https://www.hygon.cn/index人工智能芯片与自动驾驶

YOLOv8+PyQt5输电线路缺陷检测(目前最全面的类别检测,可以从图像、视频和摄像头三种路径检测)

1.效果视频:YOLOv8PyQt5输电线路缺陷检测(目前最全面的类别检测,可以从图像、视频和摄像头三种路径检测)_哔哩哔哩_bilibili 资源包含可视化的输电线路缺陷检测系统,可识别图片和视频当中出现的五类常见的输电线路缺陷…

服务于金融新核心系统 星辰天合与中电金信完成产品兼容认证

近日,北京星辰天合科技股份有限公司(简称:XSKY星辰天合)与中电金信软件有限公司(简称:中电金信)完成产品兼容性认证,星辰天合的企业级分布式统一数据平台 XEDP 符合金融级数字底座&q…

【PostgreSQL】Postgres数据库安装、配置、使用DBLink详解

目录 一、技术背景1.1 背景1.2 什么是 DBLink 二、安装配置 DBLink2.1 安装 DBLink2.2 配置 DBLink1. 修改 postgresql.conf2. 修改 pg_hba.conf 三、DBLink 使用3.1 数据准备3.2 DBLink 使用1. 创建 DBLink 连接2. 使用 DBLink 进行查询3. 使用 DBLink 进行增删改4. 使用 DBLi…

如何实现直播声卡反向给手机充电功能呢?

在数字化时代的浪潮中,声卡作为多媒体系统的核心组件,扮演着声波与数字信号相互转换的关键角色。它不仅能够将来自各类音源的原始声音信号转换为数字信号,进而输出到各类声响设备,更能够通过音乐设备数字接口(MIDI)发出合成乐器的…

Unreal Engine创建Plugin

打开UE工程,点击编辑,选择插件 点击“新插件”按钮,选择“空白选项”填入插件名字"MultiPlayerPlugin",填入插件作者、描述,点击“创建插件”按钮打开C工程,即可看到插件目录,编译C工…

基于Springboot的玩具租赁系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的玩具租赁系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

基于STM32单片机的汽车胎压、速度及状态监测系统设计与实现

基于STM32单片机的汽车胎压、速度及状态监测系统设计与实现 摘要: 随着汽车电子技术的快速发展,车辆状态实时监控系统的需求日益增长。本文设计并实现了一种基于STM32单片机的汽车胎压、速度及状态监测系统。该系统能够实时监测汽车的胎压、速度以及其他…

E-portfolio

Project 1 EmoDB dataset with SVM emotion classification、 Train SVM machine learning model using the IS09 feature set of the EmoDB dataset. Result of the project accuracy more than 75% :

OS复习笔记ch5-1

引言 讲解完进程和线程之后,我们就要来到进程的并发控制这里,这一章和下一章是考试喜欢考察的点,有可能会出大题,面试也有可能会被频繁问到,所以章节内容较多。请小伙伴们慢慢食用,看完之后多思考加强消化…

js逆向进阶篇-某团酒店

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,如有侵权,可联系本文作者删除! 案例分析: 先来看看请求中有哪些参数是需要我们逆向,如下: mtgsig、fp、roh…

机器学习:驱动现代交通运输革命的AI智慧引擎

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

[详解]Spring AOP

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 什么是AOP? Spring AOP 快速入门 Spring AOP核心概念 切点(Point…

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告:“学习排名 (Learning To Rank)” 功能处于技术预览版,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但此功能不受官方 GA 功能的支持 SLA 的约束。 注意:此功能是在版本 8.12.0 中引入的,并且仅适…

spring cache(一)介绍

一、介绍 1、背景 项目中使用最多的缓存技术就是Redis,用Redis就可以实现了,为什么需要使用spring cache? 先看下我们使用缓存步骤: (1)查寻缓存中是否存在数据,如果存在则直接返回结果 (2&#xff09…

Linux第十五章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

《QT实用小工具·四十六》多边形窗口

1、概述 源码放在文章末尾 该项目实现了可以移动的多边形窗口&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "polygonwindow.h"#include <QBitmap> #include <QQuickItem> #include <QQmlFile> #in…