美团
笔试 4.27
题型:30题单选题,2题编程题
时间:2小时
单选题主要有计算机网络、操作系统、数据结构、数字找规律、三元一次方程应用题等。
记录单选题涉及到的知识点
- 有效的子网掩码
- SQL共享锁和排它锁,其他事务能否读写
- HTTP2 和 HTTP3 的区别
编程题AC第一题,第二题是一个九宫格魔法阵,周围的数值改变怎么怎么样的,没一点思路。
当时没记录,现在忘了。。
一面 5.16
- ✅️ C和C++的区别
- ❌️ 子结构体对父结构体函数的重写
- ✅️ 进程和线程的区别
- ✅️ 同步和异步的区别?为什么需要异步?多线程操作时可能出现什么问题?
- ❌️ OSI七层网络模型
- ✅️ HTTP和HTTPS的区别?HTTP全称是什么?HTTPS的S指什么?
- ✅️ TCP和UDP的区别
- ✅️ 为什么要三次握手
- ✅️ 服务器如何知道请求中的不同类型的数据格式?
- ❌️ 编程题:翻转链表
全都是考基础,没问项目没问实习。
开头自我介绍,然后问我熟悉什么语言,C++或Java会吗,一开始就是打算考编程语言。
C和C++的区别,答:一个是面向对象一个是面向过程,C++有输入输出流
然后出了个题:
1 | struct A { |
问输出是什么。又问给B的f()加上virtual,输出是什么。
最后一题考编程题,两非递减数组原地排序,LeetCode上刷过,心中窃喜,结果语言切到C++,判题器有点问题没给提交模板,判不了题直接编译错误,面试官也弄不明白,就给我换了一题翻转链表,结果没做出来,被自己的抽象操作蠢哭了…… T^T
最后面试官还指出了我的不足。在我做编程题的时候他看了我的Github和博客,说我项目是足够的,但是要注重基础,编程语言的基础和底层,计网、数据结构四大件的基础等。
还是第一次有面试官给我提建议,发觉不同面试官之间面试方式还是有挺大差距的,有的没怎么问编程语言,有的不怎么问实践。
饿了么
答的很烂……就没几个问题是答出来的 T^T
共四十多分钟。
- ✅️ 自我介绍
- ✅️ 详细讲一下实习期间做了哪些事情?实现的细节?
- ❌️ LazyColumn和Column有什么区别?为什么能提升性能?
- ❌️ 长列表的数据如果一次性加载会卡顿,如何处理?分页查询相关。如何刷新?前一页的数据如何处理?
- ❌️ Flutter三个树?嵌套的组件渲染绘制的步骤?
- ✅️ UDP和TCP的区别
- ❌️ 2M的数据流,通过TCP发送,要经过哪些步骤?
- ❌️ APP的启动过程
- ✅️ Activity的生命周期?两个Activity跳转其分别的生命周期函数调用顺序?哪些情况下不会进入onStop?
- ❌️ 说一下快排
- ✅️ 最大递增子串
- ✅️ 链表翻转
长列表性能问题应该是想问RecyclerView四级缓存机制吧。即Scrap缓存、Recycle缓存、ViewCacheExtension缓存、RecycledViewPool缓存。
RecyclerView在滚动时会复用已经存在的ViewHolder对象,而不是每次都创建新的ViewHolder。这样做的好处是减少了对象的创建和销毁次数,提高了内存利用率和性能。当列表项滚出屏幕时,对应的ViewHolder会被移除并加入到RecyclerView的内部缓存池中,当新的列表项需要显示时,RecyclerView会尝试从缓存池中获取可用的ViewHolder对象,避免了重新创建ViewHolder。
RecyclerView提供了setItemViewCacheSize()方法来设置缓存的ViewHolder数量。通过适当调整这个值,可以控制缓存的大小,避免过多的缓存导致内存占用过高。
Flutter三棵树指的是Widget树、Element树、RenderObject树。
Fragment在显示到销毁的过程中会执行自己的生命周期:onAttach -> onCreate ->onCreateView -> onActivityCreate -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach
同时也受到Activity生命周期的影响,如果Activity触发onPause,Fragment也会执行相应的onPause。
阿里智能信息
一面挂,四十五分钟。
- ✅️ 编程题:URL combo - 字符串分割
- ✅️ 编程题:统计网页中出现了几种HTML元素
- ❌️ Array如何转化为Set
- ✅️ 自我介绍,说一下学习和项目经历
- ✅️ 为什么学习Flutter?Flutter优势何在?
- ✅️ Flutter三棵树分别起什么作用?
- ❌️ Flutter状态管理相关,子组件如何与父组件通信?
- ❌️ Flutter如何与底层原生通信,如image_picker调用系统相机的原理?
- ❌️ 说一下MQTT协议?有什么特性?为什么物联网用MQTT?MQTT是基于TCP还是UDP?
- ❌️ 说一下 HTTP1.0 和 HTTP2.0 的区别
- ❌️ 说一下前端工程化?Vite有什么优势?
- ✅️ 为什么没有选择客户端开发?
- ✅️ 未来规划读研还是就业?
编程题:URL combo - 字符串分割
1 | // 以下是天猫首页一个经过 combo 的 js 资源 url,请找出 combo 规律并用 js 写一个可复用的函数来解该 url,得到每个 combo 前的 url 地址。 |
编程题:统计网页中出现了几种HTML元素
一开始没写出来,因为我没法用DOM操作提取出HTML标签,后来面试官改成字符串:
1 | // 在一个网页中,用尽可能少的代码,计算出当前网页用了多少种 HTML 元素。 |
HTTP1.0 和 HTTP2.0的区别:
HTTP1.0:
- 单一请求-响应模式:每次请求-响应都需要建立一个新的TCP连接,这个过程包括三次握手,增加了延迟
- 无状态连接:每个请求都是独立的,服务器不维护客户端的状态
- 请求头和响应头冗余:每次请求都会发送完整的头部信息,导致数据冗余和效率低下
- 文本协议:所有的请求和响应都是基于文本的,解析速度相对较慢
- 有限的并发:因为每个请求都需要一个单独的TCP连接,浏览器通常限制同一域名下的并发连接数,通常是4到6个
HTTP2.0:
- 多路复用:实现了多路复用,允许在单个TCP连接上并发多个请求-响应对,从而减少了连接的数量和延迟
- 二进制协议:相对于HTTP/1.0的文本协议,HTTP/2.0采用二进制格式,解析更高效
- 头部压缩:使用HPACK压缩算法来减少头部信息的大小,从而减少带宽消耗
- 服务器推送:服务器可以主动向客户端推送资源,而无需客户端明确请求,这样可以减少延迟并提高性能
- 流优先级:客户端和服务器可以通过设置流优先级来优化资源的传输顺序
- 连接管理:更有效的连接管理机制,通过单个连接处理多个并发请求,减少了连接建立和维护的开销
- 改进的安全性:虽然HTTP/2.0可以在明文(HTTP)和加密(HTTPS)下工作,但通常与TLS(传输层安全协议)结合使用,以提供更好的安全性