Java面试宝典总结

Java 基础:
1.public static void main(String[] args)表示程序的入口,JVM在启动时会按照上述签名规则查
找(必须有public,static,void和字符串数组作为方法参数)main方法可以用final,synchronized
修饰,但不可以用abstract。

2.初始化顺序:
先初始化变量后调用构造方法:(1)静态变量先于非静态变量(2)父类先于子类(3)按照定义顺序进行
父类静态变量-父类静态代码块-子类静态变量-子类代码块-父类非静态变量-父类构造方法
-子类非静态变量-子类构造方法

3.构造方法:
构造方法名必须与类具有相同名
可以有多个构造方法,若没有,编译器会提供一个默认的
不能被继承,因此不能被覆盖

4.有些接口没有方法,比如Cloneable,Serializable,起标识作用可以使用instanceof来判断是否是
某一个类型

5.clone()作用:
Object类中提供了一个clone()方法,返回一个新的对象而不是一个引用
使用:实现Cloneable接口(只是标识),覆盖object的clone方法,调用super.clone(),把获得浅
拷贝,赋给引用。
浅拷贝:如果要复制的类只有基本变量则可以使用,若包含对其他对象的引用,则需要对类中其他非基本
类型变量调用clone()方法

6.反射:(1)得到一个对象所属的类
(2)获取一个一个类的所有成员和方法
(3)运行时对类进行装载,创建对象
获得一个class的方法:class.forName(),类名.class,示例.getClass()

7.面向对象的特征
(1)抽象:不考虑一个事物的具体状态,提取出一类事物的共性
(2)继承:对类的重用与扩展,从现有类中派生出一个新的类
(3)封装:对每个类自身的数据进行保护
(4)多态:允许不同类的对象对同一消息作出响应

8.单继承好处:
(1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断
应该使用哪个父类的变量
(2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧
义,无法判断应该调用哪个父类的方法。
在接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也
就摒弃了多继承的缺点。
对于一个类实现多个接口的情况,因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候
始终只会调用实现类的方法(不存在歧义),因此不存在 多继承的第二个缺点;而又因为接口只有静态的常
量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态
变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。

9.组合与继承的区别:
组合和继承都允许在新的类中设置子对象,组合是显式的,继承是隐式的

10.多态实现的机制:表示同一个操作作用在不同对象上会有不同的语义
(1)方法的重载:指同一个类中多个同名的方法,根据方法签名不同,在编译时就可以知道调用哪个方法
(2)方法的覆盖:基类或接口的引用可以指向子类或实现类的对象,程序会调用的方法会在运行时动态绑定

11.获取类名:Java语言提供获取类名的方法getClass().getName()
Object类中getClass方法被定义为final和native的,子类不能覆盖

12.this用来指向当前实例对象,用类区分方法形参和成员变量

13.assert作为一种软件调试的方法,提供了一种在代码中进行正确性检查的机制

14.不可变类:创建出这个类的实例后就不可更改它的值了,所有基本类的包装类和String类
字符串的字面量保存在在JVM中的常量区,如多个String对象内容相同则会指向一个常量去中的字面量
在创建一个String对象,先检查常量区中是否已经存在一个相同的字符串被定义,如存在就直接引用

15.Object类中的hashCode()返回的值是对象在内存中的地址的转换成的int值

16.异常处理:
finally部分一定会在return之前执行,如果在finally中也有return则会覆盖其他部分的return内容
两种finally中内容不执行
(1)try之前出现异常程序退出
(2)在try之中强制退出,System.exit(0)

17.异常:
两类错误异常Error,Exception
Error是属于JVM层次的错误,会导致程序终止,比如OutOfMemoryError和ThreadDeath
Exception表示可以恢复的异常,编译器可以捕捉到,包含两类检查异常和运行时异常
(1)检查异常:比如IO异常和Sql异常,这种异常发生在编译阶段,Java编译器强制捕获此异常,可以
放入try块中,并会不会导致后续程序无法执行
(2)运行时异常:出现这种异常会由JVM处理,如NullPointerException,ArrayIndexOfBounds
Exception。出现异常时回一层一层向上抛出,最终导致程序退出或线程终止

18.Java socket:
网路上的两个程序可以通过一个通信连接来实现数据交换,可以分为面向连接的Socket,使用TCP和面向无
连接的Socket,使用UDP
TCP过程:
(1)Server监听某个端口,是否有连接请求
(2)客户端向Server发出连接请求
(3)Server向客户端发出Accept接受消息,就建立好了连接
(4)交换数据

19.Java NIO

20.Java内存泄露:
(1)静态集合类,例如HashMap,如果这些容器是静态的,那么他们的生命周期就和应用是一致的,那容器中
的对象就没办法释放
(2)使用连接后不关闭,如数据库连接

21.实现Java多线程的3中方法
(1)继承Thread类,重写run()
Thread本身就实现了Runnable接口,start()方法是native方法他将启动一个线程并执行run()方法
(2)实现Runnable接口
(3)实现Callable接口,与Runnable相比,可以有返回值并且可以抛出异常,run不行
start()来启动一个线程,此时线程处于就绪状态,其执行由系统来调度,run()表示实际完成的操作

22.Lock
(1)lock()获取到锁就返回,负责等待
(2)tryLock()尝试一下,获取不到就返回false
(3)tryLock(long time)等待一段时间,获取不到就返回false
(4)lockInterruptibly()获取不到就等待,可以响应中断

23.sleep与wait区别:
(1)原理不同:sleep是Thread类的静态方法,是线程用来控制自身流程的。wait是Object类的方法,用
于进程间通信
(2)对锁的处理方式不同:sleep不会释放锁,wait会暂时释放对象锁
(3)使用区域不同:sleep可以在任何地方使用,wait必须在同步区中

24.synchronized与lock区别:
(1)用法不一样:synchronized可以用于代码块和方法,lock需要显示地指定起始位置
(2)lock功能更多,可以在使用非阻塞的方式去获取锁

25.通过JDBC访问数据库:
(1)加载JDBC驱动器:将JDBC驱动复制到WEB-INF/lib
(2)加载JDBC驱动,并将其注册到DriverManager中
(3)获得Connection连接
(4)建立PreparedStatement对象
(5)执行SQL
(6)访问ResultSet
(7)关闭连接(因为Jdbc连接池中连接数量有限,所以非常重要)

26.Statement,PreparedStatement与CallableStatement有什么区别:
(1)Statement用于执行不带参数的sql,每次执行sql语句时都要编译
(2)PreparedStatement执行带参数的sql,可以进行预编译,放到命令缓存区,防止sql注入
(3)CallableStatement可以使用数据库中存储过程

27.JDBC与Hibernate区别:
Hibernate是对JDBC的封装,采用配置文件的方式将数据库的连接参数写入xml文件中。
Hibernate是一个持久层框架,将数据库中表的信息映射到xml文件中,再从XML文件中映射到相应的类中。

28.Servlet:采用Java语言编写的服务器端程序,运行于web服务器中servlet容器中。
执行过程:
(1)用户向Servlet发起请求
(2)Web服务器接到请求后会把请求交给容器,容器发现这是对servlet的请求,又会交给servlet处理
(3)找到对应的servlet创建新的线程
(4)调用service处理
(5)将结果组装好返回给客户端

29.servlet生命周期:init、service、destroy

30.JSP与Servlet区别:
(1)Servlet的缺点是必须把给用户的响应视图组装成一个很长的Html文本,jsp解决了这个问题
(2)Servlet是Java代码中嵌套Html,Jsp是在Html代码中嵌套Java
(3)Servlet没有内置对象,必须通过HttpServletRequest,HttpServletResponse,HttpServlet
获得

31.MVC模型:低耦合行,可扩展,便于维护
(1)Model层:Service类和Dao类处理数据逻辑和存储数据
(2)View层:JSP负责展示界面和响应用户指令
(3)Controller:Servlet负责决定是哪个模型层类处理事件,并且决定返回哪个页面

32.Servlet的Forward和Redirect区别:
forward是服务器内部的跳转,用于转到不同的servlet
redirect是客户端的跳转,客户端浏览器会现实跳转后的地址

33.JSP内置对象
(1)request:客户端的请求,可以用于获取参数
(2)response
(3)pageContext:可以访问当前页面所有对象
(4)session:HttpSession实例,表示从客户端与服务器端建立连接到关闭浏览器
(5)application:属于web应用,可以存放全局变量
(6)out:JspWriter实例,可以在客户端浏览器输出

34.JSP动作:
(1)jsp:include 用于引入一个页面,运行时动态引入;<@ include指令,在编译时引入,
(2)jsp:useBean,用类实例化一个JavaBean对象
(3)jsp:set/getProperty为javabean对象设置和读取属性

35.Ajax:异步javascript和xml
在不刷新页面的情况下通过与服务器进行少量的数据交互来提高页面的交互性,减少响应时间
Ajax是客户端技术,核心是JavaScript对象XmlHttpRequest,是一种异步请求技术,使得JavaScript
向服务器提出请求并处理响应,而不阻塞用户

36.cookie和session区别:
cookie和session都是用来跟踪浏览器用户身份的会话方式,但cookie数据保存在客户端,session数据
保存在服务器端。session比cookie能存储更多的内容,cookie和session都可以存储用户信息,比如用
户名和密码,但存储在session中更安全,cookie中可以存储sessionId字段。

37.数据库连接池
对数据库连接管理会影响整个应用的性能
(1)建立数据库连接是耗时的操作,如果每次用户请求都需要建立数据库连接,则会影响用户体验
(2)数据库连接数量有限,如果使用完后忘记释放连接酒会造成数据库连接资源的耗尽
数据库连接池负责分配、管理和释放数据库连接,允许应用程序重复使用一个现有的数据库连接。
在服务器启动时,会在连接池中创建一定数量的数据库连接,当用户需要使用时,从池中拿一个,使用完再放
回。当池中没有可用的时候,会根据配置参数再创建连接,当连接池中某一连接长时间(超过最大空闲时间)未
使用则连接池负责关闭连接释放资源。

时间: 2024-12-29 11:57:54

Java面试宝典总结的相关文章

Java面试宝典

http://www.cnblogs.com/bluestorm/p/6429894.html Java面试宝典 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或

Java面试宝典-2017

Java面试宝典2017版 一. Java基础部分...................................................................................................... 7 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?..... 7 2.Java有没有goto?.......................................................

java面试宝典(蓝桥学院)

Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要半个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这套面试宝典之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了

Java面试宝典2013版(超长版)

一. Java基础部分......................................................................................................2 1.一个".java"源文件里能否够包含多个类(不是内部类)?有什么限制?.....2 2.Java有没有goto?........................................................................

【转】Java面试宝典2015版(绝对值得收藏超长版)(一)

(转自:http://mp.weixin.qq.com/s?__biz=MjM5MTM0NjQ2MQ==&mid=206619070&idx=1&sn=fcb21001d44291a6a4ca61b89bb33d5e#rd) 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需

Java面试宝典2014版

一. Java基础部分......................................................................................................2 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?.....2 2.Java有没有goto?.......................................................................

Java面试宝典2015版

这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要一个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这套面试宝典之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要

Java面试宝典(一)

这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要一个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这套面试宝典之日起,就要坚持在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了. 答题时,先答是什么,再答有什么作用和要

java面试宝典学习笔记(一)

java基础学习(面试宝典): 1.java中"=="和equals方法究竟有什么区别? (1)==操作符专门用来比较两个变量的值是否相等,也即是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符.     如果一个变量指向的数据是对象类型的,那么,这时候涉及到两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Object obj = new Object():变量obj是一个内存,new Object()是

Java面试宝典2017

JAVA面试.笔试题(2017版)                 欲想成功,必须用功!   目录 一.                  HTML&CSS部分.......................................................................................... 9 1.HTML中定义表格的宽度用80px和80%的区别是什么?...................................... 9 2.CSS样