字节跳动一面

总时长一个半小时

  1. 自我介绍

  2. 因为我是非科班,加上学习的时间比较短,然后面试官问问平时是如何自学的。

  3. 介绍一下自己的项目

    • 我介绍了我最近的一个社交论坛的SpringBoot结合SSM项目
    • 主要围绕以下几点
      • 基础功能的设计与完善
      • 数据库设计、缓存设计
      • 消息队列如何与项目结合的
      • 项目未来如何改进(前后端分离,分布式微服务架构)
  4. 缓存和数据库的一致性是如何保证的

  5. Redis缓存的过期时间是如何设计的

  6. Redis的key是如何设计的

  7. 项目中用到了Redis的哪几种数据类型

  8. 项目中用户日活和访问量是如何统计的,是否有进行持久化

    • 我没有持久化,其实应该持久化到数据库的
  9. 进程与线程有什么区别

    • 从进程是资源分配的基本单位,线程是CPU调度的基本单位展开,结合Java进程和线程来回答了
  10. HashMap是否了解说一下。

  11. 结合HashMap的一道场景题。

    1. 如果我们需要存进去一个股票Stack类,有两个字段name(String类型)和发行日期(Date类型),new 了两个Stack实例作为key,value是它的价格。如果把这两组k-v放入HashMap是否互相覆盖。

      • 我的回答是不会的,因为没有重写hashCode和equals方法,后面下去自己做了验证

        import java.util.*;
        
        public class Main {
            public static void main(String[] args) {
                HashMap<Stack, Integer> stackIntegerHashMap = new HashMap<>();
                Date date = new Date(2022, 1, 12);
                Stack a = new Stack("aaa", date);
                Stack b = new Stack("aaa", date);
                stackIntegerHashMap.put(a, 12);
                stackIntegerHashMap.put(b, 13);
                System.out.println(stackIntegerHashMap.get(a));
                System.out.println(stackIntegerHashMap.get(b));
            }
        }
        
        class Stack {
            String name;
            Date date;
        
            public Stack(String name, Date date) {
                this.name = name;
                this.date = date;
            }
        }

        image-20220412225735282

    2. 如果Stack实例的name和date相同,我只需要最新的k-v键值对的话,怎么处理。(其实考察的是如何设计Stack类的hashCode和equals方法)

      • 以下重写了hashCode和equals方法,发现只有放进去了一个k-v键值对了(其实hashCode方法的设计并不好,只是完成了功能)
      import java.util.*;
      
      public class Main {
          public static void main(String[] args) {
              HashMap<Stack, Integer> stackIntegerHashMap = new HashMap<>();
              Date date = new Date(2022, 1, 12);
              Stack a = new Stack("aaa", date);
              Stack b = new Stack("aaa", date);
              stackIntegerHashMap.put(a, 12);
              stackIntegerHashMap.put(b, 13);
              System.out.println(stackIntegerHashMap.get(a));
              System.out.println(stackIntegerHashMap.get(b));
          }
      }
      
      class Stack {
          String name;
          Date date;
          public Stack(String name, Date date) {
              this.name = name;
              this.date = date;
          }
      
          @Override
          public int hashCode() {
              return name.hashCode() + date.hashCode();
          }
      
          @Override
          public boolean equals(Object obj) {
              return name.equals(((Stack) obj).name) && date.equals(((Stack) obj).date);
          }
      }

      image-20220412230405726

  12. Object对象有什么方法

    • 只知道几个常用的,建议看看源码😅
  13. 同一个类,synchronized关键字分别加在静态方法和普通方法上,如果在两个线程中分别运行这个类的同一个实例的这两个方法,请问这两个线程之间会相互阻塞吗?

    • 不会的,一个是用this对象作为对象锁,一个用该类的Class对象做对象锁
  14. 为什么数据库加索引更快?

    • 底层采用B+树作为索引的数据结构
  15. 为什么B+树查询更快(问的比较深,实际是想要我详细回答B+树的数据结构)

  16. 场景题:多用户买机票的售票系统如何设计(超卖问题)

  17. 算法题

    • 300. 最长递增子序列 - 力扣(LeetCode) (leetcode-cn.com)
    • 16. 最接近的三数之和 - 力扣(LeetCode) (leetcode-cn.com)
    • 算法题一直是自己的薄弱项,第一题磕磕绊绊半天,然后换第二题也没有想到最优解。这部分其实最拉胯了,感觉其实是在自己水平范围内的题目,但是还是没有答出来,说明自己在面试时候做算法题的经验和策略(不应该在上海30多度的时候在宿舍阳台面对宿舍阳面面试的,人热的晕晕乎乎的,脑子空白。但是疫情封闭又不想打扰舍友休息。之后应该和舍友商量一下,下午面试的时候尽量要在室内,毕竟天气越来越热了)都有问题,然后写题的时候还是尽量先自己想清楚,比如第一题,我随口说了暴力,其实心里想着可以用dp,然后面试官说"好啊,那你给我说说怎么暴力,和我想的是不是一样的",然后自己就一直在想怎么通过暴力再优化,然后就寄了。

总结:面试官人和友善,后面也耐心回答了关于业务的问题,回答的特别详细。自己前半段发挥正常,后面算法拉胯了,解题策略和能力都需要加强,所有,滚去刷LeetCode吧!!!

#实习面经##实习##面经#
全部评论
封在宿舍面试确实不容易
点赞 回复 分享
发布于 2022-05-10 14:21
过了吗
点赞 回复 分享
发布于 2022-04-14 00:17
过了吗
点赞 回复 分享
发布于 2022-04-13 10:33

相关推荐

06-06 03:40
已编辑
电子科技大学 Java
在秋招的小白菜很想养修勾:一眼 苍穹外卖+谷粒商城,项目换一换吧,可以找一些付费知识星球博主带带,避免烂大街。多投投大厂,背背八股,你这学历乱杀了,等实习经验到位,到时候大厂闭眼选
投递美团等公司7个岗位
点赞 评论 收藏
分享
05-03 12:45
西南大学 Java
nsnzkv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
评论
8
52
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务