6.1 笔试概述
今天去了 tom 笔试数据库维护工程师。出门坐 653,到魏公村下车,往北一走,就 到韦伯时代中心了。c 座 3 层,很好找。前台 mm 很漂亮,在那找人重装系统。公司装 修风格和网站差不多,淡绿色基调,视觉上很舒服。比我先来的是为人大的 jj,研究生,聊起来感觉挺好。后来又来了 3 个人。听说今 天下午来笔试的有三组,我们前边已经有两组了。到时间后,hr 把我们带到会议室,开始答题。时间一个小时。共 6 道大题。我一看, 大多数不会,觉得没戏了。不过把题都记了下来,回来补课。写出来,希望以后去笔试的人好运。
1.简述事务的 adic 特性。 2.简述 c 转换成可执行代码的过程。在 risc 和 cisc 平台上有何区别? 3.raid 的核心技术是什么?raid0,1,2,3,4,5 的特性和区别是什么?答:raid 技术的两大特点:一是速度、二是安全,由于这两项优点,raid 技术早期 被应用于高级服务器中的 scsi 接口的硬盘系统中,随着近年计算机技术的发展,pc 机的 cpu 的速度已进入 ghz 时代。ide 接口的硬盘也不甘落后,相继推出了 ata66 和 ata100 硬盘。这就使得 raid 技术被应用于中低档甚至个人 pc 机上成为可能。raid 通常是由在 硬盘阵列塔中的 raid 控制器或电脑中的 raid 卡来实现的。
raid 技术经过不断的发展,现在已拥有了从 raid 0 到 6 七种基本的 raid 级别。另 外,还有一些基本 raid 级别的组合形式,如 raid 10(raid 0 与 raid 1 的组合),raid 50(raid 0 与 raid 5 的组合)等。不同 raid 级别代表着不同的存储性能、数据安全性和存储成本。 但我们最为常用的是下面的几种 raid 形式。
(1) raid 0
(2) raid 1
(3) raid 0+1
(4) raid 3
(5) raid 5
raid 级别的选择有三个主要因素:可用性(数据冗余)、性能和成本。如果不要求可 用性,选择 raid0 以获得最佳性能。如果可用性和性能是重要的而成本不是一个主要因 素,则根据硬盘数量选择 raid 1。如果可用性、成本和性能都同样重要,则根据一般的 数据传输和硬盘的数量选择 raid3、raid5。
raid 卡是 一 种磁 盘 阵 列卡 , 它的 核心技 术当 然 就是 raid(redundant array of independent disks,物理磁盘冗余阵列)。它是一种工业标准,它的主要作用就是为了提高服务器的磁盘读写性能和镜像备份以提高服务器磁盘系统的安全级别。当然要实现冗 余,则至少需要两个以上的物理磁盘,所以在 raid 卡上则必须提供一个以上的磁盘接口, 当然这里的磁盘接口不仅限于 scsi 接口,目前还有 ide (ata)和 sata 接口。(如图 2 所示) 的是 adaptec scsi-3210s 磁盘阵列卡,它有内 2 个 68 针、2 个外 68 针 scsi 接口,可实现 30 个 scsi 磁盘或 scsi 外设的连接。(如图 3 所示)的 rocketraid 404 磁盘阵列卡,它提供 4 条独立的 ide 通道,因一个 ide 接接口,最能连接 2 个硬盘,所以它最多可接 8 个 ide 硬盘。目前对 raid 级别的定义可以获得业界广泛认同的有 4 种,raid 0、raid 1、raid 0+1 和 raid 5。
raid 0 是无数据冗余的存储空间条带化,具有成本低、读写性能极高、存储空间利 用率高等特点,适用于音、视频信号存储、临时文件的转储等对速度要求极其严格的特 殊应用。但由于没有数据冗余,其安全性大大降低,构成阵列的任何一块硬盘的损坏都 将带来灾难性的数据损失。这种方式其实没有冗余功能,没有安全保护,只是提高了磁 盘读写性能和整个服务器的磁盘容量。一般只适用磁盘数较少、磁盘容易比较紧缺的应 用环境中,如果在 raid 0 中配置 4 块以上的硬盘,对于一般应用来说是不明智的。
raid 1 是两块硬盘数据完全镜像,安全性好,技术简单,管理方便,读写性能均好。因为它是一一对应的,所以它无法单块硬盘扩展,要扩展,必须同时对镜像的双方进行 同容量的扩展。因为这种冗余方式为了安全起见,实际上只利用了一半的磁盘容量,数 据空间浪费大。
raid 0+1 综合了 raid 0 和 raid 1 的特点,独立磁盘配置成 raid 10,两套完整的 raid1 0 互相镜像。它的读写性能出色,安全性高,但构建阵列的成本投入大,数据空间利用率 低。
raid 5 是目前应用最广泛的 raid 技术。各块独立硬盘进行条带化分割,相同的条带 区进行奇偶校验(异或运算),校验数据平均分布在每块硬盘上。以 n 块硬盘构建的 raid 5 阵列可以有 n-1 块硬盘的容量,存储空间利用率非常高。任何一块硬盘上的数据丢失, 均可以通过校验数据推算出来。它和 raid 3 最大的区别在于校验数据是否平均分布到各 块硬盘上。raid 5 具有数据安全、读写速度快,空间利用率高等优点,应用非常广泛,但不足之处是如果 1 块硬盘出现故障以后,整个系统的性能将大大降低。
raid 1、raid 0+1、raid 5 阵列配合热插拔(也称热可替换)技术,可以实现数据的在线 恢复,即当 raid 阵列中的任何一块硬盘损坏时,不需要用户关机或停止应用服务,就可 以更换故障硬盘,修复系统,恢复数据,对实现高可用系统具有重要的意义
4.简述 osi 七层模型,并描述 tcp 连接建立的三次握手。osi 七层模型介绍
osi 是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。
osi 模型有 7 层结构,每层都可以有几个子层。下面我简单的介绍一下这 7 层及其功能。
osi 的 7 层从上到下分别是
7 应用层
6 表示层
5 会话层
4 传输层
3 网络层
2 数据链路层
1 物理层
其中高层,既 7、6、5、4 层定义了应用程序的功能,下面 3 层,既 3、2、1 层主 要面向通过网络的端到端的数据流。下面我给大家介绍一下这 7 层的功能:
(1)应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。 例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心 osi 的第 7 层。但是,如果添加了一个传输文件的选项,那么字处理器的程 序员就需要实现 osi 的第 7 层。示例:telnet,http,ftp,www,nfs,smtp 等。
(2)表示层:这一层的主要功能是定义数据格式及加密。例如,ftp 允许你选择以二进制或 asii 格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果 选择 asii 格式,发送方将把文本从发送方的字符集转换成标准的 asii 后发送数据。在接 收方将标准的 asii 转换成接收方计算机的字符集。示例:加密,asii 等。
(3)会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制 和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是 连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例: rpc,sql 等。
(4)传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新 排序功能。示例:tcp,udp,spx。
(5)网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的 传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:ip,ipx 等。
(6)数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的歌种介
质有关。示例:atm,fddi 等。
(7)物理层:osi 的物理层规范是有关传输介质的特性标准,这些规范通常也参考了 其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各 种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:rj45,802.3 等。
osi 分层的优点: (1)人们可以很容易的讨论和学习协议的规范细节。 (2)层间的标准接口方便了工程模块化。 (3)创建了一个更好的互连环境。 (4)降低了复杂度,使程序更容易修改,产品开发的速度更快。 (5)每层利用紧邻的下层服务,更容易记住个层的功能。大多数的计算机网络都采用层次式结构,即将一个计算机网络分为若干层次,处在 高层次的系统仅是利用较低层次的系统提供的接口和功能,不需了解低层实现该功能所采用的算法和协议;较低层次也仅是使用从高层系统传送来的参数,这就是层次间的无 关性。因为有了这种无关性,层次间的每个模块可以用一个新的模块取代,只要新的模 块与旧的模块具有相同的功能和接口,即使它们使用的算法和协议都不一样。
网络中的计算机与终端间要想正确的传送信息和数据,必须在数据传输的顺序、数据的格式及内容等方面有一个约定或规则,这种约定或规则称做协议。网络协议主要有 三个组成部分:
1、语义: 是对协议元素的含义进行解释,不同类型的协议元素所规定的语义是不同的。例如
需要发出何种控制信息、完成何种动作及得到的响应等。
2、语法: 将若干个协议元素和数据组合在一起用来表达一个完整的内容所应遵循的格式,也就是对信息的数据结构做一种规定。例如用户数据与控制信息的结构与格式等。 3、时序: 对事件实现顺序的详细说明。例如在双方进行通信时,发送点发出一个数据报文,如果目标点正确收到,则回答源点接收正确;若接收到错误的信息,则要求源点重发一 次。tcp 协议是面向连接的,两端主机需要同步双方的初始序号。同步需要双方都发送 自己的初始序号,并且接收双方的确认(ack)信息;同时接收对方的初始序号,并且发送确认的 ack。这个过程就是三次握手(three-way handshake)。 a->b syn:我的初始序号是 x, ack 是 0,设置 syn 位,未设置 ack 位。
b->a ack:你的序号是 x+1,我的初始序号是 y,设置 syn 位和 ack 位。
a->b ack:你的序号是 y+1,我的序号是 x+1,设置 ack 位,未设置 syn 位。 5.进程和线程有何区别,支持线程的标准是什么?超线程和多核的区别是什么? 答:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地 提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、 顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应 用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执 行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及 资源分配。这就是进程和线程的重要区别。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统 进行资源分配和调度的一个独立单位.线程是进程的一个实体,是 cpu 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源 (如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥 有的全部资源.一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 多线程的标准多线程编程的历史可以回溯到二十世纪 60 年代。在 unix 操作系统中的发展是从 80 年代中期开始的。也许是令人吃惊的,关于支持多线程有很好的协议,但是今天我们仍 然可以看到不同的多线程开发包,他们拥有不同的接口。但是,某几年里一个叫做 posix1003.4a 的小组研究多线程编程标准。当标准完成后, 大多数支持多线程的系统都支持 posix 接口。很好的改善了多线程编程的可移植性。
solaris 多线程支持和 posix1003.4a 没有什么根本性的区别。虽然接口是不同的,但 每个系统都可以容易地实现另外一个系统可以实现的任何功能。它们之间没有兼容性问题,至少 solaris 支持两种接口。即使是在同一个应用程序里,你也可以混合使用它们。 用 solaris 线程的 另一个原因是使用支持它的工具包,例如多线程调试工具 (multighreaded debugger)和 truss(可以跟踪一个程序的系统调用和信号),可以很好地报告线程的状态。
经验 2:技术类昨天去了趟 tom 在线,笔试,题目并不是很难。虽然我开始认为是考 php,可是 到了那里才知道是考 java。不过无所谓,反正都差不多。大早上 8 点就和谢、博导坐上 801 出发了。本以为一路上会很堵,可是却出奇的顺,我计划着怎么得 2 个半小时到魏公村,可我十点多点就到公司了,晕!最近好像顺的有 点过头了。
笔试完了,谢也面试完了,就一起去西单吃了回鸡翅。吃完饭,他要去动感地带 营业厅换奖品,我靠,居然从 1 点多等到快 3 点~~这是 tmd 什么速度!不过领的那个 水壶还是挺卡瓦意的,像个企鹅~~