• .Net 面试常见问题


    最近找工作,面试了一些公司,常见的一些面试以及答案记下来,不一定准确,这些问题不全是我自己写的,有些是前辈总结的,如有错误请指正,小弟先感谢了。

    值类型和引用类型:

    概念上:

    值类型直接存储其值,而引用类型存储对其值的引用

    值类型值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。

    引用类型引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址

     

    装箱拆箱:

    装箱是将值类型转换为值类型,拆箱就是将己转换为引用类型的值类型转换回来

    装箱和拆箱是非常影响程序性能的,在代码中应避免装箱和拆箱的操作。可以使用泛型来减少这样的操作。

    性能:相比于简单的赋值操作,装箱和拆箱需要进行大量的计算,对值类型进行装箱时,需要分配并构造一个全新的对象。

     

    注:引用和值类型面试了几个,基本都是第一个问题

     

     

    接口,抽象类:

     

    接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数

     

    类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定

     

    抽象类是一个不完全的类,是对对象的抽象,而接口是一种行为规范。

     

     abstract:抽象方法声明使用,是必须被派生类覆写的方法,抽象类就是用来被继承的;可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;抽象类不能有实体的。

     

    抽象类和接口就是定义为不可变的

     

    抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。

     

    抽象类能够定义方法的实现;   接口不能包含方法的实现。

     

    一个接口最好只能做一件事接口是对业务逻辑的抽象,类是业务规则的一种实现,是具体化解决扩展性的问题节省了代码,提高了开发效率

     

    接口支持多继承;抽象类不能实现多继承。

     

    抽象类可以定义字段、属性、包含有实现的方法。

     

    最大的区别是由抽象类可以派生出一些成员的实现,但接口却不包含任何成员的实现

     

    WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)(还不是 W3C 标准)。

     

    SOA

    SOA面向服务的体系结构(service-oriented architectureSOA)是一个系统软件组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

     

    SOAP

    简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

     

    AOP:面向切面编程(也叫面向方面)Aspect Oriented Programming

    AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。

     

    主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。

     

    主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

     

    WSDL,UDDI和SOAP是SOA基础的基础部件。WSDL用来描述服务;UDDI用来注册和查找服务;而SOAP,作为传输层,用来在消费者和服务 提供者之间传送消息。SOAPWeb服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在UDDI注册表(registry)查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。

     

    IO

    控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。

     

    创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。其原理是基于OO设计原则的TheHollywoodPrincipleDon'tcallus,we'llcallyou(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,这就是反转。

     

    ref和out:

     

    ref与out是很特殊的两个关键字。使用它们,可以使参数按照引用来传递。

     

    ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

     

     out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

     

    区别:

     

    out 参数在进入方法(函数)时后清空自己,使自己变成一个干净的参数,也因为这个原因必须在方法返回之前或再使用out参数前为 out 参数赋值(只有地址没有值的参数是不能被.net接受的);

     

    ref参数是不需要在被调用方法使用前先赋值的,甚至也可以被调用方法中不改变ref参数的值,这都不会引起编译错误。

     

    ref参数在使用前必需初始化,而out不需要。

     

    out参数只进不出,ref参数有进有出。

     

     用法上概括一下就是:out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

     

    Web:

    CSS选择器: id 选择器   类选择器  属性选择器

    IE6的margin双倍边距bug问题:浮动后原本外边距10px,但IE诠释为20px,解决法子是加上display:inline;

    被点击访谒过的超链接样式不再具有hover和active样式了,解决体式格局是改变CSS属性的枚举挨次: L-V-H-A

    让层显示在FLASH之上呢:解决的法子是给FLASH设置透明

    JS中的三种弹窗(警告窗口、确认窗口、信息输入窗口)的命令:alert confirm prompt

    声明CSS类 , 则有三种:

    直接标签名作为CSS类名称: TagName{ … }

    以元素ID作为CSS类声明: #ID{…}

    自定义CSS类名称 : .ClassName{}

    在JavaScript中如何实现定时调用功能:setTimeOut(foo(),100);

    打开一个模式窗口和非模式窗口的javascript代码:window.showModalDialog() ;window.showModelessDialog()

    页面中添加背景音乐bg.mid,循环播放3次的语句: <bgsound src=bg.mid loop=3>

     浏览器差异:

     获取元素触发事件:IE使用srcElement  Firefox使用target

     使用Dom获取或更改网页元素的文本:IE使用innerText,Firefox使用textContext

     动态的为元素绑定事件:IE绑定事件的方法是alatchEvent,Firefox用addEventListener

     Ajax的原理:通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。

    SQL:

    索引原则:

    为经常出现在关键字order by、group by、distinct后面的字段,建立索引。

    为经常用作查询选择的字段,建立索引。

    在经常用作表连接的属性上,建立索引。

    不要在有大量相同取值的字段上,建立索引。

    删除不再使用,或者很少被使用的索引。

    太多索引会影响数据的更新操作。

     

    SQL基本数据类型区别:

     

    int: 数据类型的存储空间是4个字节。从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。

     

    char(1~8000): 对英文占用一个字节,对汉字占用两个字节。存储定长的数据,英文占一个,汉子占两个字节,如果占用不满规定的长度空间则用空格补全。速度效率高。

     

    nchar 储存固定长度的unicode字符串最大长度为 4000 个字符

     

    varchar(1~8000):可变长度的数据,不以空格填满。效率低于char.

     

    nvarchar(1~4000): 可变长度,双字节存储数据,如果有单字节字符则以双字节占用存储空间,不管是英文还是汉字都站两个字节。

     

    text(2^31-1): 可变长度,多大存储2G数据

     

    存储过程输出/输入参数使用:output/intput

    存储过程返回值使用:returnValue

     

     

     

     

  • 相关阅读:
    windows p12(pfx)个人证书安装过程
    OpenSSL库验证PKCS7签名
    Crypto库实现PKCS7签名与签名验证
    windows 系统中打开一个数字证书所经历的过程
    DBA不可不知的操作系统内核参数
    MySQL大表优化方案
    深入浅出Cache
    Git Stash用法
    Git服务器搭建全过程分步详解
    laravel 5.1 性能优化对比
  • 原文地址:https://www.cnblogs.com/softmax/p/2820622.html
Copyright © 2020-2023  润新知