尚学堂Java笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

笔试和面试题目
V1.0
北京尚学堂科技
JAVA基础笔试题目
1.JDK和JRE的区别?
Java Development Kit. 包含了JRE、编译器等程序。

Java Runtime Environment指的是java运行时环境。

负责启动虚拟机,加载和运行class文件。

2.JVM是什么?工作原理?
JVM是sun公司定义的规范。

java vitual mashine。

3.GC是什么?是如何回收对象的?
Gabbage collection 垃圾回收器。

哪些对象需要回收?对象没有被引用。

4.System.gc()的作用是?程序员能直接调用垃圾回收器吗?
GC不能被程序员调用。

System.gc()可以通知调用垃圾回收器。

5.一个java源文件,可以定义多个class类吗?可以定义多个public类吗?
可以。

6.java中,包含几种数据类型?
基本数据类型
byte 1个字节
short 2个字节
int 4个字节整形常量默认类型
long 8个字节
float 4个字节
double 8个字节浮点常量的默认类型
char 2个字节 Unicode码
boolean 1位
引用数据类型(4个)
7.&和&&的区别? 3&4和3&&4哪个写法是不对的?
&,按位与
&& 逻辑与短路
8.2x4=8. 最快的算法怎么实现?
移位运算。

左移一位表示乘以一个2.
9. 堆区和栈区的区别?
10.包装类使用时,自动装箱和拆箱是怎么回事?
Integer I = 3; //装箱。

实际上是一种编译器魔术。

编译器帮助我们修改了代码: Integer I = new Integer(3);
int a = new Integer(3);
11.equals 方法和==的区别?
== 判断对象是否相同。

equals 是Object 类中的方法,他的默认实现也是比较引用地址。

不过,很多类重写了这个方法,一般用来比较对象中某些的属性的值。

12.说出你编程中,常见的异常。

至少5个。

自己去想。

13.成员变量和静态变量的区别?在内存中如何存放?
成员变量,实例变量:从属于对象。

存放在堆。

静态变量:从属于类。

存放在方法区
14.重载是怎么回事?重写是怎么回事?
重载overload:一个方法名定义多个方法。

参数列表不同(个数、顺序、类型不同),返回值不能构成重载。

重写override 覆盖。

将父类的方法覆盖。

15.java中继承如何实现?
extends
16.包含抽象方法的类一定是抽象类吗?
是。

17.java中,聊聊的多态? 面向接口编程?
多态的实现:父类引用指向子类对象。

在实际开发中,我们项目中使用了spring。

一般都采用面向接口编程。

我们将变量类型全部定义成接口的类型。

然后,运行时再通过spring注入具体的实现。

18.封装的实现中,说明private、protected、default、public的区别?
private 私有。

只有自己类中可以调用。

protected 受保护。

子类中能用。

子类不在同一个包中能不能调用???
default :同一个包中可以用。

public:公开的。

任何地方都可以用。

19.面向对象的三大特征有哪些?
封装、继承、多态
20.浮点数是有误差的。

如果要实现精确的计算?
BigDecimal
21.char类型,能表示汉字吗?为什么?
22.final修饰变量、方法、类,都有什么区别?
变量:常量
方法:不能被子类重写
类:不能被继承
23.final,finally,finalize方法的区别?
final修饰变量、修饰方法、修饰类。

finally在异常处理中使用。

表示不管有没有异常都会执行这里。

通常用来释放资源。

finaliize,垃圾回收这个对象前执行的方法。

24.String是不可变字符? 从源代码分析,为什么?
内部有一个char数组。

这个数组使用了final修饰。

意味着只能初始化一次。

25.StringBuffer和StringBuilder的区别?
StringBuffer可变字符序列,线程安全
StringBuilder可变字符序列。

线程不安全。

一般用它。

26.java中,类可以多继承吗?接口可以多继承吗?
类不可以多继承。

接口可以多继承。

27.数组是对象吗?
是。

28.数组中元素默认初始化的规则是什么?
跟成员变量的规则是一样的。

引用类型为null。

数值:0 布尔:false
29.数组的长度是固定的吗?
是的。

30.Collection、List和Set接口有什么联系?
Collection是List和Set的父接口。

31.list和set接口的区别是?
List:有序、可重复。

Set:无序、不可重复。

32.Collection和Collections的区别?
Collection接口。

Collections是一个针对Collection提供的工具类。

33.Vector、ArrayList的区别是?
Vector线程安全。

ArrayList线程不安全。

34.HashMap和HashTable的区别是?
HashTable线程安全,HashMap线程不安全。

35.两个对象hashcode()方法返回值相同,那么调用equals方法一定为true吗?
从规范上讲,要。

36.AWT、swing是什么关系? swing有什么优势?
37.GUI编程中,有哪些常用的布局管理器?
Flow、Border、Card、Grid等
38.如何实现序列化?
实现Serielizable。

他是一个空接口。

39.要把一个字节流对象转化成字符流对象,需要用到什么类?
InputStreamReader,OutputStreamWriter
40.进程和线程的区别是?
进程是一个独立运行的程序,拥有独立的内存空间、代码。

一个进程中可以包含多个线程。

多个线程共享同一块空间和代码。

41.写出定义线程类的两种常见方式?
继承Thread、实现Runnable接口
42.说说,Runnable接口和Thread的区别?
Thread也是实现了Runnalbe接口。

43.synchronized如何使用?
如果直接修饰方法,意味着线程要调用这个方法必须要有这个方法所在的对象的锁。

如果修饰了方法块,上面可以声明需要拥有的对象锁。

这样的话,线程只有拥有指定对象的锁才能运行这个代码块。

不然,就等待。

44.说说:wait(), notify(), sleep()方法作用?
wait(),线程进入阻塞状态。

释放持有的对象锁。

sleep(),线程进入阻塞状态。

但是,不是放持有的对象锁。

notify(),唤醒等待池中的线程
45.java中,反射机制的基本原理?Class类得作用是?
反射机制是java动态性重要手段。

当我们加载完毕一个类的时候,会同时创建一个Class类型的对象,Class类型的对象它包含了这个类的完整的数据结构。

就像一个镜子一样,通过这个镜子我们可以得到对应类的所有信息。

而且,Class类还包含了如何操作属性、构造器、方法的接口。

这样的话,我们就可以通过反射机制动态的创建对象、动态的调用对象的方法、动态的操作属性。

46.通过Class类,可以访问和设置一个类得私有方法、私有成员变量吗?如果能,怎么做?
可以直接操作私有方法。

可以操作私有成员变量。

通过setAccessible(true)。

47.通讯方式中,TCP和UDP的区别是?
TCP:transfer control protocol 传输控制协议。

面向连接的、安全的。

效率不高的。

我们一般用的Socket就是TCP连接。

我们访问网站也是TCP/IP协议,建立连接。

UDP: User Datagram Protocol 用户数据包协议。

无连接、不安全、效率高。

48.内部类??
java手写编程题目1.写出冒泡排序代码
2.写出二分法查找代码
3.写出一个双向链表类代码
4.写出一个二叉树代码
5.编写一个生产者和消费者的程序
6.定义一个多线程类,并写出如何终止线程的执行,并启动他。

7.写出一个文件复制的程序
8.“abcdefg”这个字符串,如何将它反转过来?
两种方式:
XML问题
1.xml解析的两种基本方式:DOM和SAX的区别是?
DOM: document object model。

一次加载,随机操作文档。

SAX: simple api for xml 。

按照流的方式加载。

2.平时工作中,xml解析你是使用什么?
JDOM
DOM4J
3.dtd、schema干嘛的?
dtd: document type definition 文档类型定义。

定义xml文档的结构。

schema的作用和dtd是一样的。

只不过,它本身就是xml文档。

更有优势。

servlet和jsp问题
1.说说b/s和c/s架构.
c/s:像qq。

b/s: 实际上是特殊的c/s.客户端是标准的浏览器。

2.http请求中,get和post的区别是?
get:通过请求行传参。

信息量小、不安全。

post: 通过请求实体传参。

信息量大、安全。

3.你如何理解servlet? 如何定义servlet类?
servlet运行于服务器端,为客户端提供相关的服务。

servlet运行于servlet容器中。

servlet调用不能直接调用,需要通过请求服务器,服务器调用servlet。

servlet本质还是一个java类。

servlet是给客户端提供运算服务。

当有一个客户端连接到服务器上时,服务器会创建一个新的线程提供服务,这个线程调用相关的servlet。

servlet是单例模式,相关线程共享一个servlet对象。

extends HttpServlet即可。

重写service方法。

4.servlet的生命周期是什么?
加载
初始化 (调用init())
执行(service())
销毁(destroy())
当有一个客户端连接到服务器上时,服务器会创建一个新的线程提供服务,这个线程调用相关的servlet。

servlet是单例模式,相关线程共享一个servlet对象。

5.请求转发forward和重定向sendredirect的区别?他们两个内部实现机制?
a.请求转发。

客户端发出一个请求A,服务器调用了ServletA,servletA直接调转到
ServletB。

然后,服务器直接将serlvetB的执行返回。

客户端并不知道服务器内部跳转。

所以,地址栏不发生改变。

b.重定向。

客户端发出一个请求A,服务器调用了命令:response.sendRedirect(“b”)。

这个命令的本质是:写了一个响应头Location,这个Location中包含了重定向的url。

客户端收到Location响应头后,会根据这个Location指定的url重新发送请求。

也就是说,我们整个过程请求了两次。

6.HttpservletRequest对象、HttpServietResponse对象的作用是什么?
这两个对象都是服务器创建,创建好后传给了servlet。

request对象包含了客户端的信息。

response包含了servlet要写给客户端的信息。

7.浏览器发送给服务器的是http请求,是谁将这些请求内容封装成HttpServletRequest
对象? 我们自己能创建HttpServletRequest对象吗?
不能。

8.过滤器的作用是什么?
过滤一类请求。

实现统一的行为控制。

比如:中文过滤器、struts2过滤器。

9.监听器的作用是什么?
监听request、session、application对象的状态的变化。

比如:统计一个登陆的人数。

10.说说,session是如何保存请求状态的?以及session的跟踪机制?
保存会话的状态有两种方式:session和cookie。

session是服务器端保存信息。

cookie 是在客户端保存信息。

本身,session的跟踪机制就要依赖于cookie。

跟踪机制就是用来确定一个问题:哪个会话对应哪个session对象。

在服务器端我们给每个session对象一个独一无二的ID。

然后呢,把这个ID通过cookie 写给了客户端。

这个cookie没有设定有效期,只在客户端内存中存放。

客户端只要浏览器不关闭,这个cookie就一直有效。

客户端访问我们服务器时就会携带这个有效的cookie。

服务器通过cookie中包含的session对象的id,从而找到对应的session对象。

session的销毁两种方式:
1.调用invalidate方法
2.设置最大空闲时间。

11.jsp和servlet的优缺点?
serlvet优缺点:业务逻辑方便。

但是,数据展现很麻烦。

jsp优缺点:写业务逻辑麻烦。

但是,数据展现方便。

我们开发中,一般jsp做显示,servlet做逻辑。

12.jsp也是java类吗?jsp也是servlet吗?
jsp就是sevlet。

servlet就是java类。

13.jsp的内置对象有哪些?
page,PageContext、request、response、session、application、exception、out、
config
14.作用域:pageContext、request、session、application的区别是什么?
pageContext:仅本页面有效
request:同一个请求
session:同一个会话
application:同一个项目
15.jsp中,动态导入和静态导入的区别是?
静态导入:jsp引擎生成java代码时,就整合到一起。

就是:源码级的导入。

动态导入:jsp引擎还是生成两个java类。

相当于类的调用。

16.编程中,如果出现汉字乱码?你处理问题的思路是什么?
确定一下问题出在什么?客户端、服务器、数据库。

汉字的编码和解码是同一个字符集。

17.什么是MVC模式?
Model 数据 javabean
View 视图:展现数据 jsp freemarker
Control 控制器:视图之间的跳转、以及跟Model的交互 servlet. struts中的action、springmvc的控制器
18.说说常见的服务器都有哪些?(tomcat, weblogic等)
apache
tomcat
网站的话:apache+若干台tomcat
weblogic
websphere
jboss
struts面试问题
1.什么是MVC模式?
Model 数据 javabean
View 视图:展现数据 jsp freemarker
Control 控制器:视图之间的跳转、以及跟Model的交互 servlet. struts中的action、springmvc的控制器
2.常见的MVC框架有哪些? 如下这些MVC框架,运行效率哪个最慢:
a)jsp+servlet实现(不能算框架)
b)struts1
c)struts2
d)spring mvc
e)jsf
struts2运行效率最慢。

jsp+servlet>struts1, spring mvc>JSF >>struts2
3.struts2开发效率较高。

但是,struts2运行效率相对较低。

是由什么造成的?如何解决?
主要问题:OGNL和值栈。

标签。

把展现层替换成:Freemarker
4.struts1和struts2的区别有哪些?
1.action的区别:
a)struts1的action是单例。

所以呢,我们要设计成无状态的类。

b)struts2的action不是单例,每个线程都有创建独立的action对象。

因此,
我们可以随意增加属性。

2.表单数据的处理:
a)struts1中我们要单独定义ActionForm类。

通过ActionForm来自动封装表单
的数据。

b)struts2中,我们通过参数拦截器,可以将表单数据自动的映射到action中的
名字相同的属性或者对应的javabean。

属性驱动和模型驱动。

5.你认为,struts2最核心的地方是什么?
拦截器!struts2大部分的功能都是通过拦截器实现的。

struts2的拦截器也是AOP的一种实现。

AOP中内部是使用了动态代理。

hibernate、spring使用的是cglib动态生成代理类。

struts2使用的jdk提供的类。

6.struts2中一个action类的实现方式有哪些? 一个普通的java类能作为action吗?
三种。

一个普通类就可以作为action。

或者实现Action接口。

或者继承ActionSupport 类。

7.使用struts2,如何防止表单的重复提交?
第一种方式:token拦截器。

第二种方式:跳转提示页面的方式,直接使用重定向。

8.说说struts2的内部实现机制?
9.struts2中OGNL表达式比传统的EL表达式有哪些优点?
可以调用对象的普通方法、类的静态方法、可以对集合做一些复杂的操作、还可以赋值。

10.struts2中,拦截器和servlet中我们学习的过滤器有什么区别? 内部实现机制有什么
区别?
拦截器:是struts2范围之内。

只能拦截action。

内部机制是动态代理(模式)
过滤器:是服务器范围之内。

什么都可以拦。

内部机制是函数的回调。

hibernate面试题
1.什么是ORM?
ORM: Object relationship mapping 对象关系映射。

是因为java编程是面向对象,但是我们存储数据时,使用的数据库都是面向关系。

这就存在一个不匹配的情况。

ORM 框架就是帮我们将面向对象的数据和面向关系的数据实现自动的互相转化。

2.hibernate的基本实现思想是?
同上题。

3.hibernate中,session是怎么实现数据库操作的?
实际上,hibernate使用了ORM得基本思想,对JDBC做了封装。

我们通过session 对象去查询数据库。

实际上,session对象内部持有了Connection对象的引用,最终还是通过Connection对象来实现对数据库的操作。

但是,hibernate对Connection的管理做了优化。

使用了连接池。

这样的话,就避免了频繁的创建Connection对象,提高了效率。

session除了持有Connection对象的引用。

还在内部维护了一个Map,只有在Map 中存放的对象,session才会进行管理。

这个map实际上也就是我们说的一级缓存。

4.hibernate中,实体对象的状态有哪些?
瞬时态:跟session无关,跟数据库无关。

持久态:跟session有关,跟数据库有关。

处于持久态的对象,状态做了更新,hibernate 会自动的同步到数据库。

游离态/托管态:跟session无关,跟数据库有关。

5.hibernate中,我们能使用普通的SQL查询吗? 怎么做?
能。

创建SQLQuery即可。

6.如何使用hibernate进行分页查询?
setMaxResult, setFirstResult
7.你认为,hibernate有哪些优势? 有哪些劣势?
优势:
1.是一个优秀的ORM框架。

让我们可以以更加面向对象的方式编程。

写一写逻辑的时
候更加方便。

2.效率也较高。

内部有缓存。

一级缓存、二级缓存、查询缓存。

3.屏蔽了底层数据库的差异。

劣势:
1.多表查询效率较低。

可以自己写原生查询。

2.数据量大的时候,效率较低。

8.实际工作中,如何选用:Hibernate、Ibatis框架?
管理系统:逻辑较复杂、可以采用hibernate。

网站系统:ibatis。

9.get和load方法的区别是什么?
get:直接加载对象。

如果不存在,则返回null
load:懒加载。

返回一个假的代理对象。

如果真的不存在,则抛出异常。

他们两个方法都会访问:一级缓存、二级缓存(如果开得话)
10.说出几种常见的主键生成方式?
a)native, identify, sequence, uuid, hilo
11.手写出一段典型的hibernate插入数据代码
12.cascade属性,指的是什么意思?
级联。

对对象做的操作,同样对这个对象属性也做一样的操作。

13.reverse属性在一对多配置中,有什么作用?
false:一方和多方都可以维护外键的值。

true:只有多方维护外键的值。

14.说说,hibernate中,一级缓存、二级缓存、查询缓存。

一级缓存:session级别的。

命中率不高。

主要是管理持久态的对象。

二级缓存:sessionfactory级别。

可以被所有的session共享。

默认不开。

要开需要增加配置。

查询缓存:依赖于二级缓存。

一级缓存、二级缓存:都是采用map结构。

key是通过类名+记录的ID来表示。

查询缓存:也是一个map。

key就是对应查询语句。

15.哪些数据适合缓存?
频繁访问的。

修改不频繁的。

16.hibernate中,对象的继承关系有哪些实现方式?
三种。

单表、union-class,joined-class。

17.乐观锁和悲观锁的区别?
乐观锁:认为冲突不多见。

即使有冲突,抛异常重来。

通过增加version字段来实现。

这个原理就跟我们CVS版本控制软件一样。

悲观锁:认为冲突很多。

通过给记录增加锁。

spring面试问题
1.说说spring的核心是什么?
IOC和AOP.
2.IOC和DI是一回事吗?
IOC: Inverse Of Control 控制反转
DI: Dependency injection 依赖注入
是一回事。

只不过说的不同的方面。

IOC讲的控制关系的转换。

以前属性的赋值是由对象自己完成。

现在是交给了外部的spring来通过反射机制来赋值。

通过set方法注入、或者通过构造器注入、也可以通过普通方法注入(这时候就需要定义接口)
3.依赖注入的三种方式都是什么? 一般常用哪个方式?
setter注入:通过反射调用setter方法。

(我们一般用它)
构造器注入:通过反射调用构造器
接口注入:通过反射调用接口中定义的普通方法
4.spring的aop是否使用了aspectJ框架?
是。

5.说说,AOP是什么? AOP有什么好处? 动态代理怎么理解?
aop:aspect oriented programming。

面向切面编程。

aop的核心实现是动态代理。

平时常见的是使用JDK提供的InnvocationHandle实现,还可以使用cglib来实现。

struts2使用了JDK提供的动态代理实现,hibernate和spring使用了cglib提供的实现。

动态代理实际上的意思是:动态生成代理类。

这样,我们就可以控制代理类的代码,代理类的方法都会去调用InnvocationHandle接口中的invoke方法。

这样的话,我只要一调用代理对象的方法,就会统一跑到invoke方法。

然后,我们就可以在invoke方法对所有的方法做统一的预处理、后期处理。

6.请写出SSH框架整合的步骤
整合hibernate
a)增加相关jar包
b)增加spring配置文件:applicationContext.xml,文件内容如下:
i.配置组件扫描。

让spring管理basePackage和他的子包下所有的类。

ii.配置dataSource数据源
iii.配置sessionFactory
iv.配置事务管理(事务增加在service层!)
v.配置HibernateTemplate
整合struts
c)导入jar包
d)配置web.xml
i.配置<context-param>指定spring配置文件的路径和名字!
ii.配置opensessionInview过滤器(一定要配置在struts过滤器之前)
iii.配置struts过滤器。

相关文档
最新文档