校招——面试(Android岗)总结

PS:持续更新,未完待续

2016.8.24某为面试

  1. 自我介绍一下
  2. 链表和数组的区别

    • 数组的存储空间是静态、连续分布的,初始化过大会造成空间浪费,过小会使空间溢出;链表的存储空间是动态分布的,只要内存有剩余空间,便不会产生溢出。

    • 数组查询比较快(可以根据下标直接查询),但是插入和删除比较慢;链表查询比较慢,但是插入和删除比较快(可以直接改变链表的指针)。

  3. 多个.c文件到二进制文件,这个过程中编译器做了哪几阶段的工作

    C源程序→预编译处理(.c)→编译、优化程序→汇编程序(Windows下是.obj)→链接程序。

    大致是这个步骤,详细的也不是很了解,暂时不做深究了。

  4. 可执行的二进制文件加载到内存中,程序里面分哪几个步骤

    这个可能是让说java的程序的工作原理,下面先给一张java工作流程图。
    Java工作原理

    1. Java源程序在编译之后生成后缀名为“.class”的文件,该文件以字节码(bytecode)的方式进行编码。这种字节码实际上是一种伪代码,它包含各种与平台无关的指令。Java虚拟机在字节码文件的的基础上解释这些字节码,将这些字节码转化成本地计算机的机器代码,并交给计算机去执行。
    2. Java虚拟机执行字节码的过程由一个循环组成,它不停地加载程序,然后进行合法性和安全性检测,以及解释执行,直到程序执行完毕。
  5. 二叉树的遍历

    先序遍历,中序遍历,后序遍历。

    PS:我记得当时懵逼了,直接回答的深度优先遍历,广度优先遍历。(囧,这是图的遍历好不啦)

  6. 程序和进程的区别
    程序只是一个静态的指令集合。而进程是一个正在系统中活动的指令集合,即进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。
  7. 死锁产生的原因,如何避免死锁

    死锁是指多个进程等待它方占有的资源而无限期地僵持下去的局面。

    产生死锁的原因

    • 系统资源不足
    • 进程运行推进的顺序不合理
    • 资源分配不当

    产生死锁的四个必要条件:(必须同时具备才会产生死锁)

    • 互斥条件

      即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。

    • 不可抢占条件

      进程所获得的资源在未使用完之前,申请资源者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。

    • 占有且申请条件

      进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。

    • 循环等待条件

      存在一个进程等待序列{P1,P2,…,Pn},其中P1等待P2所占用的某一资源,P2等待P3所占用的某一资源,…形成一个进程循环等待环。

    如何解决死锁

    有序的资源分配

  8. 你在项目中具体实现了哪些功能

  9. 你觉得你的项目中有哪些难点

  10. 你觉得自己的优势是什么

2016.9.8某宁面试

  1. 你做的项目用的什么框架
  2. Android的四大组件
  3. Activity的生命周期
  4. 我当前正在运行一个程序,然后我按了电源键,请问Activity经过了哪些生命周期?
  5. 广播有几种注册方式,动态注册的步骤是什么
  6. 计算机网络里通用的七层模型
  7. 网络协议,通信协议(模型和协议的对应关系)
  8. TCP和UDP协议的区别
  9. 链表的排序和算法(你知道哪些排序算法)
  10. 冒泡排序的算法实现
  11. 冒泡排序和二分法排序哪个效率高?
  12. Java中封装的概念
  13. Java中多态的概念,多态是用什么实现啊的实现啊的
posted @ 2016-09-16 16:27  末日没有进行曲  阅读(113)  评论(0编辑  收藏  举报