第十篇:企业场景篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
设计模式
工厂方法模式
需求:设计一个咖啡店点餐系统。
咖啡类(Coffee):定义基本的咖啡属性和行为。
美式咖啡(AmericanCoffee):继承自咖啡类,表示美式咖啡的特性。
拿铁咖啡(LatteCoffee):继承自咖啡类,表示拿铁咖啡的特性。
咖啡店类(CoffeeStore):具有点咖啡的功能,可以根据客户需求制作不同种类的咖啡。
具体类的设计如下:
如果我们是这样的话,那么就违背了软件开发的开闭原则:扩展开放,对修改关闭
简单工厂模式
简单工厂包含如下角色:
抽象产品:定义了产品的规范,描述了产品的主要特性和功能
具体产品:实现或者继承抽象产品的子类
具体工厂:提供了创建产品的方法,调用者通过该方法来获取产品
咖啡改简单工厂
这样虽然解决了CoffeeStore和Coffee的耦合,但是又产生了新的耦 ...
第九篇:JVM篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
Java Virtual Machine,Java程序的运行环境(java二进制字节码的运行环境)
好处:
一次编写,到处运行
自动内存管理,垃圾回收机制
JVM组成部分
JVM组成
什么是程序计数器
JVM程序计数器(Program Counter Register)是一块很小的内存区域,用于存储当前线程所执行的字节码指令地址,即 将要执行的指令代码。它是线程私有的内存区域,每个线程都有自己独立的程序计数器,生命周期与线程保持一致。
你可以使用javap -v xx.class打印堆栈大小,局部变量的数量和方法的参数。
程序计数器主要是保存线程执行的字节码的行号,记录正在执行的字节码指令的地址
Java堆
线程共享的区域:主要用来保存对象实例,数组等,当堆中没有内存空间可分配给实例,也无法再扩展时,则抛出OutofMemoryError异常。
...
第八篇:多线程篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
线程基础知识
线程和进程的区别
进程是一个具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统资源分配和独立运行的最小单位;线程是进程的一个执行单元,是任务调度和系统执行的最小单位;协程是一种用户态的轻量级线程,协程的调度完全由用户控制。
进程
进程是操作系统资源分配和独立运行的最小单位。
每个进程都有独立的地址空间,不同进程通过进程间通信来通信。
进程占据独立的内存,上下文切换开销(栈、寄存器、页表、文件句柄等)比较大,但相对比较稳定安全。
线程
线程是CPU调度和系统执行的最小单位。
线程从属于进程,一个进程至少包含一个主线程,也可以有更多的子线程。
多个线程共享所属进程的资源,同时线程也拥有自己的专属资源。
线程上下文切换开销较小,但相比进程不够稳定容易丢失数据。
协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。
协程不是被操作系统内核 ...
第七篇:Java集合篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
Java集合框架体系
List
数组
数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构
寻址公式:a[i] = baseAddress + i * dataTypeSize
baseAddress:数组的首地址
dataTypeSize:数组中元素类型的大小。int类型占用4字节。
ArrayList源码分析
成员变量
elementData:真正存储数据的位置。
size:集合中元素的个数。
DEAFAULT_CAPACITY:默认初始化大小的容量。
构造函数
ArrayList有三个构造函数,分别是:
ArrayList():创建一个空的ArrayList。
ArrayList(int initialCapacity):创建一个具有指定初始容量的ArrayL ...
第六篇:消息中间件篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
RabbitMQ
如何保证消息不丢失
消息的正常流程,消息什么时候可能丢失
由消息的发送者发送消息到交换机,由交换机路由到队列,由消费者消费消息。
上述过程中所有环节都有可能丢失消息。
生产者确认机制
RabbitMQ 提供了生产者确认机制,以确保在消息发送到消息队列过程中不会丢失。一旦消息被成功发送到消息队列,RabbitMQ 会向发送者返回一个结果,指示消息是否成功处理(若成功发送到队列,则返回 ack publish-confirm,其中 ack 表示确认acknowledge)。
在不同阶段出现不同错误时,RabbitMQ 会向生产者发送不同的信息。
如果消息未能到达交换机,则会返回 nack publish-confirm。
如果消息未能成功路由到队列,则会返回 ack publish-return。
消息失败之后如何处理呢?
回调方法即时重发 ...
第五篇:微服务篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
SpringCloud
Spring Cloud 组件有哪些?
Spring Cloud Eureka
Eureka:注册中心
Ribbon:负载均衡
Feign:远程调用
Hystrix:服务熔断
Zuul/Gateway:网关
Spring Cloud Alibaba
注册中心/配置中心Nacos
负载均衡Ribbon
服务调用Feign
服务保护sentinel
服务网关Gateway
Spring Cloud 注册中心 Eureka
Eureka的作用
在微服务架构中,有两个微服务 order-service 和 user-service。如果 order-service 有一个下单的操作,需要保存订单。但是,这个操作需要远程调用 user-service 来获取用户的数据,那 order-service 需要拿到 user-ser ...
第四篇:框架篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
Spring
Spring 框架中的单例bean是否线程安全?
Spring中的单例bean默认是单例模式(singleton),其不一定是线程安全的。
123456789101112131415@Controller@RequestMapping("/user")public class UserController{ private int count; // 成员变量需要考虑线程安全 @Autowired private UserService userService; @GetMapping("/getByld/{id}") public User getById(@PathVariable("id") Integer id){ ...
第三篇:Mysql篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
Mysql-优化
定位慢查询
方案一:开源工具
调试工具:Arthas
运维工具:Prometheus、Apache SkyWalking
方案二:Mysql自带慢日志
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息
1234# 开启MVSQL慢日志查询开关slow_query_log=1# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志long_query_time=2
配置完毕之后,通过指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息
/var/lib/mysql/localhost-slow.log
分析慢查询
可以采用expali ...
第二篇:Redis篇
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
开篇
引言
Redis作为目前后端开发中最常用的缓存中间件,几乎每个项目都会使用到Redis。因此,Redis在面试中占比是非常高的。
注意:此篇需要重点准备!
提问方式
Redis使用场景
问题
Redis的数据持久化策略有哪些
什么是缓存穿透,怎么解决
什么是布隆过滤器
什么是缓存击穿,怎么解决
什么是缓存雪崩,怎么解决
Redis双写问题
Redis分布式锁如何实现
Redis实现分布式锁如何合理的控制锁的有效时长
Redis的数据过期策略有哪些
Redis的数据淘汰策略有哪些
其他面试
这些一般不会和业务捆绑提问,而是会单独提问
问题
Redis集群有哪些方案,知道嘛
什么是Redis主从同步
你们使用Redis是单点还是集群?哪种集群
Redis分片集群中数据是怎么存储和读取的
red ...
第一篇:准备篇-面试过程
“求其上,得其中;求其中,得其下,求其下,必败”
新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)_哔哩哔哩_bilibili
面试形式
面试轮数
企业在招聘的时候,不同的公司面试的轮次不一样
单轮面试:只有技术面试(中小企业、创业型公司、外包)
多轮面试
两轮:第一、二轮技术面(大部分面试)
三轮/N轮:一二轮技术面,HR终面(上市公司、大厂)
面试官角色
资深开发人员(技术经理):技术最好,多数参与首轮面试
业务部门经理:技术一般,多数参与终面,可以决定你的新资(思考能力,抗压能力)
HR:辅助业务部门考察候选人(性格、沟通能力、合作能力、学习能力)
面试过程
整体讲解结构:总分结构表述
面试过程中要尽可能去引导面试官,如果引导不了,就要多做准备。
准备面试
找工作的心态
尽可能向上求职