C#基本面试题

重写和重载

重写:

  • 要求:(三大同)参数相同,方法名相同,返回值相同

  • 关键字:基类函数用virtual修饰,派生类用override修饰

  • 注意:不能重写非虚方法或静态方法

重载:

  • 要求:在同一作用域,可以存在相同的函数名,不同参数列表的函数,这组函数称为重载函数

其他

WebAPI和MVC的区别

1、MVC主要用于建站,WebAPI主要用于构建http服务

2、接受参数不同:MVC可以返回JsonResult,前端可以直接使用;WebAPI要返回JSON数据,必须JSON.parse()转化为(Maticsoft.Json.dll)

3、MVC直接继承system.mvc.controller;WebAPI继承的是system.web.http.ApiController

OOP核心思想

核心思想:封装、继承、多态

private、 protected、 public、 internal 修饰符的访问权限

private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

internal: 当前程序集内可以访问。

三层架构

表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

目的:高内聚、低耦合

装箱和拆箱

装箱:从值类型接口转换到引用类型

拆箱:从引用类型转换到值类型

object obj=null; //引用类型

obj=1; //装箱 boxing 把值类型包装为引用类型

int i=(int)obj; //拆箱 unboxing

注意:装箱不需要显示的类型转换,拆箱需要显示的类型转换

引用类型

引用类型的基类为Object

引用类型:类、接口、委托、数组

CTS、CLS、CLR

CTS:common Type System 通用类型系统

CLS:Common Language Specification 通用语言规范

CLR:Common Language Runtime 公共语言进行时

在dotnet中类(class)和结构体(struct)的异同

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的

Struct属于值类型,是分配在内存的栈上的,结构体是复制传递的。加分会答:Int32、Boolean等都属于结构体

堆和栈的区别

  • 栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在内存中

  • 堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小

什么是中间件

中间在这里是指注入到应用中处理请求和响应的组件

什么是Razor页面

是dot net core 中支持ASP网页表格的一种开发模型,@page作为页面起始的标志

CORE有哪些好的功能

1、是依赖注入

2、是日志系统架构

3、是引入了一个跨平台的网络服务器,kestrel。可以没有IIS,Apache和Nginx就可以单独运行

4、是可以使用命令行创建应用

5、是使用APP Settings Json File来配置工程

6、是使用Start up来注册服务

7、是支持web socket和Signal IR

8、是对于跨网站的请求的预防和保户极致

序列化和反序列化

序列化:把对象转化为特定格式的字符串

反序列化:把特定格式的字符串转换为对象

使用Swagger的好处

  • 是一个规范和完整的框架

  • 用于生成、描述、调用和可视化RESTful风格的Web服务

  • 接口的文档在线自动生成

  • 功能测试

使用EF的好处

  • 是微软封装好一种ADO.NET数据实体模型

  • 可以使用Linq语句

  • 兼容性、集成性好

  • 功能齐全

使用Redis的好处

  • 性能极高——redis能支持超过100K+每秒的读写频率

  • 丰富的数据类型——Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作

  • 原子——Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行

  • 丰富的特性——Redis还支持 publish/subscribe, 通知, key 过期等等特性

使用AutoFac的好处

  • 与C#语言联系紧密

  • 与ASP.NET MVC集成

应用服务器

严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器

42、List,Set, Map是否继承自Collection接口

答:List,Set是Map不是

43.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是

当两个分离的对象的内容和类型相配的话,返回真值。

44.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方

法。

48.如何处理几十万条并发数据?

答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

 

50.进程和线程的区别?

答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

51.堆和栈的区别?

答: 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。

值类型

堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。 引用类型

56.向服务器发送请求有几种方式?

答:get,post。get一般为链接方式,post一般为按钮方式。

软件开发过程一般有几个阶段?每个阶段的作用?

答:需求分析,架构设计,代码编写,QA(测试),部署

61.什么叫做SQL注入,如何防止?请举例说明。

答:利用sql关键字对网站进行攻击。过滤关键字等 参数化查询

62.什么是反射?

答:动态获取程序集信息

70.ADO.net中常用的对象有哪些?分别描述一下。

答:Connection 数据库连接对象

Command 数据库命令

DataReader 数据读取器

DataSet 数据集

71.什么是code-Behind技术。

答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理.

80.委托声明的关键字是__?

答:delegate.

81.用sealed修饰的类有什么特点?

答:密封,不能继承。

82.在Asp.net中所有的自定义用户控件都必须继承自____?

答:Control。

83.在.Net中所有可序列化的类都被标记为_?

答:serializable

93.62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?

答案:62移动成2的6次方

100.C#可否对内存进行直接的操作?

答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员不过在C#中。

简述using关键字几种用法

1、using 指令

命名空间名字

eg: using System;

2、using 别名

使用场景:当两个cs文件都包含同一个名字的时候使用,不需要使用详细命名空间来区分相同的名字,直接使用别名更方便。

3、using语句

定义一个范围,在范围结束时释放对象。

using(SqlConnection conn = new SqlConnection(conStr))
{
     conn.Open();
}

  

在using内打开数据库连接,当超出using范围后,自动关闭连接,释放资源。

String和StringBuilder的区别是什么

string创建后分配在字符串常量区,栈中存储的地址指向存储字符串的地址(虽然没存储在堆,但string也是引用类型,这点比较特殊)。大小不可修改,每次使用string类中的方法时,都要再创建一个新的字符串对象,并给其分配内存。 这样就需要再分配新的空间。所以有可能产生很大的开销。

StringBuilder创建后分配在堆区,大小可自由修改。

多服务器如何生成全局唯一ID

1、使用数据库自增Id

JavaScript中有没有类的概念

js当然有类的概念,而且它和java一样,被设计成纯粹的面向对象的语言。js是弱类型语言,但这个并不意味着它没有类的概念。很明显地,我们经常能看到new Date()、new Array()之类的调用。这不就是类吗?

 

一、定义类

那我们如何在js中自定义一个类呢?其实应该换个说法,我们该怎么获取一个某种自定义类型的对象。

// 自定义类Class
​
function Class(){
​
}
// 实例化Class
var clazz = new Class();

  

Web API 是一个简单的HTTP服务的框架,可以轻松的构建多种客户端的服务接口

当i>10时会死锁吗?简要说理由

public void Test(int i)
        {
            lock (this)
            {
                if (i > 0)
                {
                    i--;
                }
                Test(i);
            }
        }

  

C#Typeof

用于获取类型

 

posted @ 2020-07-07 23:48  火星转地球  阅读(1603)  评论(0编辑  收藏  举报