2020春招经历

  记录2020年春招参与的互联网公司的求职经历与面经

个人信息

配置

  • 211 - 本科 - 科班
  • 无实习经历

方向

  • Java 后端开发



正文

概览

  • 笔试挂:华为、米哈游、跟谁学、百度、快手
  • 一面挂:Vivo、网易
  • 二面挂:拼多多
  • 三面挂:爱奇艺、阿里云
  • 已拒:美团、携程
  • 通过:字节



华为(软件开发工程师)

笔试

  • 3.11 笔试 - 挂


百度(Java研发工程师)

笔试

  • 3.14 笔试


跟谁学(Java开发工程师)

笔试

  • 3.18 笔试


美团(后端开发工程师)

笔试

  • 3.19 笔试

一面

  • 3.25 一面(视频面 - 42min)
    • 什么是线程不安全
    • Java 容器相关
      • ArrayList 相应的线程安全容器
        • ArrayList和Vector的区别和原理
      • ArrayList和LinkedList的区别和原理
      • Java对有序的ArrayList查找是否会优化?(我猜不优化)
    • Java 异常
      • Error和Exception的区别
      • Error和Exception分别有哪些异常?
      • OOM异常能被捕获吗(猜了个不能,答错了)
    • Java 导致OOM的原因
      • 如何排查(不会)
      • GC什么时候调用?
        • 除了老年区快满的时候,还有什么时候会调用FullGC?(不会)
    • Java 导致CPU一直满的原因
      • 如何排查(不会)
    • 讲一下同步队列(貌似要我讲ArrayBlockingQueue,我凑合答了AQS原理)
    • synchronized和lock的原理
    • Session和Cookies的关系
    • 登录帐号的Token存在哪里好?
    • 进程通信有那几种方式
      • 讲一下共享内存方式(我答了管道文件)
      • 基于共享内存,Java的两个进程如何通信(不会)
    • 算法题
      • 给出a=1, b=2, ..., z=26 这样一个编码,问比如组成126有多少种情况(讲思路)
      • 只能持有一支股票的股票买卖收益最大是多少

二面

  • 3.28 二面(视频面 - 1h 10min)
    • 事务的ACID(持久性突然忘了)
      • 一致性中,如何理解DB的完整性约束(不会)
    • nosql和sql的区别
      • 什么是关系模型(不会)
    • git 与 svn 的区别
      • git rebase的作用
      • git 与 svn 性能上的差异(不会)
    • 场景题:淘宝的自动收获功能如何实现?
      • (第一次我回答了基于定时时间的任务回调)
      • (第二次回答了基于时间有序的多级单调队列)
      • 提示使用循环队列(仍不会)
    • 算法题:将链表按k为大小分快,将块内链表反转

  本以为一二面凉得差不多了,意外收到三面的消息。结果协商转个上海到店转了一个月,似乎没有hc了,最后我拒了调剂IOS。


拼多多(服务端研发工程师)

笔试

  • 3.20 笔试

一面

  • 3.25 一面(视频面 - 46min)
    • 数据库的范式
    • 操作系统内存分布
      • 段页式(我只讲了页式,段页式忘了)
      • C语言的内存分布
      • Java的内存分布
    • Java 垃圾回收机制
      • 如何触发 GC
    • Linux touch一个文件发生了什么?
    • 网络TCP关闭方面
      • TCP挥手的过程
      • TCP异常关闭的过程
    • C++ 实现一个哈希表的增删改

二面

  • 3.29 二面(视频面- 55min) - 挂
    • 算法题
      • C++设计LRL(用类模板)
      • Java 多线程:两个线程轮流修改一个变量
    • Docker是基于OS的什么技术实现的?(不会)
    • 数据库的检查点机制
      • 如何实现?
      • 没有检查点机制会如何?
    • Linux查看网络状态命令
      • netstat命令中的time_wait状态是什么?(其实是TCP中的,没反映过来)
    • 介绍Java垃圾回收器G1
    • 介绍字典树 Tire

  二面居然挂了,挺莫名其妙的


快手(后端开发工程师)

笔试

  • 3.22 笔试


阿里云(研发工程师JAVA(实习生))

笔试

  • 3.23 笔试

一面

  • 3.24 一面(电话面 - 52min)
  • 介绍经历、项目
  • 事务相关

    • 事务的特点(ACID)
      • MySQL隔离级别
        • 不可重复读幻读的区别
  • Java 线程相关

    • sleep、wait方法的区别
      • join、yield方法的区别
      • volatile、synchronized 原理和区别
        • 是否能保证原子性
        • 写操作很频繁时 volatile 适用吗
  • 设计模式

    • 单例模式
      • 饿汉式
      • DLC 懒汉式
      • 枚举方式(不会)
  • JVM相关

    • 类加载机制
      • 类加载的来源除了class文件还有什么(不会)
      • 双亲委派
    • 垃圾回收机制
      • 分代回收
    • 操作系统
      • 死锁
        • 死锁的产生
          • 预防、检测和解除
      • 进程通信
        • 通信方式
          • 线程如何同步
      • 消息队列(不会)
      • 分布式锁(不会)
      • 云计算和SDN(不会)
    • 网络

      • HTTP长连接和短连接
      • 浏览器中输入URL发生了什么
      • 网络层的作用
    • 算法

      • 计算一个整数中二进制1的个数
        • 我回答循环 lowbit 找1,面试官好像没太听懂
    • Spring相关

      • IOC和AOP的概念和应用
      • IOC和依赖注入的关系

二面

  • 3.29 二面(电话面 - 25min)
    • 场景题:从10亿个订单中找出最贵的订单
      • (第一次我回答了外部排序)
      • (第二次回答了订单分批多台服务器处理对应批次的数据,再将结果传给中央服务器处理整合)
      • (第三次回答了多进程并发处理对应批次,并指出与磁盘与内存频繁交换)
    • 红黑树的应用
    • Spring的应用
    • Mybatis的作用
    • 浏览器中输入URL发生了什么
    • TCP 与 UDP 的可靠性
      • 如何使UDP变得可靠(应用层)

三面(交叉面)

  • 5.11 三面(电话面 - 120min)

    • Java 如何获取当前时间
      • 如何获取毫秒(不会)
    • Java 内存模型
    • 线程之间如何数据共享
    • 线程之间如何同步
    • 内存屏障有哪些(不会)
    • volatile 能保证原子性吗
      • 如何保证原子性
    • final 修饰符的作用
    • 解释一下指令重排
    • Java 的堆和栈里存放着什么
    • HashMap 的数据结构
      • 是否线程安全
    • Java 有哪些内置注解
      • Target注解的作用(不会)
      • 如何定义一个注解
    • Python 的装饰器和 Java 的注解有什么区别
    • Java 创建线程有哪些方式
    • 使用过哪些设计模式
    • 使用过哪些框架
    • Spring 的bean是不是单例的(被问了两遍,怂了)
    • Spring 的RequestMapping注解
    • Mybatis ‘#’和’$’有何区别
      • 防止SQL注入的原理(不会)
    • 介绍一下幂等性
      • 设计一个场景:每次插入post数据并传回一个id
    • 设计数据库的时候,性能考虑哪些方面(索引,一时没反应过来)
    • 什么是联合索引
      • 为什么会有最左原则
    • 乐观锁和悲观锁的原理
    • 介绍一下分布式锁
    • Linux 如何查看当前所有运行的进程
    • Linux 窗口管理器(不会)
    • 宏内核和为微内核(不会)
    • 一个登录系统,如何防止暴力破解密码
    • Cookies 和 Session 的区别
    • 后端如何接收Json格式的数据
    • 介绍一下Java序列化和反序列化
    • 排查内存溢出或内存占用高的情况
    • React 框架(不会)
    • 什么是跨域问题

      • 如何解决跨域

        • 后端用注解的原理(不会)
        • 其他方式(不会)
    • MySQL 有哪些存储引擎
    • MyISAM 和 InnoDB 的区别
    • MySQL 如何开启/提交一个事务
    • Linux 修改文件权限为其他人不可写
    • Linux 特殊文件
      • 黑洞文件
      • /dev 目录下的其他特殊文件
      • 生成随机数的命令(不会)
    • 按关键字检索文件内容
    • 进程之间通信的方式
    • 介绍一下 Linux 和 unix 之间的关系和历史
    • SQL 语句中 Left join 和 Right join
    • 用过阿里云什么产品
      • 域名解析怎么进行的
      • A记录和CNAME记录的区别
    • 用Nginx怎么和Java Web应用对接
    • 典型的端口有哪些
    • 链表如何判环
    • 文件系统有哪些
      • Fat32和NTFS的区别(不会)
    • 场景题(给了个网址,写出代码)
      • 在某个时间点会产生流量,统计过去一小时的流量总和

  隔了一个月没面试和复习,交叉面还是挂了。


Vivo(后端方向)

一面

  • 3.26 一面 - 挂
    • (记错了时间,咕了。。)


360(360企业安全-服务端开发工程师-Java)

笔试

  • 3.28 笔试


爱奇艺(Java开发工程师-20届春招)

一面

  • 3.30 一面 - (视频面 - 50min)
    • Java 相关
      • static 关键字的作用
      • final 关键字的作用
        • final 能修饰方法吗?(猜了个不能,答错了)
      • HashMap 和 HashTable 的区别和原理
      • Jvm 垃圾回收的大致原理
      • 手写DLC单例模式(突然忘了)
        • 为什么要DLC?
        • 不用 volatile 会怎么样?(不会)
      • 算法题:有序整型数组的二分查找
    • 操作系统 / Linux 相关:
      • 如何查看系统的启动时间(我答了查看日志,应该是回答 uptime)
      • CPU Load 和 CPU利用率的区别(不会)
      • 查看系统当前所有的 Python 进程
      • top 的作用
      • 管道的作用
      • IO 重定向
      • 进程和线程的区别
        • 介绍协程(不会)
      • 死锁相关
        • 死锁的产生
        • 预防和检测死锁
      • IO 多路复用,select、poll、epoll 调用
    • 数据库相关:
      • 手写SQL:给出一个表,字段有班级、性别和分数,求每个班男生的平均分
    • 网络相关:
      • TCP 和 UDP 的区别
      • HTTP 状态码
    • 介绍一下 RPC(不会)

二面

  • 3.30 二面 (视频面 - 50min)
    • Java Map 原理
      • HashMap、HashTable、ConcurrentHashMap 的原理
      • HashMap 的扩容机制
      • ConcurrentHashMap 如何保证线程安全
    • Java 的内存模型
    • static 什么时候被初始化
    • Java 的垃圾回收机制
    • Jvm 分代回收模型
      • 持久代的作用(不会)
    • SpringMVC 的大致流程是什么?
    • Spring Aop 的实现原理
    • 手写SQL语句:给出一张表,字段有学号、名字、年龄、性别
      • 找出最大年龄的人
      • 找出最大年龄的人有几个
      • 找出最多年龄人数的年龄
    • MySQL 索引的原理
      • 对名字、性别、年龄建立组合索引
        • 哪个字段不适合作索引
        • 查询名字、年龄会走索引吗?
    • 算法题:
      • 交换链表中的两个节点
      • 二叉树的层序遍历

三面(Boss面)

  • 3.31 三面 (视频面 - 20min) - 挂
    • Java 相关
      • ArrayList 和 LinkedList 的原理和实现
      • HashMap 的实现原理
        • 如何通过Key获得Value
      • GC 垃圾回收机制
    • 如何在C++中调用汇编代码
    • 编译原理课程做了什么
    • SSL 握手的过程
      • 有几次RTT
      • 快速恢复SSL的方法
    • 对称加密和非对称加密的对比


携程(后台开发工程师)

笔试

  • 4.1 笔试

一面

  • 4.14 一面(视频面 - 20min)
    • Java 线程安全
      • 如何理解线程不安全
      • 如何解决线程不安全
      • Java 线程安全容器
      • Synchronized 和 Lock 的原理
    • 分布式锁(不会)
    • Java 字符串
      • String 的原理
      • StringBuilder 和 StringBuffer 的区别
      • String 为什么不可变
    • 如何理解同步和异步
    • 如何理解阻塞和非阻塞

二面

  • 4.16 二面(视频面 - 20min)
    • HTTP GET和POST的区别
    • 浏览器和服务器通过Session交互的过程
    • MySQL相关
      • Inoodb 和 Myisam 的区别
      • 索引最左覆盖原则
    • 算法题:给出面值为100、50、10、5、1的纸币(无数量限制),问给每个员工发工资至少要多少张纸币

HR 面

  • 4.23 hr面(视频面 - 15min)


网易有道(Java开发工程师-杭州研究院)

一面

  • 4.2 一面 (视频面 - 40min)
    • Java 垃圾回收机制
    • Java 如何判断两个对象相等
    • Java 线程池原理
    • Http 与 Https 的原理
    • 进程通信的方式
    • MySQL 查询优化
    • 手写SQL:查找最高分数的前十名
    • 算法题:
      • 二叉树的最大宽度(递归与非递归)
      • 十进制转七进制
        • 如何测试?
    • 场景题:如何考虑一场秒杀活动

  貌似是投了杭研院,面试意外的简单,看样子是被刷KPI了。


米哈游(服务器开发)

笔试

  • 4.3 笔试 - 挂


字节跳动(后端开发工程师 — 上海创新业务)

笔试

  • 4.12 笔试

一面

  • 4.18 一面(视频面 - 40min)

    • Java 内存模型
    • 两个进程的变量的地址相同,它们之间的写操作有相互的影响吗
    • 进程通信的方式
    • 关系型和非关系型数据库
    • 事务的特点
      • 原子性和一致性的实现原理(不会)
    • TCP 和 IP 为什么要四次挥手
      • Close_wait 状态是什么(不会)
    • 甲乙轮流射箭,两个人命中靶子的概率都是0.5,谁先射中就赢,问甲获胜的概率
    • 算法题:给出一串数字,去掉k个数,问能形成的最小的数

二面

  • 4.18 二面(视频面 - 50min)

    • Java HashMap
      • put 数据的过程
      • 链表非常长会怎么样
      • 什么情况下会转红黑树(不会)
      • ConcurrentHashMap 作的改进
    • 常见的垃圾回收算法
      • 引用计数的循环引用的情况
    • MySQL 的联合索引
      • 索引的底层结构
    • 100个人坐座位,第一个人随机坐一个座位,后面的人优先坐自己的座位,只有当自己的座位被占了才会随机坐,问第100个人能坐到自己座位的概率(答案50%,不会)
    • 段页式管理下,CPU取数据要几次访存
    • 算法题:给出一个数字串的排列,找出下一个比当前数更大的一个排列(不能用next_permutation)

三面

  • 4.18 三面(视频面 - 55min)
    • 场景题:对 HashMap rehash 的时间进行优化
      • 我第一次答了:事先预估 capacity,直接申请相应大小
      • 我第二次答了:扩容时仅申请数组但不拷贝,当get命中时顺便拷贝过去
        • 缺点是什么(可能会生成很多数组)
        • 再优化(不会)
    • 手写单例模式(饿汉、DLC懒汉)
    • 算法题:给出一个转义后的字符串,问原串是什么?(写得不好)

  前两面的表现还凑合,第三面就有点拉跨了。4.23收到了Offer

-------------本文结束-------------
0%