c#面试 订阅
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 [1] 展开全文
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。 [1]
信息
类    别
程序设计语言
影响语言
C++、C#、D、Java、JavaScript、ObjectPHP等
创始时间
1972年
主要编译器
Visual C++、Clang、GCC、Turbo C等
中文名
C语言
创始人
Dennis MacAlistair Ritchie
发    源
BCPL语言
外文名
C Programming Language
c语言简介
C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。 [2]  当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。 [3]  冯.诺依曼在1945年提出了现代计算机的若干思想,被后人称为冯.诺依曼思想,这是计算机发展史上的里程碑。自1945 年至今大多采用其结构,因此冯.诺依曼被称为计算机之父。他的体系结构计算机由运算器、控制器、存储器、输入设备、输出设备五大部件构成。 C语言拥有一套完整的理论体系经过了漫长的发展历史,在编程语言中具有举足轻重的地位。 [4] 
收起全文
精华内容
下载资源
问答
  • c#面试
    千次阅读
    2022-03-23 20:23:44

    一、面试感悟:
    理论问的我一愣一愣的,好多东西会用但是不会底层原理,很尴尬。。。还有的甚至没听过的东西,就哑巴吃黄连了,很绝望。

    二、C#面试问题部分总结(我还记得的):
    1、int类型占多少字节?(面试的时候没说出来)
    4个字节。

    2、ActionResult有哪些类型?(面试的时候能够说出7/8个)
    总共有12种返回类型,ActionResult是基类,还有ViewResult,PartialViewResult,EmptyResult,JsonResult,FileContentResult,ContentResult,RedirectResult,FilePathResult,File,JavaScriptResult,FileStreamResult,RedirectToRouteResult。

    3、Dictionary的底层类型?(当时人都是懵的,我只知道他是字典类型,存的是键值对)
    结构Dictionary<[key],[value]>,Dictionary 泛型类提供了从一组键到一组值的映射。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary 类是作为一个哈希表来实现的。他引用的命名空间是:System.Collection.Generic。

    4、你了解过Java语言,说说Java的输出代码:(这个我会)
    System.Out.println()

    5、如何反射类下的方法?(我,我是谁,我,我在哪。。。)
    链接放这了,我只能帮你到这了,呜呜

    6、聚集索引和非聚集索引的区别?(当时说了一些东西,面试官说他能看出我钻了一些东西,但是有的是错的)
    1、聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个
    2、聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续
    3、聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。
    4、非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。
    5、索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

    7、.NetCore与.NetFramework的区别?(当时他就想听我说.NetCore是跨平台的,我做到了)
    .NetCore是微软推出的最新的开源的,跨平台的框架,用它可以创建的应用可以运行在MAC,Linux上。

    8、你会哪些Git代码?(我用官网)
    $ git status 查看当前状态
    $ git add 添加文件到缓存区
    git add 文件名1 文件名2 …
    git add . 当前文件夹所有文件
    git commit 将暂存区的文件提交到git仓库
    在仓库上做对应操作(提交缓存区,提交本地仓库,提交线上仓库,拉取线上文件)
    $ git push 提交到线上仓库

    进入该目录后,使用clone指令克隆线上地址
    $ git clone 地址

    B站视频学习链接

    9、decimal类型和double类型、float类型的区别?
    decimal 是高精度浮点 128bit,16个字节
    double 双精度浮点 64bit,8个字节
    float 单精度浮点 32bit ,4个字节

    10、你知道什么是ES6嘛?(不知道,但是回来了解之后才知道,是我随手都在敲的东西)
    ECMAScript 6 简称 ES6,是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

    ECMAScript 和 JavaScript 的关系:前者是后者的语法规格,后者是前者的一种实现

    。。。还有好多记不住了,临走的时候真相把技术总监手里的简历拿过来,上面都是写下来我不会的问题。

    更多相关内容
  • .net面试题汇总,涵盖基础语法,面向对象,集合,异常,泛型,LINQ,委托,多线程,数据库概念
  • 130道c#面试题.pdf

    2021-10-10 21:09:40
    130道c#面试题.pdf
  • 线程的知识太多,知识点有深有浅,往深的研究会涉及操作系统、CPU、内存,往浅了说就是一些语法。没有一定的知识积累,很难把线程的知识写得全面,当然我也没有这个能力。所以想到一个点写一个点,尽量总结一些有用...
  • C#面试题完整版.txt

    2021-02-24 11:58:43
    完整C#面试
  • c#面试题及答案(二).doc
  • c#面试基础题

    2019-03-24 17:29:31
    这是网上的一份关于c#面试的基础题,文档中标注了来源,做成文档方便打印学习
  • C# 面试宝典

    2018-03-09 10:49:38
    C# 面试 宝典 面试技巧 技巧。主要总结了C#面试中可能遇到的问题。
  • 本人面试时,总结的面试题文档,基本包含C#中每个知识点,希望能给你带来帮助,有问题可留言! O(∩_∩)O哈哈~
  • 2018C#面试整理

    2018-05-14 23:49:22
    包含C#面试知识点,CLR一些相关知识,还在补充当中。还包含一些面试题。
  • C#面试+笔试试题

    2019-01-08 14:54:13
    公司使用的一套C#面试+笔试题目,放出来给大家一波福利,希望要换工作的朋友能用得上!
  • C#面试题集

    2018-01-30 16:26:11
    C# 面试题集,面试宝典 。.net面试宝典 。。。。。。。。
  • 2021最新.NET/C#面试汇总:《.NET/C#面试手册》

    千次阅读 多人点赞 2021-05-18 00:22:22
    这几天给.neter们整理了一份《.NET/C#面试手册》,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间。对于没有跳槽打算的也可以复习一下相关知识点,就当是查缺补漏...

    这几天给.neter们整理了一份《.NET/C#面试手册》,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间。对于没有跳槽打算的也可以复习一下相关知识点,就当是查缺补漏!

    都是一些经典的面试题目,目前主要分为10大部分。

    • .NET/C#面试手册:基础语法
    • .NET/C#面试手册:面向对象
    • .NET/C#面试手册:集合、异常、泛型、LINQ、委托、EF!
    • .NET/C#面试手册:多线程
    • .NET/C#面试手册:ASP.NET MVC
    • .NET/C#面试手册:ASP.NET Core
    • .NET/C#面试手册:ADO.NET、XML、HTTP、AJAX、WebService
    • .NET/C#面试手册:常见的算法
    • .NET/C#面试手册:数据库概念知识
    • .NET/C#面试手册:数据库SQL查询(附建表语句)

    废话不多说,本手册目前为第一版,后续慢慢也会陆续更新一些知识点,目前内容有以下板块:

    《.NET/C#面试手册》完整pdf、word下载地址

    1.基础语法

    内容包括了c#的基础语法的应用,总计30到题目。这部分较为简单。

    2.面向对象

    内容包括面向对象常见的题目,总计21道题目。可以复习一下class、函数、封装、继承、多态。

    3.集合、异常、泛型、LINQ、委托、EF!

    包括集合、异常、泛型、LINQ、委托、EF等常见的题目,总计43道题目!

    4. 多线程

    包括多线程,线程和进程还有线程安全等相关知识点,总计20道题目。

    5.ASP.NET MVC

    MVC框架的机制、过滤器、路由等相关知识点,总计26道题目。

    6.ASP.NET Core

    7.ADO.NET、XML、HTTP、AJAX、WebService

    8.常见的算法

    9.数据库概念知识

    10.数据库SQL查询(附建表语句)

    展开全文
  • 1. 描述线程与进程的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同 Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗?这对于系统设计有什么影响?...
  • Unity-C#面试题-带答案

    2018-09-12 14:33:02
    1.物体发生碰撞分为几个阶段,分别对应的函数?2.简述类型和引用类型的区别?3.C#中引用类型的基类是什么?4.u3d中协程和C#线程的区别?5.用U3D实现2D游戏,有几种方式...................................等等
  • 100个C#面试

    2018-03-15 14:44:33
    1.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么? 1 2.什么是事务?什么是锁? 2 3.什么是索引,有什么优点? 2 4.视图是什么?游标是什么?...5.什么是存储过程?...9.概述三层结构体系 4
  • c# 面试题及答案

    2016-08-16 15:51:59
    C#面试试题,适合初学C#的学生或打算准备找C#开发类工作的技术人员。
  • 非常全面的c#面试题技术 有LINQ c# asp.net的 经典实用
  • C# 面试题100

    千次阅读 2021-12-27 16:06:25
    C#面试

    1. .NET和C#有什么区别

    答:.NET一般指 .NET FrameWork框架,它是一种平台,一种技术。

    C#是一种编程语言,可以基于.NET平台的应用。

    2.一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。
    答:public class MainClass 
                     { 
                     public static void Main() 
                     { 
                     Console.WriteLine(Foo(30)); 
                     } 
                     public static int Foo(int i) 
                     { 
                     if (i <= 0) 
                     return 0; 
                     else if(i > 0 && i <= 2) 
                     return 1; 
                     else return Foo(i -1) + Foo(i - 2); 
                     } 
                     }

    3. C#中的委托是什么?事件是不是一种委托?
    答 : 委托可以把一个方法作为参数代入另一个方法。
                     委托可以理解为指向一个函数的引用。
                     是,是一种特殊的委托

    4. 简述 private、 protected、 public、internal 修饰符的访问权限。

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

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

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

    internal:在同一命名空间内可以访问。

    5. override与重载的区别

    答 :override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多

    次重载以适应不同的需要

    Override是进行基类中函数的重写。为了适应需要。

    6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
    答 :   this.Server.Transfer

    7. 请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
    答:
    foreach (System.Windows.Forms.Control control in this.Controls)
    {undefined
    if (control is System.Windows.Forms.TextBox)
    {undefined
    System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; 
    tb.Text = String.Empty ;
    }
    }

    8. 请编程实现一个冒泡排序算法?
    答:
    int [] array = new int [*] ;
    int temp = 0 ;
    for (int i = 0 ; i < array.Length - 1 ; i++)
    {undefined
    for (int j = i + 1 ; j < array.Length ; j++)
    {undefined
    if (array[j] < array[i])
    {undefined
    temp = array[i] ;
    array[i] = array[j] ;
    array[j] = temp ;
    }
    }
    }

    9. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
    答:不是。可以用任意类型。

    10. 求以下表达式的值,写出您想到的一种或几种实现方法:1-2+3-4+……+m
    答:
    int Num = this.TextBox1.Text.ToString() ;
    int Sum = 0 ;
    for (int i = 0 ; i < Num + 1 ; i++)
    {undefined
    if((i%2) == 1)
    {undefined
    Sum += i ;
    }
    else
    {undefined
    Sum = Sum - I ;
    }
    }
    System.Console.WriteLine(Sum.ToString());
    System.Console.ReadLine() ;

    11. 在下面的例子里
    using System;
    class A
    {undefined
    public A()
    {undefined
    PrintFields();
    }
    public virtual void PrintFields(){}
    }
    class B:A
    {undefined
    int x=1;
    int y;
    public B()
    {undefined
    y=-1;
    }
    public override void PrintFields()
    {undefined
    Console.WriteLine("x={0},y={1}",x,y);
    }
    当使用new B()创建B的实例时,产生什么输出?
    答:X=1,Y=0;x= 1 y = -1

    12. CTS、CLS、CLR分别作何解释?
    答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

    13. 什么是装箱和拆箱?
    答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

    14. 什么是受管制的代码?
    答:unsafe:非托管代码。不经过CLR运行。

    15.什么是强类型系统?

    答:RTTI:类型识别系统。

    16.net中读写数据库需要用到那些类?他们的作用?

    答:DataSet:数据存储器。

    DataCommand:执行语句命令。

    DataAdapter:数据的集合,用语填充。

    17.列举ASP.NET页面之间传递值的几种方式。 
    答. 1).使用QueryString, 如....?id=1; response. Redirect().... 
                     2).使用Session变量 
                     3).使用Server.Transfer

    18.什么是Code-Behind技术?

    答:代码后植。

    19.在.net中,配件的意思是?

    答:程序集。(中间语言,源数据,资源,装配清单)

    20.常用的调用WebService的方法有哪些?

    答:1.使用WSDL.exe命令行工具。

    2.使用VS.NET中的Add Web Reference菜单选项

    21..netRemoting 的工作原理是什么?

    答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置

    22.在C#中,string str = null 与 string str = “” 请尽量使用文字或图

    象说明其中的区别。

    答:string str = null 是不给他分配内存空间,而string str = "" 给它分配

    长度为空字符串的内存空间。

    23.请详述在dotnet中类(class)与结构(struct)的异同?

    答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类

    型,是分配在内存的栈上的.

    24.分析以下代码,完成填空

    stringstrTmp = "abcdefg某某某";

    inti= System.Text.Encoding.Default.GetBytes(strTmp).Length;

    intj= strTmp.Length;

    以上代码执行完后,i= j=

    答:i=13,j=10

    25.SQLSERVER服务器中,给定表table1 中有两个字段 ID、LastUpdateDate,

    ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句

    SQL语句获得最后更新的事务号

    答:Select ID FROM table1 Where LastUpdateDate = (Select MAX

    (LastUpdateDate)FROM table1)

    26.简要谈一下您对微软.NET构架下remoting和webservice两项技术的理解以及

    实际中的应用。

    答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传

    送提高效率。

    27.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到

    以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视

    图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的

    思路

    答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

    28.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID

    作为主键,注意:ID可能不是连续的。

    答:解1: select top 10 * from A where id not in (select top 30 id

    fromA)

    解2: select top 10 * from A where id >(select max(id) from (select

    top30 id from A )as A)

    29.面向对象的语言具有________性、_________性、________性

    答:封装、继承、多态。

    30.能用foreach遍历访问的对象需要实现 ________________接口或声明

    ________________方法的类型。

    答:IEnumerable 、 GetEnumerator。

    31.GC是什么? 为什么要有GC?

    答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管

    理。要请求垃圾收集,可以调用下面的方法之一:

    System.gc()

    Runtime.getRuntime().gc()

    32.Strings = new String("xyz");创建了几个String Object?

    答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

    33.启动一个线程是用run()还是start()?

    答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状

    态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()

    方法可以产生必须退出的标志来停止一个线程。

    34.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可

    继承实体类(concrete class)?

    答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承

    实体类,但前提是实体类必须有明确的构造函数。

    35.构造器Constructor是否可被override?

    答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载

    Overloading。

    36.是否可以继承String类?

    答:String类是final类故不可以继承。

    37.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会

    不会被执行,什么时候被执行,在return前还是后?

    答:会执行,在return前执行。

    38.两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句

    话对不对?

    答:不对,有相同的hash code。

    39.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

    答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和

    case语句的参数应该是 int、 short、 char 或者 byte。long,string 都不

    能作用于swtich。

    40.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此

    对象的其它方法?

    不能,一个对象的一个synchronized方法只能由一个线程访问。

    41.abstract的method是否可同时是static,是否可同时是native,是否可同时是

    synchronized?

    答:都不能。

    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()这个方

    法。

    45.sleep()和 wait() 有什么区别?

    答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程

    不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被

    调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

    (b)正在运行的线程因为其它原因而阻塞。

    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程

    会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

    46.shorts1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错

    ?

    答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式

    转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正

    确。

    47.谈谈final,finally, finalize的区别。

    答:

    final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新

    的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被

    声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。

    被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可

    修改。被声明为 final的方法也同样只能使用,不能重载

    finally—再异常处理时提供finally 块来执行任何清除操作。如果抛出一个异

    常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果

    有的话)。

    finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象

    从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个

    对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的

    类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工

    作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

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

    答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方

    式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来

    获取.

    49.Session有什么重大BUG,微软提出了什么方法加以解决?

    答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate

    server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法

    捕获Session的END事件。

    50.进程和线程的区别?

    答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个

    进程可以有多个线程,这些线程共享这个进程的资源。

    51.堆和栈的区别?

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

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

    上。   引用类型

    52.成员变量和成员函数前加static的作用?

    答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分

    别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数

    负责这种统计的动作。不用new 

    53.ASP。NET与ASP相比,主要有哪些进步?

    答:asp解释形,aspx编译型,性能提高,有利于保护源码。

    54.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

    答:session(viewstate) 简单,但易丢失

    application全局

    cookie简单,但可能不支持,可能被伪造

    inputttype="hidden" 简单,可能被伪造

    url参数 简单,显示于地址栏,长度有限

    数据库 稳定,安全,但性能相对弱

    55.请指出GAC的含义?

    答:全局程序集缓存。

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

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

    57.DataReader与Dataset有什么区别?

    答:一个是只能向前的只读游标,一个是内存中虚拟的数据库。

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

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

    59.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using

    指令 和语句 new 创建实例 new 隐藏基类中方法。

    答:using 引入名称空间或者使用非托管资源

    new新建实例或者隐藏父类方法

    60.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中

    间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空

    格数不可超过一个.

    答:string inputStr=" xx xx ";

    inputStr=Regex.Replace(inputStr.Trim(),"*"," ");

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

    答:利用sql关键字对网站进行攻击。过滤关键字'等

    参数化查询

    62.什么是反射?

    答:动态获取程序集信息

    63.用Singleton如何写设计模式

    答:static属性里面new ,构造函数private

    64.什么是ApplicationPool?

    答:Web应用,类似Thread Pool,提高并发性能。

    65.什么是虚函数?什么是抽象函数?

    答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚

    子类必须实现的函数,必须被重写。

    66.什么是XML?

    答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能

    理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。

    如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象

    XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML

    中简化修改出来的。它主要用到的有XML、XSL和XPath等。

    67.什么是WebService?UDDI?

    答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵

    守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

    UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为

    WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将

    自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

    68.什么是ASP.net中的用户控件?

    答:用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类

    似ASP中的include..但是功能要强大的多。

    69.列举一下你所了解的XML技术及其应用

    答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和

    config

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

    答:Connection 数据库连接对象

    Command数据库命令

    DataReader数据读取器

    DataSet数据集

    71.什么是code-Behind技术。

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

    器代码分离.方便代码编写和整理.

    72.什么是SOAP,有哪些应用。

    答:simple object access protocal,简单对象接受协议.以xml为基本编码结构

    ,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的

    soap)的一种规范WebService使用的协议..

    73.C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处

    在哪里?

    答:一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加

    性质

    74.XML与 HTML 的主要区别

    答:1. XML是区分大小写字母的,HTML不区分。

    2.在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以

    省略</p>或者</li>之类的结束标记。在XML中,绝对不能省略掉结束标记。

    3.在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为

    结尾。这样分析器就知道不用查找结束标记了。

    4.在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

    5.在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应

    的值。

    75.c#中的三元运算符是?

    答:?:。

    76.当整数a赋值给一个object对象时,整数a将会被?

    答:装箱。

    77.类成员有_____种可访问形式?

    答:this.;new Class().Method;

    78.publicstatic const int A=1;这段代码有错误么?是什么?

    答:const不能用static修饰。

    79.float f=-123.567F; int i=(int)f ;i的值现在是_____?

    答:-123。

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

    答:delegate.

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

    答:密封,不能继承。

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

    答:Control。

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

    答:[serializable]

    84.在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?

    答:GC。

    85.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可

    以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的

    任何实例。

    答:不可以,不可以。

    86.下面这段代码有错误么?

    switch(i){undefined

    case():答://case()条件不能为空

    CaseZero();

    break;

    case1:

    CaseOne();

    break;

    case2:

    dufault;答://wrong,格式不正确

    CaseTwo();

    break;

    }

    87.在.Net中,类System.Web.UI.Page 可以被继承么?

    答:可以。

    88..net的错误处理机制是什么?

    答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛

    ,直到找到匹配的Catch为止。

    89.利用operator声明且仅声明了==,有什么错误么?

    答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="

    90.在.net(C# or vb.net)中如何取消一个窗体的关闭。

    答:private void Form1_Closing(object sender,

    System.ComponentModel.CancelEventArgse)

    {undefined

    e.Cancel=true;

    }

    91.在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么

    不同?

    答:一个是退出整个应用程序,一个是关闭其中一个form。

    92.某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密

    码单词必须遵循如下规则:

    (1) 密码单词的最小长度是两个字母,可以相同,也可以不同

    (2) K不可能是单词的第一个字母

    (3) 如果L出现,则出现次数不止一次

    (4) M不能使最后一个也不能是倒数第二个字母

    (5) K出现,则N就一定出现

    (6) O如果是最后一个字母,则L一定出现

    问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?

    A)K B)L C) M D) N

    答案:B

    问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的

    总数是多少?

    A)1个 B)3个 C)6个 D)9个

    答案:A

    问题三:下列哪一个是单词密码?

    A)KLLN B) LOML C) MLLO D)NMKO

    答案:C

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

    式成立,如何移动?

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

    94.C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好

    处在哪里?

    答:attribute:自定义属性的基类;property :类中的属性

    95.在C#中,string str = null 与 string str = "" 请尽量使用文字或图

    象说明其中的区别。

    答:null是没有空间引用的;

    "" 是空间为0的字符串;

    96.abstract class和interface有什么区别?

    答:声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

    接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

    97.<%# %> 和 <% %> 有什么区别?

    答:<%# %>表示绑定的数据源

    <%%>是服务器端代码块

    98.重载与覆盖的区别?

    答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个

    类中方法之间的关系,是水平关系

    2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之

    间的关系。

    99.Overloaded的方法是否可以改变返回值的类型?

    答:Overloaded的方法是可以改变返回值的类型。

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

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

     

    展开全文
  • C#面试

    千次阅读 2021-11-08 08:41:57
    (华为面试题) 因为调用时不能指定类型信息,编译器不知道你要调用哪个函数 float max(int a, int b); int max(int a, int b); 当调用 max(1, 2);时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的...

    1.UDP和TCP连接有何异同?
    传输控制协议(TCP):TCP协议是一种可靠的、一对一的、面向有连接的通信协议
    用户数据报协议(UDP):UDP传输协议是一种不可靠的、面向无连接、可以实现多对一、一对多和一对一连接的通信协议

    2.什么叫应用程序域?什么是托管代码?什么是强类型语言?
    应用程序域:在.Net中,应用程序有了一个新的边界:应用程序域(以下简称域),它是一个用于隔离应用程序的虚拟边界,为了禁止不应交互的代码进行交互,这种隔离是必要的
    托管代码:受CLR管理的代码
    非托管代码:不受CLR管理的代码,比如数据库连接,文件读写…
    强类型系统:强类型系统就是对每一个数据都有类型的限制,如C#,Java等属于强类型语言,javascript等属于弱类型语言

    3.堆和栈的理解
    引用类型创建的对象总是存放在堆中
    值类型申明的变量和指针总是放在它们被声明的地方,存放在栈上

    栈通常保存着我们代码执行的步骤,我们可以把栈想象成一个接着一个叠放在一
    起的盒子(越高内存地址越低)。当我们使用的时候,每次从最顶部取走一个盒子,当一个方法(或类型)被调用完成的时候,就从栈顶取走,接着下一个
    堆是无序的,他是一片不连续的内存域,像是一个仓库,储存着我们使用的各种对象等信息,跟栈不同的是他们被调用完毕不会立即被清理掉,通过垃圾回收器(GC)来回收

    4.C#中序列化和反序列化
    序列化是把一个内存中的对象的信息转化成一个可以持久化保存的形式,以便于保存或传输,序列化的主要作用是不同平台之间进行通信,常用的有序列化有json、xml、文件等。
    序列化:将对象转化为容易传输的格式的过程
    反:重新解析构造被序列化的对象
    可以使用Newtosoft.json组件实现序列化

    5.& 和 && 的区别
    &运算符有两种用法:(1)按位与;(2)逻辑与
    &&运算符是短路与运算。
    逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

    6.方法参数用ref修饰表示的是什么意思?
    ref修饰的参数表示引用参数,引用参数不会创建新的副本,引用参数与实参指向同一内存地址。所以参数在方法内部修改后,调用者对应的实参本身也会发生变化

    7.重载(overload)和重写(override)的区别?
    方法的重载是发生在同一个类中的
    判断重载:方法名一致,参数列表中参数的顺序,类型,个数不同。返回值可以不同

    方法的重写是发生在父子类之间的
    判断重写:方法名一致,参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致
    构造方法和声明为final,static 的方法不能被重写
    8.为什么函数不能根据返回类型来区分重载?(华为面试题)
    因为调用时不能指定类型信息,编译器不知道你要调用哪个函数
    float max(int a, int b);
    int max(int a, int b);
    当调用 max(1, 2);时无法确定调用的是哪个,单从这一点上来说,仅返回值类型不同的重载是不应该允许的。
    void f() {}
    int f() {}
    若编译器可根据上下文(语境)明确判断出含义,比如在 int x=f()中,那么这样做完全没有问题。然而,我们也可能调用一个方法,同时忽略返回值;我们通常把这称为“为它的副作用去调用一个方法”,因为我们关心的不是返回值,而是方法调用的其他效果。所以假如我们像下面这样调用方法: f(); C#怎样判断 f()的具体调用方式呢?而且别人如何识别并理解代码呢?由于存在这一类的问题,所以不能。

    9.char 型变量中能不能存储一个中文汉字,为什么?
    但是在C#里面 char为两个字节 因为C# char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。

    10.抽象类(abstract class)和接口(interface)有什么异同?
    不同:
    抽象类: 1.抽象类中可以定义构造器 2.可以有抽象方法和具体方法 3.抽象类中的成员可以是 private、internal、protected、public 4.抽象类中可以定义成员变量 5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法 6.抽象类中可以包含静态方法 7.一个类只能继承一个抽象类
    接口: 1.接口中不能定义构造器 2.方法全部都是抽象方法 3.接口中的成员全都是 public 的 4.接口中定义的成员变量实际上都是常量 5.接口中不能有静态方法 6.一个类可以实现多个接口

    相同:
    1.不能够实例化 2.可以将抽象类和接口类型作为引用类型 3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类

    11.抽象的(abstract)方法是否=可同时是静态的(static)
    不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。

    12.阐述静态变量和实例变量的区别?
    静态变量: 是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;静态变量可以实现让多个对象共享内存;
    实例变量: 必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。

    13.break 和 continue 的区别?
    break 和 continue 都是用来控制循环的语句。
    break 用于完全结束一个循环,跳出循环体执行循环后面的语句。
    continue 用于跳过本次循环,执行下次循环。

    14.string s = “Hello”;s = s + " World!";这两行代码执行后,原始的string对象中的内容到底变了没有?
    没有。因为 String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s 原先指向一个 String 对象,内容是 “Hello”,然后我们对 s 进行了“+”操作,那么 s 所指向的那个对象是否发生了改变呢? 答案是没有。这时,s 不指向原来那个对象了,而指向了另一个 String 对象,内容为"Hello World!",原来那个对象还存在于内存之中,只是 s 这个引用变量不再指向它了。

    通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说不可预见的修改,那么使用 String进行加号拼接的方式会引起内存的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。因此我们平时推荐如果进行字符串的拼接操作的话使用StringBuilder类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。

    15.请描述try catch finally的执行机制?
    try代码块的代码出错之后会进入catch代码块执行,无论代码是否出错,都会进入finally代码块执行

    16.数据类型之间的转换
    其余类型的转换类似
    int a = (int) b; //b只能是数字类型(例float,int,double,decimal等)
    int a = int.Parse(b); //b只能是整型字符串类型
    int a = Convert.ToInt32(b); //b的类型比较任意
    int a = 0;
    int.TryParse(b,out a); // int.TryParse()其实是对int.Parse()做了一个异常处理,如果出现异常则返回false,并且将输出参数返回0,使用此方式不会出现异常===

    总结:如此可见,我们在进行数据转换前选择转换方法要谨慎,如果是数字类型可以考虑直接用(int)强制转换,如果是整型字符串类型的,考虑用int.Parse()进行转换,如果不是这两种类型,再考虑用Convert.ToInt32()进行转换

    17.C#中有几种流
    FileStream: 文件流,用于文件的读取,写入等
    MemoryStream:内存流,对内存而不是对磁盘进行数据读写 减少了对临时缓冲区和文件的需要
    BufferedStream:缓冲流,缓冲区是内存中的字节块,用于缓存数据,从而减少操作系统访问磁盘的次数,缓冲区可提高读取和写入性能

    18.C#是否可以直接对内存进行操作?
    可以操作内存,包括使用指针,都是可以的 不过多数时候都需要把这些代码声明为unsafe,也就是不安全的代码

    19.List泛型集合相较于ArrayList的好处
    由于集合定义的时候的就指定了集合中数据类型,因此从集合中进行数据读写的时候减少了装箱和拆箱的操作。

    20.什么是线程池,如何使用?
    线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用 new 线程而是直接去池中拿线程即可,节省了开辟子线程的时间,提高的代码执行效率。
    Task task = new Task(委托);
    task.Start();
    //task线程全部是线程池线程

    21.请叙述一下您对线程池的理解?
    第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
    第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
    第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定 性,使用线程池可以进行统一的分配,调优和监控。

    22.三个线程 a、b、c 并发运行,b,c 需要 a 线程的数据怎么实现?
    分析题意,b,c需要a线程的数据,我们知道多线程是无法控制执行顺序的,那如何保证b,c线程的执行在a线程之后呢?
    原理上三种方式:
    a: 异步回调(ContinueWith)
    b: IsCompleted
    c: 信号量

    23.线程和进程的区别
    进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒度大小不同
    进程:是资源分配的最小单位
    线程:是进程的一个实体,是比进程颗粒度小的可以独立运行的基本单位

    特点:进程在运行时各自内存单元相互独立,线程之间内存共享,这使多线程编程可以拥有更好的性能和用户体验。
    注意:多线程编程对于其它程序是不友好的,占据大量 cpu 资源。

    24.C#中的反射?
    反射是什么
    反射指的是提供封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有的对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了特性,可以利用反射对它们进行访问。

    25.C#中的动态代理?
    动态代理是实现代理模式的一种方法,而代理模式可以在不修改原有对象的情况下为对象添加新的功能,也是面向切面(AOP)的一种实现。

    26.动静态代理的区别,什么场景使用?
    静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
    静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
    AOP 编程就是基于动态代理实现的

    27.你所知道的设计模式有哪些?
    一般认为有 23 种设计模式,我们不需要所有的都会,但是其中常用的几种设计模式应该去掌握。下面列出了所有的设计模式。需要掌握的设计模式我单独列出来了,当然能掌握的越多越好。
    总体来说设计模式分为三大类:
    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
    行为型模式,共十一种:观察者模式、策略模式、模板方法模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    28.工厂设计模式
    工厂模式分为工厂方法模式和抽象工厂模式
    工厂方法模式分为三种: 普通工厂模式,多个工厂方法模式,静态工厂模式
    普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建
    多个工厂方法模式:是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象
    静态工厂模式:将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调
    抽象工厂模式:工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂 类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
    29.建造者模式(Builder)
    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象, 所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的 Test 结合起来得到的。
    30.适配器设计模式
    适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
    接口的适配器模式
    接口的适配器是这样的,有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个 问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

    31.观察者模式
    观察者模式很好理解,类似于邮件订阅和 RSS 订阅,当我们浏览一些博客或 wiki 时,经常会看到 RSS 图标,就 这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其 它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

    32.谈谈CLR的内存结构和内存分配?
    CLR的内存结构主要分为堆和栈
    堆内存:引用数据类型在堆上分配空间;
    栈内存:基础数据类型直接在栈分配空间;引用类型的变量在栈分配空间;

    ADO.Net
    33.使用ADO.Net操作数据库流程?
    第一步:准备数据库连接字符串;
    第二步:创建连接(Connection)对象
    第三步:打开连接
    第四步:创建Command对象
    第五步:使用Command对象执行Sql语句
    第六步:关闭连接

    34.ADO.Net的五大对象?
    Connection 连接对象 用于对数据库的连接操作
    Command 命令对象 用于执行Sql语句
    DataReader 数据读取对象 用于数据库检索数据信息
    DataAdapter 数据适配器对象 是DataSet和数据源之间的桥梁
    DataSet 数据集对象 相当于内存数据库

    35.关系数据库中连接池的机制是什么?
    前提:为数据库连接建立一个缓冲池。
    1:从连接池获取或创建可用连接
    2:使用完毕之后,把连接返回给连接池
    3:在系统关闭前,断开所有连接并释放连接占用的系统资源
    4:能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。

    其中有几个概念需要大家理解:
    最小连接数是连接池一直保持的数据连接。如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接 资源被浪费掉。
    最大连接数是连接池能申请的最大连接数。如果数据连接请求超过此数,后面的数据连接请求将被加入到等待队 列中,这会影响之后的数据库操作。
    如果最小连接数与最大连接数相差太大,那么,最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接 池中等待重复使用或是空闲超时后被释放。
    上面的解释,可以这样理解:数据库池连接数量一直保持一个不少于最小连接数的数量,当数量不够时,数据库会 创建一些连接,直到一个最大连接数,之后连接数据库就会等待。

    Web

    36.http 常见的状态码有哪些?
    200 OK //客户端请求成功
    301 Moved Permanently(永久移除),请求的URL已移走。Response 中应该包含一个 Location
    URL, 说明资源现在所处的位置
    302 found 重定向
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
    403 Forbidden //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在,eg:输入了错误的 URL
    500 Internal Server Error //服务器发生不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    37.GET 和 POST 的区别?
    从表面现像上面看 GET 和 POST 的区别:

    1. GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割 URL 和传输数据,参数之间以&相连,如:login.action?name=zhagnsan&password=123456。POST把提交的数据则放置在是HTTP包的包体中。
    2. GET 方式提交的数据最多只能是1024 字节,理论上 POST 没有限制,可传较大量的数据。其实这样说是错误的,不准确的: “GET 方式提交的数据最多只能是 1024 字节",因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个 限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、 FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。
      3.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面 GET 提到的“安全”不是同个概念。上 面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的 Security 的含义,比如:通过 GET 提交数据,用户名和密码将明文出现在URL 上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用 GET 提交数据还可能会造成 Cross-site request forgery 攻击。 Get 是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求,在FORM(表单)中,Method 默认为"GET",实质上,GET 和 POST 只是发送机制不同,并不是一个取一个发!

    38.http 中重定向和请求转发的区别?
    本质区别:转发是服务器行为,重定向是客户端行为。
    重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失。 、
    请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。

    39.Cookie 和 Session 的区别
    Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的web服务器发送请求时,同时会发送所有为该服务器存储的 cookie。
    Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
    Cookie 和 session 的不同点:
    1.无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。
    2.在存储的数据量方面:session 能够存储任意的 C# 对象,cookie 只能存储 String 类型的对象。

    40.SQL 的 select 语句完整的执行顺序
    1、From (告诉程序来自哪张表 如果是表表达式依旧是如此顺序)
    2、Where(条件筛选 谓词筛选 )
    3、Group by(分组)
    4、Having(分组 谓词筛选 )
    5、Select (表达式)
    6、表达式(开窗函数 聚合函数 等等)
    7、Distinct(去重复)
    8、ORDER BY
    9、TOP/OFFSET-FETCH

    41.事务的四大特征是什么?
    数据库事务 transanction 正确执行的四个基本要素。
    ACID,原子性(Atomicity)、一致性(Correspondence)、隔离 性(Isolation)、持久性(Durability)。
    (1)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执 行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
    (2)一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
    (3)隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相 同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称 为串行化,为了防止事务操作间的混淆, 必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
    (4)持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

    42.存储过程和函数的特点和区别?
    函数只能返回一个变量的限制,而存储过程可以返回多个;8888888
    函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程一般是作为一个独立的部分来执行;
    函数限制比较多,比如不能用临时表,只能用表变量,而存储过程的限制相对就比较少;
    函数的实现的功能针对性强一些,而存储过程实现的功能要更复杂一些;

    43.Sql Server中触发器的作用什么?
    触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器由于其的不可控性日常实际项目中一般不用。

    44.如何提高Sql Server的安全性?
    Sql Server的安全性是通过设置身份验证实现的,比如设置账户是否有权限访问数据库,是否有权限访问哪些数据,是否有权限操作哪些数据。
    在防火墙上禁用 SQL Server 端口。
    使用最安全的文件系统,切记不要随意删除日志文件。
    审核指向 SQL Server 的连接。

    45.在千万级的数据库查询中,如何提高效率?
    a:数据库设计方面,合理的建立索引;合理的设置表的字段类型;避免频繁创建和删除临时表;
    如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
    b:优化SQL语句,应尽量避免像在 where 子句中使用!=或<>操作符;在where 子句中使用 or 来连接条件;.in 和 not in 也要慎用;否则会导致全表扫描等等,从而保证索引的有效性。11111111111
    c:程序方面,控制好内存,展示的数据多的时候尽量是分页获取;有的数据要用缓存;

    46.如何优化能支撑几十万条并发?
    1)HTML静态化
    2)资源服务器分离
    3)项目负载均衡
    4)数据库集群和库表散列
    5)数据库交互使用存储过程代替Sql语句
    6)优化项目的服务器配置
    7)使用缓存技术

    47.简单介绍一下ASP.NET Web API技术?
    ASP.NET Web API是一个用于在.NET Framework之上构建Web API(网络应用程序接口)的框架,编写的应用程序接口可以服务各种客户端,包括浏览器,移动设备和传统的桌面应用程序。是构建Restful应用程序的理想平台的.NET框架。

    48.请简单描述一下系统开发中常用的三层架构?
    我们常说的三层架构包括表示层,业务逻辑层,数据访问层
    表示层:表示层就是实现用户界面功能,将用户的需求接收和响应,并调用相应的业务逻辑层代码进行相关的业务处理。
    业务逻辑层:业务逻辑层BLL的功能是对具体问题进行逻辑判断与执行操作,接收到表现层 UI 的用户指令后,会调用数据访问DAL层实现相应的数据处理
    数据访问层:数据访问层DAL是数据库的主要交互对象,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层 BLL

    49.间述在.NET中类(class)与结构(struct)的异同?
    类:
    类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
    类有构造和析构函数
    类可以继承和被继承
    结构:
    结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
    结构没有构造函数,但可以添加。结构没有析构函数
    结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口

    50.数据量大的表查询时如何性能优化(主要说数据库端的常用方法)
    a:合理使用索引
    b:避免或简化排序的操作
    c:消除对大型表行数据的顺序存取 (如在表连接的连接条件列建立索引)
    d:避免相关子查询
    e:避免困难的正规表达式(如like)
    f:使用临时表加速查询
    g:用排序来取代非顺序存取
    h:使用存储过程
    i:查询指定页数据而不查所有数据

    51.谈谈你对MVC的理解?
    MVC的全名是Model View Controller,是模型(Model)-视图(view)-控制器(controller)的缩写,是一种设计模式。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间,提高代码复用性。

    52.什么是ORM?
    ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。

    53.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    接口可以继承接口
    抽象类可以实现接口
    抽象类可以继承实体类

    54.Error和Exception有什么区别?
    Error(错误)是系统中的错误,程序员是不能改变的和处理的,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。
    Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

    55.const和 readonly这两个修饰符的区别?
    const与readonly 很像,都是将变量声明为只读,且在变量初始化后就不可改写。
    首先先解释下什么是静态常量以及什么是动态常量。静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。而动态常量的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。const修饰的常量其实就是静态常量,readonly修饰的常量就是动态常量。

    56.请简单描述一下C/S和B/S模式?
    C/S架构是第一种比较早的软件架构,全称为Client/Server,即客户端/服务器结构,C/S架构软件有一个特点,就是如果用户要使用的话,需要下载一个客户端,安装后就可以使用。比如QQ,Office软件等。

    B/S架构全称为Browser/Server,即浏览器/服务器结构,客户使用的话无需安装,有Web浏览器即可。

    57.Asp.Net MVC中控制器向视图传值的几种方式?
    model (强类型传值)
    ViewBag (dynamic 动态类型传值)
    ViewData (字典的键值对结构传值

    TempData(依赖于sesssion的实现,后续的Action一旦被读取一次,数据自动销毁,应用场景:验证码)

    58.客户端请求服务器端的几种方式?
    Url请求—请求采用的get方法,例地址栏上输入请求地址,请求js、css、图片、视频等资源文件
    Form表单提交—请求可以采用get方法和post方法,表单提交会发生页面跳转
    Ajax—异步请求,请求可以采用get方法和post方法,请求实现的是局部刷新

    59.什么是Asp.Net?
    Asp.Net是微软推出的用于Web应用开发的一种编程技术
    Asp.Net主要包括Asp.Net MVC和Asp.Net WebForm两种技术框架

    60.什么是.Net Core?
    .Net Core是微软开发的具有跨平台能力的应用程序开发框架
    .Net Core是一个通用的软件开发框架。它允许开发人员构建各种软件,包括Web,桌面,移动,云,游戏,物联网等
    ASP.NET Core是.NET Core生态系统的核心组件。ASP.NET Core是一个用于构建Web应用的框架

    61.C#抽象类和接口,实体类的区别?
    接口:接口是用来定义规范的,接口可以继承多个接口,类可以实现多个接口
    抽象类:抽象类目的也是用来实现代码复用的,抽象类中可以存在未实现的方法,抽象类不可以实例化
    实体类:实体类目的是用来对某一类实物进行抽象化的,类只能继承一个类

    62.简述EF中数据实体的五种状态?
    Detached //对象存在,但没有被EF容器管理
    Unchanged //对象尚未经过改动
    Added //对象为新加对象,并且已添加到EF容器中
    Deleted //对象已经从上下文中删除
    Modified //对象上的一个标量属性已经更改

    63.什么是切面编程AOP?
    面向切面编程(aspect-oriented programming),是一种将横切关注点与业务逻辑分离的编程方式。每个横切关注点都集中在一个地方,而不是分散在多处代码中。这样使我们的服务模块更加简洁,因为它们只包含了主要关注点的代码,而次要的功能或者说辅助的功能被转移到切面中了。

    64.什么是装箱和拆箱?
    装箱是将值类型转成引用类型,拆箱是将引用类型转成值类型

    65.什么是局部变量,什么是成员变量,什么是属性?
    局部变量:方法体或者代码块中定义的变量
    成员变量:类中定义的字段
    属性:用来保护成员变量的,现在对于公有的成员变量,我们常常会用属性的简写方式来写,体现了类的封装性

    1. 请描述Asp.net中的7大内置对象的含义
      Cookie是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递
      Session对象存储用户会话所需的信息
      Application对象使给定应用程序的所有用户之间共享信息,并且在服务器运行期间持久地保存数据
      Catch对象使给定应用程序的所有用户之间共享信息,可以较为便利的控制其失效规则
      Request对象主要是封装HTTP请求信息
      Response对象主要是封装HTTP响应信息
      Server对象提供对服务器上的方法和属性的访问

    67.一列数的规则如下: 1、1、2、3、5、8、13、21、34… 求第30位数是多少,用递归算法实现。
    public class MainClass {
    public static void Main() {
    Console.WriteLine(Foo(30));
    }
    public static int Foo(int i) {
    if(i == 1 || i ==2)
    return 1;
    else
    return Foo(i -1) + Foo(i - 2);
    }
    }

    68.请编程实现一个冒泡排序算法?
    int temp = 0;
    int[] arr = { 10, 13, 12, 15, 9 };
    for (int i = 0; i < arr.Length - 1; i++)
    {
    for (int j = 0; j < arr.Length-1-i; j++)
    {
    if (arr[j] > arr[j + 1]) {
    temp = arr[j];
    arr[j] = arr[j+1];
    arr[j + 1] = temp;
    }
    }
    }

    69.什么是虚函数?什么是抽象函数?
    虚函数:需要实现,可由子类重写的函数。
    抽象函数:自身不能实现,子类必须实现的函数,必须被重写

    70.分布式,微服务,集群的概念
    分布式:一个业务分拆多个子业务,部署在不同的服务器上
    集群:同一个业务,部署在多个服务器上
    分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务
    分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的
    微服务:将模块拆分成一个独立的服务单元通过接口来实现数据的交互
    微服务架构
    微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,它也可以是同一个服务器。

    71.C#是否可以直接对内存进行操作?
    可以操作内存,包括使用指针,都是可以的 不过多数时候都需要把这些代码声明为unsafe,也就是不安全的代码
    72.New有几种用法?
    第一种是创建对象、调用构造函数
    第二种是作为修饰符,显示隐藏继承于基类的继承成员
    第三种是用在泛型中添加类型的约束
    73.C#JIT的概念及作用?
    C#编写的程序,经过编译器把编译后,源代码被转换成Microsoft中间语言(MSIL)。MSIL不是真正可执行的代码。因此,要真正执行MSIL应用程序,还必须使用“JIT编译器”,对MSIL再次编译,以得到主机处理器可以真正执行本机指令。JIT编译器以即时方式编译MSMIL代码,以便应用程序执行。
    74.多态的理解?
    下面实例化三个 Animal 实例,但是他们实际上指向的分别是 Animal 对象、Cat 对象和 Dog 对象,如下图:
    在这里插入图片描述
    请注意,变量 ac 和 ad 虽然都是 Animal 类型,但是指向的分别是 Cat 对象和 Dog 对象,这里是关键。
    当执行 a.Sleep() 时,由于Sleep是非虚实例方法,JIT编译器会找到发出调用的那个变量(a)的类型(Animal)对应的类型对象(Animal 类型对象)。然后调用该类型对象中的Sleep方法,如果该类型对象没有Sleep方法,JIT编译器会回溯类的基类(一直到 Object)中查找Sleep方法。
    当执行ac.EatFood 时,由于EatFood是虚实例方法,JIT编译器调用时会在方法中生成一些额外的代码,这些代码会首先检查发出调用的变量(ac),然后跟随变量的引用地址找到发出调用的对象(Cat 对象),找到发出调用的对象对应的类型对象(Cat 类型对象),最后在该类型对象中查找重写的EatFood方法。同样的,如果在该类型对象中没有查找到EatFood 方法,JIT编译器会回溯到该类型对象的基类中查找。
    上面描述的就是 JIT 编译器在遇到调用类型的非虚实例方法以及虚实例方法时的不同执行方式,也这是处理这两类方法的不同方式造成了表面上我们看到的面向对象的三个特征之一——多态性。
    75…工厂模式的作用?
    a:工厂类是为了保持创建类与使用类分离
    b:两个类A和B之间的关系应该仅仅是A创建B或是A使用B,而不能两种关系都有
    c:防止用来实例化一个类的数据和代码在多个类中到处都是,可以将有关创建的知识搬移到一个工厂类中
    76.如何理解clone对象
    ​在实际编程过程中,我们常常要遇到这种情况:有一个对象 A,在某一时刻 A 中已经包含了一些有效值,此时可能会需要一个和 A 完全相同新对象 B,并且此后对 B 任何改动都不会影响到 A 中的值,也就是说,A 与 B 是两个独立的对象,但 B 的初始值是由 A 对象确定的。在C#中用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但实现 clone()方法是其中最简单,也是最高效的手段。

    clone方法分为浅拷贝和深拷贝
    无论是浅拷贝和深拷贝都会产生一个对象副本
    浅拷贝:对象副本对于被拷贝对象的值类型成员会重新拷贝一份,对于被拷贝对象的引用类型成员只会拷贝所引用的地址
    实现接口ICloneable,并实现Clone方法
    深拷贝:对象副本对于被拷贝对象的值类型成员和引用类型成员都会重新拷贝一份
    实现方式:1.利用反射实现 2.利用序列化实现
    77.C#中有没有goto语句?
    有,语句用于直接在一个程序中转到程序中的标签指定的位置,标签实际上由标识符加上冒号构成,但一般不推荐使用。
    78.在C# 中,如何跳出当前的多重嵌套循环?
    break只能跳出当前层的循环,如何要跳出多重循环可以使用return,当然也可以使用goto但不推荐使用了

    展开全文
  • C#面试题,包含sql server数据库知识,面试技巧。
  • C# 面试题整理

    千次阅读 2022-02-15 10:05:26
    首先要知道 byte 在 C# 的范围是 0~255。所以变量 b 和 e 是错误。 变量 c 是错误的,字符串类型没办法转成 byte 类型。 变量 a 是无法将 char 隐式转换为 byte,正确定义加一个 byte a = (byte) 'a'; char a 会...
  • 主要解答了“60k”大佬的19道C#面试题中的后9道,文中的面试题比较小众,作者给了不错的答案,相信对你以后的面试有所帮助,感兴趣就来了解下
  • c#面试问题c#面试问题c#面试问题c#面试问题
  • C#面试题汇总

    2014-10-16 20:15:45
    大多数的C#面试题都可以在这里找到,上千道面试题,C#、ASP.NET\SQL SERVER的面试题。考中的几率很高哦。
  • C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等
  • 一些常见的C#面试

    千次阅读 2020-12-13 20:01:00
    一些常见的C#面试题(笔试题较少) 1、简述private、protected、public、internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : ...
  • Asp.net核心技术思想 宝典在手 很全面的asp.net c#面试
  • 2021 .NET/dotnet Core/C# 面试题及参考答案. 文章目录 1. NET/dotnet core/.NET framework 的关系? 2. corefx, coreclr 都是什么? 3. asp.net core 3.1. Kestrel 3.2. asp.net core 主要的特性 3.3. startup class...
  • 非常有用的题库 例: 1:抽象方法仅有声明,而没有任何实现,如abstract someMethod();,虚方法却不能如此 virtual用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 2:子类继承父类,可以对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,179
精华内容 17,671
关键字:

c#面试

c# 订阅
友情链接: 双轮自平衡小车.zip