概述
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现, 重载Overloading是一个类中多态性的一种表现。
12 sleep() 和 wait() 有什么差别?
sleep是线程类(Thread)的方法,导致此线程暂停运行指定时间。给运行机会给其它线程。可是监控状态依旧保持,到时后会自己主动恢复。
调用 sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁。进入等待此对象的等待锁定池,仅仅有针对此对 象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
13 GC是什么?为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员easy出现故障的地方。忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,提供的GC功能能够 自己主动监測对象是否超过作用域从而达到自己主动回收内存的目的,语言没有提供释放已分配内存的显示操作方法。
14 Error与Exception有什么差别?
Error表示系统级的错误和程序不必处理的异常,
Exception表示须要捕捉或者须要程序进行处理的异常。
15 抽象类和接口的区别
java 提供和实现抽象类和接口的实现由共同点
(1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
(2)abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
(3)在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。
(4)abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"has-a"关系。
(5)实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。抽象类中可以有非抽象方法。接口中则不能有实现方法。
(6)接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以在子类中重新赋值。
16 java实现多肽的必要条件
继承,重写,向上转型。
17 jvm是如何工作的
先将.java文件编译成.class文件,.class文件就是字节码文件然后用它的解释器来加载字节码
18 作用域public ,private protected,default 的区别
public 的范围是 当前类,同包,子类,其他包
private的范围是 当前类
protected的范围是当前类,同包,子类
default的范围是当前类 同包
19 java中类方法和实例方法的区别
Java中类的方法分为类方法(用static修饰,也叫静态方法)和实例方法(没有用static修饰,也叫非静态方法)
*1 类方法属于整个类,而不属于某个对象
*2 类方法只能访问类成员变量,不能访问实例变量,而实例方法都可以访问
*3 类方法不能覆盖,实例方法可以覆盖
(还有区别就不写了,详细的有兴趣的可以参考博客)
20 object类的常用方法
tostring(),hashcode(),finalized(),equals(),clone()等
21 final, finally, finalize的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
22 List, Set, Map是否继承自Collection接口List,Set是继承自Collection,Map不是
23 java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类字节流,字符流。字节流继承与inputStream/outputStream,字符流继承于inputStreamReader/outputSteamWriter。
24 Collection 和 Collections的区别Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
25 说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized思路方法(线程安全) ,通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项前后项即可,所以插入速度较快
26 Switch能否用string做参数?
在 java7 之前, switch 只能支持byte,short,char,int 或者其对应的封装类以及 Enum 类型。在java7中,String 支持被加上了
27 equals与==的区别:
==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相同
28 JAVA多态的实现原理
a.抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
b.实现的原理是动态绑定,程序调用的方法在运行期才动态绑定,追溯源码可以发现,JVM 通过参数的自动转型来找到合适的办法
29 heap和stack的区别
二者都是操作系统 heap 是一种线性集合其添加和删除的操作都是在同一段时间完成按照后进先出的原则,stack是heap的一个组成元素
30 java的内存管理机制
可以从静态存储区,栈区和堆区 三个方面简单的描述
静态存储区:内存在程序编译时就分配好
栈区:各种原始数据类型的局部的变量都在栈上创建
堆区:对象都是在堆区创建的,等等
31 判断数组是null还是空
输出array.length的值,如果是0则为空,如果为空就抛出空指针异常
32 创建一个数组
随意写吧
int [] arr =new int[3];
或
int [] array = new int [] {1,2,3};
33 Integer 与int 的区别
int 是 java 提供的原始数据类型之一 ,java位每个原始类型提供了封装类,Integer是java为int提供的封装类,int默认值是0,Integer的默认值是null
34 了解java的数据类型
数据类型有:基本数据类型和引用数据类型
基本数据类型:数值型 ,字符型和布尔型
数值型:整数类型(byte,short,int,long)和浮点类型(float,double)
记住byte占一个字节范围-128~127,short占2个字节,int占4个字节,long占8个字节
字符型: char (占2个字节)
布尔型:boolean
引用数据类型:类,接口,数组
35 了解java面向对象的四个特性
封装,继承,抽象,多态。
36 了解标识符的命名规则
第一位是字符,下划线,或者是美元符号,切记开头除了这三个之外都是错误的,尤其是开头是数字的,他们中间可以有数字,下划线,严格区分大小写,这个做选择题的时候可能会出。
37 Static Nested Class 和 Inner Class的不同
Static nested class(嵌套类)是将内部类声明为static。普通内部类对象隐式地保存了一个引用,指向创建它的外围类对象,不能有static数据和static字段。嵌套类意味着:1> 要创建嵌套类的对象,并不需要其外围类的对象;2>不能从嵌套类的对象中访问非静态的外围类的对象。
38 List, Set, Map是否继承自Collection接口?
List,Set是,Map不是
39 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
40 启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
41 构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
42 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问
(说一下你在项目中那些地方用到synchronized 这个很关键,工作经验了,好好想想0)
43 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
44 线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。
45 java中实现线程的方法
继承Thread类,实现Runable接口和 使用ExecutorService、Callable、Future实现有返回结果的多线程
46 什么是线程池? 为什么要使用它?
创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时 候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池
47 Java中的volatile 变量是什么?
volatile是一个特殊的修饰符,只有成员变量才能使用它。在Java并发程序缺少同步类的情况下,多线程对成员变量的操作对其它线程是透明的。volatile变量可以保证下一个读取操作会在前一个写操作之后发生
48 Java中如何停止一个线程?
用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。
49 一个线程运行时发生异常会怎样?
如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中 断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候JVM会使用Thread.getUncaughtExceptionHandler()来 查询线程的UncaughtExceptionHandler并将线程和异常作为参数传递给handler的uncaughtException()方法 进行处理。
50 如何判断一个线程是否在运行。
isAlive() 测试线程是否处于活动状态。
isInterrupted()测试线程是否已经中断。
51 事务管理(这个很重要)
对一系列的数据路操作进行统一的提交或者回流操作(eg:转账操作,更改两边账户的数据,)
在JDBC中通过commection对象经行事物管理,通过commit方法进行提交rollback方法进行回滚
Hibernate中通过Transation进行事物管理,处理方式与jdbc类型
Spring使用Transationmanger经行管理,通过spring注入完成此功能
特点:原子性,一致性,隔离性,持久性。
52 session 和cookie的区别
session 是一种服务器状态管理技术,将状态码写在服务器上面。
cookie 是一种客户端管理技术,将状态吗写在浏览器端。
session能保持更多的数据,相对安全数据类型丰富,由于session将所有状态写在服务器端所以服务器压力比较大。
cookie 保存数据比较少大约是4k,cookie 不安全只能保存字符串可以被用户禁止。
53 集合框架中泛型
泛型是java1.5的新特性,泛型的本质是参数化类型(也就是说所操作的数据类型被指定为一个参数,)
泛型的作用:编译时检查类型安全,并且强制类型转换是自动隐士的,提高代码的重用率。
54 java集合框架的基础接口有那些
collection 为集合层级的根接口,一个集合代表一个对象
set 是一个不能包含重复元素的集合
list 是有序集合可以包含重复元素
map 是一个将key 映射到value 的对象,一个map 布恩那个包含重复的key 每个key最多只能映射一个value
55 iterator 是什么
迭代器是一种设计模式,它是一个对象它可以遍历并选择序列中的对象(迭代器通常被称为"轻量级"对象)
56 java ++操作符是线程安全的吗
不是线程安全的,它涉及到多个指令如读取变量值增加
57 String 与 int 的转换
int转换string 用valueOf , String转换int 用parseInt
58 请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
59 JSP的内置对象及方法。
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例。
60 JSP的常用指令
< %@page language="java" contenType="text/html;charset=gb2312" session="true" buffer="64kb" autoFlush="true" isThreadSafe="true" info="text" errorPage="error.jsp" isErrorPage="true" isELIgnored="true" pageEncoding="gb2312" import="java.sql.*"%>
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)
< %@include file="filename"%>
< %@taglib prefix="c"uri="http://......"%>
61 什么情况下调用doGet()和doPost()?
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
62 servlet的生命周期
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。
63 如何现实servlet的单线程模式
< %@ page isThreadSafe="false"%>
64 页面间对象传递的方法
request,session,application,cookie等
65 JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
66 四种会话跟踪技术
会话作用域ServletsJSP 页面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
67 J2EE是技术还是平台还是框架?
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术
68 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。
区别主要答两点:
a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
b.逻辑操作不会产生短路
69 sleep 和 wait的区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。
sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
70 数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。String有length()这个方法。
71 常用的类,包,接口
常用的类:String ,Integer ,Class ,List ,HashMap (流都是的,例如BufferReader,BufferWriter,FilerReader,FileWirter)
常用的包:java.lang, java.io, java.util,java.sql,
常用的接口:List ,Map, Remote, Document
72 常见的运行异常
NullPointerException , ClassCastException ,ArrayIndexOutBoundsException
BufferOverflowException ,ArrayStoreException , SystemException,
73 a = a+ b 与 a += b 的区别
+= 隐式的将加操作结果强制类型转换为持有的结果类型
74 java的异常处理机制
当java程序违反了java的语法规则时java虚拟机就回将发生的错误表示一个异常
异常处理机制为:抛出异常和捕获异常
抛出用throws ,捕获用try catch finally
(详细的自己解释着2种异常)
75 throw 和throws有什么区别
throw关键字是用在程序中明确的抛出异常
throws表明方法不能处理的异常,每一个方法都必须要指定那些异常不能处理,它既是确保处理可能发生的异常,多个异常之间用逗号分隔。
76 java里的传引用和传值的区别
传引用:是指传递的事地址而不是值本身,
传值:则是传递的一份拷贝
77 while循环和 do循环有什么不同
while结构的循环在开始判断下一个迭代是否该继续,do/while结构在循环的结尾来判断是否将继续下一轮迭代。 do结构至少会执行一次循环体。
78 所有类的父类是
Object
79 谈谈你对变量的理解
变量是一块命名的内存区域,以便程序进行访问,变量用存储数据,随着程序的执行,存储的数据也可能跟着改变。
80 三元操作符(不要忘记虽然用到的很少)
boolean exp:value1? value2 (表达式为true返回value1为false返回value2)
------------------下面的一定要记住,随手就能写出来的那种,切记------------
81 写一个工厂模式的例子
首先要了解工厂模式扶着将大量接口类实例
举例子汽车---各种汽车,---驾驶功能---等等
public interface Car{//抽象产品角色
public void drive();
}
public class VW implements Car{
public void drive();
Sysetm.out.println("driving VW");
}
82 写一个单例模式
先明白它是确保java应用程序中一个类只有一个实例存在
Public class Singletion{
private singletion(){}
private static Singletion instance = new Singletion();
public static Singletion getInstance(){
returen instance;
}
}
83 写一个冒泡排序
一个双重for循环加个if语句
var arr = [1,2,3,4,5,6];
if(var i=0;i<arr.length;i++){
if(var j=0;j<arr.length-1;j++){
if (arr[j]>arr[j+1]){
var a;
a=arr[j];
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
alert(arr);
84 写一个二分法查找
int a[] ={1,2,3,4,5,6};
int search =2;//
int lower = 0;
int temp=a.length-1;
int index=-1;
while(index<=temp){
index =(lower+temp)/2
int currentValue==a[index];
if(currentValue==search){
break;
}else if(currentValue<search){
lower=index+1;
}else{
temp=index-1;
}
}
if(lower<=temp){
System.out.println(search+"在数组中第:"+(index+1)+"位")
}else{
System.out.println("里面没有这个元素");
}
85 写一个递归算法
例如 1,1 ,2,3,5,8,13,.....求n个数多少
public int V1(int i){
if(n==1||n==2){
return 1;
}else {
return V1(n-1) + V1(n-2);
}
}
86 javaScript 节点的操作,创建,添加,移除,复制
appendChild//添加
removeChild//移除
replaceChild//替换
insertChild//插入
87 spring
spring 是一个开源的JavaEE 开发框架 spring框架的核心功能可以应用在任何java程序中但对javaweb应用程序有更好的扩展性
其 轻量级 控制反转(ioc)实现松耦合, 依赖被注入到对象,而不是创建或者寻找对象
面向切面 将系统中非核心的业务提取出来经行单独的处理eg:事物,日志 ,提高复用性
ioc:控制反转,控制权由对象本身转向容器,由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
aop的实现原理:aop实现的关键在于aop框架自动创建aop代理
(aop代理分为动态代理和静态代理,动态代理利用截取的方式对该消息的方式经行装饰,静态代理是引入特定的语法创建方面从而使编译器可以在编译期间植入有关方面的代码)
实现方式
连接点:程序执行过程中明确的点
通知:在特定的连接点aop框架执行的动作
切入点:指定一个通知将被引发的一系列连接点的集合。
spring的依赖注入方式
setter注入, 构造器注入,接口注入
IOC和DI的关系
它们是同一个概念不同角度的描述
88 mvc
mvc模式的目的是实现一种动态的程序设计,使后续程序的修改和扩展简化
c -控制器 :负责转发请求,对请求经行处理
v -视图 :界面设计人员经行图形界面设计
m - 模型:程序员编写程序应用的功能/
优点:低耦合性,高重用性,可适用型,可维护,快速部署,较低的生命周期成本。
89 linux常见工作命名
mkdir 创建工作目录 shutdown 关闭工作目录
reboot 重启 cd 改变工作目录(也可以进入)
pwd 打印工作目录 ls 查看日志中的文件
cp 复制 rm - f 删除 find 搜索
mount 挂在一个文件系统 cat查看内容
备份dump
90 sql 语句
选择 select * from tabname where 范围;
插入 insert into tabname where 范围;
更新 update tabname set field=value where 范围;
删除 delete from tabname where 范围;
模糊查找 select * from tabname where field like %value%;
总数count 求和sum 平均avg 最大max 最小min
eg select sum(field) as sum value from tabname;
多表关联查询
可以用左外连接和右外连接
eg左连接
select * from tabname1 left join tabname2 on tabname1.id= tabname2.id;
约束条件
非空,唯一,主键,外键,检查 等,
主键的作用:非空,唯一,主要的是提高查询效率,保证实体的完整性。
索引
目的加快检索速度而建立,快速找到表或索引视图中的特定信息,索引可以强制表中的行为有唯一性从而确保数据的完整性,可以减少磁盘的i/o操作减少消耗系统资源提高查性能。
创建索引
create index 索引名 on 表名;
缺点:创建和维护索引需要消耗时间,占物理空间,降低数据维护速度
分类: 普通索引,唯一索引,(根据不同方式命名不同,) 复合索引,单个索引
视图
是一个或几个基本表导出的虚拟表
作用简化用户操作,对机密数据提供保护,可以清晰的表达查询,对重构数据提供了一定程度的逻辑独立性
创建视图
create view 视图名 as 查询语句
最后
以上就是搞怪水杯为你收集整理的java面试题总结的全部内容,希望文章能够帮你解决java面试题总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复