• 最新版校园招聘进大厂系列----------(3)字节篇 -----未完待续


    📢📢📢📣📣📣
    哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝
    一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜
    喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

    ✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

    ❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
    ————————————————

    如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

    目录

    写在前面

    技术篇:

    后端:

    面经1

    面经2

    面经3

    面经4

    面经5

    面经6

    面经7

    前端

    面经1

    面经2

    面经3

    面经4

    面经5

    产品篇

    面经1

    面经2

    面经3

    测试:

    面经1:

    面经2

    面经3:(社招了解)

    面经4

    面经5


    祝大家都获取到自己理想的offer,加油加油加油

     2022年是真的卷,985毕业的也不能随随便便拿一堆offer了,有的甚至在提前批都没获得面试的机会至今还没斩获offer😂

    在大环境不景气的背景下,的确找工作就变得难上加难了,不过我们始终相信打铁还需自身硬,只要你有足够的实力,准备充分,找一份好工作还是可以的。今天我就准备了阿里的近几年面试试题,供大家学习分享。

    写在前面

    由于大家相对来说面试经验相对较少,博主这里暂时就简单给大家提几个意见,简历要做的简而精,毕竟每一个面试官的时间和精力都有限,(这里说的是技术面试官)一般都是忙里偷闲进行面试,平时还会有迭代需求要做,同时还会有bug开各种无聊的会议,所以简历推荐大家写的简而精

    不要写一些无关紧要的东西。

    其次突出自己的重点优势,由于大家是校招,项目和实习经历相对较少,所以有项目和实习经历对于你们来说都是加分项,在写项目和实习经历的时候,也不要长篇大论,让人能看明白你做了些什么,突出项目和实习中的难点,你是如何解决这些问题的,这种解决问题的思路想法也是面试官非常关注的问题。面试官很有可能对你做的项目感兴趣,这样整个面试有可能就围绕这个项目和经历进行展开了。这里给大家说一个技巧,我们应该学习引导面试官,引导面试官问一下你自己熟悉的东西,学会引导他不问你不熟悉的东西,这样面试起来起码回很舒服,不至于一问三不知,陷入尴尬的场面。

    自己不会的千万别在简历上写,因为面试官和我们不熟悉,只能够通过简历来了解我们,所以简历上写的东西都有可能成为面试的重点。(由于技术开发人员一般是不健谈的,所以他们一般都问一下技术上的东西,喜欢一连串的问下去,直到你不会为止),所以自己只是涉及过一点的最好不要出现在简历上,如果写就写了解即可,这个面试官一般不会去深闻。另外不要写精通什么,因为面试官自己都不敢说精通这个(当然大佬可以忽略这个)

    最重要的一点是要诚实,不要说谎,当然有人在说谎这方面很厉害,几乎没有什么破绽,但是纸里包不住火,总有露馅的时候。所以如果我们不会的可以直接说对不起面试官这个我不熟悉,面试官也不会为难你,会换一个话题唠的。

    这里就简单写了一些面试的心得,后续再出一篇面试心得技巧指南的文章。

    这里整理了一些同学们的面试心得,如果侵权了可以联系我,我会删掉

    技术篇:

    后端:

    面经1
     

    1.自我介绍,聊了聊学校近况

    2.Java 集合框架,看了哪些源码,arraylist、linkedlist原理,让你实现一个 hashmap 机会如何设计(没让手写😂)

    3.线程池的执行过程、核心参数以及常用的几个线程池(感觉每次面试都会问😂)

    4.JVM 的相关知识,OOM 如何定位,说几个虚拟机指令以及虚拟机栈可能会发生什么错误,四种引用类型

    5.Java 并发,synchronized 性能为什么提高了(锁升级过程),与 Java 的 lock 有什么区别以及使用场景

    6.网络,输入 www.baidu.com 都会发生什么

    7.http 报文结构,头部都有哪些字段

    8.进程与线程,了解协程吗(大概说了下)

    9.死锁了解吗,说一下条件,如何解决

    10.让写一下链表实现插入方法(顺序不在这里,忘了在哪了,突然想起来了),查询效率呢,怎么优化

    11.写个算法,给一个表达式的字符串(+-*/),算出字符串的结果,没考虑括号说了下括号的思路

    12.问问题

    面试小哥很厉害,比较有耐心。没回答上来的都给耐心讲解,引导着问问题,由浅入深体验极佳😀

    面完让稍等一下,十分钟后二面


    链接:字节跳动Java面经(已offer)_笔经面经_牛客网
    来源:牛客网
     

    1.面试官看着就很厉害,在家办公感觉很忙,上来先问实习的时间以及时长,说最好半年

    2.没有自我介绍直接开始,先是网络,TCP 三次握手四次挥手,time_wait 和 close_wait 具体干什么,为什么要三次两次不行吗,有大量连接处于 time_wait 的原因,TCP 是长连接还是短连接

    3.Https 了解吗,说一下整个过程(对称加密,非对称加密),与 http 的不同点

    4.进程线程又问了,进程间通信方式(剩下的想不起来)

    5.数据库部分知识,手写一个 SQL (子查询 感觉主要看 group by 和 having)

    6.算法题,最长公共连续子串

    一二面顺序可能也是混乱的,记不清楚了,二面面试官感觉好忙啊,写题的时候,他就在忙着敲什么,感觉好不容易啊,一边得面试还在工作😂,体验较好,部分问题也引导着问

    面经2
     

    简历写了分布式,聊聊分布式基本信息(CAP,BASE);

    Redis的基础数据类型和具体应用场景;

    Redis的set求交集的时间复杂度;

    MySQL的索引(B+和B树的区别,为啥用B+);

    让你设计数据库会注意什么;

    线程和进程的区别和联系;

    HTTP的一整套;

    还有maven的记不清了,因为直接说了不会...

    编程题:力扣32最长有效括号,一开始用栈写结果脑抽,最后dp硬刚了出来。


     

    说说自己项目的请求过来,服务器内部怎么处理的;

    类似秒杀的系统怎么设计,有什么注意事项;

    Redis的缓存雪崩和缓存击穿;

    因为提到了降级,说说降级策略(自己给自己挖坑,面完立马去总结了);

    MySQL的索引;

    JVM GC的一整套(算法、分区、判断方法、GC器);

    Spring的AOP和IOC的偏底层实现;

    介绍Spring MVC以及其底层原理;

    聊聊MQ,你项目用了RabbitMQ仔细说说底层的东西;

    几十G的数据都是URL,内存空间只有1G,磁盘空间无限,统计频率最高的Top 10;

    编程题:

    一个SQL,和从不订购的客户一样,左连接完事;

    一个判断平衡二叉树

    hr面

    就是聊天。最有成就感的事,加班看法,之前面试的感受,未来规划等等。

    面经3

    1. 【高频】Java内存区域   :

    { 程序计数器 , 虚拟机栈 ,本地方法栈 , 堆 ,方法区 ,元空间 }    // 每个区域要能介绍一下

    2.    Minor GC 触发条件 :  eden区剩余内存是否足够 两种情况分开分析

    FULL GC  触发条件 : Minor GC 平均晋升空间大小 > 老年代连续剩余空间,则触发FULL GC
     

    3. 【高频】 判断对象死亡的方法 : { 引用计数法 , 可达分析算法 }

    深入一些,:GC root对象有哪些?为什么选择他们做GC root对象

    4.    垃圾收集算法  : { 标记清除算法 、标记整理算法 、 复制算法 、 分代收集算法 }

    深入一些: 各个算法的优点和适用场景

    5.     垃圾收集器 : { serial  、 parallel 、 CMS 、 G1  }

    CMS 、G1 重点 , 介绍工作流程和优缺点

    6.    内存泄漏

    例子: { 单例 , 容器 等等}

    原因 : 长生命周期持有短生命周期引用

    7.     引用类型 ; {  强引用、 软引用、 弱引用 、 虚引用  }

    8. 【高频】 类加载过程 : { 加载 , 连接 , 初始化 }

    有哪些类加载器 , 能否自定义 Java.Object.String 的类加载器 ?

    9. 【高频】 双亲委派机制 介绍 & 作用


     

    1. ArrayList 和 LinkedList 的区别

    2. HashMap & ConcurrentHashMap 的比较  : 线程安全问题等等

    深入一些 : HashMap 为什么线程不安全? 能否举例 = { 并发resize()触发闭环结构 ,覆盖put操作 }

    3. 【高频】 HashMap 的 相关问题      // HashMap系列需要通过关键源码理解,比较重要

    为什么 HashMap的size 为 2的幂次方 ?

    HashMap resize()过程能否介绍 ?

    HashMap效率受什么影响 (负载因子、hash数组size)?

    HashMap中扰动函数的作用 ?

    4.     Hashtable 和 HashMap的区别 : { 底层数据结构 (JDK1.8后不同)、父类不同  、扩容方法不同 、 线程上锁范围不同(重点) }

    5.     equals 和 == 区别

    为啥重写equals要重写hashCode()

    hash值相等,而两个对象不一定equals

    6 .    【高频】 String StringBuffer StringBuilder  区别 和各自使用场景

    深入一些 : String 是如何实现它不可变的? 为什么要设置String为不可变对象  ?     (字节一面这个问题给我问懵了)

    7.     接口和抽象类区别

    8.     重写和重载的区别

    9.    深拷贝和浅拷贝区别

    10.     Java三大特性

    11.     Object的方法 : { finalize 、 clone、 getClass 、 equals 、 hashCode }

    12. 【高频】 设计模式    : {    单例模式 、 工厂模式 、 装饰者模式 、 代理模式 、 策略模式 等等} (此处我的掌握也不是很好)

    深入一些 : 单例模式为什么采用双检测机制 ? 单例为什么用Volatile修饰? 装饰模式和代理模式区别?

    并发 :

    1.     线程的状态 : { new ,runnalbe , wait , time-wait , block , terminated }

    2.    进程 、 线程 、 协程 的含义和区别      // 个人理解 是一组渐进提出的概念

    3.    进程间通信方式 : {  管道 、FIFO 、 信号量 、 共享内存 、 消息队列 、 Socket  }

    4.     如何避免死锁 ? 死锁的四个必要条件

    5.     Sleep和wait的区别

    6.     【高频】Sychronized 和 lock 的区别 ?

    7. Sychronized的底层优化 : { 无锁、偏向锁、轻量级锁 、重量级锁 }

    8.      volatile的作用 : { 指令重拍 、 保证变量的可见性(设计JMM)}

    9.     ThreadLocal 底层原理

    10.   【高频】 线程池

    线程池构造器涉及哪些参数 : { corePoolSize , maximumPoolSzie , timeout , timeUnit , RejectHandler , 等待队列 , 线程工厂 }

    介绍线程池工作过程?

    线程池拒绝策略那些?

    适用Executor创建线程池的弊端?

    11.    AQS 框架原理和 源码理解

    计网 :

    1.     TCP/IP 模型  & OSI模型

    2.     应用层、传输层、网络层常见协议 : {  DNS 、 HTTP 、FTP、 STMP 、SSL、 TCP、 UDP、 ARP、 IP   }

    3. 【高频】 TCP 三次握手 、 TCP四次挥手

    深入一些 :     为什么三次握手,能否两次?

    四次挥手中什么是 time_wait 状态 ? close-wait 状态?

    time_wait状态什么场景下过多 , 会造成什么问题?

    4.     TCP可靠性 : {   ARQ 、 流量控制 、 拥塞控制 、 校验和  }

    5.    【高频】输入URL显示主页的过程        // 个人仅遇过一次,但是看面经感觉问的挺多

    6.     HTTPS 和HTTP 区别     // 字节专属问题

    深入一些 : HTTPS 加密过程介绍 ?

    7.     Cookie和Session的区别

    8.     Http1.0 和HTTP1.1 和 Http2.x 的区别

    9.     get和post的区别

    10.    常见的状态码

    操作系统(相对较少):

    1.     用户态和内核态的区别

    2.     fork()作用

    3.     Select poll epoll的区别

    4.     虚拟内存作用? 内存分页的作用?

    5.     缺页异常的介绍

    6 .    OOM问题和 StackOverFlow的区别

    MySQL:(对redis 需要学习 , 个人理解不深不多介绍)    // MySQL比较重要

    1.     【高频】MyISAM 和 InnoDB的区别    : {是否支持行锁 、 是否支持十五 、 是否支持 MVCC 、 底层索引结构不同 }

    2.     事务特性ACID

    深入一些 : 为什么要有一致性 ? AID不是已经保证了一致性了吗 ?

    3.     并发事务带来的问题 : {    脏读 、 修改丢失 、 不可重复读 、 幻影读    }

    4. 【高频】事务的隔离级别

    5 【高频】 MVCC机制

    6 .    【高频】索引

    为什么索引使用B+树结构,而不是B树

    为什么索引使用B+树结构,而不是红黑树 : {  磁盘预读取 、红黑树高度 }

    7.    聚簇索引和非聚簇索引区别? 主键索引和二级索引了解吗?

    8 .    为什么不对每个列创建索引呢?

    9     【高频】SQL语句优化 ,SQL题目(字节要求撸代码)

    10.    explain中 rows type key extra字段的含义?

    11.    count(1) count(*) count(列值)的区别

    面经4
     

    问了下简历和岗位相关的项目问题

    tcp 四次挥手协议,为什么是四次

    b tree和b+ tree的区别

    回表,联合索引

    https ssl讲一下,讲一下证书签发过程

    算法题: binary tree 每层找最大值:level order traversal(BFS)

    array,先递增后递减,可能有重复,找到一个数:三次binary search,第一次找到分界点,然后分别找target number

    进程通信方法,说下管道
     

    get/post 详解 说到get一般把数据放在url上,问:是什么协议规定的,可以放在body里么?

    说下http request 和 response

    然后记得不太清楚了,就感觉问的很细,被锤的感觉

    算法题:diameter of binary tree, DFS, bottom-up方法,感觉会有很多corner case,但其实点就在于:edges=nodes-1

    一亿个shot int,sort them 点在于:short int 是2^16, 然后有范围了,就可以用count sort来做,index当作值

    什么是前后端分离,不分离的code长啥样

    什么是事务,transaction

    面经5

    1、一些Java基础知识。

    2、倒排索引。

    3、讲讲redis里面的哈希表

    4、happen-before的规则?

    5、volatile修饰符,synchronize锁。

    6、java单例模式的实现?

    7、进程与线程的区别,多进程和多线程的区别?

    8、HashMap原理,为什么用红黑树红黑树的特点?

    9、快排时间空间复杂度,最好最坏的情况,优化方案?

    10、TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?

    11、讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WORLD?

    12、了解Go语言吗?

    13、问项目相关的东西:负责哪个模块?有没有碰到什么问题?怎么解决的


     

    1、Kylin的项目架构。

    2、Paxos和ZAB协议。

    3、CAP理论,分区容错性的意义。

    4、大表Join小表优化,如何处理数据倾斜?

    5、讲一下最大堆和最小堆。

    6、HDFS的读取、写入,容错处理。(源码)

    7、MapReduce的过程。(第一版和第二版的)

    8、MR shuffle,Spark shuffle。

    9、namenode HA,脑裂,Yarn的调度机制。

    10、Hive的内部表和外部表区别、数仓建模模型、数仓分层、雪花模型和星型模型。

    11、了解ClickHouse吗?它与Kylin的区别?

    1、LRU算法实现。(伪代码)

    2、链表倒数第K个数。(讲思路)

    3、一堆螺丝和螺母用最短时间匹配。(代码实现)

    4、求每天浏览页面的新用户。(Hive QL实现)

    5、求抖音小视频每日点击量最高的10个。(Hash + 最小堆)

    面经6


     

    • 项目中的用户注册和登录的流程是什么?
    • cookie和session
    • cookie的参数有哪些?
    • 服务器的域名是geogle,我可以修改cookie的domain为baidu吗?(本人不清楚)
    • cookie被仿造怎么办?
    • MD5加密可逆吗?会被破解吗?如何破解?
    • 面向对象有哪些特征?解释一下
    • SSO了解吗?
    • 负载均衡了解吗?
    • 数据库的关系有哪些?
    • 一对多怎么实现?多对多怎么实现?
    • MySQL数据库有哪些类型?这些类型有什么区别?
    • 了解哪些设计模式?手写一个工厂方法模式
    • 手撕sql
    • 反转链表
    • 为什么只实习了两个月?
    • 三次握手
    • 滑动窗口是干什么的?
    • 拥塞窗口是干什么的?
    • 进程和线程有什么区别?
    • 进程通信
    • hashtable的理想的查找效率是多少?
    • 哈希碰撞怎么解决?
    • HashMap在JDK1.8中有哪些改进?
    • 随机森林算法解释一下(简历上有机器学习相关的项目)
    • 手撕代码:给定一个字符串数组 dict 和 一个字符串s,判断s能否由dict中的单词组成

    面经7

    • Java 内存模型
    • 两个进程的变量的地址相同,它们之间的写操作有相互的影响吗
    • 进程通信的方式
    • 关系型和非关系型数据
    • 事务的特点
      • 原子性和一致性的实现原理(不会)
    • TCP 和 IP 为什么要四次挥手
      • Close_wait 状态是什么(不会)
    • 甲乙轮流射箭,两个人命中靶子的概率都是0.5,谁先射中就赢,问甲获胜的概率(答案2/3)
    • 算法题:给出一串数字,去掉k个数,问能形成的最小的数Java HashMap
      • ConcurrentHashMap 作的改进
      • 什么情况下会转红黑树(不会)
      • 链表非常长会怎么样
      • put 数据的过程
      • 常见的垃圾回收算法
        • 引用计数的循环引用的情况
      • MySQL 的联合索引
        • 索引的底层结构
      • 100个人坐座位,第一个人随机坐一个座位,后面的人优先坐自己的座位,只有当自己的座位被占了才会随机坐,问第100个人能坐到自己座位的概率(答案50%,不会)
      • 段页式管理下,CPU取数据要几次访存
      • 算法题:给出一个数字串的排列,找出下一个比当前数更大的一个排列(不能用next_permutation)
    • 场景题:对 HashMap rehash 的时间进行优化
      • 我第二次答了:扩容时仅申请数组但不拷贝,当get命中时顺便拷贝过去
        • 缺点是什么(可能会生成很多数组)
        • 再优化(不会)
      • 我第一次答了:事先预估 capacity,直接申请相应大小
      • 手写单例模式(饿汉、DLC懒汉)
      • 算法题:给出一个转义后的字符串,问原串是什么?(写得不好)

    前端

    面经1
     

    http1.0 http1.1 http2.0 https相关

    doctype的作用

    块级元素 行内元素 行内块元素

    bfc相关

    作用域题目

    伪类和伪元素

    vue双向绑定的原理

    vue中key的作用

    vue中data的更新机制

    一道算法题

    求一个数组中出现次数大于等于n的元素

    10分钟以后开始二面

    先让手写了两道promise的题目

    给promise上增加一个函数

    构造一个方法用Promise

    f n(1,2,3,(val)=>{

    console.log(val) //6

    })

    当时都没写出来

    div垂直居中

    绝对定位和flex两种实现方式

    css实现div展开

    这个没做出

    防抖函数

    一道智商题 100个苹果每个人拿1到5个 问你第一次拿几个可以保证拿到最后一个

    我以为二面会挂 过了一会hr就约三面了

    三面在周一

    三面问了2道算法题 1道智商题

    我绞尽脑汁 最后运行也没做出来

    面经2
     

    1.简单的自我介绍与项目经验。

    2.一道算法题

    3.一道 setTimeout/Promise 输出顺序问题的题

    4.什么是事件循环?

    5.react 中的 key 用来做什么?

    6.什么是 virtual DOM?[就是虚拟的DOM,提高渲染的性能,数据与UI分离,并且有利于服务器渲染]

    7.webpack 的原理是什么?loader 和 plugin 的作用是什么?

    8.ssr 的原理是什么?解决了什么问题?[renderToString,hydrate;首屏时间与SEO]

    9.ssr 会有哪些坑?

    •cpu/memory 可能爆了

    •出现异常不好定位调试

    •为了缓存,带权限接口与非权限接口有可能需要剥离

    •TTFB慢了,如果不加缓存,以前可能是骨架屏,现在直接白屏

    •由于需要起http服务工程上也复杂了很多

    10.你如何看待前端和后端?

    11.有没有了解过 shell?

    12.如何替换一个文件中的内容?[sed;那还有没有其它命令;cut]

    13.有没有用过awk?

    14.对一个文件如何只查看特定行的内容?

    15.你们的 node 的服务端应用如何部署?

    16.docker 部署有什么好处?

    17.docker 的底层原理是什么?[namespace 和 cgroups,一个隔离环境,一个控制资源配额。]

    18.那隔离环境主要隔离什么环境?

    19.有没有了解过 ufs?

    20.部署 node 时如何充分利用服务器的多核?[比如用node 的 cluster,用 k8s 也能部分利用多核性能]

    21.如果你要读取一个特别大的文件应该如何做

    22.你们有没有对服务端的异常进行监控[比如用 sentry 监控异常,elk 打日志,prometheus 监控性能并用 alertmanager 报警,再写一个webhook到钉钉]

    23.那你们在线上出现问题时如何在应用层面监控 cpu 和 memory 的信息?

    24.如何查看一个 node 的服务端应用的内存和CPU?[ps / pidstat]

    25.当服务端的内存发生了 OOM 问题如何排查

    26.数据库中什么是 left join 和 right join 有什么区别?

    27.数据库索引中为什么要用 Btree?[减少与磁盘的IO次数]

    28.什么是聚簇索引?

    29.redis 如何做持久化?

    30.如何实现一个分布式锁?[set key value EX 60 NX]

    31.有没有用过 LUA?

    32.当一个地址从输入到展示在浏览器中有哪些步骤?

    33.递归解析的过程是什么样的?什么叫递归 ?

    34.TCP 为什么是可靠的?[因为它有 ACK]

    35.那 tpc 和 udp 相比的话,udp 有什么好处?虽然不可靠,但是为什么还有很多基于 udp 的协议[因为 upd 报文小,udp 头部8个字节,tcp 头部20个字节,而且有些协议也不需要太可靠。]

    36.为什么要换工作?

    37.以前通过了面试怎么没有来?

    38.你有什么要问的吗?

    面经3
     

    Data架构组的一个帅气时尚的小哥(莫名觉得像UI),是在家里远程面试的。

    1. 自我介绍:

    答: 一定要事先准备好,总时长不要超过两分钟。基本信息说明学校和学历就行了,重点是展现你的优势,如学业成绩、岗位相关学校经历、岗位相关大赛经历、项目经历、实习经历、个人博客等。别说你现在感觉自己没有优势,仔细挖掘肯定有,如果真的没有,那就停止你的“牛客面经大厂速成之旅”,老老实实的打好基础、找项目练手,或者找个难度小点的小厂实习,去增加你的优势。

    2. webpack打包过程:

    答:webpack原理相关的基本操作,重点在于理解webpack的意义和作用。

    3. loader和plugin区别:

    答:我从二者的差别,比如本质、作用时间点、作用特点、执行顺序等等进行了阐述。

    4. 如何写一个loader / plugin:

    答:我根据上一问的回答进行展开,详述了二者的作用过程,然后说了一下二者的实现思路,然后就是两个人一起讨论了loader的实现过程对,没错就是一起讨论,氛围极好,像跟一个学长讨论技术问题一样,自己的热情也被调动了,让面试氛围不会那么紧张。

    5. 详细说一下babel的工作过程:

    答:代码拆分,token流,AST解析树,巴拉巴拉巴拉。。。因为对ast解析了解不够深入,没有展开回答,但面试官点点头,说他已经得到他想听到的答案了。

    6. 讲一下React的虚拟DOM对象和虚拟DOM:

    答:我从React的渲染过程开始回答,从JSX讲到Fiber,巴拉巴拉巴拉。。。。。自己对日常整理的React原理相关的问题进行了“线性”的梳理,不是简单的一问一答,所以能比较清晰明确的阐述各个过程(React渲染过程、合成事件触发过程、批处理机制过程等),且各React原理之间是互通的,总能在相关问题上找到关联处进行拓展/深入阐述,从而体现自己对原理的理解,而不是死记硬背,建议这块通过看源码辅助记忆,这点很重要,也很加分,因为我从面试官的表情里看到了赞许。

    7. 说一下虚拟DOM对象有哪些属性值?

    答:一开始大脑突然短路,只记得$$typeof(React元素类型标记、Symbol值、防止XSS攻击),后来巴拉巴拉typeof的作用的时候想起来key值、type值等等等,然后对他们的作用进行了阐述。这也得益于面试官营造的极好的面试氛围,如果过于紧张,很可能是想不起来其他属性的。

    8. 代码题:

    ① 根据要求写Promise异步代码 / promise 应用层考察,判断打印顺序 (二选一)

    二叉树遍历

    二叉树最大深度

    9. 反问:对非科班转行学习前端有什么建议?对自己在这行缺乏自信,间歇性怀疑自己

    面经4

    1. 自我介绍

    2. 讲一下在公司实习的某个项目,做了什么重要的事:

    答:解决了几个贼坑的bug(涉及快应用框架底层渲染)、webpack配置优化(10s→2s)、公共组件封装/优化

    3. 讲一下怎么解决项目中解决的最大问题:

    答:开发、发现bug、debug、解决bug、找原因、与同事沟通、写复现Demo、记录总结

    4.在项目中做了哪些webpack配置优化:

    答:css压缩、图片压缩、webpack缓存等等,因实习项目比较小,也都是比较简单的处理。

    5. loader与plugins的区别,第二次被问:

    答:这次把整个webpack的打包过程说了一遍,从Complier编译对象的初始化到文件列表输出,在中间穿插了loader和plugins的一些要点,webpack的API,发布订阅,依赖关系图等等。(面试官:嗯,这方面没问题,那就接着往下)

    6. 为什么转行干前端?

    答:对编程的热爱 + 个人价值观 + 研究生阶段的机缘巧合 + 师兄影响

    7. 说一下项目中的“登录校验”过程

    答:cookie/session这一套

    8. 无cookie的“登录校验”怎么实现?

    答:一开始以为出题的目的是考察cookie导致的一系列安全问题,所以说了token、localStorage、axios请求/响应拦截等等。后来才明白面试官的重点是“不使用任何存储方式来实现登录校验”,然后我说可以通过url传递。 然后面试官开始说JWT方案,Refresh Token ----> OAuth 2.0 (OAuth认证只听过,没接触过,二面完后立马补上,推荐阮一峰老师的入门博客)

    9. 代码题:

    答:也是一个场景设计题,面试官自己根据Node中的某个常见处理延伸的,让我用非伪代码实现,涉及异步 + 柯里化。

    10. 反问:对非科班学习前端的建议?对我个人的建议?

    面经5
     

    1. 自我介绍

    2. 计算机基础: TCP怎么连接,怎么断开

    3. js基本数据类型,复杂数据类型,分别是怎么存储的

    4. 浏览器缓存策略

    5. 给一段关于异步的程序,说出打印情况

    6. 虚拟dom、diff算法

      1. React每次setState都会引起diff算法

    7. XSS和CSRF、如何预防

    8. 两道编程题: 千分位加逗号(忘记判断十位百位前面补零情况),二叉树每条路径的数字和

    9. 情景题:输入框边打边搜索,节流和防抖的区别

    一面感受:题目都不难,而且面试官也没有去追问一些细节(可能是我自己补充了细节,他就没有特地去问了),整场面试体验很好,面试官有时还会对我的程序提一些评价

    字节跳动二面 6.17 (1h 20min)

    1. 上一个实习公司项目的开发流程

      1. webpack是如何根据环境变量来进行不同环境的构建,了解原理吗(不了解)

      2. 提到测试环境需要用代理账号登入,被问HTTP代理的原理是什么(没答上来,自己挖坑自己跳)

    2. 阐述一下上一个实习公司的产品

    3. React组件通信的方式

    4. 如果让你封装一个组件会怎么封装

    5. 怎么设计一个轮播图组件

      1. 轮播图怎么实现无限连接播放,用React怎么写?原生怎么写?(一直在引导我,但我脑袋懵了,没答上来...)

    6. 如何实现浅比较,手写一个

      1. 用到了for(key in obj)的写法,被问是否会取出原型的键(有点忘记了,不过因为判断里的in是会取出原型的,所以回答了会)

      2. 怎么判断是个数组,回答了Array.isArray,有没有兼容性更好的,回答了Object.prototype.toString.call

    7. 最近有什么了解的新技术

    8. 对后端有没有什么了解,跟前端的不同有哪些

    9. 反问环节:

      1. 字节跳动的产品都是以APP为主,前端开发有在哪些常见的地方体现吗

      2. 内部常用的工具,比如Jenkins,都是用内部开发的工具吗

      3. 有尝试和落地前端页面自动化生成和图形学相关的开发吗

      4. 对我的表现如何评价

        被说了广泛涉猎是好事,但有时候需要去深入一些原理,才能帮助你开发的更好

    二面感受:除了HTTP原理和轮播图和一些原理被难住了,其他的问题都比较开放性,对之前实习公司的讨论比较多,面试体验很好,面试官很友善

    产品篇

    面经1


     

    一面: 我故意提前1小时到, 想给自己留点时间回复下笔记要点, 同时调整下心态. 结果接待的小姐姐还没过10分钟, 就通知我到小会议室准备面试.. 郁闷得不要不要.. . 面试是个小姐姐, 主要问题:

    1.你觉得产品经理最主要的工作有什么?

    2.把你认为的主要工作做个主次排序, 你排序的理由是什么?

    3.(实习经历盘问)参与的垂直视频与直播社区, 竞争对手有哪些? 你们之间互相有什么优缺点?

    4.实习项目中, 你如何判定用户的需求的真伪?

    5.对用户的需求, 你如何做出主次排序?

    6.(让我把手机给他看看, 看到我有网易云音乐, 然后当场让我下载QQ音乐)网易云音乐和QQ音乐, 在你眼中主要有哪些不同?

    7.这些不同点, 对用户选取音乐播放器有什么影响?

    8.学数学转行做产品, 转行的过程, 你是如何规划和执行的?

    面经2

    一 3.11 群面

    1 题目 :用户反馈平台“画风”有问题,作为产品经理你怎么办?大概是这样。

    2 角色:我是第一个分析题目提出框架的同学,算是leader?后面伙伴推荐我做了report。

    3 分享:

    我觉得,结果不太重要,面试官在意的是群面讨论的过程,所以分享一下我觉得群面表现的要点8

    1 ) 内容上要有贡献:可以贡献框架、想法,或者解决矛盾、时间管理、推动进程,阶段总结控制方向,鼓励发言,最后report展现成果等等。

    2) 表达上清晰温和:尽量结构化表达,想好再说;不要太aggressive,有团队意识互相尊重。

    4 复盘:

    问题:我们组有两个小伙伴基本没有发言,最后面试官cue到这个问题,邀请这两个伙伴补充发言,也问了我的想法。

    回应:第一反应我确实很遗憾,有个小姐姐思路很开阔,聊到运营角度的解决方案,这是我们讨论里没有涉及的部分,如果补充上,方案会更加丰满;

    另外,视频面试很难对上号,过程很紧张,也确实没有特意留意每个小伙伴的状态。我也如实表达了我的这两部分想法,面试官也没有再追问。

    所以,大家还是要在群面里 多多关注团队,尽量发挥大家的价值

    5 感受:

    面试官真的很nice,尽量启发大家发言,挖掘每个人身上的闪光点那种。所以提前准备好自己的优势就好,简历上的亮点面试官都会一一问到,给机会表达的。

    二 3.15 二面

    1 自我介绍

    2 简历深挖:创业项目深挖,实习数据指标深挖

    3 老板有一天找到你,说平台最近内容不行,被政府约谈了,你怎么办?

    我觉得和群面题目一样的hhh,我就把群面题目的思路分享了,加上了运营手段。

    4 你的评价体系为什么关注这两个指标,意义是什么?

    我答的不好,就是从用户去考虑了,优化体验啥的。

    面试官进行启发,提示从产品终极目标去考虑。我的思路开拓了一些,总结了平台的定位和愿景,分部分补充了对b端业务,c端用户以及平台的价值。

    5 产品如何实现你的评价体系的目标?

    6有什么要问我的?

    复盘:面试官的逻辑真的真的很缜密,一点细节都逃不过去hhh,有疑问的细节就会反复问到他觉得理解了hhh,我觉得这是我面过最难的复试。

    在面试官的引领下,我基本把 最近一份实习每个关键动作的what,who, how,why都梳理了一边。大家完全可以自己先行完成这部分工作,临时表达真的很容易着急,思路不清晰。

    有一些临时的问题的细节真的就只能靠平时积累了。但是多梳理自己的实习,也会有很大帮助的。

    三 3.25三面

    我饿了,先去吃饭hhh,也不知道有没有人看。回来啦~~

    1 自我介绍

    2(因为我的自我介绍比较长)你表达的比较多,你用几个关键词总结一下自己?

    3(有一个关键词是创业,我提到创业的过程就是用产品思维规划产品的过程)你觉得产品规划最关键的问题是哪些?

    4 以第二个创业项目为例,介绍一下你刚刚说的关键问题吧?

    这里我真的很紧张,我都有点记不清我第一次都说了哪几个关键问题了,就向面试官申请梳理1分钟,然后在本子上重新写了7个关键问题,对照着项目回答了。

    5 创业盈利了么?当初是一拍脑袋的决定么?盈利是偶然么?

    我表示我们初期做了用户调研,包括服务的区域,产品种类,定价,运营策略都有相应的数据支撑,并且简单介绍了调研的细节。

    6 那我有两个问题了,1你觉得调研应该怎么做,需要包括哪些步骤 2怎么验证你数据的有效性?

    7(我提到调研的人群是我们学院的一整栋宿舍楼)那你这个人群不是随机取样的,你觉得最后的结果可靠么?

    我从1可靠2易得,两个角度做了解释,1可靠是因为这是一栋鸳鸯楼,性别比例适中,包含我们学校所有年级,涵盖不同消费能力的人群2易得,自己学院同学们比较配合,问卷发放与搜集的时间成本都较低。

    8 那你觉得性别和消费能力是你调研的关键对么?

    9 你做这个项目的核心竞争力在哪里呢?

    10 你刚刚有聊到运营策略,你们怎么运营的?

    面试官一直追问了很多很多细节,又是深度思考的一个晚上。。。

    11 有什么想问我的?

    复盘:

    a 面试官会根据你的回答继续提问,所以准备好的回答你都需要自己先挖掘一下可能会追问的问题,再一并把可能会追问的问题准备到;

    b如果遇到没有准备过的问题,尽量保持冷静,可以向面试官申请一些思考时间,想好了再说。很多问题并没有标准答案,面试官在意内容但不只是内容,更多的是考察你的逻辑思维能力和表达能力。

    比如问题4,我已经不能完全记起刚刚规划的几个关键问题,不过我觉得面试官其实也记得不是很清楚,只要你后面的表达逻辑能自洽就还好的。

    四 交叉面

    三面复盘的好累, 我要先去写论文了,明天来盘交叉面8,呜呜

    面经3

    1自我介绍

    2.对简历中两个项目进行深挖

    3.项目的进度管理是怎么安排的

    4.tob和toc的区别

    👀最后面试官说我简历中的项目在项目管理方面比较混乱,让我回去了解一下云视频

    ➡️二面50分钟

    👀我觉得字节的面试流程就是下一个面试官大概知道上一个面试官都问了什么,面试官在面试过程有记录,二面的面试官就没问我简历里面的项目,意思是一面已经问过了,他直接开始问他的问题。

    1.自我介绍

    2.详细介绍我做的数据挖掘算法

    3.问我这两天有没有去了解视频云

    4.让我对我了解到的进行阐述

    5.觉得我了解的比较表层,问控制台里面包括什么?说一说内核的东西,技术层面的,里面有哪些技术你了解到的,你上手用了你说到的这几个视频云平台吗?

    6.视频编码技术转码技术你了解吗

    7.最近读了什么书,说出你印象最深的地方,我说了以后,就问你还记得什么,我又说了,又问还有吗?

    8.说一个你喜欢用的app

    9.改进一个功能

    10.你说的这个方法能改进吗,你说的这些b站现在也有,那为什么还有这方面问题呢?

    11.你项目里面的原型是怎么画的,问了axure里面很具体的功能的问题,(我说不记得,但是axure对于我用起来很简单,项目里的界面部分是我写的代码,面试官就没有继续追问)

    最后说让我稍等一会,等了一会说:三面面试官今天有事,那让hr联系你再约时间吧,然后就是反问环节。

    ➡️三面将近50分钟

    1.自我介绍

    ✅视频云方面

    1.你这几天了解了视频云的那些方面

    2.你觉得视频云的用户有那些?

    3.用户具体是中小企业里面的那些人?

    2.如果你和抖音视频云合作,你是中小企业的产品经理,你希望抖音视频云可以给你提供哪些东西帮助你完成项目推进?大概是这个意思

    4.如果我是甲方,希望你给我供水,你作为b端产品经理都要做些什么?

    5.你通过哪些,怎么决定,接不接这个供水项目?

    6.你怎么确定用户的真实需求是供水呢?

    ✅基于简历中的竞品分析

    1.你做竞品分析的目的?

    2.短视频在新零售方向你做了哪些分析结论是什么?

    3.你刚刚主要说的是短视频app和电商app在这方面的分析,那抖音和快手在这方面的具体分析呢?

    4.微视的发展在哪里?

    5.微视提供腾讯视频的视频接口,腾讯视频会不会抢夺微视的用户使用时间

    6.抖音哪些地方你觉得可以改进?

    7.去过让你去掉抖音的一个功能你会去掉那个?

    ✅提问环节

    1.如果我去实习在视频云主要做哪些方向的工作呢?

    2.是三个专业面➕hr面吗

    3.字节对没有实习经历的实习生会不会有歧视

    测试:

    一、什么是测试工程师

    以软件开发为例,宏观上说测试工程师就是软件质量的把关者,在一个软件开发流程中测试人员要与开发人员一起对软件的研发进行负责,软件进行质量把关,开发进行功能实现,相辅相成。

    测试又分为传统的测试工程师测试开发工程师测试开发工程师(以下简称测开)就要在上述的基础上最少在掌握一门脚本语言,两门及以上更好,脚本语言包括但不局限于Python,golang,shell等等因为测试开发工程师其实是造轮子的,换言之就是开发测试用的各种工具;测试工程师对代码要求较测开低一些,但不是一窍不通(我面试的时候都会遇到代码问题),不懂代码层次的问题的话其实就不好进行测试分析这个后面再解释为什么。
     

    二、测试工程师的工作是什么?

    测试工程师简单点说就是找bug,然后反馈给开发人员,不要小看这个工作。

    首先很明显的bug开发人员有时候自己就能找到,测试人员要有比开发人员更加全面的想法才能找到深层次的问题点,

    其次,要端正一个态度就是测试人员不是一个电脑小白,相反国外顶级的测试开发工程师同时也是顶级的开发工程师甚至更厉害,所以作为一个测试工程师一定要有继续学习的精神和心态,然后明白测试工程师要会写测试用例,这很重要,文本写的好坏会直接影响到后期的维护成本。

    这段时间问自动化测试的童鞋比较多,那我就来聊聊我对自动化测试的理解(个人愚见)。

    首先说一下自动化测试是什么?自动化测试从职能上讲就是去在一定的框架下去开发一些自动化测试脚本来实现QA所做不到的事情,拿fgo来举栗子比较合适,众所周知fgo核心玩法之一就是抽卡,这个抽卡是有概率的(欧皇请自动左滑),而QA是不可能去抽几十万次甚至上百万次来验证概率问题,这时候就要自动化脚本来模拟抽卡去抽,看看概率算法是否有问题,本来自动化测试其实在某种意义上是一种灰盒测试,但是现在很多公司会把自动化测试归到测开里面去,所以现在自动化就偏白盒一些。

    第二个要说的就是语言,现在自动化测试流行的语言就是Python,shell,golang,(据说要是cpp厉害的也可以),不是很死板,但主流一定是脚本语言。

    就先讲这么多吧,也算是一个小总结。欢迎各位大佬对我提出意见或者交流经验,鞠躬。

    游戏QA的话要求会更高,因为传统软件测试要看的方面游戏要测试,而传统软件不作为重点的地方游戏也要测试,所以游戏测试工程师相对来说是工作量会大一些。具体的测试流程的话可以自行百度或者Google,里面讲的比我要好很多。
     

    三、聊聊测试方法吧

    测试有一种分类方式可以简单的分成黑盒测试和白盒测试,举个栗子,黑盒测试常见的测试方法有等价类划分方法、边界值分析方法、错误推测方法、因果图方法、判定表驱动分析方法、正交实验设计方法、功能图分析方法、场景设计方法等等,具体的话要看你所要测试的具体内容而定。

    白盒测试,先讲一下,白盒测试其实应该是测试开发工程师,要懂代码,要看的懂代码层次的逻辑和架构,然后去寻找代码层次出现的bug问题,方法具体有:

    语句覆盖,主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。

    判定覆盖,主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。

    条件覆盖,主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。

    判定/条件覆盖,主要点:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。

    组合覆盖,主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。

    路径覆盖,主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。

    从方法上不难看出如果测试人员不懂代码会给工作带来一定的压力,也正好的解释了第一章里最后问题,具体的也希望大家去进行一下自学。

    当然我只是去罗列一下一些测试方法,百度也可得,我只是做了一下整理,真正变成自己的还需要去实践,当你自己去亲身测一段代码或者去测一测软件的某个功能,你就会去融会贯通。

    面经1:
     

    一面(45min)、二面(30min)综合讲

    1、自我介绍,项目介绍,然后让测一下项目里的内容;

    2、讲一讲自己的游戏史,因为我的简历里写了我有丰富的游戏史;

    3、从自己说的游戏中面试官挑了几个点进行测试

    4、聊了聊fps游戏的中测试内容和外挂问题(ps:因为我谈了我对外挂很感兴趣);

    5、聊了聊为什么要当测试以及游戏测试测试人员的不同;

    6、讲了讲测试用例应该有什么,要注意什么;

    7、讲了讲一个单链表中查找第K个节点能用的方法,时间复杂度是多少;

    8、智力题:两个桶来取水的问题,重点看实现过程;

    9、聊了聊对测试职能的理解;

    10、反问环节;

    ps两面的面试官都超级温柔,有问题会耐心解答,体验极佳

    三面的话(35min)

    比上述内容多了一些内容,就是聊了聊moba和fps具体的一些测试,然后出了道足球赛的赛制问题;再就多了和我聊了聊自己的性格和特点之类的。

    反问环节和面试官聊了蛮多的关于游戏方面的知识,面试官逻辑超强,讲的很棒,自己受益颇多。

    hr面(15min)

    就很正常的问了一些个人性格,经历等等

    面经2
     

    1.自我介绍

    2.实习经历介绍,工作过程,问是否独立编写测试用例,是否独立负责过需求,是否使用过自动化测试工具

    3.因为说到上线保障,问了上线过程,还问了为什么上线还会有缺陷,死于话多,答测试环境和真实环境有不同,又追问有什么不同,卒

    4.qtp自动化测试能代替手工测试吗,什么时候使用过qtp,上实验课的时候,,,,,,,

    5.tcp为什么是三次握手不是两次

    6.浏览器搜索,点击提交,发生了什么(tcp连接,dns解析,请求,响应,渲染页面)dns解析给的提示,再问详细过程,只记得dns解析的缓存什么的

    7.滴滴打车功能的测试用例,这部分面试官一直皱眉,又紧张又尴尬

    8.编程题:有序数组里插入一个数,返回下标,写出测试用例

    9.熟悉什么语言,java,java的值传递和引用传递的区别,不会,表述也不清楚

    10.java有写过多线程吗,没有

    11.有做过什么项目,项目的输入输出是什么

    12.怎么判断一个链表有环,能不能用java实现

    面经3:(社招了解)


    一面

    自我介绍

    1,线程和进程的概念

    2,http/ip tcp/udp

    3,网页状态码

    4,在网页输入一个网址,会发生什么

    5,SQL:联表查询2个表中工号为“123”的人的所有信息

    6,编程:判断一个字符串是否符合ipv4格式

    7,设计百度首页测试用例

    8,最大连接数和QPS区别

    9,tcp三次握手,tcp的控制可靠性的策略,重传机制

    10,cookie和session区别

    11,数据库事务的了解

    12,数据库索引的了解

    13,主键外键的了解

    二面

    1,自我介绍

    2,性能测试如何做的

    3,性能测试关注的内容

    4,何时cpu处理进程最慢

    5,系统资源包括哪些?

    6,介绍项目中某个功能,并且介绍如何测试

    7,测试过程中有没有出现问题,是如何解决的

    8,判断一个字符串是否是点分十进制的ipv4格式

    9,对上个代码编写测试用例

    10,一个人员表,一个部门表,人员表中存了部门id,查人员表各部门表所有数据

    11,查找所有java进程

    12,杀死java进程

    13,linux 查找当前目录下所有后缀为 .py文件

    14,有什么想问的

    三面

    1,自我介绍

    2,编写一个登录界面的测试用例

    3,登录的按钮不能点击如何排查问题

    4,查询一个城市列表里面重复的城市名,并且统计重复次数

    5,项目经验及项目中的一些问题

    6,知道的linux常用命令:查看指定端口进程

    7,智力题:10堆苹果,每堆10个,9堆每个50g,1堆每个40g,有一个称,求只称一次,找出这个轻的一堆

    8,编写测试用例:一个接口报文

    hr面

    1,自我介绍

    2,工作经历

    3,项目中收获了什么

    4,平时怎么学习的

    5,薪资结构和考勤介绍

    6,期望薪资

    7,为什么是这个期望

    8,当前的月薪

    9,哪里获得的招聘信息

    10,反问问题

    面经4



    1.java接口和抽象类
    2.设计模式有接触过吗?有没有用设计模式来重构过自己的代码
    3.机器学习算法有哪些 分别有什么不同呢 应用场景呢
    4.遇到什么问题,怎么解决的
    5.对这个测试岗位有什么自己的看法和想法
    6.熟悉的排序算法
    7.SQL语句中where 和having有什么区别
    8.网络的七层结构
    9.java和python的框架
    10.java和python有什么优点和缺点
    11.黑盒测试、白盒测试  在软件测试的哪个阶段
    12.git版本控制(不会就别写到简历上,给自己挖坑)

    面经5



    1.final finally finalize的区别
    2.static的生命周期
    3.为电梯系统设计一个测试用例
    4.写了一个程序,有个小球,球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第 10 次反弹多高?
    5.数据库mysql  索引是什么
    6.垃圾回收机制
    7.C++和java的不同就是有GC  那java会有垃圾剩余的情况吗?
    8.python的Lambda 实现一个a+b
    9.遇到什么困难,怎么解决的。说的能体现



    1.说说移动边缘计算
    2.http和https的区别
    3.TCP连接的三次握手
    4.java的基本类型
    5.java的序列
    6.数据结构的类型  树有几种  红黑树是什么
    7.写代码:快速排序
    8.string 和stringBffer的区别
    ***的最好的一门课程是什么
    10.优点和缺点
    11.在课外参加了哪些活动
    12.对测试怎么理解的
    13.栈的基本操作

    如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

  • 相关阅读:
    RxJava/RxAndroid的操作符使用(二)
    7、android高级控件(2)(列表类视图)
    阿里P8大牛带你深入理解SpringCloud微服务构建文档
    华为Mate 60难以撼动苹果的市场份额
    Word控件Spire.Doc 【文档操作】教程(七):在 C#、VB.NET 中从 URL 下载 Word 文档
    Leetcode算法解析——快乐数
    TS查漏补缺【类型守卫】
    前台自动化测试:基于敏捷测试驱动开发(TDD)的自动化测试原理
    HTML中, 在同一行上出现高低不一样的文字,处理对齐效果
    孙卫琴的《精通Vue.js》读书笔记-插槽slot的基本用法
  • 原文地址:https://blog.csdn.net/qq_29235677/article/details/126636674