安恒信息Java开发实习面试题

面试题目

项目与业务开发

  • 实习期间主要做的事
  • 项目大文件上传遇到的问题
  • 批量插入怎么处理
  • 有一堆字符串,如何存储查找“aaa”字符串
  • 如何使用Redis
  • 如何在Controller里面定义save方法
  • 查询的时候xml怎么写

Java并发与底层

  • AQS原理
  • synchronized锁的是什么
  • 线程AB同时调用同一个对象方法 vs 各自创建对象调用方法(互斥分析)
  • 线程执行完之后才执行剩下的逻辑用什么(CountdownLatch使用)
  • JAVA内存模型
  • JAVA堆对象经历的过程
  • SpringBoot自动装配原理
  • 如何创建线程池,七大参数及工作原理

数据库与Linux

  • 实习遇到的MySQL问题
  • 联合索引、MVCC、MySQL索引数据结构
  • Linux通过文件查找字符串
  • Linux部署JAVA项目
  • Linux后台一直运行JAVA项目
  • Linux编辑文件

参考解析

  • AQS原理:AQS通过一个volatile的int变量state表示同步状态,并维护一个FIFO的CLH队列。通过CAS操作修改state,获取锁失败的线程会被封装成Node节点放入队列中自旋或阻塞等待。
  • synchronized锁对象:锁住的是对象实例(非静态方法)或Class对象(静态方法)。若线程调用同一对象的synchronized方法则互斥;若各自创建新对象,则锁定的是不同对象,互不干扰。
  • CountDownLatch:用于控制线程协作,调用await()的线程会阻塞,直到其他线程调用countDown()将计数器归零,适用于“等一组线程执行完再走下一步”的场景。
  • SpringBoot自动装配:基于@EnableAutoConfiguration,通过spring.factories读取配置类,利用@Conditional按需加载Bean,极大简化了传统XML繁琐的配置过程。
  • 线程池七大参数:核心线程数、最大线程数、空闲生存时间、时间单位、阻塞队列、线程工厂、拒绝策略。工作原理为优先核心线程,满了放队列,队列满了扩容至最大,再满则触发拒绝策略。