大家好呀,我是鱼皮。今天给朋友们分享一下自己 编程导航星球 成员 HYZ 同学的面经,写得非常详细,相信能给大家一些参考。
星球原文链接:https://t.zsxq.com/0bqbu8wup
地点:珠海 规模:0~20 岗位:Java 来源:boss
八股继续背,说话语速可以慢点让自己脑子清晰一下,git 相关知识需要补上,接口慢的知识需要补上,mybatis 的框架内容需要补上,【说一下理解】这种八股需要补上,mysql 的分库分表需要补上。
天天在b站看b友的面试视频,但是真刀真枪倒是怯了,还得多练
list:arraylist、linkedlist set:hashset map:hashmap
参考回答:
Java 中的集合是指一组相关数据类型的对象的容器。Java 提供了许多集合类,可以根据实际情况选择适合的集合类来使用。
常用的 Java 集合包括:
另外还有一些特殊的集合类,例如 Stack(栈)和 Vector(向量)。
除了以上的标准集合类,Java 还提供了一些扩展集合类,例如 ConcurrentHashMap 和 CopyOnWriteArrayList 等,它们是线程安全的集合类,适合在多线程环境下使用。
在使用集合类时,需要根据实际需求选择适合的集合类,不同的集合类有不同的优劣点。例如,如果需要有序存储对象并且需要快速访问集合中的元素,可以选择 ArrayList。如果需要频繁地插入和删除元素,可以选择 LinkedList。如果需要存储无序不重复的元素,可以选择 HashSet 等。
在使用集合类时,还需要注意集合类的并发性、可扩展性、性能等问题。
单值和 kv,数组、链表、数组链表红黑树
参考回答:
Java 中的集合主要分为三个大类:List、Set 和 Map。
具体来说,Java 集合的区别如下:
List 和 Set 的区别:List 是有序的,可以有重复元素,通过索引访问元素;Set 是无序的,不可以有重复元素,通过元素值访问元素。
Set 和 Map 的区别:Set 存储的是单个元素,Map 存储的是键值对。
List 和 Map 的区别:List 存储的是单个元素,通过索引访问元素;Map 存储的是键值对,通过键访问值。
此外,Java 集合还有许多其他的实现,如 SortedSet、LinkedHashMap、ConcurrentHashMap 等等,它们都有自己的特点和适用场景。
stream 的 map,list、set、map 的构造方法
参考回答:
Java 集合之间的转化可以使用以下方式:
需要注意的是,不同类型之间的转换可能会导致数据结构的改变或者丢失部分元素,因此在进行集合之间的转换时需要仔细考虑转换的类型和转换方式。
limit、max、min、avg、for,mysql能用的它基本也大差不差
参考回答:
Java 8 中的 Stream 流除了 map 方法外,还有很多其他方法,这里列举一些常用的:
这些方法可以组合使用,构成复杂的数据处理操作,实现代码的简洁、高效。
8
不清楚
参考回答:
多线程是指在一个进程中同时运行多个线程,每个线程都拥有独立的代码执行流程和执行环境,它们可以共享进程的资源。多线程可以提高程序的并发性和效率,适用于需要同时进行多个任务或处理大量数据的场景。
多线程的优点包括:
但是多线程也有一些缺点,包括:
多线程在开发中的应用非常广泛,比如在 Web 服务器中,可以使用多线程来处理并发的请求;在数据处理中,可以使用多线程来提高计算能力和处理速度;在 GUI 界面中,可以使用多线程来保证程序的响应性等等。
不清楚
参考回答:
多线程一般用于需要同时处理多个任务的情况,可以提高程序的运行效率和响应速度。以下是一些常见的需要使用多线程的场景:
需要注意的是,多线程的实现需要考虑线程安全、锁的使用等问题,否则可能会出现线程间的竞争条件和数据一致性问题。因此,在使用多线程时,需要慎重考虑,并且确保线程安全。
创建:继承 Thread 类,重写 Runable 方法,重写 callable 方法,使用线程池
调用:前三个直接用 start 方法,线程池用 submit 提交(想让面试官问四种常用线程池和线程池构造器的)
销毁:前三个执行完销毁,线程池调用 stop 或 shutdown 方法(想让面试官问俩方法有什么区别的)
start 开启新的线程,run 和普通 java 方法没区别
轻量级框架,提供了 ioc 控制反转和 aop 动态代理。
用到再初始化和实例化时初始化
都可以有,可以在实例化的时候初始化,也可以使用懒加载模式用到再初始化
单例,可以通过在配置文件或者配置类中修改 bean 的作用域为 prototype
多个操作为一个集合,任意一个操作失败则集体失败回滚
修改配置文件或者用 Transactional 注解
通过rollback指明异常回滚
swagger
参考回答:
SpringBoot 中使用的是 SpringMVC 框架来实现 Web 应用程序的开发,因此 SpringBoot 中的 SpringMVC 流程和普通的 SpringMVC 流程基本一致。主要包括以下几个步骤:
一、请求到达 DispatcherServlet
用户请求首先会到达 SpringBoot 中的前置控制器 DispatcherServlet,该组件是整个 SpringMVC 的核心,负责接收请求并进行统一的处理。
二、处理器映射器 HandlerMapping 确定处理器
DispatcherServlet 会把请求交给处理器映射器 HandlerMapping,由它来找到符合请求的处理器(Controller),然后返回给 DispatcherServlet。
三、处理器适配器 HandlerAdapter 调用处理器方法
DispatcherServlet 获取到处理器(Controller)后,需要根据请求信息调用相应的处理方法,这时需要使用到处理器适配器 HandlerAdapter。处理器适配器会根据处理器的类型和请求类型,选择合适的方法进行调用。
四、处理器方法处理请求并返回模型和视图
Controller 接收到请求后,会根据请求的参数进行处理,然后返回一个 ModelAndView 对象,该对象包含了模型数据和要返回的视图。
五、视图解析器 ViewResolver 解析视图
DispatcherServlet 将 ModelAndView 交给视图解析器 ViewResolver,ViewResolver 根据视图名解析成一个具体的 View 对象。
六、渲染视图视图对象 View 负责渲染模型数据,将处理结果生成 HTML 内容返回给客户端。最终,DispatcherServlet 将响应返回给客户端。
以上就是 SpringBoot 中 SpringMVC 的流程,其中涉及到的每个组件都可以进行自定义配置。
后端负责业务,不负责页面解析和渲染
参考回答:
前后端分离是一种软件开发架构模式,指的是将前端和后端的代码分别开发、部署、维护的一种架构方式。在这种架构模式下,前端负责展示界面和交互逻辑,后端则负责业务逻辑和数据处理。
前后端分离架构的主要思想是将前端和后端进行解耦,使得前后端的开发和维护变得更加独立和灵活。这种架构模式可以提高开发效率和代码复用性,同时也方便了团队协作和分工。
在前后端分离架构中,前端和后端之间通常采用 RESTful API 进行通信。前端通过 API 请求后端数据,并将其展示给用户。同时,前端还负责处理用户的操作,将用户的输入数据封装成 JSON 或其他格式,通过 API 发送给后端进行处理。
总之,前后端分离架构可以使得前端和后端的开发更加独立、高效和灵活,同时也能提供更好的用户体验和数据安全。
不清楚,只了解怎么使用
参考回答:
MyBatis和MyBatis Plus是两个Java持久层框架,都可以用于与关系型数据库交互。下面是它们的主要区别:
综上,MyBatis Plus 相较于 MyBatis 来说在操作的便利性、代码的简洁性、性能上都有一定的优势,但需要注意的是使用 MyBatis Plus 时需要对 MyBatis 的原理和机制有一定的了解。
querywrapper
不可,但是 MyBatis 的 association 和 collection 可以实现多表查询
加快 sql 语句的执行速度(想要他问怎么加快,就可以从索引覆盖、聚集索引、二级索引切入了)
通过慢查询判断 sql 慢的时候
show variables like '%slow_query_log';
explain
行锁、表锁、全局锁。共享锁、排他锁、意向锁。
update、delete、insert、select for update 加排他锁,select lock in shard mode 加共享锁,普通 select 不加锁
行锁、意向锁、表锁、共享锁、排他锁
参考回答:
在 MySQL 中,当一个事务正在对一行数据进行修改时,如果另外一个事务也要对该行数据进行修改,就会产生锁冲突。此时,MySQL 会自动给其中一个事务加锁,使其等待另一个事务执行完毕后再继续执行。产生锁和锁冲突的情况如下:
其他情况:如使用 LOCK TABLES 等语句主动加锁时也会产生锁。
为避免锁和锁冲突,开发人员应该尽量避免使用不必要的锁,避免长时间占用资源,并合理设置事务隔离级别等参数,保证事务的正确性和并发性。
完全不了解
参考回答:
后端性能优化可以从以下几个方面考虑:
对于一个接口响应特别慢的问题,可以从以下几个方面排查:
针对性能问题,可以从以上方面入手,逐步定位问题,并进行优化。
性能优化的时候可以考虑使用缓存,举例子;nosql;内存,也可以持久化,aof,rdb
其实提示我了,可以从 redis 的穿透、穿刺、雪崩三个角度去讲,也可以从 sql 的索引优化去讲。可惜当时还是太紧张了
service层
完全不理解
参考回答:
分库分表,没背
参考回答:
参考回答:
参考回答:
没了解,回答了 springcloud 是分布, springboot 是单体,讲了 springcloud 用了 nacos、feign、gateway 组件
参考回答:
没了解
参考回答:
说了简单模式、工作队列模式、发布订阅、路由模式、通配符模式
掘金
有,但是不多
不了解,html 有用过,js 用过一下
1.欢迎参与 30 天面试题挑战活动 ,搞定高频面试题,斩杀面试官!
2.欢迎已加入星球的同学 免费申请一年编程导航网站会员 !
3.欢迎学习 鱼皮最新原创项目教程,手把手教你做出项目、写出高分简历!
欢迎加入鱼皮的编程导航知识星球,鱼皮会 1 对 1 回答您的问题、直播带你做出项目、为你定制学习计划和求职指导,还能获取海量编程学习资源,和上万名学编程的同学共享知识、交流进步。
💎 加入星球后,您可以:
1)添加鱼皮本人微信,向他 1 对 1 提问,帮您解决问题、告别迷茫!点击了解详情
2)获取海量编程知识和资源,包括:3000+ 鱼皮的编程答疑和求职指导、原创编程学习路线、几十万字的编程学习知识库、几十 T 编程学习资源、500+ 精华帖等!点击了解详情
3)找鱼皮咨询求职建议和优化简历,次数不限!点击了解详情
4)鱼皮直播从 0 到 1 带大家做出项目,已有 50+ 直播、完结 3 套项目、10+ 项目分享,帮您掌握独立开发项目的能力、丰富简历!点击了解详情
外面一套项目课就上千元了,而星球内所有项目都有指导答疑,轻松解决问题
星球提供的所有服务,都是为了帮您更好地学编程、找到理想的工作。诚挚地欢迎您的加入,这可能是最好的学习机会,也是最值得的一笔投资!
长按扫码领优惠券加入,也可以添加微信 yupi1085 咨询星球(备注“想加星球”):
往期推荐