1.面向对象的语言特性?
A:封装性、继承性、多态性。
2.在.NET中所有类的基类是?
A:。
3.在C#中,&和&&的区别?
A:是按位与运算符(或取地址运算符),是条件与运算符(也叫逻辑与运算符)。
4.委托声明的关键字是?
A:。
5.在.NET中所有可序列化的类都被标记为?
A:。
6.一个类不想被继承应该?
A:标记为。
7.简单描述CLR?
A:类似于java的JVM虚拟机。.NET平台的程序会运行在CLR上,CLR自动进行资源分配和垃圾回收,某种程度上分离了系统和应用。
8.如何对数组的元素进行倒序排列?
A:后。
9.HTTP定义的基本的与服务器交互的方法有?
A:4种,分别是:GET获取、POST新建(也可以更新)、PUT更新、DELETE删除。
10.单点登录常用的实现方法有?
A:
- 存放用户凭证在中,但是依赖不太安全而且无法跨域
- 使用,和差不多,虽然能解决跨域但加密算法泄露还是不安全
- ,现在比较常见的方式,通过反复重定向来验证,因为所有信息都存在服务端,所以即使知道了加密算法也无法登录,比较安全。但是项目调用比较复杂。
11.什么是继承?什么是重载?
A:继承指子类可以拥有父类允许访问的属性、方法等。重载是一个函数通过参数类型或者数量区分不同的实现。
12.什么是接口类?
A:定义了一组行为的集合,其中的方法不能有具体实现。
13.什么是虚函数?什么是抽象函数?
A:虚函数是子类可以被的(也可以不)函数,在父类中必须实现。抽象函数必须存在于抽象类中,不允许有具体实现,它的子类必须实现该方法(有点像接口中的方法)
14.在ASP.NET页面之间传递值除了,还有什么其他方法?
A:(基于字典),(基于)
15.中常用的对象有哪些,其作用分别是什么?
连接数据库,执行sql语句,查询数据后填充到,中包含存放数据。
16.什么是SQL注入,如何防止SQL注入攻击?
A:代码没有过滤特殊字符时,在执行sql语句处填入;等之类的字符来截断语句后再输入要执行的sql语句(删表等)来对数据库进行攻击。可以使用(把所有参数当字符串而不是关键字来处理)或者来避免。
17.使用递归输出斐波那契数列,并输出第X项。
18.将字符串逆序输出为””。
19.原生js的?
20.在SQL环境下,写一个T-SQL函数,求从今天往后数的7000天,所在日期的当月有多少天?
网上抄的
21.写一个存储过程,可以清空任意一个表的数据?
22.请列出UML中几种视图的名称,并解释其中两种视图的作用?
23.请描述设计模式的含义,并写出你所了解的几中设计模式的名称?
A:通过面向对象特性更好的解耦代码,用过单例和工厂。
24.如何部署一个ASP.NET项目?
A:VS发布到文件夹,拷到服务器上,IIS指定目录并绑定IP(域名)。
25.写出验证中国移动手机号码的正则表达式?
A: (不知道中国移动的开头是啥)
26.如何在所有页面加载时输出内容?
A:使用中间件或者。
27.什么是串行化?
A:将数据使用从保存到二进制文件,这种文件大小都是2的X次方。
28.用一个文件描述你自己?
29.判断一个字符串中出现次数最多的字符,并统计这个次数?
A:遍历字符串,创建字典,以为,默认,如果字典中包含则。最后输出字典
30.什么是装箱和拆箱?
A:值类型到是装箱,到值类型是拆箱
31.C#中委托是什么?事件是不是一种委托?
A:委托是传递一个方法的引用,类似函数指针。事件是一种特殊的委托。
32.和重载的区别?
A:是重写方法的关键字,重载指一个方法的不同实现。
33.什么叫应用程序域?
A:就是程序之间的边界,可以理解一个程序是一个应用程序域。
34.什么是不受管制的代码?
A:关键字里写的非托管代码。不经过CLR运行。可以写指针等骚操作。
35.和的区别?
A:表示不存在于内存中没有地址,“”表示存在于内存中的“”这个对象
36.描述和异同?
A:是引用类型放在堆上的,是值类型放在栈上的。
37. 能用遍历访问的对象需要实现_____接口或声明_____方法的类型。
A:接口、方法
38.GC是什么?为什么需要GC?
A:GC()是垃圾收集器。中垃圾收集器会自动对内存垃圾进行回收管理,因为有了CLR的机制。正常情况下,.net会自动的帮忙释放内存,如果非托管代码,则需要手动释放,比如、。
39.接口可否继承接口?抽象类可否实现接口?抽象类可否继承实体类?
A:接口可以继承接口。抽象类可以实现接口。
抽象类可以继承实体类 (但是实体类必须有可访问的构造函数,所有类都无法继承只有构造函数的实体类)。
40.try里有一个语句,那么中的代码会不会执行,在前还是后?
A:会,在前执行。看反编译会发现的代码放在了函数出口之前。
41.两个对象值相同,但可能有不同的,这个说法对吗?
A:比较地址,比较值*(等比地址Equals值)*。两个对象值相同则表示拥有相同的。
42.进程和线程的区别?
A:进程是系统进行资源分配和调度的单位;线程是CPU分配和调度的单位。一个进程可以有多个线程,这些线程共享这个进程的资源。(进程是系统层面,线程是CPU层面。线程∈进程)
43.堆和栈的区别?
A:栈上放的是由编译器自动分配释放的资源。堆上放的是代码中自己分配释放的资源,比如对象时分配的内存空间。
44.请指出GAC的含义?
A:()全局程序集缓存。应该是指常用到的dll(比如)会缓存在一个指定的文件夹下,别的程序再使用的话就直接调用,不用重新加载了。em…没折腾过。
45.和有什么区别?
A:是读取数据库的(游标类似)。是用来存放数据的。
46.软件开发一般有几个阶段?每个阶段的作用?
A:需求分析,详细设计(架构设计),代码编写,测试,部署```
47.什么是强类型?什么是弱类型?哪种更好?为什么?
A:需要在编译时定义变量类型的是强类型,比如不需要指定类型的为弱类型如js 好坏看业务需求,各有千秋。
48.什么是反射?
A:在程序运行时动态获取程序集信息:接口、类、方法、属性等。
49.编程求从0-1000一共输出了多少个0?需要JS和C#?
50.表如下:用一条SQL语句显示如图的结果?
51.NET中关键字根据什么来产生边界(线程同步)?
A:静态变量。()
52.在.NET中引入和关键字的根本原因是什么?
A:方法中操作的对象的地址和传入的参数地址不一致。ref修饰的变量在方法中改变值时候,实际参数也会改变。
53.NET中的关键字和关键字的异同?
A:要重写的方法都需要关键字,但是是重写了父类的方法,调用的话是子类重写后的方法;是重新写了一个同名的方法,隐藏了父类的方法。如果把子类强制转换为父类的话调用还是父类的方法,而则调用子类重写的方法。
:.NET MVC框架是通过什么来解析HTTP请求的。
A:请求的method。。。。(一时半会没理解)
54.MD5实质是?
A:一种哈希(hash)散列算法。将字符串转换为字节数组后计算数组的hash值。
55.分布式分类?
A:
- 应用分布式:程序部署在多台机器上
- 缓存分布式:缓存部署在多台机器上
- 数据库分布式:数据库部署在多台机器上
我当时就这么瞎几把回答的
56.后台接口如何鉴权?比如开发了一个后台管理系统,如何防止别人拿到你请求的接口恶意攻击?
A:使用访问。或者使用
57.纯项目,前端请求的用户信息存储在哪里?
A:web的话。不同端有不同的存储方式。
58.生命周期?
A:四种两类。(vue对象)创建前/后,挂载前/后(vue挂载到页面),更新前/后,销毁前/后。
59.多线程的线程同步如何实现?
A:
- 使用关键字创建临界区
- 读写锁
- 系统级别的:信号量(Semaphore),互斥(Mutex),事件(AutoResetEvent/ManualResetEvent) 。线程池
- 信号量():
- 互斥():
- 事件()
与区别是的方法一次释放所有挂起的线程,在之后又自动将后续线程挂起,需要再次。相当于在之后执行
- 线程池(em…暂时看不懂搜出来的东西
60.redis大数据并发(例如秒杀活动,放到redis时并发怎么处理)?
A:为加锁,别的进程判断如果锁存在则等待,直到锁被释放(通过时间戳等机制优化解决死锁)
61.(与区别)、UML用过吗?
A:用过,与的区别是有机制不是所有数据都放在内存中,会放磁盘一部分(重启不丢失)。redis支持更多数据类型(),是单线程。单个最大只支持1MB,最大支持512MB。UML没用过。
62.数据库锁了解过吗?
A:共享(S)锁、排它(X)锁、更新(U)锁。
63.EF避免脏读?
A:我们只需要在实体中增加一个类型的字段,并为其加上特性:
这样在更新或删除操作生成的Sql中,语句将包含 条件,如果有其它用户更改过此行,那么行版本将不一致,因此更新或删除sql会无法找到要更新的行,此时EF将认定该操作出现了并发冲突。
如果是控制某个列的并发,将特性添加到实体需要控制并发的非主键属性上即可。
64.什么是事务?
A:数据库的一种机制,在开启事务之后的操作中(如果发生了业务异常)可以将数据库回滚到开启事务之前的状态。
65.说说你知道的数据库优化方式?
A:
- 建立索引
- 使用存储过程
- 使用视图
- 优化查询语句
66.数据库索引使用需要注意什么?什么是视图?如何做查询优化?
A:
- 一个表内索引最好不要太多,一般在主键和经常做条件或者或者的列上创建索引,如果表数据太小索引反而会影响性能。
- 视图是由一张或多张表联合查询出的虚拟表,复杂查询使用视图来代替联表查询会提升性能。
- 查询语句优化一般尽量避免全表扫描,以下几点会全表扫描:
- 使用null判断,会全表扫描。
- (不等于)判断,会全表扫描。
- 使用,会全表扫描。
- 左右模糊查询,会全表扫描。
- 尽量使用代替,会全表扫描。
- 尽量不要在语句中判断运算后的结果,会全表扫描。
67.什么是跨域?如何解决跨域问题?
A:跨域是为了限制JS和Cookie只能访问同域名下的资源。解决可以使用,nuget有现成的包,原理是在HTTP报文头中添加标识来控制。比如: 代表允许访问。
68.Http管道模型是什么?是什么?是什么?中间件是什么?
A:
- Http管道模型是指一个请求一层一层达到,然后再一层一层出去的过程像个管道一样。
- 是ISAPI的通过后缀名然后转发到不同的处理程序。比如会调用处理页面。
- 是请求在管道中经过的模块,可以自行编写实现身份认证、过滤器等功能。
- 中间件类似于,也是在请求在管道中经过的模块,区别是基于事件。
(我是这么答的)
69.堆栈区别?
A:堆上存放引用类型数据,需要手动开辟内存空间(new的时候)。栈上存放值类型数据,不需要手动开辟内存空间。
70. 数组是否值类型?
A:数组都是引用类型,继承自,而继承自,众所周知值类型都是继承的。
71.数组扩展长度内存操作原理 ?
A:(这个面试官问的我到现在还没有理解他想问什么?可能是想问List在Add时候的扩容过程)
如果有人问数组扩容或者List在Add时超出长度在内存中的过程就回答:如果新添加的元素超出数组长度则一个更大的数组将原来数组过去。
72.数组和集合区别 ?
A:数组声明时是定长的,且声明类型比如,内存上是连续存储的。
集合则可以一直添加元素,声明时不一定声明类型(使用泛型)比如。
73.内存怎么分布,时呢?
A:
- 由于CLR的字符串驻留机制只存有一份。所以当;时a和b都指向了这个字符串的引用。
- 当时是把的引用了一份给。
74.分布式锁原理?
A:通过某种方式加一把锁,让分布式程序执行方法时获取锁,保证 同一个方法同一时刻只能被一台机器上的一个线程访问。
一般实现有:
- 通过数据库实现(加一条记录去读取之类的)。
- 通过实现。
- 通过(不知道是啥)。
75.五种数据类型?
A:
- (值不唯一,可以通过pop实现简单消息队列)
- (值唯一)
76.rabbitMQ中交换机的理解?
A:消息(Message)由发送,接收到消息之后通过交换机转发到对应的队列上面。会从队列中获取未被读取的数据处理。
包含四种不同的交换机类型:
- :直连交换机,转发消息到指定的队列
- :扇形交换机,转发消息到所有绑定队列(速度最快)
- :主题交换机,按规则转发消息(最灵活)
- :首部交换机 (未接触)
(抄的,只跑过收/发消息的demo)
77.和的区别?
A:是编译时定好无法改变的。归根结底还是对象中的属性,是动态的,只不过修饰为只读而已。
78.扩展方法是动态还是静态?怎么写扩展方法?
A:扩展方法是静态的,只能存在于静态类中。写法跟函数差不多,第一个参数必写为 要扩展的类型 ,然后则是调用扩展方法的对象本身,比如扩展一个类的方法:
79.IOC相关理解?
A:接口定义业务方法,A具体实现。通过将实现类A注入到中,这样调用时虽然看起来是,其实执行的是实现类中的方法。实现了面向接口编程,降低对实现类的耦合。
80.DDD的理解和认识?什么是失血/贫血/充血/胀血模型?
A:可以通过聚合、实体等概念梗清晰的描述业务,底层的CQRS(读写分离)、UOW(,自动实现事务)、仓储层都很好用。
- 失血模型:领域模型只有。没有任何实体业务逻辑,完全依赖调用。
- 贫血模型:领域模型除了后包含一些简单的实体组装逻辑,还是依赖调用。
- 充血模型:领域模型包含层的东西比如持久化,调用变为
- 胀血模型:取消层,直接通过来调用执行业务
(血越多领域层越复杂,对service层依赖越小)
81. NET4.5 / 4.6以及历史版本的区别?
A:
- .NET 3.0 引入WPF、WCF、WF。使用CLR 2.0,对应C# 3.0;
- .NET```3.5 引入Linq、EF、扩展方法、特性、Lambda。使用CLR 2.0,对应C# 3.0;
- .NET 4.0 增加了并行的支持。使用CLR 4.0,对应C# 4.0;
- .NET 4.5 增加了Task异步编程模型(async/await)。使用CLR 4.0,对应C# 5.0;
- .NET 4.6 优化(好像同时发布/引入了ASP.NET Core)。使用CLR 4.0,对应C# 6.0;
- .NET 4.6.2 对应C#7.0
82. SqlServer使用SQL分页怎么实现?
83.的原理?
A:把所有参数当字符串而不是关键字来处理。
84. IIS应用程序池经典模式和集成模式区别?
A:
- 经典模式:兼容IIS6.0,继续通过C盘下来处理请求。
- 集成模式:使用IIS和ASP.NET的集成请求处理管道来处理请求。
85.如何全局处理异常?
A:使用中间件记录处理异常,或者使用来捕获全局异常。
86.说说Webapi的风格的了解?post和put的区别?
A:对同一个接口地址通过不同的请求Method编写不同的逻辑。一般包括四种:
- get:查询
- post:添加
- put:更新
- delete:删除
因为put一般代表更新操作,所以是幂等的,更新一万次对象还是存在。而post则不是幂等的,多次post会创建多个数据。
87.:nuget包上传管理流程?
A:
- nuget官网下载nuget.exe
- cmd```命令:nuget pack生成x.nupkg文件
- 登录nuget官网创建一个密钥
- cmd命令:
- 上传完成,可在VS中搜索到
88.简述.NET CORE中IOC生命周期?
A:
- (瞬间的):每次使用(获取这个服务的时候)时都会创建新的服务,适合轻量级的服务。
- (作用域的):在同一次请求中只存在一次的服务。
- (唯一的/单例的):全局只创建一次的服务,第一次被请求的时候被创建,然后就一直使用同一个。
89.简述中间件?
A:中间件是在管道中处理请求的组件,处理完后可以传递给下一个组件。通过在类的方法中使用来使用中间件并可以调整顺序。
中使用来构建管道模型,所以自定义的中间件需要根据约定来实现,注意有三点:
- 中间件内要定义一个只读的类型的变量作为调用下一个中间件的委托。
- 构造函数中要定义类型的参数并赋给类里的变量,会将请求注入进来。
- 定义一个类型的名为的函数,参数为,在其中写中间件的逻辑,并在最后记得返回类中的对象,传递。.NET CORE会自动执行方法。
88.sql行转列,实现效果如下的操作?
89.sql 分组,怎么用?
A:跟在后面,像一样使用,来筛选分组后的数据。比如:
90.去除字符串中连续空格,多个空格变为一个?
A:使用正则匹配之后替换: