1.常见HTTP状态码
消息(1打头)
这一类型的状态码代表请求已被接受,需要继续处理。除非在某些试验条件下,服务器禁止向此类客户端发送1打头的状态码
- 100:客户端应当继续发送请求
- 101:服务器已经理解了客户端的请求,并通知客户端来完成这个请求
- 102:代表处理将被继续
成功(2打头)
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受
- 200:请求成功,请求所希望的响应头或数据体将随此响应返回
- 201:请求已被实现,且其URL已经随Location头返回
- 202:服务器已接受请求,但尚未处理
- 203:服务器已成功处理了请求,但某些应答头可能不正确,因为使用的是文档拷贝
- 204:没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的
- 205:没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容
- 206:服务器已经成功处理了部分GET请求
重定向(3打头)
这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向
- 300:客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明
- 301:被请求的资源已永久移动到新位置,新的URL在Location头中给出,浏览器应该自动地访问新的URL(永久性的)
- 302:类似于301,但新的URL应该被视为临时性的替代,而不是永久性的
- 303:类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取,也就是POST重定向为GET
- 304: 客户端有缓冲的文档并发出了一个条件性的请求。客户的缓存资源是最新的, 要客户端使用缓存
- 305:使用代理,必须通过代理访问资源, 代理的地址在Response 的Location中
请求错误(4打头)
这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容
- 400:语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求
- 401:未授权,当前请求需要用户验证
- 402:该状态码是为了将来可能的需求而预留的
- 403:服务器已经理解请求,但是拒绝执行它
- 404:未找到对应资源
- 405:指定的请求方法不能被用于请求相应的资源
- 406:请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体
服务器错误(5和6打头)
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理
- 500:内部服务器错误
- 501:服务器不支持实现请求所需要的功能
- 502:服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答
- 503:服务器由于维护或者负载过重未能应答
- 504:由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答
- 505:服务器不支持请求中所指明的HTTP版本
2.cookie和session的区别
cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式,并且都可以用来存放私密的东西
区别
- 数据存储位置的区别
(1).cookie数据保存在客户端
如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,比如你登录以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以,使用 cookie被攻击的可能性比较大。如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器。如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的 cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要主意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器
(2).session数据保存在服务器端
如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造,但是如果你能够获取某个登录用户的 sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。sessionid是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性 - 有效期的不同
(1).session是放在服务器上的,过期与否取决于服务期的设定
(2).cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去 - 存放的数据量大小
(1).cookie最多只能存放3k的数据
(2).session无限制,但放太多性能不好
所以,将登录信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中*
3.TCP和UDP
TCP协议
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂。
TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
UDP协议
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。
TCP协议和UDP协议的区别
- (1).TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接;
- (2).TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;
- (3).TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等); - (4).每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;
- (5).TCP首部开销20字节;UDP的首部开销小,只有8个字节;
- (6).TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道
4.前序、中序、后序遍历
首先改变一下这几个遍历的名字(前根序遍历,中根序遍历,后根序遍历);这样就好理解多了,前中后本来就是相对于根结点来说的。
定义
- 前根序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。
- 中根序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。
- 后根序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。
拓展
- 已知一棵二叉树的前根序序列和中根序序列,构造该二叉树的过程如下:
(1).根据前根序序列的第一个元素建立根结点;
(2).在中根序序列中找到该元素,确定根结点的左右子树的中根序序列;
(3).在前根序序列中确定左右子树的前根序序列;
(4).由左子树的前根序序列和中根序序列建立左子树;
(5).由右子树的前根序序列和中根序序列建立右子树。 - 已知一棵二叉树的后根序序列和中根序序列,构造该二叉树的过程如下:
(1). 根据后根序序列的最后一个元素建立根结点;
(2). 在中根序序列中找到该元素,确定根结点的左右子树的中根序序列;
(3). 在后根序序列中确定左右子树的后根序序列;
(4). 由左子树的后根序序列和中根序序列建立左子树;
(5). 由右子树的后根序序列和中根序序列建立右子树。
5.观察者模式的意图和使用方法
不懂!!!留着坑以后填!!!!
6.SQL语句的having子句
原问题是选择题,具体什么想不起来了
- where和having的区别
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录。