面经(2022 美团暑期实习 -一面)

  1. 自我介绍 
  2. 项目:
    1.   简要介绍项目的相关的事宜

      1. 面经(2022 美团暑期实习 -一面)_第1张图片
      2. 可以根据项目的架构图来进行相应的项目描述
      3. 介绍相应的项目架构:(应用层、服务层、数据的底层存储介绍)(具体做出相应的划分)
      4. 商品的相应的数据库的表设计
      5. 商品中的服务层相应的组块()                                                                                                                                       
      6. 项目的架构方面的实现:(单体模式还是分布式的模式(应用了什么的技术))
        1. 微服务:分成具体的那些模块()
        2. 商品服务负责的那些内容:
        3. 商品预定是属于那一块的服务类型
        4. 商品的相关信息(数据库中相应的表的字段)
        5. 商品服务中如果要进行相应的减库存(限流(也有可能并发的减少库存):使用线程安全的集合去 保证数据安全(分布式锁来实现(answer):相当于单线程)),要怎么进行操作
        6. 使用mysql和redis进行数据缓存 ,在使用redis的时候数据的更新策略为什么是先更新数据库在更新缓存。
        7. redis的数据的有效时间一般来说设计多少比较合适
        8. 缓存的查询:先去查询redis,然后没有再存储
        9. 保存数据库的读写一致性问题?如何去解决(采用的是先更新数据库再去更新相应的缓存(通过进行相应的举例说明来解释)(redis的ppt说明上))
        10. redis 上数据更新的方式(主动更新以及相应的自动更新的方式),先更新了MySQL的相关数据,再更新redis。
        11. 更新redis的失败之后会进行如何的处理?会有相应的线程去处理进行数据的验证(定时任务的扫描)
    2. 项目的并发较大,巅峰期的qps的大概在多少?(回答-10w)
      1. qps (每秒处理多少的请求)
      2. 项目的并发操作的实现
  3. 八股(本次主要设计的是数据库、Redis 、jvm、Linux的相关操作、)
    1. 不熟悉的点:
      1. 在提到聚簇索引、非聚簇索引的时候 提交回表的相关操作
      2. 跳表:通过在双向链表上
    2. mysql的事务有那些的了解(acid 以及相应的幻读、不可重复读、)、相应的隔离级别以及相应的解决方案
    3. redis 相关的数据类型(5种)
    4. sort Set 的相关的数据结构
    5. Linux的相关操作(记住常用的几个,并且集合相关的业务场景去进行描述)
    6. 线程池的相关参数以及相应的 执行流程
    7. juc下的锁的相关含义(sychronzid(锁的一个优化升级(无锁、偏向锁、轻量级锁、重量级锁的简要描述))、JUC 包下相应的锁(RentreenLock、读写锁(ReentransWriterReadLock )、关键字volatile ))
    8. jvm虚拟机中运行内存的简要描述(相应的堆、方法区(常量池)、java虚拟机栈、本地方法栈、程序计数器的相关功能)
    9. 垃圾回收:
      1. 垃圾回收的主要区域:堆
      2. 垃圾回收主要回收的对象:
      3. 判断一个对象是否容易被回收:使用可达性算法,判断到gc root的相关的距离
      4. 那些对象可以被当作gc root 
        1. 虚拟机栈中的引用对象
        2. 方法区中类静态属性引用的对象
        3. 方法区中常量引用对象
        4. 本地方法栈中JNI引用对象
  4. 最近都学习那些相关的计算机的书(按照所学的学科以及 相关的中间件进行回答:)
    1. 计算机网络:
    2. 数据结构
    3. 计算机操作系统:
    4. spring :
    5. redis:
    6. jvm
    7. 相应的算法书籍
  5. 在项目中学习和使用的中间件大概是有那些
    1. springcloud 进行微服务的架构
    2. spring naco 作为相应的注册中心以及配置管理中心
    3. 使用相关的消息中间件来进行消息的异步处理
  6. 算法题:

    1. 面经(2022 美团暑期实习 -一面)_第2张图片
    2. 思路:使用滑动数组进行实现(设置一个双指正实现 )
    3. class Solution {
          public int removeDuplicates(int[] nums) {
              //目的:删除掉重复项(有序数组)
              int slowIndex = 0;
              int fastIndex = 1;
              //创造位移差
              while(fastIndex < nums.length){ // 本质是循环终止
                  if(nums[fastIndex] != nums[slowIndex]){
                      nums[++slowIndex] = nums[fastIndex]; 
                      //相当于自己复制(差为1 时),若差值超过1(大于等于2)迁移覆盖
                  }else{ //相等(还抱着自己等于自己的前进)
                      fastIndex++;
                  }
              }
              return slowIndex + 1;
          }
      }

你可能感兴趣的:(java,面试)