Ao Bing Reader Bytes, Didi Mianjing (have got an offer)



This issue is a reader’s contribution. When he chatted with him, he found that this young man was very interesting. It was a school enrollment. He relied on the review of the interview questions at station B and our group of reporters. I got a lot of offers. Let’s take a look. During his preparation process, friends recruited by the school can take a look at his learning route.

Reader introduction

He is currently a junior at the University of Electronic Science and Technology of China. During his freshman and two years, his main energy is used to prepare for school courses.

In October of this year, I started preparing for Java internship interviews, and now I have successively received internship offers from Didi, Huawei, and Bytedance (Finally, I will discuss with me a high probability to go to the byte infrastructure research and development internship)

image

Review process

The first week of October: After reading the Java basics in the interview assault version of JavaGuide

The second week of October: I started to watch the video of Kuangshen Talk on the B station, learned about Spring and SpringBoot development, completed the initial construction of the project, looked at Shiro's authority management and JWT, and added Mysql and Redis to the project (there was a foundation for project development before)

The third week of October: Watch the 102 knowledge points that must be asked in the September 2020 JAVA interview of the soldiers on the horse at station B (all understand and remember), and look at it with the interview assault version of JavaGuide

October 4th-5th week: I found Ao Bing’s interview video at Peking University (pause every time I see a knowledge point I don’t know, go to the official account to find the corresponding article to read until I understand the entire video), basically use the official account I can understand 50% of the content, and I can repeat it myself. Later I will go to Ao Bing github to post the interviews and articles. Basically, I have finished the interview points. ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

November 1st-2nd week: I started to invest in the first interview company (learn from whom), because I didn't prepare the operating system, computing network and algorithm, and of course I died. So I started to brush the algorithm crazy, and I finished the LeetCode 100 questions in a week, plus I wrote some algorithm questions every day during the previous review. It took almost 10 days to brush the LeetCode Hot 100, Tencent Hot 50, and Jianzhi Offer.

The third week of November: I found a friend to push Didi, spent one day reviewing the operating system, two days reviewing the computer network, and one day reviewing the writing of SQL statements, and successfully passed the first and second aspects of Didi

The fourth week of November: I found the mentor to push the byte internally, and voted for Huawei by the way, mainly for the review of the byte experience, and successfully won the byte and Huawei (the difficulty of Huawei is relatively low because of the school-enterprise cooperation project)

Learn from Whom

Learn from

介绍一下项目:

  • 我讲了项目的前后端分离,Shiro,JWT,Redis,MySQL
  • 问使用的MySQl引擎是哪个,答Innodb,追问还了解那些引擎,追问Innodb 和 MyIsam 的区别(这边答得一般,没回答全)
  • 问 MySQL 的优化过程,从 explain,到 随机采样, analyze table, force index,覆盖索引,最左前缀原则(这边面试官看我比较懂,就没问了)
  • 问 Redis 的更新操作,答 延时双删,追问双删时,先删除了缓冲后,又有大量的业务逻辑进来,该怎么缓解数据库压力。(这边没有回答出来)
  • 问 Redis 的负载均衡怎么实现的,答利用自从复制和读写分离(这边举了项目的一些例子)
  • 问 AOP,IOC,追问AOP 有什么好处(只答出一半)

Java基础:

  • 介绍一下面向对象,联合面向过程和封装、继承、多态答了一下。追问解释封装、继承、多态。(多态这边没答好,扯到泛型去了)
  • 讲一下 Java 的泛型,没答好,扯到 反射去了。
  • 类怎么实现多继承(答接口)
  • 讲一下线程和进程,追问什么时候使用多进程,什么时候使用多进程(没答好)
  • 讲一下进程的几种状态(讲的特别乱,也不全)
  • 追问 多进程之间怎么通信(紧张到没答出来)

计网:

  • 讲一下 TCP/IP 模型
  • 追问 TCP / UDP的区别和使用场景,讲了 DNS 是使用 UDP,追问为什么?
  • 问 TCP 怎么实现可靠传输的
  • 问流量控制和拥塞控制 (计网这边都没答好)

算法题:(用的百家互联)

二叉树右侧投影
从右向左观察一棵二叉树,返回能看到的元素

        1                            <-----
      /    \
    2       3                       <-----
     \         \
      5         7                   <-----
    / 
  6                                  <-----
应该返回[ 1376 ]
    // 想了半天没想出来,面试官提示了层序遍历,还是没写出来
实现一个快排算法
    // 一开始都写成二分查找去了,后面改成了冒泡排序,然后也没有写完,好久没写过快排了

结束的时候,面试官问了一下我的博客网站,面试官建议要多复习一下基础知识,我和面试官讲自己很惭愧,觉得肯定过不了一面了,面试官说还要考虑一下其他面试者的情况,一面结果会在晚上或者明天通知,不过我觉得应该就是凉了。

自我反思

  1. 首先是计网和操作系统,加上 Java 的基础部分,因为没有怎么准备,回答的特别差(这边至少要花一周时间,做一下复习,记在脑子里)
  2. 其次是要注意构建知识树,不要被面试官绕着走,遇到会的题,要一层层的深入进去,直到面试官打断(这一点特别重要)
  3. 对于算法题,还需要多刷一下,多做总结,刷的题型还是太少,刷的过程要少看题解(算法题还特别差,必须要在十分钟内能够有清晰的思路)
  4. 注意每天都要复习一下今天看过的知识,最后是自己讲一遍,这样面试才不会特别紧张
  5. Redis 和 AQS 这边还没有都弄懂,还需要继续补知识
  6. 再认真准备一周,下周日开始投滴滴和京东

跟谁学总结

首先拿到 Offer 的第一步是投出简历,第二步就是通过面试,跟谁学是我面试之旅的第一步,也是至关重要的一步。通过这次的面试,我发现自己存在的巨大的知识储备和面试经验的问题。

滴滴面经

滴滴一面

自我介绍和项目介绍

Java 基础知识:

  • 集合类:ArrayList、LinkedList、HashMap、ConCurrentHashMap、HashTable、Collection.SynchronizeMap(八分钟)
  • CAS、Synchronized
  • 有没有遇到过解决并发的问题?(没答出)
  • == 与equals的区别、HashCode、整型对象Integer比较用哪个
  • Object类有哪些方法(没答好,HashCode、wait、notify)
  • 重写和重载的区别
  • JDK1.8 的 Stream 的新特性(不了解)

MySQL :

  • Server层、引擎层
  • 索引选择问题(数组、链表、二叉搜索树、平衡二叉树、红黑树、B树、B+ 树)
  • 索引优化:建索引字段要怎么考虑(explains、force index、analyze table 、随机查找、联合索引、最左前缀匹配原则,索引下推)
  • 性别字段适合建索引嘛?(没答好,性别字段区分度不高,只有男和女)

Redis :

  • 为什么使用Redis,  Redis 的英文介绍, 高并发,高性能

Linux:

  • Linux 下的常用命令(没答好)

项目相关 :

  • Spring 的事务传播机制(不会)
  • Mybatis 相关知识,¥ # 的区别(不会)
  • JWT(HTTP、Cookie、Session、JWT)
  • Shiro(Subject、SecurityManager、Realm、执行过程)
  • 异常处理机制怎么操作

设计模式 :

  • 单例模式(开IDE 手写 DCL,加解释 volatile)
  • 工厂模式

一面反思

基本上准备的都答出来,自己还是比较满意,面试官是个漂亮小姐姐,面试过程也非常 nice 。因为面试的时间比较长了,就手写了一个DCL, 没有写其他算法题。面试官说她已经给我过了,之后 HR 会联系我,建议我平时多写一些代码。面试和我讲这边是橙心优选,加班比较严重,业务都是新的,挑战比较大。

滴滴二面

明显感觉二面的面试官技术强了很多,一看头发就是资深程序员

一开始是自我介绍(个人网站讲解),然后问了线程池(讲了 Java 线程模型、线程池的几个参数(原理)、拒绝策略)(6分钟)

HashMap 死循环问题(从1.7 扩容,头插开始讲,到 1 .8 尾插,遗憾的是没有举出一个例子)(5 分钟)

Synchronized 和 ReentrantLock(从对象头开始讲,moniter,作用于代码块,方法;AQS,CAS,入队规则;两者的使用比较)(5 分钟)

SQL 语句书写(开 IDE,还好昨晚临时练习了一下,都写出来了)(10 分钟)

写一个支付最少数量的纸币的付钱算法(写是写出来了,但是好像算法不太好,用了三个循环,但是复杂度其实不高)(10 分钟)

二面反思

感觉二面的面试官比较随意,就是想问啥就问啥,同时喜欢问偏底层一点,面试官说结果要两天左右通知我,他还要和第一个面试官讨论一下。我总觉得他对我不太满意,但是我基本上都回答出来了,就是可能回答的不够深入吧。

字节跳动面经

字节跳动一面

自我介绍了一下(学校、年级、奖项、GPA)

讲讲UDP 和 TCP 的差别(具体讲 TCP 怎么实现可靠传输的,我讲了拥塞避免的三个状态及全部过程,扯了一下TCP的版本问题,面试官补充了重传机制)

UDP的使用场景(视频传输,DNS详细地讲了一下)

线程和进程的区别(从操作系统、JVM、协程,CPU调度的什么,协程与线程调度的区别)

HTTP协议(状态码(涉及的不够细),HTTP1.0 ,1.1,2.0,HTTPS,非对称加密和对称加密)

怎么实现 Redis 的快照机制,能够保证在 dump 过程中能够相应其他请求(让我自己来设计,我借鉴 Hash 的内存结构设计,自己简单设计了一个,用了两倍的内存空间)

Java 怎么标记 GC 的(引用计数法,GC roots,roots 由哪些构成的)

算法题:

先给了一题LeetCode 困难问题,接雨水(我大致讲了一下实现思路)

然后又给了一题LeetCode 中等问题,计算两个链表倒序相加的,比较简单

一面反思

面试官人真的超好,问的题目也比较基础,接下来还是再认真准备一下,说不定就进字节跳动了呢?

字节跳动二面

简单自我介绍一下

直接开始写算法题

LeetCode medium 难度 :链表排序(要求空间复杂度为常量),我用插入排序写出来了,面试官让我再用归并排序写,我稍微讲了一下思路,没写出来

LeetCode hard 难度:n 皇后问题

写完两道算法题之后,面试官让我简单讲讲 MySQL 懂的所有知识、Redis 的数据类型

最后问了 cookie、session 的详细问题

二面反思

一开始都觉得自己要挂,后面突然状态好了起来。

字节跳动三面

这次的面试感觉出乎我的意料,不像是面试,更多地是面试官去引导我怎么思考。

一开始和面试官讲了我的基本情况,以及展示了自己的博客, 然后和面试官聊了一下关于抖音产品的看法。

之后面试官出了一道比较困难的 24 点组合问题,我在提示下一点点理清了思路,但是后面的递归的写法不太好。

最后面试官问了一个偏向架构设计思维的问题:抖音 的话题排行榜该怎么设计

我只是简单地从系数加权的角度来讲,后面面试官给我普及了大量的思维方式:

可以从视频内容、地址、时间、主题等信息去做一个相似度的分组处理,同时如果要做一个话题评论区,就从单纯的只读需求,到了写需求,如何做到评论的时效性和通知信息等等。

三面反思

其实这次面试表现不太好,面试官也直说我的能力和竞争的本科生没有太大的优势。不过,我还是要乐观地去面对它,希望能够拿到这个令我心动的Offer吧。

字节跳动四面

四面是 HR 面,主要是聊了一下自己基本情况(成绩、比赛、入职时间、毕业时间(读研还是工作)、自己的相处能力、团队配合能力)

字节跳动总结

字节的第一轮面试是员工面,强调基础,需要特别注意复习好操作系统和计算机两门课程,有精力还可以学一下图论和密码学

字节的第二轮面试是小 leader 面,强调算法,需要尝试去刷一些 LeetCode Hard的提醒,训练一下自己思维,我每一轮面试都遇到了 Hard 问题

字节的第三轮面试是大 leader 面,强敌算法思维的极限和架构分析思维,可以去看一些架构设计的书和一部分 ACM的题

常见的面试问题

Java 基础

  1. 封装、继承、多态
  2. 重载和重写的区别
  3. Object 类下有哪些方法
  4. HashCode、equal、==
  5. String、StringBuiler、StringBuffer
  6. 自动拆箱与自动装箱(特别是 Integer)

Java 集合

  1. HashMap 的所有知识(1.7、1.8、头插、尾插)
  2. ConcurrentHashMap、HashTable、Collections.SynchronizedMap
  3. LinkedList、ArrayList

多线程

  1. 线程池的五大参数、执行原理、拒绝策略
  2. Synchronized(作用于对象、代码块、方法)
  3. Volatile(缓存行、可见性、重排序)
  4. AQS(ReentranLock)

JVM

  1. 方法运行时的内存区域
  2. 双亲委派加载机制
  3. 垃圾回收算法与垃圾回收器

计算机网络

  1. 应用层:HTTP(1.0、1.1、2.0、HTTPS)、DNP
  2. 传输层:TCP(拥塞避免、滑动窗口、重传机制)、UDP
  3. 网络层:IPv4、IPv6、ICMP

操作系统

  1. 进程与线程、几种状态

  2. 七种进程间通信(匿名管道、管道、信号、信号量、消息链表、共享内存、套接字)

  3. 分页和分段

  4. CPU 调度算法(先来先服务、短作业优先、优先级调度、多级反馈队列调度)

Redis

  1. 五大数据结构
  2. Redis 持久化
  3. 缓冲雪崩、缓存穿透、双写一致性等等
  4. 内存淘汰机制

Mysql

  1. Why use B+ trees for indexing (comparison with other data types, red-black trees, binary balanced trees, B-trees, etc.)
  2. Storage engine (Innodb, MyIsam)
  3. Transaction isolation level, MVCC
  4. SQL optimization (slow query, sort out various indexes)

to sum up

In fact, these friends recruited by the society are not very applicable, they are all relatively basic, but his learning mentality can imitate a wave of learning, using various network resources to learn, don’t paddle the water every day in the group to be a fan, especially a certain person. These groups of Zaha (can be seated).

Alright, the above is all the content of this issue. I am Ao Bing. The more you know, the more you don’t know. See you in the next issue.



Guess you like

Origin blog.51cto.com/15060461/2677582