专栏首页Java研发军团面试题之Javaweb篇(二)

面试题之Javaweb篇(二)

1,JDBC访问数据库的基本步骤是什么?

1,加载驱动 2,通过DriverManager对象获取连接对象Connection 3,通过连接对象获取会话 4,通过会话进行数据的增删改查,封装对象 5,关闭资源

2,说说preparedStatement和Statement的区别

1,效率:预编译会话比普通会话对象,数据库系统不会对相同的sql语句不会再次编译

2,安全性:可以有效的避免sql注入攻击!sql注入攻击就是从客户端输入一些非法的特殊字符,而使服务器端在构造sql语句的时候仍然能够正确构造,从而收集程序和服务器的信息和数据。

比如:“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”

如果用户名和密码输入的是’1’ or ‘1’=’1’ ; 则生产的sql语句是: “select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’ 这个语句中的where 部分没有起到对数据筛选的作用。

3,说说事务的概念,在JDBC编程中处理事务的步骤。

1 事务是作为单个逻辑工作单元执行的一系列操作。 2,一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务 事务处理步骤: 3,conn.setAutoComit(false);设置提交方式为手工提交 4,conn.commit()提交事务 5,出现异常,回滚 conn.rollback();

4,数据库连接池的原理。为什么要使用连接池。

1,数据库连接是一件费时的操作,连接池可以使多个操作共享一个连接。

2,数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发,测试及性能调整提供依据。

3,使用连接池是为了提高对数据库连接资源的管理

5,JDBC的脏读是什么?哪种数据库隔离级别能防止脏读?

  当我们使用事务时,有可能会出现这样的情况,有一行数据刚更新,与此同时另一个查询读到了这个刚更新的值。

这样就导致了脏读,因为更新的数据还没有进行持久化,更新这行数据的业务可能会进行回滚,这样这个数据就是无效的。

数据库的TRANSACTIONREADCOMMITTED,TRANSACTIONREPEATABLEREAD,和TRANSACTION_SERIALIZABLE隔离级别可以防止脏读。

6,什么是幻读,哪种隔离级别可以防止幻读?

  幻读是指一个事务多次执行一条查询返回的却是不同的值。假设一个事务正根据某个条件进行数据查询,然后另一个事务插入了一行满足这个查询条件的数据。

之后这个事务再次执行了这条查询,返回的结果集中会包含刚插入的那条新数据。这行新数据被称为幻行,而这种现象就叫做幻读。

  只有TRANSACTION_SERIALIZABLE隔离级别才能防止产生幻读。

7,JDBC的DriverManager是用来做什么的?

JDBC的DriverManager是一个工厂类,我们通过它来创建数据库连接。当JDBC的Driver类被加载进来时,它会自己注册到DriverManager类里面

然后我们会把数据库配置信息传成DriverManager.getConnection()方法,DriverManager会使用注册到它里面的驱动来获取数据库连接,并返回给调用的程序。

8,execute,executeQuery,executeUpdate的区别是什么?

1,Statement的execute(String query)方法用来执行任意的SQL查询,如果查询的结果是一个ResultSet,这个方法就返回true。

如果结果不是ResultSet,比如insert或者update查询,它就会返回false。我们可以通过它的getResultSet方法来获取ResultSet,或者通过getUpdateCount()方法来获取更新的记录条数。 2,Statement的executeQuery(String query)接口用来执行select查询,并且返回ResultSet。即使查询不到记录返回的ResultSet也不会为null。

我们通常使用executeQuery来执行查询语句,这样的话如果传进来的是insert或者update语句的话,它会抛出错误信息为 “executeQuery method can not be used for update”的java.util.SQLException。 , 3,Statement的executeUpdate(String query)方法用来执行insert或者update/delete(DML)语句,或者 什么也不返回,对于DDL语句,返回值是int类型,如果是DML语句的话,它就是更新的条数,如果是DDL的话,就返回0。

只有当你不确定是什么语句的时候才应该使用execute()方法,否则应该使用executeQuery或者executeUpdate方法。

9,SQL查询出来的结果分页展示一般怎么做?

Oracle:

select * from 
(select *,rownum as tempid from student )  t 
where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber

MySQL:

select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize;

sql server:

select top ” + pageSize + ” * from students where id not in + 
(select top ” + pageSize * (pageNumber-1) +  id from students order by id) +  
“order by id;

10,JDBC的ResultSet是什么?

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。 ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。

如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false。可以在for循环中用它来遍历数据集。

默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet

当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。

可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。

这是整理一些各大公司常用的面试笔试题,供大家在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。

另外附带一个《idea视频教程》

课程目录

idea初级教程

01初识idea

02jdk的标准安装(企业实际)

03idea安装

04创建Java普通工程

05配置tomcat

06创建JavaWeb工程

2017年8月最新版Intellij IDEA视频教程

01课程介绍和软件安装

02Intellij IDEA常用快捷键1132

03Intellij IDEA安装Tomcat和Maven

04Intellij IDEA使用Maven Helper插件分

05Intellij IDEA中Git安装和使用

06Intellij IDEA连接MySQL数据库

07Intellij IDE使用GsonFormat转化json

08Intellij IDEA使用Markdown文本编辑器

09Intellij IDEA使用FindBugs查找bug

10Intellij IDEA使用ECTranslation翻译

11Intellij IDEA使用CheckStyle-IDEA

12Intellij IDEA使用MyBatisCodeHelp

本文分享自微信公众号 - Java研发军团(ityuancheng)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最全Java成神学习路线总结!!!

    1)每本书每个人的思路不一样,哪怕有不好的地方,一定要坚持按照一种思路去学习,不要半路换,不然很容易失去乐趣或者放弃。

    用户5224393
  • Java语言实现爬虫实战

    https://blog.csdn.net/uniquewonderq/article/details/50619899#comments

    用户5224393
  • 同学,Spring 是怎么解决循环依赖的?

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:

    用户5224393
  • c语言客户端与go语言服务端通信(网络字节序)

    网络二进制数据转换: 总所周知,数据在tcp网络传输协议中传输的字节序是大端模式的,换句话说如果你要传输一个int32型的整数,那么假设其二进制小端模...

    李海彬
  • 智慧赋能 · 安全变革 | FIT 2019中国首席信息安全官高峰论坛「议题征集」

    在第四次工业革命的推动下,从产品、服务、智能化这三个领域出发,消费互联网转向产业互联网和万物互联网的愿景变得越来越具体,终端数量从几十亿增长到上百亿、上千亿,越...

    FB客服
  • 智能改变制造,《终结者》黑科技亮相人类生活!

    镁客网
  • Android开发环境搭建

    因此,我们这篇文章将从JDK和AndroidStudio两个方面来讲解Android开发环境的搭建。

    蜻蜓队长
  • python + fiddler抓包测试

    有个坑的选修课,要提交一个项目。我们小队不知道做什么,于是在讨论了一分钟后决定用python来写一个抓取学生成绩的app和分析(交完之后才上课,发现那老师基本全...

    py3study
  • SAP mobile platform(SMP)MEAP产品评测分析

    SAP于2010年7月通过58亿美元购得Sybase。SAP的Sybase Unwired Platform(SUP)平台是一个移动应用的开发、执行和管理套件。...

    人称T客
  • Python:读取 .doc、.docx

    Python 中可以读取 word 文件的库有 python-docx 和 pywin32。

    py3study

扫码关注云+社区

领取腾讯云代金券