八股文(C#篇)
C#中的数值类型
堆和栈
值类型的数据被保存在栈(stack)上,而引用类型的数据被保存在堆(heap)上,当值类型作为参数传递给函数时,会将其复制到新的内存空间中,因此在函数中对该值类型的修改不会影响原始值类型。
拆箱和装箱是什么
装箱是指将值(int double)类型转换为对应的引用(object)类型,从内存角度上来说是将栈中的内容迁移到堆上
拆箱就是把引用转成值类型,把堆中的内容转移到栈上去
int i=3;
objcet o=i;//装箱
i=(int)o //拆箱
值和引用类型在变量赋值时的区别是什么?
值类型变量赋值会创建一个新的拷贝,而引用类型变量赋值会创建一个新的引用指向同一个对象。
委托和事件在使用上的区别是什么?
事件相对与委托来说,事件在外部使用时只能使用+= -=
有两个接口IA和IB,他们中有一个同名方法Test()
一个类同时继承这两个接口,应该如何处理他们的同名方法?
显式实现接口
IA.Test()
IB.Test()
在C#中数据类型分为值类型和引用类型
值类型:结构体、枚举
引用类型:类、接口、数组、委托
请说明C#中的List是如何扩容的
当 List 需要扩容时,它会创建一个新的更大的内部数组,并将现有元素复制到新数组中,然后使用新数组替换旧数组
请说说你认为C#中 == 和 Equals 的区别是什么?
Equals继承自Object,一般用于比较对象内容是否相等,而==在不重载的前提下如果是值类型更倾向于比较值是否相等,引用倾向于比较地址是否相等,运算效率也不同,Equals比较的内容多,所以效率会差一点
浅拷贝和深拷贝的区别?可以举例说明
浅拷贝只拷贝指针(C++)引用(C#),拷贝完的数据修改了原数据也会修改,但是深拷贝就是拷贝了一份新的,修改并不会影响原数据
上面两种获10000个数的方式,哪种效率更高?为什么
方式2:因为List会不断扩容,扩容时会反复拷贝造成性能损耗
请说出以下代码AB谁先打印,AB打印的值分别为多少
void Start(){int i=GetInt();Debug.Log("第A处 i= "+i);}static int GetInt(){int i=10;try{return i;}finally{i=11;Debug.Log("第B处 i= "+i);}}
不论try块中的代码是否抛出异常,finally块中的代码都会被执行
先输出B=11然后输出A=10
public class CsharpLearing : MonoBehaviour
{void Start(){Test t=GetObj();Debug.Log("第A处 i= "+t.i);}static Test GetObj(){Test t=new Test();try{return t;}finally{t.i=11;Debug.Log("第B处 i= "+t.i);}
}
}class Test{public int i=10;
}
这里和上面不一样,先输出B=11,然后输出A=11
这两段程序输出不同的原因是因为Getint返回的是值类型,而getObj返回的是引用类型
泛型的约束有哪几种
- 值类型约束
- 引用类型约束
- 公共无参数构造函数
- 类约束
- 接口约束
- 另一个泛型约束
什么是闭包?举例说明
闭包是指有权访问另一个函数作用域中变量的函数(用lambda或匿名方法实现,可以捕获不属于其作用域的值)
C#中内存泄漏
- 静态引用:如果一个静态对象长时间存活且占用大量内存,并且该对象不会被释放或重置,可能导致内存泄漏
- 不使用的引用对象没有置null
- 委托或事件没有解除注册
请说明字符串中
string str = null
string str = “”
string str = string.Empty
三者的区别
-
str = null 在堆中没有分配内存地址
-
str = “” 和 string.Empty 一样都是在堆内存中分配了空间,里面存储的是空字符串
-
string.Empty是一个静态只读变量
对string和StringBuilder我们应该如何选择
string是不可变的,意味着一旦创建了字符串对象,就无法更改其内容。任何对字符串的修改都会创建一个新的字符串对象。线程更安全
StringBuilder是可变的,可以通过对其进行操作来修改其内容,而不必创建新的对象。这使得在需要频繁修改字符串时,使用StringBuilder比使用string更高效。线程不安全
string在每次拼接时都会产生垃圾
而StringBuilder在拼接时,是在原空间中进行修改,不会产生垃圾,会自动帮助我们扩容
所以当字符串需要频繁修改拼接时,我们使用StringBuilder
.Net跨语言原理
.Net制定了了CLI公共语言基础结构的规则
只要是按照该规则设计的语言在进行.Net相关开发时
编译器会将源代码(C#、VB等等)编译为CIL通用中间代码。
也就是说不管什么语言进行开发,最终都会统一规范变为中间代码
最终通过CLR(公共语言运行时或者称为.Net虚拟)将中间代码翻译为对应操作系统的原生代码(机器码)
在操作系统(Windows)上运行
C# 中的Action和Func是什么?Unity 中的UnityAction是什么?他们有什么区别?
Action和Func是System命名空间下 C#为我们提供的两个写好的委托
Action本身是一个无参无返回值的委托
对应的Action<>泛型委托支持最多16个参数
Func本身是一个无参有返回值的委托
对应的Func<>泛型委托支持最多16个参数,并且有返回值
UnityAction是UnityEngine.Events命名空间下 Unity为我们提供的写好的委托
UnityAction本身是一个无参无返回值的委托
对应的UnityAction<>泛型委托支持最多4个参数
程序阅读
public void Dosomething (A a){a.id=6;a.name="Bob";a.children[0]=7;}void Start(){var a=new A();a.name="Alick";a.children=new int[]{1,2,3};Dosomething(a);Debug.Log(a.name+a.id+a.children[0]);}
输出Alick07
请问以上这三行代码,运行后,在堆上会分配几块内存
两块
"123"一块
"1234"一块
C#中如何让一个类不能再被其他类所继承?
使用密封关键字sealed修饰该类
C#中使用泛型的好处是什么?
1.可以为不同类型对象的相同行为进行通用处理,提升代码复用率
2.避免装箱拆箱,提升性能
C#中元组对于我们的作用是什么?
可以在不用写数据结构类的情况下
利用元组处理多返回值,或者临时数据的集合
请简述GC(垃圾回收)产生的原因,并至少说出避免GC发生的三种方式?
GC产生的原因是 避免堆内存溢出而产生的回收机制
当不再使用的堆内存占用达到一定上限时,将会进行垃圾回收
避免方式:
1.尽量减少new对象,尽量复用对象(可使用缓存池)
2.用StringBuilder替换String,避免字符串拼接时产生垃圾
3.公共对象用静态声明
如果我们想为Unity中的Transform类添加一个自定义的方法,应该如何处理?
通过C#的拓展方法相关知识点进行添加
请说出using关键字的两个作用
1.引入命名空间
2.安全使用引用对象
C#中Dictionary不支持相同键存储如果想要一个键对应多个值如何处理?
程序阅读
全是10:当委托最终执行时,他们使用的i,都是for循环中声明的i,此时的i已经变成了10
如果我想要输出1~10怎么办
使用一个临时变量接当前值
内存抖动指什么?
内存抖动指短时间内有大量的对象被创建或者被回收的现象
频繁的内存抖动会造成 GC 频繁运行,造成卡顿
C#中new关键字的作用(至少说出3种)
- 创建新对象
- 子类函数声明时加上new关键字,可以隐藏掉父类方法
- 泛型约束时使用new关键字表示需要无参构造
回调函数指什么?一般在什么时候使用?(至少说出3种使用场景)
- 异步编程:异步逻辑执行完毕后,再执行回调函数
- 事件中心
- UI界面中的空间逻辑回调,比如按钮点击
csharp里面有一个常用的接口叫做IDispose,它的作用是?
IDispose接口是 C# 中用于手动释放资源的机制
通过显式调用 Dispose() 方法来实现资源的释放,避免资源泄漏和浪费
它允许对象在不再需要时显式地释放资源,而不依赖于垃圾回收器的自动内存管理
csharp有垃圾回收机制,把一个对象设置为空的时候,系统会帮我们回收,它和接口IDispose有什么关系吗?为什么会存在两个做析构事情的东西呢?
C#中的垃圾回收机制,只会回收托管堆上分配的对象。
对于非托管资源以及其它需要显示释放的资源,垃圾回收是无法自动处理的,因为这些资源不属于托管堆,因此垃圾回收器无法自动识别和回收。这种情况下我们就需要显示的手动释放这些资源了。
而IDispose接口就提供了一种通用的机制来进行资源清理,主要用于释放非托管资源。
非托管资源:
- 文件句柄,在操作系统中打开的文件等
- 数据库链接,与数据库服务器简历的链接
- 网络链接:比如Socket的连接对象
- unsafe关键词中使用的指针
属性和字段
属性一般可以用来封装字段
属性相对字段来说,属性具有封装性,允许对字段进行封装,提供更多的控制和逻辑。
相比直接访问字段来说,属性允许我们在字段访问的过程汇总添加验证、计算等逻辑
属性还可以在其中对set和get设置不同的访问级别,使得字段的读取和写入可以收到更精细的控制
抽象类中的虚函数和抽象函数,是否必须在子类中重写?
虚函数的重写是可选的,当需要在子类中修改逻辑时可以选择重写
抽象函数必须重写
里氏替换
当我们使用里式替换原则,用父类容器装载子类对象时
我们通过该父类容器调用其中的一个虚函数,执行的逻辑是父类中的还是子类中的逻辑呢?
Father Eat
Son :Father
Son EatFather f = new Son();
f.Eat();
- 若子类没有重写虚函数,那么执行的逻辑会是父类中的逻辑
- 若子类重写了虚函数,那么执行的逻辑会是子类中的逻辑(是否执行父类中逻辑,主要看子类重写时是否利用了base执行父类逻辑)
C#使用var声明临时变量相比用指定变量类型声明临时变量,在最终执行时是否会增加性能消耗?
var i = 10;
float f = 5.5f;
不会,var在编译时会被推断为正确的类型,所以在运行时不会引入额外的性能开销。
相当于在编译阶段var就会被翻译为指定的类型。
var声明临时变量只会影响代码的可读性和可维护性(双刃剑)
我们可以使用C#中的迭代器来做什么?至少说出两点
- foreach
- 协同程序
工厂模式在游戏开发中一般用来做什么
对象实例化
对于需要频繁创建的对象,比如角色、敌人、道具、特效、音效等等,工厂模式可以将实例化逻辑封装到一个工厂类中,提供统一方法给外部调用
C#中如何在函数中返回多个返回值?(至少说出3种方法)
- 数组等容器
- 结构体或类自定义数据结构
- out参数
- 元组
int[,] strArray = new int[3, 4]这个语句创建了多少个int对象?string[,] strArray = new string[3, 4]这个语句创建了多少个string对象?
12个,0个
避免装箱拆箱的方案有哪些?
- 用泛型
- 使用里氏替换原则
什么是闭包,为什么说闭包可能会带来内存泄漏?
闭包可能会捕获并持有外部作用域变量的引用。
这些引用会导致外部作用域的对象持续存在,即使它们不再需要。
C#中在字符串前面加一个@符号或者$符号有什么作用
@符号:让转义字符失效
$符号:插值字符串,可以在字符串中加入 {变量名} 插入变量值
C#中提供了序列化和反序列化2进制数据的公共类BinaryFormatter为什么我们一般还要自己去实现序列化和反序列化2进制数据的方法?
- BinaryFormatter跨平台方面不好
- 自己写更容易进行加密处理
- 节约空间,BinaryFormatter会包含一些除数据以外的额外信息
异或加密的原理是什么?请简要说明
异或加密是一种简单的对称加密算法。原理就是基于异或运算,相同为0,不同为1。
异或加密时会有一个固定的密钥
想要加密的数据与该密钥进行异或运算得到加密后的数据
加密后的数据再和密钥进行异或运算得到原数据(解密后的数据)
举例:
假设原数据为:1010
密钥为:1100
加密后的数据为:1010^1100 = 0110
解密数据:0110^1100 = 1010
程序阅读
public Father<Father<int>> Test()
{return new Son<Son<int>>();
}
这个写法是否正确?
不正确,会报错
因为Son<Son>并不是Father<Father>的子类型
如果要修改
我们可以返回
return new Son<Father>();
C#类中的函数是否占用内存空间?
占用,但是它不再我们通常说的堆栈中
而是存储在内存中的文本段(Text Segment)
它是存储可执行程序的代码的内存段
C#中的函数是何时被加载到内存中的呢?
CLR(公共语言运行时)会按需加载程序集和其中的类型和成员
程序执行到需要调用某个类的函数时
CLR 会负责将该函数的 IL 代码编译成本机代码
并将其加载到 Text Segment 中
一旦函数的代码被加载到内存中,它通常会一直存在于内存中,直到程序退出
C#函数中一般会声明一些临时变量,当函数被加载内存中后,所占的内存空间是否包含函数中的这些临时变量?
不会包含。
函数中的临时变量,不管是值类型还是引用类型都是在函数执行期间动态分配的。
这些临时变量会在堆栈中进行内存分配
栈上的内存由CLR动态管理,用完会被销毁
堆上的内存有GC垃圾回收机制统一进行管理
C#中委托的本质是什么?它是如何存储函数的?
委托的本质是一个类,当我们声明一个委托时,相当于声明了一个类。
它会默认继承System.MulticastDelegate类(多播委托类)
而这个System.MulticastDelegate类 又继承Delegate类(委托类)
这些父类当中的一些方法,就是当我们对委托进行操作时真正会调用的内容
通过这些父类中的方法我们其实可以简单推测出
委托中存储函数的本质,是通过一个委托类对象来存储对象的引用或者静态类的类型
然后再记录一个函数的名字。
但是实际上,在内部会根据这些信息定位到
1.函数的引用(函数的内存地址)
2.函数所在对象的引用(如果是实例方法)
而当我们进行 += 操作时,其实C#内部会调用父类中的Combine结合方法
在底层帮助我们声明一个新的委托对象来记录对应函数的相关信息
C#中事件的本质是什么?
我们在使用事件的时候往往是在类中声明成员变量时
当我们声明一个事件时,本质就是对委托进行私有访问限制的封装
事件的本质其实就是委托
C#中如何在函数中返回多个返回值?(至少说出3种方法)
- 数组等容器
- 结构体或类自定义数据结构
- out参数
- 元组
抽象类中的虚函数和抽象函数,是否必须在子类中重写?
子类中
虚函数的重写是可选的,当需要在子类中修改逻辑时可以选择重写
抽象函数必须重写
当我们使用里式替换原则,用父类容器装载子类对象时
我们通过该父类容器调用其中的一个虚函数,执行的逻辑是父类中的还是子类中的逻辑呢?
Father Eat
Son :Father
Son EatFather f = new Son();
f.Eat();
- 若子类没有重写虚函数,那么执行的逻辑会是父类中的逻辑
- 若子类重写了虚函数,那么执行的逻辑会是子类中的逻辑(是否执行父类中逻辑,主要看子类重写时是否利用了base执行父类逻辑)
C#使用var声明临时变量相比用指定变量类型声明临时变量,在最终执行时是否会增加性能消耗?
不会,var在编译时会被推断为正确的类型,所以在运行时不会引入额外的性能开销。
相当于在编译阶段var就会被翻译为指定的类型。
C#中属性(Property)和字段(Field)的区别是什么?
属性一般可以用来封装字段
属性相对字段来说,属性具有封装性,允许对字段进行封装,提供更多的控制和逻辑。
相比直接访问字段来说,属性允许我们在字段访问的过程汇总添加验证、计算等逻辑
属性还可以在其中对set和get设置不同的访问级别,使得字段的读取和写入可以收到更精细的控制
Unity Shader中,深度测试是在做什么?
深度测试用于确定哪些像素应该被绘制到屏幕上,并决定它们的可见性。
深度测试的主要目标是解决遮挡关系,确保前面的对象覆盖后面的对象,从而正确呈现场景
Unity Shader中某片元通过了深度测试,但是没有开启深度写入,该片元的颜色信息是否写入到颜色缓冲区?
会写入颜色缓冲区
因为深度写入和颜色写入是两个独立的操作
只要通过了深度测试,不管是否写入深度缓冲区
该片元的颜色信息都会写入到颜色缓冲区中
C#中在什么情况下会选择使用接口,什么情况下会选择使用抽象类?
接口:
1.不同对象的共同行为
2.需要多继承时
抽象类:
1.同类对象的共同行为
2.共享成员变量
C#托管内存都有哪些
比如我们平时声明的 unsafe语句块中的指针成员,数据库链接对象,Socket通讯对象,文件流等对象都存在非托管内存,需要我们自己释放
C#中new关键字的作用(至少说出3种)
- 创建新对象
- 子类函数声明时加上new关键字,可以隐藏掉父类方法
- 泛型约束中使用new关键词,表示需要无参构造
相关文章:
八股文(C#篇)
C#中的数值类型 堆和栈 值类型的数据被保存在栈(stack)上,而引用类型的数据被保存在堆(heap)上,当值类型作为参数传递给函数时,会将其复制到新的内存空间中,因此在函数中对该值类型的修改不会影…...
【YOLOv9算法原理简介】
YOLOv9算法原理 单阶段检测器:YOLOv9延续了YOLO系列的单阶段检测器设计,即在单次前向传播中同时预测边界框和类别概率,这使得它能够实现快速的检测速度。通用高效层聚合网络(GELAN) :YOLOv9引入了一种新的模型架构GELAN,它通过高效的层聚合块和计算模块,以较小的参数量…...
2010NOIP普及组真题 2. 接水问题
线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1950 解法一、朴素模拟 核心思想: 朴素模拟: 1、先给每个b[i]水龙头分配一个人a[i],b[i] 表示水龙头的剩余时间。同时标记该水龙头为 used 使用中 2…...
ElementUI从unpkg.com完整下载到本地的方法 - 解决unpkg.com不稳定的问题 - 自建镜像站 - 不想打包只想cdn一下
方法 方法1)随便弄个文件夹,根据官网npm方法下载包,提取即可 npm i element-ui -S cd /node_modules/element-ui/ ls src 安装npm方法:https://nodejs.org/en 方法2)不推荐 - 在github中搜索对应的库zip包࿰…...
什么是BFF API
BFF(Backend For Frontend)API 是一种架构模式,旨在为特定的前端应用(如移动应用、桌面应用或网页应用)提供定制化的后端服务。通过这种方式,后端可以根据前端的具体需求和特性,提供最优化的数据…...
分享自己一篇在亚马逊云科技AWS官网发的Blog技术文章
小李哥在亚马逊AWS官网,作为第一作者发了自己的第一篇AWS Blog文章,也是自己今年在AWS官网的第11篇文章。文章主要内容是描述为出海的金融企业,搭建满足PCI-DSS合规、FIPS 140-2 Level 3安全标准的传输中数据加密云端方案,主要用于…...
封装长按触发事件的uniapp组件
简单说一下原理 首先介绍三个针对触摸屏设备的事件,分别是: touchstart:当手指触摸屏幕时触发,即触摸开始的时候;touchend:当手指离开屏幕时触发,即触摸结束的时候;touchcancel&am…...
Docker 安装的MySQL迁移数据库
1. 导出数据库 docker ps :查看数据库对应的 CONTAINER ID docker exec -it id /bin/bash : 进入到mysql的docker实例中 cd /usr/bin : 进入到bin目录 mysqldump -u root -p123456 study > /root/study_backup0509.sql :使用mysqldump备份库,注意密码与-p之间…...
算法训练Day28 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II
122.买卖股票的最佳时机II class Solution { public:int maxProfit(vector<int>& prices) {vector<int> dp(2,0);dp[0] -prices[0];for(int i1; i<prices.size(); i){dp[0] max(dp[0], dp[1]-prices[i]);dp[1] max(dp[1], prices[i]dp[0]);}return dp[1]…...
Linux(openEuler、CentOS8)基于chrony企业内网NTP服务器搭建实验
一、知识点 chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的 chronyd 在后台静默运行并通过 123 端口与时间服务器定时同步时间,默认的配置文件是 /etc/chrony.conf chronyc 通过 323 端口与 chronyd 交互,可监控 chronyd 的性能并在运…...
前端开发框架Vue
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Vue概述 Vue.js(简称Vue)是由尤雨溪(Evan You)创建并维护的一款开源前端开发框架。Vue以其轻量级、易上手和高度灵活的特点&…...
Vue2中引入ElementUI
Vue中引入ElementUI 目录 Vue中引入ElementUI安装 全库导入main.py使用 仅引入样式文件main.py使用 安装 官方文档 npm i element-ui -S全库导入 main.py import ElementUI from element-ui;Vue.use(ElementUI)使用 <template> <div class"main">&l…...
华中科技大学雷达站部署
一:项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二:安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成,所以创建虚拟环境的时候,选择3.8的虚拟环境 conda create -…...
小程序引入 Vant Weapp 极简教程
一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行(winr,输入cmd)输入 node -v若显示版本信息,即为安装成功 2. 在 小程序根目录 命令行/终端…...
labview技术交流-将时间字符串转换成时间格式
应用场景 我们在数据库中设计了datetime类型的字段,比如字段名就叫“保存时间”,当我们使用labview将表中数据读取出来后datetime类型的数据是以字符串的格式显示的。而我们想计算两条数据“保存时间”的间隔时间时,用字符串类型自然是没法计…...
算法提高之迷宫问题
算法提高之迷宫问题 核心思想:最短路问题 从(n-1,n-1)开始bfs 往前走一个就存入pre数组 之后再遍历pre数组输出 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 1010,M N*N;#define x first#def…...
泛微E9开发 通过点击按钮来复制选择的明细行
泛微E9开发 通过点击按钮来复制选择的明细行 复制明细行功能背景展示效果实现方法 复制明细行 功能背景 用户可以通过“复制明细”按钮来实现新增选择的明细行,并且新增明细行的数据跟选择的数据完全一样,具体操作如下图所示: 手动新增明细…...
sqlalchemy 分表实现方案
1.需求及场景概述 现有系统中因历史数据量过大,产生了将历史数据进行按月存储的要求,系统和数据库交互使用的是sqlalchemy,假设系统的原来的历史记录表(record)如下: 为了将历史数据按月分表存储࿰…...
QML进阶(十五) QML各种标准元素的用法
文章目录 文本图像控件TextTextInputTextFieldTextEditTextAreaImage按钮控件ButtonRadioButtonCheckBoxComboBox进度控制控件ProgressBarSlider...
【工具使用】快速实现Makefile模板的方法
一,简介 我们在使用gcc编译程序时,常常需要自己实现Makefile,那么如何快速的实现Makefile呢?这里把一些基本的操作整理成模板,供参考。 二,模板介绍 功能包含基本功能编译exe(包括调用其他算…...
Linux-信号执行
1. 信号什么时候被处理 当进程从内核态返回到用户态的时候,进行信号的检测和处理 什么内核态,什么又是用户态呢? 当进程在CPU上运行时,内核态:允许进程访问操作系统的代码和数据,用户态:进程只…...
在线听歌播放器 梨花带雨网页音乐播放器 网页音乐在线听 源码
最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 下 载 地 址 : runruncode.com/php/19749.html 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容:修复播放器接口问题&am…...
免费生成证件照
分享分享,免费福利,欢迎大家来体验!!! 不知道你是不是会时不时有使用证件照需求,这一个小程序,可以生成常见尺寸的证件照,全程免费,有需要的可以动动小手,体…...
深入探索数据链路层:网络通信的基石
⭐小白苦学IT的博客主页⭐ ⭐初学者必看:Linux操作系统入门⭐ ⭐代码仓库:Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在网络通信的宏伟世界中,数据链路层扮演着至关重要的角色。它位于物理层和网络层之间,不仅直接…...
STM32使用L9110驱动电机自制小风扇
1.1 介绍: 该电机控制模块采用L9110电机控制芯片。该芯片具有两个TTL/CMOS兼容输入端子,并具有抗干扰特性:具有高电流驱动能力,两个输出端子可直接驱动直流电机,每个输出端口可提供750800mA动态电流,其峰值…...
C语言——队列的实现
队列按照先进先出(FIFO,First In First Out)的原则管理数据。这意味着最先进入队列的元素会被最先移出,类似于排队等候服务的情况。队列通常有两个主要操作:入队(enqueue),将元素添加…...
15-LINUX--线程的创建与同步
一.线程 1.线程的概念 线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。 2.线程的三种实现方式 ◼ 内核级线程:由内核创建,创建开销大,内核能感知到线程的存在 ◼ 用户级线程:线程的创建有用户空…...
【退役之重学Java】如何解决消息持续积压等问题
一、将读写数据库等耗时的操作,从消费者逻辑中抽取出来,专门部署机器去完成这部分操作。...
Linux下的SPI通信
SPI通信 一. 1.SPI简介: SPI 是一种高速,全双工,同步串行总线。 SPI 有主从俩种模式通常由一个主设备和一个或者多个从设备组从。SPI不支持多主机。 SPI通信至少需要四根线,分别是 MISO(主设备数据输入,从设备输出),MOSI (主设数据输出从设备输入),SCLK(时钟信号),CS/SS…...
【转载】数字化工厂规划蓝图报告
制造业进入到全新的数字化时代,需要构建新型智能工厂、数字化工厂与智能车间以助力传统产业智能制造升级,将新一代信息技术贯穿到设计、工艺、生产、物流等各个环节。目的是完善创新体系、提升产品质量、推行绿色制造、增强核心竞争力、发展现代化客户体…...
wordpress idstore/搜索引擎优化关键词的处理
1)将扫描枪电缆的一端与网络电缆的水晶头连接到扫描枪底部的插座。 当您听到“喀哒”声时,请再次将其拉回。 电缆不会滑出以表示已插入。另一端插入计算机上的相对端口号(此处以USB接口为例)。 此时,计算机的右下角将提醒您自动安装硬件配置驱动程序软件…...
wap网页编写/seo新人怎么发外链
1. 创建版本库 1.1 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: 1.2通过git init命令把这个目录变成Git可以管理的仓库(git进入空目录的路径) $ git init Initialized empty Git repo…...
wordpress插件的作用/十大中文网站排名
为了画个图,被numpy这个模块的安装真的折腾疯了!!!一直装不上,花了几个小时,看了网上的很多教程、方法发现总结得不是很全,这里总结一下,防止大家再出现这个问题没有解决方法。Pytho…...
网站运营与管理论文/南宁网络推广平台
1.1.0、学习目的理解 File 类的作用和意义参见 1.1.1 概述部分理解 File 类中的常量的含义和作用参见 1.1.2 常量部分掌握通过构造方法创建 File 实例参见 1.1.3 构造方法 部分掌握 File 类中的实例方法参见 1.1.4 实例方法部分了解 File 类中的类方法参见 1.1.5 类方法 部分理…...
专门做二手手机的网站/百度搜索网页
python如何识别图片中的文字,这里给个案例并附上详细步骤:模块包的安装:1、安装PIL:pip install Pillow2、安装pytesser3:pip install pytesser33、安装pytesseract:pip install pytesseract4、安装autopy3…...
房屋产权地址备案在那个网站做/企业培训公司有哪些
第一次观看我文章的朋友,可以关注、点赞、转发一下,每天分享各种干货技术和程序猿趣事 前言 职场的金三银四跳槽季又来了,不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息&…...