C#面试题
1、GET和POST有什么区别
Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。GET等幂,POST不等幂。基础的这样答已经OK了,深度回答:
1.url可见性
get传参方式是通过地址栏URL传递,是可以直接看到get传递的参数,post传参方式参数URL不可见,get把请求的数据在URL后通过?连接,通过&进行参数分割。post将从参数存放在HTTP的包体内
2.传输数据大小
get传递数据是通过URL进行传递,对传递的数据长度是受到URL大小的限制,URL最大长度是2048个字符。post没有长度限制
3.后退页面
get后退不会有影响,post后退会重新进行提交
4.缓存
get请求可以被缓存,post不可以被缓存
5.编码方式
get请求只URL编码,post支持多种编码方式
6.历史记录
get请求的记录会留在历史记录中,post请求不会留在历史记录
7 字符类型
get只支持ASCII字符,post没有字符类型限制
二、post相比较get传参方式的优点
1.安全性比get传参方式好:
a.存在于HTTP包中,一般不会直接被查找到
b.post不会被浏览器进行缓存
c.不会留在历史记录中
(并不代表post一定安全,因为在HTTP下都是明文传输,post仍然可以被查找到,增加安全性最好使用https协议)
2.post没有字符和编码的限制,能发送的数据类型更多
3.post传送数据没有大小限制,比get可以发送的更多的数据
post的缺点:速度比get传输慢,get的效率更高
三、为什么get的效率比post高
1.post在接收返回来的数据会先将请求头发送给服务器确认,然后才真正的发送数据,(相当于第一次先向服务器打个招呼,第二次才将数据真正的发过来,get则是直接发送数据。专业的说法是,get产生一个TCP数据包,post产生两个TCP。数据包但并不是所有的浏览器post都会请求两次,火狐浏览器就会请求一次)总结起来就是请求的过程比get更多
2.get会将数据进行缓存
2、什么是序列化,什么时候会用到序列化
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
可以用到序列化的地方:
a、数据持久化:比如一个电商平台,有数万个用户并发访问的时候会产生数万个session 对象,这个时候内存的压力是很大的。我们可以把session对象序列化到硬盘中,需要时在反序列化,减少内存压力。
b、网络传输:我们将系统拆分成多个服务之后,服务之间传输对象,不管是何种类型的数据,都必须要转成二进制流来传输,接受方收到后再转为数据对象。
3、面向对象的三个基本特征,说一说你的理解。
三个基本特征是:封装、继承、多态。三大特征包括哪些,我们用一张图来形容。
1.封装
封装,也就是把客观事物封装成抽象的类,封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。只让可信的类或者对象操作,对不可信的进行信息隐藏
面相对象的不就是使用程序处理事情时以对象为中心去分析吗,与面向过程不同,面向过程关心处理的逻辑、流程等问题,而不关心事件主体。而面向对象即面向主体,所以我们在解决问题时应该先进行对象的封装(对象是封装类的实例,比如张三是人,人是一个封装类,张三只是对象中的一个实例、一个对象)
2.继承
继承是面向对象的基本特征之一,继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
3.多态
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
多态存在的三个必要条件:
- 继承
- 重写(子类继承父类后对父类方法进行重新定义)
- 父类引用指向子类对象
简言之,多态其实是在继承的基础上的。比如说今天我们要去动物园参观动物,那么你说我们去参观兔子、参观绵羊、参观狮子、参观豹子都是对的,但你不能说我们去参观汽车。在这个例子中,子类具有多态性:除了使用自己的身份,还能充当父类。
4、在WPF中是用哪个对象结合来通知界面集合中有变更?
ObservableCollection<T> 类 表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
5、有八个大小相同的球,其中7个重量相等,有一个稍微重一点。如何用天平仅称两次就能确定哪个球更重?
第一次随便拿出其中的6个,放在天平上左右各3个称重,就可以确定较重的一个在哪里了,有三种情况:在天平左边3个中,在天平右边的3个中,或者是在剩下的2个中。第二次就很好找到比较重的一个了,假如是前两种情况,只要随便拿出来3个中的2个,放在天平上称一下就知道了:如果不一样重,较重的就选出来了;如果两个一样重,则剩下的就是要找的了。如果是第三种情况,则用天平称一下就出来了。
6、说说你对路由的理解?
能够根据系统需求,灵活的划分请求规则(不同模块请求的 URL 是不一样的)。
屏蔽物理路径,提高系统的安全性,以上情况是无法根据 URL 分析视图文件在站点目录中的位置。
有利于搜索引擎优化,可以将 URL 请求统一规范,以后维护中,如果页面发生变化,URL 可以保持不变