曾经面试时踩过的坑
一、Java数据类型分为基本类型和引用类型
1、八种基本类型
(一)、4种整型
byte 1字节 -128——127
short 2 字节 -32,768 —— 32,767
int 4 字节 -2,147,483,648 ——2,147,483,647(超过20亿)
long 8 字节 -9,223,372,036,854,775,808——9,223,372,036854,775,807
注释:java中所有的数据类所占据的字节数量与平台无关,java也没有任何无符号类型
(二)、 2种浮点类型
float 4 字节 32位IEEE 754单精度(有效位数 6 – 7位)
double 8 字节 64位IEEE 754双精度(有效位数15位)
(三)、1种Unicode编码的字符单元
char 2 字节 整个Unicode字符集
(四)、1种真值类型
boolean 1 位 True或者false
2、三种引用类型
类class
接口interface
数组array
3、类类型
String是类类型,不是基本类型。
二、面向对象的四个基本特征
封装:最常见的是把属性私有化封装在一个类里面,只能通过方法去访问
继承:子类继承父类,从而继承了父类的方法和属性
抽象:比如一个英雄类,抽象出了name,hp这些属性,使得开发过程中更加易于理解
多态:多态分操作符的多态和类的多态。 类的多态指父类引用指向子类对象,并且有继承,有重写。
三、类型区别
(一)、int 和 Integer 有什么区别?
int 是基本类型32位长度的整数
Integer 是类类型,是int的封装类
int和Integer之间可以通过自动装箱、自动拆箱互相转换
(二)、String 和StringBuffer的区别?
String是immutable的,其内容一旦创建好之后,就不可以发生改变。
StringBuffer 是可以变长的,内容也可以发生改变
改变的原理是StringBuffer内部采用了字符数组存放数据,在需要增加 长度的时候,创建新的数组,并且把原来的数据复制到新的数组这样的办法来实现。
四、垃圾回收的优点和原理。并考虑2种回收机制
与C语言开发人员需要手段进行内存资源的释放不同,Java提供垃圾回收机制,自动进行GC,将开发人员冲容易犯错的内存资源管理中解放出来。
原理:当某个一个对象,没有任何引用指向它的时候,那么它就满足垃圾回收的条件,在适当的时候,JVM虚拟机进行GC将其回收,释放空间,以供后续再利用。
两种常见的回收机制:
1. 定时回收
每隔30分钟进行一次回收,这种机制的弊端是如果垃圾产生的比较快,有可能30分钟之内垃圾已经把内存占用光了,导致性能变慢
2. 当垃圾占到某个百分比的时候,进行回收
比如,当垃圾占到70%的时候,进行回收。 这种机制的弊端是,如果垃圾产生的频率很快,那么JVM就必须高频率的进行垃圾回收。 而在垃圾回收的过程中, JVM会停顿下来,只做垃圾回收,而影响业务功能的正常运行。
一般说来 JVM会采用两种机制结合的方式进行垃圾回收。
五、什么是java序列化,如何实现java序列化?
序列化指的是把一个Java对象,通过某种介质进行传输,比如Socket输入输出流,或者保存在一个文件里
实现java序列化的手段是让该类实现接口 Serializable,这个接口是一个标识性接口
没有任何方法,仅仅用于表示该类可以序列化。
六、多线程有几种实现方法,都是什么?
通常来讲,Java 创建一个线程有三种方式
1. 继承一个Thread类
2. 实现Runnable接口
3. 匿名内部类
七、数据连接池的工作机制是什么?
数据库连接池原理:
因为创建连接和关闭连接的行为是非常耗时的,会显著降低软件的性能表现
解决办法就是先创建n条数据库连接Connection,循环使用,但是不进行关闭
这样再执行SQL语句,就不需要额外创建连接了,直接使用现成的连接就可以了
从而节约了创建连接和关闭连接的时间开销。
八、JSP的四个作用域和九大内置对象
名称 | 对象 | 类型 | 作用域 |
---|---|---|---|
request | 请求对象 | 类型 javax.servlet.ServletRequest | 作用域 Request |
response | 响应对象 | 类型 javax.servlet.SrvletResponse | 作用域 Page |
pageContext | 页面上下文对象 | 类型 javax.servlet.jsp.PageContext | 作用域 Page |
session | 会话对象 | 类型 javax.servlet.http.HttpSession | 作用域 Session |
application | 应用程序对象 | 类型 javax.servlet.ServletContext | 作用域 Application |
out | 输出对象 | 类型 javax.servlet.jsp.JspWriter | 作用域 Page |
config | 配置对象 | 类型 javax.servlet.ServletConfig | 作用域 Page |
page | 页面对象 | 类型 javax.lang.Object | 作用域 Page |
exception | 例外对象 | 类型 javax.lang.Throwable | 作用域 Page |
九、servlet的生命周期
一个Servlet的生命周期由 实例化,初始化,提供服务,销毁,被回收几个步骤组成
生命周期(1)加载并实例化
(2)初始化,调用init()方法
(3)服务,调用service()方法
(4)销毁,调用destroy()方法
1、容器启动的时候,会加载servlet的class,并new出这个对象
2、当用户请求这个servlet的时候,容器会调用init方法初始化这个servlet
这也是整个生命周期中只会调用一次的方法,
3、会调用service方法,由这个方法调用doGet或doPost方法来响应用户,
4、容器在可用资源紧张或是长期没有对Servlet发出请求的情况下,会销毁这个servlet。
十、JDBC链接数据库的步骤
1.加载驱动类;
2.与数据库建立连接;
3.执行SQL语句
4.处理结果集
5.关闭连接
十一、数据库连接池
优势:
资源重用、更快的系统响应速度、新的资源分配手段、统一的连接管理,避免数据库连接泄漏
1.dbcp
dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
有所下降,此外不提供连接池监控
2.c3p0
c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:c3p0.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,
此外不提供连接池监控。
3.proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:proxool.xml。
网友评论