C#面试问题61-80
66. What is reflection?
反射是一种机制,它使我们能够编写可以检查应用程序中所 用类型的代码。例如,调用名称与给定字符串相等的方法,或者列出属于给定 对象的所有字段及其值。
在 Convert 方法中,我们根本不知道处理的是什么类型。我们无法将 “obj”强制转换为任何具体的类型,因为类型可能会有所不同。而且,要实现我们 想要的功能,我们不仅需要属性的值(如果我们有比 System.Object 更具体的类型, 就可以访问这些值),还需要属性的名称,但在运行时这是无法获取的。
What are the downsides of using reflection? 使用反射会对性能产生相对较大的影响。此外,它会使代码难以理解和 维护。它还可能诱使一些程序员在运行时“破解”某些代码,例如访问私有 字段,这可能会导致意外的结果和难以理解的错误
68. What is serialization?
序列化是将对象转换为可存储在内存中或通过网络传输的格式的过程。例 如,对象可以被转换为包含 JSON 或 XML 的文本文件,或者转换为二进制 文件。
What are the uses of serialization? 它可用于通过网络发送对象,或者将对象存储在文件中以便日后重建,甚至 可以将对象存储在数据库中——例如,每当用户对某个对象进行更改时,都 保存该对象的一个“快照”,这样我们就能记录更改的历史记录
Serializable 属性的作 用是什么?
[Serializable]
public record Person
此属性表明类的实例可以使用 BinaryFormatter 或 SoapFormatter 进行序列化。对 于 XML 或 JSON 序列化则无需此属性。BinaryFormatter 将对象序列化为二进制 格式(简单来说,就是一串 0 和 1),而 SoapFormatter 则序列化为 SOAP 格式, 这种格式与 XML 有些类似。
What does the Serializable attribute do? 此属性表明类的实例可以使用 BinaryFormatter 或 SoapFormatter 进行序列化。对于 XML 或 JSON 序列化,此属性并非必需
What is deserialization? 反序列化是序列化的相反过程:它是利用文件的内容重新创建 对象
69. What is pattern matching?
How can we check if an object is of a given type, and cast to it this type in the same statement? 我们可以使用模式匹配来实现这一点。例如,我们可以这样写:“如果 obj 是字符串 text”。这样,只有当 obj 是字符串类型时,我们才会将其转换为名 为 text 的字符串变量
79. What is caching?
如果该值尚未缓存,我们需要以某种方式获取它。 对于 PeopleController 来说,它会从存储库中读取。但我们不能这样做: 缓存类是泛型的,它不仅必须适用于从特定存储库读取的人员对象,还必 须适用于其他任何对象。换句话说,我们还必须提供一种通用机制来读取 将要存储在缓存中的值。最简单的解决方案是将一个 Func 传递给 Get 方法。 此 Func 将返回一个类型为 TValue 的对象。由 Get 方法的调用方提供具体 的读取方法。在我们的例子中,PeopleController将使用缓存,并向 Get 方 法传递一个从数据库读取 Person 对象的函数
using Microsoft.Extensions.Caching.Memory;var peopleController = new PeopleController(new PeopleRepositoryMock());var john = peopleController.GetByName("John", "Smith");
john = peopleController.GetByName("John", "Smith");
john = peopleController.GetByName("John", "Smith");Console.ReadKey();//还添加了非空约束。字典的键绝不能为 null。
class Cache<TKey, TValue> where TKey: notnull
{private readonly Dictionary<TKey, TValue> _cachedData = new();//首先,它应该将一个键作为参数:public TValue Get(TKey key, Func<TValue> getValueForTheFirstTime){if (!_cachedData.ContainsKey(key)){_cachedData[key] = getValueForTheFirstTime();}//如果字典中已存储给定键对应的值,则应直接返回该值:return _cachedData[key];}
} class PeopleController
{//我们希望可以通过提供名字和姓氏来检索它们。所以也许最好的选择是一个字典,//其中由两个字符串组成的元组(分别代表名字和姓氏)作为键,Person 对象作为值。private readonly Cache<(string, string), Person?> _cache = new();private readonly IRepository<Person> _peopleRepository;public PeopleController(IRepository<Person> peopleRepository){_peopleRepository = peopleRepository;}public Person? GetByName(string firstName, string lastName){//Get 方法的第一个参数是键,在我们的例子中是一个包含名和姓的 ValueTuple。//第二个参数是一个函数,用于从存储库中检索具有这些姓名的 Person 对象。return _cache.Get((firstName, lastName),() => _peopleRepository.GetByName(firstName, lastName).FirstOrDefault());}private readonly MemoryCache _memoryCache =new MemoryCache(new MemoryCacheOptions());//alternatively we can use the Microsoft's MemotyCachepublic Person? GetByNameMemoryCache(string firstName, string lastName){return _memoryCache.GetOrCreate((firstName, lastName),cacheEntry => _peopleRepository.GetByName(firstName, lastName).FirstOrDefault());}
}internal interface IRepository<T>
{IEnumerable<Person> GetByName(string firstName, string lastName);
}record Person(string FirstName, string LastName);class PeopleRepositoryMock : IRepository<Person>
{public IEnumerable<Person> GetByName(string firstName, string lastName){if (firstName == "John" && lastName == "Smith"){return new[] { new Person("John", "Smith") };}throw new NotImplementedException();}
}
What are the benefits of using caching? 如果反复通过相同的键检索数据,缓存可以提升性能。它不仅有助于从外部 数据源检索数据,甚至对于本地计算的数据也有帮助,尤其是当计算本身比 较繁重(例如某些复杂的数学运算)时
What are the downsides of using caching? 缓存会占用应用程序的内存。随着时间的推移,缓存可能会不断增大,因此 应当引入某种清理机制以避免出现内存溢出异常。这类机制通常基于数据的 过期时间。此外,缓存中的数据可能会过时,即在数据源中已发生变化,但缓存 中仍保留旧版本并在应用程序中使用。正因为如此,缓存对于那些不常变化 的数据最为有用
80. What are immutable types and whta's their purpose?
What are pure functions?
What are th benefits of using immutable types?
What is the non-destructive mutation?
相关文章:
C#面试问题61-80
66. What is reflection? 反射是一种机制,它使我们能够编写可以检查应用程序中所 用类型的代码。例如,调用名称与给定字符串相等的方法,或者列出属于给定 对象的所有字段及其值。 在 Convert 方法中,我们根本不知道处理的是什么…...
分布式Session处理的五大主流方案解析
在分布式环境下,Session 处理的核心挑战是确保用户请求在不同服务器间流转时能保持会话状态一致。以下是主流解决方案及优缺点分析: 🔐 一、集中存储方案(主流推荐) Redis/Memcached 存储 原理:将 Session…...
C++ 中的 const 知识点详解,c++和c语言区别
目录 一。C 中的 const 知识点详解1. 基本用法1.1) 定义常量1.2) 指针与 const 2. 函数中的 const2.1)const 参数2.2)const 成员函数 3. 类中的 const3.1)const 成员变量3.2)const 对象 4. const 返回值5. …...

《PyTorch:开启深度学习新世界的魔法之门》
一、遇见 PyTorch:深度学习框架新星登场 在当今的技术领域中,深度学习已然成为推动人工智能发展的核心动力,而深度学习框架则是这场技术革命中的关键工具。在众多深度学习框架里,PyTorch 以其独特的魅力和强大的功能,迅速崛起并占据了重要的地位,吸引着无数开发者和研究者…...

分布式光纤传感(DAS)技术应用解析:从原理到落地场景
近年来,分布式光纤传感(Distributed Acoustic Sensing,DAS)技术正悄然改变着众多传统行业的感知方式。它将普通的通信光缆转化为一个长距离、连续分布的“听觉传感器”,对振动、声音等信号实现高精度、高灵敏度的监测。…...

Spring事务回滚在系统中的应用
以文章发布为例,介绍Spring事务回滚在系统中的应用 事务回滚的核心概念 事务回滚是数据库管理系统中的关键机制,它确保数据库操作要么全部成功,要么全部失败。在Spring框架中,我们可以通过Transactional注解轻松实现事务管理。 …...
.Net Framework 4/C# 属性和方法
一、属性的概述 属性是对实体特征的抽象,用于提供对类或对象的访问,C# 中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,用于把读取和写入对象的某些特征与一些操作…...

ASP.NET Core使用Quartz部署到IIS资源自动被回收解决方案
iis自动回收的原因 回收机制默认配置,间隔时间是1740分钟,意思是:默认情况下每1740分钟(29小时)回收一次,定期检查应用程序池中的工作进程,并终止那些已经存在很长时间或已经使用了太多资源的工作进程 进程模型默认配…...
Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理
Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理 之前的笔记: Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结Fullsta…...

调用.net DLL让CANoe自动识别串口号
1.前言 CANoe9.0用CAPL控制数控电源_canoe读取程控电源电流值-CSDN博客 之前做CAPL通过串口控制数控电源,存在一个缺点:更换电脑需要改串口号 CSDN上有类似的博客,不过要收费,本文根据VID和PID来自动获取串口号,代码…...
第5章:Cypher查询语言进阶
在掌握了Cypher的基础知识后,本章将深入探讨更高级的查询技术。这些进阶技能将帮助您构建更复杂、更高效的查询,解决实际业务中的复杂问题,并充分发挥Neo4j的图数据处理能力。 5.1 复杂查询构建 随着业务需求的复杂性增加,查询也…...
【Python进阶】元类编程
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...

算法(蓝桥杯学习C/C++版)
up: 溶金落梧桐 溶金落梧桐的个人空间-溶金落梧桐个人主页-哔哩哔哩视频 蓝桥杯三十天冲刺系列 BV18eQkY3EtP 网站: OI Wiki OI Wiki - OI Wiki 注意 比赛时,devc勾选c11(必看) 必须勾选c11一共有两个方法,任用…...

Docker镜像无法拉取问题解决办法
最近再学习RabbitMQ,需要从Docker镜像中拉取rabbitMQ,但是下拉失败 总的来说就是无法和docker镜像远程仓库建立连接 我又去尝试ping docker.io发现根本没有反应,还是无法连接找了许多办法还是没有办法解决,最后才发现是镜像问题&a…...

ZephyrOS 嵌入式开发Black Pill V1.2之Debug调试器
版本和环境信息如下: PC平台: Windows 11 专业版 Zephyr开发环境:v4.1.0 Windows 下搭建 Zephyr 开发环境 WeAct BlackPill V1.2开发板: WeAct STM32F411CEU6 BlackPill 核心板 Debug调试器: ST-LINK V2: ST-LINK V2 S…...
# 主流大语言模型安全性测试(二):英文越狱提示词下的表现与分析
主流大语言模型安全性测试(二):英文越狱提示词下的表现与分析 在上一篇文章中,我们对多个主流大语言模型(LLM)进行了中文诱导性提示词的越狱测试,评估其是否能够在面对非法、有害或危险内容请求…...
SAP 在 AI 与数据统一平台上的战略转向
在 2025 年 SAP Sapphire 大会上,SAP 展示了其最新的产品战略和技术整合方向,与以往不同的是,今年的讨论更加务实、聚焦客户实际需求。SAP 强调,ERP 的转型不再是“一刀切”或破坏性的,而是可以根据客户现状࿰…...

服务器磁盘空间被Docker容器日志占满处理方法
事发场景: 原本正常的服务停止运行了,查看时MQTT服务链接失败,查看对应的容器服务发现是EMQX镜像停止运行了,重启也是也报错无法正常运行,报错如下图: 报错日志中连续出现两个"no space left on devi…...

c++学习-this指针
1.基本概念 非静态成员函数都会默认传递this指针(静态成员函数属于类本身,不属于某个实例对象),方便访问对象对类成员变量和 成员函数。 2.基本使用 编译器实际处理类成员函数,this是第一个隐藏的参数,类…...

交易所系统攻坚:高并发撮合引擎与合规化金融架构设计
交易所系统攻坚:高并发撮合引擎与合规化金融架构设计 ——2025年数字资产交易平台的性能与合规双轮驱动 一、高并发撮合引擎:从微秒级延迟到百万TPS 核心架构设计 订单簿优化:数据结构创新:基于红黑树与链表混合存储,…...

OpenCV计算机视觉实战(10)——形态学操作详解
OpenCV计算机视觉实战(10)——形态学操作详解 0. 前言1. 腐蚀与膨胀1.1 为什么要做腐蚀与膨胀1.2 OpenCV 实现 2. 开运算与闭运算2.1 开运算与闭运算原理2.2 OpenCV 实现 3. 形态学梯度与骨架提取3.1 形态学梯度3.2 骨架提取 小结系列链接 0. 前言 形态…...
libiec61850 mms协议异步模式
之前项目中使用到libiec61850库,都是服务端开发。这次新的需求要接收服务端的遥测数据,这就涉及到客户端开发了。 客户端开发没搞过啊,挑战不少,但是人不就是通过战胜困难才成长的嘛。通过查看libiec61850的客户端API发现…...

[论文阅读] 人工智能 | 利用负信号蒸馏:用REDI框架提升LLM推理能力
【论文速读】利用负信号蒸馏:用REDI框架提升LLM推理能力 论文信息 arXiv:2505.24850 cs.LG cs.AI cs.CL Harnessing Negative Signals: Reinforcement Distillation from Teacher Data for LLM Reasoning Authors: Shuyao Xu, Cheng Peng, Jiangxuan Long, Weidi…...

基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案
在工业系统开发中,**“稳定”**往往比“先进”更重要。设备一旦部署,生命周期动辄 5~10 年,系统重启或异常恢复成本高昂。 这时候,一套“值得托付”的软硬件组合,就显得尤为关键。 ✅ NXP —— 提供稳定、长期供货的工…...
CSS 选择器全解析:分组选择器/嵌套选择器,从基础到高级
一、CSS 选择器基础:从单个元素到多个元素 CSS 选择器是用来定位 HTML 元素的工具,就像 “元素的地址”。最基础的选择器有: 元素选择器(按标签名定位) css p { color: red; } /* 所有<p>标签 */ div { b…...
uniapp 对接腾讯云IM群公告功能
UniApp 实战:腾讯云IM群公告功能 一、前言 在即时通讯场景中,群公告是信息同步的重要渠道。本文将基于uniapp框架,结合腾讯云IM SDK,详细讲解如何实现群公告的发布、修改、历史记录查询等核心功能。 群公告的数据结构设计权限校…...

垂起固定翼无人机应用及技术分析
一、主要应用行业 1. 能源基础设施巡检 电力巡检:适用于超高压输电线路通道的快速巡查,实时回传数据提升智能运检效率。 油田管道监测:利用长航时特性(1.5-2小时)对大范围管道进行隐患排查,减少人力巡…...
Python Robot Framework【自动化测试框架】简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

vite配置@别名,以及如何让IDE智能提示路经
1.配置路径(vite.config.js) // vite.config.js import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; import path from "path";// https://vite.dev/config/ export default defineConfig({server: {port: 8080,},plu…...
c#bitconverter操作,不同变量类型转byte数组
缘起:串口数据传输的基础是byte数组,write(buff,0,num)或者writeline(string),如果是字符串传输就是string变量就可以了,但是在modbus这类hex传递时,就要遇到转换了,拼凑byte数组时需要各种变量的值传递,解…...