游戏开发--C#面试题

游戏开发--C#面试题

    • C#
      • 1. 值类型和引用类型的区别
      • 2. 重载和重写的区别
      • 3. ArrayList和List的区别
      • 4. List底层是什么实现的?
      • 5. 抽象类和接口的区别
      • 6. 静态成员和⾮静态成员的区别
      • 7. 装箱和拆箱是指什么?
      • 8. 值和引用类型在变量赋值时的区别是什么?
      • 9. 委托和事件在使用上的区别是什么?
      • 10. 有两个接口IA和IB,他们中有一个同名方法Test(),一个类同时继承这两个接口,应该如何处理他们的同名方法?
      • 11. 请说明C#中的List是如何扩容的
      • 12. 请说说你认为C#中 == 和 Equals 的区别是什么?
      • 13. 浅拷贝和深拷贝的区别?
      • 14. 这两种获10000个数的方式,哪种效率更高?为什么
      • 15. finally的执行顺序
      • 16. 值和引用赋值表现的区别
      • 17. 泛型的约束有哪几种?
      • 18. 什么是闭包?可以举例说明
      • 19. 内存泄漏指什么?常见的内存泄漏有哪些?
      • 20. 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?
      • 21. 请问A、B、C 三处打印结果分别为多少?为什么?
      • 22. 请说明字符串中
      • string str = null
      • 23. C#重载运算符,重载 == 和 != 以及 万物之父Object基类中的虚方法 virtual bool Equals(Object obj)
      • 24. 在开发时,对string和StringBuilder我们应该如何选择
      • 25. 请简要说明.Net跨语言原理
      • 26. 请简要说明.Net跨平台原理
      • 27. 以上代码,谁的效率更高?为什么?
      • 28. 数组和链表的区别是什么?
      • 29. C# 中的Action和Func是什么?Unity 中的UnityAction是什么?
      • 30. 结构体中的引用成员
      • 31. 网络游戏开发中,网络传输数据的基本流程是什么?
      • 32. C#中如何让自定义容器类能够使用for循环遍历?(通过 类对象[索引] 的形式遍历)
      • 33. C#中如何让自定义容器类能够使用foreach循环遍历?
      • 34. C#中接口的作用是什么?说说你的理解
      • 35. Unity引擎中哪些功能使用了C#的反射功能?至少说出一点
      • 36. 请问以上这三行代码,运行后,在堆上会分配几个“房间”
      • 37. C#中如何让一个类不能再被其他类所继承?
      • 38. C#中使用泛型的好处是什么?
      • 39. C#中元组对于我们的作用是什么?
      • 40. 请说明Thread、ThreadPool、Task分别是什么?并简单说明彼此的区别
      • 41. 请简述GC(垃圾回收)产生的原因,并至少说出避免GC发生的三种方式?
      • 42. 如果我们想为Unity中的Transform类添加一个自定义的方法,应该如何处理?
      • 43. 请说出using关键字的两个作用
      • 44. C#中Dictionary不支持相同键存储,如果想要一个键对应多个值如何处理?
      • 45. 请问上面代码的最终打印结果是什么?为什么?
      • 46. 上题中的代码,如果我们希望打印出0~9,应该如何修改代码?
      • 47. 内存中,堆和栈的区别是什么?
      • 48. TCP协议和UDP协议的区别
      • 49. TCP协议的可靠性是如何达到的?
      • 50. 内存抖动指什么?如何避免内存抖动
      • 51. buff 系统中,如何用一个 byte,记录多种buff状态标识
      • 52. 文件中保存了文本信息,但是打开后却是乱码,一般是什么原因造成的?
      • 53. C#中new关键字的作用(至少说出3种)
      • 54. 同步方法和异步方法的区别是什么?异步编程是什么意思?
      • 55. 回调函数指什么?一般在什么时候使用?(至少说出3种使用场景)
      • 56. 如何用一个int变量,记录32种状态?(注意:状态可以并存)

C#

1. 值类型和引用类型的区别

  1. 值类型,如整数和结构体,是直接包含数据,并且存储在内存的栈上
  2. 引用类型,如类和数组,是指向实际数据的引用,引用地址存储在内存的栈里,实际数据存储在内存的堆上
  3. 因为存储位置不同,存储在内存栈上的值类型堆上的引用类型存取快
  4. 栈上的值类型数据会自动释放,而堆的引用类型数据会通过GC自动释放

2. 重载和重写的区别

  1. 重载是指在同一个类中定义多个同名方法,但这些方法的参数列表不同(参数的数量、类型或顺序不同)
  2. 重写是指在子类中定义一个与父类中具有相同名称、参数列表和返回类型的方法。
重载在同类中,重写在父子类中。定义方式不同,重载方法名相同参数列表不同,重写方法名和参数列表都相同。调用方式不同,重载使用相同对象以不同参数调用,重写用不同对象以相同参数调用。多态时机不同,重载时编译时多态,重写是运行时多态

3. ArrayList和List的区别

  1. ArrayList 不带泛型 数据类型丢失,而List 带泛型 数据类型不丢失
  2. ArrayList 需要装箱拆箱 List不需要
  3. 在声明List集合时,我们同时需要为其声明List集合内数据的对象类型(带泛型)
ArrayList存在不安全类型(ArrayList会把所有插 ⼊其中的数据都当做Object来处理)装箱拆箱的 操作(费时)IList是接⼝,ArrayList是⼀个实现了 该接⼝的类,可以被实例化
List类是ArrayList类的泛型等效类。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

4. List底层是什么实现的?

一个可变类型的泛型数组,当向列表中添加元素并且列表的容量不足以容纳新元素时,List<T> 会进行扩容。扩容操作通常会将数组的大小增加一倍(尽管这不是固定的,并且可能因实现而异),并将现有元素复制到新的数组中。扩容操作的时间复杂度是 O(n),但由于它只在需要时发生,因此平均下来对性能的影响较小

5. 抽象类和接口的区别

  1. 一个类可以实现多个接口,一个类只能继承一个抽象类
  2. 接口不能包含方法的实现,抽象类可以实现具体的方法
  3. 接口中的所有成员自动都是public的,不能有访问修饰符,抽象类中的成员可以是publicprotectedprivate
  4. 接口不能有构造函数,抽象类可以有构造函数,用于初始化派生类的成员

6. 静态成员和⾮静态成员的区别

  1. 静态成员⽤statis修饰符声明,类被第一次加载到内存时创建,通过类进⾏访问

  2. 不带static的变量时⾮静态变量,在对象被实例化时创建,通过对象进⾏访问,

  3. 静态⽅法⾥不能使⽤⾮静态成员,⾮静态⽅法可以使⽤静态成员

  4. 静态成员属于类,⽽不属于对象

7. 装箱和拆箱是指什么?

装箱——把栈中内容迁移到堆中去(值转引用)
拆箱——把堆中内容迁移到栈中去(引用转值)

在这里插入图片描述

8. 值和引用类型在变量赋值时的区别是什么?

值类型:变量赋值时创建值的副本,修改一个变量不会影响另一个
引用类型:变量赋值时共享同一个内存地址,修改一个变量会影响另一个

9. 委托和事件在使用上的区别是什么?

事件相对委托来说,事件在外部使用时只能 +=、-=

10. 有两个接口IA和IB,他们中有一个同名方法Test(),一个类同时继承这两个接口,应该如何处理他们的同名方法?

答案:显示实现接口
IA.Test()
IB.Test()

11. 请说明C#中的List是如何扩容的

List的本质是数组

12. 请说说你认为C#中 == 和 Equals 的区别是什么?

  1. == 是运算符,Equals是万物之父Object中的虚方法,子类可重写
  2. Equals 一般在子类中重写后用于比较两个对象中内容是否相同
    ==在没有运算符重载的前提下时
    引用类型用于比较地址值类型用于比较值是否相同
  3. 运算效率不同,一般Equals没有效率高,因为一般Equals比较的内容比

13. 浅拷贝和深拷贝的区别?

浅拷贝:
只复制对象的引用地址
两个对象指向同一内存地址,修改其中一个另一个也会随之变化

深拷贝:
将对象和值赋值过来,两个对象修改其中任意值都不会影响对方

举例:
比如引用对象A和引用对象B
让A = B,就是浅拷贝,此时A、B的引用地址相同,改A中内容,B也变

如果想要深拷贝,简单处理就是new(包括对象中的成员)

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

在这里插入图片描述

方式2的效率更高
因为List本质是数组,我们通过Add往List中添加元素时,会不断的触发扩容
扩容会带来内存和性能上的消耗
内存方面:每次扩容会产生垃圾,还会造成GC的触发
性能方面:每次扩容会进行“搬家”(老数组中内容存入新数组中)

15. finally的执行顺序

在这里插入图片描述

请说出以上代码
1.A处和B处谁先打印?
2.A、B出打印的i值分别是多少?

答案:
1.B处先打印,A处后打印
2.A处 i = 10,B处 i = 11考点:finally的执行顺序

16. 值和引用赋值表现的区别

在这里插入图片描述

请问A、B两处 i 的值为多少?

答案:
A、B两处都为11
考点:
1.finally的执行顺序
2.值和引用赋值表现的区别

17. 泛型的约束有哪几种?

答案:
1.值类型约束 T:struct
2.引用类型约束 T:class
3.公共无参构造约束 T:new()
4.类约束 T:类名
5.接口约束 T:接口名
6.另一个泛型约束 T:U

18. 什么是闭包?可以举例说明

闭包是指有权访问另一个函数作用域中的变量的函数
所以闭包一般都是指的一个函数
创建这种特殊闭包函数的方式往往是在一个函数中创建另一个函数

19. 内存泄漏指什么?常见的内存泄漏有哪些?

内存泄漏指的就是对象超过生命周期后而不能被GC回收,一般指不会再使用的引用对象由于某些操作而不能被GC垃圾回收,而一直占用着内存

更风趣通俗一点的说就是:没用的家伙没有被当成垃圾回收

常见的内存泄漏有:

  1. 静态引用
  2. 不使用的引用对象没有置null,一直被引用
  3. 文件操作时,没有使用using或者没有进行Dispose()
  4. 委托或事件注册后没有解除注册(有加就有减)
    等等

20. 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?

序列化是将程序中数据对象转换为可以存储或传输的形式 的过程
举例:
比如我们常见的序列化方式 xml、Json、2进制等。就是将内存中的数据按照我们自己定义的规则进行序列化,序列化之后就可以用于存储和传输,当读取和接受数据时,只需要按照对应规则进行反序列化便可得到原始数据

所谓的存储读取和传输接受,其实一般指的就是数据持久化和网络通讯
所以我们经常会在这两块知识点看到序列化反序列化这两个关键词

21. 请问A、B、C 三处打印结果分别为多少?为什么?

image-20241109155033940
答案:
A是10,B和C为100Test1处参数传递进去后,函数内部的形参value是在栈上重新开辟的空间,将传入参数的值拷贝到了该空间中,和传入参数没有关系Test2处参数是指针类型,指针是用于存储内存地址的变量,我们传入的是值得地址&test2Value,在函数内部改变的是地址中存储的值,所以外部的test2Value会随之改变Test3处ref关键字,底层逻辑中是将value作为test3Value的一个别名,他们指向的空间一致,所以value改变后,外部的test3Value也会改变

22. 请说明字符串中

string str = null

string str = “”
string str = string.Empty
三者的区别

答案:
str = null 在堆中没有分配内存地址
str = "" 和 string.Empty 一样都是在堆内存中分配了空间,里面存储的是空字符串
而string.Empty是一个静态只读变量

23. C#重载运算符,重载 == 和 != 以及 万物之父Object基类中的虚方法 virtual bool Equals(Object obj)

对于我们的意义是什么?

答案:
为了判断两个对象的非引用地址相等
我们可以选择 使用 重载运算符 == 和 != 或者
重写Equals方法,来自定义判断两个对象是否相等
如果想保留原有的引用地址相等判断,那么一般我们选择重写Equals方法

24. 在开发时,对string和StringBuilder我们应该如何选择

答案:
string在每次拼接时都会产生垃圾
而StringBuilder在拼接时,是在原空间中进行修改,不会产生垃圾,会自动帮助我们扩容
所以当字符串需要频繁修改拼接时,我们使用StringBuilder

25. 请简要说明.Net跨语言原理

答案:
.Net制定了了CLI公共语言基础结构的规则
只要是按照该规则设计的语言在进行.Net相关开发时
编译器会将源代码(C#、VB等等)编译为CIL通用中间代码。
也就是说不管什么语言进行开发,最终都会统一规范变为中间代码
最终通过CLR(公共语言运行时或者称为.Net虚拟)将中间代码翻译为对应操作系统的原生代码(机器码)
在操作系统(Windows)上运行

26. 请简要说明.Net跨平台原理

答案:
由于.Net Framework中利用CLI和CLR实现了跨语言,CLR主要起到一个翻译、运行、管理中间代码的作用
.Net Core和Mono就是利用了CLR的这一特点,为不同操作系统实现对应CLR(公共语言运行时或.Net虚拟机)
那么不同操作系统对应的CLR就会将IL中间代码翻译为对应系统可以执行的原生代码(机器码)
达到跨平台的目的

27. 以上代码,谁的效率更高?为什么?

image-20241109162622129
答案:
代码2的效率更高因为List的本质是数组,在初始化时,如果不默认为其指明分配多少容量,它会不断扩容
扩容会带来效率的降低和垃圾的产生
效率的降低:从旧数组到新数组的搬家
垃圾的产生:每次扩容时,就数组就变成了垃圾

28. 数组和链表的区别是什么?

答案:
1.存储结构不同
数组是顺序存储结构,在内存中是连续存储的
链表是链式存储结构,在内存中是非连续存储的2.访问效率不同
数组由于是顺序存储,通过下标访问,访问效率高
链表由于是非连续存储,我们想要获取其中某一元素,需要从头或尾遍历,效率低3.插入、删除效率不同
数组由于是顺序存储,在插入和删除时,需要整体移动数组中的大部分元素,效率低
链表由于是链式存储,在插入和删除时,效率高4.越界问题
数组由于是顺序存储,声明时容量是固定的,如果不处理扩容逻辑,存在越界风险
链表由于是链式存储,无越界风险

29. C# 中的Action和Func是什么?Unity 中的UnityAction是什么?

他们有什么区别?

答案:
Action和Func是System命名空间下 C#为我们提供的两个写好的委托
Action本身是一个无参无返回值的委托
对应的Action<>泛型委托支持最多16个参数Func本身是一个无参有返回值的委托
对应的Func<>泛型委托支持最多16个参数,并且有返回值UnityAction是UnityEngine.Events命名空间下 Unity为我们提供的写好的委托
UnityAction本身是一个无参无返回值的委托
对应的UnityAction<>泛型委托支持最多4个参数

30. 结构体中的引用成员

在这里插入图片描述

请问最终的打印结果是什么?

答案:
0-Alice-7
考点:
1.值和引用的区别
2.特殊引用类型string
3.结构体中的引用成员

31. 网络游戏开发中,网络传输数据的基本流程是什么?

答案:
客户端将自定义类对象数据序列化为2进制数据发送给服务端服务端将收到的2进制数据反序列化为对应的类对象进行逻辑处理如果是服务端发送给客户端的消息也是同理

32. C#中如何让自定义容器类能够使用for循环遍历?(通过 类对象[索引] 的形式遍历)

答案:
通过在类中实现索引器实现

33. C#中如何让自定义容器类能够使用foreach循环遍历?

答案:
通过为该类实现迭代器可以让其使用foreach遍历
传统方式:
继承IEnumerator、IEnumerable两个接口
实现其中的 
1.GetEnumerator方法
2.Current属性
3.MoveNext方法
语法糖方式:
利用yield return语法糖,实现GetEnumerator方法即可完成迭代器的实现

34. C#中接口的作用是什么?说说你的理解

答案:
用于建立行为的继承关系,而不是对象
不同对象,有相同行为时,我们可以利用接口对不同对象的行为进行整合

35. Unity引擎中哪些功能使用了C#的反射功能?至少说出一点

答案:
1.Inspector窗口中显示的内容
2.预设体文件
3.场景文件
4.Unity中的各种特性
等等

36. 请问以上这三行代码,运行后,在堆上会分配几个“房间”

在这里插入图片描述

答案:
2个房间
"123"一个房间
"1234"一个房间

在这里插入图片描述

37. C#中如何让一个类不能再被其他类所继承?

答案:
使用密封关键字sealed修饰该类

38. C#中使用泛型的好处是什么?

答案:
1.可以为不同类型对象的相同行为进行通用处理,提升代码复用率
2.避免装箱拆箱,提升性能

39. C#中元组对于我们的作用是什么?

image-20241109171922319
答案:
可以在不用写数据结构类的情况下
利用元组处理多返回值,或者临时数据的集合

40. 请说明Thread、ThreadPool、Task分别是什么?并简单说明彼此的区别

答案:
Thread是线程,可以使用他开启线程处理复杂逻辑,避免主线程卡顿
ThreadPool是线程池,他是C#为线程实现的缓存池,主要用于减少线程的创建,减少GC触发
Task是任务,他是基于线程池的优化,让我们可以更方便的控制线程

41. 请简述GC(垃圾回收)产生的原因,并至少说出避免GC发生的三种方式?

答案:
GC产生的原因是 避免堆内存溢出而产生的回收机制
当不再使用的堆内存占用达到一定上限时,将会进行垃圾回收避免方式:
1.尽量减少new对象,尽量复用对象(可使用缓存池)
2.用StringBuilder替换String,避免字符串拼接时产生垃圾
3.公共对象用静态声明
等等

42. 如果我们想为Unity中的Transform类添加一个自定义的方法,应该如何处理?

答案:
通过C#的拓展方法相关知识点进行添加

43. 请说出using关键字的两个作用

答案:
1.引入命名空间
2.安全使用引用对象

在这里插入图片描述

44. C#中Dictionary不支持相同键存储,如果想要一个键对应多个值如何处理?

在这里插入图片描述

45. 请问上面代码的最终打印结果是什么?为什么?

在这里插入图片描述

答案:
全是10
当委托最终执行时,他们使用的i,都是for循环中声明的i,此时的i已经变成了10

46. 上题中的代码,如果我们希望打印出0~9,应该如何修改代码?

image-20241109173929895

47. 内存中,堆和栈的区别是什么?

答案:
堆和栈是操作系统堆进程占用的内存空间的两种管理方式

栈:由操作系统自动分配释放,存放函数的参数值,局部变量值,栈中数据的生命周期随着函数的执行完成而结束

堆:一般由程序员分配释放,如果开发人员不释放,程序结束时由操作系统回收
(在C#中 托管堆内存 会由 C#帮助我们管理,存在GC垃圾回收机制

更多更全面的堆栈区别讲解:
https://blog.csdn.net/K346K346/article/details/80849966/

48. TCP协议和UDP协议的区别

答案:
连接方面:TCP面向连接,UDP无连接
是否可靠:TCP可靠(无差错、不丢失、不重复、按顺序),UDP不可靠
传输效率:TCP相对UDP较低
连接对象:TCP一对一,UDP n对n

49. TCP协议的可靠性是如何达到的?

答案:
TCP协议是通过 检验和、确认应答信号、重发机制、连接管理、流量控制、拥塞控制等手段达到可靠的

具体的一些理论知识,可以浏览该文章
http://www.360doc.com/content/22/1111/20/78411425_1055522293.shtml

50. 内存抖动指什么?如何避免内存抖动

答案:
内存抖动指短时间内有大量的对象被创建或者被回收的现象
频繁的内存抖动会造成 GC 频繁运行,造成卡顿

避免方式:
对象池
享元模式

51. buff 系统中,如何用一个 byte,记录多种buff状态标识

答案:
一个byte,有8位,我们可以让每一位代表一种状态,0代表无,1代表有byte buffType = 0;0000 0000
0000 0001  中毒 buff
0000 0010  灼烧 buff
0000 0100  回春 buff当状态添加时,进行 或 ( | ) 运算
buffType | 灼烧 buff = 0000 0010
buffType | 中毒 buff = 0000 0011当状态移除时,进行 异或 ( ^ ) 运算
buffType 0000 0011
buffType ^ 中毒 buff = 0000 0011 ^ 0000 0001 = 0000 0010

52. 文件中保存了文本信息,但是打开后却是乱码,一般是什么原因造成的?

答案:
序列化和反序列化字符串时使用的编码格式不统一

53. C#中new关键字的作用(至少说出3种)

答案:

  1. 创建新对象
  2. 子类函数声明时加上new关键字,可以隐藏掉父类方法
  3. 泛型约束中使用new关键词,表示需要无参构造

54. 同步方法和异步方法的区别是什么?异步编程是什么意思?

对于我们来说,什么时候需要使用异步编程?(至少说出3种)

答案:
同步方法:
当一个方法被调用时,调用者需要等待该方法执行完毕后返回才能继续执行异步方法:
当一个方法被调用时立即返回,并获取一个线程执行该方法内部的逻辑,调用者不用等待该方法执行完毕异步编程:
在日常开发时把一些不需要立即得到结果且耗时的逻辑设置为异步执行,这样可以提高程序的运行效率,避免由于复杂逻辑带来的的线程阻塞什么时候需要使用异步编程:
1.复杂逻辑计算时,比如寻路算法等
2.网络下载、网路通讯
3.资源加载时
等

55. 回调函数指什么?一般在什么时候使用?(至少说出3种使用场景)

答案:
回调函数指在程序设计中,将一个函数作为参数传递给另一个函数,并在另一个函数执行完毕后被调用的函数,在C#中,一般以委托形式出现什么时候使用:
1.异步编程:异步逻辑执行完毕后,再执行回调函数
2.事件中心
3.UI界面中的空间逻辑回调,比如按钮点击
等等

56. 如何用一个int变量,记录32种状态?(注意:状态可以并存)

答案:
int在C#中占4个字节,共32位
我们可以按位记录状态,每一位代表一个状态,1为存在,0为不存在

  • List item

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

# 设置ubuntu为中文后,如何保留用户家目录等文件夹名为英文

设置ubuntu为中文后&#xff0c;如何保留用户家目录等文件夹名为英文 一、问题描述&#xff1a; 当我们安装完ubuntu系统后&#xff0c;通过【系统设置】&#xff0c;在【语言支持】里&#xff0c;设置为【汉语&#xff08;中国&#xff09;】&#xff0c;这时在终端中显示文…

STM32—独立看门狗(IWDG)和窗口看门狗(WWDG)

概述&#xff1a; WDG(Watchdog) 看门狗&#xff0c;看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能计时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系…

Chrome与火狐哪个浏览器的性能表现更好

在数字时代&#xff0c;浏览器是我们日常生活中不可或缺的工具。无论是工作、学习还是娱乐&#xff0c;一个好的浏览器都能显著提高我们的效率和体验。市场上有许多优秀的浏览器&#xff0c;其中Google Chrome和Mozilla Firefox无疑是最受欢迎的两款。本文将比较这两款浏览器的…

现在国内优秀的广告联盟有哪些?

广告联盟是网络广告效果营销的主流方式之一&#xff0c;广告联盟的变现方式多种多样&#xff0c;主要有以下四种 CPA&#xff1a;按照下载或者注册进行付费&#xff08;软件平台或游戏试玩平台&#xff09;CPS&#xff1a;按照成交进行付费&#xff08;淘宝客&#xff09;CPM&…

机器学习,生成式AI ,LLM大模型,人工智能,他们之间的关系是什么?有什么不同?

这些概念都是现代计算机科学和人工智能领域的重要组成部分&#xff0c;它们之间既有联系&#xff0c;也有区别。以下是它们的关系和不同之处&#xff1a; 人工智能 (AI) 两个回答 人工智能是一个广义的概念&#xff0c;指的是计算机系统能够执行通常需要人类智能才能完成的任务…

[全网最细数据结构完整版]第七篇:3分钟带你吃透队列

目录 1->队列的概念及结构 2->队列的实现 2.1定义队列基本结构 struct QueueNode 和 struct Queue 2.2队列初始化函数 QueueInit 函数 2.3队列销毁函数 QueueDestroy 函数 2.4队列插入数据函数 QueuePush 函数 2.5判断队列是否为空,空返回true,非空返回false 2.6队列删…

点阵数显驱动IC数显LED驱动芯片VK1651

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK1651 封装形式&#xff1a;SOP16 产品年份&#xff1a;新年份 产品简介&#xff1a;VK1651是一种带键盘扫描电路接口的 LED 驱动控制专用芯片&#xff0c;内部集成有数据锁存器、LED 驱动、键盘扫描等电路。SEG脚…

【进阶】java基础之集合(2)数据结构<树>

文章目录 二叉树的内部结构二叉查找树平衡二叉树平衡二叉树的旋转机制 二叉树的内部结构 二叉查找树 二叉查找树&#xff0c;又称二叉排序树或者二叉搜索树 特点: 每一个节点上最多有两个子节点任意节点左子树上的值都小于当前节点任意节点右子树上的值都大于当前节点 二叉…

积分接口被刷爆,全体一个月降薪20%,这个项目我们遗漏了什么?

有一些往事总是会在酒后提起 我问朋友&#xff0c;在工作上有什么事情是到现在还记忆尤新的&#xff1f; 我朋友一个激灵坐起来&#xff0c;点上一支烟&#xff0c;只见烟头亮了4、5下&#xff0c;才见他吐出一口烟来&#xff0c;说道&#xff1a;“那还真有” 起因 刚参加…

AWTK-LINUX-FB实现多点触摸

两周前的一个地图&#xff0c;需要做手势缩放的功能&#xff0c;比较忙就没有发出来&#xff0c;这次抽时间记录一下实现的过程。 AWTK官方有对实现多点触摸做过描述&#xff0c;可惜只有STM32的实现例子&#xff0c;跟Linux的差别还是比较大的&#xff0c;好在tslib有多点触摸…

NRF52832学习笔记(41)——添加串口库libuarte

一、背景 由于板子上不支持硬件流控&#xff0c;在使用 app_uart_fifo 库接收串口大数据时&#xff0c;频繁报 APP_UART_COMMUNICATION_ERROR 错误&#xff0c;多次重新初始化后&#xff0c;串口也不再产生中断了。查看官方论坛后决定使用串口异步库 libuarte。 二、简介 Li…

ORU 的 Open RAN 管理平面 (M 平面)

[TOC](ORU 的 Open RAN 管理平面 (M 平面)) ORU 的 Open RAN 管理平面 (M 平面) https://www.techplayon.com/open-ran-management-plane-m-plane-for-open-radio-unit/ ORU M 平面 在 ORAN 中&#xff0c;设置参数的 O-RU 管理功能是通过 M-Plane 完成的。管理功能包括 O-…

MQ的基础知识

一.什么是MQ 其实就是不同的程序之间的一种的通信方式,通过将消息发送到中间件里面然后中间件就会将这个消息发送给相应的服务进行一个消息的消费,这个时候就会进行一些的业务逻辑的处理,这个方式提高了整个系统的可靠性,拓展性以及灵活性.常见的类型为Aapache Kafaka&#xf…

蓝牙OPP协议详解及Android实现

文章目录 前言一、什么是蓝牙OPP协议&#xff1f;二、OPP协议工作流程1. 设备配对和连接2. 启动 OPP 服务3. 发送对象4. 传输对象5. 传输完成6. 断开连接 三、 Android OPP协议实现1. 启动 OPP 服务器&#xff08;接收方&#xff09;2. 发送文件&#xff08;发送方&#xff09;…

医学可视化之涟漪图

在医学领域&#xff0c;数据可视化能够帮助我们更直观地理解和分析复杂的信息。涟漪图作为一种独特的可视化工具&#xff0c;具有重要的作用、价值和广泛的使用场景。 一、涟漪图的特点 涟漪图是一种基于地理位置的可视化图表&#xff0c;它通过在地图上显示不同大小或颜色的…

定义宏将整数的二进制的奇数位和偶数位互换位置

假设这个数为n00000000 00000000 00000000 00001101——13 1.思路 1.1 奇数位&#xff1a;00000000 00000000 00000000 00000101 但是怎么获得奇数位呢&#xff1f;——进行按位与运算 不懂如何运算的可以看我主页的详解操作符-CSDN博客&#xff0c;该章详细写了各个操作符如何…

快要结束的大学时光

目录 大一 大一上学期 Java HTMLCSS 大一下学期 HTMLCSSJS JAVA python 大二 大二上学期 Java 原型 前端 大二下学期 前端 数据结构 Android BootStrap JavaWeb ios程序设计 软件测试​编辑 大三 大三上学期 小程序 大三下学期 JavaWeb 整理数据库 大…

高效实现MySQL数据集成的具体案例分享

MySQL数据集成案例分享&#xff1a;1–BI秉心-店铺信息表–store_z–>store 在数据驱动的业务环境中&#xff0c;如何高效、可靠地实现数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例&#xff1a;将MySQL中的店铺信息表store_z的数据集成到另一…

[Docker#3] LXC | 详解安装docker | docker的架构与生态

目录 1.LXC容器操作 安装LXC LXC容器操作步骤 2.理论 LXC 是什么&#xff1f; Docker 是什么 Docker 和虚拟机的区别 Docker 和 JVM 虚拟化的区别 Docker 版本 ⭕Docker 官方网站&#xff08;建议收藏&#xff09; Docker 架构 生活案例 Docker 生态 Docker 解决…

CAP相关的分布式技术

目录 一&#xff0c;CAP理论基础 1.1、一致性&#xff08;Consistency&#xff09; 1.2、可用性&#xff08;Availability&#xff09; 1.3、分区容忍性&#xff08;Partition Tolerance&#xff09; 1.4、CAP理论的核心观点 二&#xff0c;如何选C与A 2.1、网络分区情况…