做个一套C#面试题
1.int long float double 分别是几个字节
左到右范围从小到大:byte->short->int->long->float->double
各自所占字节大小:1字节、2字节、4字节、8字节、4字节、8字节
2.System.Object四个公共方法的申明
namespace System
{//// 摘要:// Supports all classes in the .NET class hierarchy and provides low-level services// to derived classes. This is the ultimate base class of all .NET classes; it is// the root of the type hierarchy.public class Object{//// 摘要:// Initializes a new instance of the System.Object class.public Object();//// 摘要:// Allows an object to try to free resources and perform other cleanup operations// before it is reclaimed by garbage collection.~Object();//// 摘要:// Determines whether the specified object instances are considered equal.//// 参数:// objA:// The first object to compare.//// objB:// The second object to compare.//// 返回结果:// true if the objects are considered equal; otherwise, false. If both objA and// objB are null, the method returns true.public static bool Equals(Object? objA, Object? objB);//// 摘要:// Determines whether the specified System.Object instances are the same instance.//// 参数:// objA:// The first object to compare.//// objB:// The second object to compare.//// 返回结果:// true if objA is the same instance as objB or if both are null; otherwise, false.public static bool ReferenceEquals(Object? objA, Object? objB);//// 摘要:// Determines whether the specified object is equal to the current object.//// 参数:// obj:// The object to compare with the current object.//// 返回结果:// true if the specified object is equal to the current object; otherwise, false.public virtual bool Equals(Object? obj);//// 摘要:// Serves as the default hash function.//// 返回结果:// A hash code for the current object.public virtual int GetHashCode();//// 摘要:// Gets the System.Type of the current instance.//// 返回结果:// The exact runtime type of the current instance.public Type GetType();//// 摘要:// Returns a string that represents the current object.//// 返回结果:// A string that represents the current object.public virtual string? ToString();//// 摘要:// Creates a shallow copy of the current System.Object.//// 返回结果:// A shallow copy of the current System.Object.protected Object MemberwiseClone();}
}
3.自定义类型在什么情况下需要override Equals函数?为什么往往需要同时Override GetHashCode函数
在以下情况下,自定义类型需要重写 Equals 函数:
需要重写 Equals 的情况
值相等逻辑:当你需要定义两个对象的“值相等”逻辑,而不仅仅是引用相等(即默认情况下的相等)。
例如,在比较两个包含相同数据但不同引用的对象时,它们应该被认为是相等的。
集合操作:当你的对象将用于集合(如哈希表、字典、哈希集)中,需要基于值进行比较和操作时。
例如,想要在集合中避免重复对象,或者根据对象值进行查找。
为什么需要同时重写 GetHashCode
重写 Equals 时,通常也需要重写 GetHashCode,原因如下:
哈希表一致性:如果两个对象根据 Equals 方法被认为是相等的,那么它们的哈希码也必须相等,以确保在基于哈希的集合(如哈希表、字典、哈希集)中能够正确工作。
如果 Equals 返回 true,但 GetHashCode 返回不同的值,会导致哈希集合操作(如查找、插入)出现错误。
集合性能:哈希码用于快速查找集合中的对象。一个好的哈希函数能均匀地分布对象,从而提高集合操作的性能。
示例代码
下面是一个自定义类型的示例,它重写了 Equals 和 GetHashCode 方法:
public class Person
{public string FirstName { get; set; }public string LastName { get; set; }public int Age { get; set; }public override bool Equals(object obj){if (obj == null || GetType() != obj.GetType()){return false;}Person other = (Person)obj;return FirstName == other.FirstName && LastName == other.LastName && Age == other.Age;}public override int GetHashCode(){// 使用简单的哈希算法结合字段生成哈希码return HashCode.Combine(FirstName, LastName, Age);}
}
注意事项
一致性:Equals 和 GetHashCode 方法必须一致。即,如果两个对象是相等的 (Equals 返回 true),它们必须具有相同的哈希码 (GetHashCode 返回相同的值)。
不可变性:尽量保持对象的不可变性(不可变对象),以确保在其生命周期内哈希码不会改变。如果对象的状态变化会导致 Equals 和 GetHashCode 结果变化,可能会导致集合中的一致性问题。
通过重写 Equals 和 GetHashCode,可以确保自定义类型在各种集合操作和比较中能够正确工作
4.下面的代码等效于什么?
using(var a=new MyClasse())
{
doing...
}
using
语句用于确保在代码块执行完毕后正确释放资源。如下所示:
MyClasse a = null;
try
{a = new MyClasse();// doing...
}
finally
{if (a != null){a.Dispose();}
}
这种方式确保了即使在发生异常的情况下,也会调用 Dispose
方法来释放资源。
5.值类型与引用类型的内存分配及GC回收时的区别
值类型和引用类型在内存分配和垃圾回收(GC)方面有明显区别:
值类型
内存分配:
值类型通常在栈上分配内存(除非它们是其他对象的一部分,如数组或类的成员)。
分配和释放非常快速,因为栈是按顺序分配和释放内存的。
生命周期:
值类型的生命周期与其作用域紧密相关,当它们超出作用域时,内存自动释放。
引用类型
内存分配:
引用类型在堆上分配内存。
堆内存分配较为复杂,可能导致内存碎片化。
生命周期:
引用类型的对象在不再被引用时不会立即释放。
需要垃圾回收器(GC)来检测和回收不再使用的对象。
GC回收
值类型:
通常不需要GC,因为值类型在栈上分配,超出作用域后自动释放。
引用类型:
GC会在堆上检测不再使用的对象并回收内存。
GC分代机制:
第0代:新分配的对象。
第1代:从第0代晋升的对象,存活时间较长。
第2代:长期存活的对象。
GC回收分为几代以优化性能,常用的策略包括标记-清除、标记-压缩、复制算法。
总结:
值类型在栈上分配,生命周期由作用域决定,通常不需要GC。
引用类型在堆上分配,生命周期由引用计数决定,需要GC来管理内存。
6.函数传递中值类型及引用类型的区别
在函数传递中,值类型和引用类型的区别主要体现在参数传递方式及其对原始数据的影响上。
值类型传递
传递方式:值类型参数是按值传递的。调用方法时,会将参数的副本传递给方法。
影响:在方法内部对参数的任何修改不会影响原始数据。
public void ModifyValue(int x)
{x = 10;
}int originalValue = 5;
ModifyValue(originalValue);
Console.WriteLine(originalValue); // 输出:5
在这个例子中,originalValue的值不会受到ModifyValue方法中对x的修改影响,因为传递的是originalValue的副本。
引用类型传递
传递方式:引用类型参数是按引用传递的。调用方法时,会将对象的引用传递给方法,而不是对象的副本。
影响:在方法内部对参数的修改会影响原始对象。
public void ModifyReference(MyClass obj)
{obj.Value = 10;
}public class MyClass
{public int Value { get; set; }
}MyClass originalObject = new MyClass();
originalObject.Value = 5;
ModifyReference(originalObject);
Console.WriteLine(originalObject.Value); // 输出:10
在这个例子中,originalObject
的Value
属性会受到ModifyReference
方法中对obj
的修改影响,因为传递的是originalObject
的引用。
public void ModifyValue(ref int x)
{x = 10;
}int originalValue = 5;
ModifyValue(ref originalValue);
Console.WriteLine(originalValue); // 输出:10
out 关键字:类似于ref,但通常用于方法需要返回多个值的情况,且参数在传入方法前不需要初始化。
示例:
public void InitializeValue(out int x)
{x = 10;
}int originalValue;
InitializeValue(out originalValue);
Console.WriteLine(originalValue); // 输出:10
总结
值类型:按值传递,传递副本,方法内部修改不影响原始数据。
引用类型:按引用传递,传递引用,方法内部修改影响原始对象。
ref 和 out:可以使值类型按引用传递,使方法内部修改影响原始数据。
7.说明一些特性Attribute是什么?如何使用自定义的Attribute?
什么是特性(Attribute)
特性(Attribute)是 .NET 中用于向程序元素(如类、方法、属性等)添加元数据的一种方法。特性在运行时可以通过反射机制获取,用于提供关于程序元素的额外信息,控制程序行为,或为工具提供指示。
常见的内置特性
[Obsolete]:标记某个程序元素为过时。
[Serializable]:标记某个类可以序列化。
[DllImport]:用于引入外部的非托管代码。
[TestMethod]:在单元测试框架中标记一个方法为测试方法。
如何使用自定义特性
定义自定义特性: 自定义特性需要继承自 System.Attribute 类。可以为特性添加构造函数和属性来传递数据。
应用自定义特性: 将自定义特性应用到目标程序元素上。
通过反射读取特性: 在运行时使用反射来获取和处理这些特性。
示例
1. 定义自定义特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{public string Description { get; }public int Version { get; }public MyCustomAttribute(string description, int version){Description = description;Version = version;}
}
2. 应用自定义特性
[MyCustomAttribute("This is a sample class", 1)]
public class SampleClass
{[MyCustomAttribute("This is a sample method", 2)]public void SampleMethod(){// Method implementation}
}
3. 通过反射读取特性
using System;
using System.Reflection;public class Program
{public static void Main(){Type type = typeof(SampleClass);// 获取类上的自定义特性object[] classAttributes = type.GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attr in classAttributes){Console.WriteLine($"Class Attribute - Description: {attr.Description}, Version: {attr.Version}");}// 获取方法上的自定义特性MethodInfo method = type.GetMethod("SampleMethod");object[] methodAttributes = method.GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attr in methodAttributes){Console.WriteLine($"Method Attribute - Description: {attr.Description}, Version: {attr.Version}");}}
}
总结
定义自定义特性:通过继承 System.Attribute 并定义构造函数和属性。
应用自定义特性:将特性应用到类、方法或其他程序元素上。
读取自定义特性:通过反射获取特性并处理其中包含的信息。
使用自定义特性可以为代码添加额外的语义信息,便于维护和工具化操作。
8.String类与StringBuilder类有什么区别?请说明一些什么场景下字符串拼接需要StringBuilder?
String 类和 StringBuilder 类都是 .NET 中用于处理字符串的类,但它们在实现和使用场景上有显著的区别。
String 类
不可变性:String 对象是不可变的。一旦创建,字符串的值就无法更改。任何对字符串进行操作的方法都会创建一个新的字符串对象。
内存和性能:由于不可变性,频繁的字符串操作(如拼接、插入、删除)会导致大量临时对象的创建和垃圾回收,进而影响性能。
StringBuilder 类
可变性:StringBuilder 对象是可变的。它允许在不创建新对象的情况下修改内容,如追加、插入、删除等。
内存和性能:StringBuilder 在进行大量字符串操作时表现出更高的性能,因为它避免了创建大量临时对象。
使用场景
使用 String 的场景
字符串内容较少或字符串操作不频繁的情况下。
需要线程安全的操作,因为 String 是不可变的,因此本质上是线程安全的。
使用 StringBuilder 的场景
需要进行大量字符串拼接或频繁的字符串操作时,例如在循环中构建字符串内容。
对性能要求较高的情况下,避免大量临时对象的创建和垃圾回收。
示例代码
使用 String
public string ConcatenateWithString()
{string result = "Start";for (int i = 0; i < 1000; i++){result += i.ToString();}return result;
}
上述代码中,每次循环都会创建一个新的字符串对象,导致性能较低。
使用 StringBuilder
using System.Text;public string ConcatenateWithStringBuilder()
{StringBuilder sb = new StringBuilder("Start");for (int i = 0; i < 1000; i++){sb.Append(i);}return sb.ToString();
}
上述代码中,StringBuilder 对象在循环中不断地追加字符串,而不会创建新的对象,因此性能较高。
总结
String:适用于少量字符串操作和需要线程安全的场景。
StringBuilder:适用于大量字符串操作和对性能要求较高的场景。
在实际开发中,选择 String 还是 StringBuilder 需要根据具体情况进行权衡。如果操作次数较少且对性能影响不大,使用 String 更加直观和简单;而在需要频繁修改字符串内容的场景下,StringBuilder 则是更好的选择。
9.委托与事件
委托和事件是 .NET 中用于处理方法调用和事件通知的机制。它们有许多相似之处,但也有重要的区别。下面是关于委托和事件的详细说明。
委托
定义
委托是一种类型安全的函数指针,允许你将方法作为参数传递。委托可以指向一个或多个方法,并在需要时调用这些方法。
示例
// 定义一个委托类型
public delegate void MyDelegate(string message);public class DelegateExample
{// 定义一个方法,符合委托类型public void DisplayMessage(string message){Console.WriteLine(message);}public void TestDelegate(){// 创建委托实例并绑定方法MyDelegate del = DisplayMessage;// 调用委托del("Hello, Delegates!");}
}
特性
可以指向一个或多个方法(多播委托)。
可以作为参数传递给方法,或者从方法返回。
允许灵活地调用方法。
事件
定义
事件是委托的封装,用于实现发布/订阅模式。事件提供了一种安全的方式,允许对象向其他对象通知状态的变化,而不需要这些对象之间有紧密耦合。
示例
// 定义一个委托类型,用于事件处理程序
public delegate void MyEventHandler(object sender, EventArgs e);public class EventExample
{// 定义一个事件public event MyEventHandler MyEvent;// 触发事件的方法protected virtual void OnMyEvent(EventArgs e){if (MyEvent != null){MyEvent(this, e);}}public void TestEvent(){// 订阅事件MyEvent += EventHandlerMethod;// 触发事件OnMyEvent(EventArgs.Empty);}// 事件处理方法private void EventHandlerMethod(object sender, EventArgs e){Console.WriteLine("Event triggered!");}
}
特性
封装委托,提供更安全和受控制的方法来处理事件通知。
只能在定义事件的类或结构内部触发(调用)。
提供了发布/订阅模式,允许对象订阅感兴趣的事件。
委托和事件的区别
定义和使用:
委托:可以直接调用和赋值,灵活性较高。
事件:基于委托,提供了更严格的访问控制,通常用来通知状态变化。
访问控制:
委托:任何类都可以调用委托。
事件:只能在声明事件的类或结构内部触发,外部只能订阅(+=)或取消订阅(-=)。
应用场景:
委托:适用于需要将方法作为参数传递的场景,或需要多播委托的场景。
事件:适用于发布/订阅模式,需要通知多个订阅者状态变化的场景。
选择使用
委托:当你需要将方法作为参数传递,或需要一个函数指针来调用多个方法时,使用委托。
事件:当你需要实现观察者模式,需要一个对象通知其他对象状态变化时,使用事件。
通过了解委托和事件的区别和使用场景,可以更好地设计和实现灵活、可扩展的应用程序。
10装箱和拆箱以及它对程序的性能有什么影响以及怎样避免装箱和拆箱
装箱和拆箱是 .NET 中值类型和引用类型之间的转换过程。理解它们对程序性能的影响非常重要。
装箱(Boxing)
定义:将值类型转换为引用类型的过程。具体来说,是将一个值类型的值封装在一个 System.Object 类型或其他接口类型的实例中。
过程:在堆上分配内存,并将值类型的值复制到新分配的对象中。
示例:
int value = 123;
object boxedValue = value; // 装箱
拆箱(Unboxing)
定义:将引用类型转换回值类型的过程。具体来说,是从对象中提取值类型的值。
过程:从堆上的对象中提取值类型的值,并将其复制到栈上。
示例:
object boxedValue = 123;
int value = (int)boxedValue; // 拆箱
对性能的影响
内存分配:装箱会在堆上分配内存,增加垃圾回收的负担。频繁的装箱和拆箱会导致内存碎片化,增加垃圾回收器的工作量。
性能开销:装箱和拆箱涉及内存分配和复制操作,这些操作是耗时的。频繁的装箱和拆箱会显著降低程序的性能。
如何避免装箱和拆箱
使用泛型:泛型可以避免装箱和拆箱,因为它们在编译时确定类型,而不是在运行时。
示例:
List<int> list = new List<int>(); // 使用泛型集合避免装箱
list.Add(123);
避免将值类型存储在 object 或接口类型的变量中:尽量避免将值类型赋值给 object 类型或接口类型的变量。
示例:
int value = 123;
// object obj = value; // 避免这样做
使用适当的集合类型:使用专门处理值类型的集合,例如 List<T>、Dictionary<TKey, TValue> 等,而不是非泛型集合如 ArrayList。
示例:
ArrayList arrayList = new ArrayList();
// arrayList.Add(123); // 避免这样做List<int> list = new List<int>();
list.Add(123); // 使用泛型集合
使用 struct 而不是 class:在定义需要频繁分配和释放的对象时,可以考虑使用 struct 而不是 class,以减少装箱和拆箱的需求。
示例:
struct MyStruct
{public int Value;
}MyStruct myStruct = new MyStruct();
myStruct.Value = 123;
总结
装箱:值类型转换为引用类型,会在堆上分配内存,增加垃圾回收负担。
拆箱:引用类型转换为值类型,从堆中提取值类型的值。
性能影响:装箱和拆箱会导致内存分配和复制操作,频繁的装箱和拆箱会显著降低程序性能。
避免方法:使用泛型、避免将值类型存储在 object 或接口类型中、使用适当的集合类型、考虑使用 struct。
通过理解和避免不必要的装箱和拆箱,可以显著提高程序的性能和效率。
11单例模式的应用场景并实现一个单例模式,Singleton非静态类
单例模式用于确保一个类只有一个实例,并提供全局访问点。常见应用场景包括:
- 配置管理类:如数据库配置、日志管理器等。
- 资源访问类:如文件系统访问、网络连接等。
- 全局缓存:如应用程序缓存、线程池等。
实现一个非静态类的单例模式:
public class Singleton {// 私有静态实例,防止被直接访问private static Singleton instance;// 私有构造方法,防止被实例化private Singleton() {}// 公有静态方法,返回唯一实例public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}// 其他方法public void doSomething() {// 实现功能}
}
12.此截图中的结果
相关文章:

做个一套C#面试题
1.int long float double 分别是几个字节 左到右范围从小到大:byte->short->int->long->float->double 各自所占字节大小:1字节、2字节、4字节、8字节、4字节、8字节 2.System.Object四个公共方法的申明 namespace System {//// 摘要…...

【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点
Pre-trained Language Models及其各种微调模型的实现细节和特点 1. Pre-trained Language Models2. semi-supervised Learning3. zero-shot4. Parameter-Efficient Fine-Tuning4.1 含义:4.2 实现方式: 5. LoRA5.1 LoRA 的主要特点:5.2 LoRA 的…...
YARN单机和集群环境部署教程
目录 一、YARN 单机环境部署1. 环境准备2. 安装 Java3. 下载并安装 Hadoop4. 配置环境变量5. 配置 Hadoop配置 hadoop-env.sh配置 core-site.xml配置 hdfs-site.xml配置 yarn-site.xml配置 mapred-site.xml 6. 格式化 HDFS7. 启动 Hadoop 和 YARN8. 验证 YARN9. 运行一个简单的…...
Android SurfaceFlinger——Vsync信号发送(五十二)
通过上一篇文章我们创建了一个 EventThread 线程,并且它持有了 SurfaceFlinger 中 resyncWithRateLimit() 方法的指针。这里我们主要来看一下 EventThread 对信号的处理。 一、发送Vsync信号 当 SurfaceFlinger 执行完 queueBuffer() 方法之后,通过 onFrameAvailable 又会回…...

零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页
简介: 小李哥从今天开始将开启全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,让大家0基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构。 我将每天介绍一个基于亚马逊云…...

YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式
作者:CSDN _养乐多_ 本文将介绍如何使用 labelme 进行图片数据标签制作的方法,并将标签的格式从 JSON 格式转换为 YOLO 格式。 文章目录 一、安装labelme二、使用流程三、json格式转为YOLO格式四、按比例划分数据集(训练、验证、测试&#…...

论文解读(15)-UrbanGPT
加油,这一篇也是感受一下大语言模型的力量! 原文: UrbanGPT: Spatio-Temporal Large Language Models UrbanGPT: Spatio-Temporal Large Language Models (arxiv.org) 参考: 时空预测与大语言模型的奇妙碰撞!UrbanG…...

大数据湖体系规划与建设方案(51页PPT)
方案介绍: 大数据湖通过集中存储各种类型的数据(包括结构化、半结构化和非结构化数据),提供了更加灵活、可扩展的数据处理和分析能力。其核心理念是“存储一切,分析一切,创建所需”,即将所有数…...

8月最新ChatGPT系统源码SparkAi系统,支持AI换脸+智能体GPTs应用+AI绘画+AI视频+文档分析
一、文章序言 人工智能技术正在快速发展,AI语言模型、AI绘画和AI视频已经在多个领域得到了广泛应用。这些技术不仅在科技创新方面表现出色,还在艺术创作、内容生产和商业应用中展示出巨大的潜力。 SparkAi创作系统是一款基于ChatGPT和Midjourney开发的…...
Linux知识复习第3期
目录 网络管理 (1)查看IP信息: (2)配置临时生效的网络连接 (3)修改配置文件配置网络连接(network服务) (4)shell脚本批量IP设置 网络管理 Linux网络管理-CSDN博客 (1)查看IP信息: route -n ip addr (2)配置临时生效的网络连接 ip -4…...

【独家原创】基于NRBO-Transformer多特征分类预测【24年新算法】 (多输入单输出)Matlab代码
【独家原创】NRBO-Transformer分类 Matlab代码 基于牛顿拉夫逊优化算法优化Transformer的数据分类预测,Matlab代码,可直接运行,适合小白新手 NRBO优化的超参数为:自注意力机制中的头数、正则化系数、初始化学习率 1.程序已经调试…...
Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released
Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released 一、重大改变基于Kafka3.8构建 二、新功能和改进JDBC SinkDebezium ServerGoogle SpannerVitess Debezium 3.0.0.Alpha2 版本包含许多新功能和改进,包括基于 Kafka 3.8 构建、JDBC 接收器连接器的…...

SumatraPDF暗黑模式以及如何还原快捷键
快捷键 英文输入模式下直接按 i 即可反色 添加标注 选中文字,右键...
LeetCode Medium|【300. 最长递增子序列】
力扣题目链接 本题有一个简单的解法是动态规划,时间复杂度 O(n^2),笔者在之前曾做过相关记录:300.最长递增子序列 现在我们来讨论 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))的解法 局部最优:如果我们希望上升子序列尽可能的长&a…...

jenkins自动化构建docker镜像并上传至harbor仓库
1、插件下载 首先进入jenkins之后需要现在“Maven”、“GitLab”、“Jdk”、“SSH”、“Git”的相关插件,这里不再赘述,需要什么插件直接安装即可 搜索对应插件后选择直接安装即可 2、系统全局配置 2.1 Maven配置 配置maven安装的相应的setting文件 …...
Java高级Day23-HashMap
74.HashMap Map接口常用实现类:HashMap、Hashtable和Properties HashMap是Map接口使用频率最高的实现类 HashMap是以key-value对的方式来存储数据 key不能重复,但是值可以重复,允许使用null健和null值 如果添加相同的key,会覆…...

【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)
第四届电气工程与计算机技术国际学术会议(ICEECT2024) 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举…...
Spring boot tomcat使用自定义线程池监控线程数量告警
Spring boot tocmat 使用自定义线程池 线程池 接近最大线程数量 警戒值告警 修改tomcat线程池中线程名字 配置文件上代码 server:port: 9898servlet:context-path: /testtomcat:connection-timeout: 5000max-connections: 5accept-count: 5 tomcat_thread_max_number_warn:…...
K8S子节点加入主节点访问MaterAPI报错:Unauthorized 401
问题场景: 本地测试由于之前安装过K8S今天重启无法使用了,于是重新安装了一下,子节点加入主节点报错: I0808 23:13:04.299356 19180 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H …...
C++ Poco服务端框架中JSON的使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、JSON是什么?二、使用步骤总结 前言 上面一篇文章教你学会了Poco开发服务端应用,这个教程教会你使用JSON。一般传JSON的时候都是POS…...

【OpenGL学习】(五)自定义着色器类
文章目录 【OpenGL学习】(五)自定义着色器类着色器类插值着色统一着色 【OpenGL学习】(五)自定义着色器类 项目结构: 着色器类 // shader_s.h #ifndef SHADER_H #define SHADER_H#include <glad/glad.h>#inc…...
软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
在生命科学探索的浩瀚星海中,癌症研究始终是最为耀眼却又充满挑战的领域之一。口腔癌,作为全球范围内日益严峻的公共健康问题,尤其在中南亚、美拉尼西亚以及我国台湾地区,其发病率和死亡率持续攀升,如同隐藏在黑暗中的…...

Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab
Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab 1. 环境准备2. API 网关--HTTP2.1 部署应用2.2 部署网关2.3 HTTP路径匹配2.4 HTTP头匹配 3. API网关--HTTPS3.1 创建TLS证书和私钥3.2 部署HTTPS网关3.3 HTTPS请求测试 4. API网关--TLS 路由4.1 部署应用4.2 部署网关…...

静态相机中的 CCD和CMOS的区别
文章目录 CCD处理方式CMOS处理方式两者区别 首先根据 成像原理,CCD和CMOS的作用是一致的,都是为了将光子转化为数字图像,只是 转换的方式出现差异。 CCD处理方式 获取光子: 在电荷耦合器件(CCD)传感器中…...

【应用】Ghost Dance:利用惯性动捕构建虚拟舞伴
Ghost Dance是葡萄牙大学的一个研究项目,研究方向是探索人与人之间的联系,以及如何通过虚拟舞伴重现这种联系。项目负责人Cecilia和Rui利用惯性动捕创造出具有流畅动作的虚拟舞伴,让现实中的舞者也能与之共舞。 挑战:Ghost Danc…...

C#入门学习笔记 #6(字段、属性、索引器、常量)
欢迎进入这篇文章,文章内容为学习C#过程中做的笔记,可能有些内容的逻辑衔接不是很连贯,但还是决定分享出来,由衷的希望可以帮助到你。 笔记内容会持续更新~~ 将这四种成语放在一起讲是因为这四种成员都是用来表达数据的。 字段…...

4. 数据类型
4.1 数据类型分类 分类 数据类型 说明 数值类型 BIT(M) 位类型。M指定位数,默认值1,范围1 - 64 TINYINT [UNSIGNED] 带符号的范围 -128 ~ 127,无符号范围0 ~ 255,默认有符号 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 带符号是…...
网络通信核心概念全解析:从IP地址到TCP/UDP实战
一、网络基础架构三要素 1. IP地址:互联网的“门牌号” 本质:32位整数标识主机位置(IPv4)表示法:点分十进制(如 192.168.1.1)功能:全球唯一标识网络设备特殊地址: 127.…...

基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境
Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。托管容器的软件称为Docker引擎。Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离&a…...
更新Java的环境变量后VScode/cursor里面还是之前的环境变量
最近我就遇到这个问题,这个一般是安装了多个版本的Java,并设置好环境变量,但VScode/cursor内部环境变量却没有改变 解决办法 打开设置,或者直接快捷键CTRL,搜索Java:Home编辑settings.json文件 把以下部分改为正确的…...