• Android 第一波


    1. Devik进程,Linux进程,线程的区别

    说一说对 SP 频繁操作有什么后果? SP 能存储多少数据?

          SP 的底层其实是由xml文件来实现的,操作 SP 的过程其实就是xml的序列化和反序列化,序列化是将数据写入 xml 文件的过程中
           xml 文件是存储在磁盘中的,考虑到 I/O 的读取,最好不要对 SP 进行频繁的操作.
          因为dvm的堆内存是有限的,所以 xml 文件最好不要太大,具体多大都没有要求,但是我们都知道DVM堆内存也就 16M ,数据大小肯定不能超过这个数字.
         其实 SP 主要是存储用户配置和偏好的,不必要去存储大量数据.
    

    2. 内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?

    ②内存泄漏

    Android 的虚拟机是基于寄存器的Dalvik,他的最大堆大小是16M,有的机器是24M,所能使用的内存空间是有限的,内存占用超过就会出现 OOM 异常
    产生原因

    • 对象内存过大,比如bitmap、xml文件,造成内存超出限制
    • 使用过后的资源不能及时释放,造成内存泄漏
    • static 关键字的使用,因为使用 static 修饰的变量,他的生命周期很长
      -----------避免使用static 成员变量引用资源耗费过多的实例
      ------------尽量使用applicayion 的 Context
      -----------使用软引用代替强引用
    • 线程导致内存泄漏
      主要是因为线程生命周期的不可控,例如,在开启线程时进行横竖屏的切换操作,一般情况下的横竖屏切换会重新创建Activity,而老的Activity是会被销毁的,但是实际上并不是这样,因为在线程中保存了 Activity 的引用,当Run函数没有执行完的时候,线程是不会被销毁的,因此就会出现了内存泄漏的问题。如果使用 AsyncTask 也不可以,因为他的内部实现时使用线程池,threadPoolExcutor,这个类对thread对象的生命周期是不可控的。

    3. Activity是如何生成一个view的?

    Activity 是一个工人,它来控制 Window ;Window 是一面显示屏,用来显示信息;
    View 都是层层重叠在一起(通过 infalte() 和 addView())放到 Window 显示屏上。
    LayoutInfalter 就是用来生成View的 一个工具,XML 布局文件就是用来生成 View 的原料

    代码具体的执行流程:

    setContentView(R.layout.main)其实就是下面内容。
    getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main, null))
    运行程序后:
    Activity 会调用 PhoneWindow 的 setContentView() 来生成一个 Window,而此时的 setContentView 就是那个最底层的 View。
    然后通过 LayoutInflater.infalte() 方法加载布局生成View对象并通过 addView()方法添加到 Window 上,(一层一层的叠加到 Window 上)
    Activity 其实不是显示视图,View 才是真正的显示视图。
    一个 Activity 构造的时候只能初始化一个 Window(PhoneWindow)
    另外这个 PhoneWindow 有一个”ViewRoot”,这个”ViewRoot”是一个 View 或 ViewGroup,是最初始的根视图
    然后通过 addView 方法将 View 一个个层叠到 ViewRoot 上, 这些层叠的 View 最终放在 Window 这个载体上面

    (3题答案是参考大神:http://blog.csdn.net/sada09/article/details/8644901)

    4. Android 程序运行时权限与文件系统权限的区别?

    6. HTTPS 和 HTTP 区别

    ① https协议需要到ca申请证书,一般免费证书很少,需要交费。
    ② http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
    ③ http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    ④ http的连接很简单,是无状态的
    ⑤ HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全

    7. 简述对 AIDL 的理解

    ① AIDL 是 Android Interface Definition Language 的英文缩写,Android 接口定义语言
    ② AIDL 可以发布及调用远程服务,实现跨进程通信
    ③ 将服务的 AIDL 放到 src 目录下会在 gen 目录下生成相应的接口类

    8. ForceClos e出现原因,如何避免

    9. 如何解决 android 方法数量不超过 65535

    从sdkextrasAndroidsupportmultidexlibrarylibs 目录将Android-support-multidex.jar导入工程中
    如果你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类,
    如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法

    10. AsyncTask 使用在哪些场景?它的缺陷是什么?如何解决?

    11. View 与 ViewGroup的区别?

    android view和 ViewGroup,在架构上看似乎ViewGroup之上,
    View需要继承ViewGroup,但实际上不是这样的。
    View是基类,ViewGroup是他的子类,这就证明了View代表了用户界面的组件的块可绘制的中间区域块,每个View在屏幕上占据了一个长方形区域,
    在这个区域内,这个View对象负责图形绘制和事件的处理,View是小控件widget和ViewGroup的父类,ViewGroup又是Layout 的基类

    12 post请求与get请求的区别

    1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来
    2.使用Get请求发送数据量小,Post请求发送数据量大
    1.get请求需注意缓存问题,post请求不需担心这个问题
    2.post请求必须设置Content-Type值为application/x-form-www-urlencoded
    3.发送请求时,因为get请求的参数都在url里,所以send函数发送的参数为null,而post请求在使用send方法时,却需赋予其参数
    在客户端使用get请求时,服务器端使用Request.QueryString来获取参数,而客户端使用post请求时,服务器端使用Request.Form来获取参数.
    关于服务器端获取数据,我们还可以使用一个通用的获取参数的方式即Request["username"],但是此方法存在一个问题,我们随后来讲.
    下面,我们使用HttpWatch来看下,当使用get和post方式发送请求时,客户端究竟发送了什么,收到了什么.
    对于get请求和post请求中的时间差,请不要在意,因为是在不同时间按下的get按钮和post按钮.

  • 相关阅读:
    笔记04_正确使用Heterogeneous元件
    java网络通信:伪异步I/O编程(PIO)
    java网络通信:异步非阻塞I/O (NIO)
    lua源码学习篇二:语法分析
    lua源码学习篇三:赋值表达式解析的流程
    java网络通信:netty
    lua源码学习篇一:环境部署
    lua源码学习篇四:字节码指令
    java网络通信:同步阻塞式I/O模型(BIO)
    前端项目开发流程
  • 原文地址:https://www.cnblogs.com/fanfusuzi/p/6593419.html
Copyright © 2020-2023  润新知