Android开发经验谈Android开发工作需要的技能

Android面试基础系列四——数据库、操作系统、网络

2017-10-28  本文已影响141人  thinkChao

此系列文章是我在毕业求职期间,对Android面试相关的基础知识做的一个整理,内容还比较全面,现在将其发布出来,希望对即将求职的同学能有帮助。
这一系列的文章都是使用MarkDown编辑的,源文件也一并公布出来,大家可以在我文章的基础上,根据自己的情况修改或增加内容,定制自己的面试笔记。

链接:http://pan.baidu.com/s/1mhM4RSO 密码:hgzt

一、数据库

1、表的建立、删除、修改

2、查询

3、范式

记忆:

第一范式很简单,没什么可说的。

第二范式和第三范式都是说的非主属性与码的关系。

BC范式说的是主属性与码的关系。

4、索引的作用

索引是一个数据库对象,使用索引,可以使数据库程序无须对整个数据进行扫描,就可以在其中找到目标数据,从而提高查找效率。索引的底层采用的是B树。

二、操作系统

1、进程和线程

1)进程和线程的区别

进程是拥有资源,且独立调度和运行的基本单位。进程是程序运行时的实例,每个进程都有各自独立的地址空间,一个进程不能访问另一个进程的内存。

** 线程**是可以独立调度和运行的基本单位,但它只拥有极少数的内存资源。

线程存在于进程中,同一个进程中的多个线程可以共享进程中的堆空间,但是每个线程都有各自的寄存器和栈。

2)进程的状态转换

就绪、运行、阻塞

3)进程的互斥和同步

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指在互斥的基础上,实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。

简单地说:同步体现的是一种协作性,互斥体现的是一种排他性。

4)进程间的通信方式

1、管道
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2、信号量
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

3、共享内存
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

4、套接字( socket )
套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同终端及其间的进程通信。

5、消息队列

2、处理机调度算法

1、先来先服务

该进程一直运行到完成或发生某件事而阻塞后,才放弃处理机。

对长作业有利,段作业无力。

2、短作业优先

该算法是从就绪队列中选一个或若干运行时间最短的,将处理机分配给它。

这里又分抢占式和非抢占式。

3、高优先权优先调度

系统从后备队列中选择一个或若干个优先权最高的作业装入内存。

分为抢占式和非抢占式。

4、高响应比优先

优先权=(等待时间+要求服务时间)/要求服务时间

5、时间片轮转

重点是时间片的选择,较为可取的大小是:时间片略大于一次典型的交互所需要的时间。

6、多级反馈队列

第一个队列优先级最高,时间片最小。任务在第一个队列没执行完,就把它下方。

仅当第1——i-1个队列为空,才会调度第i个队列的内容。

3、死锁

1)产生死锁的原因

1、竞争资源

2、进程间推进顺序不当
就是请求和释放资源的顺序不当。

2)产生死锁的四个必要条件(必须、同时)

1、互斥条件

2、请求和保持条件

3、不剥夺条件

4、环路等待条件

3)预防死锁

既然是必要条件,那么预防死锁的方法,就是破坏四个必要条件之一。

4)死锁的避免

银行家算法。

4、磁盘调度算法

1、先来先服务

2、最短寻道时间

3、扫描算法

考虑磁头移动的方向,先向一个方向寻道。

每次访问同一个方向,且距离最近的。

4、循环扫描
磁头单向移动,只从里向外,或从外向里。

5、NStepScan

避免“磁臂黏着现象”。

也是建立多个队列,队列之间使用先来先服务算法,队列内使用scan算法,有新的请求就放入其它队列。

5、内存分配方式

1、连续分配

2、基本分页存储管理
分页存储管理是将一个进程的地址(逻辑地址空间)空间划分成若干个大小相等的区域,称为页,相应地,将内存空间划分成与页相同大小(为了保证页内偏移一致)的若干个物理块,称为块或页框(页架)。在为进程分配内存时,将进程中的若干页分别装入多个不相邻接的块中。

3、请求分页

4、基本分段存储管理

引入的目的是为了满肚程序员在编程和使用上多方面的要求,且消除了内碎片。

在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,如有主程序段、子程序段、数据段及堆栈段等,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,各段长度是不等的。

5、分页与分段的区别

1.页是信息的物理单位,分页是为了实现非连续的分配,以便解决内存的碎片问题,或者说分页是为了系统管理的需要。

2.页的大小固定是由系统确定的,将逻辑地址划分为页号和页内地址是由机器硬件实现的。而段的长度是不固定的,决定与用户的程序长度,通常由编译程序进行编译时根据信息的性质来划分。

3.分页式存储管理的作业地址空间是一维的,分段式的存储管理的作业管理地址空间是二维的。

6、页面置换算法

1、最佳置换算法
选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去。(它是一种理想化的算法,性能最好,但在实际上难于实现)。

2、先进先出置换算法
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

3、最近最久未使用置换算法
该算法是选择最近最久未使用的页面予以淘汰,系统在每个页面设置一个访问字段,用以记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时,选择T最大的页面。

4、最少使用置换算法:
该算法选择最近时期使用最少的页面作为淘汰页。

5、Clock置换算法
该算法为每个页面设置一位访问位,将内存中的所有页面都通过链接指针链成一个循环队列。当某页被访问时,其访问位置“1”。在选择一页淘汰时,就检查其访问位,如果是“0”,就选择该页换出;若为“1”,则重新置为“0”,暂不换出该页,在循环队列中检查下一个页面,直到访问位为“0”的页面为止。由于该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,所以把该算法称为最近未用算法。

6、Linux

linux常用命令

我的笔记本。

三、网络

1、五层模型

2、TCP/IP

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Clien端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步撒手。

3、Http及其完整的请求过程

请求过程

看我博客:https://thinkchao.github.io/2017/07/15/coder-2/

请求方法

常见请求头部

Http1.0与Http1.1区别

1、Http1.1的缓存控制策略更多

2、带宽优化

3、host头的处理

4、Http1.1支持长连接,也就是可以在一个TCP链接上,可以传送多个Http请求和链接,较少了建立和关闭链接的消耗。

Http与https

Https就是在Http层和TCP层加入了一层TLS加密层。

SSL协议是一种安全传输协议,TLS是SSL 3.0的升级版。

HTTP和HTTPS使用的是完全不同的连接方式用的端口也不一样:前者是80,后者是443。

上一篇 下一篇

猜你喜欢

热点阅读