美团测开面经 3.24

3.12 美团笔试凉凉,只做了一个题。第三题
#include <iostream>
#include <string>
#include <unordered_map>
#include<algorithm>
#include <vector>
using namespace std;
int findNums(vector<int>& nums, int x)
{
    if (nums.empty() || x <= 0)
        return 0;
    unordered_map<int, int> arr;
    for (int i = 0; i < nums.size(); i++)
    {
        int tmp = nums[i] | x;
        arr[tmp]++;
    }
    vector <int> vec;
    for (auto itr : arr)
    {
        vec.push_back(itr.second);
    }
    sort(vec.begin(), vec.end());
    return vec[vec.size() - 1];
}
int main()
{
    int n,x,c;
    cin >> n >> x;
    int a[1000];
    vector<int> vr;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        int tmp = a[i];
        vr.push_back(a[i]);
    }
   c= findNums(vr, x);
   cout << c << endl;
return 0;
}
3.24被捞一面
1、生成一个二叉树,然后再写出来前序遍历
struct node{
int data;
node* lchild;
node* rchild;
};
void preorder(node* root){
if(root==NULL){
return;
}
cout<<root->data<<endl;
preorder(root->lchild);
preorder(root->rchild);
}

2、从一个数组中找到出现次数最多的数字
int getnum(vector<int>& arr) {
	unordered_map<int, int> mp;
	for (auto c : arr) {
		mp[c]++;
	}
	int k = 0, max = 0;
	for (int i = 0; i < arr.size(); i++) {
		if (mp[arr[i]] > max) {
			max = mp[arr[i]];
			k = arr[i];
		}
	}
	return k;
}

3、数据库索引作用及相关问题(面试前没了解过,只会写语句),不会然后问的主键

索引的优点:(转载)

(1)、建立索引的列可以保证行的唯一性,生成唯一的rowID

(2)、建立索引可以有效缩短数据的检索时间

(3)、建立索引可以加快表与表之间的连接。

(4)、为用来排序或者是分组的字段添加索引可以加快分组和排序顺序。

索引的缺点:

(1)、创建索引和维护索引需要时间成本,这个成本随着数据量的增大而加大。

(2)、创建索引和维护索引需要时间成本,每一条索引都要占据数据库的物理存储空间,数据量越大占用的空间越大。

(3)、会降低表的增删改的效率,因为每次增删改索引需要动态维护,导致时间变长。

什么情况下需要建立索引?

数据量大的,经常进行查询操作的表要建立索引。

用于排序的字段可以添加索引,用于分组的字段应当视情况看是否需要添加索引。

当表的数据量比较大时,查询操作会比较耗时,建立索引是加快查询速度的有效手段。

表与表连接用于多表联合查询的约束条件的字段应当建立索引。

常见的索引包括顺序文件上的索引、B+树索引、散列(hash)索引、位图索引等。

4、了解数据库事务吗?

所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事务的开始与结束可以由用户显式地控制。如果用户没有显式地定义事务,则由数据库管理系统按默认规定自动划分事务。在SQL中,定义事务的语句一般有三条:

BEGIN TRANSACTION;

COMMIT;

ROLLBACK;

事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。

COMMIT表示提交,即提交事务的所有操作。具体说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。

ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态。

事务的ACID特性:原子性、一致性、隔离性、持续性。

(1)、原子性:事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。

(2)、一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

(3)、隔离性:一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。

(4)、持续性:也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。

5、https与http区别,为什么https比http安全。

http是应用层协议,它会将要传输的数据以明文的方式给传输层,这样显然不安全。

https则是在应用层与传输层之间又加了一层,该层遵守SSL/TLS协议,用于数据加密。

6、登录缓存放在哪里?http请求方式,介绍一下。

我答的放在本地cookie中。

http请求的常用方法:GET方法、POST方法、HEAD方法、PUT方法、DELETE方法、CONNECT方法、OPTIONS方法、TRACE方法。

GET方法用于使用给定的URL从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。GET请求有长度限制,仅用于请求数据(不修改)。处理敏感数据时,绝不可以使用GET请求。

POST方法用于将数据发送到服务器以创建或更新资源,POST请求永远不会被缓存,且对数据长度没有限制,我们无法从浏览器历史记录中查找到POST请求。

HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复响应头部编写的元数据非常有用,而无需传输整个内容。

DELETE方法用来删除指定的资源,它会删除URL给出的目标资源的所有当前内容。

CONNECT方法用来建立到给定URL标识的服务器隧道,它通过TCP/IP隧道更改请求连接,通常使用解码的HTTP代理来进行SSL编码的通信。

OPTIONS方法用来描述目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。

TRACE方法用于沿着目标资源的路径执行消息环回测试,它回应收到的请求,以便客户可以看到中间服务器进行了哪些进度或增量。

7、当输入www.meituan.com之后发生的过程。

在浏览器地址栏输入URL,浏览器先查看浏览器缓存--系统缓存--路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容,若没有,则在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址,浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手,握手成功后,浏览器向服务器发送HTTP请求,请求数据包,服务器处理收到的请求,将数据返回给浏览器,浏览器收到HTTP响应,读取页面内容,浏览器渲染解析HTML源码,显示。

8、写过多线程吗?

9、了解c++异常机制吗?***

异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。

异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。

  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。

  • try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

10、写一个测试用例,测试一个水杯,你会测试哪些方面?(说是考验一下发散思维)

(1)、功能测试:能否装水,除了装水能否装其他液体,能装多少ML的水,杯子是否有刻度,杯子能否泡茶、泡咖啡,杯子能否放进冰箱,杯子的材质时候、什么。

(2)、界面测试:外观好不好看、什么颜色、什么形状、杯子重量、杯子是否有异味,杯子的图案是否合理。

(3)、性能测试:能否装100度开水,能否装0度冰水,装满水后放几天是否会漏水,杯子内壁上涂料是否容易脱落。

(4)、安全性测试:制作杯子材料是否有毒,是否有缺口,

(5)、可用性测试:杯子是否容易烫手、是否好端、杯子里的水是否容易喝到。杯子是否有防滑措施。

11、按着简历问的项目,聊了会天,给了些求职意见,只会c语言并且掌握的好的话,可以投一点资讯、头条的视频相关岗位。

3.25 没想到有二面

1、实现一个函数,入参是一个文本文件的路径。

文件内容有3列,空格分隔。

第一列:姓名

第二列:科目

第三列:成绩

姓名和科目可能会有重复,即同一个同学的同一个科目可能有多个成绩。

姓名和科目是乱序的。

形如:

张三 语文 100

李四 数学 90

王二 手工 80.5

张三 数学 89

张三 语文88

要求:

(1)、 处理该文件,打印每人每科目的最高分和平均分;

(2)、为该函数功能设计测试用例

#include<bits/stdc++.h>
using namespace std;
map<string, map<string, int> > sum_score, max_score, cnt;
vector<string> name, sub;
vector<int> score;
int main() {
 string a,b; int c;
 while(cin>>a>>b>>c) {
  name.push_back(a), sub.push_back(b), score.push_back(c);
  sum_score[a][b] += c;
  max_score[a][b] = max(max_score[a][b], c);
  cnt[a][b]++;
 }
 for(int i = 0;i<name.size();i++) {
  if(sum_score[name[i]][sub[i]]) {
   cout<<name[i]<<' '<<sub[i]<<' '<<max_score[name[i]][sub[i]]<<' '<<1.0*sum_score[name[i]][sub[i]]/cnt[name[i]][sub[i]]<<endl;
   sum_score[name[i]][sub[i]] = 0;
  }
 }
 return 0;
}

2、照着简历问了问,然后还有关于测试的理解还有一些测试的基本理论。

两次面试官都是小姐姐,超级温柔!!面试体验极好。感谢美团给的面试机会,明显我己经凉凉

#美团##测试开发工程师##面经##校招#
全部评论
&美团收到感谢信
点赞 回复 分享
发布于 2020-04-05 09:20
&楼主真的有感谢信。
点赞 回复 分享
发布于 2020-04-05 09:22
&感谢信
点赞 回复 分享
发布于 2020-04-05 09:32
&**,我感觉你这答得挺好的啊
点赞 回复 分享
发布于 2020-04-05 13:26

相关推荐

2 44 评论
分享
牛客网
牛客企业服务