京东Java后端实习二面

1.项目(黑马点评)拆了几个模块,描述商品的表结构
2.高并发下用户相互关注问题怎么发现的,怎么解决的
3.MySQL什么情况下触发表锁
4.数据库的范式
5.数据库索引,hash b+树使用区别,列举多个场贯
6.事务与索引有什么关系
7.幻读,以及影响
8.linux open函数打开文件返回fd,fd怎么理解,为什么是整型
9.OS几个核心的子系统有哪些,open的数怎么根据文件路径找到磁盘位置
10.inode是什么,怎么组织
11.场景题:500G大文件,文件中每行都是随机字符串(长度<1k),不同行可能出现重复字符串,内存1G。求出现次数最多的字符串。
全部评论
二面过了吗
点赞 回复 分享
发布于 2025-12-29 11:01 广东

相关推荐

2025-12-08 12:43
已编辑
门头沟学院 Java
那些杀不死我的&nbsp;反复追着我杀!!1.jvm包含哪几部分classloader:将编译(.java-&gt;.class)好的java字节码文件(.class文件)&nbsp;加载到内存中(也就是运行时数据区Runtime&nbsp;data&nbsp;area&nbsp;存放运行时数据(线程私有:栈&nbsp;本地方法栈&nbsp;pc&nbsp;,进程级(也就是所有线程共享):堆&nbsp;本地方法区)Execution&nbsp;engine&nbsp;执行引擎,class文件被加载后&nbsp;将指令和数据放在内存中&nbsp;执行引擎负责将命令解释给os&nbsp;也就是将JVM指令翻译为os指令集Native&nbsp;interface:本地库接口2.jvm内存结构/运行时数据区线程私有的:栈(每个方法执行时创建栈帧&nbsp;存局部变量表等)&nbsp;本地方法栈(为Native方法提供服务)&nbsp;程序计数器(存当前线程执行的字节码指令地址)线程共享:堆(最大的内存区&nbsp;存对象实例、类对象)&nbsp;方法区&nbsp;(存类有关的信息&nbsp;静态变量等)3.说一下永久代和元空间都是对&nbsp;方法区&nbsp;的实现永久代:JDK7&nbsp;及之前的实现,属于堆内存的一部分,有固定大小限制(通过-XX:PermSize/-XX:MaxPermSize设置),存储类元信息、常量池等,易触发永久代&nbsp;OOM元空间:JDK8&nbsp;及之后的实现,使用本地内存(不在堆中),大小受物理内存限制(默认无上限),仅需通过-XX:MetaspaceSize设置初始触发&nbsp;GC&nbsp;的阈值4.为什么jdk8要将永久代替换为元空间解决永久代OOM问题&nbsp;简化类元数据管理&nbsp;兼容JVM规范5.类加载过程加载:通过类全限定名获取字节码流,将字节码转化为方法区的类元数据,同时在堆中生成Class对象验证:确保字节码符合&nbsp;JVM&nbsp;规范(如文件格式验证、语义验证),防止恶意字节码破坏&nbsp;JVM&nbsp;安全准备:为类的静态变量分配内存并赋默认值(如&nbsp;int&nbsp;赋&nbsp;0、对象赋&nbsp;null),不执行赋值语句(赋值在初始化阶段)解析:将常量池中的符号引用替换为直接引用(如类、方法的内存地址),该阶段可延迟到初始化后执行。初始化:执行&lt;clinit&gt;方法(静态变量赋值&nbsp;+&nbsp;静态代码块),触发时机是&nbsp;“主动使用”(new&nbsp;对象、访问静态成员、反射、初始化子类、主类),且每个类仅初始化一次6.类加载机制(双亲委派制)1类加载器收到加载请求&nbsp;&nbsp;-&gt;&nbsp;2将请求委托给父加载器,一直向上委托,直到启动类加载器&nbsp;-&gt;&nbsp;3启动加载器检查是否能加载这个类,能则使用当前加载器,否则向下传递&nbsp;-&gt;4重复步骤3&nbsp;如果找不到&nbsp;class&nbsp;not&nbsp;foundJVM&nbsp;默认类加载器层级:启动类加载器(Bootstrap)→扩展类加载器(Ext)→应用程序类加载器(App)→自定义类加载器7.why双亲委派保护核心类库(如String由启动类加载器加载,避免自定义类篡改替换)防止类重复加载8.自定义类加载器需要注意什么重写findClass方法(not&nbsp;loadClass,避免破坏双亲委派)9.双亲委派模型有哪些破坏场景&nbsp;为什么要破坏Tomcat的WebAppClassLoader:Tomcat&nbsp;为每个&nbsp;Web&nbsp;应用创建独立类加载器,优先加载应用内的类(而非委托父类),目的是隔离不同&nbsp;Web&nbsp;应用的类(防止不同应用的同包同类冲突)JDBC&nbsp;的&nbsp;SPI&nbsp;加载:JDBC&nbsp;的核心接口java.sql.Driver由启动类加载器加载,但具体实现(如&nbsp;MySQL&nbsp;驱动)在第三方包,启动类加载器无法加载,因此&nbsp;DriverManager&nbsp;通过线程上下文类加载器(破坏双亲委派)加载实现类(可能会让详细说一下SPI机制一些热部署实现:自定义类加载器加载更新后的类10.类卸载条件类所有实例被完全回收&nbsp;类加载器被完全回收&nbsp;Class对象无任何引用(FullGC时发生11.介绍一下gc机制涉及对象可回收判定、垃圾收集算法、分代收集模型、垃圾收集器、GC&nbsp;触发时机等维度(问这么大&nbsp;吟唱启动12.常见gc算法标记-清除,标记-复制,标记-整理,分代收集13.介绍一下CMS和G1(1)CMS&nbsp;收集器(老年代专用)核心流程:初始标记(STW,标记&nbsp;GC&nbsp;Roots&nbsp;直接关联对象)→并发标记(无&nbsp;STW,遍历引用链)→重新标记(STW,修正并发标记的遗漏)→并发清除(无&nbsp;STW,清理可回收对象)优点:并发收集,STW&nbsp;时间短,适合低延迟场景缺点:产生内存碎片、CPU&nbsp;消耗高(并发阶段占用&nbsp;CPU)、依赖老年代空间预留(易触发&nbsp;Full&nbsp;GC)(2)G1&nbsp;收集器(全堆收集)核心流程:将堆划分为多个大小相等的&nbsp;Region,包含新生代&nbsp;Region&nbsp;和老年代&nbsp;Region;流程为初始标记→并发标记→最终标记→筛选回收(STW,优先回收垃圾多的&nbsp;Region)优点:兼顾吞吐量和延迟、可预测&nbsp;STW&nbsp;时间(通过-XX:MaxGCPauseMillis设置)、无内存碎片(回收时整理&nbsp;Region)缺点:内存占用高(维护&nbsp;Remembered&nbsp;Set)、小内存场景下性能不如&nbsp;CMS14.jvm如何判断对象是可回收的早期方案引用计数法(无法解决循环引用问题)可达性分析算法判定对象是否不可达,结合引用类型细分可回收时机,finalize&nbsp;机制完成最终判定15.能否将对象分配在栈上jvm针对“逃逸”做了优化分析对象的作用域是否逃出方法&nbsp;/&nbsp;线程,若逃逸则可直接分配在栈上&nbsp;无需gc16.jvm调优核心思路是什么监控&nbsp;分析&nbsp;参数调整&nbsp;验证17.一般会调整哪些jvm参数堆大小:-Xms2g&nbsp;-Xmx2g(初始堆&nbsp;=&nbsp;最大堆,避免堆动态扩展的开销)新生代大小:-Xmn512m(新生代占堆的&nbsp;1/4~1/3,过小会导致对象提前进入老年代)Survivor&nbsp;比例:-XX:SurvivorRatio=8(Eden:S0:S1=8:1:1,保证新生代对象有足够空间存活)晋升老年代年龄:-XX:MaxTenuringThreshold&nbsp;-XX:InitialTenuringThresholdGC&nbsp;收集器:-XX:+UseG1GC(默认推荐,兼顾吞吐量和延迟)、-XX:+UseZGC(低延迟场景)GC&nbsp;日志:-XX:+PrintGCDetails&nbsp;-Xloggc:gc.log(输出&nbsp;GC&nbsp;日志用于分析)元空间:-XX:MetaspaceSize=128m&nbsp;-XX:MaxMetaspaceSize=256m(限制元空间大小,避免元空间&nbsp;OOM)18.Jvm调优经验《没有经验!!》(回去等通知吧19.内存泄漏和OOM的区别?如何排查(1)内存泄漏:对象已无业务意义,但仍被引用(如ThreadLocal......),导致无法被&nbsp;GC&nbsp;回收,长期积累会引发&nbsp;OOM①&nbsp;jmap&nbsp;-dump:format=b,file=heap.hprof导出堆快照;②&nbsp;MAT分析快照,定位&nbsp;“无法回收的大对象”&nbsp;和&nbsp;“持有其引用的&nbsp;GC&nbsp;Roots&nbsp;③结合&nbsp;Arthas&nbsp;的jvm/heapdump命令定位泄漏代码(如静态&nbsp;Map&nbsp;未清理)(2)OOM:JVM&nbsp;内存不足(如堆&nbsp;/&nbsp;元空间&nbsp;/&nbsp;栈超出上限),无法为新对象分配内存,直接抛出&nbsp;OOM&nbsp;异常①&nbsp;看&nbsp;OOM&nbsp;类型(堆&nbsp;OOM&nbsp;/&nbsp;元空间&nbsp;OOM&nbsp;/&nbsp;栈&nbsp;OOM)②&nbsp;堆&nbsp;OOM&nbsp;分析对象分布(是否大对象过多)&nbsp;元空间&nbsp;OOM&nbsp;检查类加载数量(是否频繁动态生成类)&nbsp;栈&nbsp;OOM&nbsp;检查递归深度或线程数20.线上OOM问题如何排查21.如何分析gc日志22.线上频繁FullGC如何排查23.讲一下对jvm的理解(太大了&nbsp;上文内容挑一些吟唱24.jmmJava&nbsp;Memory&nbsp;Model&nbsp;Java&nbsp;内存模型,Java&nbsp;虚拟机规范中定义的一种抽象内存模型,并非物理内存的实际布局,其核心目标是解决多线程环境下的原子性、可见性、有序性问题,为多线程编程提供内存访问的一致性规则欢迎佬赐教上辈子🔪👨放🔥&nbsp;这辈子十月(底)秋招!!
查看23道真题和解析
点赞 评论 收藏
分享
评论
4
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务