浩鲸科技一面凉经
📍面试公司:浩鲸科技
👜面试岗位:java实习
📖面试问题:
- 介绍了一下项目
- xxl-job路由策略(就记得一个轮询当时,常用的还有故障转移、分片广播等)
- java的有序集合有哪些(list下的ArrayList、LinkedList、Vector map下的LinkedHashmap、TreeMap)
- hashmap的常用方法(get、put),hashmap的扩容机制(添加元素或初始化时调用resize方法扩容,第一次添加数据初始化数组长度为16,之后每次达到扩容阈值(数组长度*负载因子(默认0.75))时扩容为原来的两倍,扩容后会创建新数组用来存储老数组中的元素,没有hash冲突的节点,直接使用e.hash&(newCap-1)计算新数组的位置,如果是红黑树,走红黑树的添加,如果是链表,则需要遍历链表,可能需要拆分链表,判断e.hash&oldCap是否为0,该元素要么停留在原位置要么移动的原始位置+增加的数组大小则换个位置上
- 问了下用的jdk版本(感觉可能是想问jdk8的新特性(Lambda表达式、Stream API、函数式接口等)我回的17就下一个问题了)
- 堆和栈的区别(管理方式:堆由垃圾回收器管理,栈由编译器自动管理 内存空间:堆空间大且不连续,栈空间小且连续 存储数据类型:堆存储对象实例和数组,栈存储基本数据类型、对象引用和函数调用信息 访问速度:堆快栈慢 生命周期: 堆由对象引用决定,栈随函数结束释放)
- java变量存储在哪个区(栈内存:存储局部变量和方法调用的上下文 堆内存:存储所有创建的对象和数组 常量池:存储常量值)
- java的基本数据类型(int long short byte double float boolean char)
- byte占几个字节,可以传中文吗(一个字节,不能)
- 悲观锁和乐观锁的区别(基本概念:悲观锁假定并发冲突会发生,对数据修改采用保守策略提前加锁;乐观锁认为一般情况下不会并发冲突,只有提交更新时才会检查数据是否被其他线程修改过,若修改过就回滚当前事务 悲观锁加锁导致性能开销高适合高并发写的场景,乐观锁不加锁性能高适合低并发读场景)
- 聊聊volatile、final关键字(volatile 保证线程可见性、防止指令重排 final修饰的变量不能被修改,方法不能被重写,类不能被继承)
- 线程池怎么实现(常见类型FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledThreadPool 核心参数:corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler)
- 介绍下Threadlocal(Threadlocal是多线程中用于解决线程安全的一个操作类,他可以为每个线程分配独立副本从而解决了变量并发访问冲突的问题,Threadlocal同时实现了线程内资源共享)
- 线程的生命周期(创建、可执行(就绪、运行)、等待、阻塞、死亡)
- 怎么创建线程(继承Thread类、重写Runnable、Callable接口、线程池创建)
- 重写接口和继承Thread类的区别(继承Threa类受限于java单继承机制无法在继承其他类,且线程与业务逻辑耦合度高;实现接口可以避免单继承机制,适用于资源共享场景。)
- java中Bean相比于其他new的对象特点(属性私有、提供公共访问方法、包含默认无参构造方法、可序列化)
- 单例模式如何实现(饿汉式、懒汉式、双重锁、静态内部类、枚举)
- #{}和${}的区别(#{}预编译处理,将参数转换为?可以防止sql注入,${}字符串拼接,存在安全风险)
- Mybatis中常用标签,ResultMap和ResultType区别(常用标签select、insert、if、foreach、where。。。,ResultType指定返回类型,ResultMap自定义结果映射)
- Mybatis二级缓存如何开启,一级缓存有什么用(开启二级缓存在 mybatis-config.xml 中配置 <setting name="cacheEnabled" value="true"/>;在 mapper.xml 中添加 <cache/> 标签;实体类实现 Serializable 接口。一级缓存作用基于 SQL 会话(
SqlSession
)的缓存,同一会话中重复查询相同 SQL,直接从缓存取结果,减少数据库查询,提升性能。) - AOP的应用场景(记录日志、事务管理、权限控制、性能监控、异常处理等)
- Redis的基本数据类型,存储json用哪个数据类型(String、Hash、Set、Zset、List,hash或序列化为字符串用String)
- Mysql默认隔离级别(可重复读)
- Spring事务注解失效场景(非public方法修饰、方法上异常捕获处理但自己处理了异常没有抛出、方法所在的类没有被Spring管理等)
- mysql索引类型(B数索引、哈希索引、全文索引、空间索引......)
- 创建索引的sql怎么写(create index on 表名(字段名)create index on students (student_id)在学生表学号字段船建索引)
- 连表查询时需要创建临时表怎么写sql(-- 创建临时表 CREATE TEMPORARY TABLE temp_table AS SELECT column1, column2 FROM original_table WHERE condition; )
- 其他
🙌面试体验:面试官还可以会给提示,不过我答得不咋地,八股不熟,太菜了还是