博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 复习总结 (一)
阅读量:4206 次
发布时间:2019-05-26

本文共 8346 字,大约阅读时间需要 27 分钟。

一.Core Java
  基础语法
1.Math.round
参数+0.2后求其floor
2.x.equals(y)==true 
两个对象相同且有相同的hash code
3.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,
并可返回变化后的结果,那么这里到底是值传递还是引用传递?
值传递.JAVA只有值传递参数
4.char 型变量中能不能存贮一个中文汉字?为什么?
能够定义成为一个中文的,因为java 中以unicode 编码,一个char 占16
个字节,所以放一个中文是没问题的。
5.Static Nested Class 和Inner Class 的不同
Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖
于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化
6.写clone()方法时,通常都有一行代码,是什么
Clone 有缺省行为:super.clone(),他负责产生正确大小的空间,并逐位
复制。
7.GC 是什么? 为什么要有GC?
GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出
现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
Java 提供的GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的
目的,Java 语言没有提供释放已分配内存的显示操作方法。Java 程序员不用
担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下
面的方法之一:System.gc() 或Runtime.getRuntime().gc()。
8.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可
继承实体类(concrete class)? 【基础】
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体
类,但前提是实体类必须有明确的构造函数。
9.如何取小数点前两位并四舍五入?
可用该数字构造一java.math.BigDecimal 对象,再利用其round()方法
进行四舍五入到保留小数点后两位,再将其转换为字符串截取最后两位
10.日期和时间
1)如何取得年月日、小时分秒?
1)创建java.util.Calendar 实例(Calendar.getInstance()),调用其get()
方法传入不同的参数即可获得参数所对应的值,如:
calendar.get(Calendar.YEAR);//获得年
2)如何取得从1970 年到现在的毫秒数?
Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
3)如何取得某个日期是当月的最后一天?
Calendar time = Calendar.getInstance();
time.set(Calendar.DAY_OF_MONTH,
time.getActualMaximum(Calendar.DAY_OF_MONTH));
4)如何格式化日期?【基础】
利用java.text.DataFormat 类中的format()方法可将日期格式化。
11.java 和javasciprt 的区别。
JavaScript 与Java 是两个公司开发的不同的两个产品。Java 是SUN 公司推
出的新一代面向对象的程序设计语言,特别适合于Internet 应用程序开发;而
JavaScript 是Netscape 公司的产品,其目的是为了扩展Netscape Navigator
功能,而开发的一种可以嵌入Web 页面中的基于对象和事件驱动的解释性语言,
它的前身是Live Script;而Java 的前身是Oak 语言。下面对两种语言间的异
同作如下比较:
1)基于对象和面向对象:
Java 是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象;
JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用
的复杂软件。它是一种基于对象(Object Based)和事件驱动(Event Driver)
的编程语言。因而它本身提供了非常丰富的内部对象供设计人员使用;
2)解释和编译:
Java 的源代码在执行之前,必须经过编译;
JavaScript 是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行;
3)强类型变量和类型弱变量:
Java 采用强类型变量检查,即所有变量在编译之前必须作声明;
JavaScript 中变量声明,采用其弱类型。即变量在使用前不需作声明,而是
解释器在运行时检查其数据类型;
4)代码格式不一样。
  集合部分
1.介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
Collection
├--List
│├--LinkedList
│├--ArrayList
│└--Vector
│ └--Stack
└--Set
Map
├--Hashtable
├--HashMap
└--WeakHashMap
2.说出ArrayList,Vector, LinkedList 的存储性能和特性?
ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际
存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元
素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由
于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而
LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,
但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
3.HashMap 和Hashtable 的区别?
二者都实现了Map 接口,是将惟一键映射到特定的值上;主要区别在于:
1)HashMap 没有排序,允许一个null 键和多个null 值,而Hashtable 不允许;
2)HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和
containsKey,因为contains 方法容易让人引起误解;
3)Hashtable 继承自Dictionary 类,HashMap 是Java1.2 引进的Map 接口的实现;
4)Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问
Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外
同步。
Hashtable 和HashMap 采用的hash/rehash 算法大致一样,所以性能不会有很
大的差异。
4.Arraylist 与Vector 区别
1)同步性:Vector 是线程安全的(同步),而ArrayList 是线程序不安全的;
2)数据增长:当需要增长时,Vector 默认增长一倍,而ArrayList 却是一半。
5.List、Map、Set 三个接口,存取元素时,各有什么特点
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部
排序。Map 保存key-value 值,value 可多值。
  线程部分
1.sleep() 和wait() 有什么区别?
sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行
机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会
释放对象锁。wait 是Object 类的方法,对此对象调用wait 方法导致本线程放
弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或
notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态
2.简述synchronized 和java.util.concurrent.locks.Lock 的异同?
主要相同点:Lock 能完成synchronized 所实现的所有功能;
主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能。
synchronized 会自动释放锁,而Lock 一定要求程序员手工释放,并且必须在
finally 从句中释放。
OOA/D 与UML 部分
1.j2ee 中的几种常用模式
Session Facade Pattern:使用SessionBean 访问EntityBean;
Message Facade Pattern:实现异步调用;
EJB Command Pattern:使用Command JavaBeans 取代SessionBean,实现轻量级访问;
Data Transfer Object Factory:通过DTO Factory 简化EntityBean 数据提供特性;
Generic Attribute Access:通过AttibuteAccess 接口简化EntityBean
数据提供特性;
Business Interface:通过远程(本地)接口和Bean 类实现相同接口规范业务逻辑一致性;
XML 部分
1.XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式
1) 两种形式: dtd和schema
2) 本质区别:
schema本质是xml 可以被xml解析器解析
3) 解析方式:
DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM 的树结
构所造成的,这种结构占用的内存较多,而且DOM 必须在解析文件之前把整个文
档装入内存,适合对XML 的随机访问
SAX:不同于DOM,SAX 是事件驱动型的XML 解析方式。它顺序读取XML 文
件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开
头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来
处理XML 文件,适合对XML 的顺序访问
STAX:Streaming API for XML (StAX)
数据库及SQL 部分
JDBC 及Hibernate
1.Hibernate 有哪5 个核心接口
Configuration 接口: 配置Hibernate,根据其启动hibernate,创建SessionFactory对象;
SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建session对象,
sessionFactory是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,
是重量级、二级缓存;
Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,
 是轻量级、一级缓存;
Transaction 接口:管理事务;
Query 和Criteria 接口:执行数据库的查询。
2.什么是重量级?什么是轻量级?
轻量级是指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经
常创建和销毁session 的对象;重量级意味不能随意的创建和销毁它的实例,会
占用很多的资源。
3.JDBC,Hibernate 分页怎样实现
1) Hibernate 的分页:
Query query = session.createQuery("from Student");
query.setFirstResult(firstResult); //设置每页开始的记录号
query.setMaxResults(resultNumber); //设置每页显示的记录数
Collection students = query.list();
2) JDBC 的分页:
根据不同的数据库采用不同的sql 分页语句
Oracle中的sql语句为: 
SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10
查询从记录号2 到记录号10 之间的
所有记录
Mysql中的sql语句为:
select * from student limit 2,10;
Web部分
1.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别?
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行
其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service
方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决
定将实例销毁的时候调用其destroy 方法。与cgi 的区别在于servlet 处于服务
器进程中,它通过多线程方式运行其service 方法,一个实例可以服务于多个请
求,并且其实例一般不会销毁,而CGI 对每个请求都产生新的进程,服务完成后
就销毁,所以效率上低于servlet。
2.forward 和redirect 的区别? 
forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标
地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,
浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来
的地址。
redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请
求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以
session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的
链接地址。
前者更加高效,在前者可以满足需要时,尽量使用forward()方法 并且,这样也有
助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,
则必须使用sendRedirect()方法。
3.JSP 中动态INCLUDE 与静态INCLUDE 的区别?
动态include用jsp:include动作实现<jsp:include page="included.jsp" flush="true"/>
总是会检查所包含文件中的变化 适合用于包含动态页面 并且可以带参数
   静态include用include伪码实现 不会检查文件的编号 适合包含静态页面
<%@ include file="include.html" %>
4.JSP 的内置对象及方法
1) request表示HttpServletRequest对象 包含了有关浏览器请求的信息
  提供了几个用于获取cookie,header和session数据的有用的方法
2) response表示HttpServletResponse对象 提供了几个用于设置送回浏览器
  响应的方法(cookies 头信息)
3) out对象是JspWriter的一个实例 提供了几个用于向浏览器回送输出结果的方法
4) pageContext 表示PageContext对象 用于方便存取各种范围的名字空间,servlet相关的
  对象的api 并且包装了通用的servlet相关功能的方法
5) session表示一个请求的HttpSession对象 可以存储用户的状态信息
6) application表示ServletContext对象 有助于查找有关servlet引擎和servlet环境的信息
7) config表示一个ServletConfig对象 用于存取servlet实例的初始化参数
8) page表示从该页面产生的一个servlet实例
5.jsp 有哪些动作?作用分别是什么?
6种
jsp:include 在页面被请求的时候引入一个文件
jsp:useBean 寻找或者实例化一个JavaBean
jsp:setProperty 设置JavaBean的属性
jsp:getProperty 输出某个JavaBean的属性
jsp:forward 把请求转到一个新的页面
jsp:plugin 根据浏览器类型为Java插件生成Object或者embed标记
6.get 和post 的区别?
1) Get是用来从服务器上获得数据,而Post 是用来向服务器上传递数据
2) Get 将表单中数据按照variable=value 的形式,添加到action 所指向的
  URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数
  据放在form 的数据体中,按照变量和值相对应的方式,传递到action所指向URL;
3) Get 是不安全的,因为在传输过程,数据被放在请求的URL 中;Post 的
  所有操作对用户来说都是不可见的;
4) Get 传输的数据量小,这主要是因为受URL 长度限制;而Post 可以传输
  大量的数据,所以在上传文件只能使用Post;
5) Get 限制Form 表单的数据集必须为ASCII 字符,而Post 支持整个ISO10646字符集
6) Get 是Form 的默认方法。
7.详细描述MVC
基于Java 的Web 应用系统采用MVC 架构模式,即model(模型)、view(视
图)、control(控制)分离设计;这是目前WEB 应用服务系统的主流设计方向。
Model:即处理业务逻辑的模块,每一种处理一个模块;
View:负责页面显示,显示MODEL 处理结果给用户,主要实现数据到页面转
 换过程;
Control:负责每个请求的分发,把FORM 数据传递给MODEL 处理,把处理结
        果的数据传递给VIEW 显示。
8.应用服务器有那些?
BEA WebLogic Server, IBM WebSphere Application Server, Oracle9i
Application Server, JBoss, Tomcat。
9.介绍在JSP 中如何使用JavaBeans?
1) <jsp:useBean />:用来创建和查找bean 对象;
2) <jsp:setProperty />:用来设置bean 的属性,即调用其setXxx()方法;
3) <jsp:getProperty />:用来获得bean 的属性,即调用其getXxx()方法。
10.JSP 和Servlet 中的请求转发分别如何实现?
JSP 中的请求转发可利用forward 动作实现:<jsp:forward />;
Serlvet 中实现请求转发的方式为:
getServletContext().getRequestDispatcher(path).forward(req,res)。
EJB 及Spring 部分:
1.EJB 与JAVA BEAN 的区别?
Java Bean 是可复用的组件,对Java Bean 并没有严格的规范,理论上讲,
任何一个Java 类都可以是一个Bean。但通常情况下,由于Java Bean 是被容器
所创建(如Tomcat)的,所以Java Bean 应具有一个无参的构造器,另外,通
常Java Bean 还要实现Serializable 接口用于实现Bean 的持久性。Java Bean
实际上相当于微软COM 模型中的本地进程内COM 组件,它是不能被跨进程访问的。
Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java 的远程方
法调用(RMI)技术的,所以EJB 可以被远程访问(跨进程、跨计算机)。但EJB
必须被布署在诸如Webspere、WebLogic 这样的容器中,EJB 客户从不直接访问
真正的EJB 组件,而是通过其容器访问。EJB 容器是EJB 组件的代理,EJB 组件
由容器所创建和管理。客户通过容器来访问真正的EJB 组件
2.EJB 的几种类型?
会话(Session) Bean
Stateful
Stateless
实体(Entity) Bean
Bean管理的持续性BMP
容器管理的持续性CMP
消息驱动(Message Driven) Bean

转载地址:http://vvqli.baihongyu.com/

你可能感兴趣的文章
Project 2013项目管理教程(1):项目管理概述及预备
查看>>
ssh客户端后台运行
查看>>
哥去求职,才说了一句话考官就让我出去
查看>>
【React Native】把现代web科技带给移动开发者(一)
查看>>
【GoLang】Web工作方式
查看>>
Launch Sublime Text 3 from the command line
查看>>
【数据库之mysql】mysql的安装(一)
查看>>
【数据库之mysql】 mysql 入门教程(二)
查看>>
【HTML5/CSS/JS】A list of Font Awesome icons and their CSS content values(一)
查看>>
【HTML5/CSS/JS】<br>与<p>标签区别(二)
查看>>
【HTML5/CSS/JS】开发跨平台应用工具的选择(三)
查看>>
【心灵鸡汤】Give it five minutes不要让一个好主意随风而去
查看>>
【React Native】Invariant Violation: Application AwesomeProject has not been registered
查看>>
【ReactNative】真机上无法调试 could not connect to development server
查看>>
【XCode 4.6】常用快捷键 特别是格式化代码ctrl+i
查看>>
【iOS游戏开发】icon那点事 之 实际应用(二)
查看>>
【iOS游戏开发】icon那点事 之 图标设计(三)
查看>>
【IOS游戏开发】之测试发布(Distribution)
查看>>
【IOS游戏开发】之IPA破解原理
查看>>
【一天一道LeetCode】#45. Jump Game II
查看>>