当前位置: 首页 > news >正文

轻应用网站模板/今天热点新闻事件

轻应用网站模板,今天热点新闻事件,建设电商网站报价,wordpress 4.5 汉化主题.NET C# 八股文 代码阅读(一) 目录 .NET C# 八股文 代码阅读(一)1 两种获10000个数的方式,哪种效率更高?为什么?2 请说出以下代码AB谁先打印,AB打印的值分别为多少?3 关于…

.NET C# 八股文 代码阅读(一)

目录

  • .NET C# 八股文 代码阅读(一)
    • 1 两种获10000个数的方式,哪种效率更高?为什么?
    • 2 请说出以下代码AB谁先打印,AB打印的值分别为多少?
    • 3 关于值类型与引用类型、装箱与拆箱,以下代码会输出什么?
    • 4 关于变量作用域,以下代码会输出什么?

1 两种获10000个数的方式,哪种效率更高?为什么?

// 方式一:
List<int> ints = new List<int>();
for (int i = 0; i < 10000; i++)
{ints.Add(i);
}
// 方式二:
float[] floats = new float[10000];
for (int i = 0; i < 10000; i++)
{floats[i] = i;
}

方式二,因为List会不断扩容,扩容时会反复拷贝造成性能损耗

2 请说出以下代码AB谁先打印,AB打印的值分别为多少?

static int GetInt()
{int i = 10;try{return i;}finally{i = 11;Console.WriteLine("第B处 i= " + i);}
}static void Main(string[] args)
{int i = GetInt();Console.WriteLine("第A处 i= " + i);
}
// 输出:
// 第B处 i= 11
// 第A处 i= 10

步骤如下:

  1. 定义局部变量 i 并赋值为 10。
  2. 进入 try 块,准备返回 i 的值,即 10。
  3. 在返回之前,进入 finally 块,将 i 赋值为 11,并打印 "第B处 i= " + i
  4. 返回值已经在 try 块中确定为 10,即使在 finally 块中修改了 i 的值,也不会影响返回值。

finally 块的特点是不论 try 中是正常返回还是异常抛出,它总会在 try 块的返回语句执行前执行,但它对已经确定的返回值不会有影响。因此,GetInt 方法的返回值仍然是 10。

class Test
{public int i = 10;
}static Test GetObj()
{Test t = new Test();try{return t;}finally{t.i = 11;Console.WriteLine("第B处 i= " + t.i);}
}static void Main(string[] args)
{Test t = GetObj();Console.WriteLine("第A处 i= " + t.i);
}
// 输出:
// 第B处 i= 11
// 第A处 i= 11

因为 GetObj 返回的是一个 Test 对象,是引用类型,所以返回的实际上是一个指向 Test 实例的地址;

所以在 try 返回之前,在 finally 中对这个对象进行了修改,而 try 返回之后,Main 中再根据这个地址找到这个 Test 实例,自然也是 finally 修改之后的实例。

这两种情况的不同实际上是对 “赋值” 与 “修改” 的混淆,如果想依旧实现与上面 GetInt 相同的输出,代码应该改成如下:

class Test
{public int i = 10;
}static Test GetObj()
{Test t = new Test();try{return t;}finally{t = new Test();t.i = 11;Console.WriteLine("第B处 i= " + t.i);}
}
static void Main(string[] args)
{Test t = GetObj();Console.WriteLine("第A处 i= " + t.i);
}
// 输出:
// 第B处 i= 11
// 第A处 i= 10

3 关于值类型与引用类型、装箱与拆箱,以下代码会输出什么?

interface IA
{public int id { get; set; }public string name { get; set; }public int[] children { get; set; }
}struct A : IA
{public int id { get; set; }public string name { get; set; }public int[] children { get; set; }
}
class B
{public int id { get; set; }public string name { get; set; }public int[] children { get; set; }
}static void DoA (A a)
{a.id=6;a.name="Bob";a.children[0]=7;
}
static void DoB (B b)
{b.id=6;b.name="Bob";b.children[0]=7;
}static void Main(string[] args)
{var a = new A();a.name = "Alick";a.children = new int[] { 1, 2, 3 };DoA(a);Console.WriteLine($"a  - name: {a.name}, id: {a.id}, children0: {a.children[0]}");IA ia = a;DoIA(ia);Console.WriteLine($"ia - name: {ia.name}, id: {ia.id}, children0: {ia.children[0]}");Console.WriteLine($"a  - name: {a.name}, id: {a.id}, children0: {a.children[0]}");var b = new B();b.name = "Alick";b.children = new int[] { 1, 2, 3 };DoB(b);Console.WriteLine($"b  - name: {b.name}, id: {b.id}, children0: {b.children[0]}");
}
// 输出:
// a  - name: Alick, id: 0, children0: 7
// ia - name: Bob, id: 6, children0: 7
// a  - name: Alick, id: 0, children0: 7
// b  - name: Bob, id: 6, children0: 7

代码分析

  1. 结构体 A 和接口 IA

    • 结构体 A 实现了接口 IA

    • A 声明变量时,是一个值类型,因此在传递给方法时会进行值复制。

    • IA 声明变量时,会进行装箱(boxing),使其变成对象,因此在传递给方法时传递的是引用。

  2. B

    • B 是一个引用类型,因此在传递给方法时会传递引用。
  3. DoA 方法

    • DoA 直接操作结构体 A

    • 由于 A 是值类型,传递给 DoA 时会创建一个副本。

    • 修改副本的 idname 不会影响原来的 A,但修改数组(引用类型)的内容会影响原数组。

    • namestring 类型,也是引用类型,但对 string 类型的修改都会创建新的字符串,所以相当于是赋予了新的引用地址,并没有修改 name 原来的字符串实例。

  4. DoIA 方法

    • DoIA 操作的是接口 IA

    • 虽然传递的是实现了 IA 的结构体 A,但是接口会装箱(boxing)这个结构体,使其变成对象。

    • 装箱后的修改,会影响装箱后的对象,但不会影响原来的结构体实例。

  5. DoB 方法

    • DoB 操作的是类 B

    • 由于 B 是引用类型,传递的是引用,方法中的修改会影响原对象。

4 关于变量作用域,以下代码会输出什么?

Action action = null;
for (int i = 0; i < 10; i++)
{action += () => Console.WriteLine(i);
}
action.Invoke();
// 输出:
// 0
// 0
// 0
// 0
// 0
// 0
// 0
// 0
// 0
// 0

分析代码:

  1. 定义一个空的 Action 委托:

    Action action = null;
    
  2. 使用 for 循环添加匿名方法到 action

    for (int i = 0; i < 10; i++)
    {action += () => Console.WriteLine(i);
    }
    

    在每次循环中,都会将一个新的匿名方法(Lambda 表达式)添加到 action 委托中,这个匿名方法会打印变量 i 的值。

  3. 调用 action 委托:

    action.Invoke();
    

由于 Lambda 表达式捕获的是变量 i 的引用,而不是它的当前值,当 action.Invoke() 被调用时,for 循环已经完成,变量 i 的值已经变成了 10。因此,所有的匿名方法在被执行时,都会打印当前 i 的值,也就是 10。

Action action = null;
for (int i = 0; i < 10; i++)
{int localI = i; // 引入一个新的局部变量action += () => Console.WriteLine(localI);
}
action.Invoke();
// 输出:
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9

这样每个匿名方法都会捕获自己的 localI 变量,这个变量在每次循环迭代时都有自己唯一的值。

相关文章:

.NET C# 八股文 代码阅读(一)

.NET C# 八股文 代码阅读&#xff08;一&#xff09; 目录 .NET C# 八股文 代码阅读&#xff08;一&#xff09;1 两种获10000个数的方式&#xff0c;哪种效率更高&#xff1f;为什么&#xff1f;2 请说出以下代码AB谁先打印&#xff0c;AB打印的值分别为多少&#xff1f;3 关于…...

C++用Crow实现一个简单的Web程序,实现动态页面,向页面中输入数据并展示

Crow是一个轻量级、快速的C微框架&#xff0c;用于构建Web应用程序和RESTful API。 将处理前端页面的POST请求以添加数据的逻辑添加到 /submit 路由中&#xff0c;并添加了一个新的路由 / 用于返回包含输入框、按钮和表格的完整页面。当用户向表格添加数据时&#xff0c;JavaS…...

南信大尹志聪教授为一作在顶级综合性期刊《Natl. Sci. Rev.》发文:传统梅雨停摆,江南缘何不再多烟雨?

文章简介 论文名称&#xff1a;Traditional Meiyu–Baiu has been suspended by global warming 第一作者及单位&#xff1a;尹志聪(教授|南京信息工程大学大气科学学院) 通讯作者及单位&#xff1a;王会军&#xff08;院士|南京信息工程大学大气科学学院&#xff09; 文章发…...

程序员如何用ChatGPT解决常见编程问题:实例解析

引言 在现代编程的世界中&#xff0c;技术进步日新月异&#xff0c;程序员们面临着各种各样的挑战和问题。解决这些问题的过程中&#xff0c;找到合适的工具至关重要。ChatGPT作为一种先进的人工智能语言模型&#xff0c;能够帮助程序员迅速、高效地解决常见的编程问题。本文将…...

初识 SpringMVC,运行配置第一个Spring MVC 程序

1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序 文章目录 1. 初识 SpringMVC&#xff0c;运行配置第一个Spring MVC 程序1.1 什么是 MVC 2. Spring MVC 概述2.1 Spring MVC 的作用&#xff1a; 3. 运行配置第一个 Spring MVC 程序3.1 第一步&#xff1a;创建Mave…...

STM32F1+HAL库+FreeTOTS学习1——FreeRTOS入门

STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 裸机开发与操作系统嵌入式操作系统简介FreeRTOS简介FreeRTOS的几个重要概念任务调度器任务状态状态列表 裸机开发与操作系统 在以往的嵌入式学习中&#xff0c;我们最常用的就是裸机开发&#xff0c;所谓裸机开发就是指在没有操作系…...

杭州代理记账报税全程托管专业实力全面指南

杭州代理记税报税服务可以为企业提供全程托管财务管理解决方案&#xff0c;确保企业的财务工作专业、高效、合规。以下是杭州代理记税报税服务全面指南&#xff1a; https://www.9733.cn/news/detail/185.html 一、代理记账报税服务的内容 基础服务&#xff1a; 每日记&#xf…...

PHP 界的扛把子 Swoole 异步通信利器

大家好&#xff0c;我是码农先森。 引言 我今天主要介绍的内容是包括但不仅限于 Swoole &#xff0c;也有一部分 Go 语言的内容。 为什么要介绍 Swoole ? 先说一说背景吧&#xff0c;我们项目组之前要为《香港 01》开发一个积分系统的项目&#xff0c;这个系统的主要功能包…...

40.连接假死-空闲检测-发送心跳

连接假死情况 1.网络设备出现故障,例如网卡,机房等。底层的TCP连接已经断开,但应用程序没有感知到,仍然占着资源。 2.公网网络不稳定,出现丢包。若果连续出现丢包,这时现象就是客户端数据发不出去,服务端也一直收不到数据,就这么一直耗着。 3.应用程序线程阻塞,无法…...

hdfs高可用文件系统架构

1、整体架构 2、角色简介 2.1、namenode NameNode 是 HDFS 集群中的核心组件&#xff0c;负责管理文件系统的元数据、处理客户端请求、管理数据块、确保数据完整性和高可用性。由于其重要性&#xff0c;NameNode 的性能和可靠性直接影响整个 HDFS 集群的性能和可靠性。在生产…...

从官方源码精简出第1个FreeRTOS程序

一、下载官方源码 1、打开百度搜索freerots&#xff0c;找到官网:FreeRTOS官网 2、将源码解压到没有中文目录的路径下 二、删减目录 1、删除FreeRTOS-Plus和tools 2、删除FreeRTOS/Demo下除CORTEX_STM32F103_Keil外的所有文件 3、删除FreeRTOS\Source\portable下除RVDS和MemM…...

谷歌上搞下来的,无需付费,可以收藏!

在数字化时代&#xff0c;我们越来越依赖于智能设备来获取信息和知识。中国智谋App正是这样一款应用&#xff0c;它将中国古代的智慧与谋略书籍带入了我们的移动设备&#xff0c;让我们能够随时随地学习和领悟。而且提供文言文的原文和译文。 软件下载方式&#xff1a;谷歌上搞…...

宿主机无法通过ip连接wsl2解决方案

文章目录 原因排查网络模式win11防火墙关闭wsl ubuntu防火墙 如果之前能连接现在连接不上可以参考该方案 原因排查 网络模式win11防火墙(win11新增了Hyper-V防火墙)wsl2 ubuntu防火墙 网络模式 wsl2的默认网络模式是NAT&#xff0c;建议修改为镜像模式。在C:\Users\<User…...

Ruby编程语言学习

学习Ruby编程语言&#xff0c;你可以按照以下步骤进行&#xff1a; ### 1. 基础知识入门 #### 安装Ruby - 访问Ruby官网&#xff08;https://www.ruby-lang.org/&#xff09;下载适合你操作系统的版本。 - 对于Linux用户&#xff0c;可以使用包管理器安装。 #### 学习资源 -…...

Redis实战—基于setnx的分布式锁与Redisson

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…...

ARM功耗管理框架之LPI

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理框架&#xff1f;SCP&#xff1f;PPU&#xff1f;LPI&#xff1f;之间的关系&#xff1f;如何配合&#xff1f; 目录 一、功耗管理框架中的LPI 二、LPI分类 三、Q-Channel和P-Channel对比 四、Q-Channel和P-Ch…...

Unity太空避障Demo总结

太空避障&#xff1a;主要是实现飞机躲避子弹 面板基类、音乐类、排行榜类、json等等都和上一篇Unity坦克迷宫Demo总结一样&#xff0c;太空避障主要是对四元数的练习和使用 1.选择飞机面板 &#xff08;1&#xff09;通过左右按钮对显示的模型进行切换 &#xff08;2&#xff…...

SpringSecurity-重写默认配置

重写UserDetailService组件 1.注入Bean的方式 /*** author: coffee* date: 2024/6/22 21:22* description: 重写springsecurity默认组件&#xff1a;注入Bean的方式*/Configuration public class ProjectConfig {/*** 重写userDetailsService组件*/Beanpublic UserDetailsSer…...

C# 判断值是否在枚举里

你还在代码里面通篇通过数字的定义类型。比如type为1 表示xx,type为2 表示yy吗&#xff1f;然后程序里面通过数字1和2来判断吗&#xff1f;比如下面类似的代码&#xff1a; if(type1){ //.... } else if(type2){ //... } else if(type3){ //... } 老鸟们一般都会用枚举来定义…...

Interview preparation--elasticSearch倒排索引原理

搜索引擎应该具备哪些要求 查询速度快 优秀的索引结构设计高效率的压缩算法快速的编码和解码速度 结果准确 ElasiticSearch 中7.0 版本之后默认使用BM25 评分算法ElasticSearch 中 7.0 版本之前使用 TP-IDF算法 倒排索引原理 当我们有如下列表数据信息&#xff0c;并且系统…...

银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址

银河麒麟高级服务器操作系统V10SP2&#xff08;X86&#xff09;配置bond0的mac地址为指定子网卡的mac地址 一 系统环境二 删除和备份原有配置2.1 down掉bond02.2 备份之前的bond配置到/root/bak2.3 删除bond配置&#xff08;网卡文件根据实际情况变化&#xff09; 三 新建bond0…...

python中不同维度的Tensor向量为何可以直接相加——广播机制

文章目录 广播机制示例解释广播机制如何工作代码示例输出解释广播机制的本质 在矩阵加法中&#xff0c;如果两个张量的形状不同&#xff0c;但其中一个张量的形状可以通过广播机制扩展到与另一个张量的形状相同&#xff0c;则可以进行加法操作。广播机制在深度学习框架&#xf…...

38.MessageToMessageCodec线程安全可被共享Handler

handler被注解@Sharable修饰的。 这样的handler,创建一个实例就够了。例如: ByteToMessageCodec的子类不能被@Sharable修饰 如果自定义类是MessageToMessageCodec的子类就是线程共享的,可以被@Sharable修饰的 package com.xkj.protocol;import com.xkj.message.Message; i…...

Linux中的全局环境变量和局部环境变量

Linux中的全局环境变量和局部环境变量 一、全局环境变量二、局部环境变量三、 设置全局环境变量 bash shell用一个叫作环境变量 &#xff08;environment variable&#xff09;的特性来存储有关shell会话和工作环境的信息&#xff08;这也是它们被称作环境变量的原 因&#xff…...

【研究】AI大模型需要什么样的硬件?

关注AI大模型 x 硬件的两条思路 从22年11月OpenAI推出ChatGPT至今&#xff0c;我们看到Chatbot应用的能力不断增强&#xff0c;从最初的文字问答&#xff0c;迅速向具有自主记忆、推理、规划和执行的全自动能力的AI Agent发展。我们认为端侧智能是大模型发展的重要分支。建议投…...

人工智能--自然语言处理NLP概述

欢迎来到 Papicatch的博客 目录 &#x1f349;引言 &#x1f348;基本概念 &#x1f348;核心技术 &#x1f348;常用模型和方法 &#x1f348;应用领域 &#x1f348;挑战和未来发展 &#x1f349;案例分析 &#x1f348;机器翻译中的BERT模型 &#x1f348;情感分析在…...

基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…...

SpringCloud_GateWay服务网关

网关作用 Gateway网关是我们服务的守门神&#xff0c;所有微服务的统一入口。 网关的核心功能特性&#xff1a; 请求路由和负载均衡&#xff1a;一切请求都必须先经过gateway&#xff0c;但网关不处理业务&#xff0c;而是根据某种规则&#xff0c;把请求转发到某个微服务&a…...

使用Dropout大幅优化PyTorch模型,实现图像识别

大家好&#xff0c;在机器学习模型中&#xff0c;如果模型的参数太多&#xff0c;而训练样本又太少&#xff0c;训练出来的模型很容易产生过拟合的现象。在训练神经网络时&#xff0c;过拟合具体表现在模型训练数据损失函数较小&#xff0c;预测准确率较高&#xff0c;但是在测…...

Vue3中的常见组件通信(超详细版)

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…...