【面试系列】C#高频面试题
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:
⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。
文章目录
- C# 初级面试题及详细解答
- 1. C#中的值类型和引用类型的区别是什么?
- 2. 如何在 C# 中定义一个类和对象?
- 3. 什么是属性 (Property),如何定义和使用它?
- 4. 解释 C# 中的继承 (Inheritance)。
- 5. 什么是接口 (Interface),如何在 C# 中定义和实现它?
- 6. 什么是抽象类 (Abstract Class)?
- 7. 解释 C# 中的多态性 (Polymorphism)。
- 8. C# 中的静态成员和实例成员有什么区别?
- 9. 如何在 C# 中处理异常?
- 10. 解释 C# 中的事件 (Event) 和委托 (Delegate)。
- C# 中级面试题及详细解答
- 1. 解释 C# 中的扩展方法 (Extension Method)。
- 2. 什么是 LINQ,列举一些常用的 LINQ 查询操作符。
- 3. 解释 C# 中的委托 (Delegate) 和事件 (Event) 的区别。
- 4. 什么是异步编程,如何在 C# 中实现异步编程?
- 5. 解释 C# 中的装箱 (Boxing) 和拆箱 (Unboxing)。
- 6. 解释 C# 中的异常过滤器 (Exception Filter)。
- 7. 什么是 C# 中的自定义特性 (Attribute),如何定义和使用它?
- 8. 如何在 C# 中使用委托 (Delegate) 实现事件驱动编程?
- 9. 解释 C# 中的依赖注入 (Dependency Injection)。
- 10. 什么是 .NET Core 中的中间件 (Middleware)?
- C# 高级面试题及详细解答
- 1. 解释 C# 中的内存管理机制,特别是垃圾回收机制。
- 2. 如何在 C# 中实现多线程和并行编程?比较Thread和Task的异同。
- 3. 什么是 C# 中的异步编程模型 (Asynchronous Programming Model)?
- 4. 解释 C# 中的依赖注入 (Dependency Injection) 及其实现方式。
- 5. 解释 C# 中的并发集合 (Concurrent Collections) 及其适用场景。
- 6. 解释 C# 中的委托 (Delegate) 和表达式树 (Expression Trees) 的区别。
- 7. 解释 C# 中的反射 (Reflection) 及其应用场景。
- 8. 解释 C# 中的垃圾回收机制,如何优化内存管理?
- 9. 解释 C# 中的线程同步机制及其实现方式。
- 10. 解释 C# 中的动态类型 (Dynamic Type) 及其使用场景。
- 总结
C# 初级面试题及详细解答
1. C#中的值类型和引用类型的区别是什么?
解答: 值类型存储在堆栈上,直接包含数据;引用类型存储在堆上,存储的是对象的引用。值类型包括基本类型如 int、float 和 struct;引用类型包括 class、interface、delegate 和 array。
2. 如何在 C# 中定义一个类和对象?
解答: 使用 class 关键字定义类,通过 new 关键字创建对象。例如:
class Person {public string Name { get; set; }
}Person person = new Person();
person.Name = "John";
3. 什么是属性 (Property),如何定义和使用它?
解答: 属性是类的成员,用于提供对字段的读写访问。使用 get 和 set 访问器定义。例如:
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) 是一种查询语言,提供对集合(如数组、列表和数据库)进行查询的统一方式。常用的操作符包括 Where、Select、OrderBy、GroupBy、Join 和 Sum。例如:
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# 中的 async 和 await 关键字用于实现异步编程。示例如下:
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的异同。
解答: 多线程可通过 Thread 和 Task 实现。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# 中通过 async 和 await 关键字实现,旨在提高应用程序的响应性和性能。异步方法返回 Task 或 Task<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) 及其适用场景。
解答: 并发集合在多线程环境下提供安全的集合操作,避免锁机制带来的复杂性和性能开销。常用的并发集合有 ConcurrentDictionary、ConcurrentQueue、ConcurrentStack、ConcurrentBag 等。适用于高并发访问的场景,例如任务队列、线程池等。例如:
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# 中常用的同步机制包括 lock、Monitor、Mutex、Semaphore 和 AutoResetEvent。lock 关键字是常用的同步方法,用于简化 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#面试中,候选人需要掌握以下关键知识点:
-
C#基础语法:熟悉C#的基本语法结构,包括变量声明、数据类型、控制流语句(if、switch、loops)等。
-
面向对象编程(OOP):理解面向对象的核心概念,如封装、继承、多态和抽象。能够设计和实现类和对象。
-
集合框架:熟悉.NET的集合框架,包括常用的集合类型如List、Dictionary<T,K>、HashSet等,以及它们的性能特点和适用场景。
-
异常处理:掌握try、catch、finally块的使用,以及如何自定义异常。
-
泛型:理解泛型的概念和用途,能够使用泛型来创建类型安全的数据结构。
-
LINQ:熟悉语言集成查询(LINQ),能够使用LINQ进行数据查询和处理。
-
事件和委托:理解事件和委托的使用方法,以及它们在异步编程中的应用。
-
线程和并行编程:了解C#中的线程模型,包括线程的创建、同步、死锁预防等,并熟悉并行编程技术如TPL(Task Parallel Library)。
-
ASP.NET Core:如果应聘的是Web开发岗位,需要熟悉ASP.NET Core框架,包括MVC模式、Razor Pages、身份认证、依赖注入等。
-
Entity Framework Core:了解如何在C#中使用Entity Framework Core进行数据库操作,包括模型创建、查询、数据上下文管理等。
-
RESTful API设计:掌握设计RESTful服务的原则和实践,能够使用C#实现RESTful API。
-
单元测试:熟悉单元测试的概念和工具,如xUnit、NUnit或MSTest,能够编写可维护的测试代码。
-
设计模式:了解常用的设计模式,如单例模式、工厂模式、观察者模式等,并能够在适当的时候应用它们。
-
性能优化:理解性能分析的基本概念,能够识别和优化代码中的性能瓶颈。
-
.NET Core和.NET 5/6:了解.NET Core以及它的后续版本.NET 5/6的新特性和优势,包括跨平台支持、性能改进等。
-
内存管理和垃圾回收:理解.NET中的内存管理机制,包括垃圾回收的工作原理和如何优化内存使用。
-
安全性:了解基本的Web安全和应用程序安全概念,如防止SQL注入、XSS攻击、CSRF攻击等。
-
软件工程实践:熟悉敏捷开发流程、版本控制(如Git)、持续集成/持续部署(CI/CD)等现代软件开发实践。
-
可读性和可维护性:能够编写清晰、可读性强的代码,并遵循编码标准和最佳实践。
-
新技术和趋势:对C#和.NET生态系统中的新技术和趋势保持好奇心和学习态度,如Blazor、MAUI等。
掌握这些知识点不仅能够帮助候选人在面试中表现出色,也是成为一名优秀C#开发者的基础。
💗💗💗 如果觉得这篇文对您有帮助,请给个点赞、关注、收藏吧,谢谢!💗💗💗
相关文章:
【面试系列】C#高频面试题
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…...
AI助力校园安全:EasyCVR视频智能技术在校园欺凌中的应用
一、背景分析 近年来,各地深入开展中小学生欺凌行为治理工作,但有的地方学生欺凌事件仍时有发生,严重损害学生身心健康,引发社会广泛关注。为此,教育部制定了《防范中小学生欺凌专项治理行动工作方案》进一步防范和遏…...
Yolov8可视化界面使用说明,含代码
⭐⭐ YOLOv8改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ⭐⭐ YOLOv8可视化界面如下 使用需要安装opencv-python、torch、numpy及PySide6(python版本>3.9) pip install PySide6 pip install numpy pip install opencv-python 使用说明 运行下方代码…...
怎么使用MarkDown画矩阵
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 今天写文章需要用到矩阵,记录一下 画矩阵需要用到特殊的语法 (1)画普通矩阵,不带括号的 $$be…...
Kafka入门-基础概念及参数
一、Kafka术语 1. Broker Kafka属于分布式的消息引擎系统,它的主要功能是提供一套完备的消息发布与订阅解决方案。可以为每个业务、每个应用甚至是每类数据都创建专属的主题。 Kafka的服务器端由被称为Broker的服务进程构成,即一个Kafka集群由多个Broke…...
Clickhouse 常见操作
数据查询 从json array string中解析字段 json array string 为json.dumps(array(dict)) select JSONExtractString(row,"Date") as Date from( select arrayJoin(JSONExtractArrayRaw(Remarks)) as row from table x )JSONExtractArrayRaw: 将JsonS…...
Docker使用daocloud镜像加速
之前给大家分享的阿里云的镜像加速,今天再给大家分享一个还可以使用的镜像加速地址daocloud。 经过测试速度还是比较快的。 [rootbogon ~]# cat /etc/docker/daemon.json {"registry-mirrors": ["https://docker.m.daocloud.io"] }[rootbogon…...
flink的窗口
目录 窗口分类 1.按照驱动类型分类 1. 时间窗口(Time window) 2.计数窗口(Count window) 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器: 窗口函数 增量聚合函数: 全窗口函数…...
lodash.js 工具库
lodash 是什么? Lodash是一个流行的JavaScript实用工具库,提供了许多高效、高兼容性的工具函数,能够方便地处理集合、字符串、数值、函数等多种数据类型,大大提高工作效率。 lodash官网 文档参见:Lodash Documentation lodash 在Vue中怎么使用? 1、首先安装 lodash np…...
使用ElementUI组件库
引入ElementUI组件库 1.安装插件 npm i element-ui -S 2.引入组件库 import ElementUI from element-ui; 3.引入全部样式 import element-ui/lib/theme-chalk/index.css; 4.使用 Vue.use(ElementUI); 5.在官网寻找所需样式 饿了么组件官网 我这里以button为例 6.在组件中使用…...
【SkiaSharp绘图14】SKCanvas方法详解(三)URL注释、按顶点绘制、 是否裁切区域之外、旋转、缩放、倾斜、平移、保存/恢复画布
文章目录 SKCanvas方法DrawUrlAnnotation 绘制URL注释DrawVertices 按顶点绘制Flush 立即绘制QuickReject 判断区域是否在裁切区域之外ResetMatrix重置矩阵Restore、RestoreToCountRotateDegrees按角度旋转画布RotateRadians按弧度旋转画布SaveLayer保存并新建图层Scale 缩放画…...
WebDriver API (2)
本文将继续上文对WebDriver API的功能使用进行介绍。 一、浏览器操作 1. 浏览器前进forward与后退back 浏览器前进操作是指导航到前一个页面,在浏览器的历史记录中向前移动一页。 浏览器后退操作是指导航到前一个页面,在浏览器的历史记录中向后移动一…...
GCP FrontendConfig 详解:优化您的云负载均衡
目录 1. 什么是GCP FrontendConfig? 2. FrontendConfig的主要功能 2.1 协议选择 2.2 SSL/TLS配置 2.3 重定向配置 2.4 自定义响应头 3. 配置FrontendConfig 4. FrontendConfig的高级特性 4.1 智能路由 4.2 流量控制 4.3 日志和监控 5. FrontendConfig最佳实践 5.…...
TensorFlow代码逻辑 vs PyTorch代码逻辑
文章目录 一、TensorFlow(一)导入必要的库(二)加载MNIST数据集(三)数据预处理(四)构建神经网络模型(五)编译模型(六)训练模型…...
boost asio异步服务器(4)处理粘包
粘包的产生 当客户端发送多个数据包给服务器时,服务器底层的tcp接收缓冲区收到的数据为粘连在一起的。这种情况的产生通常是服务器端处理数据的速率不如客户端的发送速率的情况。比如:客户端1s内连续发送了两个hello world!,服务器过了2s才接…...
【QT】常用控件|widget|QPushButton|RadioButton|核心属性
目录 编辑 概念 信号与槽机制 控件的多样性和定制性 核心属性 enabled geometry 编辑 windowTiltle windowIcon toolTip styleSheet PushButton RadioButton 概念 QT 控件是构成图形用户界面(GUI)的基础组件,它们是实现与…...
【C++ Primer Plus学习记录】函数参数和按值传递
函数可以有多个参数。在调用函数时,只需使用都逗号将这些参数分开即可: n_chars(R,25); 上述函数调用将两个参数传递给函数n_chars(),我们将稍后定义该函数。 同样,在定义函数时,也在函数头中使用由逗号分隔的参数声…...
MySQL:设计数据库与操作
设计数据库 1. 数据建模1.1 概念模型1.2 逻辑模型1.3 实体模型主键外键外键约束 2. 标准化2.1 第一范式2.2 链接表2.3 第二范式2.4 第三范式 3. 数据库模型修改3.1 模型的正向工程3.2 同步数据库模型3.3 模型的逆向工程3.4 实际应用建议 4. 数据库实体模型4.1 创建和删除数据库…...
OBS 免费的录屏软件
一、下载 obs 【OBS】OBS Studio 的安装、参数设置和录屏、摄像头使用教程-CSDN博客 二、使用 obs & 输出无黑屏 【OBS任意指定区域录屏的方法-哔哩哔哩】 https://b23.tv/aM0hj8A OBS任意指定区域录屏的方法_哔哩哔哩_bilibili 步骤: 1)获取区域…...
uniapp微信小程序使用xr加载模型
1.在根目录与pages同级创建如下目录结构和文件: // index.js Component({properties: {modelPath: { // vue页面传过来的模型type: String,value: }},data: {},methods: {} }) { // index.json"component": true,"renderer": "xr-frame&q…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
构建Docker镜像的Dockerfile文件详解
文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...
【字节拥抱开源】字节团队开源视频模型 ContentV: 有限算力下的视频生成模型高效训练
本项目提出了ContentV框架,通过三项关键创新高效加速基于DiT的视频生成模型训练: 极简架构设计,最大化复用预训练图像生成模型进行视频合成系统化的多阶段训练策略,利用流匹配技术提升效率经济高效的人类反馈强化学习框架&#x…...
【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
目录 0.背景 1.解决思路 2.详细代码 0.背景 实际项目中遇到的问题,描述如下: 我在qtdesigner用界面拖了一个QTableView控件,object name为【tableView_electrode】,然后【提升为】了自定义的类【Steer_Electrode_Table】&…...
