秋招京东科技后端一面(含后续)
背景信息:
美团实习,笔试全ak
总结:
15min实习+15min八股(结合简历上的Spring项目),无手撕
(已经意向,后续面经都会更新)
详细:
先自我介绍,然后把重点引到暑期实习上,自然而然的问实习
---实习---
1.给我讲讲你暑期实习着手于的系统,看看你对系统的理解
答:略(因人而异)
2.讲讲你实习中遇到的最大的技术挑战?
答:略(因人而异)
---八股---
3.那在美团的实习里,你主要用了哪些Java或Spring的技术你觉得有些技术深度的,咱们可以详细聊聊
答:我在这里通过一个需求说了Java中的LiteFlow,感兴趣的兄弟可以去查查看;
4.那这个LiteFlow的使用,是不是涉及到Java的设计模式,可不可以讲一下
答:LiteFlow的使用类似于设计模式中的责任链模式,将各个阶段的业务流程解耦,新增只需要写新代码插入到链中,修改特定业务流程也只需要改特定代码,符合开闭原则,便于后续维护;
5.明白了,那你对Spring AOP应该比较了解(简历上有项目),能详细说下吗?
答:AOP就是面向切面编程,可以看做把我们的核心业务代码环切,在运行前、运行时、或者运行后于切面织入特定通用逻辑功能,可以把核心业务代码和一些通用代码解耦,通过AOP在运行时织入程序中,减少对业务核心代码的侵入性,比如一些日志管理和事务管理等的通用功能代码都可以通过AOP织入;我最近在学习Spring AI,其中也通过AOP实现运行前织入,实现携带前后文同大模型交互;Spring AOP的实现依赖的是代理模式,通过原生JDK动态代理或CGLIB代理在运行时进行逻辑织入;
6.那AOP中有哪些核心概念?
答:Pointcut,比如我之前说的运行前、运行时、运行后,定义应该在程序的哪个运行点织入;Advice,即我在织入点织入的具体逻辑;Aspect,是pointcut和advice的结合体,表示一个横切关注的点;
7.那我再问一下关于Spring Bean的生命周期管理是怎样的?
答:第一个是定义阶段,比如我那个项目中,就要先通过BeanDefination先定义好相关的类名属性以及构造器依赖等;第二步是创建阶段,通过set注入或构造器注入去创建该Bean的实例;第三步是初始化阶段,通过定义阶段定义好的初始化方法,对Bean进行相关的注入完成初始化;第四个阶段就是Bean使用完成后的销毁阶段,如果定义了相关销毁方法,在销毁时也会执行;
8.创建一个Java对象,他在JVM里整个生命周期会经历几个区域?
答:首先这个Java类的类信息会存储在方法区上;该对象创建在堆上,如果按垃圾回收分代算法的角度来看,还会存在于堆上的新生代区或老年区;如果他被某些方法引用,栈中会有相关指针指向该对象;
9.那现在假设有这么一种情况,你运行的这个服务,机器的CPU和内存都飙高了,你会怎么去排查?
答:首先每个服务应该都会有相应的日志和埋点,我会先排查日志,检查哪里出现的异常日志最多,定位问题的源头;如果排查日志找不到问题,排查JVM,看看堆上是不是频繁的GC导致内存飙高,排查栈中是不是有线程死循环或阻塞导致CPU飙高;
10.最后一个技术问题,数据库中有一种叫回表查询,什么是回表查询,如何避免?
答:数据库的索引结构,数据都是存储在一级索引的B+树下,而二级索引里面存储的是一级索引,使用二级索引进行查询,就要查到一级索引后再去查数据,就叫回表查询;为了避免回表造成额外的IO开销,可以编制索引时使用覆盖索引,或者查询时优化查询的SQL;
---反问---
11.问了业务组具体做的业务