C# 高频面试题

C# 初级面试题及详细解答

1. C#中的值类型和引用类型的区别是什么?

解答: 值类型存储在堆栈上,直接包含数据;引用类型存储在堆上,存储的是对象的引用。值类型包括基本类型如 intfloatstruct;引用类型包括 classinterfacedelegatearray

2. 如何在 C# 中定义一个类和对象?

解答: 使用 class 关键字定义类,通过 new 关键字创建对象。例如:

class Person {public string Name { get; set; }
}Person person = new Person();
person.Name = "John";

3. 什么是属性 (Property),如何定义和使用它?

解答: 属性是类的成员,用于提供对字段的读写访问。使用 getset 访问器定义。例如:

class Person {private string name;public string Name {get { return name; }set { name = value; }}
}Person person = new Person();
person.Name = "John";

4. 解释 C# 中的继承 (Inheritance)。

解答: 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(基类)的成员。使用 : 关键字表示继承。例如:

class Animal {public void Eat() {Console.WriteLine("Eating");}
}class Dog : Animal {public void Bark() {Console.WriteLine("Barking");}
}Dog dog = new Dog();
dog.Eat(); // 继承自 Animal
dog.Bark(); // Dog 自己的方法

5. 什么是接口 (Interface),如何在 C# 中定义和实现它?

解答: 接口定义一组方法和属性的契约,没有实现。类可以实现接口。使用 interface 关键字定义,用 : 实现。例如:

interface IMovable {void Move();
}class Car : IMovable {public void Move() {Console.WriteLine("Car is moving");}
}

6. 什么是抽象类 (Abstract Class)?

解答: 抽象类不能实例化,只能被继承。它可以包含抽象方法(没有实现)和具体方法(有实现)。使用 abstract 关键字定义。例如:

abstract class Animal {public abstract void MakeSound();public void Eat() {Console.WriteLine("Eating");}
}class Dog : Animal {public override void MakeSound() {Console.WriteLine("Barking");}
}

7. 解释 C# 中的多态性 (Polymorphism)。

解答: 多态性允许方法在不同类中有不同实现。它通过方法重写和接口实现实现。示例如下:

class Animal {public virtual void MakeSound() {Console.WriteLine("Animal sound");}
}class Dog : Animal {public override void MakeSound() {Console.WriteLine("Barking");}
}Animal animal = new Dog();
animal.MakeSound(); // 输出 "Barking"

8. C# 中的静态成员和实例成员有什么区别?

解答: 静态成员属于类本身,用 static 关键字定义,实例成员属于类的对象。静态成员通过类名访问,实例成员通过对象访问。例如:

class MyClass {public static int StaticMember;public int InstanceMember;
}MyClass.StaticMember = 10;
MyClass obj = new MyClass();
obj.InstanceMember = 5;

9. 如何在 C# 中处理异常?

解答: 使用 try-catch 块捕获和处理异常,finally 块可用于清理资源。示例如下:

try {int result = 10 / 0;
} catch (DivideByZeroException ex) {Console.WriteLine("Cannot divide by zero");
} finally {Console.WriteLine("Cleanup code here");
}

10. 解释 C# 中的事件 (Event) 和委托 (Delegate)。

解答: 委托是方法的类型安全指针,事件是基于委托的发布-订阅模式。使用 delegate 定义委托,用 event 定义事件。例如:

public delegate void Notify();public class Process {public event Notify ProcessCompleted;public void StartProcess() {// Process code hereOnProcessCompleted();}protected virtual void OnProcessCompleted() {if (ProcessCompleted != null)ProcessCompleted.Invoke();}
}class Program {static void Main() {Process process = new Process();process.ProcessCompleted += ProcessCompletedHandler;process.StartProcess();}static void ProcessCompletedHandler() {Console.WriteLine("Process Completed!");}
}

C# 中级面试题及详细解答

1. 解释 C# 中的扩展方法 (Extension Method)。

解答: 扩展方法允许向现有类型添加新方法,而无需修改该类型的定义。扩展方法必须是静态的,并定义在静态类中。使用 this 关键字将第一个参数指向被扩展的类型。例如:

public static class StringExtensions {public static bool IsPalindrome(this string str) {int i = 0;int j = str.Length - 1;while (i < j) {if (str[i] != str[j]) return false;i++;j--;}return true;}
}string test = "level";
bool result = test.IsPalindrome(); // 输出 true

2. 什么是 LINQ,列举一些常用的 LINQ 查询操作符。

解答: LINQ (Language Integrated Query) 是一种查询语言,提供对集合(如数组、列表和数据库)进行查询的统一方式。常用的操作符包括 WhereSelectOrderByGroupByJoinSum。例如:

int[] numbers = { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList(); // 输出 [2, 4, 6]

3. 解释 C# 中的委托 (Delegate) 和事件 (Event) 的区别。

解答: 委托是方法的类型安全指针,可以指向与其签名匹配的任何方法。事件是基于委托的封装,提供了一种发布-订阅机制,用于通知订阅者。委托可以直接调用,事件只能通过发布者调用。例如:

public delegate void Notify();public class Publisher {public event Notify OnNotify;public void NotifySubscribers() {OnNotify?.Invoke();}
}public class Subscriber {public void Subscribe(Publisher publisher) {publisher.OnNotify += HandleNotification;}private void HandleNotification() {Console.WriteLine("Notified");}
}

4. 什么是异步编程,如何在 C# 中实现异步编程?

解答: 异步编程通过非阻塞操作提高应用程序的响应性,适用于I/O操作和长时间运行的任务。C# 中的 asyncawait 关键字用于实现异步编程。示例如下:

public async Task<string> GetDataAsync() {using (HttpClient client = new HttpClient()) {HttpResponseMessage response = await client.GetAsync("https://api.example.com/data");return await response.Content.ReadAsStringAsync();}
}public async Task ProcessData() {string data = await GetDataAsync();Console.WriteLine(data);
}

5. 解释 C# 中的装箱 (Boxing) 和拆箱 (Unboxing)。

解答: 装箱是将值类型转换为引用类型(通常是 object)的过程,拆箱是将引用类型还原为值类型的过程。装箱和拆箱涉及性能开销,因此应尽量避免频繁操作。例如:

int value = 123;
object boxedValue = value; // 装箱
int unboxedValue = (int)boxedValue; // 拆箱

6. 解释 C# 中的异常过滤器 (Exception Filter)。

解答: 异常过滤器允许在 catch 块中添加条件,仅在特定条件满足时捕获异常。使用 when 关键字定义过滤器。例如:

try {// 可能引发异常的代码
} catch (Exception ex) when (ex is ArgumentNullException) {Console.WriteLine("Caught ArgumentNullException");
} catch (Exception ex) {Console.WriteLine("Caught other exceptions");
}

这段代码仅捕获 ArgumentNullException,其他异常将进入下一个 catch 块。

7. 什么是 C# 中的自定义特性 (Attribute),如何定义和使用它?

解答: 自定义特性是用于向代码元素(如类、方法、属性)添加元数据的自定义修饰符。定义特性需继承自 System.Attribute。示例如下:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute {public string Description { get; }public MyCustomAttribute(string description) {Description = description;}
}[MyCustomAttribute("This is a custom attribute")]
public class MyClass {[MyCustomAttribute("This is a method with a custom attribute")]public void MyMethod() {}
}

可以通过反射读取这些特性。

8. 如何在 C# 中使用委托 (Delegate) 实现事件驱动编程?

解答: 委托是事件驱动编程的基础,定义事件需要使用委托。发布者定义事件,订阅者订阅事件,并在事件触发时调用相应的处理方法。例如:

public delegate void Notify();public class Publisher {public event Notify OnNotify;public void NotifySubscribers() {OnNotify?.Invoke();}
}public class Subscriber {public void Subscribe(Publisher publisher) {publisher.OnNotify += HandleNotification;}private void HandleNotification() {Console.WriteLine("Notified");}
}
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
subscriber.Subscribe(publisher);
publisher.NotifySubscribers();

这种方式实现了松耦合的事件驱动编程。

9. 解释 C# 中的依赖注入 (Dependency Injection)。

解答: 依赖注入是一种设计模式,通过将依赖关系注入到对象中,而不是在对象内部创建依赖,从而实现松耦合。C# 中常用的依赖注入框架包括 Autofac、Unity 和 .NET Core 自带的依赖注入容器。示例如下:

public interface IService {void Serve();
}public class Service : IService {public void Serve() {Console.WriteLine("Service Called");}
}public class Client {private readonly IService _service;public Client(IService service) {_service = service;}public void Start() {_service.Serve();}
}

通过依赖注入容器注册和解析依赖,避免手动创建对象的复杂性。

10. 什么是 .NET Core 中的中间件 (Middleware)?

解答: 中间件是用于处理请求和响应的组件,形成一个请求管道。每个中间件可以对请求进行处理,并将其传递给下一个中间件。定义中间件需实现 IMiddleware 接口或使用 RequestDelegate。示例如下:

public class MyMiddleware {private readonly RequestDelegate _next;public MyMiddleware(RequestDelegate next) {_next = next;}public async Task InvokeAsync(HttpContext context) {// 前置处理逻辑await _next(context);// 后置处理逻辑}
}public void Configure(IApplicationBuilder app) {app.UseMiddleware<MyMiddleware>();// 其他中间件
}

这种方式实现了灵活的请求处理管道。

C# 高级面试题及详细解答

1. 解释 C# 中的内存管理机制,特别是垃圾回收机制。

解答: C# 的内存管理主要由CLR (Common Language Runtime) 管理,核心机制是垃圾回收 (Garbage Collection, GC)。GC自动管理内存分配和释放,主要分为三个代 (Generation) 管理内存:Gen 0、Gen 1 和 Gen 2。对象初次分配内存在 Gen 0,存活后逐渐晋升至 Gen 1 和 Gen 2。GC通过标记-清除算法标记不再使用的对象并释放其内存,减少内存泄漏风险,提高内存利用率。

2. 如何在 C# 中实现多线程和并行编程?比较Thread和Task的异同。

解答: 多线程可通过 ThreadTask 实现。Thread 提供低级控制,可直接创建和管理线程;Task 是基于 ThreadPool 的更高级抽象,适合并行计算和异步操作。Task 提供简化的任务管理、取消、等待和异常处理,推荐使用 Task 实现并行编程。示例:

Task.Run(() => {// Task code here
});Thread thread = new Thread(() => {// Thread code here
});
thread.Start();

3. 什么是 C# 中的异步编程模型 (Asynchronous Programming Model)?

解答: 异步编程模型 (APM) 在 C# 中通过 asyncawait 关键字实现,旨在提高应用程序的响应性和性能。异步方法返回 TaskTask<T>,使用 await 关键字等待异步操作完成而不阻塞线程。异步编程适用于 I/O 密集型任务,如文件操作、网络请求等。例如:

public async Task<string> FetchDataAsync() {using (HttpClient client = new HttpClient()) {return await client.GetStringAsync("https://api.example.com/data");}
}

4. 解释 C# 中的依赖注入 (Dependency Injection) 及其实现方式。

解答: 依赖注入 (DI) 是一种设计模式,通过将依赖对象注入到需要它们的类中,减少耦合并提高可测试性。在 C# 中,DI 通常通过构造函数注入、属性注入或方法注入实现。DI 容器(如 .NET Core 自带的 DI 容器、Autofac、Unity)用于注册和解析依赖。例如:

public interface IService {void Serve();
}public class Service : IService {public void Serve() {Console.WriteLine("Service Called");}
}public class Client {private readonly IService _service;public Client(IService service) {_service = service;}public void Start() {_service.Serve();}
}

在 Startup.cs 中注册服务:

services.AddTransient<IService, Service>();

5. 解释 C# 中的并发集合 (Concurrent Collections) 及其适用场景。

解答: 并发集合在多线程环境下提供安全的集合操作,避免锁机制带来的复杂性和性能开销。常用的并发集合有 ConcurrentDictionaryConcurrentQueueConcurrentStackConcurrentBag 等。适用于高并发访问的场景,例如任务队列、线程池等。例如:

ConcurrentDictionary<int, string> dict = new ConcurrentDictionary<int, string>();
dict.TryAdd(1, "One");
if (dict.TryGetValue(1, out string value)) {Console.WriteLine(value); // 输出 "One"
}

6. 解释 C# 中的委托 (Delegate) 和表达式树 (Expression Trees) 的区别。

解答: 委托是方法的类型安全指针,用于定义并引用符合签名的方法。表达式树表示代码的抽象语法树,允许代码动态生成、修改和编译。委托用于事件和回调,表达式树用于动态查询和 LINQ 提供者。示例如下:

// 委托
public delegate int MyDelegate(int x, int y);
MyDelegate add = (a, b) => a + b;
int result = add(3, 4); // 输出 7// 表达式树
Expression<Func<int, int, int>> expression = (a, b) => a + b;
var compiled = expression.Compile();
int resultExpression = compiled(3, 4); // 输出 7

7. 解释 C# 中的反射 (Reflection) 及其应用场景。

解答: 反射允许在运行时检查和操作类型信息,包括类、方法、属性、事件等。常用于插件系统、序列化和反序列化、元数据访问和动态调用方法。使用 System.Reflection 命名空间实现反射。例如:

Type type = typeof(MyClass);
MethodInfo method = type.GetMethod("MyMethod");
object instance = Activator.CreateInstance(type);
method.Invoke(instance, null);

通过反射,可以动态加载和调用程序集中的类型和方法。

8. 解释 C# 中的垃圾回收机制,如何优化内存管理?

解答: C# 中的垃圾回收机制通过CLR自动管理内存分配和释放,减少内存泄漏和悬挂引用。垃圾回收采用分代收集(Gen 0、Gen 1、Gen 2)提高效率。优化内存管理可以通过以下方法:1)减少对象分配频率;2)及时释放大对象;3)使用 using 语句管理非托管资源;4)避免频繁的装箱和拆箱操作。示例:

using (var resource = new Resource()) {// 使用资源
} // 自动调用 Dispose 方法释放资源

9. 解释 C# 中的线程同步机制及其实现方式。

解答: 线程同步机制用于协调多个线程对共享资源的访问,避免竞争条件和数据不一致。C# 中常用的同步机制包括 lockMonitorMutexSemaphoreAutoResetEventlock 关键字是常用的同步方法,用于简化 Monitor 的使用。例如:

private readonly object _lockObject = new object();public void ThreadSafeMethod() {lock (_lockObject) {// 线程安全代码}
}

通过锁定共享资源,确保同一时间只有一个线程能访问该资源。

10. 解释 C# 中的动态类型 (Dynamic Type) 及其使用场景。

解答: 动态类型 (dynamic) 允许在编译时跳过类型检查,在运行时确定类型。适用于需要与动态语言交互、处理 JSON/XML 数据或调用不确定类型的对象(如 COM 对象、反射等)的场景。使用 dynamic 关键字定义动态类型。例如:

dynamic obj = GetDynamicObject();
obj.SomeMethod(); // 在运行时确定方法和类型

动态类型提供灵活性,但丧失编译时类型安全,应谨慎使用以避免运行时错误。

总结

在C#面试中,候选人需要掌握以下关键知识点:

  1. C#基础语法:熟悉C#的基本语法结构,包括变量声明、数据类型、控制流语句(if、switch、loops)等。

  2. 面向对象编程(OOP):理解面向对象的核心概念,如封装、继承、多态和抽象。能够设计和实现类和对象。

  3. 集合框架:熟悉.NET的集合框架,包括常用的集合类型如List、Dictionary<T,K>、HashSet等,以及它们的性能特点和适用场景。

  4. 异常处理:掌握try、catch、finally块的使用,以及如何自定义异常。

  5. 泛型:理解泛型的概念和用途,能够使用泛型来创建类型安全的数据结构。

  6. LINQ:熟悉语言集成查询(LINQ),能够使用LINQ进行数据查询和处理。

  7. 事件和委托:理解事件和委托的使用方法,以及它们在异步编程中的应用。

  8. 线程和并行编程:了解C#中的线程模型,包括线程的创建、同步、死锁预防等,并熟悉并行编程技术如TPL(Task Parallel Library)。

  9. ASP.NET Core:如果应聘的是Web开发岗位,需要熟悉ASP.NET Core框架,包括MVC模式、Razor Pages、身份认证、依赖注入等。

  10. Entity Framework Core:了解如何在C#中使用Entity Framework Core进行数据库操作,包括模型创建、查询、数据上下文管理等。

  11. RESTful API设计:掌握设计RESTful服务的原则和实践,能够使用C#实现RESTful API。

  12. 单元测试:熟悉单元测试的概念和工具,如xUnit、NUnit或MSTest,能够编写可维护的测试代码。

  13. 设计模式:了解常用的设计模式,如单例模式、工厂模式、观察者模式等,并能够在适当的时候应用它们。

  14. 性能优化:理解性能分析的基本概念,能够识别和优化代码中的性能瓶颈。

  15. .NET Core和.NET 5/6:了解.NET Core以及它的后续版本.NET 5/6的新特性和优势,包括跨平台支持、性能改进等。

  16. 内存管理和垃圾回收:理解.NET中的内存管理机制,包括垃圾回收的工作原理和如何优化内存使用。

  17. 安全性:了解基本的Web安全和应用程序安全概念,如防止SQL注入、XSS攻击、CSRF攻击等。

  18. 软件工程实践:熟悉敏捷开发流程、版本控制(如Git)、持续集成/持续部署(CI/CD)等现代软件开发实践。

  19. 可读性和可维护性:能够编写清晰、可读性强的代码,并遵循编码标准和最佳实践。

  20. 新技术和趋势:对C#和.NET生态系统中的新技术和趋势保持好奇心和学习态度,如Blazor、MAUI等。

掌握这些知识点不仅能够帮助候选人在面试中表现出色,也是成为一名优秀C#开发者的基础。

如果喜欢请 收藏 点赞 关注,您的支持是我创作的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34132.shtml

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

相关文章

Perl编程探索:深入理解数组变量

Perl语言以其在文本处理和系统管理任务中的强大能力而受到广泛欢迎。在Perl中&#xff0c;数组是处理多个值集合的一种关键数据结构。本文将深入探讨Perl中的数组变量&#xff0c;包括它们的声明、初始化、访问和操作。 Perl数组的基本概念 在Perl中&#xff0c;数组可以用来…

FL Studio 21 集成了音频剪辑和增益控制,你可以更快、更精确地控制音频电平,包括自动交叉淡入淡出及更多功能

以通过控制色调、饱和度、亮度、文本、仪表和步进序列器的颜色来改变你的DAW外观&#xff0c; DAW“情绪主题”控制&#xff0c;水果编曲将变得与众不同。 更快的音频编辑 FL Studio 21 集成了音频剪辑包络和增益控制&#xff0c;你可以更快、更精确地控制音频电平&#xff0c…

代码随想录算法训练营第十四天| 110.平衡二叉树 | 257. 二叉树的所有路径 | 404.左叶子之和 | 222.完全二叉树的节点个数

110.平衡二叉树 &#xff08;优先掌握递归&#xff09; 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;后序遍历求高度&#xff0c;高度判断是否平衡 | LeetCode&#xff1a;110.平衡二叉树_哔哩哔哩_bilibili 1. 不知道咋做。 2. 在求二叉树的高度的代码上改&#xff…

学习面向对象前--Java基础练习题

前言 写给所有一起努力学习Java的朋友们&#xff0c;敲代码本身其实是我们梳理逻辑的一个过程。我们在学习Java代码的过程中&#xff0c;除了需要学习Java的一些基本操作及使用&#xff0c;更重要的是我们需要培养好的逻辑思维。逻辑梳理好之后&#xff0c;我们编写代码实现需要…

aws的alb,多个域名绑定多个网站实践

例如首次创建的alb负载均衡只有www.xxx.com 需要添加 负载 test2.xxx.com aws的Route 53产品解析到负载均衡 www.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx test2.xxx.com 添加CNAME&#xff0c;到负载均衡的dns字段axx 主要介绍目标组和规则 创建alb就不介…

windows系统命令设置ipv4参数(手动、自动)、设置DNS解析、命令设置计算机主机名

命令设置ipv4网络参数。 命令提示符中使用netsh命令为网络接口&#xff08;网络连接&#xff09;配置ipv4参数。命令格式如下&#xff1a; netsh interface ip set address "接口名称" static ip地址 子网掩码 [默认网关] 案例&#xff1a; 将本地 "以太网…

Spring底层原理之FactoryBean Bean工厂 单例对象 多例对象

FactoryBean 在 Spring Framework 中&#xff0c;FactoryBean 是一个用于创建其他 Bean 实例的特殊工厂 Bean。它允许开发者自定义 Bean 的创建逻辑&#xff0c;从而更加灵活地管理和配置 Bean 的实例化过程。 FactoryBean 接口 FactoryBean 接口是 Spring 框架中的一个重要…

推送电子邮箱与其他营销手段如何有效结合?

推送电子邮箱的效果如何&#xff1f;怎么优化邮件推送的策略&#xff1f; 将推送电子邮箱与其他营销手段有效结合&#xff0c;可以显著提升营销效果和用户体验。AokSend将探讨如何将推送电子邮箱与社交媒体营销、内容营销、搜索引擎优化&#xff08;SEO&#xff09;等手段相结…

ubuntu22.04安装AFLGo

git clone gitgithub.com:aflgo/aflgo.git cd aflgo export AFLGO$PWD sudo ./build.sh然后 上面的是官方流程 主要看下面 把build.sh里三个wget的先下好&#xff0c;放在对应路径&#xff0c;然后把他的注释掉&#xff0c;不然下载时间很长很长。然后下python那边容易报错&a…

ArkTS自定义组件

一、自定义组件基本结构 // 定义自定义组件 ButtonCom.ets Component export struct BtnCom{State msg: string "按钮";build() {Row(){Text(this.msg).onClick(() > {this.msg "测试"})}} } // 引入自定义组件 import {BtnCom} from "./Butto…

动物常见图像的图像分类数据集

常见动物图像分类数据集 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zZnCUZuNlX6MjuZImlDjTw?pwd03b9 提取码&#xff1a;03b9 数据集信息介绍&#xff1a; 文件夹 大象 中的图片数量: 1446 文件夹 松鼠 中的图片数量: 1862 文件夹 河马 中的图片数量:…

理解和处理不同类型的上下文的新型的语言模型ReALM

在人类的日常交流中&#xff0c;模糊的代词如“他们”或“那个”常常出现&#xff0c;它们的意义通常依赖于上下文才能明确。这种上下文的理解对于对话助手来说至关重要&#xff0c;因为它们旨在提供一种自然的交流体验。然而&#xff0c;现有的对话助手在处理这类模糊引用时往…

SAP查看接口日志

大部分SAP项目都会与其他外围系统进行集成&#xff0c;那么日常工作中&#xff0c;如果遇到接口传输问题&#xff0c;我们应该怎样查询呢&#xff1f; 也许这篇文章可以稍微解答一些基础的内容。 1、事务代码SXI_MONITOR检查接口日志&#xff1a; 执行的起止日期默认带出&…

oracle11g rac静默dbca创建实例反复报监听问题

问题 处理方法 手动创建监听程序 重新静默dbca建库

【Linux】性能分析器 gperftools 详解

1、安装 1.1 源码安装 1)源码下载 最新版本:https://github.com/gperftools/gperftools 稳定版本:https://github.com/gperftools/gperftools/releases 2)编译 ./configure make -j83)安装,默认安装在/usr/local/lib目录下 sudo make install1.2 命令安装 以Ubuntu…

LearnOpenGL - Android OpenGL ES 3.0 YUV 渲染

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

Hume AI 将无比强大的情感AI聊天机器人带到了iPhone平台免费使用

总部位于美国的Hume AI研究实验室&#xff0c;致力于开发“针对人类福祉进行优化”的系统&#xff0c;最近推出了其EVI平台的iOS应用版本——名为Hume&#xff1a;您的个人人工智能。 这款新产品包括名为Kora的新型AI语音&#xff0c;以及对热门新Claude 3.5 Sonnet LLM的支持…

第9章:软件可靠性基础知识

随着软件复杂度的增加&#xff0c;软件设计的正确性验证成本也越来越高。可靠和可信的计算模型首先在军事和高要求的商业系统中开始研究&#xff0c;可靠性和其他质量属性一样是衡量软件架构的重要指标。实践证明&#xff0c;保障软件可靠性最有效、最经济、最重要的手段是在软…

2024.6.25力扣刷题记录-周赛403

目录 一、3194. 最小元素和最大元素的最小平均值 二、3195. 包含所有 1 的最小矩形面积 I 三、3196. 最大化子数组的总成本 四、3197. 包含所有 1 的最小矩形面积 II 博主在比赛时只过了前两题。剩下跟着灵神做&#xff0c;来自视频&#xff1a; 【状态机 DP【力扣周赛 403…

Deepl网页版使用方法

Deepl网页版科学使用方法 Deepl 网页版使用方法重要链接使用方式一、在没有使用插件前的Deepl界面二、安装DeepL.Crack.v1.2.7插件三、插件安装后打开[Deepl官网](https://www.deepl.com/zh/translator)即可四、在翻译整篇文章的权限怎么设置 Deepl 网页版使用方法 重要链接 …