├── Introduction.md ├── Java学习路线.md ├── Java最新2022版面试题及解答-阿里内部资料(266页)(1).pdf ├── README.md ├── asset ├── 20210629121733256.png ├── 32位MarkWord.png ├── 64位MarkWord.png ├── 9c0640bf9f01431cb2c6e4e5c635bfe2.png ├── AQS数据结构.png ├── B+树.png ├── BIO.png ├── CPU 硬件总线图.png ├── CPU执行程序.png ├── CPU缓存模型.png ├── Canal数据同步.png ├── Compact行格式.png ├── HTTPS1.png ├── HTTPS2.png ├── HTTPS3.png ├── IO.png ├── IO多路复用.png ├── JMM.png ├── JavaAPI层面的线程状态.png ├── Java线程六种状态.png ├── Java线程生命周期.png ├── Kernel_Layout.png ├── MySQL两阶段提交.png ├── MySQL两阶段提交JavaGuide.png ├── MySQL主从复制.png ├── MySQL主从库.png ├── MySQL语句执行过程.png ├── NIO.png ├── Nacos配置中心.png ├── OS-structure2.png ├── PubSub模式.png ├── R[0GLDZ2AXY(1AM[MLQ1~8A.png ├── Redis分片集群1.png ├── Redis哈希槽迁移.png ├── Redis实现消息队列对比图.png ├── Redis通信模型.png ├── ReentrantLock和Synchronized.jpg ├── Routing模式.png ├── SPI运行流程.png ├── SpringBoot启动流程.png ├── SpringBoot自动配置.png ├── SpringBoot自动配置核心流程.png ├── Topic模式.png ├── Von_Neumann_architecture.svg ├── XA规范角色.png ├── arch-z-transection-1.png ├── bitmap.png ├── docker.png ├── gitrebase.png ├── image-20230604095528040.png ├── java-thread-x-key-schronized-5.png ├── java-thread-x-key-schronized-8.png ├── jyw广域网.png ├── list消息队列.png ├── merge.png ├── my_test.png ├── pubsub消息队列.png ├── rabbit延迟队列.png ├── rebase.png ├── redis-master-slave-distributed-lock.ccc5be73.png ├── ribbon负载均衡.png ├── selector ├── udp通信.png ├── zookeeper日志持久化.png ├── 三次握手+连接队列.png ├── 三次握手.png ├── 主流MQ对比.png ├── 代金券秒杀.png ├── 信号驱动IO.png ├── 内核架构.png ├── 分布式事务.png ├── 分布课程时序图.png ├── 协程上下文.png ├── 哈希槽迁移.png ├── 堆.png ├── 多级反馈队列调度算法.png ├── 大小端.png ├── 大文件断点续传.png ├── 存储器的层次关系图.png ├── 学成在线.png ├── 射线法.png ├── 局域网通信.png ├── 工作队列模式.png ├── 带岛屿的多边形.png ├── 幻读.png ├── 广域网.png ├── 序列化反序列化.png ├── 序列化性能比较.png ├── 异步IO.png ├── 拦截器过滤器.png ├── 操作系统进程状态.png ├── 数据库表.png ├── 整体 GC 问题普适的处理流程.jpg ├── 时间轮.png ├── 根因鱼骨图.png ├── 消息幂等性保障.png ├── 消息队列对比.png ├── 状态码.png ├── 秒杀场景下的问题.png ├── 秒杀流程图.png ├── 程序的CPU执行时间公式2.png ├── 简单模式.png ├── 简历.png ├── 简历0.png ├── 简历1.png ├── 简历2.png ├── 简历图片.jpg ├── 红黑树.png ├── 红黑树存储空节点.png ├── 红黑树插入流程.png ├── 红黑树节点关系.png ├── 线程上下文.png ├── 线程崩溃的缺点.png ├── 网关基本功能.png ├── 网络发包收包全景图.png ├── 菱形继承.png ├── 虚拟地址映射逻辑地址.png ├── 虚拟文件系统.png ├── 虚拟机.png ├── 订单支付.png ├── 订单支付异步通知.png ├── 访问修饰符.png ├── 课程发布流程图.png ├── 路由器IP地址.png ├── 进程上下文.png ├── 进程的状态.png ├── 连接队列.png ├── 连接队列结构.png ├── 邮件.png ├── 锁升级.png ├── 长轮询.png └── 闭合路线.png ├── 面试记录.md ├── 面试题.md └── 面试题.pdf /Introduction.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | ## 自我介绍 4 | 5 | **技术面:** 6 | 7 | 面试官您好,我叫XXX,来自东北大学,专业是软件工程,目前是一名研二的学生。在大学期间学习了Java以及Spring、MyBatis等框架。在近期参与了两个项目的开发,第一个项目是一个在线教育平台系统,该系统由实验室三个人共同开发,我主要参与后端开发任务,使用SpringCloud、MyBatis、Redis等相关技术,主要负责课程内容模块和订单模块的设计与开发。第二个项目是一个基于Netty的轻量级RPC框架,自定义通信协议,利用Zookeeper作为服务发现中心,实现多种动态代理、负载均衡和序列化算法,并集成了SpringBoot框架。学习之外也会通过跑步或打羽毛球来放松自己。我的自我介绍完毕,谢谢面试官。 8 | 9 | --- 10 | 11 | 面试官您好,我叫XXX,来自东北大学,专业是软件工程,在校期间主要学习了Java以及Spring、MyBatis等框架,参与了两个项目的开发,第一个项目是一个在线教育平台的系统,该系统由我和实验室其他两名组员共同完成,我主要负责后端代码的编写,使用SpringCloud、MyBatis和Redis等技术,负责课程内容管理模块和订单服务管理模块的开发和设计;第二个项目是基于Netty的RPC框架,使用zk作为服务的注册中心,实现了两种动态代理方式,五种序列化算法以及三种负载均衡算法,并继承了SpringBoot框架,实现了基于注解提供服务的注册消费,同时实现了自动配置功能。 12 | 13 | ---- 14 | 15 | 跨区调用实现过程: 16 | 17 | > 1、在配置中心leo中配置需要跨区掉用的部署区,例如:cn, us, eu 18 | > 19 | > 2、定义一个 @DubboRefrenceGroup 注解,这个注解配置项主要有 name-beanName 和 groups-部署区组,然后定义一个 RefrenceHolder 泛型类,其中 T 为 dubbo 的服务类,然后自定义一个实现 BeanPostProcessor 的增强配置类,其中在 after 方法中的内容为: 扫面 @DubboRefrenceGroup 注解,然后创建一个 beanName 为 name 的 Holder 类,然后再遍历 groups 数组,以 group 为 key,创建一个 T 类型的远程过程调用的代理对象,这里将对应参数都设置为默认属性,如果没有配置的话,然后通过内部的 rpc 框架开发的 remoteCall 接口,更改调用服务所在的部署区,再将对应的调用参数传入,返回值为 Object 类型的结果,这样就得到了一个 Map 的对象,从而达到根据不同的 dr 调用不同 dr 区的服务了。 20 | > 21 | > --- 22 | > 23 | > 优化点:可以把这个功能写入到我们组的一个通用服务类里面,然后实现自动配置功能,后续直接使用对应的注解加载便可以实现开箱即用的功能。 24 | 25 | ## 为什么要做RPC项目 26 | 27 | 1、首先,目前的应用大部分都是分布式/微服务架构,通常各个模块之间都是通过RPC来进行调用的,所以我认为自己写一个RPC项目可以有更加深入的理解RPC的一个原理; 28 | 29 | 2、其次的话,在写RPC项目的过程中,学会了对Zookeeper、Netty的使用,包括对动态代理、负载均衡、序列化算法的实现,以及对SpringBoot框架的扩展和自动配置的理解。 30 | 31 | ## 在线教育平台系统介绍 32 | 33 | 在线教育平台系统主要采用的是B2B2C的业务模式,主要包括认证授权、内容管理、媒体资源管理、课程搜索、订单支付管理、选课管理等六大模块,然后我主要负责的是课程内容管理模块和订单支付模块的设计与实现。 34 | 35 | ## 面试 36 | 37 | ### RPC 38 | 39 | [一致性哈希算法原理](https://blog.51cto.com/u_11475121/2964210) 40 | 41 | RPC框架中的几种容灾措施,包括**超时设置**、**重试**、**Client端屏蔽策略**、**Server端反馈机制**、**限流**与**服务降级**,最后谈到分布式服务的**雪崩**。雪崩的处理涉及柔性,对用户体验有损,需要人为决策参与实施。 42 | 43 | [rpc容灾策略优化](https://blog.csdn.net/shaderdx/article/details/88303334) 44 | 45 | [服务的降级](https://blog.csdn.net/linuu/article/details/52667578) 46 | 47 | [Hystrix原理](https://blog.csdn.net/weixin_49199821/article/details/126311992) 48 | 49 | [服务降级方案](https://www.maro.ink/2018/06/08/fu-wu-jiang-ji-fang-an/) 50 | 51 | [服务熔断处理](https://gudaoxuri.gitbook.io/microservices-architecture/wei-fu-wu-hua-zhi-ji-shu-jia-gou/services-circuit) 52 | 53 | client ----> server 54 | 55 | client:失败重试 + 服务降级/mock(默认值 或 MockService类-在其他服务) + 服务熔断(统计失败次数,达到阈值后启动熔断,恢复时使用定时任务监控,先放行几个请求,当检测到恢复后则取消熔断) 56 | 57 | 服务降级:通常情况下可以手动配置mock属性,主动针对某些非核心的服务进行服务降级策略,减轻服务端压力,从而去响应核心服务,或者自动降级,为每个服务新增一个实例状态,根据失败阈值统计触发服务降级。 58 | 59 | 服务熔断:通常是自动触发的,当出现一个服务调用他所依赖的下游服务,依赖服务出现故障从而导致该服务响应异常导致整个系统发生雪崩效应,这个时候应该自动触发熔断机制,并且可以对熔断的服务进行降级,返回fallback默认值。熔断的三个状态:open、close、half open。 60 | 61 | rpc框架可以集成服务熔断插件,例如 Hystrix,在客户端处引入,监控服务调用状态,从而去实现自动熔断恢复功能。 62 | 63 | 异步调用: 64 | 65 | 1. 直接返回 Future 对象,由用户自身调用; 66 | 2. 为每个 channel future 注册一个回调机制,将回调事件通过线程池去异步处理,根据全局的消息id去获取到请求参数来执行后续逻辑。 67 | 68 | 通信协议版本协商: 69 | 70 | 1. 客户端服务端先进行通信协议版本协商,双方一致后再使用协商的版本进行通信。 71 | 72 | ----- 73 | 74 | > 当RPC框架出现服务雪崩时,可以采取以下措施来进行处理: 75 | > 76 | > 1. 服务降级:在服务雪崩期间,可以暂时关闭一些非核心的服务或功能,以减轻系统负载。例如,可以降低某些服务的并发连接数、限制资源使用或关闭一些不太重要的功能。 77 | > 78 | > 2. 限流措施:通过设置请求的速率限制或并发连接数限制,可以有效控制系统的负载并防止雪崩效应的扩大。可以使用令牌桶算法或漏桶算法等来实现请求的限流。 79 | > 80 | > 3. 熔断机制:熔断是一种快速失败和快速恢复的机制,当依赖的服务出现异常或响应时间过长时,可以立即熔断该服务的调用,并返回一个预设的错误响应。通过熔断机制可以避免请求堆积和传递故障,保护整个系统免受雪崩效应的影响。 81 | > 82 | > 4. 超时设置:合理设置每个请求的超时时间,避免因为单个请求的响应时间过长而拖慢整个系统的响应速度。可以根据服务的特性和性能指标,设置合理的超时时间,并在超时后及时取消请求。 83 | > 84 | > 5. 异步处理:对于一些非必要的同步操作,可以考虑使用异步方式进行处理。将一些计算密集型或耗时较长的任务放入消息队列或线程池中异步执行,减少请求的等待时间,提高系统的吞吐量和响应速度。 85 | > 86 | > 6. 优化系统架构:对于系统中的瓶颈或性能瓶颈进行分析和优化。可能需要对数据库、缓存、负载均衡等组件进行优化,以提高系统的整体性能和稳定性。 87 | > 88 | > 7. 监控与告警:建立完善的监控系统,及时捕获和发现服务的异常情况,并及时发送告警通知。通过监控系统可以实时监测系统的各项指标,预防服务雪崩问题的发生。 89 | > 90 | > 以上是一些常见的处理服务雪崩问题的方法,根据实际情况,可以综合采取多种措施来保障系统的可用性和稳定性。 91 | 92 | ### 在线教育台 93 | 94 | 学成在线结构图 95 | 96 | #### **MinIO 是什么? 为什么用 MinIO?** 97 | 98 | MinIO 一个轻量级的分布式文件系统,由多个 MinIO 节点连接组成,可根据文件规模进行扩展,适用于海量文件的存储与访问。 99 | 100 | MinIO 有什么优势? 101 | 102 | 1)MinIO 开源,使用简单,功能强大。 103 | 104 | 2)MinIO 集群采用去中心化共享架构,每个结点是对等关系,提高高可用,通过 Nginx 可对 MinIO 进行负载均衡访问。 105 | 106 | 3))MinIO 使用纠删码算法,只要不超过一半的节点坏掉整个文件系统就可以使用。 107 | 108 | 4)如果将坏的节点重新启动,自动恢复没有上传成功的文件。 109 | 110 | #### **为什么要用** **Freemarker** 静态化,如何做的? 111 | 112 | 什么是页面静态化? 113 | 114 | 页面静态化是指使用模板引擎技术将一个动态网页生成 html 静态页面。 115 | 116 | 满足下边的条件可以考虑使用静态化: 117 | 118 | 1、该页面被访问频率高,比如:商品信息展示、专家介绍页面等。 119 | 120 | 2、页面上的数据变化频率低,比如:商品发布后对商品信息的修改频率低,专家介绍信息修改频率低 121 | 122 | 静态化的技术很多,Freemarker 是一个成熟的开源的模板引擎工具,简单易用,功能强大。 123 | 124 | 本项目使用 Freemarker 将课程信息静态化: 125 | 126 | 1)使用 Freemarker 的标签编写课程信息的模板 127 | 128 | 2)调用接口获取模板上需要的模型数据 129 | 130 | 3)调用 Freemarker 的 API 生成静态页面。 131 | 132 | 4)生成的静态页面最终会上传到文件系统方便访问。 133 | 134 | #### **说说对分布式事务的理解** 135 | 136 | 什么是分布式事务? 137 | 138 | 由多个服务通过网络完成一个事务叫分布式事务。 139 | 140 | 比如:课程发布操作不仅要在本地数据库插入课程信息,而且还要请求索引服务将课程信息添加到索引库,还要请求 MinIO 将课程静态化并上传静态页面,这里就存在分布式事务。 141 | 142 | 分布式事务控制的方案有哪些? 143 | 144 | 首先根据 CAP 原理决定我们的需求,是要实现 CP、还是要实现 AP。 145 | 146 | 实现 CP 就是要实现强一致性,可以使用 Seata 框架基于 AT、TCC 模式去实现。 147 | 148 | 我们项目中大部分实现的是 AP,使用本地消息表加任务调度完成分布式事务最终数据一致性。 149 | 150 | **如何使用本地消息表加任务调度完成分布式事务控制?** 151 | 152 | 以发布课程为例进行说明,发布课程需要在内容管理数据库中写课程发布表记录,同时将课程信息同步到 redis、ES、MinIO,这里存在分布式事务。 153 | 154 | 1)点击发布课程使用本地事务向发布表写一个课程信息,同时向消息表写一个消息记录(标记了发布了哪门课程); 155 | 156 | 2)xxl-job 的调度中心使用分片广播模式向执行器下发任务,开始扫描消息表,查询到了待处理的消息; 157 | 158 | 3)根据消息的内容将课程信息同步到 redis、ES、MinIO; 159 | 160 | 4)任务完成删除消息表记录。整个分布式事务完成,最终保证了一致性。 161 | 162 | **如何解决分布式事务回滚的?** 163 | 164 | 当在执行过程中某个环节失败后,会先进行两次**重试机制**,尽最大努力成功,当重试之后还是失败,则会将对应的消息表的失败记录存储在数据库中的事务失败表当中,然后启动定时任务去进行相应事务的失败处理操作,同时更新对应消息表的一个状态字段,以便后续的分布式任务调度能够继续执行消息表进行分布式操作。或者是**人工处理**。 165 | 166 | #### **Elasticsearch** **是怎么使用的?** 167 | 168 | 本项目使用 Elasticsearch 开发搜索服务,步骤如下: 169 | 170 | 1)首先创建索引(相当于 mysql 的表),将课程信息添加到索引库,对课程信息进行分词,存储到索引库。 171 | 172 | 2)开发一个搜索服务,编写课程搜索接口,调用 Elasticsearch 的 rest 接口根据关键字、课程分类等信息进行搜索。 173 | 174 | **如何保证索引同步?** 175 | 176 | 我们项目是使用本地任务表加 xxl-job 任务调度进行索引同步,具体的作法如下: 177 | 178 | 1)添加或修改或删除课程的同时向任务表插入一条记录,这条记录就记录了是添加还是修改还是删除了哪个课程。 179 | 180 | 2)任务调度定时扫描任务表,根据任务表的内容对课程信息进行同步,如果添加了课程将课程添加到索引库,如果修改了课程就修改索引库的课程,如果是删除了课程将课程信息从索引库删除。 181 | 182 | 关于索引同步的技术还可以使用 Logstash 和 Canal 去实现。 183 | 184 | #### **断点续传是怎么做的?** 185 | 186 | 我们是基于分块上传的模式实现断点续传的需求,当文件上传一部分断网后前边已经上传 187 | 188 | 过的不再上传。 189 | 190 | 1)前端对文件分块。 191 | 192 | 2)前端使用多线程一块一块上传,上传前给服务端发一个消息校验该分块是否上传,如果已上传则不再上传。 193 | 194 | 3)等所有分块上传完毕,服务端合并所有分块,校验文件的完整性。 195 | 196 | 因为分块全部上传到了服务器,服务器将所有分块按顺序进行合并,就是写每个分块文件内容按顺序依次写入一个文件中。使用字节流去读写文件。 197 | 198 | 4)前端给服务传了一个 md5 值,服务端合并文件后计算合并后文件的 md5 是否和前端传的一样,如果一样则说文件完整,如果不一样说明可能由于网络丢包导致文件不完整,这时上传失败需要重新上传。 199 | 200 | #### **分块文件清理问题?** 201 | 202 | 上传一个文件进行分块上传,上传一半不传了,之前上传到 minio 的分块文件要清理吗? 203 | 204 | 怎么做的? 205 | 206 | 1)在数据库中有一张文件表记录 minio 中存储的文件信息。 207 | 208 | 2)文件开始上传时会写入文件表,状态为上传中,上传完成会更新状态为上传完成 209 | 210 | 3)当一个文件传了一半不再上传了说明该文件没有上传完成,会有定时任务去查询文件表中的记录,如果文件未上传完成则删除 minio 中没有上传成功的文件目录。 211 | 212 | #### xxl-job 的工作原理是什么?xxl-job 是什么怎么工作? 213 | 214 | XXL-JOB 分布式任务调度服务由调用中心和执行器组成,调用中心负责按任务调度策略向执行器下发任务,执行器负责接收任务执行任务。 215 | 216 | 1)首先部署并启动 xxl-job 调度中心。(一个 java 工程) 217 | 218 | 2)首先在微服务添加 xxl-job 依赖,在微服务中配置执行器 219 | 220 | 3)启动微服务,执行器向调度中心上报自己。 221 | 222 | 4)在微服务中写一个任务方法并用 xxl-job 的注解去标记执行任务的方法名称。 223 | 224 | 5)在调度中心配置任务调度策略,调度策略就是每隔多长时间执行还是在每天或每月的固定时间去执行,比如每天 0 点执行,或每隔 1 小时执行一次等。 225 | 226 | 6)在调度中心启动任务。 227 | 228 | 7)调度中心根据任务调度策略,到达时间就开始下发任务给执行器。 229 | 230 | 8)执行器收到任务就开始执行任务。 231 | 232 | #### 如何保证任务不重复执行? 233 | 234 | 1)调度中心按分片广播的方式去下发任务 235 | 236 | 2)执行器收到作业分片广播的参数:分片总数和分片序号,计算 任务 id 除以 分片总数得到一个余数,如果余数等于分片序号这时就去执行这个任务,这里保证了不同的执行器执行不同的任务。 237 | 238 | 3)配置调度过期策略为“忽略”,避免同一个执行器多次重复执行同一个任务 239 | 240 | 4)配置任务阻塞处理策略为“丢弃后续调度”,注意:丢弃也没事下一次调度就又可以执行了 241 | 242 | 5)另外还要保证任务处理的幂等性,执行过的任务可以打一个状态标记已完成,下次再调度执行该任务判断该任务已完成就不再执行。 243 | 244 | #### 任务幂等性如何保证? 245 | 246 | 它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果。 247 | 248 | 幂等性是为了解决重复提交问题,比如:恶意刷单,重复支付等。 249 | 250 | 解决幂等性常用的方案: 251 | 252 | 1)数据库约束,比如:唯一索引,主键。同一个主键不可能两次都插入成功。 253 | 254 | 2)乐观锁,常用于数据库,更新数据时根据乐观锁状态去更新。 255 | 256 | 3)唯一序列号(Token),请求前生成唯一的序列号,携带序列号去请求,执行时在 redis 记录该序列号表示以该序列号的请求执行过了,如果相同的序列号再次来执行说明是重复执行。 257 | 258 | 4)悲观锁,悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长,根据实际情况选用(另外还要考虑id是否为主键,如果id不是主键或者不是 InnoDB 存储引擎,那么就会出现锁全表)。 259 | 260 | 这里我们在数据库视频处理表中添加处理状态字段,视频处理完成更新状态为完成,执行视频处理前判断状态是否完成,如果完成则不再处理。 261 | 262 | #### 未支付订单如何处理? 263 | 264 | 基于 RabbitMQ 延迟队列处理未支付订单 265 | 266 | 1) 创建订单的同时向 MQ 发送一条消息给一个队列并设置消息的 TTL (过期时间),比如: 设置 30 分钟,由于该队列设置了死信交换机,30 分钟后消息将投递到死信交换机。 267 | 268 | 2) 当消息过期,消息发到了死信交换机,同时发给了死信队列 (死信队列绑定了死信交换机) 269 | 270 | 3) 程序监听了死信队列,收到了过期的订单。 271 | 272 | 4) 程序收到消息判断如果订单未支付则取消订单(同时删除对应的支付记录以及选课记录),如果说已支付不用处理。(如果是电商项目则存在库存问题,同时也需要更改库存,涉及到分布式事务) 273 | 274 | #### **如何保证** **RabbitMQ** **的消息可靠性**? 275 | 276 | 1、设置消息持久化 277 | 278 | 首先设置交换机支持持久化(定义交换机时设置持久化为 true)、其次设置队列支持持久化(定义队列时设置持久化为 true)、发送消息时设置消息要持久化; 279 | 280 | 2、消费者收到消息处理完成要确认 281 | 282 | 设置消费者确认模式为自动确认 acknowledge-mode=auto,当程序处理正常没有异常会发送 ack,抛出异常则发关 nack 也可以设置为手动确认,在程序处理完成的代码处手动发送 ack。 283 | 284 | 3、消费失败重试 285 | 286 | 消费失败后在消费者本地进行重试,达到最大重试次数会将失败消息投递到指定交换机,交换机绑定一个异常消息队列,程序监听这个队列收到异常消息后放在数据库中单独处理,或由人工处理。 287 | 288 | #### 如何避免消息重复消费? 289 | 290 | 重复投递的原因:等待超时后需要重试; 291 | 292 | 避免重复投递::消息生产时,生产者发送的消息携带一个 Message ID(全局唯一 ID)作为去重和幂等的依据,避免重复的消息进入队列; 293 | 294 | 重复消费的原因:消费者接收消息后,在确认之前断开了连接或者取消订阅消息会被重新分发给下一个订阅的消费者; 295 | 296 | 避免重复消费:消息消费时,要求消息体中必须要有一个全局唯一 ID,作为去重和幂等的依据,避免同一条消息被重复消费。 297 | 298 | #### **项目使用** **redis** 缓存了哪些数据? 299 | 300 | redis 缓存的是白名单接口(无需认证即可访问)所需要的数据,缓存了普通用户所要查询的数据(我的订单、我的选课),缓存热点数据(最新发布的课程信息、推荐课程信息等)。 301 | 302 | 每类信息有不同的缓存过期时间,为了避免缓存雪崩缓存时间加了随机数。 303 | 304 | | 内容 | 时间 | 类型 | 305 | | ------------ | ----- | ------ | 306 | | 验证码 | 30秒 | 字符串 | 307 | | 课程发布信息 | 7天 | hash | 308 | | 课程视频信息 | 7天 | hash | 309 | | 我的课程 | 3分钟 | hash | 310 | | 我的订单 | 3分钟 | hash | 311 | 312 | #### **如何保证** **Redis** **缓存一致性?** 313 | 314 | 缓存一致性是数据库和缓存保持一致,当修改了数据库的信息缓存的数据也要同时更新和数据库保持一致。 315 | 316 | 去查询数据时先查询缓存,如果缓存有就返回,如果没有就查询数据库,如果查不到则缓存一个 null 字符串(过期时间设置的小一些),如果查询到了,缓存到 redis 具体的信息。(解决缓存穿透) 317 | 318 | 项目中使用:先更新数据库,再删除缓存。 319 | 320 | #### **面对高并发是如何对缓存进行处理的** 321 | 322 | 首先使用 redis 集群。 323 | 324 | 其次使用分布式锁进行控制避免缓存击穿,通过分布式锁控制只有一个线程去查询数据库,查完数据库后存入缓存。 325 | 326 | 我们使用 redisson 实现分布锁。redisson 实现 Lock 接口,基于此接口使用,具体方法是获取锁调用 lock()方法,用完释放锁调用 unlock()。 327 | 328 | 当线程还没有执行完时会有看门狗对锁进行续期,保证线程在执行过程中不会让锁过期。 329 | 330 | 缓存雪崩问题。 331 | 332 | 缓存穿透问题。 333 | 334 | 缓存一致性问题。 335 | 336 | #### 订单支付结果异步通知 337 | 338 | 订单服务作为通用服务在订单支付成功后需要将支付结果通知给与订单服务对接的其它微服务。 339 | 340 | 为了保证通知过程的简便还要保证消息全部到达消费服务,采用发布订阅的方式通知支付结果。 341 | 342 | 此处也是**分布式事务**:使用 本地消息表+MQ 的方式实现。 343 | 344 | image-20230314221822110 345 | 346 | 学习中心服务:对收费课程选课需要支付,与订单服务对接完成支付。 347 | 348 | 学习资源服务:对收费的学习资料需要购买后下载,与订单服务对接完成支付。 349 | 350 | 订单服务完成支付后将支付结果发给每一个与订单服务对接的微服务,订单服务将消息发给交换机,由交换机广播消息,每个订阅消息的微服务都可以接收到支付结果,根据支付结果的内容去更新自己的业务数据。 351 | 352 | 学习中心等微服务收到消息并处理完成通过消息队列回复订单服务。 353 | 354 | **分布式事务问题** 355 | 356 | 订单服务收到第三方支付系统的通知更新支付结果,订单服务将支付结果通知给其它微服务,订单服务需要保证更新支付结果成功并且向其它微服务通知支付结果也成功,两件事跨多个微服务并且需要保证一致性,存在分布式事务控制的需求。 357 | 358 | 针对该业务场景如何控制分布式事务? 359 | 360 | 根据需求可知,订单服务先将支付结果更新成功后再将支付结果通知给其它微服务,只要保证最终将支付结果通知到微服务保证最终一致性即可,可以采用课程发布模块的技术方案,先通过本地事务更新支付结果的同时添加一条消息表记录,再由任务调度去定时调度将支付结果通知给其它微服务。 361 | 362 | image-20230314222029344 363 | 364 | #### 代金券秒杀 365 | 366 | image-20230314222029344 367 | 368 | [参考链接](https://mip.ddzpay.com/93250.html) 369 | 370 | [秒杀系统面经-牛客](https://www.nowcoder.com/discuss/465837439208218624?sourceSSR=users) 371 | 372 | [高并发秒杀系统](https://huaweicloud.csdn.net/637f78eadacf622b8df8532e.html) 373 | 374 | [秒杀业务流程](https://segmentfault.com/q/1010000041507730) 375 | 376 | [秒杀系统-限流](https://blog.csdn.net/weixin_43519121/article/details/119736971) 377 | 378 | 首先是进行 **缓存预热**,将代金券信息(开始时间、结束时间、机构id,金额、库存等)存入Redis中,**预减库存**(基于乐观锁防止超卖-当库存大于0就允许购买,同时判断是否存在该用户订单信息防止重复下单); 379 | 380 | 然后基于 Redis + Lua 脚本进行资格判断和秒杀业务,当条件成立,**更新缓存**(在Redis层扣减库存并添加用户订单到集合set中),返回true的状态,**流量削峰**(然后后端生成对应的订单信息发送到MQ当中,订单id使用Redis生成唯一id,同时创建一条消息放入MQ,设置TTL,并且绑定死信交换机和死信队列,当超时会被发送到死信队列中进行处理,读取对应订单的支付记录,若支付成功则添加或更新对应订单支付状态,否则删除对应订单并且回滚库存); 381 | 382 | 使用线程池从MQ当中取出订单信息进行添加,并且使用MQ的可靠传输模式,当订单添加失败重试后还是失败的时候会放入到一个特殊的队列当中去单独处理。 383 | 384 | 在添加订单时,基于Redisson分布式锁,防止重复下单问题,插入数据需要获取锁才能进行操作,并且同时更新数据库中库存信息时使用乐观锁防止超卖和判断是否存在订单信息防止重复下单; 385 | 386 | *当支付成功时,生成支付记录,更新订单的支付状态。* 387 | 388 | 为了防止对秒杀接口进行恶意刷单,使用 Redis + Lua 脚本对同一 IP 和 用户进行 **防刷限流**,自定义注解 @Prevent ,然后基于 AspectJ,定义防刷切面类以及定义切入点,切入点就是在被注解@Prevent修饰的方法执行前去执行防刷判断逻辑,即先通过 ip 获取 Redisson分布式锁,然后通过 user 获取用户锁(直接执行 lua 脚本即可),获取成功之后基于 lua 脚本去判断对应的用户和ip访问的次数,大于指定5次就决绝往下执行,否则次数加一并更新过期时间,然后释放获取到的锁即可。只需要在执行的接口方法上加上@Prevent注解即可生效。 389 | 390 | > - **高并发**:在秒杀活动中,可能需要处理数十万到数百万的请求,而且这些请求通常都是集中在短时间内到达的。通过Jmeter压力测试,系统的QPS从150/s(SSM)提升到2000/s(SpringBoot)。 391 | > - **测试**:【关闭支付功能,默认支付成功条件下,在10000个线程并发调用1000个用户,每个用户发起10次访问,保证了超卖以及重复下单问题,并且系统吞吐量从原先的 150/s 上下到现在保持在 2200/s 上下】 392 | 393 | ---- 394 | 395 | 参考优化策略:秒杀令牌(token)加 **秒杀大闸** 限制入口流量。线程池技术限制瞬时并发数。验证码做防刷功能。 396 | 397 | > 使用 Redis 判断库存并放行请求确实可以达到限流的作用,因为只有库存充足的请求才能够进入后台处理,从而避免了后台处理过多请求的情况。但是,这种方式并不能完全解决限流问题,因为如果短时间内有大量请求同时到达,即使**库存充足**,也可能会导致后台处理过多请求,从而影响系统的稳定性和性能。 398 | > 399 | > 因此,为了更好地限流,可以使用秒杀大闸来进行秒杀令牌的获取。秒杀大闸可以控制请求的流量,确保只有一定数量的请求能够进入后台处理,从而避免了后台处理过多请求的情况。因此,使用秒杀大闸可以更好地保证系统的稳定性和性能,而不是多此一举。 400 | 401 | #### Redis哨兵集群搭建 402 | 403 | 在三台服务器上分别部署了一台Redis节点和一台Sentinel节点,然后通过 slaveof 命令配置好三台Redis节点的主从关系,这里是一主二从模式,启动三台Redis,然后配置三台Sentinel中master节点的地址信息,在项目服务端中配置Sentinel的配置信息,然后创建读写策略的Bean并配置读写策略为 `REPLICA _PREFERRED:优先从slave(replica)节点读取,所有的slave都不可用才读取master`,完成哨兵模式的集群搭建。 404 | 405 | 提高系统的高可用,高性能以及高并发能力。 406 | 407 | #### 数据库表 408 | 409 | image-20230316223737873 410 | 411 | ### 反问 412 | 413 | **技术面、小Leader:** 414 | 415 | 1、贵部门/公司的主要业务是什么? 416 | 417 | 2、贵部门/公司的主要技术栈用的是什么? 418 | 419 | 3、我觉得我今天表现得不是很好,您对我有什么建议呢? 420 | 421 | 4、大概什么时候能有答复呢?(下一面大概多久安排呢?) 422 | 423 | 5、后续还有多少论面试呢? 424 | 425 | 6、胜任岗位需要学习的技能以及如何去学习和提升自己的专业技能? 426 | 427 | **主管、大Leader:** 428 | 429 | 1、贵公司对新入职得员工/实习生的培养机制是什么? 430 | 431 | 2、新入职得员工/实习生主要做的工作内容可以简单介绍一下吗? 432 | 433 | 3、老员工在公司的(拼多多)的工作体验? 434 | 435 | --- 436 | 437 | 1、哪个部门以及哪个小组? 438 | 439 | 2、部门规模和小组人数有多少人? 440 | 441 | 3、假如有幸来到贵公司,贵公司的试用期多少时间呢? 442 | 443 | 4、团队的职责,在公司的定位和重要性?团队未来的发展空间以及团队的范围和文化等 444 | 445 | 5、个人岗位的考核、评价标准以及成长路径? 446 | 447 | 6、团队招人比较看重候选人哪些方面的能力? 448 | 449 | ## RPC项目记录 450 | 451 | ### 踩坑: 452 | 453 | 1、getFields():获取所有的 public 的元素,包含父类;getDeclaredFields():获取当前类型所有的元素,不区分访问修饰符。但是不能访问到父类的元素。可以通过class.getSuperclass来获取父类的元素。 454 | 455 | 2、field.getClass()得到的是 java.lang.reflect.Field,field.getType()得到的才是域所对应的类型。 456 | 457 | 3、JDK动态代理问题: 458 | 459 | ```java 460 | Class clazz; // 要代理的接口类型 461 | Proxy.newInstance( 462 | clazz.getClassLoader(), // 用于定义代理类的类加载器 463 | new Class[]{clazz}, // 实现代理类的接口列表 464 | new InvocationHandelr(); // 将方法调用分派到调用处理程序 465 | ) 466 | ``` 467 | 468 | ### 发现的BUG: 469 | 470 | 1、序列化错误: 471 | 472 | ```java 473 | @RpcService(interfaceClass = UserService.class) 474 | public class UserServiceImpl implements UserService { 475 | 476 | @Override 477 | public List getAllUsers() { 478 | // 注意:直接使用 Arrays.ArrayList 会导致序列化异常,与 List 类型不匹配 479 | return new ArrayList<>(Arrays.asList(new User("xm", "123456", 23), 480 | new User("hwd", "123456", 23), 481 | new User("hwd", "123456", 24))); 482 | } 483 | } 484 | ``` 485 | 486 | ### 性能测试 487 | 488 | 1、基于Netty 489 | 490 | ```json 491 | { 492 | "耗时": 30, // 最低 24 - protostuff 493 | "调用次数": 100 494 | } 495 | 496 | { 497 | "耗时": 25164, // 最低 25164 498 | "调用次数": 100000 499 | } 500 | ``` 501 | 502 | 2、测试 Dubbo 503 | 504 | ```json 505 | { 506 | "耗时": 25, // 最低 19 507 | "调用次数": 100 508 | } 509 | 510 | { 511 | "耗时": 18600, // 最低 17816 512 | "调用次数": 100000 513 | } 514 | ``` 515 | 516 | ## 在线教育平台 517 | 518 | ### 课程发布模块流程 519 | 520 | 教学机构人员在课程审核通过后即可发布课程,课程发布后会公开展示在网站上供学生查看、选课和学习。 521 | 522 | 在网站上展示课程信息需要解决课程信息显示的性能问题,如果速度慢(排除网速)会影响用户的体验性。 523 | 524 | 如何去快速搜索课程? 525 | 526 | 打开课程详情页面仍然去查询数据库可行吗? 527 | 528 | 为了提高网站的速度需要将课程信息进行缓存,并且要将课程信息加入索引库方便搜索,下图显示了课程发布后课程信息的流转情况 529 | 530 | image-20230409001436395 531 | 532 | 1、向内容管理数据库的课程发布表存储课程发布信息。 533 | 534 | 2、向 Redis 存储课程缓存信息。 535 | 536 | 3、向 Elasticsearch 存储课程索引信息。 537 | 538 | 4、请求分布文件系统存储课程静态化页面(即 html 页面),实现快速浏览课程详情页面。 539 | 540 | --- 541 | 542 | redis 中的课程缓存信息是将课程发布表中的数据转为 json 进行存储。 543 | 544 | elasticsearch 中的课程索引信息是根据搜索需要将课程名称、课程介绍等信息进行索引存储。 545 | 546 | MinIO 中存储了课程的静态化页面文件(html 网页),查看课程详情是通过文件系统去浏览课程详情页面。 547 | 548 | --- 549 | 550 | 涉及**分布式事务**,课程内容模块、媒体资源模块和课程搜索模块,基于【本地消息表 + 任务调度 + OpenFeign】实现,在课程内容模块中进行远程过程调用其他微服务实现分布式事务控制。(主要原因是 Redis 并不属于一个单独的微服务,所以 Redis 在课程内容模块进行缓存添加,同时使用 OpenFeign 调用其他微服务进行相应操作来简化编码操作,统一在一个模块,方便管理。其次就是其他微服务没有涉及到DB的操作) 551 | 552 | 具体流程图如下: 553 | 554 | image-20230409001507271 555 | 556 | 1、执行发布操作,内容管理服务存储课程发布表的同时向消息表添加一条“课程发布任务”。这里使用本地事务保证课程发布信息保存成功,同时消息表也保存成功。 557 | 558 | 2、任务调度服务定时调度内容管理服务扫描消息表,由于课程发布操作后向消息表插入一条课程发布任务,此时扫描到一条任务。 559 | 560 | 3、拿到任务开始执行任务,分别向 redis、elasticsearch 及文件系统存储数据。 561 | 562 | 4、任务完成后删除消息表记录。 563 | 564 | ### 大文件断点续传流程 565 | 566 | image-20230315233521162 567 | 568 | 1、前端上传文件前请求媒资接口层检查文件是否存在,如果已经存在则不再上传。 569 | 570 | 2、如果文件在系统不存在则前端开始上传,首先对视频文件进行分块 571 | 572 | 3、前端分块进行上传,上传前首先检查分块是否上传,如已上传则不再上传,如果未上传则开始上传分块。 573 | 574 | 4、前端请求媒资管理接口层请求上传分块。 575 | 576 | 5、接口层请求服务层上传分块。 577 | 578 | 6、服务端将分块信息上传到 MinIO。 579 | 580 | 7、前端将分块上传完毕请求接口层合并分块。 581 | 582 | 8、接口层请求服务层合并分块。 583 | 584 | 9、服务层根据文件信息找到 MinIO 中的分块文件,下载到本地临时目录,将所有分块下载完毕后开始合并 。 585 | 586 | 10、合并完成将合并后的文件上传到 MinIO。 587 | 588 | ### 订单支付模块流程 589 | 590 | image-20230315192302950 591 | 592 | 1、请求学习中心服务创建选课记录 593 | 594 | 2、请求订单服务创建商品订单、生成支付二维码。 595 | 596 | 3、用户扫码请求订单支付服务,订单支付服务请求第三方支付平台生成支付订单。 597 | 598 | 4、前端唤起支付客户端,用户输入密码完成支付(支付二维码只能使用一次)。 599 | 600 | 5、第三方支付平台支付完成发起支付通知。 601 | 602 | 6、订单支付服务接收支付通知结果。 603 | 604 | 7、用户在前端查询支付结果,请求订单支付服务查询支付结果,如果订单支付服务还没有收到支付结果则请求学习中心查询支付结果。 605 | 606 | 8、订单支付服务向学习中心服务通知支付结果。 607 | 608 | 9、学习中心服务收到支付结果,如果支付成功则更新选课记录,并添加到我的课程表。 609 | 610 | 涉及**分布式事务**,订单服务模块 和 学习中心模块,基于【本地消息表 + MQ】的方式实现。 611 | 612 | --- 613 | 614 | 选课状态: 615 | 616 | ```json 617 | [{"code":"701001","desc":"选课成功"},{"code":"701002","desc":"待支付"}] 618 | ``` 619 | 620 | 订单交易类型状态: 621 | 622 | ```json 623 | [ 624 | {"code":"600001","desc":"未支付"}, 625 | {"code":"600002","desc":"已支付"}, 626 | {"code":"600003","desc":"已关闭"}, 627 | {"code":"600004","desc":"已退款"}, 628 | {"code":"600005","desc":"已完成"} 629 | ] 630 | ``` 631 | 632 | 支付记录交易状态: 633 | 634 | ```json 635 | [ 636 | {"code":"601001","desc":"未支付"}, 637 | {"code":"601002","desc":"已支付"}, 638 | {"code":"601003","desc":"已退款"} 639 | ] 640 | ``` 641 | 642 | 选课学习资格: 643 | 644 | ```json 645 | [ 646 | {"code":"702001","desc":"正常学习"}, 647 | {"code":"702002","desc":"没有选课或选课后没有支付"}, 648 | {"code":"702003","desc":"已过期需要申请续期或重新支付"} 649 | ] 650 | ``` 651 | 652 | ## HR 653 | 654 | ### 自我介绍 655 | 656 | **HR面:** 657 | 658 | 面试官您好,我叫XXX,来自东北大学,专业是软件工程,目前是一名研三的学生。我本科就读于南昌航空大学,连续四年获得一等奖学金和国家励志奖学金,年级排名前2%,保研到东北大学,硕士期间连续两年获得一等奖学金,年级排名前8%,在校期间参与多项与本专业相关的比赛,获得了国奖。项目经历的话,主要参与了两个项目的开发和设计,一个是基于Netty的RPC框架,还有一个是在线教育平台系统,使用到的技术栈有SpringCloud、SpringBoot、Zookeeper、Mybatis、Redis、Elasticsearch、RabbitMQ等,和贵公司的Java后端开发工程师岗位的职责比较贴切,贵公司作为互联网领域的领先企业,我非常想加入阿里体验先进的技术平台,与众多优秀的同事共事学习、共同进步,**提升自己**。我的自我介绍完毕,谢谢面试官。 659 | 660 | --- 661 | 662 | 腾讯:互联网领域 663 | 664 | 美团:生活服务领域 665 | 666 | 携程:旅游领域 667 | 668 | 拼多多:电商领域 669 | 670 | 快手:短视频领域 671 | 672 | ### 问题 673 | 674 | #### 评价自己什么样的性格? 675 | 676 | 优点:1、乐观 2、积极 3、善学 4、抗压能力强 5、和善 6、**认真**负责、**严谨**、有耐心 677 | 678 | 缺点:1、犹豫 2、感性 3、不会拒绝 4、强迫症? 679 | 680 | 感性:*比较感性意思是指对别人看待或处理问题多从感情角度出发的印象性评价*。 681 | 682 | > 优点: 683 | > 684 | > 1. 细心、有耐心,注重细节和质量。 685 | > 2. 积极进取、乐观向上,充满热情和动力。 686 | > 3. 沟通能力强,善于与人合作。 687 | > 4. 学习能力强,擅长掌握新知识和技能。 688 | > 5. 适应性强,能够适应不同的工作环境和任务要求。 689 | > 690 | > 缺点: 691 | > 692 | > 1. 容易过于追求完美,导致时间管理不够好。 693 | > 2. 在压力较大的情况下,有时会显得有些焦虑。 694 | > 3. 对某些工作领域不够了解,需要不断学习和提高。 695 | > 4. 有时候会被自己的思维方式限制,需要多听取别人的意见和建议。 696 | > 5. 有时候会过于关注细节,忽略了整体目标和战略。 697 | 698 | #### 优势与劣势? 699 | 700 | **优势:** 701 | 702 | 1、首先是和大部分同学相比的话,我参与过很多实验室的项目开发,因此有项目开发经验,并且的话有两次担任项目负责人的经历,所以能更快的上手公司的项目开发当中;然后的话,参与过比较多和专业相关的竞赛,并且也取得了一些奖项。 703 | 704 | 2、学习能力较强,并且的话比较能静下心来去学习和专研一门技术,比如我的一个RPC框架的项目,在开始编写这个项目前,我提前花了几周的时间去参考了目前比较优秀的RPC框架的源码设计和思想,例如Dubbo,然后去仔细研究相关的设计理念和代码实现,对整个框架有了一定了解后,然后花了一个月左右的时间写了一个RPC项目。 705 | 706 | 3、喜欢思考和复盘的人,过往的每次经历,我都会在其中提炼出自己的好的和不好的地方,并在以后的工作中进行提升和改进。 707 | 708 | **劣势:** 709 | 710 | 1、犹豫;2、不会拒绝。 711 | 712 | 3、比较执着,比如在技术方面比较爱钻研,有的时候会为一个技术问题加班到深夜。还有就是,工作比较按部就班,总是按照主管的要求完成任务。另外的缺点是,总在自己的工作范围内有创新意识,并没有扩展给其他同事 713 | 714 | #### 遇到什么难题,怎么解决难题的? 715 | 716 | 对于技术方面的难题,就是去年我们实验室在做一个项目的时候,这个时候我们几个组员都在家里面,有辽宁、江西、山东的,然后这个时候我们需要涉及到各种前后端接口对接测试问题,实验室服务器又在这个时间段维修然后无法使用,同时我们这个项目涉及深度学习,因此需要服务器带有较高配置的GPU才能运行起来,然后现有的带有GPU的云服务器的价格非常高,一两个月将近六七千,然后这个时候我为了能使得小组项目能正常调试开发,去上网查询如何让两台电脑互相进行接口访问,这个时候找到了一种方式,也就是内网穿透,之前我是没有听过这个词的,大概的解决思路就是只要有一个在公网的服务器,然后通过这个公网服务器来让两台电脑去进行数据交互,这个时候我用自己买来学习用的服务器,没有GPU配置一个月大概就几十块钱,然后学着在我的这个服务器上搭建内网穿透,通过几天的学习之后,最终搭建好了内网穿透的服务,配置好两台电脑的信息之后,就能让我们直接的电脑通过公网进行数据访问(PS:我们自己的电脑是带有GPU的,因此可以运行项目)。 717 | 718 | 对于生活方面的就是去年11月底的时候,这个时候我们的项目还有一周左右就要验收了,此时我们的项目还没有经过系统测试,并且的话相关的提交文档等资料还没有写完全,然后一周之后我们的开题答辩也要开始,由于我们前段时间几乎都在忙着做项目,开题答辩的具体内容也还没有一个完整的方案,这个时候两件事都集中在一块过来了,然后我们这段时间几乎每天都工作到一两点钟,白天看论文,然后和我们小导师时不时开会交流我们的开题内容,晚上的话就是抓紧时间负责进行系统的测试,然后针对系统测试内容编写项目的交付文档,最终在验收答辩会之前的话,将所有的文档都交付了,然后在系统验收会上成功通过了系统测试环节,随后几天就是针对之前看的论文还有小导师提供的思路,确定好自己的毕设题目以及技术路线,然后撰写开题报告和答辩PPT,在开题答辩前夕完成了开题的任务,最终的话,我在开题答辩上获得了全组第三的成绩。这段经历我觉得属于近期遇到比较有挑战性的经历,也让自己收获了很多,能够抗住压力,并且在压力下可以协调自己的时间,从而去克服这些困难。 719 | 720 | #### 坚持过最久的一件事情? 721 | 722 | 坚持写日记,从高一开始坚持每天写日记,现在还在保持着,即使很忙,也会写几句话总结一下今天做了什么,以及心情和感受。 723 | 724 | 包括在大四毕业到现在,我每天都坚持做LeetCode上的每日一题的算法题。 725 | 726 | #### 你做过最后悔得一件事情? 727 | 728 | 我觉得我最后悔得一件事情应该自己高中有一段时间,因为自己得一些原因,几乎没有怎么认真学习过,然后从班级十几名到后面的三四十名,最差是倒数十来名。 729 | 730 | #### 你认为最自豪的一件事情? 731 | 732 | 我认为最自豪的一件事,近期印象比较深刻的就是去年5月份开始做的一个项目,之前看合同看到这个项目是个120w的项目,这个项目的话基本上是我一个人完成了近70%,总共是花了6个多月的时间。整个项目的阶段有算法研究、后端开发、前端开发和系统测试、系统部署、项目交付文档撰写六个环节,其中算法研发、后端开发和系统部署全是我一个人独立完成的,然后前端开发也是另一名同学接着我之前写好的代码框架和交互往下进行的,系统测试和项目文档撰写环节也有参与。经过六个月的开发,期间大部分时间整天在研究算法和编码跑实验,在系统验收成功之后,就觉得自己也能在短短六个月的时间去完成一个百万级别的项目,让我觉得特别自豪。 733 | 734 | #### 未来三年至五年内的职业规划? 735 | 736 | 我目前刚进入贵公司的话职位是初级工程师,然后我个人是比较倾向于去做技术方向,所以我的一个规划是,能在2-3年之内晋升为中级甚至高级工程师,3-5年内期望成为技术专家,再往后就是希望能达到高级技术专家甚至技术总监职位。 737 | 738 | 其次的话,因为之前面试过程中我了解到贵公司也会有自己自研的中间件,在我写RPC项目之后,我对中间件或者框架的开发也有比较浓厚的兴趣,因此如果有机会的话,我会想参与贵公司某些自研框架的设计和开发当中,去提升自己的技术能力。 739 | 740 | #### 你对携程的了解 741 | 742 | 携程集团(Trip.comGroup)是中国一家大型旅游网站,1999年创办,总部设立在上海,公司业务范围涵盖酒店预订、机票预订、度假预订等领域。 743 | 744 | 携程平台非常的高,非常大,不管是在技术或业务在互联网+旅游领域都处于龙头地位,并且在各大平台携程的风评也是非常的好,我就想加入携程体验先进开放的平台,与众多优秀的同事共事学习、共同进步,提升自己。 745 | 746 | #### 你对拼多多的了解 747 | 748 | *拼多多*,是以电商为主要业务的一家互联网大厂。拼多多平台非常大,在国内电商领域也是排在TOP级别,并且的话拼多多据我所了解技术氛围以及业务前景都非常好,因此我非常想加入拼多多体验先进的平台,提升自己。 749 | 750 | #### 工作中你觉得最不爽的事情是什么? 751 | 752 | 能直接表达出太过消极或者负面的态度。以下是一个可能的回答: 753 | 754 | 在工作中我非常注重细节和质量,所以如果碰到一些缺乏规范或者不够严谨的工作流程或者代码,会让我感到有些烦躁。但是我相信这些问题都可以通过与同事沟通协调、提出改进建议来得到解决,这样不仅能提高我们团队的工作效率和品质,也能促进个人的成长和发展。 755 | 756 | #### 平时间怎么学习? 757 | 758 | 1. 自我学习:我经常利用业余时间阅读相关书籍、观看教育视频、参加在线课程、听取专家讲座,以提升自己的知识和技能水平。 759 | 2. 社交学习:我会积极参加各种行业和领域的活动和聚会,在与同行和专家的交流中获取新的观点和见解,并且建立有价值的人脉关系。 760 | 3. 实践学习:我注重实践,通过参与项目、做练习、搭建实验环境等方式,把理论知识转化为实际应用能力,并不断优化和改进自己的方法和思路。 761 | 4. 反思学习:每次完成一个任务或项目后,我都会反思过去的经验和教训,分析成功因素和失败原因,并在未来的学习和实践中做出相应的调整和改进。 762 | 763 | #### 选择公司看重什么 764 | 765 | 1、技术栈是否匹配 766 | 767 | 2、base地 768 | 769 | 3、互联网大厂 770 | 771 | 4、业务是否感兴趣或者核心 772 | 773 | 5、薪资 774 | 775 | #### 反问 776 | 777 | 大概多久之后可以出结果呀? 778 | 779 | 薪资? 780 | 781 | 前两轮的面评? 782 | 783 | ### 实习收获 784 | 785 | 主要提升了自己在真实的生成环境中开发的能力,开发过程中提高了自己阅读前人项目代码的水平,理解并熟悉业务,在接到一个需求时,要先去制定一个开发方案,然后再对开发方案作评估,评估通过后再去进行开发,并且开发过程中需要知道自己改动的某个地方会影响到其他的模块,考虑的点更多了,对一个系统的业务熟悉和梳理能力有很大的提升。 786 | 787 | 技术上也得到了一定的提升,比如通过多次设计开发方案,提升了自己对一个需求或者系统模块模块的理解,并且学习使用到了新的工具,规范了自己的编码。 788 | 789 | 做需求时,不要仅限于自己需求所涉及的那一部分内容,要善于对整体系统的了解和把控,主要是对整体系统的架构理解,模块划分,各模块所提供的服务和如何协调工作,技术选型,当前系统面向的用户群体,以及数据规模,系统的迭代开发过程以及需求变更。 790 | -------------------------------------------------------------------------------- /Java学习路线.md: -------------------------------------------------------------------------------- 1 | ## Java学习路线 2 | 3 | ### 介绍 4 | 5 | 个人背景:双非本末九硕,秋招面了5家拿了 **腾讯**ssp、**拼多多**sp、**快手**sp、**阿里**sp和**美团**的offer,实习拿了 **阿里**、**拼多多**、**快手**、**美团**、**华为**和**携程**的offer,暑期选择去拼多多实习了两个半月左右,秋招最终选择签约腾讯了。 6 | 7 | ps:美团感觉最少应该开个sp的,所有面试中表现最好的就是美团,结果给我开个大白菜,有可能是觉得我不会去??? 8 | 9 | 个人GitHub:https://github.com/Wuxinyue1999 (没啥东西,平时间不怎么用,把项目和一些资料上传到这了,hhh) 10 | 11 | ![image-20231106130909903](asset\邮件.png) 12 | 13 | 对应我项目的面经基本上都发在了牛客上:https://www.nowcoder.com/users/715322843 14 | 15 | ### 学习内容 16 | 17 | 学习内容主要有:**Java基础**、**MySQL**、**Spring**、Mybatis、**SpringBoot**、SpringCloud、**Redis**、**RabbitMQ**、**JUC**、**JVM**、Netty、Zookeeper、Dubbo、GIt、Maven、计算机网络、操作系统、设计模式、Elasticsearch、Docker、MongoDB; 18 | 19 | ---- 20 | 21 | 最好要养成边看视频边做笔记的习惯,我个人不太喜欢做笔记,所以一般都找的有配套资料的视频来看,然后稍微加点自己认为重要的内容。 22 | 23 | #### Java基础 24 | 25 | Java基础我个人是没看过啥教学视频,本科的时候都学过,科班的估计大部分人也都会,如果说要看的话,可以推荐看黑马或者尚硅谷的视频: 26 | 27 | 1、[黑马Java入门基础视频教程](https://www.bilibili.com/video/BV1Cv411372m/?vd_source=8f6745987f6d9c4a333570852e433d6c) 28 | 29 | 个人感觉稍微看看就行了,因为后面做项目和学其他东西会大量涉及编码,这里记这么深用处不大,后期开始背八股的时候才是重基础的环节。 30 | 31 | #### MySQL 32 | 33 | MySQL是面试中最重要的一个知识点,面什么厂都必会问,教学视频可以看黑马的: 34 | 35 | 1、[MySQL数据库入门到精通](https://www.bilibili.com/video/BV1Kr4y1i7ru/?vd_source=8f6745987f6d9c4a333570852e433d6c) 36 | 37 | 看完之后,大部分面试基本上都没啥大问题,特别是学完之后后期要多看多复习他的pdf文档,总共有三个 38 | 39 | - MySQL-基础篇.pdf 40 | - MySQL-进阶篇.pdf 41 | - MySQL-运维篇.pdf 42 | 43 | #### Spring 44 | 45 | Spring这一块需要认真学,不要跳过Spring直接去学SpringBoot,而是先学Spring再学Boot,循序渐进,从而对Java生态中的王者框架有一个深入的认识,这一块不仅是面试的重点,更是平时工作的重点,所以建议这一块内容可以多花些时间学学,IOC、AOP、DI这些,推荐的教学视频有: 46 | 47 | 1、[SSM框架教程+SpringBoot](https://www.bilibili.com/video/BV1Fi4y1S7ix/?vd_source=8f6745987f6d9c4a333570852e433d6c) 48 | 49 | 2、[Spring高级教程](https://www.bilibili.com/video/BV1P44y1N7QG/?vd_source=8f6745987f6d9c4a333570852e433d6c) (学有余力可以看) 50 | 51 | #### Redis 52 | 53 | 基本上看完 Java基础+MySQL+Spring+SpringBoot 就可以开始看一些中间件的教学视频同时结合着一些小demo项目去学习,Redis是最重要的中间件之一,这个时候推荐看黑马的黑马点评,这个项目是专门针对Redis的教学视频,同时以一个技术点比较多的项目来进行讲解的,学完这个项目对Redis的原理和应用都有非常深的了解,也可以完整的做出一个项目,这里的秒杀抢购可以自己去进行优化,在后续项目章节中会有说明: 54 | 55 | 1、[Redis入门到实战教程](https://www.bilibili.com/video/BV1cr4y1671t/?vd_source=8f6745987f6d9c4a333570852e433d6c) 56 | 57 | 这里的入门篇、实战篇、高级篇、原理篇都建议看一看,非常有帮助,特别是**实战篇**和**原理篇**,并且都有配套的教学资料,学完之后可以方便复习。 58 | 59 | #### RabbitMQ 60 | 61 | 消息中间件目前也是比较主流的和重要的,RabbitMQ和Kafka用的最多,这里推荐去学习RabbitMQ,简单易上手,教学视频: 62 | 63 | 1、[RabbitMQ入门到实战教程](https://www.bilibili.com/video/BV1mN4y1Z7t9/?vd_source=8f6745987f6d9c4a333570852e433d6c) 64 | 65 | 同样也有配套资料,方便学完后后续进行复习。 66 | 67 | #### JUC 68 | 69 | juc在面试中也是高频和重点,同时实际开发中也经常需要用到,所以,这一步可以开始学习JUC,教学视频推荐黑马的并发编程,内容多并且质量比较高,既有原理又有应用篇,课讲得也很好,也有配套资料: 70 | 71 | 1、[Java并发编程](https://www.bilibili.com/video/BV16J411h7Rd/?spm_id_from=333.337.search-card.all.click) 72 | 73 | #### Netty 74 | 75 | netty不是必须学的,如果想做rpc项目的,就需要学习高性能网络开发框架Netty,这个一般简历上有相关内容一般都会问,所以如果有想写rpc的需要认真学,视频推荐看: 76 | 77 | 1、[Netty全套教程](https://www.bilibili.com/video/BV1py4y1E7oA/?spm_id_from=333.337.search-card.all.click) 78 | 79 | 主要内容就是:Netty线程模型,零拷贝等; 80 | 81 | #### Zookeeper 82 | 83 | 同样,zk也不是必须学的,如果说要做rpc项目或者是简历上有相关内容,就需要学一下zk的使用,这里推荐: 84 | 85 | 1、[zookeeper教学视频](https://www.bilibili.com/video/BV1M741137qY/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c) 86 | 87 | 其实主要是学习zk的使用,然后重点背zk相关的八股,zab协议,选主、脑裂,应用等。 88 | 89 | #### SpringCloud 90 | 91 | SpringCloud面试过程中其实问的比较少,但是如果说自己想做一个微服务的项目的话,就需要先有SpringCloud的学习,这里推荐黑马的SpringCloud教程: 92 | 93 | 1、[SpringCloud微服务技术栈实战教程](https://www.bilibili.com/video/BV1kH4y1S7wz/?vd_source=8f6745987f6d9c4a333570852e433d6c) 94 | 95 | #### Dubbo 96 | 97 | dubbo其实也非必须学的,如果做rpc,可以先学习一下dubbo的应用和原理,然后对自己写rpc项目还是很有帮助的,推荐视频: 98 | 99 | 1、[Dubbo快速入门](https://www.bilibili.com/video/BV1VE411q7dX/?vd_source=8f6745987f6d9c4a333570852e433d6c) 100 | 101 | #### Elasticsearch 102 | 103 | Es一般也少问,简历上有可能会被问到,重点其实也就是倒排索引,教学视频推荐: 104 | 105 | 1、[Elasticsearch教程入门到精通](https://www.bilibili.com/video/BV1Gh411j7d6/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c) 106 | 107 | 其实上面的SpringCloud教学视频里面包括了es的学习,所以学了cloud之后可以不用额外花时间学了。 108 | 109 | #### JVM 110 | 111 | jvm面试也是高频内容,看的顺序可以偏后一点,这里推荐的是尚硅谷的视频: 112 | 113 | 1、[JVM全套教程](https://www.bilibili.com/video/BV1PJ411n7xZ/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c) 114 | 115 | #### Git 116 | 117 | Git&Maven&Docker&MongoDB 这些中间件大致了解一下如何使用就差不多了,教学视频推荐如下,基本都有配套资料: 118 | 119 | [Git全套教程](https://www.bilibili.com/video/BV1MU4y1Y7h5/?vd_source=8f6745987f6d9c4a333570852e433d6c) 120 | 121 | #### Maven 122 | 123 | [Maven全套教程](https://www.bilibili.com/video/BV1Ah411S7ZE/?vd_source=8f6745987f6d9c4a333570852e433d6c) 124 | 125 | #### Docker 126 | 127 | [Docker快速入门](https://www.bilibili.com/video/BV1HP4118797/?vd_source=8f6745987f6d9c4a333570852e433d6c) 128 | 129 | #### MongoDB 130 | 131 | [MongoDB基础入门到高级进阶](https://www.bilibili.com/video/BV1bJ411x7mq/?vd_source=8f6745987f6d9c4a333570852e433d6c) 132 | 133 | #### 其他 134 | 135 | 操作系统、计算机网络可以在b站找课看,也可以直接看小林coding,我是直接看的小林coding,一般字节和腾讯比较喜欢问计网和操作系统。 136 | 137 | ### 项目 138 | 139 | 项目这里推荐一个轮子项目+一个业务项目,这样的话找工作的时候匹配的业务方向面更广; 140 | 141 | 1、手写RPC项目,可以参考:https://github.com/Wuxinyue1999/wxy-rpc; 142 | 143 | 2、在线教育平台项目,可以参考:https://github.com/Wuxinyue1999/xuecheng-plus-project,教学视频[学成在线](https://www.bilibili.com/video/BV1j8411N7Bm/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c); 144 | 145 | 3、黑马点评,可以参考:https://github.com/Wuxinyue1999/xy-dianping; 146 | 147 | 实际上可以把黑马点评中的技术要求高的模块结合到学成在线里面,我是把 秒杀业务 放到了学成在线中,学成在线还有很多配套资料很全面; 148 | 149 | 简历可以参考如下写法: 150 | 151 | ![image-20231106155341175](asset\简历1.png) 152 | 153 | ![image-20231106155353828](asset\简历2.png) 154 | 155 | ### 八股文 156 | 157 | 八股文推荐如下网站: 158 | 159 | 1、自己学习的笔记以及所有视频的配套资料; 160 | 161 | 2、[JavaGuide](https://javaguide.cn/):这个适合突击背诵,内容涉及面广但是都不深入,都停留在表面,可以用来和自己的笔记、配套资料结合背诵; 162 | 163 | 3、[小林coding](https://xiaolincoding.com/):主要是和用来看 **计算机网络** 和 **操作系统**,同时也可以看看里面的 **Redis** 和 **MySQL**,个人感觉这个网站质量非常高; 164 | 165 | 4、[拓跋阿秀](https://interviewguide.cn/):这里主要看的是 **智力题** 和 **场景题** 以及 **海量数据处理**; 166 | 167 | 5、一些额外的八股文pdf, md文档等,可以访问:https://github.com/Wuxinyue1999/JavaWxy,这里是对上述内容的一些补充,记录了一些比较重要和比较偏的面试题,*markdown文件下载下来可以访问图片*; 168 | 169 | 八股文背熟之后,还是靠自己理解,把这些知识都能串联起来,形成自己的一套知识体系,达到问一个点就能把这个点相关的内容全部都说出来,基本上面试这一块就没什么问题了。 170 | 171 | ### 面试 172 | 173 | 面试的话,首先就是不要紧张,把每一次面试都当作一次对话,结果不就是两种:过 和 不过,面试过程中面对面试官问的一个问题,不要就简单的把这个问题的答案机械式的将八股重复一遍就行了,你可以把这个点相关的所有知识点都从头到尾讲一遍,这个时候一般情况下面试官是不会打断你的,而且也可以让他看到你的广度和深度,一个面试下来都按这样回答,基本上十个问题之内就能结束这场面试,而且面试通过率会非常大,当然前提是你自己真的有东西。 174 | 175 | ### 算法 176 | 177 | 算法主要还是得多刷,特别是力扣上的 **剑指offer** 和 **hot100** 题,大部分面试的算法都可能是上面的原题,所以,这两个背都得背下来,其他的就靠自己多刷题多积累了,一些常见的:dp、滑动窗口、双指针、前缀和、回溯等等。 178 | 179 | ---- 180 | 181 | 暂时先写这么多了,后续有想到要补充的再继续完善了~~~ 182 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /Java最新2022版面试题及解答-阿里内部资料(266页)(1).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/Java最新2022版面试题及解答-阿里内部资料(266页)(1).pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Java学习路线 2 | 3 | ### 介绍 4 | 5 | 个人背景:双非本末九硕,秋招面了5家拿了 **腾讯**ssp、**拼多多**sp、**快手**sp、**阿里**sp和**美团**的offer,实习拿了 **阿里**、**拼多多**、**快手**、**美团**、**华为**和**携程**的offer,暑期选择去拼多多实习了两个半月左右,秋招最终选择签约腾讯了。 6 | 7 | ps:美团感觉最少应该开个sp的,所有面试中表现最好的就是美团,结果给我开个大白菜,有可能是觉得我不会去??? 8 | 9 | 个人GitHub:https://github.com/viego1999/JavaWxy (没啥东西,平时间不怎么用,把项目和一些资料上传到这了,hhh) 10 | 11 | 邮件 12 | 13 | 对应我项目的面经基本上都发在了牛客上:https://www.nowcoder.com/users/715322843 14 | 15 | ### 学习内容 16 | 17 | 学习内容主要有:**Java基础**、**MySQL**、**Spring**、Mybatis、**SpringBoot**、SpringCloud、**Redis**、**RabbitMQ**、**JUC**、**JVM**、Netty、Zookeeper、Dubbo、GIt、Maven、计算机网络、操作系统、设计模式、Elasticsearch、Docker、MongoDB; 18 | 19 | ---- 20 | 21 | 最好要养成边看视频边做笔记的习惯,我个人不太喜欢做笔记,所以一般都找的有配套资料的视频来看,然后稍微加点自己认为重要的内容。 22 | 23 | #### Java基础 24 | 25 | Java基础我个人是没看过啥教学视频,本科的时候都学过,科班的估计大部分人也都会,如果说要看的话,可以推荐看某马或者某谷的视频: 26 | 27 | 1、[Java入门基础视频教程](https://www.bilibili.com/video/BV1Cv411372m/?vd_source=8f6745987f6d9c4a333570852e433d6c) 28 | 29 | 个人感觉稍微看看就行了,因为后面做项目和学其他东西会大量涉及编码,这里记这么深用处不大,后期开始背八股的时候才是重基础的环节。 30 | 31 | #### MySQL 32 | 33 | MySQL是面试中最重要的一个知识点,面什么厂都必会问,教学视频可以看某马的: 34 | 35 | 1、[MySQL数据库入门到精通](https://www.bilibili.com/video/BV1Kr4y1i7ru/?vd_source=8f6745987f6d9c4a333570852e433d6c) 36 | 37 | 看完之后,大部分面试基本上都没啥大问题,特别是学完之后后期要多看多复习他的pdf文档,总共有三个 38 | 39 | - MySQL-基础篇.pdf 40 | - MySQL-进阶篇.pdf 41 | - MySQL-运维篇.pdf 42 | 43 | #### Spring 44 | 45 | Spring这一块需要认真学,不要跳过Spring直接去学SpringBoot,而是先学Spring再学Boot,循序渐进,从而对Java生态中的王者框架有一个深入的认识,这一块不仅是面试的重点,更是平时工作的重点,所以建议这一块内容可以多花些时间学学,IOC、AOP、DI这些,推荐的教学视频有: 46 | 47 | 1、[SSM框架教程+SpringBoot](https://www.bilibili.com/video/BV1Fi4y1S7ix/?vd_source=8f6745987f6d9c4a333570852e433d6c) 48 | 49 | 2、[Spring高级教程](https://www.bilibili.com/video/BV1P44y1N7QG/?vd_source=8f6745987f6d9c4a333570852e433d6c) (学有余力可以看) 50 | 51 | #### Redis 52 | 53 | 基本上看完 Java基础+MySQL+Spring+SpringBoot 就可以开始看一些中间件的教学视频同时结合着一些小demo项目去学习,Redis是最重要的中间件之一,这个时候推荐看某马的某马点评,这个项目是专门针对Redis的教学视频,同时以一个技术点比较多的项目来进行讲解的,学完这个项目对Redis的原理和应用都有非常深的了解,也可以完整的做出一个项目,这里的秒杀抢购可以自己去进行优化,在后续项目章节中会有说明: 54 | 55 | 1、[Redis入门到实战教程](https://www.bilibili.com/video/BV1cr4y1671t/?vd_source=8f6745987f6d9c4a333570852e433d6c) 56 | 57 | 这里的入门篇、实战篇、高级篇、原理篇都建议看一看,非常有帮助,特别是**实战篇**和**原理篇**,并且都有配套的教学资料,学完之后可以方便复习。 58 | 59 | #### RabbitMQ 60 | 61 | 消息中间件目前也是比较主流的和重要的,RabbitMQ和Kafka用的最多,这里推荐去学习RabbitMQ,简单易上手,教学视频: 62 | 63 | 1、[RabbitMQ入门到实战教程](https://www.bilibili.com/video/BV1mN4y1Z7t9/?vd_source=8f6745987f6d9c4a333570852e433d6c) 64 | 65 | 同样也有配套资料,方便学完后后续进行复习。 66 | 67 | #### JUC 68 | 69 | juc在面试中也是高频和重点,同时实际开发中也经常需要用到,所以,这一步可以开始学习JUC,教学视频推荐某马的并发编程,内容多并且质量比较高,既有原理又有应用篇,课讲得也很好,也有配套资料: 70 | 71 | 1、[Java并发编程](https://www.bilibili.com/video/BV16J411h7Rd/?spm_id_from=333.337.search-card.all.click) 72 | 73 | #### Netty 74 | 75 | netty不是必须学的,如果想做rpc项目的,就需要学习高性能网络开发框架Netty,这个一般简历上有相关内容一般都会问,所以如果有想写rpc的需要认真学,视频推荐看: 76 | 77 | 1、[Netty全套教程](https://www.bilibili.com/video/BV1py4y1E7oA/?spm_id_from=333.337.search-card.all.click) 78 | 79 | 主要内容就是:Netty线程模型,零拷贝等; 80 | 81 | #### Zookeeper 82 | 83 | 同样,zk也不是必须学的,如果说要做rpc项目或者是简历上有相关内容,就需要学一下zk的使用,这里推荐: 84 | 85 | 1、[zookeeper教学视频](https://www.bilibili.com/video/BV1M741137qY/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c) 86 | 87 | 其实主要是学习zk的使用,然后重点背zk相关的八股,zab协议,选主、脑裂,应用等。 88 | 89 | #### SpringCloud 90 | 91 | SpringCloud面试过程中其实问的比较少,但是如果说自己想做一个微服务的项目的话,就需要先有SpringCloud的学习,这里推荐某马的SpringCloud教程: 92 | 93 | 1、[SpringCloud微服务技术栈实战教程](https://www.bilibili.com/video/BV1kH4y1S7wz/?vd_source=8f6745987f6d9c4a333570852e433d6c) 94 | 95 | #### Dubbo 96 | 97 | dubbo其实也非必须学的,如果做rpc,可以先学习一下dubbo的应用和原理,然后对自己写rpc项目还是很有帮助的,推荐视频: 98 | 99 | 1、[Dubbo快速入门](https://www.bilibili.com/video/BV1VE411q7dX/?vd_source=8f6745987f6d9c4a333570852e433d6c) 100 | 101 | #### Elasticsearch 102 | 103 | Es一般也少问,简历上有可能会被问到,重点其实也就是倒排索引,教学视频推荐: 104 | 105 | 1、[Elasticsearch教程入门到精通](https://www.bilibili.com/video/BV1Gh411j7d6/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c) 106 | 107 | 其实上面的SpringCloud教学视频里面包括了es的学习,所以学了cloud之后可以不用额外花时间学了。 108 | 109 | #### JVM 110 | 111 | jvm面试也是高频内容,看的顺序可以偏后一点,这里推荐的是某谷的视频: 112 | 113 | 1、[JVM全套教程](https://www.bilibili.com/video/BV1PJ411n7xZ/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c) 114 | 115 | #### Git 116 | 117 | Git&Maven&Docker&MongoDB 这些中间件大致了解一下如何使用就差不多了,教学视频推荐如下,基本都有配套资料: 118 | 119 | [Git全套教程](https://www.bilibili.com/video/BV1MU4y1Y7h5/?vd_source=8f6745987f6d9c4a333570852e433d6c) 120 | 121 | #### Maven 122 | 123 | [Maven全套教程](https://www.bilibili.com/video/BV1Ah411S7ZE/?vd_source=8f6745987f6d9c4a333570852e433d6c) 124 | 125 | #### Docker 126 | 127 | [Docker快速入门](https://www.bilibili.com/video/BV1HP4118797/?vd_source=8f6745987f6d9c4a333570852e433d6c) 128 | 129 | #### MongoDB 130 | 131 | [MongoDB基础入门到高级进阶](https://www.bilibili.com/video/BV1bJ411x7mq/?vd_source=8f6745987f6d9c4a333570852e433d6c) 132 | 133 | #### 其他 134 | 135 | 操作系统、计算机网络可以在b站找课看,也可以直接看小林coding,我是直接看的小林coding,一般字节和腾讯比较喜欢问计网和操作系统。 136 | 137 | ### 项目 138 | 139 | - 项目推荐 140 | 141 | 项目这里推荐一个轮子项目+一个业务项目,这样的话找工作的时候匹配的业务方向面更广; 142 | 143 | 1、手写RPC项目,可以参考:https://github.com/viego1999/wxy-rpc ; 144 | 145 | 2、在线教育平台项目,可以参考:https://github.com/viego1999/xuecheng-plus-project ,教学视频 [学成在线](https://www.bilibili.com/video/BV1j8411N7Bm/?spm_id_from=333.337.search-card.all.click&vd_source=8f6745987f6d9c4a333570852e433d6c); 146 | 147 | 3、黑马点评,可以参考:https://github.com/viego1999/xy-dianping ; 148 | 149 | 实际上可以把某马点评中的技术要求高的模块结合到学成在线里面,我是把 秒杀业务 放到了学成在线中,学成在线还有很多配套资料很全面; 150 | 151 | - 对应项目的面试资料 152 | - 对应项目的一些面试资料整理放在了 [Introduction.md](Introduction.md) 文件中,以及一些自我介绍等内容 153 | 154 | ### 简历 155 | 156 | **简历**可以参考如下写法: 157 | 158 | - **个人信息和教育背景** 159 | 160 | 个人信息和教育背景 161 | 162 | - **专业技能** 163 | 164 | 专业技能 165 | 166 | - **项目经历** 167 | 168 | 项目1 169 | 170 | 简历2 171 | 172 | ### 八股文 173 | 174 | 八股文推荐如下网站: 175 | 176 | 1、自己学习的笔记以及所有视频的配套资料,[突击版pdf](Java最新2022版面试题及解答-阿里内部资料(266页)(1).pdf); 177 | 178 | 2、[JavaGuide](https://javaguide.cn/) :这个适合突击背诵,内容涉及面广但是都不深入,都停留在表面,可以用来和自己的笔记、配套资料结合背诵; 179 | 180 | 3、[小林coding](https://xiaolincoding.com/) :主要是和用来看 **计算机网络** 和 **操作系统**,同时也可以看看里面的 **Redis** 和 **MySQL**,个人感觉这个网站质量非常高; 181 | 182 | 4、[拓跋阿秀](https://interviewguide.cn/) :这里主要看的是 **智力题** 和 **场景题** 以及 **海量数据处理**; 183 | 184 | 5、一些额外的八股文pdf, md文档等,可以访问:https://github.com/viego1999/JavaWxy ,这里是对上述内容的一些补充,记录了一些比较重要和比较偏的面试题,*markdown文件下载下来可以访问图片*; 185 | 186 | 八股文背熟之后,还是靠自己理解,把这些知识都能串联起来,形成自己的一套知识体系,达到问一个点就能把这个点相关的内容全部都说出来,基本上面试这一块就没什么问题了。 187 | 188 | ### 面试 189 | 190 | 面试的话,首先就是不要紧张,把每一次面试都当作一次对话,结果不就是两种:过 和 不过,面试过程中面对面试官问的一个问题,不要就简单的把这个问题的答案机械式的将八股重复一遍就行了,你可以把这个点相关的所有知识点都从头到尾讲一遍,这个时候一般情况下面试官是不会打断你的,而且也可以让他看到你的广度和深度,一个面试下来都按这样回答,基本上十个问题之内就能结束这场面试,而且面试通过率会非常大,当然前提是你自己真的有东西。 191 | 192 | ### 算法 193 | 194 | 算法主要还是得多刷,特别是力扣上的 **剑指offer** 和 **hot100** 题,大部分面试的算法都可能是上面的原题,所以,这两个背都得背下来,其他的就靠自己多刷题多积累了,一些常见的:dp、滑动窗口、双指针、前缀和、回溯等等。 195 | 196 | 我的算法总结:https://github.com/viego1999/Leetcode-Pro ,主要的刷题总结在excel表中。 197 | 198 | - ★★★各类算法的md文件总结,包括了常见的算法以及对应的模板题,应对笔试很好用,在**docs**文件夹下; 199 | - **力扣.xlsx**文件包括了上千题力扣题目以及对应标签和总结 200 | - **src**文件夹下主要是对应题目的算法题代码,有力扣、各种oj的 201 | 202 | ---- 203 | 204 | ### 面经合集 205 | 206 | 在文档 [面试记录.md](面试记录.md) 中 207 | 208 | --- 209 | 210 | 暂时先写这么多了,后续有想到要补充的再继续完善了~~~ 211 | 212 | 213 | 214 | -------------------------------------------------------------------------------- /asset/20210629121733256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/20210629121733256.png -------------------------------------------------------------------------------- /asset/32位MarkWord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/32位MarkWord.png -------------------------------------------------------------------------------- /asset/64位MarkWord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/64位MarkWord.png -------------------------------------------------------------------------------- /asset/9c0640bf9f01431cb2c6e4e5c635bfe2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/9c0640bf9f01431cb2c6e4e5c635bfe2.png -------------------------------------------------------------------------------- /asset/AQS数据结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/AQS数据结构.png -------------------------------------------------------------------------------- /asset/B+树.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/B+树.png -------------------------------------------------------------------------------- /asset/BIO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/BIO.png -------------------------------------------------------------------------------- /asset/CPU 硬件总线图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/CPU 硬件总线图.png -------------------------------------------------------------------------------- /asset/CPU执行程序.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/CPU执行程序.png -------------------------------------------------------------------------------- /asset/CPU缓存模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/CPU缓存模型.png -------------------------------------------------------------------------------- /asset/Canal数据同步.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Canal数据同步.png -------------------------------------------------------------------------------- /asset/Compact行格式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Compact行格式.png -------------------------------------------------------------------------------- /asset/HTTPS1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/HTTPS1.png -------------------------------------------------------------------------------- /asset/HTTPS2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/HTTPS2.png -------------------------------------------------------------------------------- /asset/HTTPS3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/HTTPS3.png -------------------------------------------------------------------------------- /asset/IO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/IO.png -------------------------------------------------------------------------------- /asset/IO多路复用.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/IO多路复用.png -------------------------------------------------------------------------------- /asset/JMM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/JMM.png -------------------------------------------------------------------------------- /asset/JavaAPI层面的线程状态.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/JavaAPI层面的线程状态.png -------------------------------------------------------------------------------- /asset/Java线程六种状态.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Java线程六种状态.png -------------------------------------------------------------------------------- /asset/Java线程生命周期.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Java线程生命周期.png -------------------------------------------------------------------------------- /asset/Kernel_Layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Kernel_Layout.png -------------------------------------------------------------------------------- /asset/MySQL两阶段提交.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/MySQL两阶段提交.png -------------------------------------------------------------------------------- /asset/MySQL两阶段提交JavaGuide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/MySQL两阶段提交JavaGuide.png -------------------------------------------------------------------------------- /asset/MySQL主从复制.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/MySQL主从复制.png -------------------------------------------------------------------------------- /asset/MySQL主从库.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/MySQL主从库.png -------------------------------------------------------------------------------- /asset/MySQL语句执行过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/MySQL语句执行过程.png -------------------------------------------------------------------------------- /asset/NIO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/NIO.png -------------------------------------------------------------------------------- /asset/Nacos配置中心.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Nacos配置中心.png -------------------------------------------------------------------------------- /asset/OS-structure2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/OS-structure2.png -------------------------------------------------------------------------------- /asset/PubSub模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/PubSub模式.png -------------------------------------------------------------------------------- /asset/R[0GLDZ2AXY(1AM[MLQ1~8A.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/R[0GLDZ2AXY(1AM[MLQ1~8A.png -------------------------------------------------------------------------------- /asset/Redis分片集群1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Redis分片集群1.png -------------------------------------------------------------------------------- /asset/Redis哈希槽迁移.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Redis哈希槽迁移.png -------------------------------------------------------------------------------- /asset/Redis实现消息队列对比图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Redis实现消息队列对比图.png -------------------------------------------------------------------------------- /asset/Redis通信模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Redis通信模型.png -------------------------------------------------------------------------------- /asset/ReentrantLock和Synchronized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/ReentrantLock和Synchronized.jpg -------------------------------------------------------------------------------- /asset/Routing模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Routing模式.png -------------------------------------------------------------------------------- /asset/SPI运行流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/SPI运行流程.png -------------------------------------------------------------------------------- /asset/SpringBoot启动流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/SpringBoot启动流程.png -------------------------------------------------------------------------------- /asset/SpringBoot自动配置.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/SpringBoot自动配置.png -------------------------------------------------------------------------------- /asset/SpringBoot自动配置核心流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/SpringBoot自动配置核心流程.png -------------------------------------------------------------------------------- /asset/Topic模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/Topic模式.png -------------------------------------------------------------------------------- /asset/Von_Neumann_architecture.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | Speicher 59 | 60 | Steuerwerk 61 | 62 | 63 | 64 | 65 | Rechenwerk 66 | 67 | 68 | Akkumulator 69 | Eingabe 70 | Ausgabe 71 | 72 | 73 | Bộ nhớ 74 | 75 | Đơn vị 76 | Điều khiển 77 | 78 | 79 | Đơn vị 80 | Luận lý 81 | Số học 82 | 83 | Thanh chứa 84 | Ngõ nhập 85 | Ngõ xuất 86 | 87 | 88 | Пам'ять 89 | 90 | Керуючий 91 | пристрій 92 | 93 | 94 | Арифметико- 95 | логічний 96 | пристрій 97 | 98 | Акумулятор 99 | Введення 100 | Виведення 101 | 102 | 103 | Memoria 104 | 105 | Unità 106 | di controllo 107 | 108 | 109 | Unità 110 | aritmetica 111 | e logica 112 | 113 | Accumulatore 114 | Input 115 | Output 116 | 117 | 118 | Memória 119 | 120 | Vezérlő 121 | egység 122 | 123 | 124 | Aritmetikai- 125 | logikai 126 | egység 127 | 128 | Akkumulátor 129 | Bemenet 130 | Kimenet 131 | 132 | 133 | Mémoire 134 | 135 | Unité 136 | de contrôle 137 | 138 | 139 | Unité 140 | arithmétique 141 | et logique 142 | 143 | Accumulateur 144 | Entrée 145 | Sortie 146 | 147 | 148 | Memória 149 | 150 | Unidade 151 | de controle 152 | 153 | 154 | Unidade 155 | Aritmética 156 | e Lógica 157 | 158 | Acumulador 159 | Entrada 160 | Saída 161 | 162 | 163 | Memoria 164 | 165 | Moderatorium 166 | 167 | 168 | 169 | Monas 170 | Logica 171 | Arithmetica 172 | 173 | Accumulator 174 | Inducta 175 | Educta 176 | 177 | 178 | Pamięć 179 | 180 | Jednostka 181 | sterująca 182 | 183 | 184 | Jednostka 185 | arytmetyczno- 186 | logiczna 187 | 188 | Akumulator 189 | Wejście 190 | Wyjście 191 | 192 | 193 | Memorija 194 | 195 | Kontrolna 196 | jedinica 197 | 198 | 199 | Artimetičko 200 | logička 201 | jedinica 202 | 203 | Kolektor 204 | Ulaz 205 | Izlaz 206 | 207 | 208 | Memory 209 | 210 | Control 211 | Unit 212 | 213 | 214 | Arithmetic 215 | Logic 216 | Unit 217 | 218 | Accumulator 219 | Input 220 | Output 221 | 222 | 223 | Memory 224 | 225 | Control 226 | Unit 227 | 228 | 229 | Arithmetic 230 | Logic 231 | Unit 232 | 233 | Accumulator 234 | Input 235 | Output 236 | 237 | 238 | 239 | -------------------------------------------------------------------------------- /asset/XA规范角色.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/XA规范角色.png -------------------------------------------------------------------------------- /asset/arch-z-transection-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/arch-z-transection-1.png -------------------------------------------------------------------------------- /asset/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/bitmap.png -------------------------------------------------------------------------------- /asset/docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/docker.png -------------------------------------------------------------------------------- /asset/gitrebase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/gitrebase.png -------------------------------------------------------------------------------- /asset/image-20230604095528040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/image-20230604095528040.png -------------------------------------------------------------------------------- /asset/java-thread-x-key-schronized-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/java-thread-x-key-schronized-5.png -------------------------------------------------------------------------------- /asset/java-thread-x-key-schronized-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/java-thread-x-key-schronized-8.png -------------------------------------------------------------------------------- /asset/jyw广域网.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/jyw广域网.png -------------------------------------------------------------------------------- /asset/list消息队列.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/list消息队列.png -------------------------------------------------------------------------------- /asset/merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/merge.png -------------------------------------------------------------------------------- /asset/my_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/my_test.png -------------------------------------------------------------------------------- /asset/pubsub消息队列.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/pubsub消息队列.png -------------------------------------------------------------------------------- /asset/rabbit延迟队列.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/rabbit延迟队列.png -------------------------------------------------------------------------------- /asset/rebase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/rebase.png -------------------------------------------------------------------------------- /asset/redis-master-slave-distributed-lock.ccc5be73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/redis-master-slave-distributed-lock.ccc5be73.png -------------------------------------------------------------------------------- /asset/ribbon负载均衡.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/ribbon负载均衡.png -------------------------------------------------------------------------------- /asset/selector: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/selector -------------------------------------------------------------------------------- /asset/udp通信.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/udp通信.png -------------------------------------------------------------------------------- /asset/zookeeper日志持久化.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/zookeeper日志持久化.png -------------------------------------------------------------------------------- /asset/三次握手+连接队列.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/三次握手+连接队列.png -------------------------------------------------------------------------------- /asset/三次握手.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/三次握手.png -------------------------------------------------------------------------------- /asset/主流MQ对比.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/主流MQ对比.png -------------------------------------------------------------------------------- /asset/代金券秒杀.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/代金券秒杀.png -------------------------------------------------------------------------------- /asset/信号驱动IO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/信号驱动IO.png -------------------------------------------------------------------------------- /asset/内核架构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/内核架构.png -------------------------------------------------------------------------------- /asset/分布式事务.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/分布式事务.png -------------------------------------------------------------------------------- /asset/分布课程时序图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/分布课程时序图.png -------------------------------------------------------------------------------- /asset/协程上下文.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/协程上下文.png -------------------------------------------------------------------------------- /asset/哈希槽迁移.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/哈希槽迁移.png -------------------------------------------------------------------------------- /asset/堆.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/堆.png -------------------------------------------------------------------------------- /asset/多级反馈队列调度算法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/多级反馈队列调度算法.png -------------------------------------------------------------------------------- /asset/大小端.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/大小端.png -------------------------------------------------------------------------------- /asset/大文件断点续传.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/大文件断点续传.png -------------------------------------------------------------------------------- /asset/存储器的层次关系图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/存储器的层次关系图.png -------------------------------------------------------------------------------- /asset/学成在线.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/学成在线.png -------------------------------------------------------------------------------- /asset/射线法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/射线法.png -------------------------------------------------------------------------------- /asset/局域网通信.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/局域网通信.png -------------------------------------------------------------------------------- /asset/工作队列模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/工作队列模式.png -------------------------------------------------------------------------------- /asset/带岛屿的多边形.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/带岛屿的多边形.png -------------------------------------------------------------------------------- /asset/幻读.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/幻读.png -------------------------------------------------------------------------------- /asset/广域网.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/广域网.png -------------------------------------------------------------------------------- /asset/序列化反序列化.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/序列化反序列化.png -------------------------------------------------------------------------------- /asset/序列化性能比较.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/序列化性能比较.png -------------------------------------------------------------------------------- /asset/异步IO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/异步IO.png -------------------------------------------------------------------------------- /asset/拦截器过滤器.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/拦截器过滤器.png -------------------------------------------------------------------------------- /asset/操作系统进程状态.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/操作系统进程状态.png -------------------------------------------------------------------------------- /asset/数据库表.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/数据库表.png -------------------------------------------------------------------------------- /asset/整体 GC 问题普适的处理流程.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/整体 GC 问题普适的处理流程.jpg -------------------------------------------------------------------------------- /asset/时间轮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/时间轮.png -------------------------------------------------------------------------------- /asset/根因鱼骨图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/根因鱼骨图.png -------------------------------------------------------------------------------- /asset/消息幂等性保障.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/消息幂等性保障.png -------------------------------------------------------------------------------- /asset/消息队列对比.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/消息队列对比.png -------------------------------------------------------------------------------- /asset/状态码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/状态码.png -------------------------------------------------------------------------------- /asset/秒杀场景下的问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/秒杀场景下的问题.png -------------------------------------------------------------------------------- /asset/秒杀流程图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/秒杀流程图.png -------------------------------------------------------------------------------- /asset/程序的CPU执行时间公式2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/程序的CPU执行时间公式2.png -------------------------------------------------------------------------------- /asset/简单模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/简单模式.png -------------------------------------------------------------------------------- /asset/简历.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/简历.png -------------------------------------------------------------------------------- /asset/简历0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/简历0.png -------------------------------------------------------------------------------- /asset/简历1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/简历1.png -------------------------------------------------------------------------------- /asset/简历2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/简历2.png -------------------------------------------------------------------------------- /asset/简历图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/简历图片.jpg -------------------------------------------------------------------------------- /asset/红黑树.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/红黑树.png -------------------------------------------------------------------------------- /asset/红黑树存储空节点.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/红黑树存储空节点.png -------------------------------------------------------------------------------- /asset/红黑树插入流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/红黑树插入流程.png -------------------------------------------------------------------------------- /asset/红黑树节点关系.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/红黑树节点关系.png -------------------------------------------------------------------------------- /asset/线程上下文.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/线程上下文.png -------------------------------------------------------------------------------- /asset/线程崩溃的缺点.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/线程崩溃的缺点.png -------------------------------------------------------------------------------- /asset/网关基本功能.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/网关基本功能.png -------------------------------------------------------------------------------- /asset/网络发包收包全景图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/网络发包收包全景图.png -------------------------------------------------------------------------------- /asset/菱形继承.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/菱形继承.png -------------------------------------------------------------------------------- /asset/虚拟地址映射逻辑地址.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/虚拟地址映射逻辑地址.png -------------------------------------------------------------------------------- /asset/虚拟文件系统.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/虚拟文件系统.png -------------------------------------------------------------------------------- /asset/虚拟机.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/虚拟机.png -------------------------------------------------------------------------------- /asset/订单支付.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/订单支付.png -------------------------------------------------------------------------------- /asset/订单支付异步通知.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/订单支付异步通知.png -------------------------------------------------------------------------------- /asset/访问修饰符.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/访问修饰符.png -------------------------------------------------------------------------------- /asset/课程发布流程图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/课程发布流程图.png -------------------------------------------------------------------------------- /asset/路由器IP地址.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/路由器IP地址.png -------------------------------------------------------------------------------- /asset/进程上下文.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/进程上下文.png -------------------------------------------------------------------------------- /asset/进程的状态.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/进程的状态.png -------------------------------------------------------------------------------- /asset/连接队列.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/连接队列.png -------------------------------------------------------------------------------- /asset/连接队列结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/连接队列结构.png -------------------------------------------------------------------------------- /asset/邮件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/邮件.png -------------------------------------------------------------------------------- /asset/锁升级.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/锁升级.png -------------------------------------------------------------------------------- /asset/长轮询.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/长轮询.png -------------------------------------------------------------------------------- /asset/闭合路线.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/asset/闭合路线.png -------------------------------------------------------------------------------- /面试记录.md: -------------------------------------------------------------------------------- 1 | # 面经 2 | 3 | [精选题单](https://leetcode.cn/problem-list/2cktkvj/) 4 | 5 | ## 24暑期 6 | 7 | ### 0315携程一面 8 | 9 | 1、自我介绍 10 | 11 | 2、介绍一下 RPC 项目 12 | 13 | 3、服务如何注册以及客户端如何发现 14 | 15 | 4、介绍一下客户端调用、服务端响应的一个完整流程 16 | 17 | 5、客户端进行远程调用的时候是每一次都要去访问注册中心进行服务发现吗? 18 | 19 | 6、获取结果是同步还是异步的(目前做的同步,也可以返回promise由用户自行调用) 20 | 21 | 7、客户端是否知道什么时候结果已经返回了??? 22 | 23 | 8、介绍下第二个项目,你做了什么工作 24 | 25 | 9、讲述一下订单业务的整个流程。 26 | 27 | 10、RabbitMQ发送消息的整个流程。 28 | 29 | 11、RabbitMQ消息太多导致积压怎么处理(要防止丢失)? 30 | 31 | > [消息堆积解决方案](https://blog.csdn.net/feiying0canglang/article/details/120558918) 32 | 33 | 12、订单支付模块用到了事务吗? 34 | 35 | 13、Spring事务如何实现的? 36 | 37 | 14、如果有一个新技术,你是怎么考虑融合到你的项目当中的? 38 | 39 | > 在一般情况下,初步考虑将新技术应用于项目中需要进行以下步骤: 40 | > 41 | > - 确定技术的特点和目标:了解新技术的运行方式、功能、优势和局限性。 42 | > 43 | > - 评估技术与项目的匹配度:分析新技术是否适合项目的需求、成本和时间限制。 44 | > - 确定实施计划:确定技术的实施流程、资源需求和可行性评估。 45 | > - 实施和测试:对技术进行实施并进行相应测试,根据结果进行调整和优化。 46 | > - 持续监测和改进:跟踪技术的表现和发展趋势,在必要时进行更新和改进。 47 | > 48 | > 总之,将新技术应用到项目中需要认真考虑和精心计划,提高项目效率和质量。 49 | 50 | 15、你有什么想问我的? 51 | 52 | ### 0317美团一面(同学) 53 | 54 | 面试,官自我介绍 + 个绍部门 55 | 自己做自我介绍 56 | 1、ArrayList和LinkedList 57 | 58 | 2、Integer i1 = 1000; lnteger i2 = 1000;问: i1 是否 equals i2 拆箱装箱? 59 | 60 | 3、Mysql隔离级别,以及每个隔离级别是如何去保证的, nnodb 和 Mylsam,聚索和非聚族索引 B+树 ? B树? 61 | 62 | 4、mysql是否解决了幻读? 如何解决的? 如何实现可重复读? MVCC? 63 | 64 | 4、redis 数据类型有哪些? 各自底层的数据结构? 主从复制? 兵集群? 65 | 66 | 5、AQS原理? Synchronized 原理? ReentrantLock? 区别? 原理? 67 | 68 | 6、HashTable 的扩容过程? HashMap ? concurrenthashmap? 69 | 70 | 7、创建对象的方法有哪些? clone 方法? 深浅克隆? clone方法是哪里的? 71 | 72 | 8、操作系统:死锁的四个条件?进程调度的方式? 73 | 74 | 9、线程池的七大参数? 线程池处理任务的整个流程说一下? 75 | 76 | 10、JVM内存模型? 作用? 分代? 77 | 78 | 11、spring如何处理循环依赖? 三级缓存? spring装配过程? MyBatis 相关?AOP ? I0C? 79 | 80 | 12、知道哪些设计模式? spring里面用了哪些? 81 | 82 | 13、说一下代理模式? spring里面用到的代理模式的地方? 代理的分类? 83 | 84 | 14、CAP原理? base理论? 85 | 86 | 15、hashcode方法的值是什么? (是内存地址吗? ) hashcode 和 equal方法的重写问题? hashcode是用来干嘛的? 87 | 88 | 16、== 和 equal的区别? 89 | 90 | 17、volatile ? MM? 如何保障可见性? 有序性? 能否保障原子性? 91 | 92 | ### 0320携程二面 93 | 94 | 1、自我介绍 95 | 96 | 2、介绍项目中MySQL、Redis和ES如何使用的? 97 | 98 | 3、为什么选用Redis而不是直接存储在DB中? 99 | 100 | 4、Redis+Lua脚本进行优惠券资格判断做了什么校验? 101 | 102 | 5、预减库存如何实现?(Redis的hash结构的 hincrby key filed -1) 103 | 104 | 6、将消息发送到RabbitMQ失败的情况,如何处理?(可靠传输) 105 | 106 | 7、RabbitMQ中间过程中消息丢了如何处理?(持久化) 107 | 108 | 8、线程池的参数以及线程池的原理? 109 | 110 | 9、线程池的核心线程池的个数怎么设置的? 111 | 112 | 10、ES如何使用的,怎么存储?(倒排索引) 113 | 114 | 11、Redis哨兵模式的主从集群的选主机制? 115 | 116 | 12、ThreadLocal用过吗?原理是什么? 117 | 118 | 13、子线程可以获取父线程的ThreadLocal的值吗? 119 | 120 | 14、项目中Redis除了做缓存还应用到了什么场景? 121 | 122 | 15、项目中Redis+Lua实现防刷限流的原理? 123 | 124 | 16、maven冲突如何解决? 125 | 126 | 17、Java使用的版本,有了解最新的Java版本的特性? 127 | 128 | 18、Java8的垃圾回收器用的是哪个 129 | 130 | 19、说一下ParallelScavenge? 131 | 132 | 20、标记整理算法的流程? 133 | 134 | 21、为什么要用AOP去实现防刷限流? 135 | 136 | 22、AOP的类型? 137 | 138 | 23、描述一下快速排序? 139 | 140 | 24、有没有碰到AOP不生效的情况?(事务调用失效场景) 141 | 142 | 25、HTTP响应码301、302,哪种对搜索引擎比较友好(301)? 143 | 144 | 26、TCP和UDP的区别? 145 | 146 | 27、TCP如何保证可靠传输? 147 | 148 | 28、TPC的三次握手流程? 149 | 150 | 29、如果第三次握手失败会发生什么? 151 | 152 | 30、反问。 153 | 154 | ### 0320美团一面 155 | 156 | 1、面试官自我介绍和部门介绍 157 | 158 | 2、自我介绍 159 | 160 | 3、介绍第二个项目 161 | 162 | 4、讲一下缓存穿透、缓存击穿、缓存雪崩的区别以及解决方法 163 | 164 | 5、解决缓存穿透的第二种方法(布隆过滤器) 165 | 166 | 6、布隆过滤器的缺点(1、误判;2、无法删除) 167 | 168 | 7、介绍一下Redis的数据结构有哪些? 169 | 170 | 8、讲解一下ZSet的底层实现? 171 | 172 | 9、讲解一下跳表的实现原理 173 | 174 | 10、项目中缓存内容的缓存时间设置 175 | 176 | 11、Redis的过期策略以及内存淘汰策略 177 | 178 | 12、Redis的数据分片(Redis分片集群) 179 | 180 | 13、计算某个数据得到哈希槽位置如何去访问到目标节点(节点内部会负责转发到目标节点) 181 | 182 | 14、一致性哈希算法如何解决数据倾斜问题? 183 | 184 | 15、介绍一下ES的倒排索引 185 | 186 | 16、MySQL事务的基本要素? 187 | 188 | 17、简单描述一下对索引的理解? 189 | 190 | 18、为什么MySQL要选用B+树而不是B树或者红黑树? 191 | 192 | 19、项目的量级。。。 193 | 194 | 20、了解MySQL的分库分表吗? 195 | 196 | 21、对于订单量已经到达了一定的规模,如何去对订单表做分表操作?(水平分表,根据交易日期分) 197 | 198 | 22、描述一下乐观锁和悲观锁。 199 | 200 | 23、乐观锁存在的问题? 201 | 202 | 24、如何解决ABA问题? 203 | 204 | 25、说一下事物的隔离级别,分别解决了什么问题? 205 | 206 | 26、**Nacos如何避免读写冲突**?(不会,答了一个Nacos数据更新通知的实现。。) 207 | 208 | 27、介绍一下适配器模式 209 | 210 | 28、项目中使用到了什么设计模式 211 | 212 | 29、了解模板方法和策略模式吗,区别是什么? 213 | 214 | 30、TCP和UDP的区别,在七层模型中位于哪一层? 215 | 216 | 31、TCP的滑动窗口和拥塞窗口和分别解决了什么问题? 217 | 218 | 32、TCP为什么不是三次挥手? 219 | 220 | 33、TCP的粘包和拆包问题,如何解决? 221 | 222 | 34、Netty的线程模型,主从线程模型? 223 | 224 | 35、SpringIOC和AOP介绍? 225 | 226 | 36、Spring框架常见的设计模式? 227 | 228 | 37、SpringBoot相对于Spring多了什么?(自动配置一顿乱讲) 229 | 230 | 38、除了RabbitMQ,还知道其他的MQ吗?为什么选择RabbtiMQ? 231 | 232 | 39、线程和进程的区别? 233 | 234 | 40、进程的调度算法?描述一下**多级反馈队列**??? 235 | 236 | 41、描述一下死锁的条件,如何避免死锁? 237 | 238 | 42、平常用的比较多的Linux的命令 239 | 240 | 43、平常用的JDK几,说一下Java8的新特性???(lambda、接口有default方法) 241 | 242 | 44、了解**菱形继承**吗???? 243 | 244 | 45、平常用的比较多的集合类,说一下ConcurrentMap的实现原理 245 | 246 | 46、描述一下类加载机制 247 | 248 | 47、synchronized和ReentrantLock的区别? 249 | 250 | 48、Java的引用类型有哪些? 251 | 252 | 49、简单说一下ThreadLocal 253 | 254 | 50、JVM的内存划分 255 | 256 | 51、描述一下分代回收算法 257 | 258 | 52、描述一下线程池的参数以及拒绝策略 259 | 260 | 53、maven的**依赖原则**?(最短路径优先等...) 261 | 262 | 54、了解一些排序算法,描述一下用得比较多的。 263 | 264 | 55、简单说一下**延时队列**(说得过于简单。。。) 265 | 266 | 56、了解**Netty当中的时间轮**吗??? 267 | 268 | 57、算法题:1、判断链表是否有环;2、数组中前k个频率的数 269 | 270 | 58、反问 271 | 272 | ### 0323拼多多一面 273 | 274 | 1、自我介绍 275 | 276 | 2、手写 HashMap; 277 | 278 | 3、equals和==的区别? 279 | 280 | 4、描述一下GCRoots的概念; 281 | 282 | 5、为什么不使用引用计数算法? 283 | 284 | 6、你了解的设计模式有哪些; 285 | 286 | 7、Java创建Thread然后start运行起来之后操作系统也会创建对应的线程吗? 287 | 288 | 8、用过什么网络框架吗? 289 | 290 | 9、听说过网络当中的C10K吗,能介绍一下吗? 291 | 292 | 10、如果让你设计一个接受大量请求的网络框架,你会选用什么模型? 293 | 294 | 11、两个数组递增求交集元素; 295 | 296 | 12、说一说SpringIOC; 297 | 298 | 13、说一说虚拟机和Docker镜像的区别? 299 | 300 | 14、Docker中每次运行一个镜像都会创建一个内核吗? 301 | 302 | 15、一个高版本内核的操作系统去运行低版本内核的镜像,可以运行起来吗? 303 | 304 | 16、函数调用和系统调用的区别是什么? 305 | 306 | 17、低版本的镜像在运行时如何向操作系统去申请资源? 307 | 308 | 18、你觉得你自己的优势是什么? 309 | 310 | 19、反问。 311 | 312 | ### 0325拼多多二面 313 | 314 | 1、自我介绍 315 | 316 | 2、介绍一下你自己的项目; 317 | 318 | 3、描述一下服务注册到注册中心和服务下线的一个具体流程; 319 | 320 | 4、如果zk中的服务节点退出了,服务还能访问吗,怎么做? 321 | 322 | 5、如果一个正在被客户端请求的服务提供方准备下线,有什么方法能保证客户端这次能正常通信? 323 | 324 | 6、描述一下JVM? 325 | 326 | 7、元空间为什么移到直接内存中了? 327 | 328 | 8、元空间在什么情况下会达到很大的容量? 329 | 330 | 9、如果你的程序频繁发生GC,你怎么去进行优化? 331 | 332 | 10、MySQL的 in、where 和 exist 怎么用,说说各种情况下如何使用? 333 | 334 | 11、对ES了解吗,你项目中ES做了什么,为什么? 335 | 336 | 12、对于一个Spring程序,如果我想对某一批接口的入参和结果进行某些关键字匹配处理,你有什么方案? 337 | 338 | 13、将一个分数转化成小数,对于循环小数打印出循环部分。 339 | 340 | 14、反问。 341 | 342 | ### 0325美团二面 343 | 344 | 1、自我介绍 345 | 346 | 2、系统的学习过什么Java体系知识? 347 | 348 | 3、介绍一下项目 349 | 350 | 4、分布式事务和分布式定时任务是什么逻辑? 351 | 352 | 5、除了本地信息表加任务调度保证分布式事务,还有什么思路去做,为什么选择这种思路? 353 | 354 | 6、TCC和两阶段提交解决什么问题,这两种方式和你项目的述求是一样的吗? 355 | 356 | 7、你的项目中的述求和其他方式不一样的点是因为不是都是涉及DB吗? 357 | 358 | 8、本地信息表+任务调度的方式有什么缺点? 359 | 360 | 9、其它微服务模块监听MQ中的支付记录有什么问题考量? 361 | 362 | 10、为什么不用【本地消息表+MQ】的方式去实现【本地信息表+任务调度】的方式分布式事务? 363 | 364 | 11、RabbitMQ的特征介绍一下? 365 | 366 | 12、RabbitMQ和Kafka的关键区别是什么?(推拉模式) 367 | 368 | 13、Redis的哨兵模式和分片集群有什么区别? 369 | 370 | 14、客户端如何能够正确的请求到指定哈希槽的master节点?(节点内容进行转发,得到数据后再返回给客户端) 371 | 372 | 15、ES是什么部署架构? 373 | 374 | 16、Redis、ES和DB的数据一致性如何做的? 375 | 376 | 17、秒杀的核心瓶颈是什么? 377 | 378 | 18、MySQL的间隙锁是什么? 379 | 380 | 19、什么情况下不会加间隙锁? 381 | 382 | 20、如果where id = xxx 和 where id > xxx 分别加的什么锁? 383 | 384 | 21、MySQL当中的主从复制的机制; 385 | 386 | 22、主库和从库出现比较严重的主从延迟如何处理? 387 | 388 | 23、什么情况下会出现主从延迟? 389 | 390 | 24、CMS和G1的区别? 391 | 392 | 25、G1使用什么类型的垃圾收集算法? 393 | 394 | 26、Java中的双亲委派机制的目的? 395 | 396 | 27、如何打破双亲委派? 397 | 398 | 28、什么是热部署? 399 | 400 | 29、算法:实现LRU 401 | 402 | 30、如何针对你实现的LRU保证线程安全? 403 | 404 | 31、反问。 405 | 406 | ### 0327字节一面 407 | 408 | 1、算法:小于 n 的最大数; 409 | 410 | 2、自我介绍; 411 | 412 | 3、介绍一下 Netty、Socket、Http 三种通信方式的区别? 413 | 414 | 4、如何用Socket去实现Netty的线程模型? 415 | 416 | 5、Socket的阻塞和线程的阻塞的区别是什么? 417 | 418 | 6、自定义协议和编解码的具体做法; 419 | 420 | 7、五种序列化算法的体积的比较? 421 | 422 | 8、为什么 Kryo 的体积小?(原理) 423 | 424 | 9、使用这种方式进行序列化反序列化的问题是什么? 425 | 426 | 10、几种序列化算法时间上的对比; 427 | 428 | 11、Netty通信的心跳机制如何实现的? 429 | 430 | 12、使用zk做服务注册和发现中心,具体实现流程? 431 | 432 | 13、zk的一致性算法?(原理) 433 | 434 | 14、针对游戏客户端登录服务器的问题,每个客户端进行登录都要先去服务端申请id,当出现大量客户同时登录如何处理,当登录失败如何处理,如何提高id申请的可用性解决方案? 435 | 436 | 15、假设针对上述问题失败率从10%降到了1/1000,但是还是存在失败概率,你如何去处理呢? 437 | 438 | 16、对 RPC 压力测试的具体实现过程; 439 | 440 | 17、假设有3台服务器,性能比为 1: 2: 3 ,设计一个负载均衡算法能合理进行负载均衡? 441 | 442 | 18、针对每个接口,业务执行的时间在某一个范围之内随机跳动,你如何去设计负载均衡算法? 443 | 444 | 19、反问 445 | 446 | ### 0328携程HR面 447 | 448 | 1、自我介绍 449 | 450 | 2、能说一下你对实习的期望是什么? 451 | 452 | 3、你的职业规划? 453 | 454 | 4、说一下遇到的困难或者挑战,如何解决的? 455 | 456 | 5、你认为你刚刚说的困难,假设现在回想一下,有没有什么措施能避免或者降低带来的影响? 457 | 458 | 6、在项目开发过程中有遇到过团队内意见不一致的情况吗,最后如何解决的? 459 | 460 | 7、为什么选择携程? 461 | 462 | 8、你目前投了其他公司吗,有其他公司的offer吗? 463 | 464 | 9、给你offer你会来吗? 465 | 466 | 10、介绍部门业务和情况还有实习工资、转正情况等; 467 | 468 | 11、反问 469 | 470 | ### 0403拼多多三面 471 | 472 | 主管面,全是为什么?为什么?为什么????(全程50多分钟) 473 | 474 | 1、自我介绍 475 | 476 | 2、介绍第一个项目 477 | 478 | 3、Socket和Netty的区别 479 | 480 | 4、为什么Netty更优呢?Socket为什么 481 | 482 | 5、为什么非阻塞式的会更优呢,阻塞之后不是会让出CPU资源吗? 483 | 484 | 6、一致性哈希算法优点,为什么会出现不平衡,如何解决,和其他几种负载均衡算法是否是均匀的分配? 485 | 486 | 7、一个Java程序是多进程还是单进程,为什么一个Java程序不能使用多进程? 487 | 488 | 8、Redis为什么比MySQL快? 489 | 490 | 9、MySQL基于什么语言实现的呢? 491 | 492 | 10、Redis有什么高效的数据结构?所以说SDS优点? 493 | 494 | 11、Redis是单进程的,为什么设计成单进程?假设我把MySQL数据不多,设计成基于内存的,那它和Redis哪个快?为什么?????,单线程不是吞吐量更低吗?为什么还会比MySQL多线程更快??? 495 | 496 | 12、说一说GC?(能讲多少讲多少) 497 | 498 | 13、说一说复制算法和标记整理算法的区别?为什么新生代要用复制算法而不用标记整理,标记整理为什么比复制算法多个步骤,为什么当我把存对象移动到一端之后,不使用一个地址表之类的直接做个指定地址范围回收,这样不是更高效? 499 | 500 | 14、算法题,给定一个kvs数组,格式为:`k1,v11,k2,v21,v22,k3,v31,v32,v33,...,kn,vn1,...,vnn`,指定 `key` ,当 `key` 存在返回对应的下标,不存在返回 `-1`。要求空间 `O(1)` 时间 `O(logn)` 最优。 501 | 502 | 15、反问 503 | 504 | ### 0410美团一面 505 | 506 | 1、自我介绍 507 | 508 | 2、介绍项目 509 | 510 | 3、项目中用了哪些Redis的数据结构? 511 | 512 | 4、为什么用Redis做缓存? 513 | 514 | 5、多线程好还是单线程好?为什么Redis单线程反而更快呢? 515 | 516 | 6、Redis是完全单线程的吗? 517 | 518 | 7、能简单说一说Nio吗? 519 | 520 | 8、Nio如何提升效率的? 521 | 522 | 9、什么是内核态和用户态? 523 | 524 | 10、项目中的缓存雪崩、缓存穿透的情况和处理? 525 | 526 | 11、布隆过滤器是什么? 527 | 528 | 12、布隆过滤器的缺点? 529 | 530 | 13、当布隆过滤器错误过比较高如何进行优化? 531 | 532 | 14、ES在项目中怎么使用的? 533 | 534 | 15、ES和MySQL如何进行技术选型? 535 | 536 | 16、当前系统的峰值? 537 | 538 | 17、系统的吞吐量的瓶颈是什么? 539 | 540 | 18、通过什么方式去提升数据库的能力? 541 | 542 | 19、为什么选择RabbitMQ? 543 | 544 | 20、RabbitMQ和Kafka有什么区别? 545 | 546 | 21、RabbitMQ消息堆积的情况? 547 | 548 | 22、说一下Map(HashMap1.7、1.8,ConcurrentHashMap1.7、1.8) 549 | 550 | 23、算法题:矩阵旋转 551 | 552 | 24、什么时候能入职 553 | 554 | 25、反问 555 | 556 | ### 0410美团二面 557 | 558 | 1、自我介绍 559 | 560 | 2、介绍一下项目 561 | 562 | 3、知道哪些比较成熟的RPC框架? 563 | 564 | 4、你的RPC和Dubbo对比有哪些区别(优缺点)? 565 | 566 | 5、差距点在哪? 567 | 568 | 6、哪种序列化方式损耗的性能最低?为什么? 569 | 570 | 7、粘包拆包怎么解决? 571 | 572 | 8、说一说Netty的原理? 573 | 574 | 9、三种线程模型如何选型?主从多线程模型一定更快吗? 575 | 576 | 10、并发量小就不能用多线程模式吗? 577 | 578 | 11、两个节点有海量数据传输用哪种线程结构?(把他拆成多线程去传输还是什么,怎么选型?) 579 | 580 | 12、TPS压测,了解过哪些系统指标?(CPU切换频率、连接数等) 581 | 582 | 13、写一个多线程的生产者消费者 583 | 584 | 14、算法:用栈实现队列 585 | 586 | 15、一个类两个方法,方法A有注解,方法B调方法A,注解能生效吗? 587 | 588 | 16、JVM的线程状态和操作系统的进程状态的主要区别是什么? 589 | 590 | 17、知道ThreadLocal吗?有什么坑?(内存泄漏,InheritableThreadLocal) 591 | 592 | 18、设计模式问题:开闭原则、依赖倒置?举例,怎么实现等等 593 | 594 | 19、讲讲自己的职业规划 595 | 596 | 20、平常怎么学技术的 597 | 598 | 21、你的老师和同学怎么评价你的? 599 | 600 | 22、有哪些不足? 601 | 602 | 23、反问 603 | 604 | ### 0411拼多多HR面 605 | 606 | 1、父母工作情况; 607 | 608 | 2、本人情况; 609 | 610 | 3、是否独生子女; 611 | 612 | 4、将来工作地点; 613 | 614 | 5、女朋友在哪工作,做什么的? 615 | 616 | 6、目前有哪些offer?为什么不选择其他offer呢? 617 | 618 | 7、如何看待拼多多的工作时间?可以接受吗? 619 | 620 | 8、父母能接受来上海工作吗? 621 | 622 | 9、比较看重拼多多什么? 623 | 624 | 10、实习时间大概是多少? 625 | 626 | 11、为什么没有投阿里、腾讯这些公司?为什么不选择小红书、B站这些公司? 627 | 628 | 12、转正后对薪资的预算是多少? 629 | 630 | 13、反问。 631 | 632 | ### 0421菜鸟一面 633 | 634 | **1h7min** 635 | 636 | 1、自我介绍 637 | 638 | 2、第一个项目遇到的难点以及如何解决的? 639 | 640 | 3、当客户端掉线一段时间再连上来,心态机制还存在吗,或者说是怎么一个过程? 641 | 642 | 4、当A调用B服务,B服务假设有10台节点,当其中一台宕机了,怎么做的服务调用的可靠性?(失败重试,本地服务列表缓存监听) 643 | 644 | 5、有了解过市面上一些比较成熟的RPC框架吗?比如Dubbo、gRPC之类的。 645 | 646 | 6、Dubbo默认使用的是Hessian2序列化算法,你知道实现原理吗? 647 | 648 | 7、实现一个RPC框架最主要看重哪些点?是自己实现的还是小组一起做的? 649 | 650 | 8、性能压测是怎么实现的? 651 | 652 | 9、介绍一下第二个业务项目最有亮点的模块? 653 | 654 | 10、分布式事务怎么实现的?(本地消息表+MQ) 655 | 656 | 11、订单结构怎么设计的,考虑什么因素? 657 | 658 | 12、假设当有人支付成功后立马又发起了退款,并且还没有完成分布式事务,如何处理,订单状态应该如何修改?(新增退款中状态) 659 | 660 | 13、消息重复消费怎么避免? 661 | 662 | 13、当有人恶意使用脚本多台机器多个账号去进行抢购,达到一个十几万的并发量,如何应对做限流措施?(令牌桶) 663 | 664 | 14、抢购业务中的难点以及如何解决的? 665 | 666 | 15、整个项目的架构怎么设计的,怎么考量的?做了分库分表之类的操作吗? 667 | 668 | 16、你订单的id号是根据什么生成的? 669 | 670 | 17、ISO七层模型 671 | 672 | 18、TPC的三次握手和四次挥手 673 | 674 | 19、五种IO模型 675 | 676 | 20、进程和线程的区别 677 | 678 | 21、创建线程的几种方式 679 | 680 | 22、线程池的创建方式?你平时用哪种?你怎么考虑核心线程池个数和最大线程池个数的? 681 | 682 | 23、多线程下的并发安全如何实现? 683 | 684 | 24、ThreadLocal的原理,如何避免内存泄露? 685 | 686 | 25、MySQL的事务机制 687 | 688 | 26、分布式事务实现有哪几种协议? 689 | 690 | 27、ArrayList、HashMap、ConcurrentHashMap 691 | 692 | 28、反问 693 | 694 | ### 0423菜鸟二面 695 | 696 | **35min** 697 | 698 | 1、自我介绍 699 | 700 | 2、聊了一下个人情况 701 | 702 | 3、MySQL的索引,为什么不使用哈希等算法? 703 | 704 | 4、MySQL的行锁和表锁(详细) 705 | 706 | 5、第一个项目为什么要做Netty、Socket和Http三种方式呢? 707 | 708 | 6、针对项目的缓存穿透业务怎么做的? 709 | 710 | 7、布隆过滤器原理和作用 711 | 712 | 8、又开始闲聊 713 | 714 | 9、未来的发展方向 715 | 716 | 10、有没有实际企业开发经验啥的 717 | 718 | 11、平时怎么学习,有没有技术博客 719 | 720 | 12、反问 721 | 722 | ### 0426菜鸟HR面 723 | 724 | **25min** 725 | 726 | 1、针对前面两轮面试,自己的评价 727 | 728 | 2、前两轮面试有没有问到针对底层源码的内容,答得怎么样? 729 | 730 | 3、简单介绍下项目,针对自己的两个项目,有什么提升和优化的地方 731 | 732 | 4、来实习自己觉得可能遇到的最大的挑战 733 | 734 | 5、简历上的自我评价,同学对你的评价、女朋友对你的评价,女朋友在哪工作? 735 | 736 | 6、为什么选择在杭州工作? 737 | 738 | 7、为什么选择去东北大学? 739 | 740 | 8、现在的学校有没有达到你当初的预期? 741 | 742 | 9、自己的这种性格可能对工作有什么好处和坏处? 743 | 744 | 10、应聘的岗位对自己有什么吸引力? 745 | 746 | 11、实习时长是多少? 747 | 748 | 12、反问 749 | 750 | ### 0527华为一面 751 | 752 | 1、自我介绍 753 | 754 | 2、静态方法和非静态方法的区别? 755 | 756 | 3、final、finally 和 finalize 区别和具体用法? 757 | 758 | 4、try catch 通常什么情况下会用到? 759 | 760 | 5、死锁了解吗? 761 | 762 | 6、同步和异步的区别? 763 | 764 | 7、项目中哪些地方使用到了异步? 765 | 766 | 8、多线程对同一个资源的访问如何控制? 767 | 768 | 9、socket的通信流程是什么? 769 | 770 | 10、TCP和UDP的区别是什么? 771 | 772 | 11、负载均衡算法怎么实现的? 773 | 774 | 12、操作系统了解多少?常用的Linux命令有哪些? 775 | 776 | 13、Linux文件的权限有什么,怎么给用户分配权限? 777 | 778 | 14、算法题(*金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥**1011**)-**>**(一千零一拾一元整)输出*)。 779 | 780 | 15、设计模式了解吗?项目中哪些地方用到了设计模式。 781 | 782 | 16、反问 783 | 784 | ### 0527华为主管面 785 | 786 | 1、自我介绍 787 | 788 | 2、毕设题目是什么,怎么确定的?对自己未来的就业岗位有什么帮助? 789 | 790 | 3、说一说参加过的比赛 791 | 792 | 4、平时间如何学习新技术? 793 | 794 | 5、怎么看待自己研究的内容和工作内容直接的联系? 795 | 796 | 6、有没有投过其他公司?互联网公司和华为文化的异同,如何看待? 797 | 798 | 7、互联网公司的培养和华为之间的异同? 799 | 800 | 8、自己未来的职业规划是什么? 801 | 802 | 9、为什么选择做后端? 803 | 804 | 10、为什么选择保研到现在的学校? 805 | 806 | 11、反问 807 | 808 | ### 0606快手一面 809 | 810 | 1、自我介绍 811 | 812 | 2、挑选项目中的一个模块来讲使用到的技术、遇到了什么问题已经如何解决? 813 | 814 | 3、项目中的分布式事务控制如何实现的? 815 | 816 | 4、消息丢失的情况如何处理? 817 | 818 | 5、MQ支持事务消息的流程如何实现的? 819 | 820 | 6、RabbitMQ的消费模式。 821 | 822 | 7、消费的模式是推模式还是拉模式,两者的区别和优缺点? 823 | 824 | 8、HashMap的扩容流程? 825 | 826 | 9、为什么要求容量为2的幂次方,扩容过程中是头插法还是尾插法? 827 | 828 | 10、使用HashMap实现LRU。 829 | 830 | 11、说一下G1。 831 | 832 | 12、有没有jvm调优的实战经验 833 | 834 | 13、算法题 835 | 836 | 14、反问 837 | 838 | ### 0608快手二面 839 | 840 | 1、自我介绍 841 | 842 | 2、介绍一下客户端向服务端发起远程过程调用的完整流程 843 | 844 | 3、为什么使用Netty来做网络通信? 845 | 846 | 4、说一说Netty高性能、低延迟的具体实现? 847 | 848 | 5、序列化算法的指标,几种序列化算法的区别和实现? 849 | 850 | 6、自定义通信协议的优缺点? 851 | 852 | 7、和当前主流的rpc框架的对比? 853 | 854 | 8、dubbo的特性? 855 | 856 | 9、dubbo的SPI如何实现的? 857 | 858 | 10、服务容灾如何实现的?服务雪崩如何处理? 859 | 860 | 11、服务列表缓存如何做的?缓存的数据不一致怎么解决? 861 | 862 | 12、介绍一下第二个项目 863 | 864 | 13、什么是幂等性,如何实现幂等性,项目里使用什么方法做的? 865 | 866 | 14、之前有没有实习过? 867 | 868 | 15、ThreadLocal的实现原理 869 | 870 | 16、undo log 和 redo log 的作用 871 | 872 | 17、MVCC的实现原理 873 | 874 | 18、反问 875 | 876 | ### 0620 Lazada一面 877 | 878 | 1、自我介绍 879 | 880 | 2、介绍一下第一个项目 881 | 882 | 3、序列化的指标,各种序列化算法的比较以及实现原理 883 | 884 | 4、一致性哈希怎么实现的 885 | 886 | 5、Netty的优点,原理,NIO和BIO的区别,什么是IO多路复用,实现原理? 887 | 888 | 6、Netty‘的线程模型 889 | 890 | 7、Netty的零拷贝 891 | 892 | 8、标记接口有哪些 893 | 894 | 9、final关键字的作用 895 | 896 | 10、有哪些并发安全的集合 897 | 898 | 11、ConcurrentHashMap实现原理 899 | 900 | 12、垃圾回收算法有哪些? 901 | 902 | 13、静态变量存放在哪里? 903 | 904 | 14、反问 905 | 906 | ## 24提前批 907 | 908 | ### 0714 字节一面 909 | 910 | 1、自我介绍 911 | 912 | 2、介绍实习经历 913 | 914 | 3、如何快速上手实习工作 915 | 916 | 4、实习过程中遇到最棘手的问题,如何解决的? 917 | 918 | 5、挑一个最熟悉的系统介绍一下系统的整体架构 919 | 920 | 6、对当前数据库的设计觉得有什么不足或者可以改进的地方 921 | 922 | 7、当前的数据是分库分表吗?怎么做的?分库分表的路由规则是什么? 923 | 924 | 8、分库分表需要考虑什么问题?如何解决? 925 | 926 | 9、如何实现唯一id?雪花算法的实现原理?不同机房的数据库如何实现分布式id(Redis也不同)? 927 | 928 | 10、公司单张表最多的数据量是多大? 929 | 930 | 11、拥塞控制原理?流量控制原理?有哪些限流算法,分别介绍,漏桶算法和令牌桶算法的区别? 931 | 932 | 12、执行一条SQL的具体流程和原理? 933 | 934 | 13、知道哪些存储引擎,Innodb和Myisam的区别是什么? 935 | 936 | 14、公司里面的MySQL用的是什么存储引擎,是什么隔离级别?有没有进行修改? 937 | 938 | 15、目前电商很多都把隔离级别设置为了读已提交,为什么这样设置,优缺点?你们公司的是什么级别? 939 | 940 | 16、MVCC是什么,解决了什么问题?如何实现? 941 | 942 | 17、算法题:接雨水(最优解法) 943 | 944 | ### 0718 字节二面 945 | 946 | 1、自我介绍 947 | 948 | 2、拼多多的实习经历 949 | 950 | 3、如何实现的序列化反序列化,自定义通信协议以及完整的传输流程 951 | 952 | 4、NIO、BIO、AIO的区别 953 | 954 | 5、Netty和NIO之间有什么关系 955 | 956 | 6、订单业务主要做了什么? 957 | 958 | 7、如何防止超卖和重复购买的?如何保证秒杀过程中Redis和MySQL的库存一致性?[参考方案](![img](file:///C:\Users\Wuxy\AppData\Roaming\Tencent\QQTempSys\[5UQ[BL(6~BS2JV6W}N6[%S.png)https://segmentfault.com/q/1010000041831964) 959 | 960 | 8、当一张优惠券去同时去购买两个课程,如何保证优惠券不会被重复使用?(分布式锁) 961 | 962 | 9、index(a,b,c),查询 `a=1,c=1,b=1`什么情况,`a=1,b>1,c=1` 情况(是从a下的所有b都找还是有优化),`a>1` 呢? 963 | 964 | > unique_index(a,b,c) 965 | > 966 | > EXPLAIN SELECT * FROM `abcd` WHERE a > 1; # key_len=5 967 | > 968 | > EXPLAIN SELECT * FROM `abcd` WHERE a = 1 AND b > 1 AND c = 1; # key_len = 10 969 | > 970 | > EXPLAIN SELECT * FROM `abcd` WHERE a = 1 AND b = 1 AND c > 1; # key_len = 15 971 | > 972 | > EXPLAIN SELECT * FROM `abcd` WHERE a = 1 AND b = 1 AND c = 1; # key_len = 15 973 | 974 | 10、怎么查看一条语句是否走了索引 975 | 976 | 11、extra 字段中的 `using index` 和 `using where` 的区别? 977 | 978 | 12、Java和C++有什么区别? 979 | 980 | 13、以下代码运行结果 981 | 982 | > ```java 983 | > void test(int a) { 984 | > a++; 985 | > } 986 | > 987 | > Integer a; 988 | > test(a); 989 | > System.out.println(a); 990 | > ``` 991 | > 992 | > ```java 993 | > void test(int a) { 994 | > a++; 995 | > } 996 | > 997 | > Integer a = 0; 998 | > test(a); 999 | > System.out.println(a); 1000 | > ``` 1001 | 1002 | 14、算法题:剑指 Offer 46. 把数字翻译成字符串 1003 | 1004 | 15、反问 1005 | 1006 | ### 0721 字节三面 1007 | 1008 | 1、自我介绍 1009 | 1010 | 2、介绍一下自己的第一个项目的亮点(可以体现你技术的) 1011 | 1012 | 3、如何实现序列化的,序列化的原理是什么,为什么要序列化 1013 | 1014 | 4、自定义通信协议和传统的TCP通信有什么区别? 1015 | 1016 | 5、自己是如何解决粘包半包的? 1017 | 1018 | 6、Netty 和 Nio,为什么要使用Netty。 1019 | 1020 | 7、如何保证缓存数据一致性,实现缓存的原理,缓存使用的更新策略 1021 | 1022 | 8、出现不一致的情况如何处理,如何提高缓存的命中率 1023 | 1024 | 9、缓存击穿的原理以及如何去避免 1025 | 1026 | 10、介绍第二个项目的亮点 1027 | 1028 | 11、如何保证订单和支付记录的状态一致性? 1029 | 1030 | 12、对于一个支付系统而言,如何使其达到强一致性?(同一把分布式锁) 1031 | 1032 | 13、算法题,最大峰值流量 1033 | 1034 | 14、反问 1035 | 1036 | ## 24秋招 1037 | 1038 | ### 0822 美团一面 1039 | 1040 | 1、自我介绍 1041 | 1042 | 2、介绍实习经历 1043 | 1044 | 3、详细叙述一下任务调度系统,以及具体做了什么? 1045 | 1046 | 4、SQL优化怎么实现的,出现慢查询的原因是什么? 1047 | 1048 | 5、订单系统中为什么要使用缓存?数据库压力大的表现是什么? 1049 | 1050 | 6、如何保证缓存一致性问题的? 1051 | 1052 | 7、订单异步削峰如何做的,线程池如何消费的,针对订单失败如何做的? 1053 | 1054 | 8、订单失败,使用本地消息表处理的缺点是什么?使用死信队列怎么做? 1055 | 1056 | 9、订单失败如何给用户进行反馈的? 1057 | 1058 | 10、当有大量失败订单,如果让你来设计如何去调度处理,你会怎么做? 1059 | 1060 | 11、算法题:逆序对数量 1061 | 1062 | ### 0828 美团一面 1063 | 1064 | 1、自我介绍 1065 | 1066 | 2、介绍第一个项目 1067 | 1068 | 3、zookeeper和nacos做配置中心有什么区别? 1069 | 1070 | 4、项目中超时调用,超时时间是如何设置的,怎么实现的? 1071 | 1072 | 5、远程过程调用的过程是同步还是异步进行的? 1073 | 1074 | 6、项目中使用的网络通信模型是什么,具体原理? 1075 | 1076 | 7、服务端这边如何去处理请求的? 1077 | 1078 | 8、Netty的时间轮? 1079 | 1080 | 9、项目中的线程池使用什么方式创建的,线程池参数?线程池的工作原理,max-core的线程如何回收的? 1081 | 1082 | 10、当线程池队列满了新任务到来会发生什么? 1083 | 1084 | 11、线程池的额外线程如何销毁? 1085 | 1086 | 12、tcp连接,当客户端断开连接会发生什么? 1087 | 1088 | 13、Timewait状态是什么,为什么要有这个状态? 1089 | 1090 | 14、Timewait状态过多会导致什么问题? 1091 | 1092 | 15、`Integer a = 128, b = 128; a == b ? ` 1093 | 1094 | 16、两张表,学生表和课程表,求每个学生所有课程都小于60分的学生信息; 1095 | 1096 | 17、表 `table tb(a, b, c), index(a), index(a,b)`,sql语句 `select * from tb where a > 123; `执行过程。 1097 | 1098 | - `using index conditoin` 意味着**查询列**的某一部分无法直接使用索引。 1099 | 1100 | > ```mysql 1101 | > explain select * from tb where a = 123; // key_len=5, NULL 1102 | > 1103 | > explain select * from tb where a > 123; // key_len=5, using index condition 1104 | > 1105 | > explain select * from tb where a > 123 and c = 100; // key_len=5, using index condition, using where 1106 | > 1107 | > explain select a from tb where a = 123; // key_len=5, using index 1108 | > 1109 | > explain select * from tb where c = 100; // key_len=NULL, using where 1110 | > 1111 | > explain select a from tb where a > 123; // key_len=5, using where, using index(使用索引a定位到第一个满足的位置,然后再从当前位置一直往后找到所有满足的索引) 1112 | > ``` 1113 | 1114 | 18、假如结果有100条数据,服务层调用了多少次? 1115 | 1116 | 19、JVM调优 1117 | 1118 | 20、垃圾回收算法有哪些,你项目中用的是什么? 1119 | 1120 | 21、内存分配的方式有哪些? 1121 | 1122 | 22、卡表是什么? 1123 | 1124 | 23、jvm内存区域中哪些不会发生oom? 1125 | 1126 | 24、永久代为什么要变成元空间移到堆外内存中? 1127 | 1128 | 25、Redis有哪些用途?缓存一致性这么做的? 1129 | 1130 | 26、跳表的实现原理是什么? 1131 | 1132 | 27、8个球,一个更重,一个天平需要称几次能找到? 1133 | 1134 | 28、算法题:最长有效括号 1135 | 1136 | 29、反问 1137 | 1138 | ### 0831 美团二面 1139 | 1140 | 1、自我介绍 1141 | 1142 | 2、介绍第一个项目,做这个项目的背景是什么? 1143 | 1144 | 3、本地方法调用和远程过程调用有什么区别? 1145 | 1146 | 4、服务降级和服务熔断怎么实现? 1147 | 1148 | 5、服务链路追踪怎么实现? 1149 | 1150 | 6、压测这么做的? 1151 | 1152 | 7、一致性哈希算法如何实现的?他和普通的哈希算法有什么区别?一致性哈希在rpc调用中适合什么场景? 1153 | 1154 | 8、面向对象设计原则是什么?开闭原则在实际开发中可以实现吗? 1155 | 1156 | 9、说出了解的设计模式? 1157 | 1158 | 10、多个线程的执行结果如何进行汇总? 1159 | 1160 | 11、实习所做的内容以及最大的难点和挑战? 1161 | 1162 | 12、实习过程中收到的负反馈?如何去解决? 1163 | 1164 | 13、实习过程中有什么可以提升或者觉得没做好的地方? 1165 | 1166 | 14、团队合作发生意见不合时怎么解决的? 1167 | 1168 | 15、多个骑手抢一个订单,怎么保证线程安全? 1169 | 1170 | 16、反问 1171 | 1172 | ### 0907 美团HR面 1173 | 1174 | 1、自我介绍 1175 | 1176 | 2、在校期间的项目经历,实习经历和竞赛经历; 1177 | 1178 | 3、选择offer看重什么; 1179 | 1180 | 4、能不能提前去实习; 1181 | 1182 | 5、现在还有哪些流程; 1183 | 1184 | 6、实习期间收获到了什么? 1185 | 1186 | 7、反问 1187 | -------------------------------------------------------------------------------- /面试题.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/viego1999/JavaWxy/69c82b68d5d7b023adadc2421c2d0a1406641397/面试题.pdf --------------------------------------------------------------------------------