- 2021 新学期海联学子迎来两场校招会,面试现场(7-25)
- 抓住机会,做足准备 过关斩将,展现风采 九月,勇往直前,迎接挑战;展望未来,充满希望。2021
在项目开发阶段,我们不应仅仅停留在功能的实现层面,更要持续深化对编程语言基本原理的理解和掌握。
1、.NET是什么?
.net作为一个开发者平台,不仅涵盖了开发环境、技术框架、社区论坛以及服务支持等要素,而且还突出了其支持跨语言和跨平台编程的两大特点。
在.NET开发环境中,支持多种编程语言,包括C#、Visual Basic、C++/CLI、Eiffel、F#、IronPython、IronRuby、PowerBuilder、Visual COBOL以及Windows PowerShell。一种语言所编写的程序类型能够与另一种语言编写的应用实现无障碍的交互与兼容。
公共语言规范,简称CLS,它对语言的共性进行了定义和规范,涵盖了类型、命名、事件、属性、数组等多个方面。
private、protected、public、internal这四种修饰符分别定义了不同的访问权限,具体来说:private修饰符使得成员只能在类内部被访问;protected修饰符允许类内部以及继承自该类的子类访问;public修饰符则允许任何地方,包括类外部,对成员进行访问;而internal修饰符则使得成员只能在同一个程序集内被访问。
私有成员,仅限于类内部访问,且仅限于声明上下文范围内可触及。
该特性定义为保护级别,意味着此类及其子类内部成员均可进行访问。
public?:?公共成员,完全公开,没有访问限制。
internal:?在同一命名空间内可以访问。
3、委托,事件是不是一种委托?
委托机制涉及将某一方法作为参数传递给另一方法,它作为一种类,负责规定方法的类型,从而使方法能够作为参数被传递。通过这种方式,方法得以动态地分配给参数,从而减少了程序中If-Else(Switch)语句的频繁使用,并提升了程序的可扩展性。
事件类型构成了独特的任务委托。?例如,在onclick事件中,涉及的参数便代表了一种执行手段。
4、.NET中类与结构的异同。
类能够被创建实例,它属于引用类型,并且存在于内存的堆区域。类的特性表现为引用传递。
struct属于值类型,它被分配在内存的栈区域。这种类型的数据传递方式被称为值传递。
int32、boolean都属于结构。
5、装箱和拆箱
装箱就是隐式的将一个值型转换为引用型对象。
拆箱就是将一个引用型对象转换成任意值型。
比如:
int i=0;
Syste.Object obj=i;
这个过程就是装箱!就是将 i 装箱!
比如:
int i=0;
System.Object obj=i;
int j=(int)obj;
这个过程前2句是将 i 装箱,后一句是将 obj 拆箱!
6、override与重载(overload)的区别。
方法的重载指的是方法名称相同,但参数或参数类型存在差异,通过这种方式可以多次实现重载,以便满足各种不同的使用需求。
重载是面向过程的概念。
在进行面向对象的编程中,通过使用override关键字可以实现对基类中函数的重写。抽象方法、接口以及标记为virtual的方法都允许被重写,而实现方法则不行。
7、如何理解三层架构。
三层架构涉及将整个业务应用划分为:界面展示层、业务处理层、数据存储层。
区分层次的目的即为了“高内聚,低耦合”的思想。
通俗来说,表现层指的是用户在操作系统时所接触到的直观界面,也就是用户在系统使用过程中所能看到和感受到的一切。
业务逻辑层主要涉及对特定问题的处理,这实际上是对数据层的直接操作,亦即对数据业务逻辑的执行与处理。
数据访问层主要负责对数据库进行直接操作,具体包括数据的增加、删除、修改和查询等事务处理。
每层之间是一种垂直关系。
三层结构属于N层结构范畴之内,通常情况下,各层次之间呈现出一种自下而上的依赖关系;在底层代码的接口尚未明确之前,上层代码的开发工作无法启动;一旦底层代码的接口发生变动,上层的代码也将随之发生相应的变化。
优点:分工明确,条理清晰,易于调试,而且具有扩展性。
缺点:增加系统复杂度,增加成本。
8、列举c#语言集合及其特性
一、数组 (数据类型 变量名)
数组用于保存固定数量的数据,定长,占用内存少,遍历速度快。
二、动态数组arrylist
ArrayList可以填补数组的不足,进行元素的动态维护。数组的长度是既定的,但ArrayList的存储空间却能根据实际需求灵活增加。随着程序的扩展,ArrayList的索引会自动进行重新分配和调整,从而实现数组长度的动态变化。值得注意的是,ArrayList并非泛型集合,因此在添加和读取数据时需要进行装箱拆箱操作(即存储时需将值类型转换为object类型,读取时再将object类型转换回值类型),这无疑会导致一定的性能损耗。
在将值类型数据存入ArrayList时,必须将其先转换为object类型,这一转换过程被称作装箱。
拆箱:由object类型转换成值类型的过程称为拆箱。
三、列表List
1.定义:List变量名;
2.List集合的赋值:变量名=new List();
定义List集合时,可通过初始化器进行:将变量名赋值为new List对象,并在括号内依次列出元素1、元素2、...、元素n。
4.添加元素:变量名.Add(要添加的数据);
5.插入元素:变量名.Insert(索引,要插入的数据);
6.删除元素:
变量名.RemoveAt(要删除的索引);
变量名.Remove(数据);
7.修改元素:变量名=值;
特点:
1.不定长
2.占用内存多
3.遍历速度慢
4.在功能上,数组能实现的所有功能集合都能实现
但集合能实现的功能数组不一定能实现
四、定义字典类型Dictionary,其中包含键类型TKey和值类型TValue。
Dictionary(TKey,TValue)这一泛型类实现了从键集合到值集合的映射功能。在字典中,每一个新增的元素都包含一个值和与之对应的键。利用键进行值的查询操作,其速度之快令人印象深刻。
9、进程与线程的区别?
进程,作为并发运行程序在运行时分配与调控资源的基本单元,其本质是一个动态的概念。它是竞争计算机系统资源的核心单位。每个进程都拥有独立的地址空间,每当启动一个新进程,系统便会为其分配相应的地址空间,并创建数据表以维护代码段、堆栈段以及数据段。
线程,作为进程内部的执行个体,也称作调度实体。它相较于进程而言,是更为微小的独立运行单元。我们通常将线程称作轻量级进程。线程与进程共享数据,它们使用相同的地址空间。因此,CPU在切换线程时所需的成本远低于切换进程,同时,创建线程所需的资源消耗也远小于创建进程。
10、string和stringbuilder的区别?
string的值是不可变更的,它仅能被赋予一次,每当其内容有所变动,便会创建一个新的实体。随后,原有的实体将引用这个新实体。每产生一个新实体,都会对系统的性能造成一定影响,进而可能降低.NET编译器的运行效率。
StringBuilder类与之不同,它每次执行操作都是直接对自身对象进行修改,而非创建新的对象。随着内容的逐步增加,其占用的空间也会相应扩充。因此,在进行大量修改操作时,不会因为频繁生成大量匿名对象而对系统性能造成影响。
在程序运行过程中,若频繁对特定字符串执行操作,宜采用StringBuilder类来处理,此类的核心设计理念即针对大量字符串操作提供优化方案,以减少临时对象的生成;相对地,若对字符串的操作仅限于一次或几次,直接使用string类便足够。
11、属性与字段的区别
属性可以对值的获取和设置进行控制,而字段不能。
一般情况下get读取的值就是set设置的值。
如果只有get,则说明值是只读。
如果只有set,则说明值是只写。
get和set的本质是就是内部方法。
12、如何才能提高代码的效率和性能
针对业务流程和业务数据的特性,可以进行相应的优化处理;例如,可以通过引入缓存和索引等技术手段,来增强代码的执行效率和整体性能。
同时不要进行无意义的代码优化,重点优化系统的性能瓶颈。
按照设计模式去编写代码,彻底的面向对象编程,多用委托事件。
尽量做到方法的每一个实现代码只写一遍。
13、String是值类型还是引用类型?它是如何工作的。
String是引用类型。
String对象的值固定不变,一旦对String类型的实例进行重新赋值操作,其引用将会指向一个新的地址,而原有的值保持不变,只是引用本身发生了变化。
14、堆与栈的区别。
栈空间在编译阶段就已经被设定,故而你的程序需对栈的容量进行准确设定;同时,局部变量、值类型参数等均存储于栈内。
程序运行时,会动态地划分出一块内存区域,称为堆。根据程序的具体运行状况,我们可以决定需要分配给堆的内存容量。
若在try{}块中存在return语句,那么紧随其后的finally{}块中的代码是否会被执行,以及何时会被执行。
若return之后紧跟着一个返回值或表达式,系统将首先对其进行计算,并将结果暂时存储,随后继续执行finally块中的代码,不论如何,return命令始终是最后被执行的。
16、属性和字段的区别是什么?
属性可以对值的获取和设置进行控制,而字段不能。
一般情况下get读取的值就是set设置的值。
如果只有get,则说明值是只读。
如果只有set,则说明值是只写。
get和set的本质是就是内部方法。
17、C#的接口和类有什么异同?
不同点:
不能直接实例化接口。
接口不包含方法的实现。
接口可以继承,类只能单继承。
类定义可在不同的源文件之间进行拆分。
相同点:
接口、类和结构都可以从多个接口继承实现。
继承接口的任何非抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引、方法和属性。
18、DataReader和DataSet的异同?
为了在线处理数据,DataReader将持续占用SqlConnection连接,在此期间,其他操作将无法再利用SqlConnection连接对象。
DataSet是用于离线处理数据的工具,它能够将数据一次性导入内存,随后切断与数据源的连接,此时,其他操作便可以借助SqlConnection连接对象来进行。
由于DataReader每次仅能读取单行数据,因此其内存占用相对较低。然而,它仅支持单向前进的读取模式,即只能向前读取数据。若需返回读取上一条数据,则不被允许,同时也不允许对数据进行任何修改操作。
由于DataSet能够一次性导入全部数据,这虽然会导致资源消耗较大,但同时也增强了操作的灵活性。即便是在数据库连接中断的情况下,你依然可以对数据进行增删改查等操作,而且可以按照你所需的任意顺序进行数据读取,并且还能将这些数据重新写入数据库。
19、简述ADO.NET中的五个主要对象。
连接程序与数据库的过程至关重要。若未通过连接对象打开数据库,便无法从中获取数据。值得注意的是,Close与Dispose的功能存在差异。Close操作后,数据库仍可重新打开;而Dispose操作后,数据库将无法再次使用。
Command对象主要用于向数据库发送各类指令,诸如执行数据查询、添加、更新或删除操作,还能调用数据库中已存储的过程。此类对象建立在Connection对象之上,即Command对象通过连接至数据源来实现其功能。
数据适配器主要负责在数据源与数据集之间进行数据传输,它通过向Command对象发出指令,然后将获取的数据存入DataSet对象中。该对象基于Command对象构建,并提供了众多与DataSet协同使用的功能。
该对象相当于一个临时存储区域(缓存),能够保存从数据库中检索出的信息,甚至可以展示整个数据库的内容,而这一数据集是存储在内存中的。DataSet的功能不仅限于存储多个Table,它还能通过DataAdapter对象获取诸如主键在内的数据表结构信息,并且能够追踪数据表之间的相互关系。DataSet对象在ADO.NET中占据核心地位,其构建基础在于DataAdapter对象之上。值得注意的是,DataSet对象本身并不具备与数据源直接交流的能力;换句话说,我们实际上是将DataAdapter对象视作DataSet对象与数据源之间数据传输的纽带。数据集内含有多个数据表,而每个数据表又包含多个数据行。
在仅需按顺序读取数据且无需执行其他操作的情况下,我们可以利用DataReader这一对象。DataReader对象仅能逐行顺序地从数据源中提取数据,这些数据存储于数据库服务器上,并非一次性被导入程序内存。它仅能通过游标来访问当前行的数据,并且这些数据仅限于读取,不支持任何其他操作。由于DataReader在处理数据时规定每次仅能获取一条记录,并且仅限于读取操作,因此其应用不仅能够有效节约资源,而且运作效率相当高。此外,利用DataReader对象不仅效率上乘,还因为无需将全部数据传输回来,从而有助于减轻网络负担。
ADO.NET通过Connection对象建立与数据库的连接,借助Command或DataAdapter对象执行SQL指令,并将执行所得数据通过DataReader或DataAdapter对象反馈回来,最终利用这些对象对数据结果进行操作。
20、请简述面向对象的多态的特性及意义
简言之,多态性是一种能够呈现不同形态的特性,在面向对象编程中,这表示编程语言会根据对象类型的差异,采取各自独特的处理方式。
特别是重载方法和继承类这种形式的能力。
多态被认为是面向对象语言的必备特性。
面向对象的语言使用虚方法表达多态。
这表明子类能够拥有与基类相同的方法签名,同时基类也能够调用子类中的方法。
在C#编程语言里,若要确保子类中的方法能够被父类所调用,务必采用virtual关键字对方法进行声明。
21、写一个冒泡排序(从小到大)。
定义了一个整型数组,其元素分别为:11,22,33,44,55,以及66。
int temp = 0;
int count = 0;
for (int i = 1; i = i; j--)
if (myInts < myInts)
temp = myInts;
myInts = myInts;
myInts = temp;
count++;
22、ref和out
在方法执行完毕后,需确保输出参数被正确处理,即需创建一个与原方法输出参数类型一致的变量来承接该方法的结果,且该变量必须包含“out”关键字。
若方法中使用的形参类型为out,那么在调用该方法时,实际传递的参数也应当包含out关键字。
在使用引用传参时,必须先对其进行初始化处理。一旦参数被传递到方法中,若在方法执行过程中该参数的值发生变动,这种改变将永久性地影响该参数变量。
23、说出B/S和C/S的区别
①体积:C/S胖客户端,B/S瘦客户端
②效率:C/S本地运行,B/S服务器端运行
③网络:C/S依赖不强,B/S必须依赖网络
④用户:C/S体验更好,B/S其次
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-381964.html转载请注明,以上开发莫浮于表面仅实现功能,需积累.NET 等编程语言基础知识资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)