和暑期实习一样的岗位。
笔试 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相关的需要再更深入了解,手撕代码有待加强。