校招 未知部门 / 客户端开发 / 一面

[面试日期] 2023-08-23 [面试时长] 未知
[学校背景] 未知 | 未知 [学历背景] 未知
[发布人] 面试之星官方收录
<h2>美团24秋招 客户端一面</h2> <p> 下午2点半HR打电话,约面试时间,为了方便就约到了4点半。</p><p> 睡了一觉醒来就直接去面试,面试过程中都不知道自己在说啥<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763490/62AF11E48344D159DA608796DA7D39E5"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763490/62AF11E48344D159DA608796DA7D39E5"></p><p> 面试内容如下:</p><ol><li>简历里面有说到做硬件视频流的推送,说如果你来做的话如何做</li><li>调取CameraX等框架获取视频流帧数据</li><li><span>编码,使用MediaCodec对视频帧数据进行编码(就是压缩的意思,因为数据太大)</span></li><li><span>打包:编码后的视频帧数据进行打包</span></li><li><span>通常使用容器格式(如MP4、FLV等)</span></li><li><span>流媒体协议,如RTMP、RTSP等进行封装</span></li><li><span>传输:用RTMP、RTSP、Http协议传输</span></li><li><span>解封加解码:接收端解封工具解封,然后用MediaCodec解码</span></li><li><span>存储</span></li><li><span>RTMP和HTTP的区别?</span></li><li><span>RTMP这种更适合用来音视频和流媒体传输,可以低延迟,实时传输,HTTP这种就静态资源比较多</span></li><li><span>都是TCP为传输层协议</span></li><li><span>OSI的七层模型</span></li><li><span>物理层,数据链路层,网络层,传输层,会话层,表示层,应用层</span></li><li><span>TCP和UDP区别</span></li><li><span>面向链接和无连接,对应的传输速率等就有区别</span></li><li><span>你自己有了解这些网络底层的东西吗?</span></li><li><span>有看过OKHTTP的原理:</span></li><li>创建请求quest之后,<span>OkHttpClient调用newCall()将Request封装成一个Call对象</span></li><li>同步请求,调用Call的excute()方法,在调用Dispatcher的excuted(),放入runningSyncCalls队列,进入拦截器链,发送请求,获得response后,调用finished出列;</li><li>异步请求,调用enqueue()方法</li><li>通过判断请求线程池里面的 同一地址的请求是否达到5,线程是否达到64</li><li>ture的话,进入runningAsyncCalls队列,然后调用拦截器链条,发送请求</li><li>false的话,进入readyAsyncCalls队列,等待条件满足时调用<span>promoteCalls()方法进入上个步骤</span></li><li><span>后续执行</span>发送请求,获得response后,调用finished出列</li><li><span>拦截器链,按顺序遍历interceptorList(拦截器链,这里面拦截器使用的是责任链的模式)</span></li><li><span>自定义拦截器可以自定义单个拦截器,也可以自定义拦截器链路的顺序</span></li><li><span>涉及的线程池一共两个:</span></li><li><span>Dispatcher处理请求时候内部的excuteService线程池,是一个核心线程为0,非核心线程不限制的线程池</span></li><li><span>内部是一个同步队列,先来先出</span></li><li><span>发送请求的线程池,</span><span>支持最大5个链路的keep-alive连接,并且默认keep-alive的时间是5分钟。</span></li><li><span>拦截器的类型有哪些?</span></li><li>重试及重定向拦截器 RetryAndFollowUpInterceptor</li><li>封装拦截器 BridgeInterceptor</li><li>缓存拦截器 CacheInterceptor</li><li>连接拦截器 ConnectInterceptor</li><li>IO拦截器 CallServerInterceptor</li><li>自定义的拦截器</li><li>拦截器的执行顺序</li><li><span>先按照addInterceptor() 设置的顺序遍历,再按 </span>addNetworkInterceptor() 设置的顺<span>序遍历</span></li><li><span>如何解决线程冲突</span></li><li><span>保证线程安全,使用一些锁机制</span></li><li><span>Java的垃圾回收机制</span></li><li><span>从GC roots遍历可达就说明有引用,不删除,其他删除</span></li><li><span>常见的算法有哪些?</span></li><li><span>标记清除,标准整理法,复制清除法</span></li><li><span>Android里面常见的嵌套解决方法</span></li><li>不同方向的嵌套滑动</li><li>ViewPage和RecyclerView嵌套,ScrollView嵌套RecyclerView</li><li>相同方向的嵌套滑动</li><li><span>ScrollView嵌套ScrollView,</span>NestedScrollView + RecyclerView</li><li>自定义的</li><li>NestedScrollingParent和NestedScrollingChild</li><li><span>Android 手势响应流程</span></li><li><span>当一个View接收到触摸事件后,它首先检查是否需要拦截这个事件,即判断是否要将事件交给自己处理。这个判断是在ViewGroup的onInterceptTouchEvent()方法中完成的。</span></li><li><span>在自己的onTouchEvent()方法中处理事件</span></li><li><span>手势检测,Android提供了GestureDetector类来帮助我们检测常见的手势并进行回调</span></li><li><span>如果出现事件冲突如何解决</span></li><li>外部拦截法 - 在父View中拦截事件,避免传递给子View</li><li>内部拦截法 - 先传递给子View,子View自己决定是否拦截</li><li>事件分发机制</li></ol><p></p><p> 感觉答的不是很好,刚刚睡醒,特别迷迷糊糊的,说话都不清晰,舌头打结!<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553764028/03864089FFAB3F0B62C808081B5C41A9"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553764028/03864089FFAB3F0B62C808081B5C41A9"></p><p> 最后面试官也没让手撕代码,说时间不太够了。反问了一下业务方向和技术方向<img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763490/62AF11E48344D159DA608796DA7D39E5"><img src="https://uploadfiles.nowcoder.com/images/20220815/318889480_1660553763490/62AF11E48344D159DA608796DA7D39E5"></p><p> 自己真的是太菜了,要学习的地方还很多的</p><ol><p></p></ol>
AI 推荐面试题