当前位置: 首页 > news >正文

面试准备first

面试准备——八股文,简单算法,项目介绍

八股文

main方法输出HellowWorld会产生几个线程

main线程,gc垃圾回收线程,Finalizer 调用对象的 finalize() 方法
Reference Handler 处理软/弱/虚引用的引用队列
Signal Dispatcher 处理JVM信号,如中断、终止等

异常介绍一下

Throwable类是所有异常和错误的父类
Erro表示JVM错误,像内存溢出
Exception如下:
受检查异常:一定要编译才能运行,比如IOException,SQLException
检查异常:不强制捕获,但是声明后可以捕获程序错误
自定义

接口类和抽象类的区别,从定义的关键字,变量,方法,设计层面说一下

在实际开发中,我主要使用接口来定义业务模块的功能规范,比如在 Spring 项目中,我会使用接口作为 Service 层的抽象,并通过具体的 ServiceImpl 实现类完成具体逻辑,这样可以便于后期的 AOP 切面编程、Mock 测试和解耦设计。
接口使用 interface 关键字,里面定义的方法默认是 public abstract,变量默认是 public static final,也就是全局常量。
相比之下,抽象类我用得较少,它通过 abstract 关键字定义,使用 extends 继承。抽象类可以包含抽象方法,也可以有构造方法、成员变量和普通方法,更适合在多个子类之间复用通用逻辑。抽象方法子类必须实现。

ArrayList和LinkedList的区别

ArrayList 底层是动态数组,支持根据索引快速读取元素,因此读操作快,但插入或删除时需要移动数组元素,写操作相对较慢;而 LinkedList 是基于双向链表实现的,插入和删除元素时只需调整节点指针,因此写操作快,但访问元素时需要遍历链表,读操作较慢。

sql题,一个表有三个字段,班级id,学生id,成绩id,查出每个班级的前3名。

Select 	class_id,scores,student_id
from(Select 	class_id,scores,student_id,ROW_NUMBER() OVER(PARTITION BY class_id ORDER BY scores DESC)  AS Tfrom Table)AS T
WHERE t <= 3 
ORDER BY class_id,t;

讲一下spring的两大特性

ioc是控制反转,比如将对象创建管理等交给spring容器,由容器统一管理bean,比如我们的注解配置,xml配置,config配置类,ontroller,service,requestbody,目的是实现解耦合,降低代码之间的依赖,还有aop是切片编程,把重复逻辑抽取出来让核心业务更存粹,比如@transactional事务回滚,还有日志就是在每个步骤写上注释,before after打印日志

讲一下hashmap底层原理

hashmap的底层是数组、链表和jdk8以后为了解决哈希冲突的红黑树,数据会通过计算的hash值定位在存放的数组桶,桶里的数据以链表形式存放,当超过8时会转换成红黑树
初始容量:默认 16(可以指定)
装载因子(load factor):默认 0.75
当 size >= 容量 × 负载因子,会扩容为原来的 2 倍

HTTP 常见状态码

200成功
404资源不存在
401未登录
403权限不够
500服务器错误
301:永久重定向

Spring Boot 自动加载实现机制

Spring Boot 实现自动加载的核心是自动装配机制
@EnableAutoConfiguration类
SpringBoot 会扫描 classpath 下的 spring.factories 配置文件,加载各种自动配置类,并根据上下文环境和条件注解自动生效,极大地减少了配置代码,提升了开发效率。

你了解分布式锁吗

redission里面的setnx里面,k,v,时间实现加锁

mybatis里面#和$的区别

#是字符值,$是字符串拼接

Java String、StringBuffer 和 StringBuilder 的区别

String 是不可变对象,每次拼接都是新对象。
StringBuffer 是线程安全的,但性能比 StringBuilder 差。
StringBuilder 是非线程安全的,但性能最好,推荐用于单线程拼接。

联合索引

  • 创建联合索引
    CREATE INDEX idx_course_user ON lesson(course_id, user_id);

INDEX idx_course_user (course_id, user_id) 是建表语句里的索引定义写法,是告诉数据库建表的时候顺便创建这个索引。
CREATE INDEX idx_course_user ON lesson(course_id, user_id); 是给已经存在的表新建索引的独立语句。

JVM 内存区域

程序计数器


本地方法栈
方法区

springboot

Spring Cloud提供了服务注册与发现、负载均衡、断路器、网关等功能

三次握手和四次握手

三次:
确定连接——客户端向服务端发送syn包,然后服务端确认回复syn+ack给客户端,负端再给客户端发送ack
四次:
取消连接——客户端发送fin,服务端接受发送ack,过段时间发送fin,客户端给ack

给一个字符串数组,返回出现最多的字符串

Map<String,Integer> map = new HashMap<>();
for(String s : arr){map.put(s,map.getOrDefault(s,0)+1);
}
String res ="";
int maxCount = 0;
for(Map.Entry<String,Integer> entry : map.entrySet){if(entry.getValue() > maxCount){maxCount = entry.getValue();res = entry.getKey();}
}

1本次面试总结

居然tm什么都没考??
八股文还是要更系统的看一遍
必须要完整过一遍项目,整个流程内部要搞清楚
看一下sql视频,很多简单sql都写不出来
算法题必须把简单全部过掉
时间(20)天,7.10号之前做完

第二次面试6.29

底层基础

JDK(Kit)包括JRE (Environment) -> JVM
==比较的是对象的内存地址(引用),而非值。
nteger num = 100; // 自动装箱(Integer.valueOf(100))
int primitiveNum = num.intValue(); // 手动拆箱
System.out.println(primitiveNum); // 输出: 100
包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法。
long l = Long.MAX_VALUE;
System.out.println(l + 1); // -9223372036854775808
System.out.println(l + 1 == Long.MIN_VALUE); // true

面向对象三大特性 + 示例代码

继承;封装;多态
1继承,通俗来讲就是子类继承父类的功能,比如mp我们写服务层继承iservice直接使用里面的方法便捷我们的开发
2封装,便于操作对象,封装实体类,使用private关键字只在内部调用而不暴露到外面接口,提高安全性
3多态,在impl实现接口层,重载方法,也就是方法名一样但是对应的参数不同,还有我们经典的List方法就是后面new一个ArrayList也是多态的原理

HashMap 的底层实现?什么时候变红黑树?

底层是数组加链表加红黑树,通过计算hashcode得到数组下标来确定数据存放在哪个一个bucket,使用链表存储,当超过8时转换成红黑树提升查找效率logn

synchronized 和 volatile 的区别?

synchronized关键字用于加锁,在我们要保证原子性的代码块加上该关键字
volatile主要是声明可见性,例如在线程中该数值改变后让其他线程操作时也看到

什么是线程安全?你怎么保证线程安全?

在高并发条件下,线程之间会存在操作失败,操作冗余,又或者是没有实现想要的效果,这是我们要实行的线程安全来保障操作可行。比如添加synchronized关键字,加锁,使用线程安全的容器如ConcurrentHashMap,用redis缓存数据库同时用mq消息队列异步执行来避免之间写入数据库,使用乐观锁

双亲委派机制?

Java的双亲委派机制(Parent Delegation Model)是类加载器(ClassLoader)在加载类时遵循的一种层级委托规则,其核心目的是确保类的唯一性、安全性和避免重复加载。

sql索引底层是 B+ 树?为什么比 B 树好?

B+ 树 = 所有数据存在叶子节点,且叶子节点有链指针,适合范围查找
优点:
所有数据在叶子节点,结构统一;
所有叶子节点是链表,范围查询很快;
每个节点能存更多索引,提高磁盘利用率,降低 I/O 次数。

SQL 调优做过哪些?怎么用执行计划?

EXPLAIN SELECT … 可查看 SQL 执行计划
关注字段:
type:访问方式(ALL最差,range、ref、const 更好)
key:使用的索引
rows:扫描行数(越少越好)
Extra:如 Using index 表示使用了覆盖索引
调优手段:
建立合适的复合索引;
避免 select *;
where 条件避免函数包裹字段;
分页查询用索引或覆盖索引

缓存穿透 / 击穿 / 雪崩的区别与解决方案?

缓存穿透 / 击穿 / 雪崩的区别与解决方案?
问题 描述 解决方案
穿透 查询不存在的 key,穿透缓存打到DB 加布隆过滤器 / 空值缓存
击穿 热点 key 失效,瞬间大量请求打爆DB 加互斥锁(Redisson) / 永久不过期热点 key
雪崩 大量 key 同时过期 加过期时间随机值 / 降级限流 / 提前预热

http://www.lqws.cn/news/568135.html

相关文章:

  • 【C++11】异常
  • [Linux入门] Linux LVM与磁盘配额入门指南
  • Tomcat 安装使用教程
  • 大数据Hadoop之——安装部署hadoop
  • 深入剖析Nacos服务发现与注册,及如何基于LoadBalancer实现负载均衡
  • 大事件项目记录13-接口开发-补充
  • 【如何实现分布式压测中间件】
  • 【更新至2024年】1996-2024年各省农村居民人均消费支出数据(无缺失)
  • JVM基础--JVM的组成
  • 如何将Excel表的内容转化为json格式呢?
  • SCAU期末笔记 - 操作系统 英文定义题
  • Linux 环境变量剖析
  • CNN, RNN, LSTM
  • 2.4 分层解耦(Spring的IOC和DI讲解)
  • Qt事件系统
  • 【innovus基础】手修drc之——金属跳层/修改线宽
  • H3C-路由器交换机-中继
  • Gemini-CLI:谷歌开源的命令行AI工具,重新定义开发者工作流
  • C++异常处理深度解析:标准库异常类与最佳实践
  • 可达性分析算法Test
  • 矩阵的逆 线性代数
  • rabbitmq springboot 有哪些配置参数
  • 打卡day57
  • WebRTC系列:(一)MacOS开发环境搭建(Vscode + Clangd)
  • Ubuntu开放mysql 3306端口
  • 现代 JavaScript (ES6+) 入门到实战(八):总结与展望 - 成为一名现代前端开发者
  • NLP随机插入
  • 复旦大学经济学院系统思考训练
  • MyBatis批量删除
  • [论文阅读]MISSRce