双非二本收到了美团的面试
分享美团一面面经 :(2023.3.15)
整个面试过程大概50分钟左右。
1. 面试官自我介绍以及介绍公司的大概情况。
2. 本人自我介绍。
3. 简历中的每一个项目经历都问了(问的特细致,还延展了很多,一定要仔细研究简历中自己的项目)。
学习编程语言,应用框架直接看官方文档(其实官网就是最好的一首资料,很多博客视频都是基于官网多次加工的),写demo直接github找项目,遇到不懂的去查 *。
学术能力上的提高,通过搜索到合适的论文快速了解一门技术,一个技术方向目前的最近进展和应用场景。
学习能力上的提高,本科的时候学习技术只会看书,找视频,而现在会看一手的英文文档或者官方文档。
工程能力上的提高,本科时候针对一个项目不知道如何入手,现在可以快速了解一个项目的整体架构以及各个模块的职责。
4. 说出5个最常用的linux命令。
目录切换 cd
增删改查 mkdir(增目录) rm -rf(删除目录) mv(改) find(查)ls/ll(查)
5. http的请求过程。
dns解析-tcp连接-http请求发送-服务器处理并返回http报文-浏览器解析渲染-连接结束
6. http与https的区别。
端口号80 443
URL前缀
安全性&资源消耗
7. http的响应码(有5种)。
1xx信息正在处理
2xx成功
3xx重定向
4xx客户端错误
5xx服务器错误
8. 手撕数据库:给出一个题目,写出sql语句(在数据库中插入一行数据)。
-
INSERT INTO user
-
VALUES (10, 'root', 'root', 'xxxx@');
9. 使用Selenium时,webdriver、selenium、浏览器之间是如何协同工作的。
对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
HTTP Server接收到请求后根据请求来具体操控对应的浏览器
浏览器执行具体的测试步骤
浏览器将步骤执行结果返回给HTTP Server
HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息
10. selenium中有哪些元素定位器。
id 唯一的 name 元素的名称 class name 元素的类名 tag name 标签,不推荐,重复率太高 link text 文本链接 partial link text 对文本链接的一种补充 xpath 相对/绝对路径 css selector css定位
11. 使用selenium来操控浏览器页面。
12. 用selenium操控页面时,在浏览器的输入框中输入字符串运行,运行之后想再次运行,但此时运行结果报错:已输入内容。此时如何处理。
13. 问Java,我说不会,就没问了。
14. python 2 和 python 3 的区别。
1.整数:python2中区分整型(int)和长整型(long),python3不区分;
2.python2中没有f 标志位格式化,python3才有
3.python3里面,True和False都是关键字,python2里面不是
4.python2的编码是ascii码,python3的默认编码是utf-8
15. 思维逻辑题:12个鸡蛋,其中有一个鸡蛋是坏的,给你一个天枰,需要操作几次才能筛选出坏的鸡蛋。如何操作的,说说思路和过程。又问:如何知道坏的蛋比正常的蛋轻点还是重点?
16. 设计测试用例的方法有哪些。
尽早介入-》参考往日-》输入输出-》找寻特护-》经验查漏-》总结清晰
17. 等价类划分法有多少种。无效等价类是什么。
区间 数值 集合 限制条件 处理方式
18. 如何对一支笔做测试用例。
:功能、性能、兼容性、易用性、安全性、界面、压力
19. 测试文档的用途。
20. 软件测试的质量特性有哪些。
功能 可靠 易用 可维护 可移植 效率
21. 如何测试手机在上市之前在各操作系统上的兼容性。(我直接说的不知道呜呜)
22. 当你的组长交给你一个任务,要求在短时间内必须完成,你该如何做。
23. 在工作或者学习中遇到最困难的事情是什么。
24. 在selenium的学习当中,遇到最难的知识点是什么。
25. 反问环节。
- MySQL四种隔离级别
已读未提交 已读已提交 可重复读 可串行化
- 会不会出现幻读
加了一个
- MVCC说一下
数据库并发访问
数据库快照
行级锁变种,避免加锁,开销更低
- 用没用过分库分表,啥情况用的
垂直分库、垂直分表、水平分库和水平分表
- MySQL优化
- Redis缓存穿透
- 缓存雪崩
- 持久化机制
Redis 挂掉之后再重启数据可以进行恢复
一种持久化方式叫快照(snapshotting,RDB)Redis 可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。,另一种方式是只追加文件(append-only file, AOF)与快照持久化相比,AOF 持久化的实时性更好开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令
- 哨兵工作机制
监控,选主(选择主库)和通知。
- JVM内存分区
- 垃圾回收机制
- OOM
是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存
- 双亲委派,有哪些打破双亲委派机制的例子吗
- 三次握手说一下
- TCP和UDP
- 为什么TCP可靠传输
- TCP报文段能介绍下吗
- 多线程有几种方式实现,优缺点说一下
- 线程池实现过吗,用来做了什么,用到哪些参数,说下线程池常用阻塞队列
- ThreadLocal说一下
- 测试用例设计往一个微信群里发文件
- 自我介绍
- 自已觉得最好的项目?主要做了什么?遇到的最大困难?
- 浏览器输入网址后发生了什么?
- 三次握手和四次挥手
- http和https的区别
- https的加密过程
- 知道哪些排序算法
- 快排的具体过程
- 进程间通信方式
管道、消息队列、共享内存、信号量、信号、Socket
- 进程的调度算法
先来先服务等等
- 优先级算法
- 数据库索引
- linux命令
- Spring框架
Core:核心容器 ,提供Spring的基本功能.
Contest:Spring上下文,是一个配置文件
AOP : Spring 中面向切面编程
4..Spring Dao:用于管理异常与抛出错误的信息
ORM: 提供ORM对象关系工具
Web: 用于处理请求与处理参数绑定的工作
MVC:MVC框架是一个全功能的构建Web应用程序的MVC实现
核心:
支持不绑定到特定J2EE服务的可重用业务,和数据的访问对象,这样的对象可以在不同的J2EE环境下独立应用程序,测试环境之间的重用
- 线程池
降低资源消耗
提高响应速度
提高线程可管理型
- HashMap的底层原理
HashMap是基于哈希表的Map接口的非同步实现。HashMap是一个存储key-value键值对的集合,每一个键值对也叫做entry,这些entry分散存储在一个数组中,这个数组也是HashMap的主干,这个数组每个元素的初始值都是null
DK1.8 之前
HashMap
底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的hashcode
经过扰动函数处理过后得到 hash 值,然后通过(n - 1) & hash
判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。
- ConcurrentHashMap如何实现线程安全的
它主要是使用了CAS 加 volatile 或者 synchronized 的方式来保证线程安全。 我们可以从源码片段中看到,添加元素时首先会判断容器是否为空, 如果为空则使用 volatile 加 CAS 来初始化, 如果容器不为空,则根据存储的元素计算该位置是否为空。
- 算法题:合并两个有序数组LC88
- 针对上面算法题的测试
- 黑盒测试,白盒测试
- 设计模式
- 为什么找测开岗位?对测开的理解?自己的优势和劣势
- 个人的最大优点和缺点
- 个人的意向
- 意向地
- 反问
自我介绍。
讲了一下自己的项目,根据项目问了:
你之前有过这方面的了解吗?
你是怎么开始学习这个领域的?
做项目的过程中遇到什么困难吗?是如何解决的?
你的收获是什么?可以详细展开描述吗?
你的项目是用什么语言编写的?
为什么不选开发?
做过测试相关吗?
问一些JAVA的知识吧
- Map 接
- HashMap 和 Hashtable 的区别
安全 n y(内部方法经过synchroized修饰)
效率 >
支持null key 和null value n y
初始容量&扩容量不同 11 2n+1 16 2
底层数据结构 1.8后链表大于阈值会转化为红黑树
- HashMap 和 HashSet 区别
- HashMap 和 TreeMap 区别
treemap多了 对集合中元素根据键排序的能力 & 集合内元素搜索能力
- HashSet 如何检查重复?
加入后,先计算hashcode的值来判定加入的位置,同时进行比较,如果没相同的,则假设没有重复出现,如果有相同的,就用equals()检查是否真的相等
- HashMap 的底层实现
JDK1.8 之前
HashMap
底层是 数组和链表 结合在一起使用也就是 链表散列。JDK1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。
- HashMap 的长度为什么是 2 的幂次方
为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这个数组下标的计算方法是“
(n - 1) & hash
”。(n 代表数组长度)。
- HashMap 多线程操作导致死循环问题
并发下的 Rehash 会造成元素之间会形成一个循环链表。jdk 1.8 后解决了这个问题,但是还是不建议在多线程下使用 HashMap,因为多线程下使用 HashMap 还是会存在其他问题比如数据丢失。并发环境下推荐使用 ConcurrentHashMap 。
- HashMap 有哪几种常见的遍历方式?
使用迭代器(Iterator)EntrySet 的方式进行遍历;
使用迭代器(Iterator)KeySet 的方式进行遍历;
使用 For Each EntrySet 的方式进行遍历;
使用 For Each KeySet 的方式进行遍历;
使用 Lambda 表达式的方式进行遍历;
使用 Streams API 单线程的方式进行遍历;
使用 Streams API 多线程的方式进行遍历。
- ConcurrentHashMap 和 Hashtable 的区别
底层数据结构: JDK1.7 的
ConcurrentHashMap
底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8
的结构一样,数组+链表/红黑二叉树。Hashtable
和 JDK1.8 之前的HashMap
的底层数据结构类似都是采用 数组+链表 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的实现线程安全的方式(重要):
- 在 JDK1.7 的时候,
ConcurrentHashMap
对整个桶数组进行了分割分段(Segment
,分段锁),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。- 到了 JDK1.8 的时候,
ConcurrentHashMap
已经摒弃了Segment
的概念,而是直接用Node
数组+链表+红黑树的数据结构来实现,并发控制使用synchronized
和 CAS 来操作。(JDK1.6 以后synchronized
锁做了很多优化) 整个看起来就像是优化过且线程安全的HashMap
,虽然在 JDK1.8 中还能看到Segment
的数据结构,但是已经简化了属性,只是为了兼容旧版本;Hashtable
(同一把锁) :使用synchronized
来保证线程安全,效率非常低下。当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。
- ConcurrentHashMap 线程安全的具体实现方式/底层具体实现
- 在 JDK1.7 的时候,
ConcurrentHashMap
对整个桶数组进行了分割分段(Segment
,分段锁),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。- 到了 JDK1.8 的时候,
ConcurrentHashMap
已经摒弃了Segment
的概念,而是直接用Node
数组+链表+红黑树的数据结构来实现,并发控制使用synchronized
和 CAS 来操作。(JDK1.6 以后synchronized
锁做了很多优化) 整个看起来就像是优化过且线程安全的HashMap
,虽然在 JDK1.8 中还能看到Segment
的数据结构,但是已经简化了属性,只是为了兼容旧版本;
- JDK 1.7 和 JDK 1.8 的 ConcurrentHashMap 实现有什么不同
- 线程安全实现方式 :JDK 1.7 采用
Segment
分段锁来保证安全,Segment
是继承自ReentrantLock
。JDK1.8 放弃了Segment
分段锁的设计,采用Node + CAS + synchronized
保证线程安全,锁粒度更细,synchronized
只锁定当前链表或红黑二叉树的首节点。- Hash 碰撞解决方法 : JDK 1.7 采用拉链法,JDK1.8 采用拉链法结合红黑树(链表长度超过一定阈值时,将链表转换为红黑树)。
- 并发度 :JDK 1.7 最大并发度是 Segment 的个数,默认是 16。JDK 1.8 最大并发度是 Node 数组的大小,并发度更大。
详细说一下抽象和接口以及他们的区别吧
抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象
知道hashmap的底层实现原理吗?。
接着又问还有哪些常见的可以实现hashmap的线程安全的类吗?
HashTable为什么是线程安全的?
问了并发编程的好多问题
多线程的创建方法有哪些?我回答了使用runnable接口和Callable接口,其他想不起来了
紧接着问了runnable接口和Callable接口的区别
Callable的call方法返回什么类型?
问了线程池有哪些常用的类,他们的参数?用法?详细描述。我说了java自带的几种线程池,答得很不好
线程太多的话有哪些拒绝策略?
java数据结构的容器,面试官想问的是SpringBoot,我还没学过。
问了JVM。这两块我还没学,就过了。
数据库的知识:
有哪些索引?
事务的的隔离级别?MySQL默认的隔离级别?
计算机网络:
三次握手、四次挥手
get和post的区别
一次完整的http请求有哪些步骤?
常用的Linuxs的命令
登录界面的测试用例
编程题:去除链表中的重复结点。
50min
自我介绍
深挖项目
spring核心
Spring核心是IOC和AOP。
Spring主要优点包括:方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。
AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。
声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。
方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。
http状态码
跨域问题怎么解决
比如Jsonp方式实现起来较为简单,但只支持GET请求方式,在原生JavaScript脚本中使用方便,但是当利用了如这种MVVM框架时就有些难以施展了。反向代理的方式无需改动后端代码,但是对于整个系统而言可移植性较差,CORS方式需要后端来积极配合前端实现跨域。
线程安全怎么保证
volatile关键字
mybatis实现分页
#和$的区别
springboot通过什么简化配置
注解是通过什么机制实现的
linux常用命令
linux要杀死一个进程怎么操作
redis数据结构
举例你用过某种redia数据结构的场景,为什么
mysql索引
实现登录的sql语句怎么去设计
测试用例设计:一个输入框怎么测试
了解tps吗(测试吞吐量的一个指标)
算法题合法括号
大概交流了一下可以到岗的时间
反问
主要技术栈 java
业务 买药
一共有几轮技术面
-
介绍一下项目和你所做的工作 15分
-
java比较熟悉吧,说一下hashmap和treemap的区别
-
如果给你一个自定义类,如何实现数组的indexOf()查找: 回答重写equals()方法和HashCode(),说了一下流程
-
很好,之后面试官在牛客在线编程页面给我丢了个person类,现在你去实现一下person类的indexOf()查找功能:重写了equals和hashcode方法,面试官问为什么hashcode里,你加了一个质数,回答保证数据在桶中均匀分布,提高利用率;(119条消息) java中hashcode和equals方法的重写_数据猿+的博客-****博客
-
追问引用数据类型的equals()和==相同吗?答: ==比地址,equals也比地址,想比内容得重写equals,string的equals比的是什么?答:内容,因为已经被重写过了
-
Leetcode 149 直线上最多的点数(hard),没做过,盯着看了5分钟,面试官说不会给你换一道,我说只能想出笨办法,说了一下思路,开干。面试官看了代码,解释了一下,面试官说思路是对的,ok,我说有重复计算,可以用hashmap来优化。
1.实习经历主要做什么?自己觉得有没有做到什么贡献?
软件测试
2.黑盒和白盒测试的区别,方法有哪些?
黑盒测试的判定表法是什么?
3.如果要对网络页面进行测试,应从哪几方面考虑?性能、功能、安全、兼容、易用性等
4.兼容性主要指?浏览器、操作系统、屏幕分辨率
5.简历上软件测试的大作业,主要做的什么?方法测试
6.接口测试是什么?主要在测什么(我不太了解)
自动化常用的工具?selnium。元素定位方式?八种
计算机网络
与UDP区别?举例说明什么用TCP,什么用UDP?邮件用TCP,视频用UDP
的三次握手和四次挥手?
与post的区别?对安全不安全的理解,其实post只是把数据换了一种方式显示在网址中 其实可以通过抓包也可获得原始数据,真正要靠后面写方法 大意是这样
数据库和linux
1.数据库的左连接和右连接?lefet join 与 right join 结合学生表和成绩表
2.数据库删除操作的命令? delete drop truncate
的基础命令,tail , more, cat , chomd
写代码
用的牛客平台进行面试,给出列表表示每日的股票价格,问股票什么时候买入,什么时候卖出收益最大?动态规划思想(疏忽掉坑了)
无自我介绍,整体基本是围绕项目和简历内容展开
0.开场介绍美团金服各工作地点的主要业务
1.介绍一下你觉得最值得介绍的收获最大的项目?有哪些功能?
2.说一说这个项目的亮点?为什么会选择做这个项目?
3.后续如果想迭代的话会增加哪些功能或者技术呢?(我说到会引入并发遍程)
4.关于并发遍程你了解哪些?
5.对测试理论了解多少?简单说一说
6.给你的项目进行测试的话你会怎么测试呢?
7.在这个开发过程中遇到了bug会怎么排查呢?
8.你怎么看待开发和测试的?对哪个更感兴趣呢?
9.如果能够入职,以后希望在哪方面提升自己的能力呢?(提到自动化测试)
10.自动化测试了解多少?知道一些框架吗?
11.有没有和同学合作开发的经历?说一说这个过程中遇到的最大的困难?
12.做一个题(暴力做法很简单)
13.你为什么会投递美团呢?
14.简历上写了美赛经历,讲讲这个的过程和收获?如果产生意见冲突,你会怎么解决?
15.简历上写了参与过招生宣讲的活动,说一说你的体会和收获?
16.反问
1.开发和测开的区别。
的请求方法有哪些?
、post和head的区别?
4.常见的http状态码有哪些?
5.项目中redis是怎么考虑的?
有没有考虑消息乱序这些?
7.平时有没有了解关于测开的一些知识?
中的索引?
9.数组和链表的特点。
会哪些命令?如果多个人同时push到同一个master下会怎么样?
修改配置文件的一个流程?如果不保存退出呢?
:查询一个学生表,性别为女,姓陈的学生人数。
个一组反转链表。
14.登录淘宝设计测试用例。
15.职业规划,为什么投测试
2.看简历问项目
3.为什么做测试
4.黑盒白盒
5.测试用例方法
6.项目测试流程(面试官补充,从需求评审,技术评审就开始了,大于软件测试流程)
7.数据库 左连接 右连接
8.数据库删除关键字
delete(删除行) drop(删表) truncate(清空表中数据)
多线程实现方法
继承thread并重写run方法,调用start方法;
runnable接口,初始化thread,创建thread实例,调用start方法;
callable接口,初始化thread,创建thread实例,调用start方法;
线程池
元组和字典
列表 有序项目的数据结构,可以增加和删除
元组 和列表类似,但不可变
字典 键 值 映射
11.算法:股票最大利润
12.校园活动
13.反问
面试官是一个做开发的小姐姐 人很好 可惜我是菜狗????
1自我介绍
2算法题 二叉树中序遍历 使用迭代的方法
3Sql语句 编写一个查询大于岗位平均工资的数据 使用升序
4 Mysql char与varchar区别
5 Maven如何解决包的版本冲突问题
6 Spring MVC 处理请求过程
7 浏览器渲染url页面的过程
8 Mybatis 逆向工程 生成的文件类型
9 Linux shell语言 如何查询某个文件中的第一列数据
10 Linux shell语言 如何把文件中的逗号换成问号
11Java 基本数据类型
12 后续职业规划
8.数据库ACID解释,数据库是怎么做到持久性的?
多线程创建方法?分别有什么优缺点?
10.数据库性能了解过吗?单表最大多少行?最多多少数据?
11.黑盒测试(方法),白盒测试(方法),单元测试,系统测试,集成测试,区别,关系?单元测试是黑盒白盒?
有接口吗,怎么定义?
13.自动化测试了解什么做过什么?
面向切面编程
15.敏捷开发
查看一个文件内有多少行(包括打开文件的命令 wc -l)
查看文件前10行,后10行
会吗?忘完了
19.面完了这段时间能来实习吗???要写毕业论文
20.你更偏向测试还是开发岗位?
21.你用Jemter做的是性能还是压力
22.给你一个项目你多久能熟悉
23.职业规划
24.用过git吗
面(60分钟)
1、自我介绍
2、实习时间
3、深挖项目,挖的很深
4、SQL语句:找出每门课都大于60分的学生姓名
5、数据库索引,索引的作用
6、什么时候需要用索引,什么时候不需要
7、测试用例设计方法
8、软件测试的流程
9、Java的集合类型:set,list,map
每种都有哪些?有什么区别
10、数组和链表的区别
11、static关键字
12、jvm内存分为哪几种,分别存什么
13、垃圾回收如何判断:引用计数法和引用链法
14、引用计数法可能造成什么问题
15、网址输入URL的寻址过程
16、计算机网络每层的协议
17、DNS属于哪一层:应用层
18、数据链路层有哪些协议
19、TCP、UDP的区别
20、编程:字符串转数字
设计测试用例
21、反问
1. 创建线程的方式,他们之间的区别
2. 父类子类的实例化顺序
3. 垃圾回收的常见算法
4. 内存泄漏和内存溢出的定义、区别
5. 如何解决内存溢出
6. SQL题:给一张学生表,找出表中成绩大于80分的学生
口述算法题:两个很长的数组,比较相同的元素
测试用例:测试美团首页(猜你喜欢)
算法题:力扣234: 回文链表