Java实习面试必备:核心知识点全解析

发布时间:2026/6/25 18:30:30
Java实习面试必备:核心知识点全解析 Java实习面试全套知识点标准答案1.1 Java基础重中之重1. 数据类型、 和 equals、String、常量池1Java数据类型分为基本数据类型和引用数据类型基本类型8种存栈内存整数byte(1)、short(2)、int(4)、long(8)浮点float(4)、double(8)字符char(2)布尔boolean(1)引用类型存堆栈存地址类、接口、数组、包装类2 和 equals 区别基本类型比较值是否相等引用类型比较对象内存地址是否相同equals()Object原生实现等价于比较地址String、Integer等重写后比较对象内容值自定义类如需比较内容必须重写equals()配套重写hashCode()3String、字符串常量池String特性不可变底层char数组Java9后byte数组每次修改都会生成新字符串常量池作用复用字符串减少内存开销String s1 abc直接去常量池找有就复用没有新建放入池String s2 new String(abc)先在堆创建对象再去常量池创建/复用栈存堆地址拼接规则常量拼接ab编译期优化为ab走常量池变量拼接s1s2运行时new String不进常量池2. 面向对象封装、继承、多态、接口抽象类区别三大特性封装隐藏对象内部细节对外暴露访问方法privateget/set保证数据安全继承extends子类复用父类代码单继承子类可重写父类方法用super访问父类多态同一方法不同实现两个前提①父类引用指向子类对象 ②方法重写分为编译多态重载、运行多态重写接口 vs 抽象类对比抽象类 abstract class接口 interface继承单继承多实现构造方法有构造供子类调用无构造变量可普通变量、常量只能public static final常量方法普通方法、抽象方法、静态方法Java8前只有抽象8有default/static9私有方法关键字extendsimplements设计思想模板复用is-a行为规范can-do3. 集合ArrayList/LinkedList、HashMap底层数组链表红黑树1ArrayList vs LinkedListArrayList底层动态数组优点随机访问快get(index)O(1)遍历快缺点中间增删需要移动元素效率低初始容量10扩容1.5倍LinkedList底层双向链表优点首尾增删只改指针效率高缺点随机查找必须遍历O(n)查询慢2HashMap底层JDK1.8底层数组 单向链表 红黑树存储单元NodeK,V存hash、key、value、下一个节点指针存储流程计算key的hash值对数组长度取模得到数组下标下标无元素直接放入数组下标有元素哈希冲突链表长度8追加单向链表链表长度≥8 且数组长度≥64链表转为红黑树查询O(logn)优化链表O(n)红黑树节点6退化为链表扩容默认容量16负载因子0.75元素数量超过容量*0.75扩容数组翻倍重新hash迁移元素线程不安全多线程扩容、插入会出现死链、数据丢失并发用ConcurrentHashMap4. 异常体系、IO、线程基础、synchronized、volatile1异常体系Throwable分两大分支Error系统级错误OOM、栈溢出程序无法处理Exception程序可处理异常受检异常编译强制捕获/throwsIO、SQL异常等运行时异常RuntimeException无需强制捕获空指针、数组越界、类型转换异常2IO基础分为BIO、NIO实习掌握BIO即可字节流InputStream/OutputStream处理文件、图片等二进制字符流Reader/Writer处理文本文件自带编码转换装饰器模式BufferedInputStream缓冲流提升读写速度3创建线程4种方式继承Thread类重写run()调用start()启动实现Runnable接口传入Thread构造器推荐避免单继承限制实现CallableFutureTask可获取线程返回值、抛异常线程池Executors生产环境推荐复用线程减少创建销毁开销4synchronized 同步锁作用保证原子性、可见性、有序性解决并发竞争锁对象实例方法锁当前this对象静态方法锁类Class对象代码块手动指定锁对象底层对象头监视器锁偏向锁→轻量级锁→重量级锁锁升级不可降级5volatile核心作用保证可见性、禁止指令重排不保证原子性不能替代锁多线程计数场景失效原理强制变量修改立即刷入主存其他线程缓存失效内存屏障阻止指令重排典型场景状态标记、双重校验锁DCL单例1.2 MySQL数据库必考1. 增删改查、多表联查、子查询基础CRUD-- 增INSERTINTO表(字段)VALUES(值);-- 删DELETEFROM表WHERE条件;-- 改UPDATE表SET字段值WHERE条件;-- 查SELECT字段FROM表WHERE条件;多表联查内连接INNER JOIN只返回两边匹配数据select * from A inner join B on A.idB.a_id左连接LEFT JOIN左表全部右表匹配不到填null右连接RIGHT JOIN右表全部左表匹配不到填null子查询标量子查询返回单个值where后使用表子查询返回多行多列from后当做临时表必须起别名2. 索引、B树、联合索引最左匹配1什么是索引索引是数据库磁盘上的有序数据结构加速查询代价占用存储空间、降低增删改速度维护索引2InnoDB底层B树B树特点所有数据只存在叶子节点非叶子只存索引键层级更低、IO更少叶子节点双向链表串联范围查询极快对比B树B树每个节点存数据IO次数更多范围查询差InnoDB主键索引聚簇索引叶子存完整行数据普通索引二级索引叶子存主键id回表查询完整数据3联合索引最左匹配原则建立索引idx(a,b,c)查询条件从左到右匹配生效场景where a? / where a? and b? / where a? and b? and c?失效场景跳过最左前列直接查b/c索引断裂后面字段失效例where b? and c? 索引完全失效where a? and c? 仅a生效c失效优化等值放前范围查询 like %xx后面字段索引失效3. 事务四大特性、隔离级别、脏读幻读1事务四大特性 ACID原子性Atomic事务全部执行成功或全部回滚不可分割一致性Consistent事务前后数据完整性不变隔离性Isolate多事务互不干扰由隔离级别控制持久性Durable事务提交后数据永久写入磁盘宕机不丢失2四大隔离级别从低到高读未提交Read Uncommitted可读到未提交数据存在脏读、不可重复读、幻读读已提交Read CommittedOracle默认只能读已提交解决脏读存在不可重复读、幻读可重复读Repeatable ReadMySQL InnoDB默认同一事务多次读取数据一致解决脏读、不可重复读存在幻读MVCC机制实现串行化Serializable最高级别完全串行执行所有问题都解决并发性能极差3三类并发问题脏读一个事务读到另一个事务未提交的修改数据对方回滚后读到无效脏数据不可重复读同一事务内两次读取同一行中间被其他事务修改提交两次结果不一致幻读同一事务内范围查询其他事务插入/删除符合条件数据再次查询数量变化1.3 框架 Spring SpringBoot MyBatisSpring、SpringBoot 核心1. IOC、AOP是什么IOC 控制反转传统开发new创建对象程序主动控制依赖IOC思想反转对象控制权Spring容器负责创建、管理对象Bean程序直接注入使用DI依赖注入是IOC实现方式容器自动把依赖对象注入目标Bean解耦代码AOP 面向切面编程作用横向抽取通用公共逻辑日志、权限、事务、接口耗时不侵入业务代码核心概念切面、切点、通知前置/后置/异常/环绕通知实现JDK动态代理实现接口、CGLIB代理类无接口2. 依赖注入、自动配置原理三种依赖注入方式构造器注入推荐、2. set方法注入、3. Autowired字段注入SpringBoot自动配置原理核心注解EnableAutoConfiguration启动时读取META-INF/spring.factories配置文件加载所有自动配置类XxxAutoConfiguration通过Conditional条件注解存在对应依赖包、不存在用户自定义Bean时自动装配组件application.yml/application.properties绑定配置类XxxProperties自定义参数3. SSM完整CRUD项目搭建流程引入依赖spring-web、spring-jdbc、mybatis、mysql驱动、spring-boot-starter-test配置yml数据库连接、MyBatis映射文件路径、实体类别名实体Entity对应数据库表Mapper接口写CRUD抽象方法Mapper.xml映射文件写SQL绑定接口方法Service层接口Impl注入Mapper封装业务逻辑Controller层注入Service接收前端请求返回数据启动类加MapperScan扫描Mapper接口MyBatis映射文件、#{} 和 ${} 区别#{}预编译占位符底层PreparedStatement参数加单引号防止SQL注入会自动转义字符串适合传字段值select*fromuserwhereid#{id}${}字符串直接拼接直接拼接文本无预编译存在SQL注入风险不会自动加引号适合动态表名、排序字段select*from${tableName}orderby${sortColumn}开发规范优先#{}仅动态表/列使用${}1.4 计算机网络基础1. HTTP/HTTPS、GET和POST区别、状态码1HTTP vs HTTPSHTTP明文传输端口80无加密数据容易被抓包篡改HTTPS HTTP SSL/TLS加密端口443传输数据对称加密证书非对称加密交换密钥防窃听、防篡改、身份认证更安全性能略有损耗2GET 和 POST 核心区别参数位置GET参数拼在URLPOST放请求体body数据大小GET受URL长度限制POST无理论上限缓存GET默认浏览器缓存POST一般不缓存安全性GET参数暴露地址不适合传敏感数据POST相对更安全语义规范GET用于查询无数据修改POST用于新增/提交数据幂等GET天然幂等多次请求结果一致POST非幂等重复提交生成多条数据3常见HTTP状态码2xx 成功200 请求正常完成201 创建资源成功3xx 重定向301永久重定向302临时重定向304资源未修改走缓存4xx 客户端错误400参数错误401未登录无认证403权限不足404资源不存在405请求方法不允许5xx 服务端错误500服务器内部异常503服务不可用2. TCP三次握手、四次挥手简易背诵版三次握手建立连接客户端 → 服务端SYN报文客户端请求同步客户端进入SYN_SENT服务端 → 客户端SYNACK报文同意连接确认客户端报文服务端SYN_RCVD客户端 → 服务端ACK报文确认服务端同步双方进入ESTABLISHED连接就绪核心目的确认双方收发能力正常协商初始序列号四次挥手断开连接客户端 → 服务端FIN客户端不再发数据进入FIN_WAIT1服务端 → 客户端ACK收到关闭请求继续传输剩余数据客户端FIN_WAIT2服务端 → 客户端FIN服务端数据传输完毕准备关闭客户端 → 服务端ACK确认关闭客户端等待2MSL超时彻底断开服务端直接关闭核心原因TCP全双工通信一方关闭后另一方可能还有残留数据发送必须分两次发送FIN