javaWeb阶段的面试(1)

来源:互联网 发布:密山市知一派出所 编辑:程序博客网 时间:2024/06/05 02:30

1、JDBC操作数据库的步骤

    加载驱动,class.forName(“”);

    获取连接

    创建PrepareStatement

    执行语句

    处理结果

    释放资源

    关闭外部资源的顺序应该和打开的顺序相反,也就是说先关闭ResultSet、再关闭Statement、在关闭Connection。上面的代码只关闭了Connection(连接),虽然通常情况下在关闭连接时,连接上创建的语句和打开的游标也会关闭,但不能保证总是如此,因此应该按照刚才说的顺序分别关闭。

 

2、Statement和PrepareStatement有什么区别

    与Statement相比,PrepareStatement接口代表预编译的语句,主要的优势在于减少SQL的安全性,PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全;当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快

   

3、在进行数据库编程时,连接池有什么作用

    由于创建连接和释放连接都有很大的开销,尤其是数据库服务器不在本地时,每次建立连接都是需要TCP的三次握手,释放链接则是需要4次握手,为了提高系统的访问数据库的性能,可以实现创建若干连接置于连接池中,需要时直接从连接池中获取,使用结束后放回到连接池,而不需要关闭连接,从而避免频繁创建连接和释放链接造成的开销。

    大型网站性能优化的一个关键就是使用缓存,而缓存跟上面讲的连接池道理非常类似,也是使用空间换时间的策略。

 

4、事务的ACID是什么

    原子性:事务中各项操作要么全做要么全不做,

    一致性:事务结束后系统状态是一致的

    隔离性:并发执行的事务彼此无法看到对方的中间状态

    持久性:事务完成后所做的改动都会被持久化

   

    只有在并发访问数据是才需要事务,当多个事务访问同一个数据时,可能会出现5类问题,包括3类数据读取问题(脏读,不可重复度,幻读)和2类数据更新问题(第一类丢失更新和第二类丢失更新)

    数据库通常会通过锁机制来解决数据并发访问问题,按锁定对象不同可以分为表级锁和行级锁;按并发事务锁定关系可以分为共享锁和独占锁,具体的内容大家可以自行查阅资料进行了解。

 

5、事物的隔离级别

    readuncommited 读取了另一个事务未提交的数据

    readcommited   读取另一个事事务update的数据       oracle默认的隔离级别

    repeatableread 读取另一个事事务的insert的数据     mysql默认的隔离级别

    serializable    可串行化

    事物的隔离级别越高,并发性就越差

 

6、JDBC如何进行事务处理

    Connenction提供了事务处理的方法,调用setAutoCommit(false)可以设置手动提交事务,然后可以采用commit函数来显示提交事务,事务发生异常也可以通过rollback来进行事务回滚

 

7、面向对象的六原则一法则

 

8、DbUtils连接池

    两个核心对象Dbutils和QueryRunner

    DbUtils的查询操作

        1、创建QueryRunner对象

        2、调用query方法

        3、通过实现ResultSetHandler接口,将数据封装到对象或者进一步保存到集合中

   

    DbUtils的ResultSetHandler的实现类

        ArrayHandler:将一条数据封装进一个Object[]中

        ArrayListHandler:将多条数据封装进一个装有Object[]的集合中

        BeanHandler:将一条数据封装进javaBean上

        BeanListHandler:将多条数据封装到一个装有多个JavaBean对象的集合

        MapHandler:将一条数据封装到map集合中,key就是字段名,value就是这个字         段对应的值

        MapListHandler:将多条数据封装到一个装有多个map的list集合中。

        ColumnListHandler:把某一列的数据封装到集合中。

                   ScalarHandler:封装某一个值为Object                          常用与查询条数是使用

 

9、常用的设计模式

    设计模式就是一套被反复使用的代码设计经验的总结。设计模式共23种,常用的设计模式有:

    工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类有一个公共的抽象父类并且实现了相同的方法,但这些方法针对不同的数据进行了不同的操作。

    代理模式:给一个对象提供一个代理对象,并由代理对象控制原对象的引用。

    适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不        匹配而无法在一起使用的类能够一起工作

    模板方式模式:提供一个抽象类,将部分逻辑与具体方法或者构造器的形式实现,然后        声明一些抽象方法来迫使子类实现剩余的逻辑。

    还可以讲讲上面提到的门面模式、桥梁模式、单例模式、装潢模式(Collections工具类和I/O系统中都使用装潢模式)等,

 

10、Http协议的特点

    http协议规定了浏览器和服务器之间的数据传输的格式

    http协议是基于请求和响应来实现的,一个请求对一个响应

 

11、抓取页面的代码

    java实现网页源码获取的步骤:

  (1)新建URL对象,表示要访问的网址。如:url=new URL("http://www.sina.com.cn");

  (2)建立HTTP连接,返回连接对象urlConnection对象。如:urlConnection = (HttpURLConnection)url.openConnection();

  (3)获取相应HTTP 状态码。如responsecode=urlConnection.getResponseCode();

  (4)如果HTTP 状态码为200,表示成功。从urlConnection对象获取输入流对象来获取请求的网页源代码。

 

11、post和get的区别

    http的请求方式有8种,分别是:post、get、delete、put、options、trace、connect、head,最常见的是post、get,其次是delete、put。

    post和get的区别:

    1、get请求,请求数据会暴露在url地址栏上,post请求的数据放置在http的请求包的包体中,不会暴露在浏览器地址栏

    2、传输数据大小;get,特定的浏览器和服务器对url的长度有限制,但是post请求在理论上是不受限制,单实际上都是有所限制的

    3、post安全性比get的安全性高

    4、HTTP中的GET,POST,SOAP协议都是在HTTP上运行的

 

12、Servlet的生命周期

    web容器加载Servlet并实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的Service方法,service方法根据请求的方式与对应的doGet和doPost,当服务器关闭时或者项目被删除时,服务器会将Servlet实例销毁,调用destroy方法

    Servlet的启动时加载:在Web.xml中配置load-on-startup的值为2

 

13、Servlet的访问路径

    全路径匹配、目录匹配、扩展名匹配

 

14、forward和redirect的区别

    1、从地址栏上:forward是服务器请求资源,服务器直接访问目标地址的url,把那个url的响应内容读取过来,再把这些内容发给浏览器,浏览器还是原来的地址;redirect是发送一个状态码,因此浏览器的地址会改变

    2、数据共享上:forward:转发页面和转发到的页面共享request的数据;redirect不能够共享数据,虽然在重定向时可以强行携带数据

    3、从运用地方来说

        forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

        redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

    4.从效率来说        forward:高      redirect:低.

 

15、解决请求和响应的中文乱码

    post请求:request.setCharacterEncoding(“utf-8”)

    get请求:username=newString(username.getBytes("iso-8859-1"),"utf-8");

        万能的办法:username=newString(username.getBytes("iso-8859-1"),"utf-8");

    响应中文乱码

        如果中文返回出现??字符,这表明没有加response.setCharacterEncoding

        ("UTF-8");这句话。

    如果返回的中文是“烇湫”这种乱码,说明浏览器的解析问题,应该检查下是否忘加response.setHeader("Content-type","text/html;charset=UTF-8");这句话

 

16、JSP的内置对象,及其作用

    四大域对象:

        request:封装客户端的请求,其中包含来自GET或POST请求的参数;

        response:封装服务器对客户端的响应;

        pageContext:通过该对象可以获取其他对象;

        session:封装用户会话的对象;

        application:封装服务器运行环境的对象;

        out:输出服务器响应的输出流对象;

        config:Web应用的配置对象;

        page:JSP页面本身(相当于Java程序中的this);

        exception:封装页面抛出异常的对象。

 

17、JSP和HTML、JSP和Servlet的区别

    JSP和HTML

        html(hyper text mark-up language)是w3c标准协议下的超文本标记语言或超文         本链接标示语言。

        JSP是java serverpages的缩写,简单地说,JSP就是包含用Java语言编写的          网页。

        (1)HTML页面是静态页面,也就是事先由用户写好放在服务器上,由web服务           器向客户端发送。

        (2)JSP页面是有JSP容器执行该页面的Java代码部分然后实时生成的HTML        页面,因而说是动态页面

            jsp文件可以和数据库结合...HTML不可以....

            jsp页面没有HTML页面浏览速度快(需要经过服务器解析后才下载到客户端)

            后台管理是利用jsp页面通过SQL语句对数据增加 修改  删除等操作.

    JSP和Servlet

        JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程       序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页;JSP由        HTML代码和JSP标签构成,可以方便地编写动态网页,因此在实际应用中采用        Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于      MVC设计模式的视图层,而Servlet位于控制层.

 

18、MVC模式

    M:model层,一般是用于封装和处理数据

    V:View层,一般是展示数据,显示信息

    C:Controller层,一般是通过model层方法获取数据,发送给View层显示,起到一      个连接model和view层的作用

        JSP开发中javaBean属于model层,Servlet属于Controller层,jsp属于View层;

 

19、动态include与静态include的区别

    动态的include:用jsp:include动作实现 <jsp:includepage="included.jsp" flush="true" />  它总是会检查所含文件的变化,适合于包含动态页面,可以携带参数

    静态include:用伪码实现,不会检查所含文件的变化

 

    区别:

        1、静态的include结果是把其他的jsp合并到当前的jsp在编译

          动态的include是独立编译,知道输出时才合并

        2、动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对           象,页面设置,都必须有自己创建,当然,还好它和include它的页面的            request范围是一致的.而静态include纯粹是把代码写在外面的一种共享方          法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能          有变量同名的冲突.而页面设置也可以借用主文件的.