Java面经汇总 1

小厂Java面经1

1、自我介绍2、简单说一下对Java多态的理解3、介绍一下用的比较多的关键字4、private关键字和public关键字的区别5、介绍一下线程的创建方式6、线程池的核心参数7、什么时候会触发拒绝策略8、你有自己实现过拒绝策略吗9、线程中用到了哪些方法10、谈谈你对索引的理解11、什么情况下不推荐使用索引12、事务的隔离机制,mysql默认的是哪个13、讲一下乐观锁、悲观锁14、讲一下红黑树15、讲一下冒泡排序16、讲一下单例模式17、redis的持久化方式18、怎么解决redis和数据库之间数据不一致19、你实习的时候部署过redis机群吗20、讲一下Spring的AOP和IOC21、你的项目中对异常怎么处理

22.了解微服务吗

23.微服务中的组件了解哪些反问:反问三件套

作者:看日出看日落链接:https://www.nowcoder.com/feed/main/detail/f750c43e2fce432db0e36c9d0a8ac885?sourceSSR=search来源:牛客网

下面是我在实习中协助面试 然后在牛客上挑选了一些完整的面试问题借助豆包完成的面经答案思路汇总

小厂Java面经1参考答案

1. 自我介绍

简要介绍个人背景、技术栈、项目经验及亮点,突出与岗位相关的技能和成果。示例:“面试官您好,我是XX,毕业于XX学校,主修计算机科学。目前有X年的Java开发经验,熟悉Spring Boot、MySQL、Redis等技术,参与过XX项目,负责后端模块开发,使用Redis优化了查询性能,提升了系统吞吐量。对分布式系统和微服务有一定了解,业余时间喜欢研究开源框架和算法。”

2. 对Java多态的理解

多态是面向对象的三大特性之一,指同一方法在不同对象中有不同实现方式。体现为:

  • 编译时多态(静态):方法重载(Overload)。
  • 运行时多态(动态):方法重写(Override),通过父类引用指向子类对象(如 Animal dog = new Dog())。

示例

class Animal { void sound() { System.out.println("Animal sound"); } }
class Dog extends Animal { void sound() { System.out.println("Bark"); } }
Animal myDog = new Dog();
myDog.sound(); // 输出 "Bark"(运行时绑定)

3. 常用的Java关键字

  • static:修饰类变量、方法,属于类而非实例。
  • final:修饰类(不可继承)、方法(不可重写)、变量(常量)。
  • synchronized:保证线程同步。
  • volatile:确保变量可见性,禁止指令重排。
  • try/catch/finally:异常处理。

4. private与public的区别

  • private:仅本类内部可见,外部类无法直接访问。
  • public:所有类均可访问。
  • 示例
public class Example {
    private int secret = 1; // 仅本类可访问
    public int value = 2;   // 所有类可访问
}

5. 线程创建方式

  1. 继承Thread类:重写run()方法,调用start()启动线程。
  2. 实现Runnable接口:实现run(),将实例传入Thread构造器。
  3. 实现Callable接口:配合FutureTask获取返回值。
  4. 线程池:通过ExecutorService提交任务(推荐)。

示例

// 方式2
Runnable task = () -> System.out.println("Running");
new Thread(task).start();

6. 线程池核心参数

  • corePoolSize:核心线程数(常驻)。
  • maxPoolSize:最大线程数。
  • keepAliveTime:非核心线程空闲存活时间。
  • workQueue:任务队列(如ArrayBlockingQueue)。
  • ThreadFactory:线程工厂。
  • RejectedExecutionHandler:拒绝策略(如AbortPolicy)。

7. 触发拒绝策略的条件

当同时满足以下条件时:

  1. 线程池处于SHUTDOWN状态。
  2. 任务队列已满且当前线程数达到maxPoolSize

8. 自定义拒绝策略

可通过实现RejectedExecutionHandler接口自定义策略,例如记录日志或降级处理。示例

public class CustomPolicy implements RejectedExecutionHandler {
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        System.out.println("Task rejected: " + r);
    }
}

9. 线程常用方法

  • start():启动线程。
  • sleep():线程休眠(不释放锁)。
  • wait()/notify():对象锁的等待与唤醒。
  • join():等待线程结束。
  • yield():让出CPU时间片。

10. 索引的理解

索引是数据库中加速查询的数据结构(如B+树),通过减少磁盘I/O提高查询效率。优点:加速查询。缺点:占用存储空间,降低写操作速度。

11. 不推荐使用索引的情况

  • 数据量极小的表。
  • 频繁更新的字段。
  • 区分度低的字段(如性别)。
  • 查询中很少使用的列。

12. 事务隔离级别

  • 读未提交(Read Uncommitted):可能脏读。
  • 读已提交(Read Committed,Oracle默认):避免脏读。
  • 可重复读(Repeatable Read,MySQL默认):避免不可重复读。
  • 串行化(Serializable):避免幻读,性能最低。

13. 乐观锁与悲观锁

  • 乐观锁:假设无冲突,通过版本号(如CAS)实现。适用于读多写少。
  • 悲观锁:假设有冲突,直接加锁(如synchronized)。适用于写多读少。

14. 红黑树

一种自平衡二叉查找树,特性:

  1. 节点为红或黑。
  2. 根和叶子节点(NIL)为黑。
  3. 红节点的子节点必为黑。
  4. 任一节点到叶子的路径包含相同数量黑节点。优点:插入/删除效率优于AVL树,适合频繁写操作。

15. 冒泡排序

步骤

  1. 比较相邻元素,若前大后小则交换。
  2. 每轮将最大元素“冒泡”到末尾。时间复杂度:O(n²)。优化:若某轮无交换,提前终止。

示例

void bubbleSort(int[] arr) {
    for (int i=0; i<arr.length-1; i++) {
        for (int j=0; j<arr.length-1-i; j++) {
            if (arr[j] > arr[j+1]) swap(arr, j, j+1);
        }
    }
}

16. 单例模式

确保类仅有一个实例,并提供全局访问点。实现方式

  • 饿汉式:类加载时初始化。
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() { return instance; }
}
  • 懒汉式(双重检查锁):延迟加载,线程安全。
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) instance = new Singleton();
            }
        }
        return instance;
    }
}

17. Redis持久化方式

  • RDB:定时生成数据快照,恢复快但可能丢数据。
  • AOF:记录写操作日志,数据更安全但文件较大。
  • 混合模式(Redis 4.0+):结合两者优势。

18. Redis与数据库数据一致性

  • 策略

19. Redis集群部署经验

若未实际部署,可回答了解理论:

  • 主从复制:数据备份与读写分离。
  • 哨兵模式:自动故障转移。
  • Cluster模式:分片存储,支持水平扩展。

20. Spring AOP与IOC

  • IOC(控制反转):对象由容器创建和管理,通过DI(依赖注入)解耦。
  • AOP(面向切面):通过动态代理实现日志、事务等横切关注点。

21. 项目中的异常处理

22. 微服务了解

微服务是一种架构风格,将单体应用拆分为独立部署的小服务,通过轻量级通信协作。

23. 微服务组件

  • 注册中心:Eureka、Nacos。
  • 配置中心:Spring Cloud Config、Nacos。
  • 网关:Zuul、Spring Cloud Gateway。
  • 负载均衡:Ribbon。
  • 熔断器:Hystrix、Sentinel。
  • 链路追踪:Sleuth、Zipkin。

反问建议

  1. 团队技术栈与业务方向?
  2. 新人培养机制与成长路径?
  3. 当前项目面临的挑战?

总结:回答问题需清晰简洁,结合示例或场景说明,对不确定点可诚实说明但展现思考过程。

时雨h 的实习 面试记录 文章被收录于专栏

时雨h 的实习 面试记录

全部评论
直接开始八股吟诵了
1 回复 分享
发布于 2025-03-14 12:57 广东
整理的好好
1 回复 分享
发布于 2025-02-19 23:51 四川
第七条不是同时满足吧
1 回复 分享
发布于 2025-02-19 14:52 江苏
点赞 回复 分享
发布于 2025-02-20 10:33 广东

相关推荐

3.5一面&nbsp;一、&nbsp;项目1.&nbsp;简单介绍一下这个系统的知识库问答架构,从文档入库到最后回答的完整链路是怎样的?2.&nbsp;向量检索用的是什么索引类型?3.&nbsp;在召回之后有没有做重排(Rerank)之类的操作?4.&nbsp;你知识库的准确率和召回率是怎么评估的?5.&nbsp;Spring&nbsp;AI&nbsp;Alibaba&nbsp;的&nbsp;Function&nbsp;Calling&nbsp;是怎么实现的?模型如何决定调用哪个工具?6.&nbsp;如果工具调用失败了,你们设计了什么处理机制?7.&nbsp;Execute&nbsp;Plan&nbsp;模式具体是怎么实现的?8.&nbsp;平时哪种模型用的比较多?9.&nbsp;平时编码时会用哪些模型?10.&nbsp;在选择向量数据库时,有没有看过其他的(如&nbsp;ES、Milvus&nbsp;以外的选择)?它们之间的区别你大概有概念吗?11.&nbsp;在写&nbsp;Prompt的时候,你有哪些实践经验或设计原则?12.&nbsp;Graph&nbsp;Rag&nbsp;/&nbsp;Agentic&nbsp;Rag了解过吗13.&nbsp;在秒杀下单中,Lua&nbsp;脚本具体做了什么?为什么要用&nbsp;Lua,而不是分开执行多条指令?14.&nbsp;这个项目你自己做过压测吗?15.&nbsp;对系统能扛住的流量(QPS)有没有具体的概念?16.&nbsp;对于什么时候该上缓存、什么时候该上本地缓存,你大概的概念是什么二、&nbsp;Java&nbsp;基础1.&nbsp;线程池的核心参数有哪些?2.&nbsp;线程池内部的具体工作流程是怎样的?3.&nbsp;核心线程数和最大线程数一般怎么确定/计算?三、&nbsp;场景题1.&nbsp;你觉得目前&nbsp;RAG(检索增强生成)最大的瓶颈是什么?2.&nbsp;假设要给电商平台搭建一个百万/千万级的商品知识库问答系统,你会怎么设计?3.&nbsp;针对商品信息(如价格、描述)可能被商家动态更新的情况,你的知识库设计需要考虑什么?四、手撕:二叉树的层序遍历反问面试表现,面试官当场告知通过
查看23道真题和解析
点赞 评论 收藏
分享
面试时长:37分钟,二面27分钟,hr面10分钟1.问了点个人,学校信息和家庭信息试探稳定性。2.职业规划是什么3.一个成绩表,有学生姓名,课程成绩,课程分数三个列,比如:张三,语文,70;张三,数学,80;写一个sql,去对学生总成绩进行排序。完整复述下你的sql。(昨天湖北信航一模一样的面试题,差点没憋住笑)4.sum()和count()的区别?(一个记录数据行数,一个记录某列数值的总和)5.我看你实习经历有优化线上慢查询的经历,如果你遇到了慢查询,你的排查逻辑是什么?(答的是,先看sql是否需要优化,再看接口逻辑是否需要优化,最后看要不要加中间件,比如mq限流)6.假设有一个字典表,后端要频繁访问字典表并字段转换,你应该怎么优化?(其实就是数据库压力大的问题,加redis缓存数据,减少数据库压力,其实我想再答个mq,但没敢答,不知道对不对)7.使用redis时要注意什么?(八股吟唱了redis基本数据结构的不同场景用法,和缓存三件套的解决思路)8.redis的大key问题怎么解决?(没背,瞎答一通给面试官整笑了,反正不让问题落地上这一块)9.如何保证rabbitmq的不重复消费呢?(我答的是从队列方面,采用消费者确认机制。接口方面,业务要做幂等性处理,并八股吟唱)10.如果我才用ack模式的话,并发场景下如何控制它的不重复消费?(没背,答的是给topic下每个队列绑定对应的消费者,生产者根据消息类型送往对应的队列)11.说下自己的优缺点。12.期望薪资。13.你觉得你和同校同龄人对比是怎样的。-------------------------过了几分钟二面面试官把技术负责人叫来现场hr面。14.说说自己优缺点。15.觉得自己ai用的怎么样。16.说说自己用ai的规范。17.对使用ai的态度是什么样的。18.能接受写前端吗。19.反问环节公司环境不错,至少不是什么野鸡公司,人也挺多的。但是要求进去全栈,且实习生也要加班到9点。二面面试官倒是挺好的,答的好就给予肯定,答偏或者答错了现场引导或者解答
查看16道真题和解析
点赞 评论 收藏
分享
查看15道真题和解析
点赞 评论 收藏
分享
评论
18
82
分享

创作者周榜

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