美团暑期实习
Posted 金州饿霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了美团暑期实习相关的知识,希望对你有一定的参考价值。
一、笔试篇(Python3实现)
1、前言-python如何实现多行输入
(1)数字输入
n = int(input()) #输入一个整数
a, b = map(int, input().split()) #输入两个整数
c = list(map(int, input().split())) #输入一个列表
(2)字符输入
s = input().split()#输入一串字符串
s = input().split(' ')#将输入的字符串以空格的形式分割开来,并返回一个list类型的
import sys #实现多行的字符串输入
for line in sys.stdin:
s = line.split()
2、美团3.25暑期笔试
(1)题目描述:
小美是一个火车迷。最近她在观察家附近火车站的火车驶入和驶出情况,发现火车驶入和驶出的顺序并不一致。经过小美调查发现,原来这个火车站里面有一个类似于栈的结构,如下图所示:例如可能1号火车驶入了火车站中的休息区s,在驶出之前2号火车驶入了。那么在这种情况下,1号火车需要等待2号火车倒车出去后才能出去(显然被后面驶入的2号火车挡住了,这个休息区s只有一个出入口)。出于好奇,小美统计了近些天的火车驶入驶出情况,开始统计和结束统计时休息区s中均是空的。由于中途疏忽,小美觉得自己好像弄错了几个驶入驶出顺序,想请你帮她验证一下。值得注意的是,小美虽然可能弄错了顺序,但对火车的记录是不重不漏的。形式化地来形容休息区s,我们视其为一个容量无限大的空间,假设两列火车 i 和 j 同时处于休息区s中,驶入时刻Tin满足Tin(i)<Tin(j),则驶出时间Tout必定满足Tout(i)>Tout(j),即,先进后出。
输入描述
第一行一个整数T表示数据组数。
对每组测试而言:
第一行一个整数n,表示观察到的火车数量。
第二行n个整数x1,x2,...,xn,表示小美记录的火车驶入休息区s的顺序。
第三行n个整数y1,y2,...,yn,表示小美记录的火车驶出休息区s的顺序。
1≤T≤10,1≤n≤50000,1≤xi,yi≤n, 且xn 、yn 均为1,2,3,...,n的一个排列,即1~n这n个数在其中不重不漏恰好出现一次。
输出描述
对每组数据输出一行:如果小美记录的驶入和驶出顺序无法被满足则输出No,否则输出Yes。
样例输入
3
3
1 2 3
1 2 3
3
1 2 3
3 2 1
3
1 2 3
3 1 2
样例输出
Yes
Yes
No
实现代码:
#美团笔试题1:栈的进出问题
import sys
data_num = int(input())
res = []
for i in range(data_num):
data_len = int(input())
pushV = input().split(' ')
popV = input().split(' ')
if len(pushV) == 0 or len(popV) == 0:
print(False)
res = []
j = 0
for k in pushV:
res.append(k)
while (res and res[-1] == popV[j]):
res.pop()
j += 1
print(j == len(popV))
(2)题目描述:
小美因乐于助人的突出表现获得了老师的嘉奖。老师允许小美从一堆n个编号分别为1,2,...,n的糖果中选择任意多个糖果作为奖励(每种编号的糖果各一个),但为了防止小美一次吃太多糖果有害身体健康,老师设定了一个限制:如果选择了编号为 i 的糖果,那么就不能选择编号为 i-1, i-2, i+1, i+2的四个糖果了。在小美看来,每个糖果都有一个对应的美味值,小美想让她选出的糖果的美味值之和最大!作为小美的好朋友,请你帮帮她!
输入描述
第一行一个整数n,表示糖果数量。
第二行n个整数a1,a2,...,an,其中ai表示编号为 i 的糖果的美味值。
1≤n≤50000 , 1≤ai≤10000
输出描述
输出一行一个数,表示小美能获得的糖果美味值之和最大值。
样例输入
7
3 1 2 7 10 2 4
样例输出
14
提示
最优的方案是选择编号为1,4,7的糖果。
如果选了编号为5的美味值为10的那颗糖果,最多能获得的美味值仅为13,不如上述方案优。
思路:dp[i]=max(dp[i - 3] + nums[i], dp[i - 1], dp[i - 2]);这里注意dp[0]、dp[1]、dp[2]初始化的分别为s[0],s[1],s[2],因为在选择前三个糖果的时候,是没法往前选择的。
实现代码:
#美团笔试题2,每次只能取它前三个或者后三个数
n = int(input())
s = input().split(' ')
for i in range(len(s)):
s[i] = int(s[i])
dp = [1]*(n)
dp[0] = s[0]
dp[1] = s[1]
dp[2] = s[2]
for i in range(3,n):
dp[i] = max(dp[i-3] + s[i], dp[i-2], dp[i-1])
print(dp[n-1])
(3)题目描述:
小美明天要去春游了。她非常喜欢吃巧克力,希望能够带尽可能多的巧克力在春游的路上吃。她现在有n个巧克力,很巧的是她所有的巧克力都是厚度一样的正方形的巧克力板,这n个巧克力板的边长分别为a1,a2,...,an。因为都是厚度一致的正方形巧克力板,我们认为第 i 个巧克力的重量为。小美现在准备挑选一个合适大小的包来装尽可能多的巧克力板,她十分需要你的帮助来在明天之前准备完成,请你帮帮她。
输入描述
第一行两个整数n和m,表示小美的巧克力数量和小美的询问数量。
第二行n个整数a1,a2,...,an,表示n块正方形巧克力板的边长。注意你不能将巧克力板进行拆分。
第三行m个整数q1,q2,...,qm,第 i 个整数qi表示询问:如果小美选择一个能装qi重量的包,最多能装多少块巧克力板?(不考虑体积影响,我们认为只要质量满足要求,巧克力板总能塞进包里)
1≤n,m≤50000,1≤ai≤104,1≤qi≤1018
输出描述
输出一行m个整数,分别表示每次询问的答案。
样例输入
5 5
1 2 2 4 5
1 3 7 9 15
样例输出
1 1 2 3 3
提示
包最大重量为1,能装12
包最大重量为3,也最多只能装12重量(如果添加22就超载了)
包最大重量为7,能装12+22
包最大重量为9,能装 12+22+22(因为有两块巧克力板边长都为2)
包最大重量为15,也最多能装 12+22+22(如果添加42就超载了)
思路:我用dp做的
实现代码:
????
(4)题目描述:
小美因为自己差劲的表达能力而苦恼,小美想制作一个解释器,这样她可以在无法表达的情况下让解释器帮她解释。好巧不巧小美翻开了编译原理的书,找到了解释器的制作方式,她决定先制作一个书上习题中描述的小小解释器试试。
小美需要读入一行字符串,其格式为"key1=val1; key2=val2; ...; keyn-1=valn-1; keyn=valn;"(不包含引号)这样的n对key,value对,其中keyi和vali为第 i 对key,value对,且均为仅包含大小写英文字母、数字与斜杠的非空字符串。例如对于字符串"SHELL=/bin/bash;HOME=/home/xiaomei;LOGNAME=xiaomei;",那么其中包含三对key,value对,以(key,value)形式展示,分别为(SHELL,/bin/bash)、(HOME,/home/xiaomei)、(LOGNAME,xiaomei)。
接下来,小美的解释器需要接受q次询问,每次询问给出一个仅包含大小写英文字母、数字与斜杠的非空字符串,如果存在某对key,value对的key值与之相同,那么输出对应的value;如果存在多对key,value对的key值与之相同,那么输出其中编号最大的,也即最后那一对的value值;如果一对也不存在,那么输出EMPTY。
输入描述
第一行一个字符串S,满足题中所述格式。
接下来一个整数q,表示有q个询问。
接下来q行,每行一个仅包含大小写英文字母、数字与斜杠的非空字符串,分别为S1,S2,...,Sq,依次表示q次询问。
令|S|表示字符串S的长度。
S中至少包含一对key,value对。
输出描述
输出q行,每行一个字符串表示答案。
样例输入
LOGNAME=default;SHELL=/bin/bash;HOME=/home/xiaomei;LOGNAME=xiaomei;
4
SHELL
HOME
LOGNAME
logname
样例输出
/bin/bash
/home/xiaomei
xiaomei
EMPTY
提示:第3个询问有两对满足,分别是第1对和第4对,选择编号大的(也就是后者),为xiaomei而不是default。第4个询问不存在满足的,输出EMPTY。
思路:字符串切割+哈希表(字典序)
实现代码:
#美团笔试题4
s = 'LOGNAME=default;SHELL=/bin/bash;HOME=/home/xiaomei;LOGNAME=xiaomei;'
s = input().split(';')
dic =
for item in s:
if(item):
k = item.split('=')
dic[k[0]] = k[1]
q = int(input())
for i in range(q):
key = input()
if(key not in dic.keys()):
print('EMPTY')
else:
print(dic[key])
# print(dic.keys(),dic.values())分别获取字典序的keys值集合和values集合
(5)
题目描述:
时间限制: 3000MS
内存限制: 589824KB
题目描述:
小美特别爱吃糖果。小美家楼下正好有一个糖果专卖店,每天供应不同种类的糖果。小美预先拿到了糖果专卖店接下来n天的进货计划表,并针对每天的糖果种类标注好了对小美而言的美味值。小美当然想每天都能去买糖果吃,不过由于零花钱限制(小美零花钱并不多!)以及健康考虑,小美决定原则上如果今天吃了,那么明天就不能吃。但小美认为凡事都有例外,所以她给了自己k次机会,在昨天已经吃了糖果的情况下,今天仍然连续吃糖果!简单来说,小美每天只能吃一次糖果,原则上如果昨天吃了糖果那么今天就不能吃,但有最多k次机会打破这一原则。小美不想浪费每次吃糖果的机会,所以请你帮帮她规划一下她的吃糖果计划,使得她能吃到的糖果美味值最大。
输入描述
第一行两个整数n和k,表示拿到的进货计划表的天数和最多打破原则的次数。
第二行n个整数a1,a2,...,an,其中ai表示接下来第 i 天糖果专卖店的糖果的美味值。
1≤n≤2000,1≤k≤1000,1≤ai≤10000
输出描述
输出一行一个数,表示小美能吃到的糖果美味值之和最大值。
样例输入
7 1
1 2 3 4 5 6 7
样例输出
19
提示
最优的方案是选择选择第2、4、6天吃糖果,并在第7天打破一次原则也吃糖果(因为第6天已经吃过,原则上不能继续吃,需要使用一次打破原则的机会)。
规则
请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果
点击“调试”亦可保存代码
编程题可以使用本地编译器,此页面不记录跳出次数
思路:dp[i][j]:前i天用了j次机会的最大美味值,j等于0:dp[i][j]=dp[i-1][j];j大于0:dp[i][j]=max(dp[i-1][j-1],max(dp[i-k][j])),其中k取值2-i;
实现代码:
???
二、面试篇
尘埃落定 Android暑期实习面试大复盘,字节美团网易快手携程等
之前陆陆续续写了好多面经,基本就是一个流程差不多了就发布出来,写的都是面视流程、问题回顾和简单的体会这三方面,但是私下还是会做深入整理和自我的体会总结。今天是5.11号,距离我的第一次面试(2.19)已经过去了两个多月,随着傍晚收到最后一个offer,我的春招实习之旅算是尘埃落定了。在此好好总结一下这两个多月的面视经历,做一个大复盘,希望给大家一个参考和帮助,也是我自己的自勉吧
个人情况
我是软件工程专业的学生,大二转专业的,保研无望后决心直冲就业,这次春招实习投递的是Android开发实习岗。从大一开始就想着做一些网页项目,于是报了班,接触到了Android开发。一开始从Java学起,后来尝试做一个完整的app才接触的Android,之后也系统学了安卓基本组件和设计思想,就慢慢从这条道一路走到黑。
春招回顾
2022.1.1 正式开始准备春招,借疫情隔离之际开始高强度整理面试内容,元宵过后开始投简历,一开始投的提前批和日常实习什么的,算是适应一下面视。等到2月底和3月,一直断断续续的投简历和笔试,也是从3月中旬开始,面视开始密集起来,平均一两天一场面视,一直持续到4月中旬。直到今天5.11,傍晚刚收到了网易云音乐的offer,代表着我春招征程的尘埃落定。在距离我第一次面视(2.19)过去了的两个多月里,有幸拿到几个offer:
- 杭州:网易云音乐,字节飞书企业应用
- 北京:快手流程效率中心,美团平台
- 上海:携程酒店
其他情况:
- 待约面视:顺丰 (一面,到时候肯定不面了)
- 主动结束:小米、阿里
- 等笔试结果:网易雷火、腾讯音乐
- 等捞:京东(笔试挂)、百度(二面挂)
- 等简历筛选:b站、小红书、腾讯
- 简历挂:深信服、商汤 、安鼎睿
最后决定去base杭州的字节飞书企业应用,因为个人还是比较心水杭州和飞书的(我是浙江人哈哈)
面经高频点汇总
之前的面经都是简单的回顾和体会,这次决定好好针对这两个多月的面视,挑选一些我在字节高频问题进行汇总,同时也将我复习整理的面试题分享出来,需要的直接文末领取。
字节飞书企业应用面试
一面:
1.final
2.类加载
3.双亲委派机制,为什么要使用
4.GC
5.leackcanary
6.hashmap
7.concurrenthashmap
8.事件分发
9.handler
算法:
1.LeetCode 61:旋转链表
2.合并两个有序链表
二面:
1.final修饰int类型的变量能不能改变?怎么改变?
2.反射可以改变这个int值吗?怎么改变?反射的原理?
3.try catch块;try抛出异常,catch中有return语句,finally会执行,finally为什么会执行?
4.接口和抽象类;
5.sleep和wait;
6.操作系统层面wait调用notify之后具体是怎么样的?
7.java有哪些锁?
8.sychronized怎么实现锁;
9.操作系统的进程间通信;
10.安卓进程间通信;
11.binder机制;
12.学习的过程中使用过aidl吗?
13.apk打包过程;
14.如何获取view的宽高;
15.ConstraintLayout;
16.设计一个类似glide的图片缓存框架:面试官进行了引导:设计一个数据结构,缓存策略等;
17.创建了两个ArrayList对象,l1.getclass()==l2.getclass(),判断结果;
18.手写单例模式的饿汉式和懒汉式;
算法:层序遍历
三面:
1.前两个面试官问的问题下去了解了吗
2.代码插桩;
3.leakcanary内存泄漏;
4.ANR的检测;
5.怎么判断是不是内存泄漏:一个程序不是内存泄漏,但是内存占用很大,怎么分析这个问题
6.一个app申请了内存对象,这些内存对象在内存中是什么关系?可以通过内存的引用链来分析吗?
7.有一份内存,通过哪些方法分析哪些类对象占比比较大?(比如有一颗引用树,用什么方法或者工具统计,哪些对象加起来最大?)
8.安卓四大组件;
9.进程间通信;
10.binder机制;
11.双亲委派机制;
12.插件化的方法;
12.热修复:已经发布到线上的类,我们要修改类的方法,可以从双亲委派机制来思考下怎么做?在AMS注册之前怎么加载.dex文件?
13.操作系统原理:有socket阻塞和非阻塞io,为什么有这两种socket io?
14.安卓怎么设计一个网络请求的框架?
15.jvm内存有多大?怎么做调优?
算法:
子数组范围的和;
重排链表;
寒冬之下,取暖共勉
今年确实很难,各种负面新闻来袭,一度感觉到互联网行业的坍塌,大家每天也是人心惶惶的,各种群里的朋友们都表现得十分焦虑。“勿以赢小而不麻”,已经足以说明这个情形下能够取得一定成果的不容易了。自己好像很幸运,但也不幸运,何去何从的疑问在当下已经扩散到各个领域岗位,我作为初入的半个“社会人”,也体会到了这背后愈发明显的风卷云涌。其实也像是围城,我也不知道自己拿到offer后,之后的路就是否好走?这都是没有定数的。但既然走到这一步,自己能有一点成果,也说明了自己是有能力的,走一步算一步,每一步都算数。其实感觉CSDN上认识的小伙伴们都很友好,互相鼓励,每个offer帖下面都有恭喜的声音。寒冬之下,自己有一份热,尽力发一份热吧。
以上是关于美团暑期实习的主要内容,如果未能解决你的问题,请参考以下文章
2019前端暑期实习生,美团3面,软技能,自我总结。( 已挂 )
尘埃落定 Android暑期实习面试大复盘,字节美团网易快手携程等