Java问题面试2(全面)
更新时间:2024-02-01 18:57:01 阅读量: 教育文库 文档下载
- Java 面试推荐度:
- 相关推荐
1、 实现查询的分组统计和排序:
在进行数据处理时,为了方便操作,往往希望先将一字段内具有相同值的数据归为一组,然后再针对每组做出统一的处理。
SQL语言中提供了GROUP BY子句和分组函数来执行分组操作。GROUP BY子句使用格式:
select 字段,分组函数 from table
[where 查询条件] //指定过滤条件 [group by 分组字段] //指定分组字段
[having 分组函数] //按分组函数的结果排序 [order by 排序字段]; //按普通的字段排序 Example:
select deptno as no,avg(sal) as a,sum(sal) as a,from emp group by deptno having avg(sal)
如果需要按照分组函数的结果排序,必须使用Having子句,不能使用order by 在使用分组查询的SQL语句时,需要注意一个重要的原则:select关键字后出现的字段,除分组函数使用的参数外,其他的都要在group by子句中出现。 2、 实现多表联合查询:
1、 等值连接:作用是查询结果是由两个表的记录共同决定的,只有两个
表的连接字段值相等的记录,才会作为结果返回。格式:
select t1.column,t1.column from table1 t1, table2 t2 where t1.column=t2.column; 或:
select t1.column,t1.column from table1 t1
join table2 t2 on(t1.column=t2.column);
2、 外连接:作用是查询结果是由某一主表的记录决定的,即使另一方没
有对应记录,主表记录也要作为结果返回,另一方记录的字段值为NULL,外连接分为外连接右连接。
左连接格式:
select t1.column,t2.column from table1 t1
left outer join table2 t2(t1.column=t2.column); 右连接格式:
select t1.column,t2.column from table1 t1
right outer join table2 t2(t1.column=t2.column);
3、 自然连接:作用与等值连接类拟,只不过连接双方都是同一个表,一
般是同一个表的两个不同字段做等值。格式:
select t1.column,t2.colum from table1 t1
join table1 t2(t1.column1=t2.column2);
3、
JDBC的排处理操作:Statement或PrepareStatement都可以执行批处理功能,可以使用addBatch(“”)方法处理中追加SQL语句,然后使用executeBatch()执行批处理中的SQL语句。批处理不能用于查询语句 4、 字段值递增:
Mysql和SQLServe,Sybase都支持字段值自动递增功能,但在 Oracle、DB2、PostgreSQl中却不支持,在Oracle中可以使用Sequence序列,实现字段值的自动递增。格式:
create sequence 序列名
[increment by 递增量]:设置递增量 [start with 起始值]:设置起始值 [maxvalue|nomaxvalue]:设置最大值 [nocycle]:设置累加,不循环
[cache 数量]:设置一次生成多少个序列值存入缓存 删除序列:
drop sequence 序列名 序列的使用:
可以使用nextval和currentval两个属性。currentval表示序列当前值;而nextvat表示在当前值基础之上递增之后的值。
Sequence是数据库系统按照一定规则自动增加的数字序列,这个序列一般作为主键代理,因为其不会重复。
5、 to_date(‘2010-10-10’,yyyy-mm-dd)Oracle数据库的转换函数,MySQL
数据库中,‘2010-10-10’格式的字符串会自动转换为Date类型, 6、 向表中插入含有特殊字符的信息,使用PrepareStatement操作数据。使
用BLOB类型的字段,使用PrepareStatement操作数据。通过setBinaryStream()方法可实现将BLOB类型数据写入数据库。使用CLOB类型的字段,使用PrepareStatement操作数据。通过setAsciiStream()方法可实现将CLOB类型数据写入数据库。 7、 获取数据表的结构信息:
1、 DatabaseMetaData
通过Connection的getMetaData()方法可以获取包含数据库元的DatabaseMetaData类的对象。DatabaseMetaData提供了非常丰富的方法,用于获取数据库的整体信息。如:版本号、产品名称、驱动名称和列名称允许的最大字符等。
2、 ResultSetMetaData
3、 通过ResultSet的getMetaData()方法可以获取包含数据的
ResultSetMetaData对象。ResultSetMetaData提供了获取表名称、字段名称、字段类型和字段个数等信息的方法,
8、 获取数据库中的所有表名:
通过Connection的getMetaData()方法可以获取包含数据库元的DatabaseMetaData类的对象。DatabaseMetaData提供了非常丰富的方法,用于获取数据库的整体信息。利用DatabaseMetaData的getTable()方法可以获取数据库中所的表名。
9、 程序备份和恢复数据库:
实现用Java程序备份和恢复数据库,最通用的方法是利用Runtime类的
exec()方法执行备份和恢复的命令语句。MySQL数据库备份和恢复的命令分别为(CMD 转到C:\\Program Files\\MySQL\\MySQL Server 5.0\\bin目录下执行下面的命令):
mysqldump –u用户名 –p密码 –opt 库名 >备份文件路径 mysql –u用户名 –p密码 库名 <恢复文件路径
10、 使用事务可以将一组SQL操作当作一个整体进行控制,保障逻辑和数据的
完整性,在数据库中使用commit和rollback命令也可以实现事务的提交和回滚操作。
11、 JTA事务与JDBC事务区别:
JTA(Java Transaction API)是一种高层的、与实现无关的、与协议无关的API,应用程序和应用服务器可以使用JTA实现事务管理。
JTA主要用于分布式的多个数据源的事务控制,而JDBC的Connection提供的是单个数据源的事务。JDBC事务因为只涉及一个数据源,所以其事务可以由数据库自己单独实现,而JTA事务因为其分布式和多数据源的特性,不能由任何一个数据源实现事务管理,因此JTA中的事务由事务管理器实现,它会在多个数据源之间管理事务。一般JTA事务都用于EJB中,因此一般的应用服务器都有自己的事务管理器用来管理JTA事务。注意:如果使用Tomcat应用服务器,是不能使用JTA事务的。JTA在使用时,一般会选用Weblogic、JBoss、Websphere等服务器。JTA也是用于管理事务的一套API,与JDBC相比,JTA主要用于管理分布式多个数据源的事务操作,而JDBC主要用于管理单个数据源的事务操作。 12、 JTA实现分布式事务控制:在分布系统中,一个逻辑单元可能会涉及若干
数据源的数据,JTA能够实现在网络环境中多个数据库在一个事务中进行操作,而JDBC事务只能在一个数据库中进行,因为JDBC中的事务是与连接相关的。
与JTA相关的API都在javax.transaction包中, 13、 数据库连接池:连接池用于创建和管理数据库连接的缓冲池技术,缓冲池
中的连接可以被任何需要它们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务,优点
减少连接创建时间 简化的编程模式 控制资源的使用
连接池原理:
连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用、分配和管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。
连接池的工作原理主要由三部组成,分别为连接池的建立、连接池中连接的使用管理、连接池的关闭。
a、 连接池的建立
一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。Java中提供了很多容器类可以方便的构建连接池,如:Vector、Stack
b、 连接池的管理
连接池管理策略是连接池机制的核心,连接池内连接的分配和释放对系统的性能有很大的影响。其管理策略如下:
当客户请求数据库连接时,首先查看连接池中是否有空闭连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最连接数,如果没有达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。 当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。
c、 连接池的关闭 当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。
14、 提升SQL语句的查询性能: 数据库设计与规划:
Primary Key字段的长度尽量小,能用small integer就不要用integer
字符字段如果长度固定,就不要用varchar、nvarchar类型
设计字段时,如果其值可有可无,最好给一个默认值,并设成“不允许NULL”
适当地创建索引:
a、 Primary Key字段可以自动创建索引,而Foreign Key字段不可
以。
b、 为经常被查询或排序的字段创建索引
c、 创建索引字段的长度不宜过长,不要用超过20个字符。 d、 不要为内容重复性高的字段创建索引 e、 不要为使用率低的字段建立索引
f、 不宜为过多字段建立索引,否则影响到insert update delete
语句的性能
g、 如果说数据表存放的数据很少,就不必刻意使用权索引。
使用索引功能:
在查询数据表时,使用索引查询可以极大提升查询速度,但是如果where子句书写不当。即使某些列存在索引,也不能使用该索引查询,而同样会使用全表扫描,这就造成了查询速度的降低。在where语句中避免使用以下关键词:NOT、!=、<>、!>、!<、Exists、In、Like、||。使用LIKE关键字做模糊查询时,即使已经为某个字段建立索引,但需要以常量字符开头才会使用到索引,如果以“%”开头则不会使用索引。例如“name Like ‘%To’”不启用name字段上的索引;而“name LIKE ‘TO %’”会启用name字段上的索引。 避免在where子句中对字段使用函数:
对字段使用函数,也等于对字段做运算或连接的动作,调用函数的次数与数据表的记录成正比。如果数据表内记录很多时,会严重影响查询性能。 在AND与OR的使用:
在AND运算中,只要有一个条件使用到索引,即可大幅提升查询速度。
但在OR运算中,则要所有的条件都有使用到索引才能提升查询速度,因此使用OR运算符时需要特别小心 JOIN与子查询:
相对于子查询,如果能使用JOIN完成的查询,一般建议使用后者。原因除了JOIN的语法较容易理解外,在多数的情况下,JOIN的性能也会比子查询高。 其他查询技巧:
DISTINCT、ORDER BY 语法,会让数据库做额外的计算。如果没有要过滤重复记录的需求,使用Union All会比Union更好,因为后者会加入类似DIStinct的算法。
尽可能使用存储过程(Store Procedure):
Store Procedure除了经过事先编译、性能较好以外,也可减少SQL语句在网络中的传递,方便商业逻辑的重复使用。 尽可能在数据源过滤数据
使用Select语法时,尽量先用SQL条件或Store Procedure过滤所要的信息,避免将大量冗余数据返回给程序,然后由程序处理。 15、 解决MySQL数据库插入乱码:
设置连接字符串编码:
在数据库连接字符串后面追加参数,指明MySQL服务器发送SQL语句的编码格式,格式如下:
jdbc:mysql://localhost:3306/test?useUnicode==true&characterEncoding=utf-8
设置数据表及其字段的编码:
将数据表的存储类型、表中字符字段的存储型都设置成与连接字符串一致的编码。依据上述连接字符串示例,数据表的存储编码应该设置成UTF-8
设置其他编码:
如果是从JSP页面取值,然后使用SQL写入数据库,那么还要保障从JSP页面取值正常。具体步骤: a、 在JSP页面中设置以下代码:
<%@page language=”java” pageEncoding =”utf-8” %>
<%@page contentType=”text/html;charset =utf-8” %>
b、 在使用request.getParameter()方法获取JSP页面值之前,设置
request.seCharacterEncoding(“UTF-8”);
Java常用功能
16、 过滤字符串前后以及中音出现的空格: 分为两种情况:
只需要过滤字符串前后的空格,而中间的空格不需要过滤 用String类中提供的trim()方法即可实现。
字符串的前后和中间可能出现的空格,都需要过滤
17、 String、StringBuffer、StringBuilder区别:
String类代表定长字符串,其内容在创建之后是不可更改的
StringBuffer类与String类相似,代表的是可变长的字符串缓冲区,通过
特定的方法可以改变字符串序列的长度和内容,并且对于多线程操作是安全的。在字符的连接操作上提供了性能和效率都优于String类的”+”的append()方法,因此如果需要大量频繁地进行字符连接操作时,优先采用StringBuffer类的append()方法。
StringBuilder类是StringBuffer类的一个等价类,该类与StringBuffer类具有相同的方法,且同样代表的是可变长的字符串缓冲区,不同的地方在于StringBuilder类是非线程安全的。但是也正是因为少了很多的同步操作,在效率上会高于StringBuffer类。因此如果不涉及多线程操作,可以优先考虑使用StringBuilder类来提高方法的执行效率。
18、 List、Set、Map是否继承自Collection接口:
在Java体系中,容器类库分为两大类,即Collection(集合)和Map(映像)。Collection中存放的是一组各自独立的对象,而Map中存放的是“键——值”对象。
List和Set都是Collection的子接口,List是一个有序可重复列表,Set是一个无序重复集。
19、 遍历Map和Vector集合: Map:
Iterator迭代器遍历:Map.entrySet().iterator(); XX.hasNext();
新式for循环启遍历:for(String key:Map.keySet());
Vector:
a、 Enumeration枚举器遍历:Enumeration
em=Vector.element();em.hasMoreElement();
b、 for循环遍历:for(int i=0;i 20、 反射机机制及作用: 定义: 反射是指程序可以访问、检测和修改其本身状态或行为的一种能力,在Java环境中,反射机制允许程序在执行时获取某个类的自身的定义信息,例如属性和方法等也可以实现动态创建类的对象、变更属性的内容或执行特定的方法的功能。从而使Java具有动态语言的特性,增强了程序的灵活性和可移植性 反射机制的作用: Java反射机制主要用于实现以下功能(在运行时时环境中)。 I、在运行时判断任意一个对象所属的类型 II、在运行时构造任意一个类的对象 III、在运行时判断任意一个类所具有的成员变量和方法 IV、在运行时调用任意一个对象的方法,甚至可以调用private方法 Java反射机制API: 实现Java反射机制的API在java.lang.reflect包下,具有以下几点: (1)、Class类:代表一个类 (2)、Field类:代表类的成员变量 (3)、Method类:代表类的方法 (4)、Constructor类:代表类的构造方法 (5)、Array类:提供了动态创建数组及访问数据的元素的静态方法。该类中的所有方法都是静态的。 难点: 反射机制是Java中非常重要的一项功能,应用也非常广泛,在现在流行的Structs、Hibernate、Spring等各种框架都是基于反射机制实现的,首先需要将XML配置文件的配置信息读取,然后利用反射机制创建对象、执行方法等。 21、 如何使用Java调用系统的exe文件 通过Runtime类可以方便调用外部的exe文件。 Runtime rm = new Runtime.getRuntime(); rm.exec(“notepad.exe”); 22、 如何使用Java调用系统的CMD Process rt; try { rt = Runtime.getRuntime().exec(\); BufferedReader br=new BufferedReader(new InputStreamReader(rt.getInputStream())); while(true){ String s = br.readLine(); if(s==null){ break; } System.out.println(s); } br.close(); rt.waitFor(); if(rt.exitValue()==0){ System.out.println(\运行成功!\); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 23、 使用MD5和SHA算法加密信息: Java Web程序设计 24、 jsp、java、JavaScript区别: Jsp是由Sun公司建立一种动态网页技术标准,用于编写动态网站程序。JSP技术以Java语言作为脚本,嵌入到JSP页面中,由服务器负责解释运行。JSP运行环境是JRE和服务器 JAVA程序需要由JRE运行环境才能解释运行,面向对象的语言。 JavaScript由Netscape公司基于Java的语法开发的。一种基于对象的脚本语言。可以在浏览器里直接运行,不需服务器的支持。是基于对象的函数式的语 言,在客户端用于实现表单验证和网页特效功能。 25、 Page、request、session、application区别: 类型不同分别:Object 、HttpServletRequest、HttpSession、ServletContext; 作用范围不同分别:全局作用范围,整个应用程序共享,生命周期为从应用程序启动到停止;会话作用域,当用户首次访问,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期为会话超时或服务器端强制制使会话失效;请求作用域,客户端的一次请求,生命周期为一次请求或使用forward方式执行请求转发;一个页面有效。 26、 forward和redirect区别: forward和redirect都可以实现页面的跳转,但是跳转时的工作原理不现,使用forward时,浏览器请求URL不会改变,request对象不会被销毁;使用redirect时,浏览器请求的URL会改变,request对象会被销毁并重新创建。在使用request对象在页面传值时,需要使用forward方式,而不能使用redirect方式。 27、 多个JSP页面之间传递信息: 使用URL;使用request对象;使用Session对象;使用application对象 28、 页面,前者主要用于引入动态变化的JSP页面;后者主要用于引入HTML静态页面和共通的JSP源代码。 29、 JavaBean就是一个符合JavaBean规范的JAVA类,可用于封装一些共通 的业务逻辑,从而实现重复利用。特点: 放在一个包中 JavaBean类必须要提供一个无参的构造方法。在JSP中使用 JavaBean类通过gettero/setter()方法来读写属性的值,并且将对应的属性首字母改成大写。注意使用setter()时value属性的类型要匹配。 30、 Cookie: Cookie是指存储在客户浏览器目录下的文本文件,文件信息由Web服务器发送到客户浏览器并存储,下次该客户再次访问该web服务器时,可从浏览器读回此信息。使用Cookie,Web服务器可以将一些客户的特定信息存储在客户计算机中,例如上次访问的位置、花费时间或用户密码等不建议使用Cookie保存。 JSP/Servlet操作Cookie: 写入Cookie的示代码如下: Cookie c = new Cookie(“username”,”tom”); c.setMaxAge(120); response.addCookie(c); 上述代码中,如果不使用setMaxAge()方法设置有效期,Cookie信息将在客户关闭浏览器之后删除。 读取Cookie的示例代码如下: Cookie[] c =request.get Cookies(); for(int i=0;i if(c[i].getName().equals(“username”){ username=c[i].getValue(); } } 在客户端的Cookie文件可以存储若干个Cookie对象的信息,在读取时,request.get Cookies()返回一个Cookie数组,可在该数组中遍历寻找指定的Cookie对象。 删除Cookie示例代码如下: Cookie c = new Cookie(“mycookie”,null); c.setMaxAge(0); c.setPath(“/”); response.addCookie(c); JavaScript操作Cookie 写入Cookie的示例代码如下: 略 31、 Servlet生命周期: 加载和实例化、初始化、处理请求、移除实例。 32、
正在阅读:
Java问题面试2(全面)02-01
《Linux系统管理》期末大作业任务书(计网14级) - 图文04-12
气温和降水教学设计04-23
现代通信技术概论复习题09-16
100个同义词替换精髓词汇03-10
挑战杯经典策划书05-18
《计算机组装与维护》课后习题答案03-05
ATX开关电源电压比较放大器LM339N和脉宽调制集成电路KA7500B各引脚功能及实测数据01-11
5岁男童一年看了400本图书03-18
软考考前通知10-11
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 面试
- 全面
- 问题
- Java
- 人工湿地污水处理技术
- 论文基于嵌入式ARM的图像采集处理系统设计
- IT专业英语词汇
- 对授权签字人的考核
- 原创“两次不能胜任解雇”之实务操作技巧
- 江苏省徐州市2016年中考物理联考试卷(A卷)(解析版)
- 西安石油大学 财政与金融名词解释
- AMOS步步教程
- 工大西村深基坑支护及土方开完专项施工方案
- 用multisim软件进行逻辑函数的化简与变换
- 施工组织课程设计(附施工平面布置图及横道图)
- 先进教育工作者事迹材料四篇
- 初三英语阅读理解训练题及答案三
- 宁波大红鹰学院《大学生职业发展与就业指导》课表(2014-2015学年第二学期)
- 浅析落后地区农村学校教学管理中的问题与对策
- 机电专业综合理论自编卷(1)
- 管理学-试题及答案-华南理工大学
- 初一期末备考复习 第16讲
- 造价案例分析讲义专题二:财务分析与评价(三)
- 1《企业会计准则第14号 - 收入》解读