2020测开面经(字节,阿里,腾讯)

目录

一、背景

二、面试知识覆盖

2.1.java知识

2.2.Spring

2.3.数据库

2.4.linux

2.5.操作系统

2.6.计算机网络

2.7测试场景

三、手撕代码题

3.1阿里:

3.2.字节

3.3吉比特

3.4腾讯

四、心得

五、复习路线


一、背景

先说一下自己的背景,本人中南大学就读,计算机专业,现已拿字节、腾讯测开岗位实习offer、盛大java研发岗位实习offer,阿里交叉面五面挂。自己主要的技术栈为:java,会使用Spring/SpringMVC/mybatis/Spring Sercurity开发框架,mysql数据库,了解常用的数据结构和算法,了解基本的计算机网络和操作系统知识,会使用简单的linux命令,了解c/c++。实习经历为深信服技术服务岗,中国联通销售岗。自学储备:java核心技术上下卷,ssm框架课程,mysql必知必会。

二、面试知识覆盖

盛大:java基础知识(重点)、数据库、操作系统

腾讯:数据库相关(重点),测试知识相关,linux知识

阿里:java知识(超级重点),数据库,计算机网络,操作系统等等

字节:算法知识(每一面都有算法题,需要现场手撕,大部分与字符串相关),测试知识,java知识,操作系统知识

当然每一家几乎都会问到实习经历和项目相关。整体难度 :阿里>字节>腾讯>盛大。阿里轮次6轮(java1轮+测开5轮),字节(4轮j技术+hr),腾讯(3轮技术+hr),盛大(2轮技术+hr)。

阿里:java一面、测开一面、测开二面主管、测开三面老板、测开四面交叉、测开五面交叉(因为测开四面表现不理想,所以补面交叉,但还是挂了)

字节:测开一面、测开二面(一二面是连在一起得)、测开三面、测开四面、测开五面hr(我也不知道为啥我五面,一般都是三面应该是中间转部门了)

 

以下都是面试过程遇到的一些问题:

2.1.java知识

  1. 基本数据类型的所占字节
  2. 常量池
  3. 自动装箱和拆箱
  4. 反射与注解
  5. 深拷贝和浅拷贝
  6. 四种内部类
  7. jvm分区(重点)
  8. 垃圾回收收集器
  9. full gc和minor gc
  10. 类加载过程
  11. 线程池(重点),线程池创建方法,参数表示的含义,提交任务的顺序
  12. ThredLocal
  13. 单例模式的线程安全手写
  14. oom异常的排查
  15. 理解继承与多态
  16. 多线程(重点):wait()和sleep()的区别、sychornized和lock的区别、 notify()和wait()底层实现,多线程和单线程的运用场景
  17. 并行与并发的区别
  18. hashmap(最好看一看源码,重点)
  19. CAS,AQS原理
  20. junit(一个单元测试的工具)的原理,怎么实现的。
  21. 用户登陆状态怎么保存。

2.2.Spring

  1. spring的事务传播机制
  2. spring的启动过程
  3. spring容器的原理
  4. springaop的底层原理
  5. @autowire和@Resource的区别
  6. springaop的中代理实现方式,不用代理技术怎么实现AOP。

2.3.数据库

  1. ACID
  2. 事务的隔离级别(重点)
  3. 索引b+树结构
  4. sql语句优化
  5. 数据库引擎比较(重点)
  6. 数据库怎么保证事务的acid性质
  7. 左外连接和普通连接区别
  8. delete和trancate的区别
  9. 什么时候全表查询比索引快
  10. mysql怎么使用,越多越好吗,一张表最多几个索引

2.4.linux

  1. 进程间通信ips比较(重点)
  2. 网络命令

2.5.操作系统

  1. 进程与线程区别(重点)
  2. 进程线程的几种状态及其转换
  3. 进程死锁条件,死锁处理方法

2.6.计算机网络

  1. tcp和udp区别,tcp和http区别
  2. http状态码
  3. http过程
  4. 流量控制,拥塞控制的方法和手段(重点)
  5. tcp三次握手,四次挥手,原因和过程(重点)
  6. 网站访问过程

2.7测试场景

  1. 秒杀场景的测试与实现
  2. 抖音下滑功能的测试
  3. 登陆功能的测试

三、手撕代码题

做手撕代码的时候可以先和面试官确定思路然后再动手写,防止刚开始方向就错了。

3.1阿里:

题1:

//评测题目1:
//使用两个不同的线程将会共用一个 HelloWorld 实例。
//其中一个线程将会调用 hello() 方法,另一个线程将会调用 word() 方法。
//请设计修改程序,以确保 "HelloWorld" 被输出 n 次。
//示例 1:
//输入: n = 1
//输出: "HelloWorld"
//解释: 这里有两个线程被异步启动。其中一个调用 foo() 方法, 另一个调用 bar() 方法,"foobar" 将被输出一次。
//示例 2:
//输入: n = 2
//输出: "HelloWorldHelloWorld"
//解释: "HelloWorld" 将被输出两次。

思路:信号量

题2:

//评测题目2: 
//含有 x + 1 个整数的数组 nums,其数字都在 1 到 x 之间(包括 1 和 x),
//假设只有一个重复的数字,请找出这个重复的数。
//示例 1:
//输入: [1,3,4,2,2]   输出: 2
//示例 2:
//输入: [3,1,3,4,2]   输出: 3
//说明:
//不能改变原来的数组(假设数组只读)。
//只能使用额外的 O(1) 的空间。
//时间复杂度小于 O(n2) 。

思路:二分

题3:

//评测题目3实现一个单例模式
/*

思路:为保证线程安全,用synchornized或者静态内部类,或者枚举类实现

题4:

1.生成一个文件,大小不大于1G或行数不大于指定数,文件每行内容 为随机long型正整数的字符串;
2.读取该文件,并对文件中的整数进行排序,并输出一个文件;
3. 要求代码简洁优雅,和效率优化

思路:hash拆分,然后归并

题5:

判断一个树是否为平衡树

思路:递归

题6:

中序遍历一个树,实现递归和非递归方法

思路:递归:dfs,非递归:用栈存储节点,先找最左边,再判断其是否是否有右节点巴拉巴拉,大家还是力扣上看思路吧,有原题。

题7:

模拟栈,能够实现压入,弹出,获取当前栈的最大值的操作。

思路:维护两个链表,一个链表存储元素,一个链表存储截止至当前位置的最大元素,弹出一起弹出即可。

如:

链表1:1 2 1 3 1

链表2:1 2 2 3 3

题8:

矩阵相乘,并优化。

思路:优化稀疏矩阵 遇0时记录跳过


3.2.字节

题1.

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

nums = [-1, 0, 1, 2, -1, -4,4,5]

注意:答案中不可以包含重复的三元组。

思路:先求一个和数组,然后通过hashmap判断是否有和的负值存在


题2.

判断一个字符串是否符合ipv4地址,返回true或者false

比如输入“127.0.0.1”,返回true

输入"256.1.2.3",返回false

思路:比较简单,分四个部分判断就行,可以注意一下优化,能提前判断错误就直接返回不要进行太多的步骤。

 

题3:


3.将中文亿级数字转换为int,值范围[0, 10^9]

一千零二十四  => int

Cases

一千零二十四

一亿零九万三千八百

思路:我是根据字符串的‘万’和‘亿’字符的位置进行分割,将字符串分割成三个部分,然后依次判断,最后累加起来就行。
 

3.3吉比特

题1:

重写string类中的indexof()

思路:标志位

3.4腾讯

题1:

找数组中第一个等于或大于x的数

思路:二分。

四、心得

  • 不打无准备之战!不打无准备之战!不打无准备之战!
  • 投递简历乘早,越早机会越多
  • 面试之前最好猜一些面试官可能会问的问题,提前写好自己的“标准答案”,心理默读几遍,
  • 注重简历,简历上写了的东西自己心理一定要有底,简历就像是自己交给面试官的考卷,他拿这个考你,技术岗最好体现自己的技术栈,简写一些非技术的。
  • 保持良好的心态,面试不用慌,也不用太在乎结果,反正过了就赚了,没过就总结就行。
  • 大厂不用慌,其实面大厂的人很少,怕投的人很多,放心大胆投就行,自我感觉大厂比一些小厂面试还要简单一些。
  • 面试过程尽量引导面试官往自己熟悉的领域问,hr面最重要的是真诚。

五、复习路线

数据库:《mysql必知必会》,所需时间两天

计算机知识:推荐Cyc2018公众号(强烈推荐),把java,计算机网络,操作系统等等知识回顾一下,准备面试的过程每天都会看。

算法:刷剑指offer,力扣题,根据Cyc2018公众号推荐刷题

你可能感兴趣的:(bat测开面经)