#每日一道面试题#
开篇:
从今天开始,每日一道面试题,帮助群里的小伙伴们进行面试题辅导提高,还请大家踊跃回复参与其中,针对人群:中级及高级开发人员,同时欢迎大神给与点评或板砖
为了表现的我分两篇介绍,分别为偏前端,后端,注意只是偏向不同
开始之前我先申明一下:
所有面试题的答案均不是唯一的,所有题目的答案都是仁者见智的回答,如果自己以前不知道,可以看一下,知道的,结合自己以前的做个对比吧,觉得有问题的,请直接留言或加入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或百度吧,太多了,不想写了
3、ORM中的延迟加载与直接加载有什么异同?(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号小姨子结婚,我休假三天,这三天由未央、娘炮,也然出题并整理答案
5、C#中的委托是什么?事件是不是一种委托?(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
8、override与重载(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
结束语:
面试题万变不离其宗,只要每一道例题都吃透了,一般的面试是没有问题,但是面试除了面试题,口语表达能力也是非常重要的一个环节,当然了这是另外一个话题,有时间我在出一个帖子,把大家的面试经历收集一下,整理出来供群内的小伙伴们参考学习;