zoukankan      html  css  js  c++  java
  • 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

    用于获取类型

     

  • 相关阅读:
    Prometheus09 promtool工具探索
    Prometheus04 prometheus查询语言
    03K8S之service工作方式及使用
    Prometheus08 pushgateway
    prometheus06 grafana可视化
    prometheus05 prometheus使用案例
    Prometheus03 cAdvisorDocker容器监控
    02K8S之自主式Pod
    Prometheus07 blackbox
    javascript实现tab切换效果
  • 原文地址:https://www.cnblogs.com/monthv/p/13264303.html
Copyright © 2011-2022 走看看