刚才收到一个电话面试:JAVA访问数据库,从数据库连接池开始到数据库返回结果,都发生了哪些事情

最简单的答案:利用JDBC driver和MySQL数据库建立TCP连接之后的连接对象放在池中,当需要操作数据库的时候从池中取出一个连接,发送SQL到MySQL,MySQL经过SQL语法解析、查询优化、生成实际物理计划及执行、连接处理与类型处理等一系列的过程之后返回要查询的数据给JDBC driver的resultset。把连接对象重新放到池子中
面试官会加深问一些东西,那可以问就太多了,如下:
首先是tcp建立连接的过程,什么握手挥手这些问题都要准备好,什么tcp udp也要准备好,什么7层网络也要准备好,最好连每一层的数据包格式都准备好。拿到一个连接之后放在对象池中,以及为什么要用“池”,可以扩展到线程池以及各种池化好处。也可以说一下池子的各种参数min、max、active等最好和线程池结合起来,和常用的数据库连接池如果是JAVA岗位,面试官一般都关注在java层面,可以问一些PreparedStatement和Statement的区别和注意事项,SQL注入等如果是基础面试回答上面的就差不多了,都能回答上基本上基础就不错了
如果是考察深度的面试这个问题可以说是一个非常好的面试题,可以从下面几个点开展对面试者的考察
网络(把从物理层到应用层的包结构都讲一遍,下图的网关是什么意思知道吗,为什么要设置,为什么要子网掩码等等。反正太多,我也答不上来【尴尬脸】),tcp\\ip、I/O(阻塞非阻塞,同步非同步),reactor、proactor刚才收到一个电话面试:JAVA访问数据库,从数据库连接池开始到数据库返回结果,都发生了哪些事情

jdbc driver 工作原理,分布式数据库中间件(可以问的太多不列举),分库分表,主备数据库ACID(事务隔离级别、redolog undolog、各种锁 eg,悲观、乐观、间隙锁等等),索引,附带一些数据结构 B-TREE、2-3树、红黑树、 AVL树都可以问一遍
■网友
牵涉到:
1.数据库链接用到的应用层协议
2.Java阻塞IO的TCP链接建立
3.逻辑事务的保证
4.数据库链接的重用
5.任务队列的先进先出处理
6.线程池的创建,管理
7.POJO和ORM相关的概念
8.Service Provider的驱动加载机制,工厂方法等等

■网友
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:JF Zhu
【刚才收到一个电话面试:JAVA访问数据库,从数据库连接池开始到数据库返回结果,都发生了哪些事情】 链接:http://www.cnblogs.com/jfzhu/p/3705703.html
来源:博客园

和数据库建立一个物理连接是一个很耗时的任务,所以无论是http://ADO.NET还是J2EE都提供了一个连接池的技术。一个池其实就是一个列表。在http://ADO.NET中,有一个Connection Manager,它对每一个connection string都管理着一个可用连接的列表,这个列表就是Connection Pool。当第一次数据库连接被初始化时,connection manager会创建一个Connection Pool Group。当第一次连接被打开的时候,才会创建第一个connection pool。一个连接正在被使用中,就会从connection pool中移除;如果使用完(被close或dispose),就会再返回到connection pool中去,以待下一个连接请求使用,所以我们要清楚一个概念,close connection的动作只是关闭了逻辑连接,但并没有关闭物理连接。在http://ADO.NET中,默认情况下,一个连接返回到connection pool中,会有4到8分钟的空闲时间,超过这个时间,就会关闭物理连接。如果你的程序有很长时间的空闲时间,你应该确保至少有一个可用的数据库连接,可以通过设置Min Pool Size为1来实现。另外决定是否一个连接使用的是相同connection string的决定性参数为以下几个:Connection TimeoutMin Pool SizeMax Pool SizePoolingConnection ResetLoad Balancing Timeout(Connection Lifetime)Enlist每当Connection Manager收到一个新的数据库连接请求时,它就会走下面的流程:


推荐阅读