5.18招联金融后端面经

5.18招联金融后端面经
最新回答
沉鱼落雁

2024-03-19 12:26:12

5.18招联金融后端面试可能涉及的问题及回答要点如下

1. Spring Boot的启动流程
  • 核心步骤

    初始化SpringApplication实例:加载应用主类、配置类(如@SpringBootApplication标注的类),并推断应用类型(Web/非Web)。

    准备环境:根据配置(如application.properties)初始化环境变量、Profile、资源加载器等。

    创建应用上下文:根据应用类型选择对应的ApplicationContext(如AnnotationConfigServletWebServerApplicationContext)。

    刷新上下文:执行核心逻辑,包括Bean定义扫描、依赖注入、自动配置(@EnableAutoConfiguration)、事件发布等。

    启动内置服务器(仅Web应用):若使用嵌入式服务器(如Tomcat),会在此阶段初始化并启动。

  • 关键点

    自动配置依赖spring-boot-autoconfigure模块,通过META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件加载配置类。

    启动过程可通过SpringApplicationRunListener监听各阶段事件(如started、failed)。

2. Spring Boot常用注解
  • 核心注解

    @SpringBootApplication:组合注解,包含@Configuration、@EnableAutoConfiguration、@ComponentScan。

    @RestController:@Controller + @ResponseBody,用于构建RESTful API。

    @RequestMapping及其变体(如@GetMapping、@PostMapping):定义URL路径与HTTP方法映射。

    @Autowired:自动注入Bean,默认按类型匹配。

    @Service、@Repository、@Component:标记类为Spring管理的Bean。

    @ConfigurationProperties:将配置文件属性绑定到Java对象。

  • 扩展注解

    @EnableCaching:启用缓存抽象。

    @Transactional:声明事务管理(见下文参数细节)。

3. 事务注解的参数
  • @Transactional核心参数

    propagation:事务传播行为(如REQUIRED默认值,支持新事务;NESTED嵌套事务)。

    isolation:事务隔离级别(如READ_COMMITTED避免脏读)。

    timeout:事务超时时间(秒),超时后回滚。

    readOnly:标记事务为只读,优化性能(如查询操作)。

    rollbackFor/noRollbackFor:指定异常类型触发/不触发回滚(如rollbackFor = Exception.class)。

  • 示例

    @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE)public void updateData() { ... }
4. 了解的设计模式
  • 常用模式

    单例模式:Spring中Bean默认单例(scope="singleton"),通过@Scope修改。

    工厂模式:BeanFactory和ApplicationContext创建Bean实例。

    代理模式:AOP实现动态代理(JDK动态代理或CGLIB)。

    观察者模式:Spring事件监听(ApplicationEvent + ApplicationListener)。

    模板方法模式:JdbcTemplate、RestTemplate封装固定流程,允许自定义扩展。

5. 注解实现的原理
  • 核心机制

    注解解析:Spring通过AnnotationUtils或AnnotatedElementUtils在运行时读取注解属性。

    处理器链:BeanPostProcessor(如AutowiredAnnotationBeanPostProcessor处理@Autowired)在Bean初始化阶段介入。

    AOP代理:@Transactional等注解通过AOP生成代理对象,在方法调用前后插入逻辑(如开启/提交事务)。

  • 示例流程

    扫描类时发现@Transactional注解。

    生成代理对象(JDK动态代理或CGLIB)。

    方法调用时触发TransactionInterceptor,根据注解参数执行事务逻辑。

6. JVM的内存结构
  • 主要区域

    程序计数器:记录线程执行的字节码行号,唯一无OOM的区域。

    虚拟机栈:存储方法调用的栈帧(局部变量表、操作数栈等),栈深度过大抛出StackOverflowError。

    本地方法栈:类似虚拟机栈,服务于Native方法。

    :存放对象实例,垃圾回收主要区域,分新生代(Eden、Survivor)和老年代。

    方法区:存储类信息、常量、静态变量等(JDK 8后改为元空间,使用本地内存)。

    运行时常量池:方法区的一部分,存放编译期生成的字面量与符号引用。

7. 新生代、老年代的垃圾回收算法
  • 新生代(Young Generation)

    算法复制算法(Copying)。

    分区:Eden区(大) + 两个Survivor区(From/To,较小)。

    流程:对象优先分配在Eden,Minor GC后存活对象移至Survivor区,多次存活后晋升老年代。

  • 老年代(Old Generation)

    算法标记-清除(Mark-Sweep)或标记-整理(Mark-Compact)。

    触发条件:老年代空间不足或Full GC。

    优化:CMS(并发标记清除,减少停顿)和G1(面向大堆,分区回收)。

8. 未来的就业和学习规划
  • 短期规划

    巩固后端核心技能(Spring生态、分布式系统、数据库优化)。

    学习云原生技术(Docker、Kubernetes)和微服务架构(Spring Cloud Alibaba)。

  • 长期规划

    深耕高并发、高可用领域,积累架构设计经验。

    关注行业趋势(如AI工程化、Serverless),拓展技术视野。

  • 学习建议

    实践项目驱动:参与开源或内部项目,解决实际问题。

    持续输出:通过技术博客或分享会沉淀知识。