ZJ Java

字节技术中台提前批三面面经
链接:https://www.nowcoder.com/discuss/714056?source_id=discuss_experience_nctrack&channel=-1
1、自我介绍
2、项目里的MQ用到了什么地方
3、为什么用RabbitMQ,对比过其他的MQ吗
4、RabbitMQ消息丢失怎么处理
5、如果生产者没有收到消息队***认ACK,怎么处理这个投递失败的消息
6、RabbitMQ消费者端消息幂等性怎么保证
7、讲一下虚拟内存
8、什么是用户态、内核态
9、常见的页面置换算法
9、算法:对称二叉树
10、长链接变短链接
11、能实习吗
12、平时怎么学习技术
面试官是个小姐姐,挺和蔼的,许愿HR面!!

字节电商研发一面新鲜凉经
作者:牛客432147821号
链接:https://www.nowcoder.com/discuss/713076?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网

  1. 自我介绍
  2. 计网: 滑动窗口, 拥塞控制, 问了一个没听过的名词不记得了
  3. 操作系统:
    (1) 用户态到内核态有几种形式 (我就说了中断, 然后说到优先级, 中断有哪些优先级 没答上来)
    (2) 怎么由虚拟地址找到实际地址的, 通过页表就能找到偏移量吗
    (3) 然后问了一些我完全没见过的东西全程我不会不知道 😖, 到现在也不记得到底问了些啥😭
  4. MySQL:
    (1) redo log 和 undo log分别实现了数据库的什么
    (2) B+树和hash表的对比
  5. 项目
    问了raft实现, 然后分集群怎么做
  6. Java
    (1) ConcurrentHashMap如何实现线程安全的
    (2) 既然你说到了分段锁, 聊聊重量级锁和自旋锁
  7. 算法题
    一个文件合并问题, 具体要求大概是:
    二维数组, 每行升序排列, 要求合并成一个一维升序的数组.
    但是每个文件可能会撑爆内存, 所以不能一次读取多个数组(我说了归并排序, 面试官说不行), 意思应该是一次只能读一个数.
    想了10分钟没有好思路就直接说不会做了(之前答的不好心态有点崩).
  8. 反问
    因为我是第一次面试, 想问问建议.
    面试官听我是第一次, 就安慰了我一下, 然后说面试的时候不要被之前的问题影响心态, 让我多多积累经验.
  9. 复盘
    问到操作系统的时候被问懵了, 然后后面很多东西就完全懵逼状态过的, 很多东西明明知道是那么回事但就是一下子不能用语言组织出来, 看来还得自己对着镜子多练练.
    到了算法题我已经完全是放弃状态, 一开始题目没读懂, 后面想了几种方法没被认可, 然后就放弃了.

字节跳动抖音支付部门一面凉经(50mins)
链接:https://www.nowcoder.com/discuss/713133?source_id=discuss_experience_nctrack&channel=-1
1.Java类加载的过程
2.threadlocal原理
3.数据库回表是什么
4.数据库中数据的主从复制讲一下
5.Java泛型的原理,类型擦除
6.sql语句从开始运行到查出结果过程中数据库里发生了什么
7.数据库索引的最左匹配规则
8.线程是怎么通信
9.从输入url到浏览器中的过程
10.rpc和http有什么区别
sql:查询一个月内男性购买次数最多的商品名称
算法题:leetcode 反转链表2

面试复盘-字节跳动抖音电商一二三面面经(已意向书)
链接:https://www.nowcoder.com/discuss/711241?source_id=discuss_experience_nctrack&channel=-1
7.28一面 45min
1.自我介绍
2.讲一下HashMap的put方法
3.讲一下HashMap的扩容过程
4.讲一下你自定义协议怎么解决粘包问题的?
5.LeetCode129题(简单回溯)
6.mysql的索引结构
7.为什么用B+树呢?
8.having的作用
9.聚簇索引、非聚簇索引
10.聚簇索引比非聚簇索引的优点
11.线程池的七大参数
12.线程池的运行过程
13.mysql的四个隔离级别,应用场景
14.如何在可重复读隔离级别解决幻读问题
15.怎么使用间隙锁?(for update)
16.dubbo的负载均衡策略
17.java的动态代理
18.Spring哪里用到了动态代理?
19.CGlib动态代理说一下
20.MQ如何保证消息不会丢失?

总结:
整体来说一面偏八股,不会有太多很难的点,整体下来挺顺畅的吧
7.30二面 80min

因为我是RPC项目,所以二面前面闲聊后,主要针对项目进行深挖
1.自我介绍
2.平时是如何学习的?
3.看过哪些经典的书籍?
4.挑一个你的项目中最有深度的来讲一下
5.Nacos和Zookeeper的区别
6.如何考虑选择哪一个?
7.Zookeeper是如何发现服务下线的?
8.那我要是断电了怎么办?(没太明白,面试官说断电了机器还会在跑,不会关闭)
9.实现的负载均衡策略
10.Protobuf底层有了解过吗?
11.还有一些零碎的问题,不太记得了
12.索引的底层
13.你是如何选择什么字段来做索引的?
14.假如现在有三个普通索引a,b,c,我sql查询where a = xx and b = xx and c == xx会怎么样?(索引合并)
15.那如果不想索引合并呢?(直接(a,b,c)联合索引)
16.隔离级别
17.MVCC
18.写道sql,挺简单的,大概写出来给他看一下就ok了,不用运行
19.算法题:圆环上有10个点,编号为0~9。从0点出发,每次可以逆时针和顺时针走一步,问走n步回到0点共有多少种走法。(dfs和dp都可以)

总结:
整体来说二面就偏项目了,问了挺久的RPC,之后加上一些数据库的问题,然后两道题做完就结束了。
8.10 三面 30min

1.你们软工和计科有什么差别吗?
2.那软件项目管理,软件需求分析这些课都有上吧?
3.讲讲软件项目管理过程?还记得吗?(巴拉巴拉一下需求获取、需求分析、概要设计、详细设计什么什么的)
4.打过什么比赛?
5.你做的项目大概是咋样的呢?
6.前后端怎么对接的?
7.项目除了页面的一些功能还有做什么其他功能吗?
8.做过压测吗?
9.MQ的工作流程
10.MQ的底层
11.MQ如何防止消息不丢失?
12.MQ消息大量堆积怎么办?
13.未来打算学哪一块的知识呢?
14.做个题:类似力扣第三题,只不过是数组不是字符,简单滑窗

总结:
三面大部分在聊天,后面扯一扯MQ上面去了,然后就做了个题,做完之后就结束了,全程挺愉快的。
8.16 收到意向书 没有HR面

因为是提前批,该部门没有HR面,三面完就直接意向书了
复盘

1.首先基础部分需要完整地答出来,并且可以将细一点拖面试时间,降低面试官提问到你不会的点去。
2.要善于引导面试官问你所擅长的点,这样子在你熟悉的范围你可以多答很久。
3.遇到不会的问题记得多和面试官讨论,然后尽量回答一些沾边的技术点,不要就支支吾吾说不懂了。

讨论

给出一些高频的问题吧~
1.MQ的一系列问题,有必要整理一下,如消息如何不丢失,消息重复消费,消息大量堆积,MQ的底层原理可以梳理一下。
2.RPC框架的话经常要和dubbo、grpc比较,可以准备一下,同时一些服务注册、发现的问题也挺经常问,还有序列化框架的底层等等。
3.字节的话算法题一定要做出来哈codeTop多刷点高频题吧

字节跳动提前批 后端 五面面经(已意向书)
链接:https://www.nowcoder.com/discuss/710124?source_id=discuss_experience_nctrack&channel=-1

最初投的部门在二面挂了,被其他部门捞之后重新进行三次面试,共五次面经。
一、字节一面 80min

  1. 自我介绍

  2. 讲一个服务器端的项目

  3. http和https的区别

  4. https用到了哪些加密技术

  5. http使用到了哪些其他协议?

  6. **讲一下dns过程。给一个网址www.bytedance.com,dns服务器如何逐级解析的

  7. 讲一下tcp四次挥手,time-wait干嘛的,close-wait干嘛的,在哪一个阶段

  8. Tcp粘包拆包问题

  9. TCP拥塞控制与流量控制区别

  10. Mysql了解吗,讲一下事务,那mysql是如何保证ACID的呢(答了undo-log,redo-log,加锁,mvcc),那讲一下MVCC

  11. 快照读在提交读和可重复读级别下有什么区别

  12. 你提到了隐藏列有一个DB_ROW_ID,是干嘛的?那假设有10个update,到第九个回滚了,DB_ROLL_PTR如何做的,那提交了是否更新DB_ROLL_PTR?

  13. 讲一下索引及其底层,非叶子节点存储的是什么,只有b+树索引吗?(MEMORY是hash索引)

  14. 算法题:给定一个字符串数组[“hello”,”max”,”aello”,”world”],search(String s),判断字符串数组中是否存在一个字符串s1使得:s修改1个字符变为s1**

  15. 算法题:二维数组,从左往右递增,从上到下递增,有重复数字,找一个数字是否存在于数组中。
    二、字节二面 70min

    自我介绍

    项目相关

    用户自己写一个String类,会发生什么?

    Sleep()和wait()的区别?

    Object类里有哪些方法?

    那讲一下equals()与hashcode(),什么时候重写,为什么重写,怎么重写?

    给一道题,判断输出。

    tcp四次挥手,time-wait

    http状态码有哪些(1xx-5xx),那讲一下301与302的区别

    讲一下Mysql聚集索引与非聚集索引,主键索引使用int与string有啥区别,你刚才说了索引底层b+树的结构,那么使用String会不会影响到这个结构

    算法题:找出数字字符串中最长的连续上升子序列(连续上升:前后两数之差为1)(LeetCode 300变种)

三、字节重新一面 50min

  1. 项目(你的哪些技术能用到未来的工作上)

  2. Java多态,如何实现?动态绑定

  3. Hashmap底层,扩容机制,为什么到8转为红黑树,装载因子为什么0.75,你自己设计一个hashmap,如何确定装载因子

  4. Redis作为缓存的基本使用,redis数据结构及底层(c的char[]和redis String有啥区别)

  5. MySQL性能调优;为什么不用select *

  6. 算法1:arr[]数组,n个奇数,n个偶数,重排,奇数位置是奇数,偶数位置是偶数(从0开始),空间复杂度O(1),时间复杂度O(n)

  7. 算法2:判断数组arr[]中是否存在2个数的异或为k(时间复杂度最优)

  8. 反问:部门业务?
    四、字节二面 54min

    项目

    进程与线程区别,进程通信方式,说一下socket,socket在本机和在网络通信区别

    多进程与多线程的区别以及使用场景

    算法题:之字型打印二叉树

    场景题目:设计王者荣耀战力排行榜,显示某区服所有玩家战力排行情况,以及我自己的战力排行情况

    反问

(这一面让场景题搞的有点懵,很多题回忆不起来了)
五、字节三面 35min

  1. 项目
  2. 讲一下https,为什么要先使用非对称加密,那非对称加密不能保证安全性吗?(能)
  3. 讲一下http,请求头,状态码
  4. 现在我们视频面试用到哪些协议(DNS,HTTP,HTTPS,TCP,UDP),UDP用在哪里
  5. 讲一下你了解的对称加密算法和非对称加密算法(DES,AES,RSA),非对称加密如何保证它的安全性(数论大数分解)
  6. xss攻击、cors攻击原理
  7. Mysql存储引擎的作用,事务隔离级别,分别存在什么问题
  8. Java如何保证多线程安全
  9. I/O多路复用讲一下,epoll优势在哪,为什么,epoll水平触发与边缘触发
  10. 算法题:二维数组顺时针旋转90度
  11. 有实习经历吗?为什么不实习?
  12. 未来职业规划
  13. 讲一个你最有成就感的事(社团+科研)
  14. 说一个自己的优缺点
  15. 反问

面试复盘 | 字节提前批面试
作者:鹿与狼儿
链接:https://www.nowcoder.com/discuss/709354?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网

一、算法
1、二维矩二进制矩阵,0能构成的 最大正方形
力扣: 剑指 Offer II 040. 矩阵中最大的矩形
二、项目介绍
1、分库分表策略
使用用户uid进行映射,将用户的数据存储在映射到的库表中
2、热点数据并发读写
从业务考虑,当前分库分表策略能hold得住。随着后续访问量增加,拓展的话,需要进行数据迁移
三、网络
1、 time_wait
TCP四挥手中,客户端最后一次发送消息之后,需要等待两个MSL时间,确保服务器能收到最后一个报文,期间客户端就是处于time_wait状态
2、网络拥塞
滑动窗口机制,慢开始、拥塞避免、快恢复、快重传
3、窗口的作用
网络拥堵时,限制发送到网络的报文数量
四、数据库
1、mysql分页查询和limit、offset原理和优化
讲了数据库底层原理,B+树,但是优化这个没有答出来
2、脏读和幻读
脏读:事务之间相互干扰, 一个事务读取到另一个事务未提交的的数据; 幻读:一个事务读取时,另一个事务添加了数据,造成前一个事务读取到新的数据、总数不一致(幻读针对的是一整批数据,不可重复读是针对一条数据)
3、MVCC
首先MVCC的作用是用于实现事务并发读写;然后介绍快照读和当前读;然后介绍实现原理是隐式字段,两种undolog日志,ReadView。
一、项目经历
1、没有自我介绍,直接就从实习的 项目说起
2、 项目中分库分表策略(答案同一面)
3、如何扩容,成本如何 (答案同一面)
4、使用用户id分库分表,跨账号查询怎么解决
按照id去查询,然后合并结果
5、跨账号查询中实现分页查询 算法
延伸到合并两个有序列表,再延伸到合并m个有序列表中分页的 时空复杂度
6、合并有序列表,引申到数据结构根堆及其时空复杂度
二、算法题
1、给定一个数组,里面存储linux的目录,".."表示上一级,"."表示当前目录,统计不同路径的个数
时间关系,没有统计个数,仅对目录进行转换

import java.util.Stack;
public class Main {
    public static String solution(String str) {
        String[] strArr = str.split("/");
        Stack<String> stack = new Stack<>();
        for (String strItem : strArr) {
            if (strItem.equals(".") || strItem.equals("")) {
                continue;
            }
            if (strItem.equals("..")) {
                if (stack.isEmpty()) {
                    continue;
                } else {
                    stack.pop();
                }
            } else {
                stack.push(strItem);
            }
        }
        String result = "";
        while(!stack.isEmpty()) {
            result = stack.pop() + "/" + result;
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.println(solution("/root/a/b/d/../c"));
    }
}

三、反问
1、电商系统的特点?
业务知识可能比较繁杂,特别是涉及金额的计算部分
三面
一、自我介绍
1、 教育背景+实习经历
2、着重介绍实习 项目,设计分布式、数据库分库分表、数据筛选、并发
二、实习项目拓展
1、实习 项目中数据量大小
从同步数据量聊到如何做数据筛选,如何减轻数据库压力、减少对当前业务的影响。
2、 项目中分布式锁如何实现
利用Redis实现,加锁时在Redis中写入键值对,写入成功则获得锁;解锁时删除键值对。锁设置有效期为五分钟,数据同步平均耗时半分钟,考虑热点数据+数据库延迟,分布式锁有效期为5min。
3、数据库扩容怎么做?
首先要数据迁移,将新的数据迁移到新的库表,这个工作联合运维一起实施。当前程序支持数据库扩容,所有实例、库表信息都由配置文件引入,修改配置文件即可,无需更改业务代码。
4、并发考虑
考虑数据库级别开启多线程处理,不在数据库一级别开启线程,减少数据库压力
三、算法
1、 10个城市编号0~9,城市之间移动只能前后移动(比如5只能到4或者6),10个城市构成一个环,从0可以到9,从9也可以到0。从任意城市X出发,途径N个城市回到出发点,问有多少途径?

public class Main {
    //dp + 递归
    static int solution(int X, int N){
        int result = recur(X, X + 1, N);
        return result * 2;
    }

    static int recur(int X, int Y, int N) {
        if (N == 0) {
            if (Y == X) {
                return 1;
            } else {
                return 0;
            }
        }
        //处理循环
        int pre = Y - 1;
        if (pre < 0) {
            pre = 9;
        }
        int next = Y + 1;
        if (next > 9) {
            next = 0;
        }
        return recur(X, pre, N-1) + recur(X, next, N-1);
    }
    public static void main(String[] args) {
        System.out.println(solution(0, 3));
    }
}

四、闲聊
1、目前在做什么,后续有什么打算?
目前还在实习,预计9/10月回校,希望在未来一两个月把实习中遇到的技术点好好掌握
2、参加过什么竞赛?
本科参加的比赛比较多,研究生后参加的少。主要参加了xx机器人大赛,xx杯编程赛,也拿到了不错的成绩
五、反问
1、今天表现怎么样?
挺好的,没什么问题
2、跨境汇率问题,在电商中如何解决?
目前还是按照人民币结算,汇率的变动不能由消费者承担

思考与总结
1、数据库查询语句中limit offset优化,这个根据网上的帖子,利用子查询和join的优化,好像面试官不满意,大家可以讨论一下
2、数据结构的基础非常重要,由于自己实习两个多月,没有复习数据结构,忘记了根堆的相关知识,没有回答道相关问题。基础还是很重要的呀。

字节跳动提前批 电商后端 一二三面已OC
作者:无聊刷刷
链接:https://www.nowcoder.com/discuss/709145?source_id=discuss_experience_nctrack&channel=-1
来源:牛客网

很多问题记不清楚了。运气比较好,问的问题都比较常规。
算法题大家多刷code top,上面有字节高频题库。

一面 45分钟
自我介绍
介绍项目
通过项目引申一些基础知识
redis为什么高性能?
答:1.io多路复用(展开介绍 select poll epoll) 2.展开介绍reactor模式
redis有哪些数据结构?
linkedlist和arraylist的区别
对线程安全的理解
线程安全的list有哪些 介绍下CopyOnWriteArrayList
concurrenthashmap如何保证线程安全
介绍CAS
介绍volatile
介绍下kafka,kafka如何保证消息不丢失
kafka和rocket mq的对比
算法题: 力扣 组合总和

二面 50分钟
二面主要是考察对项目的扩展,并不具备多少参考价值
kafka如何保证消息顺序?如何保证消息幂等?
partition的分配策略
redis和mysql的双写一致性问题
介绍AOF RDB,AOF和RDB各自的优缺点
热度排行如何实现
很多问题遗忘了,大部分是项目相关的问题
算法题:力扣 基本计算器II

8.6 三面 50分钟
rpc项目,服务发现如何做?服务如果挂了,如何发现?了解dubbo吗?dubbo如何做服务发现,如何做容错?
rpc项目有没有对数据完整性作校验,考虑了哪些网络安全问题?
介绍下netty
介绍下多进程 多线程(展开介绍了 为什么引入多进程,有了多进程为什么引入多线程,进程通信方式,进程的状态,进程调度算法,死锁)
MySQL事务的特性,隔离级别,如何实现这些隔离级别?(展开介绍MVCC)
了解分布式事务吗?(介绍了一下CAP BASE 两阶段提交 三阶段提交 )
分布式ID如何生成
算法题: codetop上的 圆环回原点问题 https://mp.weixin.qq.com/s/NZPaFsFrTybO3K3s7p7EVg

全部评论

相关推荐

评论
点赞
3
分享

创作者周榜

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