自学内容网 自学内容网

美团2024年秋招第一场笔试【前端&移动端】

美团2024年秋招第一场笔试【前端&移动端】 2024/12/12

1.在一个长度为28的数组中删除第5个元素时(元素序号:1~28),需要向前移动(23)个元素。

2.如下图一个树型结构,其结点E在树的中序遍历中的位次为(5)

3.存在中缀表达式:(2*(3-4))*5,通过下面的代码将其转换为后缀表达式,则当扫描到字符4时,栈ops中所存元素为。  (*(-     

解析

4.计数排序算法是一种简单的排序算法,这种排序算法对一个待排序的表进行排序,并将结果存放在另一个表中,表中所有关键字各不相同,计数排序算法针对表中每个元素,通过扫描待排序的表一趟,统计出表中有多少个元素的关键字比该元素的关键字小,从而进行排序。在关键字序列{8,13,27,14,15,21}中,若采用计数排序,则得到的计数依次为(0,1,5,2,3,4)。

5.对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是? A

A.90,17,83,24,85,71

B.90,18,89,32,86,33

C.19,87,75,27,34,36

D.10,23,69,66,31,32

6.在TCP/IP四层模型中,TCP和UDP是传输层中两个非常重要的协议,下列选项中,关于这两种协议的区别描述错误的是(C)

A.TCP提供的是面向连接的、可靠的端到端通信机制

B.为了确保数据的可靠传输,TCP采用了确认和重发机制

C.允许丢包的前提下,TCP相比UDP传输效率更高

D.UDP相对数据传送可靠性要求没有TCP那么严格

7.有A、B和C三个作业同时到达,执行时间分别为4,3,6,且在系统中以单道方式运行,则可以获得最短的平均周转时间的执行顺序为(B,A,C)。

解析

由于三个作业同时到达,故在以单道方式运行的系统中,想要获得最短的平均周转时间,用SJF(短作业优先)调度算法的效果比较好

8.下列哪一个进程-资源图会产生死锁()

上图先分配资源,得到

R1=R2=R3=0,死锁

先分配资源,得到

R1=0,R2=1,R3=0

然后去掉所有从方框出发的箭头,图化简为

P1->R2, P2->R1, P3->R3

然后先满足P1->R2,P1结束,资源变成

R1=1, R2=1, R3=0

再满足P2->R1,P2结束,资源变成

R1=1, R2=2, R3=1

再满足P3->R3,P3结束,资源变成

R1=2, R2=3, R3=1

9.下列关于TCP和UDP说法错误的是(A)

A.UDP是面向字节流的协议

B.TCP的头部消息较UDP来说更全面

C.TCP是端对端的不支持广播、多播

D.TCP可以用在远程登陆方面,UDP可以用在语音通话方面

10.VLAN(Virtual Local Area Network,虚拟局域网),能够限制广播域,提高网络安全性。VLAN ID有效范围是1-4094,则下列选项中,哪个VLAN ID范围属于为FDDI和令牌环网使用的VLAN ID(1002-1005)

解析

VLAN ID:VLAN TAG包的VLAN ID号,有效范围是1-4094,0和4095都为协议保留值,VLAN ID 0 表示不属于任何VLAN,但携带802.1Q的优先级标签,所以一般被称为Priority-only frame,其一般作为系统使用,用户不可使用和删除。1为系统默认VLAN,即Native VLAN,2-1001是普通的VLAN,1006-1024保留仅系统使用,用户不能查看和使用,1002-1005是支持fddi和令牌环的VLAN,1025-4095是扩展的VLAN

11.某主机的 IP 地址为 212.212.77.55,子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是?212.212.79.255

解析

由子网掩码可知前 22 位为子网号、后 10 位为主机号。IP 地址的第 3 个字节为 010011 01 ,后面2位是主机号,将主机号全置为 1,可得广播地址为 212.212.79.255

12.下面关于 InnoDB 存储引擎和 MyISAM 存储引擎正确的是(A)

A.InnoDB 支持行级锁和表级锁,而 MyISAM 支持表级锁

B.InnoDB 支持全文索引,而 MyISAM 不支持全文索引

C.InnoDB 不支持事务,而 MyISAM 支持事务

D.InnoDB 不支持外键,而 MyISAM 支持外键

13.在MySQL中可以用来执行预处理语句的是(EXECUTE)

解析

PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。

14.以下哪种设计模式可以动态地给对象增加扩展功能,为扩展功能提供了子类化的灵活替代方案(装饰器模式)

15.下面代码使用了哪种设计模式(抽象工厂模式)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

interface AbstractProductA {

    void operationA();

}

class ConcreteProductA1 implements AbstractProductA {

    public void operationA() {

        System.out.println("ConcreteProductA1 operationA");

    }

}

class ConcreteProductA2 implements AbstractProductA {

    public void operationA() {

        System.out.println("ConcreteProductA2 operationA");

    }

}

interface AbstractProductB {

    void operationB();

}

class ConcreteProductB1 implements AbstractProductB {

    public void operationB() {

        System.out.println("ConcreteProductB1 operationB");

    }

}

class ConcreteProductB2 implements AbstractProductB {

    public void operationB() {

        System.out.println("ConcreteProductB2 operationB");

    }

}

interface AbstractFact {

    AbstractProductA createProductA();

    AbstractProductB createProductB();

}

class ConcreteFact1 implements AbstractFact {

    public AbstractProductA createProductA() {

        return new ConcreteProductA1();

    }

    public AbstractProductB createProductB() {

        return new ConcreteProductB1();

    }

}

class ConcreteFact2 implements AbstractFact {

    public AbstractProductA createProductA() {

        return new ConcreteProductA2();

    }

    public AbstractProductB createProductB() {

        return new ConcreteProductB2();

    }

}

16.模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。下列说法不正确的是(C)

A.模板方法模式能提高系统的复用性,符合开闭原则

B.servlet中的Httprequest的doGet和doPost方法使用了模板方法模式

C.模板方法模式不会增加类的数目

D.模板方法模式的一个缺点是,如果父类添加新的抽象方法,所有子类都要改一遍

解析

模板方法模式的优缺点是:优点:1、提高复用性,2、提高扩展性,3、符合开闭原则

缺点:1、类数目增加,2、增加了系统实现的复杂度,3、继承关系自身的缺点,如果父类添加新的抽象方法,所有子类都要改一遍。

17.中间代码的主要优点是(提供了一种平台无关的中间表示)

18.在寄存器分配中常采用图染色法,以下不是其目的是(优化程序的逻辑结构)

19.假设有一个简单的正则表达式 [a-zA-Z_][a-zA-Z0-9_]* 用于匹配标识符。给定字符串 "abc123", 词法分析器会识别为多少个标识符(1)

解析

识别结果为a bc123

20.<input>标签的(D )属性规定必需在提交表单之前填写输入字段

A.multiple

B.pattern

C.placeholder

D.required

解析

A选项, multiple 属性适用于以下类型的 <input> 标签:email 和 file,multiple 属性规定 <input> 元素中可选择多个值。

B选项,pattern 属性描述了一个正则表达式用于验证 <input> 元素的值。

C选项,placeholder 属性提供一种提示,在用户输入值前会显示在输入域上。

D选项,required 属性规定必须在提交之前填写输入域。D选项正确

21.在background: #eee url(1.png) no-repeat 0 0 / contain;中,属性值“0 0”表示的属性是(C)

A.background-clip

B.background-size

C.background-position

D.background-origin

解析

在background组合属性中,能使用“/”的属性只有background-position和background-size,且background-position在前,background-size在后,也就是,属性值“0 0”表示的属性为background-position,属性值“contain“表示的属性是background-size

22.执行以下代码,为了清除浮动,下列做法可行且属于 BFC 应用的是(C)

1

2

3

4

5

6

7

8

9

10

11

12

13

<style>

    .box1 {

        width: 200px;

    }

    .box2 {

        float: left;

        width: 100px;

        height: 100px;

    }

</style>

<div class="box1">

    <div class="box2"></div>

</div>

A.在 box2 盒子后面添加加代码:<div style="clear: both;"></div>

B.在 box1 盒子后面添加加代码:<div style="clear: both;"></div>

C.在 box1 盒子中设置属性:overflow: hidden

D.在 box2 盒子中设置属性:overflow: hidden

解析

本题考察HTML元素和css属性。A选项可以清除浮动,但属于额外标签法,并不涉及BFC,不符合题意;C选项,在box1盒子设置overflow: hidden可以触发BFC,具备BFC属性的元素,可以包裹住内部的浮动子元素,从而达到清除浮动元素的作用,符合题意

23.下列选项不属于<meta>标签的http-equiv的取值的是(D)

A.content-type

B.default-style

C.refresh

D.keywords

解析

A选项,content-type规定文档的字符编码

B选项,default-style规定要使用的预定义的样式表

C选项,refresh定义文档自动刷新的时间间隔

D选项,http-equiv没有keywords这个取值。

24.下列代码的输出结果是?a b d c

1

2

3

4

5

6

console.info('a');

console.info('b');

setTimeout(() => {

    console.info('c');

}, 0);

console.info('d');

解析

JS 是单线程执行的,为了防止某段代码执行过久,产生阻塞,引入了异步。既然有异步就肯定有同步,在 JS 中同步任务进入主线程后立即执行,当主线程的任务执行完毕后,即主线程处于空闲状态时,才会读取事件队列中的任务,代码中 setTimeout 属于异步任务,其它属于同步任务立即执行

25.下列方式无法实现跨域通信的是?D

A.JSONP

B.WebSocket

C.CORS

D.Ajax

解析

A、B、C 均可实现跨域通信,除此之外还有 Hash 和 H5 新增的 postMessage() 可以实现跨域通信,Ajax 无法实现跨域通信。

26.请问以下 JS 代码最终输出的结果是(true、true)

1

2

3

4

5

function func1() {};

function func2() {};

func1.prototype = func2.prototype = {};

const son = new func1();

console.log(son instanceof func1, son instanceof func2);

解析

instanceof操作符用于检查一个对象是否属于某个特定的class,实例对象son由函数func1实例化得出,son instanceof func1自然是返回true,选项CD错误。

尽管实例对象son并非由函数func2实例化得到的,但是instanceof并不关心构造实例的函数,而是关心与原型链匹配的prototype,且son.__proto__ === func2.prototype,因此son instanceof func2将返回true

27.下列程序的输出结果是? 2 undefined 2

1

2

3

4

5

6

7

8

let func1 = (a, b) => a + b;

console.info(func1(1, 1));

let func2 = (a, b) => {a + b};

console.info(func2(1, 1));

let func3 = (a, b) => {return a + b};

console.info(func3(1, 1));

解析

考察 ES6 中的箭头函数,若箭头函数代码块部分没有大括号,默认返回表达式的结果,所以第一个输出应该为 2。若有大括号但是没有 return 语句,则没有任何返回值,所以第二个输出应为 undefined。若箭头函数代码块有大括号且有 return 语句,则返回结果,所以第三个输出为 2

28.'\\\\\\'.replace(new RegExp('\\\\\\\\', 'gi'), '/') 的执行结果是?  /\

解析

由于转义字符的原因,\\表示为一个\,RegExp('\\\\\\\\', 'gi')为一个正则匹配,含义如下

  1. \\\\\\\\

    • \\\\\\\\ 结果是在模式中是四个反斜杠,这将匹配文本中的两个反斜杠。
    • \\\\ 代表两个反斜杠。
    • \\ 在字符串中代表一个反斜杠。
  2. 标志'gi'

    • g - 全局匹配;找到所有匹配项,而不是在第一次匹配后停止。
    • i - 不区分大小写的匹配。

这个正则表达式的功能:

  • 它在文本中搜索任何两个反斜杠 (\\) 的出现。
  • 它会全局搜索整个字符串,忽略大小写(虽然反斜杠本身没有大小写之分)。

29.请问以下 JS 代码最终输出的结果是({go: ƒ}、window、window)

1

2

3

4

5

6

7

8

9

let method;

let obj = {

  go() {

    console.log(this);

  }

};

(obj.go)();

(method = obj.go)();

(obj.go || obj.stop)();

解析

(obj.go)()中的括号没有改变执行的顺序,点符号总是先执行,因此它可以认为是常规的调用对象方法,this指向对象obj下的go函数,选项D错误。

(method = obj.go)()其实可以拆成两步,第一步是对变量method赋值,第二步是在全局环境下单独调用method方法,因此this的指向是window,选项A错误。

同理,(obj.go || obj.stop)()因为表达式存在||,导致属性访问器转换为一个不包含允许设置this信息的普通值,也就是丢失了指向go函数的this值,因此this的指向也是window

30.编程题1-小美的密码

          小美准备登录美团,需要输入密码,小美忘记了密码,只记得密码可能是 𝑛n 个字符串中的一个。小美会按照密码的长度从小到大依次尝试每个字符串,对于相同长度的字符串,小美随机尝试,并且相同的密码只会尝试一次。小美想知道,她最少需要尝试多少次才能登录成功,最多需要尝试多少次才能登录成功。
          小美不会重新尝试已经尝试过的字符串。成功登录后会立即停止尝试。

输入描述

第一行输入一个整数 n (1≤n≤1000)代表密码字符串的个数。
第二行输入一个只由小写字母组成的字符串 (1≤∣s∣≤1000) 代表正确的密码。
接下来 n 行,每行输入一个长度不超过 1000 的字符串,代表小美记得的密码。

思路

不难,按照题意模拟即可

#include <bits/stdc++.h>
using namespace std;

int n,ans;
string s,temp;
int cnt[1005]; //记录每个长度的不相同字符串个数
map<string,int> mp;

int main() {
    cin>>n>>s;
    for(int i=0;i<n;i++){
        cin>>temp;
        //检查长度
        if(mp[temp]) continue;
        mp[temp]++;
        cnt[temp.size()]++;
    }
    // for(int i=1;i<=s.size();i++)
    //     cout<<cnt[i]<<" ";
    for(int i=1;i<s.size();i++){
        ans+=cnt[i];
    }
    ans++;
    cout<<ans<<" "<<ans+cnt[s.size()]-1;
    return 0;  
}

31.编程题2-小美的数组删除

小美有一个长度为 n 的数组 a1,a2,…,an ,他可以对数组进行如下操作:
● 删除第一个元素 a1​,同时数组的长度减一,花费为 x。

● 删除整个数组,花费为 k×MEX⁡(a) (其中 MEX⁡(a)表示 a 中未出现过的最小非负整数。例如 [0,1,2,4]的 MEX为3 )。

小美想知道将 a 数组全部清空的最小代价是多少,请你帮帮他吧。

输入描述

每个测试文件均包含多组测试数据。第一行输入一个整数 T (1≤T≤1000) 代表数据组数,每组测试数据描述如下:
第一行输入三个正整数 n,k,x (1≤n≤2×10^5, 1≤k,x≤10^9)代表数组中的元素数量、删除整个数组的花费系数、删除单个元素的花费。

第二行输入 n 个整数 a1,a2,…,an (0≤ai≤n),表示数组元素。

除此之外,保证所有的 n 之和不超过 2×10^5。

思路

根据数据规模,遍历一次删除头部的花费情况,需要注意下更新MEX的方法。

#include <bits/stdc++.h>
using namespace std;

const int N=2e5+10;
int T,n,k,x,a[N];


int main() {
    cin>>T;
    while(T--){
        cin>>n>>k>>x;
        map<int,int> mp; //存储当前数组中每个数字对应的数量
        long long ans; //存储最优的花费
        int maxv; //当前数组中最小的未出现数
        for(int i=0;i<n;i++){
            cin>>a[i];
            mp[a[i]]++;
        }
        //初始化
        for(int i=0;i<=n;i++){ //这里最小出现的元素肯定是<=n的
            //找到没单个删除前当前最小未出现过的元素
            if(!mp[i]) {
                maxv=i;
                break;
            } 
        }
        ans=maxv*k;
        long long temp=0;  
        //开始遍历每种情况
        for(int i=0;i<n;i++){
            //删除掉后的情况
            temp=(i+1)*x;
            mp[a[i]]--;
            //再次寻找maxv
            if(!mp[a[i]]){
                maxv=min(maxv,a[i]);
            }
            ans=min(ans,temp+maxv*k);
        }
        cout<<ans<<endl;
    }
    return 0;
}


原文地址:https://blog.csdn.net/Cchengzu/article/details/144437267

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!