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

面试复习基础题目

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.mzph.cn/diannao/1948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚类与分类的区别

聚类和分类是机器学习中的两个基本概念,两者的主要区别在于用于分类的数据已经预先标记好类别,而用于聚类的数据则没有预先标记的类别。以下是详细介绍: 目的不同。聚类的目的是发现数据中的自然分组,将相似或相关的对象组织在一…

基于SSM+Vue的护工预约服务小程序和后台管理系统

1、系统演示视频(演示视频) 2、需要请联系

虚拟化+Docker基本管理

一、虚拟化简介 1、云端 华为云、谷歌云、腾讯云、阿里云、亚马逊、百度云、移动云、天翼云、西部数码云等 1.国内云 华为云、阿里云、腾讯云、天翼云(私有云) 2.国外云 谷歌云、亚马逊 2、云计算的服务模式是分层的 IaaS:Infrastructure(基础设…

计算机网络【CN】Ch3 数据链路层

目录 数据链路层的功能 【※】VLAN 三种划分VLAN的方法: 【※】MAC帧格式 【※】三种可靠传输机制 ​编辑 【※】介质访问控制 信道划分介质访问控制 随机介质访问控制 CSMA CSMA/CD【有线】 CSMA/CA【无线】 信道利用率技巧 循环冗余校验CRC 以太网[802.3] 以太网…

项目实战 | 责任链模式 (下)

案例二:工作流,费用报销审核流程 同事小贾最近刚出差回来,她迫不及待的就提交了费用报销的流程。根据金额不同,分为以下几种审核流程。报销金额低于1000元,三级部门管理者审批即可,1000到5000元除了三级部…

【k8s】(五)kubernetes1.29.4离线部署之-初始化第一个控制平面

备注: 完整版请参阅 【k8s】Kubernetes 1.29.4离线安装部署(总) 执行命令初始化第一个控制平面节点 在上节的安装过程中,实际以及包含了初始化第一个控制平面的脚本,由于其重要性,这里单独提出来详细说明。…

RK平台HDMI和喇叭同时出声

多屏时,未接入hdmi默认speaker音频输出,检测到接入hdmi时切换到hdmi音频输出。此时有个问题,如果接入hdmi的屏没有speaker会就导致没有声音输出了,所以需要默认hdmi和speaker同时出声。 /frameworks/base/services/core/java/com…

智己汽车数据驱动中心PMO高级经理张晶女士受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 智己汽车科技有限公司数据驱动中心PMO高级经理张晶女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“规模化敏捷落地实践”。大会将于5月25-26日在北京举办,敬请关注! 议题简要: 2…

【Java学习笔记】9.5 Java中的Lambda表达式

Lambda表达式是从Java8版本开始增加的语法。Lambda表达式有利于实现函数式编程,简化开发。 9.5.1 Lambda表达式入门 Lambda表达式由三部分组成:参数列表、箭头(->),及一个表达式或语句块。其完整的语法格式如下: (Type 1 param1 , Type…

hcip实验 — 路由策略实验

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置接口及环回ip 2.配置ospf协议及rip协议 3.在R2上进行路由引入 4.在R2上进行路由过滤 5.在R4上进行路由过滤(地址前缀列表) 6.在R2 RIP进程上配置静默接口使RIP报文无法进入OSPF区域 实验拓扑 …

Linux默认shell简介、查看和更改

在Linux环境中,用户的“默认shell”是指他们登录系统后自动启动的命令行解释器或交互式shell。这个shell用于处理用户在命令行界面输入的命令和操作。每个用户都拥有一个特定的默认shell。 Linux系统中常见的默认shell包括以下几种: Bash(B…

HCF-Net:用于红外小目标检测的分层上下文融合网络

摘要 红外小目标检测是一项重要的计算机视觉任务,涉及在红外图像中识别和定位微小物体,这些物体通常仅包含几个像素。然而,由于物体尺寸极小以及红外图像中通常复杂的背景,这项任务面临困难。在本文中,我们提出了一种…

[leetcode] 264. 丑数 II

给你一个整数 n ,请你找出并返回第 n 个 丑数 。 丑数 就是质因子只包含 2、3 和 5 的正整数。 示例 1: 输入:n 10 输出:12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2&#xff1…

贪吃蛇代码实现

一.基本信息 实现目标:使用C语言在Windows环境的控制台中实现贪吃蛇游戏 游戏运行: 地图绘制基本玩法提示信息游戏的开始与结束 基本玩法: 通过上下左右键控制蛇的移动蛇可以加速减速吃掉食物可以得分并增加蛇的长度可以自动暂停 游戏结…

代码随想录算法训练营第三十四天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

1005.K次取反后最大化的数组和 思路: 贪心的思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。 局部最优可以推出全局最优。 那么如果将负数都转变为正数了&…

SAP DMS后台配置(4)

当DMS和CS文档服务器关联的时候,除了需要BASIS进行相关的配置以外,我们DMS也要进行相关的系统配置 路径:SPRO—跨应用组件—文档管理—常规数据—存储系统设置—维护还原系统 路径:SPRO—跨应用组件—文档管理—常规数据—存储系统设置—维护还原类别 当DMS和CS文档服…

HarmonyOS开发实例:【图片编辑应用】

介绍 本篇Codelab通过动态设置元素样式的方式,实现几种常见的图片操作,包括裁剪、旋转、缩放和镜像。效果如图所示: 相关概念 [image组件]:图片组件,用来渲染展示图片。[div组件]:基础容器组件&#xff0…

VMware虚拟机安装CentOS详细教程

前言 最近小白发现,有很多小伙伴在学习过程中都需要配置CentOS的系统,因此决定更新一篇在VMware虚拟机上安装CentOS的教程。 小白最近也去看了一下各种云的服务商出租的服务器,其中可选的系统中也有包括CentOS,所以在VMware配置…

用python做傅里叶变换和系统辨识

一、原始信号 1、理想数据 (1)系统参数 参数类型数值J0.5 k g ∗ m 2 kg*m^2 kg∗m2K0.2b5 (2)激励曲线 import matplotlib.pyplot as plt import numpy as np# 生成数据 x np.linspace(0, 10, 1000) # 生成0到10之间的100…

Midjourney与waifu2x双剑合璧:完美打造超高清动漫图像

在追求完美的动漫图像时,质量和分辨率是两个关键因素。Midjourney(一个神秘而强大的AI图像生成工具)与waifu2x(一个专门用于放大动漫风格图像的AI工具)的结合使得创造超高清的动漫图像变得触手可及。本文将引导您如何使…