java面试官问优缺点 面试java的问题_java


  • 1.Java 的多态表现在哪里?
  • 多态要有动态绑定,否则就不是多态,方法重载也不是多态(因为方法重载是编译期决定好的,没有后期也就是运行期的动态绑定)
  • 多态当满足这三个条件 1.有继承 2. 有重写 3. 要有父类引用指向子类对象

  • 2.抽象类与接口的区别
  • (1)一个类只能继承一个抽象类,一个类可以实现多个接口
  • (2)抽象类中可以存在非抽象方法,接口中的方法都是抽象方法
  • (3)抽象类可以有私有的成员变量和成员方法,接口中的方法全部默认的修饰为public abstract 类型的方法
  • (4)实现抽象类的方法时,如果方法是抽象的,子类必须重写抽象方法,如果方法不是抽象的,子类可以选择继承;实现了接口就必须重写接口中的所有方法

  • 3.解释方法重写与方法重载
  • 方法重写:子类继承父类时,存在与父类中某一方法相同的方法名,返回类型和参数列表,则子类方法将覆盖父类原有的方法。方法重写特性:方法重写的返回值、方法名、参数列表必须完全一致。
  • 方法重载:在一个类中具有多个函数名相同,参数列表不同的方法。参数列表不同包含参数个数和类型的不同。

  • 4.==和equals()的区别
  • ①关于==解读:
  • 基本数据类型:比较的是值是否相同
  • 引用数据类型:比较的是引用(地址)是否相同
  • ②关于equals解读:
  • 对于重写equals方法的引用数据类型:比较的是值是否相同
  • 对于未重写equals方法的引用数据类型,源码继承object的equals方法,等同于==,即比较引用(地址)是否相同
  • 补充源码:
  • java面试官问优缺点 面试java的问题_经验分享_02


  • 5.&与&&的区别
  • &与&&都可以用做逻辑与运算符,表示逻辑与(and),当运算符两边的表达式结果都为true时,整个运算的结果才为true,否则为false
  • &&具有短路功能,即如果第一个表达式为false,则不再计算第二个表达式
  • &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作

  • 6.final, finally, finalize的区别?
  • final修饰的类不可被继承,被final修饰的方法不可被重写,被final修饰的变量。
  • ②finally:异常处理语句结构的一部分,表示总是执行。
  • ③finalize:Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。


  • 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.进程与线程的区别
  • 进程是资源分配的最小单位,线程是程序执行(资源调度)的最小单位

java面试官问优缺点 面试java的问题_经验分享_03


  • 12.线程的状态 常考
  • 新建状态(New):当线程对象创建后即进入新建状态
  • 就绪状态(Runnable):当调用线程对象的start()方法后,线程即进入就绪状态,等待CPU调度
  • 运行状态(Running):当CPU开始调度处于就绪状态的线程时,线程即进入运行状态
  • 阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃了对CPU的使用权,停止执行,即进入阻塞状态,直到其进入就绪状态才有机会获得CPU的调度而进入运行状态,根据阻塞原因的不同,阻塞状态分为:等待阻塞(wait)、同步阻塞(synchornized)、其它阻塞(sleep、join)
  • 死亡状态(Dead):线程执行完后或因异常而退出了run()方法,该线程的生命周期结束
  • 补充:建议了解线程的三种创建方式!!!反正我面试的时候被问过!

java面试官问优缺点 面试java的问题_java_04


  • 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对象实例


  • 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的性能,所以在实际开发中要尽量避免无谓的扩容。



  • Thank you very much for your reading. I hope we can all be good programmers.
  • java面试官问优缺点 面试java的问题_面试_05


  • 2020.03.12 辰兮的第26篇博客 thanks~