校招——面试(Android岗)总结
PS:持续更新,未完待续
2016.8.24某为面试
- 自我介绍一下
链表和数组的区别
数组的存储空间是静态、连续分布的,初始化过大会造成空间浪费,过小会使空间溢出;链表的存储空间是动态分布的,只要内存有剩余空间,便不会产生溢出。
数组查询比较快(可以根据下标直接查询),但是插入和删除比较慢;链表查询比较慢,但是插入和删除比较快(可以直接改变链表的指针)。
多个.c文件到二进制文件,这个过程中编译器做了哪几阶段的工作
C源程序→预编译处理(.c)→编译、优化程序→汇编程序(Windows下是.obj)→链接程序。
大致是这个步骤,详细的也不是很了解,暂时不做深究了。
可执行的二进制文件加载到内存中,程序里面分哪几个步骤
这个可能是让说java的程序的工作原理,下面先给一张java工作流程图。
- Java源程序在编译之后生成后缀名为“.class”的文件,该文件以字节码(bytecode)的方式进行编码。这种字节码实际上是一种伪代码,它包含各种与平台无关的指令。Java虚拟机在字节码文件的的基础上解释这些字节码,将这些字节码转化成本地计算机的机器代码,并交给计算机去执行。
- Java虚拟机执行字节码的过程由一个循环组成,它不停地加载程序,然后进行合法性和安全性检测,以及解释执行,直到程序执行完毕。
- 二叉树的遍历
先序遍历,中序遍历,后序遍历。
PS:我记得当时懵逼了,直接回答的深度优先遍历,广度优先遍历。(囧,这是图的遍历好不啦) - 程序和进程的区别
程序只是一个静态的指令集合。而进程是一个正在系统中活动的指令集合,即进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态,这些概念在程序中都是不具备的。 死锁产生的原因,如何避免死锁
死锁是指多个进程等待它方占有的资源而无限期地僵持下去的局面。
产生死锁的原因
- 系统资源不足
- 进程运行推进的顺序不合理
- 资源分配不当
产生死锁的四个必要条件:(必须同时具备才会产生死锁)
互斥条件
即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。
不可抢占条件
进程所获得的资源在未使用完之前,申请资源者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。
占有且申请条件
进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。
循环等待条件
存在一个进程等待序列{P1,P2,…,Pn},其中P1等待P2所占用的某一资源,P2等待P3所占用的某一资源,…形成一个进程循环等待环。
如何解决死锁
有序的资源分配
你在项目中具体实现了哪些功能
你觉得你的项目中有哪些难点
- 你觉得自己的优势是什么
2016.9.8某宁面试
- 你做的项目用的什么框架
- Android的四大组件
- Activity的生命周期
- 我当前正在运行一个程序,然后我按了电源键,请问Activity经过了哪些生命周期?
- 广播有几种注册方式,动态注册的步骤是什么
- 计算机网络里通用的七层模型
- 网络协议,通信协议(模型和协议的对应关系)
- TCP和UDP协议的区别
- 链表的排序和算法(你知道哪些排序算法)
- 冒泡排序的算法实现
- 冒泡排序和二分法排序哪个效率高?
- Java中封装的概念
- Java中多态的概念,多态是用什么实现啊的实现啊的