zoukankan      html  css  js  c++  java
  • 面试之JavaWeb基础

    1.说下原生 jdbc 操作数据库流程?

    第一步:Class.forName()加载数据库连接驱动;
    第二步:DriverManager.getConnection()获取数据连接对象;

    第三步:根据 SQL 获取 sql 会话对象,有 2 种方式 Statement、PreparedStatement ;
    第四步:执行 SQL 处理结果集,执行 SQL 前如果有参数值就设置参数值 setXXX();
    第五步:关闭结果集、关闭会话、关闭连接。

    2.什么要使用 PreparedStatement?

    1、 PreparedStatement 接口继承 Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象。
    2、 作 为 Statement 的 子 类 , PreparedStatement 继 承 了 Statement 的 所 有 功 能 。 三 种 方
    法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数

    3、在 JDBC 应用中,在任何时候都不要使用 Statement,原因如下:
    一、代码的可读性和可维护性.Statement 需要不断地拼接,而 PreparedStatement 不会。
    二、PreparedStatement 尽最大可能提高性能.DB 有缓存机制,相同的预编译语句再次被调用不会再次需要编译。
    三、最重要的一点是极大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 传入的内容不会和 sql 语句发生任何匹配关系。

     

    3. 关系数据库中连接池的机制是什么?

    前提:为数据库连接建立一个缓冲池。
    1:从连接池获取或创建可用连接
    2:使用完毕之后,把连接返回给连接池
    3:在系统关闭前,断开所有连接并释放连接占用的系统资源
    4:能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。

    总结:

    数据库池连接数量一直保持一个不少于最小连接数的数量,当数量不够时,数据库会
    创建一些连接,直到一个最大连接数,之后连接数据库就会等待。

    4.  http 的长连接和短连接

    HTTP 协议有 HTTP/1.0 版本和 HTTP/1.1 版本。

    HTTP1.1 默认保持长连接(HTTP persistent connection,也翻译为持久连接),
    数据传输完成了保持 TCP 连接不断开(不发 RST 包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。

    在 HTTP/1.0 中默认使用的是短连接。也就是说,浏览器和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。
    从 HTTP/1.1 起,默认使用的是长连接,用以保持连接特性。

    5.http 常见的状态码有哪些?

    1XX:消息
    2XX:成功
    3XX:重定向
    4XX:请求错误
    5XX、6XX:服务器错误

    200 OK:客户端请求成功。
    400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
    401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
    403 Forbidden:服务器收到请求,但是拒绝提供服务。
    404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
    500 Internal Server Error:服务器发生不可预期的错误。
    503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

    6. OSI七层模型哪些

    应用层 ……………….计算机:应用程序,如FTP,SMTP,HTTP

    表示层 ……………….计算机:编码方式,图像编解码、URL字段传输编码

    会话层 ……………….计算机:建立会话,SESSION认证、断点续传

    传输层 ……………….计算机:进程和端口

    网络层…………………网络:路由器,防火墙、多层交换机

    数据链路层 ………..网络:网卡,网桥,交换机

    物理层…………………网络:中继器,集线器、网线、HUB

    7.一次完整的HTTP请求所经历的7个步骤 来源:

    建立TCP连接->发送请求行->发送请求头->(到达服务器)发送状态行->发送响应头->发送响应数据->断TCP连接

    8.简述TCP的三次握手和四次挥手过程

    TCP握手协议 
    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.
    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND(SYN发送)状态,等待服务器确认;
    SYN:同步序列编号(Synchronize Sequence Numbers)
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV(SYN收到)状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(已建立)状态,完成三次握手.

     四次挥手:

         (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
            (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
            (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
            (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。   

        大白话描述:第一次客户端发送关闭请求给服务端,服务端发送第二次请求告诉客户端我准备进行关闭,

        服务端再发送第三次请求告诉客户端我已经最后确认完毕可以关闭了, 客户端发送第四次请求告诉服务端,我立即关闭连接!

    9. POST和GET的区别

    • GET在浏览器回退时是无害的,而POST会再次提交请求。

    • GET产生的URL地址可以被Bookmark,而POST不可以。

    • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

    • GET请求只能进行url编码,而POST支持多种编码方式。

    • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

    • GET请求在URL中传送的参数是有长度限制的,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。而POST没有。

    • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

    • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

    • GET参数通过URL传递,POST放在Request body中。

    拓展内容:

    GET和POST还有一个重大区别: GET产生一个TCP数据包;POST产生两个TCP数据包

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    1. GET与POST都有自己的语义,不能随便混用。

    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。

    而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

    10.JAVA常见面试题之Forward和Redirect的区别

     Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。

    本质区别:转发是服务器行为,重定向是客户端行为。
    重定向特点:两次请求,浏览器地址发生变化变成目标资源地址,可以访问自己 web 之外的资源,传输的数据会丢失。不共享请求数据
    请求转发特点:一次请求,浏览器地址不变,访问的是自己本身的 web 资源可以访问WEB-INF目录中的资源,传输的数据不会丢失。共享一个请求数据

    拓展内容;

    对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。

    对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

    对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,

    由第2个信息资源响应该请求,两个信息资源共享同一个request对象。

  • 相关阅读:
    QF——UI之UIViewController
    QF——UI之几种常用的隐藏键盘的方法
    QF——UI之UIImageView及UIView的形变属性transform
    QF——iOS程序运行原理(APP的生命周期)
    QF——OC中的SEL类型和Block
    QF——OC内存管理详解
    QF——OC的多态,动态绑定及实现原理
    QF——OC中的KVC,KVO
    QF——OC数组
    QF——OC字符串
  • 原文地址:https://www.cnblogs.com/chenshuyong/p/10041444.html
Copyright © 2011-2022 走看看