.net相关知识点总结
基础知识
[1]静态构造函数(执行一次,调用静态成员或实例化时执行一次)
[2]抽象类和接口的区别
1:抽象类有字段,构造函数,非抽象方法(C#新版本接口可以定义方法体),接口没有
2:抽象类不可多继承,接口可以
3:接口成员默认修饰符为public,不可显示声明其他修饰符,抽象类成员可使用多种访问修饰符
[3]值类型(int,float,dobule,bool,char,stru)直接存放在栈上,
引用类型(string,interface,class,detegate,event)地址引用存放在栈上,数据存放在堆上。
当值类型作为引用类型的成员时,可能数据会被存放到堆上,垃圾回收器会自动回堆上的数据
当栈上的引用地址超出作用域或者被销毁时,对堆上的引用会被删除,而垃圾回收器的机制是回收堆上没有被引用的数据
装箱:把值类型转换成引用类型
拆箱:把引用类型转换成值类型
装箱:对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。
(1)第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针。
(2)第二步:将值类型的实例字段拷贝到新分配的内存中。
(3)第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。
拆箱:检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。
在装箱时是不需要显式的类型转换的,不过拆箱需要显式的类型转换。
int i=0;
System.Object obj=i; //这个过程就是装箱!就是将 i 装箱!
int j=(int)obj;//这个过程 obj 拆箱!
[4]const和readonly有什么区别?
都可以标识一个常量。主要有以下区别:
1、初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值;
2、修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段
3、const是编译时常量,在编译时确定该值;readonly是运行时常量,在运行时确定该值。
4、const默认是静态的;而readonly如果设置成静态需要显示声明
5、修饰引用类型时不同,const只能修饰string或值为null的其他引用类型;readonly可以是任何类型。
[5]1byte=2V8(0-255)=1个字符=0.5个汉字
[6]ref外部初始化 out内部初始化
[7]&和&&都可作为逻辑与,但是&&具有短路功能
[8]class可以被实例化,属于引用类型,
class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的
struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的.
[9]new关键字的作用
运算符:创建对象实例
修饰符:在派生类定义一个重名的方法,隐藏掉基类方法
约束:泛型约束定义,约束可使用的泛型类型
[10]C#中类(class)与结构(struct)的异同?
class可以被实例化,属于引用类型,
class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的
struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的
[11]C# 中static关键字的作用?
对类有意义的字段和方法使用static关键字修饰,称为静态成员,通过类名加访问操作符“.”进行访问; 对
类的实例有意义的字段和方法不加static关键字,称为非静态成员或实例成员。
注: 静态字段在内存中只有一个拷贝,非静态字段则是在每个实例对象中拥有一个拷贝。而方法无论是否
为静态,在内存中只会有一份拷贝,区别只是通过类名来访问还是通过实例名来访问。
[12]虚函数:有方法体,在子类中可选择性重写,抽象函数:只有定义,必须在子类中重写
[13]能用foreach遍历访问的对象的要求
需要实现IEnumerable接口或声明GetEnumerator方法的类型
[14]is和as有什么区别?
在C#中,is是用来判断类型A能否转化为类型B,一般用来作有继承关系的父类与子类是
否可以相互转化的判断。而as是将类型A转化为类型B,一般也是用来做子类与父类的转换
[15]new关键字作用 1、创建对象 2、隐藏父类成员 3、约束
[16]MySQL有多种存储引擎(主要有MyISAM,InnoDB(默认))
InnoDB 索引和数据为同一个文件,MyISAM索引和数据文件分开
InnoDB 支持事务,MyISAM 不支持
InnoDB 支持外键,而 MyISAM 不支持
InnoDB 必须要有主键,MyISAM可以没有主键
InnoDB支持行锁,MyISAM不支持行锁
【16x】MVCC 版本控制机制
【16xx】如何减少死锁
1、尽量不要长事务,降低持有锁时间
2、多个事务应保持获取资源顺序一致
3、如果允许幻读和不可重复读问题出现,可降低事务隔离级别到(读已提交)
[17] 索引类型
第一个维度
聚集索引:只能有一个,字段值只必须唯一,一般为主键,索引记录为物理顺序
非聚集索引:可有多个,字段值不要求唯一,索引记录为逻辑顺序
第二个维度(字段类型)
主键索引、唯一索引、普通索引
第三个维度(索引字段个数)
单个索引、组合索引
[18] 前提带Where条件,如果没有Where条件两者相同
IEnumerable<T> :Where在内存中处理
IQueryable<T>:Where在数据库中处理
[19]C#中的集合类型:Array,List,LinkedList,Dictionary,HashSet,Queue,Stack,SrotedList....
[20]Redis的数据类型:String,Hash,List,Set,SortSet
[21]
SqlServer两种分页查询方式
1、Select * from (Select *,Row_Number() OVER(Order by Id) as Idx from TableName) tab where Idx Between PageSize*(PageIndex-1)+1 and PageSize*PageIndex
2、Select * from TableName Order by Id offset PageSize*(PageIndex-1) rows fetch next PageSize rows only
Mysql分页查询
Select * from TableName order by Id limit PageSize*(PageIndex-1),PageSize
EF分页
SKIP 偏移量 TAKE 取数据条数
SqlSugar分页
ToPageList(偏移量、页数、ref 总数)
[22] redis事务和redis lua脚本都能实现redis操作原子性,lua脚本在服务器执行,不用频繁连接redis,性能更高
【22xx】redis为什么快
1、基于内存
2、高效的数据结构
3、指令执行为单线程,避免上下文切换
4、IO多路复用,IO/网络未多线程
【23】线程安全的集合:System.Collections.Concurrent命名空间下的集合
【24】.NETCORE消息管道添加中间件 IApplictionBuilder.Use和Run的区别
.Use()方法用于在请求处理管道中添加中间件。.Run()方法用于在请求处理管道的末尾添加一个终端中间件,它处理请求并生成响应,然后停止处理。
app.Use(async (context, next) =>
{
// 这里可以编写你的“中间件”逻辑
Console.WriteLine("开始处理请求"); // 调用下一个中间件(如果有的话)
await next.Invoke(); // 结束处理
Console.WriteLine("结束处理请求");
});
// 使用Run作为终端中间件
app.Run(async context =>
{
// 这里是直接处理请求的地方,不会调用下一个中间件
await context.Response.WriteAsync("Hello, World!");
});
【2x】如何理解IOC
IOC控制反转是一种设计思想,用于程序解耦,从依赖具体变成依赖抽象
控制反转是将依赖对象的创建交给第三方,比如我们常说的IOC容器,IOC容易负责管理对象的创建、生命周期,再通过依赖注入的方式对象通过构造函数/方法注入到需要使用的地方。
IOC内部实现方式是通过管理一个具体和抽象的映射关系表,然后通过反射去动态创建具体的对象
【2xx】如何理解AOP切面编程
将一些非业务性的通用逻辑从业务代码剥离,使其不再侵入业务代码。实现方式可以通过特性打标记的方式。.net中实现aop的方式是过滤器。
也可以自定义一个特性,然后通过反射+代理类的方式实现aop
【2xxx】关于异步编程
.net中异步编程一般标记为async await,返回类型是一个Task。默认借用线程池。
async await为语法糖,底层实现是一个状态机,每一次await相当于一次检查点,检查await后面任务的当前状态。
实现异步编程最大的优点是不会阻塞当前线程,就是说如果遇到耗时操作,会马上释放掉当前线程,切换到线程池中另外一个线程来接着完成后续任务
还有一点就是,使用await可以捕获到异步任务中的异常
【25】 值类型:数据直接存放在栈上
引用类型:数据存放在堆上、引用存放在栈上,由GC回收(回收堆上没有被栈引用的空间)
值类型赋值给另外一个变量的过程:在栈上开辟空间,将栈上数据拷贝过来
引用类型赋值给另外一个变量的过程:在栈上开辟空间,将栈上引用地址拷贝过来
关于GC回收原理:
回收时首先会将托管堆中内存标记为被引用、未被引用。然后删除未被引用的内存空间,再进行压缩,类似于磁盘整理。最后根据分代算法进行优化。
【26】
IOptions<T>:单例,不支持配置变化通知。IOptionsSnapshot<T>:作用域,支持配置变化通知(仅在请求作用域内)。IOptionsMonitor<T>:单例,支持配置变化通知,并提供了额外的功能,如获取历史配置和订阅变化通知。- IOptions<>是单例,因此一旦生成了,除非通过代码的方式更改,它的值是不会更新的。
IOptionsMonitor<>也是单例,但是它通过IOptionsChangeTokenSource<> 能够和配置文件一起更新,也能通过代码的方式更改值。
IOptionsSnapshot<>是范围,所以在配置文件更新的下一次访问,它的值会更新,但是它不能跨范围通过代码的方式更改值,只能在当前范围(请求)内有效。
.net相关知识点总结的更多相关文章
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...
- 学习记录013-NFS相关知识点
一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
- Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳
前言: 通过检索论文.书籍.博客,继续学习Caffe,千里之行始于足下,继续努力.将自己学到的一些东西记录下来,方便日后的整理. 正文: 1.代码结构梳理 在终端下运行如下命令,可以查看caffe代码 ...
- php正则相关知识点
关于正则,其实简单就是搜索和匹配.php,java,python等都是支持正则的,php正则兼容perl.好多同学觉得正则比较难,比较抽象,其实正则是非常简单的,主要是一个熟悉和反复练习的结果,还有一 ...
- MySQL自增列(AUTO_INCREMENT)相关知识点总结
MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...
随机推荐
- Coap 协议学习:1-有关概念
COAP协议简介 不像人接入互联网的简单方便,由于物联网设备大多都是资源限制型的,有限的CPU.RAM.Flash.网络宽带等.对于这类设备来说,想要直接使用现有网络的TCP和HTTP来实现设备实现信 ...
- UNR #7 Day2 T1 火星式选拔题解
放一个比赛链接 先考虑打完暴力后 \(k = 1\) 的特殊性质. 当队列容量为 \(1\) 时,队中的人 \(i\) 会被第一个满足 \(i \leq j\) 且 \(b_i \leq a_j\) ...
- Java报表开发工具总结
Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具. 支持Java的报表工具 支持Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用,这样的 ...
- Simple WPF: WPF自定义一个可以定义步长的SpinBox
最新内容优先发布于个人博客:小虎技术分享站,随后逐步搬运到博客园. 通过WPF的按钮.文本输入框实现了一个简单的SpinBox数字输入用户组件并可以通过数据绑定数值和步长.本文中介绍了通过Xaml代码 ...
- Java-JSTL标签简化和替换jsp页面上的java代码
概念:JavaServer Pages Tag Library JSP标准标签库 作用:用于简化和替换jsp页面上的java代码 使用标签: 导入jstl相关jar包 引入标签库:taglib指令:& ...
- log4cpp的安装及使用
目录 前言 安装 使用 示例代码 配置文件 编译链接 输出 前言 本文的操作均在ubuntu20.04下进行 安装 本文仅介绍从源码编译安装log4cpp的过程. ①在开始编译前,首先要确保系统中安装 ...
- UE Spline 样条网格体组件添加碰撞
最近做的一个功能是通过Spline 生成管道模型. 如下图所示: 遇到的一个问题是需要给生成的管路加上碰撞.其中需要两个重要的步骤: 设置SplineMeshComponent的碰撞预设 找到&quo ...
- 学习笔记--Java方法中的注意事项
Java方法中的注意事项 方法调用 Java的方法在同一个类中调用,可以省略 类名. /* 方法调用 */ public class MethodTest03{ public static void ...
- 关于导入react native项目导致运行异常的那些事
从git上导入公司的项目,在本地运行的时候,项目无法运行.sdk,jdk,node都是使用公司规定的版本,项目中的local.properties文件sdk.dir路径也换成了自己本地的目录,结果就在 ...
- 云端IDE如何重定义开发体验
豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量.它支持多种编程语言和IDE,提供智能代码补全.代码解释.单元测试生成和问题修复等功能,同时具备AI对话视图和 ...