美文网首页Android开发经验谈Android开发工作需要的技能
Android面试基础系列四——数据库、操作系统、网络

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

作者: thinkChao | 来源:发表于2017-10-28 15:03 被阅读141次

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

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

    一、数据库

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

    • 建表:没什么可说的
    • 删除:注意restrict和cascade
    • 修改:包括增加列、删除列、修改列的类型

    2、查询

    • 单表查询:只涉及一个表。5、12、20、30、31、32、
    • 连接查询:涉及多个表。37、38
    • 嵌套查询:将一个查询快嵌套在where或having子句中,主要使用的连接词:in、比较运算符、any/all(必须配合比较运算符)、exists
    • 集合查询:对多个select结果再进行操作,包括:union(交)、intersect(交)、except(差)

    3、范式

    • 第一范式:表中的每一个属性都不可再分。
    • 第二范式:在第一范式基础上,每一个非主属性完全依赖于码。
    • 第三范式:在第二范式基础上,每一个非主属性不存在对于码的传递函数依赖和部分依赖。
    • BC范式:在第三范式基础上,消除主属性对于码的部分与传递函数依赖。

    记忆:

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

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

    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

    • 三次握手/四次挥手
    • SYN与FIN

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

    因为当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/

    请求方法

    • GET:GET用于信息获取,请求参数都要放到请求的URL中。
    • POST:POST用来修改服务器资源的请求
    • PUT:与GET相反,PUT用来向服务器写入资源
    • DELETE:让服务器删除请求URL所指定的资源
    • HEAD:与GET类似,但服务器在响应中只返回首部。使用head可以在不获取资源的情况下了解资源的情况。
    • TRACE:trace方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。它允许客户端在最终将请求发送给服务器时 ,看Http请求变成了什么样子。因为一个Http请求可能要穿过防火墙、代理、网关或其它一些应用程序。
    • OPTION:该方法请求web服务器告知其支持的各种功能,例如支持哪些方法,或者对某些特殊资源支持哪些方法。

    常见请求头部

    • ContentType:请求数据的格式
    • Content-Length:消息长度
    • Host:请求的主机名
    • User-Agent:发出请求的浏览器类型
    • Accept:客户端可识别的内容类型列表
    • Accept-Encoding:客户端可识别的数据编码
    • Connection:

    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。

    相关文章

      网友评论

        本文标题:Android面试基础系列四——数据库、操作系统、网络

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