关于java基础2

1.JDBC工作过程:


下载数据库厂商提供的驱动程序包
将驱动程序包引入工程中
加载驱动(加载到内存中)(Class.forName())
建立连接(Connection con = DriverManager.getConnection(url, uname, upass);)
创建操作对象 (statement/preparedStatement)
执行SQL语句(executeupdate/executeQuery/execute)
处理结果集(int/ResultSet)
关闭连接


——————————


2.preparedStatement和statement


preparedStatement是接口Statement的子接口:
作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。
三种方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数


是预编译的,所以其执行速度要快于 Statement 对象。


在执行 PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调用 setXXX 


方法来完成,其中 XXX 是与该参数相应的类型。


preparedStatement提高了安全性,可以有效防止大部分sql注入
3、HashMap和Hashtable区别
HashMap 键值对的方式存在
可以有空值,不允许有重复值,key值要求唯一 ,非线程安全。
Hashtable 不允许有空键值 不允许有空value值 ,线程安全。map效率高于table。
   ArrayList和LinkedList的区别
     1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
     2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。 
     3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数


据。
4、Ajax的工作原理?
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,
它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务


器提出请求并处理响应,而不阻塞用户。
5.equal 和“==”的区别
“==”运用在基本数据类型的时候,通过比较它们实际的值来判定是否相同;而用


于比较引用类型的时候,则是比较两个引用的地址是否相等,也就是
    是否指向同一个对象。
equal方法时java.lang.Object的方法,也就是所有的Java类都会有的方法。它可以


被程序员覆盖重写,通过自定义的方式来判定两个对象是否相等。对于
    字符串java.lang.String类来说,它的equal方法用来比较字符串的字符序列是否完全相


等。
6.Spring<!-- 
基于树模型: 会将整个XML全部加载 在加载时间过长 
  事件模型: 是按需加载 加载效率快  但每次需求都要加载 -->
7.JSON
JSON用于转换数据的格式,便于传输。
JAVA 只能向 AJAX 发送String或XML类型,
通过JSON可以将对象转为String传输。


注:eval (  ) ;为JavaScript的方法, 
用于将字符串中的可执行的JavaScript代码
转化并执行,且格式固定!(与JSON无关)
格式:
eval('(' + 字符串 + ')');
8. 1.创建线程的方式:
线程的创建和启动的两种方式:
1.继承 Thread 类,重写run()方法;
 线程调用通过初始化对象,调用start()方法开始;
2.实现接口 Runnable 也需要重写run()方法;


两种方法的比较:
使用 Runnable 接口 :还可以从其他类继承;保持程序风格的一致性。 
直接继承 Thread 类 :不能再从其他类继承;编写简单,可以直接操纵线程 


9.序列化:将对象转换为 字节序列的过程.
   反序列化:将字节序列恢复为对象的过程.
 个人理解:序列化是 用来解决对象传输、存储的问题.  
 序列化可以实现数据的持久化(将数据永久的保存到硬盘中)
 只有实现  Serializable 借口 的类才可以实现序列化 否则会抛出异常.
10. SpringMVC的工作流程?


1. 用户发送请求至前端控制器DispatcherServlet
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则


生成)
一并返回给DispatcherServlet。
4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5. 执行处理器(Controller,也叫后端控制器)。
6. Controller执行完成返回ModelAndView
7. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
8. ViewReslover解析后返回具体的值
9. DispatcherServlet响应用户
11.
1.java的缺点:
   1.运行速度慢
   2.Java程序的运行依赖于Java虚拟机,
   所以相对于其他语言(汇编,C,C++)编写的程序慢,因为它不是直接,执行机器码。
   3.Java考虑到了跨平台性
   4..缺少闭包(closure)
   5.不可避免的范型警告
   6.受检查异常
   7.自动装箱和自动拆箱
  JDK安装:
http://www.oracle.com/sun/index.html
通过配置环境变量安装:
(1).JAVA_HOME:JAVA的安装目录。(例:C:\Program Files\Java


\jdk1.6.0_07)
(2).path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 
(3).检测是否安装成功;打开cmd输入java -version;输出"1.8.0_51"显示


成功;
12.数据库连接池技术:


    DBCP:
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接


池项目,
也是 tomcat 使用的连接池组件。
单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,
common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,
所以通过连接池预先同数据库建立一些连接,放在内存中,
应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。 
dbcp没有自动的去回收空闲连接的功能。


    C3P0:(非常好)
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和


JDBC2的标准扩展。
目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能


13. JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?


① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,
如果使用数据库链接池可解决此问题。


解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。




② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,
sql变动需要改变java代码。


解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。




③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,
占位符需要和参数一一对应。
select * from student where 1=1;
if(age!=null){
sql+="and age=11";
}
解决: Mybatis自动将java对象映射至sql语句。




④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,
如果能将数据库记录封装成pojo对象解析比较方便。


解决:Mybatis自动将sql执行结果映射至java对象。 


Mybatis:
 它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,
 不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,


 并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生


成java对象。
   优缺点:
Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性


能,灵活度高,
非常适合对关系数据模型要求不高的软件开发,


例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,
一但需求变化要求成果输出迅速。


但是灵活的前提是mybatis无法做到数据库无关性,
如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 


   
   MyBatis编程步骤是什么样的?


  ① 创建SqlSessionFactory 
  ② 通过SqlSessionFactory创建SqlSession 
  ③ 通过sqlsession执行数据库操作 
  ④ 调用session.commit()提交事务 
  ⑤ 调用session.close()关闭会话


请简述JDBC操作数据库的编程步骤
JDBC提供给开发者的是一系列的接口,这些接口使用的规则相对比较固定且有一些


顺序的要求。
Java所提供的JDBC操作的接口类,主要集中在java.sql和javax.sql包下。
(1)注册驱动程序
就是把驱动类加载到JAV虚拟机中,使得驱动管理DriverManager能够找到


该驱动,
一般通过Class.forName()进行映射加载。
(2)获取数据库连接
java.sql.Connection接口代表的是一个数据库的连接,
它通过驱动管理器DriverManager来建立连接,并返回一个Connection接口


的实现,
一般,还需要指定连接URL、用户名和密码。其中URL会根据不同的数据库


而不同,
它主要的目的是告诉驱动程序使用特定的协议,连接至指定的数据库(包


括IP地址和端口)
等信息。
(3)创建会话。
JDBC的会话Statement主要是用于向数据发送SQL命令,并返回执行后的结


果,
它由连接Connection生成,使用更多的是PreparedStatement会话。
它是一种预编译会话,相当于告诉数据库即将执行的SQL语句,
如果Sql中包含了未知参数可以用占位符问好“?”进行替代,然后只需要


传递参数即可,
效率更高一些,另外,使用占位符可以很好的避免SQL注入的攻击。
(4)执行SQL语句。会话创建好后,程序员就需要指定需要执行的SQL语句了,
一般,SQL分为查询和修改两种。查询只要使用select语句相对应的是executeQuery


()方法,
他将返回查询后的结果集;修改包括对数据库的插入、修改和删除,使用


executeUpdate()方法,它执行以后返回的是影响到的记录数。
(5)处理结果集
如果是查询语句的话,会返回结果集ResultSet,一般会使用ResultSet.next()方法,对结果


集的每一条数据进行处理。
(6)关闭连接
关闭数据库连接是一个良好的习惯,并且在关闭的时候,需要从小到大进行,先关闭结果集


,再关闭会话,
最后才是关闭连接。
总的来说:(1)注册驱动程序。(2)获取数据库连接。(3)创建会话。
(4)执行SQL语句。(5)处理结果集。(6)关闭连接。


13.2.如何使用连接池技术


对于操作数据库比较多的程序来说,频繁的创建数据库连接是非常耗费资源的,
一旦某一时刻的请求太多,还有可能造成系统缓慢甚至瘫痪。数据库连接池就好像


一个池子一样,
这个池子中装的是数据库的连接(Connection)。
当程序员余姚连接数据库的时候,只需要从池子中取出一个即可,
当程序员调用Connection.close()方法的时候,这个链接就返回到池子之中,而没有真正与


数据库断开连接。
当连接不够的时候,它会创建一个连接;同理,当连接太多后,它会自动关闭一些不必要的


连接。
数据库连接池往往是作为一个单独的程序模块进行运行,由它来维护这些连接,
程序员可以通过配置来控制它的一些属性,
例如,最大连接数、最大空闲连接数、连接超时等。它与传统的JDBC提供的连接的方式不大


一样,
程序员必须使用数据源(Data Source)的形式获取连接,数据源对象往往使用JNDI(命名与


目录连接)
的形式提供给程序员。
数据库连接池提供商对连接池的实现是各不相同的,使用的方式也各有不同,
使用方式也会有差异,但是他们都必须实现javax.sql.DataSource接口,
开发者只需要面向这些接口编程就好了。
传统的JDBC是通过驱动管理器(DriverManager)来获取连接,二连接池则需要用数据源


(DataSource)来获取。
总的来说:数据库连接池技术是为了避免重复创建连接而设计的,
它作为一个单独的程序模块进行运行,负责维护池子中的数据库的连接(Connection)。
程序员打开连接和关闭连接并不会造成真正意义上的创建连接和关闭,
而只是连接池对连接对象的一种维护手段。连接池与传统的JDBC提供连接的方式不太一样,
不需使用(Data suorce)的形式获取连接池的连接,而数据源对象往往是以JNDI的形式而提


供的。


13.3.Servlet的生命周期是怎样的


Servlet在Web容器中有创建、初始化、提供服务和销毁的过程,每一个生命周期都


是必不可少的,
每个阶段都起到了不同的作用。
在javax.servlet.Servlet接口中有三种方法,init()、destroy()、service()
这三个方法分别对应Servlet生命周期的三个阶段,加上Servlet是一个java类,所以还有加


载过程,
一共是四个阶段:加载、初始化、提供服务和销毁。
(1)加载阶段指的是Servlet来加载到Java虚拟机当中,并且实例化。
(2)初始化阶段指Web容器在初始化Servlet的时候会调用init()方法,
所以一般的初始化代码如打开数据源等都会放到这个方法中。
(3)提供服务指的是当有HTTP请求指向Servlet的时候,调用service()方法的过程。
(4)重新部署Web应用、关闭Web容器等。会执行它相对应得回调方法destroy(),
所以一般释放资源如关闭数据库资源等代码都会放在该方法中。
总的来说,Servlet的生命周期分为四个阶段:加载、初始化、提供服务和销毁,
这些过程都是由Web容器来掌控的,开发者关注最多的是初始化和提供服务两个阶段,
在init()方法中,开发者可以获取配置在web.xml中的初始化参数,
service()方法中的代码会在Servlet的请求来到时被调用。


13.4.JSP的运行机制是什么


从表面上来看,JSP代表的是一种动态网页,它可以实现数据的动态显示,
它是一种建立在Servlet规范提供的功能之上的动态页面技术,与ASP和PHP类似,
都是在网页中嵌入脚本代码,产生动态内容,事不过JSP采用的脚本语言是JAVA。
JSP文件会在用户第一次请求时,Web容器会将该JSP文件编译成为Servlet,再由该Servlet处


理用户请求,
所以说JSP在本质上就是Servlet。但是JSP得存在是有必要的,
因为Servlet在处理静态内容如HTML标签时非常笨重,不得不把静态内容以字符串的形式进行


拼接,
而JSP可以很好的实现动态和静态内容的分离,开发者可以对静态内容和动态内容分别开发。
(1)Web容器会检验JSP的语法是否正确。
(2)将JSP文件转换成Servlet的源码文件。
(3)编译该源码文件成为Class文件。
(4)创建一个该Servlet类的对象实例,以Servlet的方式为请求提供服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值