Java基础面试题及答案 下载本文

.

只要是new,都是重新分配堆空间,如果不区分栈和堆,这里创建了1个String Object。如果是从jvm角度来说的话,它是创建了两个对象,String s是在栈里创建了一个变量,new String(\是在堆里创建了一个对象并被s引用到。 如果是String s = \,那就要看常量池里有没有\,如果有直接引用,如果没有则创建再引用 这里\本身就是pool中的一个对象,而在运行时执行new String()时,将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s持有。ok,这条语句就创建了2个String对象。 难度等级:中

4.

答案:

每次String+String都会生成一个新的String,而使用StringBuffer则不会出现此种情况,可以减少String对象的实例化次数。

5.

(1)final为关键字;可以修饰类,方法,变量

(2)finalize()为方法;由JVM进行调用,用于对对象进行垃圾回收

(3)finally:用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;通常用于释放资源 A demoGC = new A(); demoGC = null; System.gc();

System.out.println(\public class A { @Override

protected void finalize() throws Throwable { System.out.println(\

System.out.println(Thread.currentThread().getName()); super.finalize(); } }

数据库部分-选择题

1.C 2.B

.

.

解析: nvl(expr1,expr2)将null转换为非null值 如果expr1位null,则取值expr2,expr2是实际值 expr1和expr2可以是任何数据类型,但两个参数的数据类型必须是一致的

3.D

通过现有的表生成一个新的物理表

create table 表名 as select 子句 where 字句(不成立的条件)

4.C

数据库简答题

1.SELECT * from staff where salary>(SELECT AVG(salary) from staff)

SELECT dept_id from staff UNION All SELECT id from department MAX() MIN(expr) COUNT(DISTINCT expr,[expr...]) SUM(expr) UNION 求去重后的并集 UNION All 求全并集 minus 差集 2. 统计单笔消费超过50元的用户总共的消费次数以及消费总金额,总金额>2000

select cid,COUNT(*),SUM(money) from orders where money>50 GROUP BY cid HAVING SUM(money)>2000 3. SELECT s1.name,s2.name as mgrName from staff s1 LEFT JOIN staff s2 ON s1.mgr_id=s2.id

4.答案:

五种:

1.主键约束 PRIMARY KEY

.

.

2.外键约束 FOREIGN KEY 3.唯一约束 UNIQUE 4.检查约束 CHECK 5.非空约束 NOT NULL

5.答案:

mysql分页查询: select * from staff LIMIT 0,2

oracle的分页语句:3是起始记录号,6是终止记录号select * from ( select e.*, rownum rn from emp e ) emp_alias where emp_alias.rn>=3 and emp_alias.rn<=6 mysql分

页语句:0是起始记录的前一个数字,3是每页显示多少条数据 select * from 表名 limit 0,3 6. SELECT s.name,d.name,d.location from staff s,department d where s.dept_id=d.id and comm is not NULL

7. select s.name,d.location from staff s,department d where s.dept_id=d.id and s.name LIKE '%a%'

8. SELECT s.name,s.salary from staff s,(select AVG(salary) av,deptid did from staff group by deptid) tmp where s.salary>tmp.av and s.dept_id=tmp.did

Servlet部分

1.

1、request对象 2、response对象 3、session对象 4、application对象 5、out 对象

6、pageContext 对象 7、config 对象 8、page 对象

.

.

9、exception 对象 四大域对象:

HttpServletRequest:一次请求 HttpSession:一次会话

ServletContext:整个服务器生命周期 PageContext:当前页面

2.答案:

Servlet 生命周期:实例化--->初始化--->服务--->销毁。

init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。 service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。 destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

5.答案:

1、模型(Model) : 模型是应用程序的主体部分。模型表示业务数据

2、视图(View) : 视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。

3、控制器(controller) : 控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。 MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性 视图层:jsp、html超文本标记语言 控制层: servlet,controller,action 模型层:mybatis,entity,service

.

.

框架部分

1.答案:

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。 6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

2.核心是IOC和AOP

IOC:控制反转的意思,在spring中,将对象的创建权交由spring来完成(如果问为什么,答为了更好的解耦),DI是IOC的实现过程,是依赖注入的意思

AOP:面向切面编程,底层采用的是动态代理机制(2种:JDK代理(给有接口的类生成代理),CGlib代理(给无接口的类生成代理)),是指将一些重复性的代码提取出来成切面, 给相应的方法定义切点,在指定切点插入切面中的代码。目的就是为了将重复性的代码和核心业务代码分离。主要的应用:spring的声明式事务,日志记录等等

.