美文网首页
面试问到的问题

面试问到的问题

作者: hjm1fb | 来源:发表于2017-09-25 21:22 被阅读74次

    最近有一些面试,有些当时没答上来。这里记录下,欢迎交流。
    虽然感觉有些问题太具体以及业务相关,并不适合考察面试者的思维和能力。
    1. WebSocket是什么?与Http有什么关系?Websockt的持久连接又是什么?
    a. WebSocket一种在单个 TCP 连接上进行全双工通讯的协议。能够实现服务端给客户端推送,实时同步。

    b. 都采用TCP协议
    Websocket使用和 HTTP 相同的 TCP 端口
    Websocket 通过 HTTP/1.1 协议的101状态码进行握手。

    c. WebSocket 允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

    ps: Websocket,SPDY 和 HTTP 2.0 都可以实现服务端推送

    2. 安卓事件的底层分发实现,EventBus的事件分发原理

    a. Android源码分析-点击事件派发机制

    b. 图解 Android 事件分发机制 的前两张图

    3. 如何从浏览器跳转到应用某个页面,如何从通知栏打开应用某个页面,如何从微信跳转到应用某个页面

    a. 跳转实现:

    1. 为了能够从微信浏览器点击链接直接跳转到应用,需要从应用宝申请专门的链接。会先跳到应用宝的下载页面,然后检测应用是否已经安装,如果已经安装,会弹框提示用户打开应用。但发现网易云能够直接从微信浏览器页面跳到应用,估计是微信浏览器有直接跳转的白名单?

    2. 但在手机浏览器中只能跳转到应用下载页面。所以需要js判断当前的浏览器,如果是微信浏览器,就使用
      应用宝的链接,如果是其他浏览器,就使用Chrome Intent,即一种custom scheme。

    1. Scheme方式的跳转是在浏览器中进行的。而
      Deep Linking可以直接从http链接跳转到应用而不需要浏览器中转,比如短信消息里的链
      接。
      在Android M之前,点击一个链接会弹出一个对话框,询问用户使用哪个应用打开 - 包括浏览器应用。但是谷歌在Android M 上的Deep Linking技术支持自动认证(auto-verify)机制,让用户不必在弹出框的列表中选择,而是直接跳转到他们的App。

    b: 跳转处理:

    如何优雅地从浏览器打开本地应用
    但其中除了可以用
    New_Task启动新的Activity,不影响原来的任务栈之外,也可以 使用FLAG_ACTIVITY_REORDER_TO_FRONT将页面提到栈顶

    4. 用什么黑科技,能监听某个特定应用的启动
    https://github.com/jaredrummler/AndroidProcesses 但需要保活,轮询

    5. webview的优化,进度条显示,页面加载速度的优化技巧,多图加载的优化技巧,内存泄漏的原因

    a. 增加进度条:
    加progressBar,通过WebChromeClient设置进度。范例:浅谈WebView的页面跳转 但setWebViewClient(new WebViewClient())时不需要覆盖shouldOverrideUrlLoading方法
    b. 速度优化:

    “在初始化的同时,通过Native来完成一些网络请求等过程,使得WebView初始化不是完全的阻塞后续过程”,以加快WebView的加载。
    也提到通过前端(JS) 服务端 客户端配合来加快WebView的加载,但的确是为了几十毫秒就需要做很多工作,所以用户量庞大的APP适用

    WebView性能、体验分析与优化
    缓存机制
    http://dev.qq.com/topic/591d537a5bf956911a014c63
    WebSettings settings = webView.getSettings(); settings.setAppCacheEnabled(true); settings.setDatabaseEnabled(true); settings.setDomStorageEnabled(true);//开启DOM缓存,关闭的话H5自身的一些操作是无效的 settings.setCacheMode(WebSettings.LOAD_DEFAULT);

    图片延迟加载
    WebView三部曲:性能优化
    c. 内存泄漏优化:
    另起进程来运行WebView;使用Application的Context来new WebView
    https://juejin.im/entry/57d6434067f3560057e50b20

    d. WebView安全
    http://developers.googleblog.cn/2017/07/webview.html
    声明启用安全浏览

    6. hashmap实现快速存储和查找的原理

    1. 采用 Hash 算法决定集合元素的存储位置
    2. 数组+链表的结构,利用数组的查找效率为O(1) ,快速找到key所对应的索引
    3. 动态扩容,提高存取效率
    4. JDK1.8还结合了红黑树
      通过分析 JDK 源代码研究 Hash 存储机制

    补充:

    ContentProvider
    http://www.jianshu.com/p/f5ec75a9cfea
    http://wangkuiwu.github.io/2014/07/06/ContentProvider-Uri/
    greenDao及其升级:
    http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650821932&idx=1&sn=d26c09af7cbbfb1b0a95517bd78cc784&chksm=80b781b2b7c008a4a8dab45756e4d433b1c56e1c61762f98ee3b8a2b89a00756f82d6bb4d6b6&scene=0#rd
    https://github.com/yuweiguocn/GreenDaoUpgradeHelper/blob/master/README_CH.md

    相关文章

      网友评论

          本文标题:面试问到的问题

          本文链接:https://www.haomeiwen.com/subject/kxtjextx.html