java基础 部分复习.docx
《java基础 部分复习.docx》由会员分享,可在线阅读,更多相关《java基础 部分复习.docx(29页珍藏版)》请在冰豆网上搜索。
java基础部分复习
什么是分析?
分析:
就是弄懂我们需要实现什么样的功能。
什么是设计?
设计:
就是我们实现这些功能用什么样的方法。
得到当前年月日时分秒
Calendarcal=Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH)+1);
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.HOUR));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));
1、jdk新特性
a、增强forEach(增强了for循环)
b、泛型指参数化类型提高类型安全、减少强制类型转换、性能上有所提升
c、可变参数在一个方法中只有一个可变参数而且必须在参数列表的最后面一个
d、枚举枚举不能extends只能Implements定义命名一个常量列表,然后可以用【类名.变量名】得到变量的值。
e、自动拆装箱Integeri=100;//装intj=i.intValue;//拆
我觉得静态导入也是一个。
2、java中的内存区域:
栈内存:
可以保存对象的名称(保存:
访问的堆内存的地址)。
堆内存:
保存每个对象的具体属性。
全局数据区:
保存static声明的属性。
全局代码区:
保存所有方法的定义。
3、List、Map、Set三个接口,存取元素时,各有什么特点?
这样的题属于随意发挥题:
这样的题主要两个方面的水平:
一是要真正明白这些内容,二是要有较强的总结和表述能力。
如果你明白,但表述不清楚,在别人那里则等同于不明白。
首先,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。
Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象。
List表示有先后顺序的集合,按先来后到的顺序排序,也可以指定当前对象在集合中的存放位置。
Map与List和Set不同,它是双列的集合,其中有put方法。
Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。
IO
1、File类是操作文件的。
2、字节流(InputStream,OutputStream都是抽象类)和字符流(Reader,Writer输出)操作文件内容。
3、使用File类打开文件,再通过字节流和字符流的子类(FileOutputStream只能输出byte数组,FileInputStream,FileWriter,FileReader)指定输出位置,进行读写,关闭流。
FileWriter是OutputStreamWriter的子类。
WriterBufferedWriter(字符流)
OutputStreamWriter(转换流)FileWriter(字符流)
ReaderBufferedReader(字符流)
InputStreamReader(转换流)FileReader(字符流)
OutputStreamFileOutputStream(字节流)
InputStreamFileInputStream(字节流)
System.out.println(newString(byte[]));把字节数组转换成字符串
OutputStreamWriter字节流与字符流的转换流,它也是Writer的子类。
如:
Writerw=newOutputSteamWriter(newFileOutputStream(newFile()));
Java.util.Scanner接收键盘收入非常强大。
1、写一个接口在声明相加的功能。
再写一个类实现这个功能
publicinterfaceCommonIter{publicintsum(inta,intb);}
publicclassSysUtilimplementsCommonIter{
publicintsum(inta,intb){returna+b;}}
2、Sax和DOM在解析xml时有什么区别?
解析XML有什么“东西”?
个有什么区别?
Java解析XML时有两种解析方式:
DOM方式解析和SAX方式解析。
其中DOM方式解析就是在内存中构建整个XML文档的节点树,从而使对XML文档的操作变成对内存中节点树的操作。
这种方式的优点是可以方便定位节点,缺点是需要把整个文档读入内存,然后才能构建起该文档的节点树,如果xml文档比较大时就会增加系统的开销。
SAX方式是按照输入流的方式,按照输入的顺序解析xml文档,这种解析方式是基于时间的,文档节点的开始和结束都可以触发事件,这种解析方式是读入一部分文档的同时就开始解析,从而减小了系统的开销,但是如果要定位节点就比较困难。
Java语言自带的JAXP可以解析XML文档的,但是JAXP只是解析XML文档的一种简单的实现,在实际解析过程中使用JAXP并不方便
JDOM是个开源的解析xml文档的项目,它支持DOM和SAX两种方式来解析xml文档。
但实际开发中开发人员一般会使用JDOM的SAX解析方式,因为这种方式解析XML文档效率很高。
dom4j也是一种解析xml的开放源代码的项目。
Dom4j是由早期开发JDOM的人分离出来而后独立开发的。
与dom4j的API相对要复杂些,但它提供了比JDOM更好的灵活性。
另外,与JDOM不同的是,dom4j自带了一个SAX解析器Aelfred2,如果没有显示地设置SAX解析器,也没有通过系统属性org.xml.sax.driver设置解析器,dom4j会使用JAXP来加载JAXP配置的解析器,如果创建解析器失败,那么最后是与哦能够dom4j自带的Aelfred2解析器。
3、写出一个匹配IP地址的正则表达式。
无标准答案,灵活发挥如:
\d+\.\d+\.\d+\.\d
4、怎么遍历MAP?
Set和MAP有什么关系?
当调用Map的entrySet()方法时会返回一个Set集合,此集合中装的是Map.Entry接口,通过Map.Entry接口中的getKey()和getValue()方法可以取得map中的key和value
5、Class.forName的作用。
考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?
要用如下的方式Aa=(A)Class.forName("A").newInstance();这和下段代码是等效的
Aa=newA();返回一个以字符串指定的类名的类
6、Session.EJB的方法有哪些?
EJB的事务是怎样控制的?
sessionEJB的方法分为有状态的(Stateful)和无状态的(Stateless)。
EJB的事物可以依托容器来支持。
或者利用JTA处理
7、Struts2的运行机制,对比Struts1有什么优势?
运行机制:
(1)客户端初始话一个指向web容器(如tomcat)的请求。
(2)请求经过一系列过滤器并传递给FilterDispatcher(最新的版本是这个过滤器:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)
(3)FilterDispatcher(最新版本是StrutsPrepareAndExecuteFilter)接受到请求信息后,会根据URL在ActionMapper中搜索指定Action的映射信息。
(4)如果找到符合的映射信息,ActionProxy通过ConfigurationManager在struts.xml配置文件中搜索被请求Actioon的类。
(5)ActionProxy创建一个被请求Action的实例,该实例将用来处理请求信息。
(6)如果在struts.xml中存在于被请求Action相关的拦截器配置,那么该Action的实例被调用的前后,这些拦截器也会先被执行。
(7)Action对请求处理完毕以后返回一个逻辑视图,由此逻辑视图寻找对应的物理视图(可以是jsp,freemarker模版等),并返回给客户端
优势:
(1)struts1要求Action继承一个抽象基类,但struts2可以不继承任何类,基至也可以不实现接口。
(2)struts1是单例模式,struts2为每一个请求创建一个action的实例。
(3)struts1依赖于servletapi,但struts2不依赖api.因为struts2有拦截器的机制。
(4)struts1的actionform必须继承一个ActionForm的基类,struts2的选择很多,就算使用模型驱动,也不需要继续某些类。
(5)struts1整合了jstl,struts2也可以使用jstl,但还可以使用OGNL表达式语言。
(6)struts1的actionform通常都是String类型,但struts2可以轻松支持类型转换。
8、API是什么
ApplicationProgrammingInterface应用编程接口
9、简单描述MVC模式。
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
10、继承关系中类的初始化过程
初始化父类的静态代码--->初始化子类的静态代码--->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数。
11、子类类型的引用引用父类对象时,可以访问子类新增的方法码?
只能使用从父类继承或重载的那部分方法,子类新增的方法不能访问。
12、Struts的异常框架是什么?
在Action中不捕捉异常,而是将异常抛出给struts框架处理。
只需要在配置文件中指示struts如何处理这些被抛出的异常,即用元素来定义需要处理哪种类型的Exception,以及一旦出现异常,需要转向哪个页面来进行提示。
然后在JSP页面中使用errors/>标签显示异常对应的错误消息。
13、Struts是如何用程序切换网页显示的语言
struts在session中存放一个Locale对象,默认的情况下,根据Locale对象所包含的语言编码信息来判断,这就是我们为什么可以通过更改网页显示语言设置,就能显示不同的语言文字的原因
14、Hibernate的主键生成策略有那些?
数据库提供的主键生成机制。
identity、sequence(序列)、native(本地);外部程序提供的主键生成机制。
increment(递增),hilo(高低位),seqhilo(使用序列的高低位)等
15、Hibernate的延迟加载是如何实现的
延迟加载一般用于集合的抓取策略,也就是说只在需要用到的情况下,再发出select语句,将其相关的对象查询出来。
只需在hibernate的映射文件中元素中加上lazy属性,并设置值为true,hibernate会自动使用延迟加载策略。
16、怎么在JSP中自定义一个标签?
怎么做?
先写一个标签处理器,必须实现javax.servlet.jsp.tagext.Tag或javax.servlet.jsp.tagext.SimpleTag接口或它们的子接口。
接着在WEB应用程序/WEB-INF目录下创建一个标签库描述符文件,用来描述一个标签库,包含标签的名字、标签处理器类和标签的属性等信息。
然后在web.xml中的元素的子元素配置。
在JSP页面中增加这样的标签<%@tagliburi=""prefix=""%>,就可以使用了。
17、常用的设计模式有哪些。
用在哪些地方。
迭代器模式,平常使用的foreach()语句就是这种模式的典型应用。
抽象工厂模式,在Hibernate中用来解决多数据库兼容问题。
单例模式,确保某一个类只有一个实例,例如:
Calendar
18、数据库怎样优化?
(表结构优化,索引优化。
)
表结构优化:
将频繁被访问的数据同较少被访问的数据分割成2个表,并在每个表中复制关键字;常用的计算字段(如总计、最大值等)可以考虑存储到表中;如果规范化设计产生了多路合并关系,就可以考虑在表中加入重复列,等等。
索引优化:
主、外键可以建索引,字段经常被分组排序可以建索引,经常在where子句中使用的列也可以建索引,字段中的值是一个或极少不同值就不能建索引了等等。
但是索引是不能滥用的。
索引需要占用数据表以外的物理存储空间,创建索引和维护索引是要花费时间的。
19、java中会存在内存泄漏吗,请简单描述。
会。
如:
inti,i2;return(i-i2);//wheni为足够大的正数,i2为足够大的负数。
结果会造成溢位,导致错误。
21、EJB与JAVABEAN的区别?
JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。
但通常情况下,由于JavaBean是被容器所创建(如Tomcat)的,所以JavaBean应具有一个无参的构造器,另外,通常JavaBean还要实现Serializable接口用于实现Bean的持久性。
JavaBean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
EnterpriseJavaBean相当于DCOM,即分布式组件。
它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。
但EJB必须被布署在诸如JBoss、Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。
客户通过容器来访问真正的EJB组件。
22、在J2EE中有一个“容器(Container)”的概念,不管是EJB还是Spring都有他们各自实现的容器,受容器管理的组件会具有有生命周期的特性,请问,为什么需要容器?
它的好处在哪里?
它会带来什么样的问题?
需要容器的理由:
可接插性:
容器将调用方法与具体的实现策略分开。
虽然Java接口提供了很好的接口和实现分离,但是必须用一种方法去帮我们找到一个接口的实现,用容器调用显然比在代码中硬编码要好。
服务定位:
容器像是个服务的盒子,如果没有容器了,配置管理这些服务是十分困难的。
为开发和部署量身订做服务。
可以通过容器管理我们的事物,这样开发人员就可以集中精力开发业务逻辑了。
会带来的问题:
1.部署复杂2,内在服务多,启动慢3,相对难以测试(调试)
26、jsp有哪些内置对象?
作用分别是什么?
JSP共有以下9种基本内置组件
request用户端请求,此请求会包含来自GET/POST请求的参数
applicationservlet在容器启动的整个生命周期都有效
response网页传回用户端的回应pageContext网页的属性是在这里管理
session与请求有关的会话期out用来传送回应的输出
configservlet的构架部件pageJSP网页本身
exception针对错误网页,未捕捉的例外
27、Struts怎样处理重复提交
Struts中使用令牌处理重复提交Token
28、什么是IOC。
IOC是控制反转,依赖注入。
使用者不用创建被使用者而是让容器维护他们之间的关联关系
29、什么是AOP。
AOP是面对切面的意思,我们以前程序的执行时按照顺序运行的如果我们需要让程序加上特定的业务逻辑,我们需要在源程序中加入我们需要执行的业务逻辑,而面向切面的编程我们可以定义一个切面,在切面中加入我们需要运行的业务逻辑即通知,只要符合我们定义的切入点的程序在不需要改变源代码的程序下,就会执行我们要新加的业务逻辑,例如日志、权限、异常处理、事务处理等,使用AOP将这种和业务逻辑关系不大的代码分离出来,达到重用的目的
30、Spring的事物控制是怎样的。
Spring中管理事物一般都是控制在service层,因为service层可能调用多个DAO层。
主要利用spring的声明式的事物,这样在程序中不必再考虑事物问题,集中精力编写业务层代码就可以了。
31、你知道的版本控制工具有什么。
CVSVSSSVN
32、分组开发的配置文件怎样处理。
把单个模块的配置文件分开写,这样子利于分模块开发,然后把单个模块的配置文件整合时统一加载。
33、试描述Struts,Hibernate,Spring的框架特点和结合方式。
Struts是做控制层,Hibernate是持久层,对底层进行封装。
Spring主要把struts和Hibernate以及事物进行统一管理。
主要是用配置文件进行管理。
由spring创建struts的action实例,同时把用到的业务层类注入到action中。
Spring也在容器启动时可以创建hibernate中的sessionFactory,并把其注入dao层,以后的dao层代码可以继承HibernateDaoSupport,从而直接取得sessionFactory或session对象。
Spring提供了声明式事物,只需要在配置文件中进行配置即可,以后在代码中我们就可以不考虑事物问题了。
事物我们一般都控制在业务层
34、你自己做的项目怎么架构,谈谈你对你做过的软件的技术架构?
Dao+jsp+servlet+javabeanSshSsjsj
35、JAVA的参数传递使用的的是值传递还是值引用?
你对JAVA参数传递都是值传递是怎么理解的?
值传递对于基本数据类型是值的副本对引用类型传的是值的引用
5、Collection和Collections的区别。
Collection是集合类的上级接口,继承于他的接口主要有Set,List.。
Collections是针对集合类的一个工具类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
什么是数据库?
数据库是长期存储在计算机中的有组织的、可共享的数据集合
特点:
数据结构化、实现数据共享、减少数据冗余、数据独立
grantselectanytabletouserName;----可查询任何表
alter语句distinct字段-----限制某字段
左右连接:
selecttable1,table2fromtable1t1leftjiontable2t2t1.id=t2.id;(右连接会把没有对应的数据也列出来)
复制表
CREATETABLEas
示例:
createtabletestasselect*fromemp;
如果只复制表的结构不复制表的数据则:
createtabletestasselect*fromempwhere1=2;
事务的特点:
原子性、一致性、持久性、隔离性
MySql:
1、cmd中启动mysql服务答:
netstartmysql
2、cmd中停止mysql服务答:
netstopmysql
3、如何知道我现在正用着的mysql的版本?
答:
登录mysql以后,用s命令可以看到许多关于MYSQL的信息.
4、导入表loaddatalocalinfile"文件名"intotable表名;
注意:
你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库。
5、备份数据库:
(命令在DOS的\mysql\bin目录下执行)
mysqldump--optschool>school.bbb
注释:
将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取
6、MySQL数据库具有以下主要特点:
同时访问数据库的用户数量不受限制;可以保存超过50,000,000条记录;
是目前市场上现有产品中运行速度最快的数据库系统;
用户权限设置简单、有效。
查询语句:
分布查询:
Oracle(如果是<就不用查出rownum)
SELECT*FROM(SELECT表.*,rownumrnFROM表WHEREROWNUM<11)WHERErn>=6;
----要查第几行的数据可以使用以下方法:
select*fromempwhererownum<=6andempnonotin(selectempnofromempwhererownum<=3);
SQL
selecttop10*from表where表.idnotin(selecttop20from表orderby表.iddesc)orderbymiddesc";
MYSQL
select*from表limit20,10;
----字符串连接
select'编号:
'||empno||'的雇员,姓名是:
'||ename||'职位是:
'||jobfromemp;
----查询有奖金所有雇员的信息
select*fromempwherecommisnotnull;
----查询在1981年雇佣的雇员信息
select*fromempwherehiredatebetween'01-1月-81'and'31-12月-81';
----查询出所有雇员姓名中第二个字母包含"M"的雇员
select*fromempwhereenamelike'_M%';
----要求查询出雇员编号不是7369,7499,7521的雇员信息。
select*fromempwhereempnonotin('7369','7499','7521');
--要求按照工资由低到高排序。
select*fromemporderbysalasc;(asc升序desc降序默认为升序)
----要求查询出20号部门的所有雇员的信息,查询的信息按照工资由高到低排序,如果工资相等,则按照雇佣日期由早到晚排序。
select*fromempwheredeptno=20orderbysaldesc,hiredateasc;
----转换函数
selectto_char(sysdate,'yyyy-mm-dd')fromdual;
----要求查询出每个雇员的姓名,工作,雇员的直接上级领导的姓名。
selecte.ename,e.job,m.enam