JAVA面试概念题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA面试概念题相关的知识,希望对你有一定的参考价值。

Java面试概念题(1)
第1题:Class.forName的含义?有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);
而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

第2题:面向对象的特征有哪些方面?

第3题:ArrayList 与 Vector 的区别?

第4题:abstract class和interface有什么区别?

第5题:什么是java序列化,如何实现java序列化?

一.路径和类名,比如com.microsoft.jdbc.sqlserver.SQLServerDriver 就是在com的文件夹下的microsoft的文件夹下jdbc文件夹下sqlserver的文件夹下的SQLServerDriver 类,就是JDBC驱动了
二.
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
三.ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下:

一、同步性

ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。

二、数据增长
从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

三、检索、插入、删除对象的效率

ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。
LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。

所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList 。
四.
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
五.
首先说明一下序列化的知识:
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。

序列化机制是通过java.io.ObjectOutputStream类和java.io.ObjectInputStream类来实现的。在序列化(serialize)一个对象的时候,会先实例化一个ObjectOutputStream对象,然后调用其writeObject()方法;在反序列化(deserialize)的时候,则会实例化一个ObjectInputStream对象,然后调用其readObject()方法。

上面您的错误,就是在于有一个或者几个没有"序列化"的数据,导致没有办法创建输出流,导致发生的java.io.NotSerializableException。

之所以要序列化,我猜测是因为您的数据里面存在一个对象型的数据,但是该对象没有实现序列化。比如:您有一个字段为address,这个字段您是通过一个类Address来描述的,Address里面可能有province、city、street等等属性或者一些setter 和getter,如果这个类,没有实现序列化,往往会出现这个问题。
参考技术A 1.
Class.forName(xxx)是动态加载并返回一个类。
Class.forName(xxx.xx.xx).newInstance()直接返回一个类的实例。

2.继承,多态。

3.前者高效但不保证线程安全,后者保证线程安全。

4.用法差不多,但是意义不一样。抽象类定义以后,一般有多个子类继承,来实现其定义的方法。而接口,更像是一种规范,是为其他类引用的一种准则。比如说一个类要 实现 某个功能,那么,他就可以继承包含这类规范的方法,属性的接口。 正因为这个原因,java只允许单继承抽象类,但是可以多继承接口。.net没有限制。

5.序列化说白了就是同时只能有一个进程访问这段代码。实现方式很多,大概四种:第一种是直接序列化代码段:synchronized(obj) 你要的代码
第二种 是 放在方法体申明里: public synchronized void synMethod() 你得代码
第三种 序列化对象:包括方法,属性。
第四种 序列化 类:第三种的区别是类中的静态方法都是序列化的。同时只能一个线程写

-----这个问题居然在这里提。我写得很累得本回答被提问者采纳
参考技术B 一.路径和类名,比如com.microsoft.jdbc.sqlserver.SQLServerDriver 就是在com的文件夹下的microsoft的文件夹下jdbc文件夹下sqlserver的文件夹下的SQLServerDriver 类,就是JDBC驱动了

abstract class
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
interface 接口
是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

Java面试题,Java外卖订餐系统

基本概念面试题集( Spring 相关概念梳理)

  1. 谈谈对Spring loC的理解?
  2. 谈谈对Spring Dl的理解?
  3. BeanFactory 接口和ApplicationContext接口不同点是什么?
  4. 请介绍你熟悉的Spring 核心类,并说明有什么作用?
  5. 介绍一下Spring的事务的了解?
  6. 介绍—下Spring的事务实现方式?
  7. 解释AOP模块
  8. Spring的通知类型有哪些,请简单介绍一下?
  9. Spring 通知类型使用场景分别有哪些?
  10. 请介绍一下你对Spring Beans的理解?
  11. Spring有哪些优点?
  12. 在Spring中使用hibernate的方法步骤
  13. Spring和Struts的区别?
  14. Spring 框架由哪几部分组成?
  15. 谈谈你对BeanFactory的理解,BeanFactory 实现举例
  16. 谈谈对Spring 中的 Web 模块的理解
  17. BeanFactory 和Application contexts有什么区别?
  18. 谈谈你对Spring依赖注入的理解?
  19. 什么是Bean装配?
  20. 什么是Bean的自动装配?
  21. 介绍一下自动装配有几种方式?
  22. 什么是基于注解的容器配置?
  23. 简述JdbcTemplate类的作用
  24. 解释AOP
  25. 解释Aspect切面
  26. 简述Spring AOP中的通知
  27. SpringAOP中的织入你怎样理解?
  28. 请详细介绍一下Spring MVC的流程?
  29. Spring配置文件?
  30. @RequestMapping 注解用在类上面有什么作用
  31. 怎么样把某个请求映射到特定的方法上面
  32. 谈谈Spring 对DAO的支持

应用场景面试题集(各知识点不同使用场景选型)

  1. Spring配置 Bean实例化有哪些方式?
  2. Bean注入属性有哪几种方式
  3. 在Spring 中如何实现时间处理?
  4. Spring 中如何更高效的使用JDBC ?
  5. 请介绍一下设计模式在Spring框架中的使用?
  6. 讲讲Spring框架的优点有哪些?
  7. 哪种依赖注入方式你建议使用,构造器注入,还是Setter方法注入?
  8. 你怎样定义类的作用域?
  9. 解释Spring支持的几种Bean的作用域
  10. 在Spring中如何注入一个Java集合?
  11. 你可以在Spring中注入一个 null和一个空字符串吗?
  12. 什么是基于Java的Spring注解配置?给—些注解的例子
  13. 你更倾向用哪种事务管理类型?
  14. Bean的调用方式有哪些?
  15. Spring MVC里面拦截器是怎么写的
  16. 当一个方法向AJAX返回特殊对象,比如Object.List 等,需要做什么处理?
  17. 如何使用Spring MVC完成JSON操作
  18. Spring如何整合Hibernate
  19. Spring 如何整合Struts2 ?
  20. 开发中主要使用Spring 的什么技术?
  21. 介绍一下Spring MVC 常用的一些注解
  22. Spring框架的事务管理有哪些优点

深度度知识面试题集(底层实现原理详解)

  1. loC控制反转设计原理?
  2. Spring的生命周期?
  3. Spring 如何处理线程并发问题?
  4. 核心容器(应用上下文)模块的理解?
  5. 为什么说Spring是一个容器?
  6. Spring的优点?
  7. Spring框架中的单例Beans是线程安全的么?
  8. Spring 框架中有哪些不同类型的事件?
  9. loC的优点是什么?
  10. 解释Spring 框架中 Bean的生命周期
  11. 什么是Spring的内部 Bean?
  12. 自动装配有哪些局限性?
  13. Spring 框架的事务管理有哪些优点?
  14. 在Spring AOP中,关注点和横切关注的区别是什么?
  15. 说说Spring AOP的底层实现原理?
  16. 如何给Spring 容器提供配置元数据?
  17. 哪些是重要的Bean生命周期方法?你能重裁它们吗?
  18. 讲下Spring MVC 的执行流程
  19. Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决
  20. Spring中循环注入的方式?
  21. Spring MVC比较Struts2

拓展内容面试题集(Spring Boot、Spring Cloud相关题集)

  1. 什么是Spring Boot?
  2. Spring Boot自动配置的原理?
  3. Spring Boot 读取配置文件的方式?
  4. 什么是微服务架构?
  5. Ribbon和Feign的区别?
  6. Spring Cloud断路器的作用?
  7. 为什么要用Spring Boot?
  8. Spring Boot的核心配置文件有哪几个?它们的区别是什么?
  9. Spring Boot的配置文件有哪几种格式?它们有什么区别?
  10. Spring Boot的核心注解是哪个?它主要由哪几个注解组成的?
  11. 开启Spring Boot特性有哪几种方式?
  12. Spring Boot需要独立的容器运行吗?
  13. 运行Spring Boot有哪几种方式?
  14. 你如何理解Spring Boot中的Starters?
  15. 如何在Spring Boot启动的时候运行一些特定的代码?
  16. Spring Boot有哪几种读取配置的方式?
  17. Spring Boot实现热部署有哪几种方式?
  18. Spring Boot多套不同环境如何配置?
  19. Spring Boot可以兼容老Spring项目吗,如何做?
  20. 什么是Spring Cloud?
  21. 介绍一下Spring Cloud常用的组件?
  22. Spring Cloud如何实现服务注册的?
  23. 什么是负载均衡?有什么作用?
  24. 什么是服务熔断?
  25. 请介绍一下Ribbon的主要作用?

Java 圈内最近对 “面试问 Spring” 的吐槽越来越多:不管大小公司或者项目,面试官都要跟你扯一扯 Spring、Spring Boot、微服务,如果答不出来,大概率直接是等回复!

希望本文能够在“Spring”这个问题上能够给你带来质的提升,加油吧!

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

资料领取方式:戳这里免费下载

成长笔记**你需要阅读阅读,希望能够对你的职业发展有所帮助。

资料领取方式:戳这里免费下载

[外链图片转存中…(img-FtqFa7VY-1627621976714)]

以上是关于JAVA面试概念题的主要内容,如果未能解决你的问题,请参考以下文章

面试题 java啥叫事务,事务有啥用

Java 面试题基础概念收集(高级)

java面试题

程序员面试技术题,怎么才能快速记住那么多概念?

Java 泛型概念相关面试题

java面试题