美团客户端秋招面经

和暑期实习一样的岗位。

美团客户端实习面经

笔试 9.21

和暑期实习一样,两个小时。30道选择题,共60分;2道编程题,共40分。

前端岗位和客户端岗位考的是同一场,选择题考了挺多JavaScript,还有一些CSS

选择题

  • JS的Promise,then的执行顺序,事件循环相关
  • CSS属性,计算元素宽度
  • 死锁的必要条件
  • 面向对象特性
  • TCP传输相关
  • const let var
  • 创建型设计模式
  • 单例
  • 编译原理相关,文法推导
  • 数据结构相关,完全二叉树的节点个数范围,堆最多和最少的节点数

编程题

第一题比较简单,AC,题目大致是:

每次在数组中的任意下标那一格涂色,若某个范围内涂色数量大于未涂色数量,则下一次可以把该范围全部涂色。问:给出数组的长度,至少要多少次才能全部涂色?

最快的情况当然是迅速按范围涂色,由于是要大于才能把范围全部涂色,因此前三次涂色都是每次涂一格。第四次涂色,最多能涂小于3的最大值即2个,第五次能涂小于5的最大值即4个,数列就是:1,2,3,5,9,17……。从2开始,n + 1 = 2 * n - 1

第二题:

编程题第二题

测试数据

做的时候已经有思路了,但是时间来不及细细斟酌代码了。

一个长度为m的数组,每个格子中是一个链表,所有标签相同的物品都放在同一格中。这里需要遍历一次物品标签。

一个长度为m的数组match用于保存该位置的标签应该贴在哪个物品上。记标签匹配为good,不匹配为bad。对于一个链表中标签相同的物品,计算最高美观值的步骤:先把所有bad的美观值累加,要得出不同标签匹配的情况的美观值,只要把bad累加 - 自己的bad值 + 自己的good值,再用打擂台的方法得到美观值最高的贴法,对应贴的序号填入数组match。

知道每个出现的标签应该贴在哪,剩下就简单了。遍历物品,只要判断match中贴的不是自己,如果是,在合计中加上good值,不是就加上bad值。

一面 9.27 核心本地商业-美团平台

一小时左右。

  • 自我介绍?学习过哪些编程语言?通过什么方式?打算从事哪些技术栈?
  • 批量下载用Android怎么实现?线程池有了解吗?
  • 简单介绍MQTT
  • MQTT和HTTP底层有什么区别?如何用Android写一个推送?
  • 如何解决Flutter组件多层嵌套的问题?
  • 如何防止XSS攻击?
  • 数据库如何存储密码?MD5如何校验密码?哈希算法如何保证密码不被知晓?彩虹表破解?
  • JSON数据的value可以有哪些数据类型?
  • 链表和数组的区别?
  • 面向对象三大特性,分别讲一下
  • 静态变量和非静态变量的区别?静态变量什么时候分配内存的?
  • 什么是内存泄漏?如何排查?例举Android中常见的内存泄漏?
  • 发送HTTP请求时要填哪些参数?请求头、请求方法、响应字段
  • HTTP、TCP分别是哪一层的协议
  • HTTPS为什么安全?SSL的过程
  • 客户端如何判断服务端的证书是合法的?客户端如何知道证书被中间人篡改了?
  • TCP三次握手过程,为什么要三次?
  • 进程和线程的区别
  • 两个线程如何通信?Android子线程与主线程的通信,子线程如何通知主线程刷新UI
  • 进程间如何通信?用代码如何实现?
  • 编程题:合并两个有序链表
  • 编程题:代码实现死锁
  • 同步和异步的区别

问的还算简单,结尾直接约了二面在当天。不过二面面试官没空,推到第三天了。激动

二面 9.29 核心本地商业-美团平台

40分钟左右。

  • 有什么想补充的?打算做哪方面技术栈?
  • Flutter的优点
  • 结合底层机制、编译原理、程序运行,Flutter是如何从Dart源码到应用程序并运行的?
  • 结合Flutter和前端在布局渲染方面的共同点,界面是如何渲染显示的?canvas相关
  • 结合编译原理,非页面的代码,业务逻辑代码是怎么运行的?如发一个网络请求。源码如何在设备上运行起来?Dart语言的编译流程?
  • Java的编译流程?JVM起到什么作用?
  • 为了让程序运行,JVM需要做什么事?
  • 用C语言和Java的区别?
  • 面向过程和面向对象各自的特点
  • 学习了哪些专业课程?在实际开发中用到了哪些?
  • 在业务开发中不同的网络协议如何做选择?
  • 数据结构与算法在实际开发中的应用?有哪些常用的数据结构
  • 数据超出数组长度如何处理?如何扩容?

感觉面试官很想问我dart和Flutter底层的运行原理,可惜确实不了解。

9.30已挂。差点以为好运来了,呜呜呜

一面 10.11 软硬件服务-骑行事业部

被捞了。一小时左右。

  • 自我介绍,介绍项目、实习
  • 进程和线程的区别
  • Java中的几种锁
  • 进程通信的几种方式
  • 对象锁和类锁的区别
  • OSI七层网络模型,传输层的协议
  • TCP和UDP的区别
  • HTTP基于哪个传输层协议,有哪些版本,3.0基于TCP还是UDP,各版本的区别
  • HTTPS加密过程,为什么要混合加密?
  • 四种引用方式与区别
  • 软弱虚引用的使用场景
  • 浅拷贝和深拷贝
  • HashMap原理,链表和红黑树转换的阈值,ConcurrentHashMap如何保证线程安全
  • Java8前后的ConcurrentHashMap实现方式的区别
  • volatile关键字的作用
  • Java中类的加载机制
  • 类加载器有哪几种
  • Android中的handler消息机制
  • 四大组件的作用
  • Activity、Service、BroadcastReceiver什么情况下会出现ANR
  • Activity的启动模式
  • ListView和RecyclerView的区别
  • RecyclerView四级缓存机制
  • 如何计算和屏幕一样大小的图片的占用内存
  • Android的事件分发机制
  • 编程题:分层输出二叉树的层序遍历

开头问了一下实习,可能是觉得没什么好聊的,转而问八股了。之前面美团基本只问了八股没怎么问Android,这次一问,好多都没答上来。

最后手撕环节,层序遍历用队列一气呵成写完,面试官要求分层输出,和刚刚的小黑盒一面的代码题一模一样,但是没有去看。看的出来面试官很想让我过,一直在提示我,但是始终没有get到点,好在最后用自己的方法也是做出来了,被自己蠢哭。

反问的时候问了面试官自己有哪些薄弱点,面试官说我Android相关的需要再更深入了解,手撕代码有待加强。