- 1.Java 的多态表现在哪里?
- 多态要有动态绑定,否则就不是多态,方法重载也不是多态(因为方法重载是编译期决定好的,没有后期也就是运行期的动态绑定)
- 多态当满足这三个条件
1.有继承 2. 有重写 3. 要有父类引用指向子类对象
- 2.抽象类与接口的区别
- (1)
一个类只能继承一个抽象类,一个类可以实现多个接口
- (2)抽象类中可以存在非抽象方法,接口中的方法都是抽象方法
- (3)抽象类可以有私有的成员变量和成员方法,接口中的方法全部默认的修饰为public abstract 类型的方法
- (4)实现抽象类的方法时,如果方法是抽象的,子类必须重写抽象方法,如果方法不是抽象的,子类可以选择继承;实现了接口就必须重写接口中的所有方法
- 3.解释方法重写与方法重载
- 方法重写:
子类继承父类时,存在与父类中某一方法相同的方法名,返回类型和参数列表,则子类方法将覆盖父类原有的方法。
方法重写特性:方法重写的返回值、方法名、参数列表必须完全一致。 - 方法重载:
在一个类中具有多个函数名相同,参数列表不同的方法
。参数列表不同包含参数个数和类型的不同。
- 4.==和equals()的区别
- ①关于==解读:
基本数据类型:比较的是值是否相同
引用数据类型:比较的是引用(地址)是否相同
- ②关于equals解读:
对于重写equals方法的引用数据类型:比较的是值是否相同
对于未重写equals方法的引用数据类型,源码继承object的equals方法,等同于==,即比较引用(地址)是否相同
- 补充源码:
- 5.&与&&的区别
- ①
&与&&都可以用做逻辑与运算符
,表示逻辑与(and),当运算符两边的表达式结果都为true时,整个运算的结果才为true,否则为false - ②
&&具有短路功能
,即如果第一个表达式为false,则不再计算第二个表达式 - ③
&还可以用作位运算符
,当&操作符两边的表达式不是boolean类型时,&表示按位与操作
- 6.final, finally, finalize的区别?
- ①
final修饰的类不可被继承,被final修饰的方法不可被重写,被final修饰的变量。
- ②finally:异常处理语句结构的一部分,表示总是执行。
- ③finalize:Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
- 7.StringBuffer 和 StringBuilder的区别
常考
- 最主要的:
StringBuffer:线程安全
,StringBuilder:线程不安全
- 参考我的文章:StringBuffer 和 StringBuilder的面试详解
- 同步参考:JAVA中String介绍以及常见面试题
- 8.ArrayList和LinkedList区别
- ①ArrayList是基于数组的实现,元素的查询和修改效率较高,但是元素的插入和删除效率较低。
- ②LinkedList是基于链表的实现,元素的插入和删除效率较高,但是元素的查询和修改效率较低。
- 详解参考我的文章:List和Set集合基础详解
9.HashMap与ConcurrentHashMap的区别?
- ①联系:HashMap与ConcurrentHashMap都是基于哈希表(数组、链表、红黑树)的存储。
- ②区别:
HashMap是非线程安全的,而ConcurrentHashMap是线程安全的
,它在HashMap的基础上加入了分段锁的概念,即创建的Map的初始数组中的每一个元素为一个区块(segment),当线程A对键值对进行操作时只会锁住当前区块,而不影响对其它区块的操作,提高了Map在多线程并发操作时的效率。 - 想了解HashMap可以参考:HashMap原理分析及性能优化
- 10.列举10个常见异常
- NullPointerException 空指针异常 、 ClassNotFoundException 类找不到异常
- ArithmeticException 数学运算异常、 IndexOutOfBoundsExcept 下标越界异常
- IllegalArgumentException 非法参数异常 、 FileNotFoundException 文件未找到异常
- NumberFormatException 字符串转为数字异常、 EOFException 文件已结束异常
- SQLException 操作数据库异常、 IOException 输入输出异常
- 11.进程与线程的区别
- 进程是资源分配的最小单位,线程是程序执行(资源调度)的最小单位
- 详细请参考:进程和线程的常见面试问题
- 12.线程的状态
常考
- ①
新建状态(New)
:当线程对象创建后即进入新建状态 - ②
就绪状态(Runnable)
:当调用线程对象的start()方法后,线程即进入就绪状态,等待CPU调度 - ③
运行状态(Running)
:当CPU开始调度处于就绪状态的线程时,线程即进入运行状态 - ④
阻塞状态(Blocked)
:处于运行状态中的线程由于某种原因,暂时放弃了对CPU的使用权,停止执行,即进入阻塞状态,直到其进入就绪状态才有机会获得CPU的调度而进入运行状态,根据阻塞原因的不同,阻塞状态分为:等待阻塞(wait)、同步阻塞(synchornized)、其它阻塞(sleep、join) - ⑤
死亡状态(Dead)
:线程执行完后或因异常而退出了run()方法,该线程的生命周期结束 - 补充:
建议了解线程的三种创建方式!!!反正我面试的时候被问过!
- 详细参考:进程和线程的常见面试问题
- 13.简述线程池及工作原理
- 线程池是管理线程的容器,先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态
- 小结:
线程池是面向后台程序的,是为了提高内存和CPU效率
。
- 14.简述MySQL数据库索引原理
- 定义:索引是帮助MySQL高效获取数据的数据结构。
- 原理:传统查询方法是按照表的顺序遍历的,添加索引后可以根据BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历,找到相应的键从而获取数据。
- MYSQL进阶请参考:MYSQL性能优化
- 15.数据库事务的四大特性(ACID),并阐述
- ①原子性(Atomicity):一个事务中的多个步骤要么全部完成,要么全部不做
- ②一致性(Consistency):在事务开始之前和事务完成之后,数据库中数据的完整性和一致性不能被破坏
- ③隔离性(Isolation):数据库允许多个事务并发,但多个事务之间不能相互交叉执行从而导致数据不一致,多个并行的事务之间不能相互影响
- ④持久性(Durablity):事务完成后,对数据的操作是永久的
- 16.简述事物的隔离级别
- 读未提交(Read uncommitted):就是一个事务可以读取另一个未提交事务的数据。
- 读已提交(Read committed):就是一个事务要等待另一个事务提交后才能读数据。
- 重复读(Repeatable Read):就是在开始读数据时,不再允许修改操作。
- 序列化(Serializable):最高的事务隔离级别,事务串行化顺序执行,可以避免脏读、不可重复度、幻读,但是这种事务隔离级别效率低下,比较消耗数据库性能,一般不使用。
- 17.简述数据库连接池
数据库连接池是管理数据库连接的容器
,数据库连接是一种关键的、有限的、昂贵的资源,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。- 作用:
连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器地服务效率,能够支持更多的客户服务
。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。 - 小结:
连接池是面向数据库连接的,是为了优化数据库连接资源
- 18.Servlet生命周期
常考
Servlet是单实例多线程的,自始至终只会创建一个对象来响应用户请求。
①如果web.xml中没有配置load-on-startup
,则当用户第一次请求到达时创建servlet类的对象,然后使用该对象依次调用service(ServletRequest,ServletResponse)—service(HttpServletRequest,HttpServletResponse)—doGet/doPost方法响应用户请求;当用户请求再次到达时,不会重新创建对象,直接使用已经创建的对象调用service—service—doGet/doPost进行响应。②
如果web.xml中有该Servlet的load-on-startup配置
,则服务器启动时会按照load-on-startup配置的加载顺序依次创建Servlet对象,当请求到达时直接使用对象调用service-service-doGet/doPost方法进行相应。
③当服务器关闭时,就销毁Servlet对象实例
- 详细了解参考:Servlet生命周期及Servlet类详解
- 19.简述JSP九大内置对象
虽然JSP很少用了还是建议了解一点内置对象
- request该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据 作用域:一次请求
- response 该对象代表服务器对客户端的响应,主要是将JSP容器处理过的数据传回到客户端 作用域:JSP页面内
- session 从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话 作用域:浏览器
- application 全局对象 服务器开启时创建,服务器关闭时销毁 所有用户共享该全局对象
- out 表示指向当前JSP页面的输出流,可以通过该对象将指定的内容写出到JSP文件的指定位置
- page 代表JSP本身,只有在JSP页面内合法
- config 该对象的作用是取得当前页面在服务器上的配置信息
- exception 该实例代表其他页面中的异常和错误。只有当页面是“错误处理页面”,即编译指令page 的isErrorPage
属性为true 时,该对象才可以使用。 - pageContext 作用是取得任何范围内的参数 通过它可以获得JSP页面的其他对象
- 20.说说你对反射机制的理解
- JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
- 应用:通过反射机制获取注解信息 动态代理 逆向代码 基础框架应用广泛。
- 21.Collection 和 Collections的区别?
-
Collection:集合类的上级接口
,继承与他的接口主要有Set 和List. -
Collections:针对集合类的一个帮助类
,提供了一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
- 22.TCP 与 UDP 的区别:
TCP(Transmission Control Protocol,传输控制协议)
是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。UDP(User Data Protocol,用户数据报协议)
, UDP 是一个非连接的协议,传输数据之前源端和终端不建立连接。(不安全)
- 1 .基于连接与无连接;
- 2 .对系统资源的要求(TCP 较多,UDP 少);
- 3 .UDP 程序结构较简单;
- 4 .流模式与数据报模式 ;
- 5 .TCP 保证数据正确性,UDP 可能丢包,TCP 保证数据顺序,UDP 不保证。
- 23.cookie 和 session 的区别,分布式环境怎么保存用户状态;
- ①
session 保存在服务器
,客户端不知道其中的信息;cookie 保存在客户端
,服务器能够知道其中的信息。 - ②session 中保存的是对象,cookie 中保存的是字符串。
- ③session 不能区分路径,同一个用户在访问一个网站期间,所有的 session 在任何一个地方都可以访问到。而 cookie
中如果设置了路径参数,那么同一个网站中不同路径下的 cookie互相是访问不到的。 - ④session 需要借助 cookie 才能正常。如果客户端完全禁止 cookie,session 将失效。
- 详细解答参考我的文章:彻底了解Cookie和Session的区别(面试)
- 24.wait 和 sleep 的区别;
我面试的时候考的
- ①
sleep()是 Thread 类中的方法,而 wait()则是 Object 类中的方法
。 - ②
sleep()方法导致了程序暂停,但是他的监控状态依然保持着
,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。 - ③
wait()方法会导致线程放弃对象锁,进入等待此对象的等待锁定池
,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
- 25.简述HashMap存储过程
HashMap中键值对是基于哈希表(数组+链表+二叉树)的存储。
- ①.当我们创建一个HashMap集合时,默认创建一个初始长度为16的数组(加载因子为0.75);
- ②.当我们向HashMap中添加键值对的时候,首先根据键值对键的hash码除以数组的长度取余以确定键值对在map中的位置
- ③.当这个位置有多个键值对时,以链表的结构进行存储;
- ④.在JDK8中,当链表长度大于8时,则将链表结构转换为二叉树进行存储
扩容原理:当map的数组中元素超过数组长度的75%时,表示需要扩容(扩容算法<<1),每次扩容都会导致对所有键值对进行重新排列,会影响map的性能,所以在实际开发中要尽量避免无谓的扩容。
- HashMap性能详解请参考:HashMap原理分析及性能优化
- 26.Redis相关问题我已经整理:Redis的面试基础知识详解
Thank you very much for your reading. I hope we can all be good programmers.
2020.03.12 辰兮的第26篇博客 thanks~