25年10月大连云通信息技术 Java开发 实习 一面

#JAVA##JAVA面经##JAVA内推#

先简单聊聊自己吧~学校专业、怎么接触编程的,最近在忙些啥?

“我是XX大学计算机科学与技术专业大四学生。高中因信息学竞赛接触C++,大学用Java写第一个‘课程表查询系统’时被其工程化魅力吸引。最近三件事:
1️⃣ 毕业设计:《基于微服务的校园活动平台高可用优化》,用Spring Cloud + Redis + RabbitMQ重构单体架构
2️⃣ 技术沉淀:系统梳理JVM调优、分布式事务方案,输出技术博客5篇
3️⃣ 实习准备:深度复盘校园项目,针对性补强分布式系统知识
始终相信:技术人的成长 = 扎实基础 × 解决真实问题 × 持续反思。”

多线程有接触过吗?Java里创建线程一般有哪几种方式?你项目里用过哪种?

“接触深入。三种核心方式:
🔹 继承Thread(少用,单继承限制)
🔹 实现Runnable(解耦任务与线程)
🔹 线程池(ExecutorService)(项目首选)
项目实践

  • OJ判题服务:ThreadPoolExecutor自定义线程池(核心线程=CPU*2,队列=100)
  • 优势:
    ✅ 避免频繁创建销毁线程(资源复用)
    ✅ 精确控制并发数(防OOM)
    ✅ 任务拒绝策略兜底(CallerRunsPolicy触发降级)
    认知:直接new Thread是‘技术债’,线程池是生产环境底线。”

多个线程要共享数据,你会怎么处理?

“按场景精准选型:

场景 工具 项目实例
计数器 AtomicInteger 判题服务并发计数
缓存Map ConcurrentHashMap 用户会话存储(key=token)
复杂状态 ReentrantLock + Condition 抽奖库存扣减(lock.tryLock(3s))
简单同步 synchronized 单例模式双重检查锁
避坑经验
⚠️ 避免synchronized大方法(锁粒度粗)
⚠️ ConcurrentHashMapcomputeIfAbsent慎用(嵌套调用可能死锁)
✅ 优先用JUC工具类(经高并发验证)”

继承和接口在写代码时怎么选?

核心原则

  • 继承is-a关系 + 需复用父类实现(慎用!单继承限制)
  • 接口can-do能力 + 多实现扩展(首选)
    项目对比
    🔸 用接口(支付策略):
public interface PaymentStrategy { void pay(Order order); }
public class AlipayStrategy implements PaymentStrategy { ... }
// 新增微信支付只需实现接口,零修改原有代码

🔸 慎用继承:曾用BaseController抽公共方法,后因业务差异导致子类冗余重写。现改用:

  • 工具类(静态方法)
  • 组合模式(Service注入通用组件)
    感悟:接口定义契约,继承传递实现——优先面向接口编程。”

能手写一个排序吗?

“选归并排序(稳定、O(nlogn),适合链表/外部排序):
思路三步
1️⃣ :递归拆数组为左右两半(mid = left + (right-left)/2)
2️⃣ :左右子数组分别排序
3️⃣ :双指针合并两个有序数组(辅助数组暂存)
关键代码逻辑

void mergeSort(int[] arr, int l, int r) {
    if (l >= r) return;
    int mid = l + (r-l)/2;
    mergeSort(arr, l, mid);      // 左半排序
    mergeSort(arr, mid+1, r);    // 右半排序
    merge(arr, l, mid, r);       // 合并
}
void merge(int[] arr, int l, int mid, int r) {
    int[] tmp = new int[r-l+1];
    int i=l, j=mid+1, k=0;
    while (i<=mid && j<=r) tmp[k++] = arr[i] <= arr[j] ? arr[i++] : arr[j++];
    while (i<=mid) tmp[k++] = arr[i++]; // 补剩余
    while (j<=r) tmp[k++] = arr[j++];
    System.arraycopy(tmp, 0, arr, l, tmp.length); // 覆盖原数组
}

项目应用:OJ系统中合并两个学生的提交记录(按时间排序),用此法避免不稳定排序导致的显示错乱。”

数据库主要用MySQL吧?索引这块帮了啥忙?

聚簇索引(主键索引):

  • 数据与索引存一起,查主键直接得数据(如SELECT * FROM orders WHERE id=100
  • 项目价值:订单查询避免回表,耗时<5ms
    联合索引
  • orders(user_id, status, create_time)
  • 三重收益
    ✅ 覆盖索引:SEL(Extra: Using index) ✅ 最左前缀: 走索引 ✅ 避免filesort: 直接走索引排序 :索引不是越多越好,每个索引都是写入成本——只为高频查询建。”

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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