黑马Java热门面试题Web(四)


目录:

(1)HTTP 响应状态码有什么特点?

(2)HTTP 协议包括哪些请求?

(3)Get 和 Post 的区别?

(4)HTTP 中重定向和请求转发的区别?

(5)HTTP 和 HTTPS 的区别?

(6)HTTP 请求报文与响应报文格式?

(7)在浏览器中输入 url 地址到显示主页的过程?

(8)Cookie 和 Session 的区别?

(9)Cookie 的过期和 Session 的超时有什么区别?

(10)如何解决分布式 Session 问题?

(11)过滤器和拦截器的区别?


(1)HTTP 响应状态码有什么特点?

 (2)HTTP 协议包括哪些请求?

 GET:对服务器资源的简单请求

 POST:用于发送包含用户提交数据的请求

 HEAD:类似于 GET 请求,不过返回的响应中没有具体内容,用于获取报头

 PUT:传说中请求文档的一个版本

 DELETE:发出一个删除指定文档的请求

 TRACE:发送一个请求副本,以跟踪其处理进程

 OPTIONS:返回所有可用的方法,检查服务器支持哪些方法

 CONNECT:用于 ssl 隧道的基于代理的请求

(3)Get 和 Post 的区别?

GET:

 get 重点是从服务器上获取资源

 get 传输数据是通过 URL 请求,以 field(字段) = value 的形式,置于 URL 后, 并用“?”连接,多个请求数据间用“&”连接

 get 传输数据量小,因为受 URL 长度限制,但是效率高

 get 是不安全的,因为 URL 是可见的,可能会泄漏私密信息

 get 方式只能支持 ASCII 字符,向服务器传的中文字符可能会乱码

POST:

 post 重点是向服务器发送数据。

 post 传输数据是通过 HTTP 的 post 机制。将字段和对应值封存在请求实体中发 送给服务器。这个过程用户是不可见的

 post 可以传输大量数据,所以上传文件时只能用 post

 post 支持标准字符集,可以正确传递中文字符

 post 较 get 安全性高

总结:

 GET 用于获取信息,无副作用,幂等,且可缓存

 POST 用于修改服务器上的数据,有副作用,非幂等,不可缓存

(4)HTTP 中重定向和请求转发的区别?

本质区别:

 转发是服务器行为

 重定向是客户端行为

重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源, 传输的数据会丢失。

请求转发特点:一次强求,浏览器地址不变,访问的是自己 本身的 web 资源,传输的数据不会丢失。

(5)HTTP 和 HTTPS 的区别?

HTTPS = HTTP + SSL

 https 有 ca 证书,http 一般没有

 http 是超文本传输协议,信息是明文传输。https 则是具有安全性的 ssl 加密传 输协议

 http 默认 80 端口,https 默认 443 端口

(6)HTTP 请求报文与响应报文格式?

请求报文: a、请求行:包含请求方法、URI、HTTP 版本信息 b、请求首部字段 c、 请求内容实体

响应报文: a、状态行:包含 HTTP 版本、状态码、状态码的原因短语 b、响应首 部字段 c、响应内容实体

(7)在浏览器中输入 url 地址到显示主页的过程?

总体来说分为以下几个过程:

1、域名解析

2、发起 TCP 的三次握手

3、建立 TCP 连接后发起 http 请求

4、服务器响应 http 请求,浏览器得到 HTML 代码

5、浏览器解析 HTML 代码,并请求 HTML 代码中的资源

6、浏览器对页面进行渲染呈现给用户

7、连接结束

(8)Cookie 和 Session 的区别?

Cookie: 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给 每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时, 同时会发送所有为该服务器存储的 cookie。 Session: 是存储在 web 服务器端的 一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程 序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个 用户会话中一直存在下去。

区别:

①存在的位置

 cookie 存在于客户端,临时文件夹中;

 session 存在于服务器的内存中,一个 session 域对象为一个用户浏览器服务

②安全性

 cookie 是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进 行加密后存放;  session 存放于服务器的内存中,所以安全性好

③网络传输量

 cookie 会传递消息给服务器;

 session 本身存放于服务器,不会有传送流量

④生命周期(以 30 分钟为例)

 cookie 的生命周期是累计的,从创建时,就开始计时,30 分钟后,cookie 生命 周期结束;

 session 的生命周期是间隔的,从创建时,开始计时如在 30 分钟,没有访问 session,那么 session 生命周期被销毁。但是,如果在 30 分钟内(如在第 29 分 钟时)访问过 session,那么,将重新计算 session 的生命周期。关机会造成 session 生命周期的结束,但是对 cookie 没有影响。

⑤访问范围

 cookie 为多个用户浏览器共享;

 session 为一个用户浏览器独享

简单来说 cookie 机制采用的是在客户端保持状态的方案, 而 session 机制采用的是 在服务器端保持状态的方案。由于才服务器端保持状态的方案在客户端也需要保存 一个标识,所以 session 机制可能需要借助于 cookie 机制来达到保存标识的目的。

(9)Cookie 的过期和 Session 的超时有什么区别?

Cookie 的过期和 Session 的超时(过期),都是对某个对象设置一个时间,然后采 用轮训机制(或者首次访问时)检查当前对象是否超时(当前对象会保存一个开始 时间),如果超时则进行移除。 cookie 保存在浏览器中,不安全。而 session 是保 存在服务端的。cookie 的生命周期很长,而 session 很短,一般也就几十分钟。

cookie是保存在客户端,session 保存在服务器端,cookie保存着session 相关信息。 如果 cookie 没有超时,那么浏览器每次请求都会带上该 cookie 信息,服务器端根据 cookie 信息从 session 缓存中获取相对应的 session。这两个信息有一个超时,用户 连接即宣告关闭。

会话的超时由服务器来维护,它不同于 Cookie 的失效日期。 首先,会话一般基于 驻留内存的 cookie,不是持续性的 cookie,因而也就没有截至日期。 即使截取到 JSESSIONID cookie,并为它设定一个失效日期发送出去。浏览器会话和服务器会话也 会截然不同。

(10)如何解决分布式 Session 问题?

 Nginx ip_hash 策略 ,服务端使用 Nginx 代理,每个请求按访问 IP 的 hash 分配,这样来自同一 IP 固定访问一个后台服务器,避免了在服务器 A 创建 Session,第二次分发到服务器 B 的现象。

 Session 复制,任何一个服务器上的 Session 发生改变(增删改),该节点会把 这个 Session 的所有内容序列化,然后广播给所有其它节点。

 共享 Session,服务端无状态话,将用户的 Session 等信息使用缓存中间件来统 一管理,保障分发到每一个服务器的响应结果都一致。

(11)过滤器和拦截器的区别?

 原理实现上:过滤器基于回调实现,而拦截器基于动态代理。

 控制粒度上:过滤器和拦截器都能够实现对请求的拦截功能,但是在拦截的粒 度上有较大的差异,拦截器对访问控制的粒度更细。

 使用场景上:拦截器往往用于权限检查、日志记录等,过滤器主要用于过滤请 求中无效参数,安全校验。

 依赖容器上:过滤器依赖于 Servlet 容器,局限于 web,而拦截器依赖于 Spring 框架,能够使用 Spring 框架的资源,不仅限于 web。

 触发时机上:过滤器在 Servlet 前后执行,拦截器在 handler 前后执行,现在大 多数 web 应用基于 Spring,拦截器更细。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
黑马程序员训练营入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
1.方法中的内部类能不能访问方法中的局部变量,为什么? 2.分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList list = new ArrayList(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } } 3.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 4.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 5.定义一个文件输入流,调用read(byte[] b)方法将exercise.txt * 文件中的所有内容打印出来(byte数组的大小限制为5)。 6.存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 7.有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常, * 在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。 * 完成这个例子,请说出java中针对异常的处理机制。 8.编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, * 然后打印出这个十进制整数对应的二进制形式。 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况, * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。 * 提示:十进制数转二进制数的方式是用这个数除以2, * 余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2, * 这次得到的余数就是次低位,如此循环,直到被除数为0为止。 * 其实,只要明白了打印出一个十进制数的每一位的方式 * (不断除以10,得到的余数就分别是个位,十位,百位), * 就很容易理解十进制数转二进制数的这种方式。 10.有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。 * 问:最后剩下的是100人中的第几个人?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值