一组面试问题准备

27 阅读5分钟
本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

有个6年的java开发面试。 希望这个哥们能刷到这篇文章。 6年开发经验我认为需要掌握以下知识。 纯理论问题。如有错误欢迎各位指正。一个3年开发面试6年开发。瑟瑟发抖。

Java核心知识:熟练掌握Java编程语言的基本语法、面向对象编程的思想和设计模式等知识。

Java Web开发技术:熟悉常用的Web开发框架,如Spring、Spring MVC、Spring Boot、MyBatis等,能够快速开发和维护Web应用程序。

数据库和SQL:熟练使用关系型数据库(如MySQL、Oracle等),了解数据库设计、SQL语句的优化等技术,能够设计和优化数据库结构。

分布式系统开发:了解分布式系统的设计原理,熟悉常见的分布式框架和技术,如Dubbo、Zookeeper、Redis等,能够设计和开发分布式系统。

微服务开发:熟悉微服务架构和相关技术,如Spring Cloud、Eureka、Ribbon、Feign等,能够进行微服务的设计、开发和部署。

网络编程:熟悉TCP/IP协议,了解HTTP协议和RESTful API的设计和开发,能够进行网络编程和接口开发。

工具和框架:熟悉常用的开发工具,如Eclipse、IntelliJ IDEA等,熟悉版本控制工具,如Git、SVN等,掌握常用的开发框架和技术,如JUnit、Log4j等。

性能优化:熟悉Java应用程序的性能优化技术,如内存管理、多线程调优、数据库性能优化等,能够进行Java程序性能的调优。

安全技术:了解常见的Web应用程序安全漏洞和攻击手段,如SQL注入、XSS攻击、CSRF攻击等,能够进行Web应用程序的安全开发和防御。

问题一:类加载器初始化过程

加载:类加载器通过类的全限定名来读取该类的字节码文件,并将其转化为Java.lang.Class对象。

链接: a. 验证:对字节码文件进行验证,确保其符合Java虚拟机规范。 b. 准备:为类的静态变量分配内存空间,并设置默认值。 c. 解析:将常量池中的符号引用转化为直接引用,例如将类的全限定名转化为直接引用。

初始化:为类的静态变量赋值,执行静态代码块。类初始化时会按照静态变量和静态代码块的出现顺序依次执行。 需要注意的是,类的初始化是一个严格的延迟加载机制,只有在确实需要使用该类时才会被初始化。在类初始化过程中,如果发生异常,类加载器会立即抛出异常并终止初始化。此后,该类将无法再次被初始化,直到重新启动虚拟机

问题二:双亲委派机制

image.png

  1. 首先,检查一下指定名称的类是否已经加载过,如果加载过了,就不需要再加载,直接 返回。
  2. 如果此类没有加载过,那么,再判断一下是否有父加载器;如果有父加载器,则由父加 载器加载(即调用parent.loadClass(name, false);).或者是调用bootstrap类加载器来加载。
  3. 如果父加载器及bootstrap类加载器都没有找到指定的类,那么调用当前类加载器的 findClass方法来完成类加载 简单来说就是 先找父亲加载,不行再由儿子自己加载

问题三: SpringBoot的自动配置原理

Spring Boot通过在classpath中扫描特定的包和类路径来寻找自动配置类。自动配置类会使用Spring的条件化注解来控制何时应该应用它们的配置。这些注解包括@ConditionalOnClass,@ConditionalOnMissingClass,@ConditionalOnBean,@ConditionalOnMissingBean,@ConditionalOnProperty等。

当Spring Boot应用程序启动时,它会自动配置应用程序所需的所有bean,这些bean可以是Spring框架中已经存在的bean,也可以是应用程序定义的bean。当自动配置bean的属性值需要从配置文件中读取时,Spring Boot会自动读取classpath下的application.properties或application.yml文件中的配置属性,并将这些属性值注入到bean中。

Spring Boot还提供了Starter依赖,Starter依赖可以为特定的应用程序场景自动配置必需的依赖项。例如,Spring Boot提供了web starter依赖,它可以自动配置Web应用程序所需的所有bean和依赖项,包括Tomcat服务器和Spring MVC框架

问题四:Spring的生命周期

实例化:当Spring容器启动时,它会根据配置文件或注解创建Bean的实例。Spring容器支持两种方式创建Bean的实例:通过构造方法或通过工厂方法。

属性赋值:当Bean实例创建完成后,Spring容器会根据配置文件或注解将Bean的属性值注入到Bean实例中。Spring支持多种方式对Bean属性进行注入,例如通过构造方法参数、setter方法、注解等。

初始化:Bean实例创建完成并且属性赋值完成后,Spring容器会调用Bean的初始化方法。Spring支持两种方式定义Bean的初始化方法:实现InitializingBean接口或使用@PostConstruct注解。

使用:Bean初始化完成后,Spring容器可以将Bean实例注入到其他Bean中,或将其暴露给其他应用程序使用。

销毁:当应用程序关闭时,Spring容器会调用Bean的销毁方法。Spring支持两种方式定义Bean的销毁方法:实现DisposableBean接口或使用@PreDestroy注解。

需要注意的是,在Spring容器中,Bean的生命周期是由BeanFactory控制的。BeanFactory是Spring容器中管理Bean的核心组件,它可以对Bean进行创建、管理、销毁等操作

宝宝哭了,剩下的明天再说