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

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务