每日一道面试题(后台)

#每日一道面试题#

开篇:

从今天开始,每日一道面试题,帮助群里的小伙伴们进行面试题辅导提高,还请大家踊跃回复参与其中,针对人群:中级及高级开发人员,同时欢迎大神给与点评或板砖

为了表现的我分两篇介绍,分别为偏前端,后端,注意只是偏向不同

每日一道面试题(前端)

每日一道面试题(后台)

开始之前我先申明一下

所有面试题的答案均不是唯一的,所有题目的答案都是仁者见智的回答,如果自己以前不知道,可以看一下,知道的,结合自己以前的做个对比吧,觉得有问题的,请直接留言或加入QQ群:70895254

闲话少说,言归正传,面试题直接上:

1、请解释进程与线程的区别?进程与程序的区别?    2017-04-05

答:进程(process)是一块包含了某些资源的内存区域;进程中所包含的一个或多个执行单元称为线程(thread),进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位

1)线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程;

2)资源拥有: 系统会进程分配内存区域,但是不会为线程分配内存,线程只能共享资源

3)空间地址:进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。

4)二者可以并发执行

进程和应用程序的区别:

1)进程是程序及其数据在计算机的一次运行活动,是一个运行过程,是一个动态的概念。进程的运行实体是程序,离开程序的进程没有存在的意义。而程序是一组有序的指令集合,是一种静态概念。

2)进程是程序的一次执行过程,它是动态地创建和消亡的,具有一定的生命周期,是暂时存在的;而程序则是一组代码的集合,它是永久存在的,可长期保存。

3)一个进程可以执行一个或几个程序,一个程序也可以构成多个进程。进程可以创建进程,而程序不能形成新的程序。

4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。

2、简述ASP.NET请求的生命周期?2017-04-06

这个自行google或百度吧,太多了,不想写了

3ORM中的延迟加载与直接加载有什么异同?(2017-04-07)

答:延迟加载(lazy loading)(也称为懒加载),延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是将对象的初始化延迟,在程序使用该对象时才去初始化。

直接加载(Eager loading)(也成立即加载),直接加载就是在程序初始化时将程序中用到的所有的对象也初始化,这样会降低程序的效率。

简单的理解就是:只在需要的时候才去加载必要的数据,这样可以避免即时加载所带来的不必要的系统开销

4、值类型和引用类型的区别?  2017-04-10

答:相同点:引用类型可以实现接口,值类型当中的结构体也可以实现接口;

引用类型和值类型都继承自System.Object类。几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类,即直接继承System.ValueType。System.ValueType直接派生于System.Object. 即System.ValueType本身是一个类类型,而不是值类型。其关键在于ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。

不同点:引用类型存储在托管堆上,值类型通常存储在栈上(引用类型在栈中存储一个引用,实际位置位于托管队);

引用类型与值类型相同的是,结构体也可以实现接口;

引用类型可以派生出新的类型,而值类型不能;

引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型);

引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值

值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。

引用类型(reference type):string 和 class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中

PS:11-13号小姨子结婚,我休假三天,这三天由未央、娘炮,也然出题并整理答案

5C#中的委托是什么?事件是不是一种委托?2017-04-11未央)

答:委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的指针。

委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法

6、默认的Session存在什么问题?如何解决?2017-04-12未央)

答: session四中存储方式的iis进程,sqlserver,状态服务器,还有一种就是自写程序,默认存储在iis进程中,但是进程奔溃或重启的时候,session会丢失;(欢迎补充)

7、简述ASP.NET的几种页面传值方式?      2017-04-13也然)

答:querystring  session  cookie  application  Server.transfer

8override与重载(overload)的区别?(2017-04-14

答:重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。Override 是进行基类中函数的重写。Override是面向对象的概念

9、简述Using语法的作用。2017-04-14  凉诺)

答:1.引用命名空间 using system.net

    2.2.处理非托管对象,保证其正确释放资源;

using( SqlConnection con = new SqlConnection(str) ){

            //TODO:your code;

}

10、抽象类和接口的区别和联系?2017-04-14  凉诺)

答:1)抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2)抽象类要被子类继承,接口要被类实现。

3)接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

4)接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5)抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

6)抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。

7)抽象类里可以没有抽象方法

8)如果一个类里有抽象方法,那么这个类只能是抽象类

9)抽象方法要被实现,所以不能是静态的,也不能是私有的。

10)接口可继承接口,并可多继承接口,但类只能单根继承。

  特别是对于公用的实现代码,抽象类有它的优点。抽象类能够保证实现的层次关系,避免代码重复。然而,即使在使用抽 象类的场合,也不要忽视通过接口定义行为模型的原则。从实践的角度来看,如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能 够更有效地分离行为与实现,为代码的维护和修改带来方便。

11、在C#中,string str = null 与 string str = “” 请说明其区别。?2017-04-14  凉诺)

答:String Str="";表示一个空串,被实例化了,占用了内存空间,而String Str=null;但没有分配内存空间,是一个空引用;""分配一个长度为空的存储空间,所以一般用string.Empty,在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用,判定为空字符串的几种写法,按照性能从高到低的顺序是:s.Length == 0      优于 s == string.Empty      优于 s == "";

12、谈一谈什么是Delegate?  2017-04-17

答:参考一下吧http://www.cnblogs.com/jackson0714/p/5111347.html
13、如何处理百万条数据的优化?  2017-04-18

答:可以从以下几个方面入手

(1)减少数据访问(减少磁盘访问)

    1.1)正确创建索引

    1.2)只通过索引访问数据

    1.3)优化SQL执行计划

(2)返回更少数据(减少网络传输或磁盘访问)

    2.1)分页:客户端分页、服务端分页、数据库分页

    2.2)只返回需要的字段

    2.3)减少客户端内存占用

(3)减少交互次数(减少网络传输)

    3.1)batch 操作

    3.2)设置Fetch Size

(4)减少服务器CPU开销(减少CPU及内存开销)

    4.1)使用绑定变量

    4.2)合理使用排序

    4.3)减少比较操作

    4.4)大量复杂运算在客户端处理

(5)利用更多资源(增加资源)

    5.1)客户端多进程并行访问

    5.2)数据库并行处理

(6)缓存机制

    6.1)建立告诉缓存机制

    6.2) 如有条件可以全部内存处理

以上自上而下优化成本依次递增

sql优化详细参考:http://www.open-open.com/lib/view/open1389705004242.html

参考:http://blog.csdn.net/libing13820393394/article/details/48634525

14、谈谈你对MVC路由理解? (2017-04-20)

答:MVC是Model—View—Controler的简称。即模型—视图—控制器

MVC基本的处理流程:来了一个URL请求, 从中找到Controller和Action的值, 将请求传递给Controller处理. Controller获取Model数据对象, 并且将Model传递给View, 最后View负责呈现页面。url请求有contriller实现中体现路由机制:一般是由路由名称,路由模式和默认值构成的

1、匹配传入的请求:url Routing的作用是将浏览器的URL请求映射到特定的MVC控制器动作。

2、构造传出的URL,用来响应控制器中的操作:当我们访问http://localhost:8080/Home/Index 这个地址的时候,请求首先被UrlRoutingModule截获,截获请求后,从Routes中得到与当前请求URL相符合的RouteData对象, 将RouteData对象和当前URL封装成一个RequestContext对象,然后从Requestcontext封装的RouteData中得到 Controller名字,根据Controller的名字,通过反射创建控制器对象,这个时候控制器才真正被激活,最后去执行控制器里面对应的 action。

Routing(路由)的作用

1、匹配传入的请求(不匹配服务器物理文件);

2、将请求映射到 控制器 的具体操作 Action方法 和 参数;

3、调用并执行对应 控制器 类的 Action 方法;

15、ORM实现原理?你常用的ORM框架?(2017-04-21)

答:概念:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

详细介绍:让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。

    当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。

    ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

ORM技术特点:

    1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。

2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

.Net常用ORM框架: (必须熟悉两种以上的框架,并且能深刻理解)

  NHibernate

  NBear

  Castle ActiveRecord

  iBATIS.NET

  DAAB 

  EntitysCodeGenerate

 EntityFormerWork

 Linq to sql

 PetaPoco

参考:http://www.cnblogs.com/haofuqi/p/3906777.html

PS:本周的面试题:2017-04-24~2017-05-01

15~40 题目:

1.静态成员和非静态成员的区别?
2.const 和 static readonly 区别?
3.extern 是什么意思?
4.abstract 是什么意思?
5.internal 修饰符起什么作用?
6.sealed 修饰符是干什么的?
7.override 和 overload 的区别?
8.什么是索引指示器?
9.new 修饰符是起什么作用?
10.this 关键字的含义?
11.可以使用抽象函数重写基类中的虚函数吗?
12.密封类可以有虚函数吗?
13.什么是属性访问器?
14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
15.接口可以包含哪些成员?
16.类和结构的区别?
17.接口的多继承会带来哪些问题?
18.抽象类和接口的区别?
19.别名指示符是什么?
20.如何手工释放资源?
21.P/Invoke是什么?
22.StringBuilder 和 String 的区别?
23.explicit 和 implicit 的含义?
24.params 有什么用?
25.什么是反射?

参考地址:http://www.cnblogs.com/51pansou/p/5283772.html

两周的面试题: 2017-05-02~2017-05-12

40~50 题目:

排序算法题目

41、冒泡排序(Bubble Sort)  (2017-05-01)

42、选择排序(Selection Sort)(2017-05-02)

43、插入排序(Insertion Sort)(2017-05-03)

44、希尔排序(Shell Sort)(2017-05-04)

45、归并排序(Merge Sort)(2017-05-05)

46、快速排序(Quick Sort)(2017-05-08)

47、堆排序(Heap Sort)(2017-05-09)

48、计数排序(Counting Sort)(2017-05-10)

49、桶排序(Bucket Sort)(2017-05-11)

50、基数排序(Radix Sort)(2017-05-12)

十大经典算法:http://www.cnblogs.com/wzhiq896/p/5904891.html

结束语:

面试题万变不离其宗,只要每一道例题都吃透了,一般的面试是没有问题,但是面试除了面试题,口语表达能力也是非常重要的一个环节,当然了这是另外一个话题,有时间我在出一个帖子,把大家的面试经历收集一下,整理出来供群内的小伙伴们参考学习;

原文地址:https://www.cnblogs.com/fly12300/p/6667650.html