看书及实战疑问总结帖

1.private static final long serialVersionUID = 1L;的作用

SerialVersionUID,简称SUID,是当对象序列化的时候对象的一个标识(stamp on 在这里我也不太清楚翻译

成什么好),SUID的值常为该对象的hascode。你可以使用工具serialver查看一个序列化对象的SUID。SUID用于

控制对象的版本。你也可以在类文件中指定SUID。不指定SUID的结果就是当你添加或者更改类的域并已经序列化

类的时候,类是不能再恢复了,因为新的SUID和之前的SUID不同了。Java的序列化过程依赖于正确的SUID来反

序列化已经序列化的对象,如果SUID不匹配,那么就会抛 java.io.InvalidClassException 异常了。

SUID不是一个对象的哈希值(翻译错了,公司一个牛逼同事提醒了!),是源类的哈希值。如果类更新,例如域的改变,SUID会变化,这里有4个步骤:

1.忽略SUID,相当于运行期间类的版本上的序列化和反序列上面没有差异。

2.写一个默认的SUID,这就好像线程头部。告诉JVM所有版本中有着同样SUID的都是同一个版本。

3.复制之前版本类的SUID。运行期间这个版本和之前版本是一样的版本。

== 4.使用类每个版本生成的SUID。如果SUID与新版本的类不同,那么运行期间两个版本是不同的,并且老版本类序列化后的实例并不可以反序列成新的类的实例。==

总的来说:Java中,如果class实现了序列化接口,你没有加这一行,eclipse会自动给warning,建议加上,否则,JVM会自动编译生成一个序列号,这样传输会造成反序列化失败。因为不同的JVM之间的序列化算法是不一样的,不利于程序的移植。

一般情况下,建议序列化的class都给一个序列化的ID,这样可以保证序列化的成功,版本的兼容性。

转自:https://blog.csdn.net/iaiti/article/details/41278699
https://blog.csdn.net/u013325815/article/details/52041103

2.SRC和HREF的区别

href是hypertext reference的缩写,是超文本引用,指向需要连结的地方,是与该页面有关联的,是引用。在 link和a 等元素上使用。
src是resource的缩写,是指向物件的来源地址,是引入,在 img、script、iframe 等元素上使用。

3.继承和组合的区别

(1)什么是继承

A继承B,说明A是B的一种,并且B的所有行为对A都有意义

eg: A=woman B=human

而 A=鸵鸟 B=鸟 (不行),因为鸟会飞,但是鸵鸟不会。

(2)什么是组合

若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。

例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成。

(3)继承的优点和缺点

-优点:
*容易进行新的实现,因为其大多数可继承而来。
*易于修改或扩展那些被复用的实现。
-缺点:
* 破坏了封装性,因为这会将父类的实现细节暴露给子类。
* “白盒”复用,因为父类的内部细节对于子类而言通常是可见的。
* 当父类的实现更改时,子类也不得不会随之更改。
* 从父类继承来的实现将不能在运行期间进行改变。

(4)组合的优点和缺点

-优点:
* 容器类仅能通过被包含对象的接口来对其进行访问。
* “黑盒”复用,因为被包含对象的内部细节对外是不可见。
* 封装性好。
* 实现上的相互依赖性比较小。(被包含对象与容器对象之间的依赖关系比较少)
* 每一个类只专注于一项任务。
* 通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。
-缺点:
* 导致系统中的对象过多。
* 为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。

总则:优先使用(对象)组合,而非(类)继承

4.JS中函数名后面的括号加与不加的区别

function fun(){
return 3
}
var a=fun
var b=fun()
a是fun函数,b是3

5.转发与重定向的区别

HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。
转发和重定向的区别:
1.转发是一次,重定向是两次(次数)
2.转发是服务器行为,重定向是浏览器行为(行为)
3.转发的地址栏不变,重定向地址栏变化(地址栏)
4.请求域中的数据转发不丢失,重定向丢失(数据)
举个通俗的例子:
转发:你有一个问题问老师,老师不会,她去问了她的老师,然后再给你解答。
重定向:你有一个问题问老师,老师说我不会,你去问我的老师。
如果你要跳转的那个页面需要用到你本页的参数,就用转发,反之

6.栈顶和栈底

栈是一种数据结构。先进后出。即LIFO原则。常用于中断断点现场的数据保存与恢复。
栈底指的是堆栈指针sp所指的起始位置begin,当有数据进站后,sp+1;当sp指向的地址为
begin+length;即栈满,此时的sp指向的即为栈顶。
通俗讲,栈底就是第一个进栈的数据,栈顶就是最后一个进栈的数据

7.什么是回显

为了找回显到底是什么,百度了n多,也没有看到满意的解释。
回显,就是显示正在执行的批处理命令及执行的结果等。这是定义来说的。
通俗的讲,回显就是,你把一段文字,或者图片,原封不动的呈现在屏幕上,比如你在招聘网站上传的个人头像。

8.http tcp socket之间的联系

TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。

随着时间的推移,html页面变得复杂了,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次tcp连接就显得低效了。因此Keep-Alive被提出用来解决效率低的问题。从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。虽然这里使用TCP连接保持了一段时间,但是这个时间是有限范围的,到了时间点依然是会关闭的,所以我们还把其看做是每次连接完成后就会关闭。后来,通过Session, Cookie等相关技术,也能保持一些用户的状态。但是还是每次都使用一个连接,依然是无状态连接。
  实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。

比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。对于从C#编程的角度来讲,为了方便,你可以直接选择已经制造好的轿车Http来与服务器交互。但是有时候往往因为环境因素或者其他的一些定制的请求,必须要使用TCP协议,这时就需要使用Socket编程,然后自己去处理获取的数据。就像是你用已有的发动机,自己造了一辆卡车,去从服务器交互。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值