1.JDK和JRE的区别
JRE:JRE是JAVA运行环境
JDK:JDK是JAVA开发工具,JDK包括JRE,java编译器、调试、分析等工具
如果只需要运行java程序,那么只需要安装JRE即可,如果需要开发JAVA程序,则需要安装JDK。
2.==和equals的区别
==:如果比较的是基本数据类型,则是比较它们的值;如果是引用类型,则是比较它们的引用是否相等
equals:比较的是它们的值是否相等
对于两个非new生成的Integer对象,进行比较时,如果两个变量值在-128到127之间则为true,否则为false;例如:
Integer it1 = 100;
Integer it2 = 100;
System.out.print(i==j); //true
Integer i= 128;
Integer j= 128;
System.out.print(i==j); //false
3.final在java中有什么作用?
修饰变量、方法和类;
修饰的变量:称之为常量,必须被初始化,初始化以后值不能修改
修饰的方法:不能被重写
修饰的类:不能被继承
4.Math.round(-1.5)等于多少?
等于-1
5.java的基本数据类型,String是基本数据类型吗?
java的基本数据类型有8种:byte、char、boolean、int、long、short、float、double。String不是基本数据类型。
6.java中操作字符串的有哪些类,它们之间有什么区别?
7.String str = "i" 和String str = new String("i") 一样吗?
8.如何将字符串反转?
使用StringBuffer(StringBuilder)的reverse方法
9.抽象类中必须要有抽象方法吗?
不一定。
10.普通类和抽象类有什么区别?
11.抽象类可以用final修饰吗?
12.抽象类和接口有什么区别?
13.java中IO流分几种?
————————————————
14.java容器有哪些?Collection和Collections有什么区别?
分为两大类 Map和Collection。Collection分为List、ArrayList、LinkedList、Set、HashSet、TreeSet等等,Map分为HashMap、TreeMap等等
15.list、set、map有什么区别?
主要区别在于数据是否有序、能否重复
list:有序、可以重复
set:无序(除了TreeSet)、不可重复
map:无序(除了TreeMap)、key值不能重复
17.如何选择使用HashMap还是TreeMap?
如果进行增、删、定位操作,使用HashMap,因为相对而言HashMap的插入会更快;如果对一个key集合进行有序遍历的话,使用TreeMap;
18.说一下HashMap的实现原理。
利用了hash算法,使用get(key)进行获取,put(key, value)进行存储,当传入key时,会使用key.hashCode()计算哈希值,根据哈希值将value保存在bucket中,如果哈希值相同,称为hash冲突,则使用链表和红黑树存储相同key值的value。
19.ArrayList 和 LinkedList 的区别是什么?
20.如何实现数组(array)和list之间的转换?
list转换为数组使用 toArray();
数组转换为list使用Arrays.asList(array);
21.Array和ArrayList的区别是什么?
22.Iterator是什么?怎么使用?(特点是更加安全)
————————————————
23.并行和并发的区别
并行:有两个处理器同时处理两个任务
并发:有一个处理器按照细分的时间片轮流处理两个任务
24.进程和线程的区别
进程是一个动态的执行过程,是系统分配资源的最小单位;线程是系统调度的最小单位;一个进程至少包含一个线程。
25.创建线程有哪几种方式?
继承Thread,重写run()方法
实现runnable接口、实现callable接口
26.线程有哪些状态?
27.sleep() 和 wait() 的区别
sleep来自Thread类、不释放锁、会自动唤醒
wait来自Object类、释放锁、使用notify/notifyAll唤醒
28.线程的start() 和 run() 有什么区别?
start()是启动线程,只能调用一次
run()是执行线程运行时的代码,可以重复调用
29.什么是线程池,创建方式?
线程池就是先创建几个线程放进一个池子里面,等到需要的时候从这个池子里调用,使用完成以后在放回这个池子,而不是销毁线程。
30.java程序中怎么保证多线程的运行安全?
31.什么是死锁?
32.怎么防止死锁?
33.synchronize 和 volatile 有什么区别?
34.synchronize 和 lock 有什么区别?
————————————————
35.什么是反射?
将类的属性和方法都封装成其他对象,提供给任意对象调用
36.什么是序列化?什么时候需要用到序列化?
————————————————
37.JSP 和 SERVLET 有什么区别?
JSP是一个和html结合的jsp文件,属于视图层;SERVLET是与html分离的java文件,属于逻辑控制层;
38.JSP有哪些内置对象(9个)?
request,response等等
39.JSP的四个作用域?
page、request、session、application
40.session 和 cookie 有什么区别?
session存储在服务器中,cookie只能存储在浏览器中
cookie可以被修改和伪造;容量和个数也有限制
41.请说一下session 的工作原理
客户端登录以后,服务器端会创建一个session并发送该session的id给客户端,客户端会将这个sessionid存储在浏览器中。当客户端向服务器端访问时,会带着这个id,此时服务器端会在内存中找到与之对应的session,这样就能正常工作了。
42.如果客服端禁止cookie使用,还能实现session吗?
可以的。可以把sessionid添加到url中就能保证session正常使用。
43.spring mvc 和 struts2 的区别
————————————————
44.throw 和 throws 的区别
throw 是声明一个真实存在的异常
throws 是声明可能出现的异常
45.final、finally、finalize的区别
final:修饰符,可以修饰变量、方法、类
finally:try{}catch{}finally{}中的一部分,表示一定要执行的代码
finaliize:垃圾回收时,被回收对象调用的Object类方法
46.在try{}catch{}finally{}中,如果catch里面有return语句,那么finally还会被执行吗?
会的,会先执行finally中的代码,然后再执行return语句
47.常见的异常类有哪些?
NullPointerException、IndexOutOfBoundsExpection、IOException、
ClassNotFoundException、NoSuchMethodException等等
————————————————
48.forward 和 redirect 的区别
forward:转发,可以共享request的数据
redirect:重定向,不能共享
forward的url地址不会改变,效率比redirect高
49.简述tcp和udp的区别
tcp:提供可靠的数据传输,面向连接的,面向字节流,传输慢
udp:不可靠的数据传输,面向非连接的,面向报文的,传输快
50.tcp为什么要三次握手,不可以是两次吗?
三次握手服务器端没有收到来自客户端的再次确认,就不会建立连接,不会浪费资源;而两次握手的话,只要服务器端发送确认报文就会建立连接,但是因为这个时候客户端没有响应服务器端的请求,服务器端会一直等待客户端,会浪费资源
————————————————
51.说一下你熟悉的设计模式
单例模式:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
工厂模式
————————————————
52.为什么要使用Spring?
Spring是提供IOC和AOP技术的容器框架;
IOC技术能够让Spring帮你管理所有依赖对象,不需要自己去创建和管理依赖对象了;
AOP技术能够实现更方便的管理某些通用类,例如日志、异常等等;
Spring提供了事务支持,能够更方便的操作事务;
Spring能更方便的集成其他框架,例如Hibernate等等
53.解释一下什么是aop?
AOP:面向切面编程,就是把某些通用的类,比如日志、异常等,统一管理和维护,方便代码的解耦。
54.解释一下什么是ioc?
IOC:控制反转,就是把对象的创建权交给Spring,由Spring来创建和管理依赖的对象。
55.Spring 有哪些主要模块?
code,context,dao,aop,web
56.Spring 有哪些常用的注入方式?
构造函数,注解注入,setter注入
57.Spring 自动装配bean有哪些方式?
构造函数装配,byName,byType,自动装配
58.Spring 事务的实现方式有哪些?
声明式事务:XML方式、注解方式
编码式事务
59.说一下spring mvc的运行流程
60.spring mvc 有哪些组件?
————————————————
61.为什么要使用Hibernate?
Hibernate是一个ORM框架,提供数据持久化操作;
Hibernate封装了jdbc功能,简化了dao层很多重复性的代码;
实现了ORM,让dao层的编码工作更加方便,更加对象化
数据库移植性好,更换数据库只需要更改Hibernate的配置文件即可
62.什么是ORM框架?
ORM:对象关系映射,把数据库中的关系数据映射成程序中的对象
63.Hibernate有几种查询方式?
hql、sql、(条件查询)
64.Hibernate是怎么工作的?
读取和解析配置文件
读取和解析映射文件
创建SessionFactory
创建Session
创建事务
进行持久化操作
提交事务
关闭Session
关闭SessionFactory
65.get和load的区别是什么?
数据查询时,查询没有oid指定的对象,get话会返回null; load会返回一个代理对象,支持延迟加载
66.说一下Hibernate的缓存机制?
Hibernate采用session缓存,作用范围是从创建session开始直到session关闭,不需要手动打开,只能存储持久态的数据。可以通过:evict(object)清除 object 的缓存;clear()清除一级缓存中的所有缓存;flush()刷出缓存;
67.Hibernate对象有哪些状态?
瞬时态:没有id,跟session没有关联,是new出来的对象
持久态:有id,并且跟session存在关联,调用save/saveOrupdate/get/load/list 等方法的时候,对象就是持久态
游离态:有id,跟session没有关联,是session关闭以后的对象
68.在Hibernate中getCurrentSession和OpenSession有什么区别?
————————————————
69.说一下JVM的主要组成成分及其作用。
类加载器:将java代码转换成字节码
运行时数据区:将字节码文件加载到内存中
执行引擎:将字节码翻译成底层系统指令
本地库接口
70.说一下JVM运行时数据区(JVM内存机制)
线程独享:虚拟机栈,本地方法栈,程序计数器(栈存储的是基本类型数据,本地方法,对象的引用)
线程共享:堆内存,方法区(堆内存存储的是对象)(方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。)
71.说一下堆和栈的区别
堆是线程共享的,存储的是对象实例,是内存中最大的一部门
栈是线程独享的,存储的是基本类型数据、本地方法和对象的引用等等。栈是用来执行程序的
72.队列和栈是什么,有什么区别?
队列和栈都是被用来预存储数据的
队列采用的是先进先出进行检索
栈采用的是先进后出进行检索
73.说一下类加载的执行过程。(五个步骤)
加载:找到相应的class文件,然后导入
检查:检查class文件是否存在错误
准备:为静态变量分配内存空间
解析:虚拟机将常量池中的符号引用替换成直接引用
初始化:对静态变量和静态代码块执行初始化工作
74.怎么判断对象是可以被回收的?
引用计数器法
可达性分析:从GC Root开始向下搜索,搜索所经过的路径称为引用链,当一个对象到GC Root没有任何引用链相连时,就说明该对象可以被回收
75.java中有哪些引用类型?
强引用
软引用
弱引用
虚引用
76.说一下JVM有哪些垃圾回收算法?
——————————————————
77.Redis是什么?都有哪些使用场景?
78.Redis有哪些功能?
79.Redis和Memcache有什么区别?
80.什么是缓存穿透?怎么解决?
81.Redis支持的数据类型有哪些?
82.怎么保证缓存和数据库数据的一致性?
83.Redis持久化有几种方式?
84.Redis怎么实现分布式锁?
85.Redis分布式锁有什么缺陷?
86.Redis如何做到内存优化?