我要找到工作之面试题一

1.自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。

R⋈S|
定义:自然连接是关系R和S在所有公共属性(common attribute)上的等接(Equijoin)。但在等到的结果中公共属性只保留一次,其余删除。
R⋈S ≡ ΠR u S( δ predicate(R x S))

2.编译原理4种文法类型

   乔姆斯基把方法分成四种类型,即0型、1型、2型和3型,源于《编译原理》:
首先要阐明的是,一般的文法至少都是0型文法,也就是说0型文法限制最少,二1,2,3型文法都是在0型文法基础上加以限制形成。若将0型文法比作基类的话,1,2,3,4就是不断继承并加以限制得到的子类。
0型文法 
设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。0型文法也称短语文法。0型文法的能力相当于图灵机(Turing)。
我们发现0型文法是限制最少的一种文法,平时见到的文法几乎都属于0型文法。
1型文法 
1型文法也叫上下文有关文法,此文法对应于线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。 
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。 
如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。 
2型文法 

2型文法也叫上下文无关文法,它对应于下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。 
如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。 

3型文法 
3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。 
如有:A->a,A->aB,B->a,B->cB,则符合3型文法的要求。但如果推导为:A->ab,A->aB,B->a,B->cB或推导为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。具体的说,例子A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为B->Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。 
那么这四类文法如何判断呢?
其实四种文法就是规定产生式的左和右边的字符的组成规则不同而已,于是我们便可以严格根据左边和右边规则的不同来加以判断。
首先,应该明确,四种文法,从0型到3型,其规则和约定越来越多,限制条件也越来越多,
所以我们应该按照3->2->1->0的顺序去判断,一旦满足前面的规则,就不用去判断后面的了。

1.先来看看3型文法的判断规则
①:左边必须只有一个字符,且必须是非终结符; 
②:其右边最多只能有两个字符,要么是一个非终结符+终结符(终结符+非终结符),要么是一个终结符。
③:对于3型文法中的所有产生式,若其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须满足终结符+非终结符。反之亦然。


2.再看看2型文法判断规则
①:与3型文法的第一点相同,即:左边必须有且仅有一个非终结符。 
②:2型文法所有产生式的右边可以含有若干个终结符和非终结符(只要是有限的就行,没有个数限制)。 


3.最后再看看1型文法判断规则
①:1型文法所有产生式左边可以含有一个、两个或两个以上的字符,但其中必须至少有一个非终结符。 
②:与2型文法第二点相同,但需要满足|α|≤|β|.
4.0型文法不需要判断了,一般的文法都是0型文法。

3.SPOOLING (即外部设备联机并行操作),即Simultaneous Peripheral Operation On-Line的缩写,它是关于慢速字符设备如何与 计算机主机交换信息的一种技术,通常称为“假脱机技术”。
SPOOLing技术实际上是一种外围设备同时联机操作技术,又称为排队转储技术。它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节。

(1)提高了I/O速度.从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾.
(2)设备并没有分配给任何进程.在输入井或输出井中,分配给进程的是一存储区和建立一张I/O请求表.
(3)实现了虚拟设备功能.多个进程同时使用一独享设备,而对每一进程而言,都认为自己独占这一设备,不过,该设备是逻辑上的设备.

4.

方法
对解空间树的搜索方式
存储结点的常用数据结构
结点存储特性
常用应用
回溯法
深度优先搜索
堆栈
活结点的所有可行子结点被遍历后才被从栈中弹出
找出满足约束条件的所有解
分支限界法
广度优先或最小消耗优先搜索
队列、优先队列
每个结点只有一次成为活结点的机会
找出满足约束条件的一个解或特定意义下的最优解
5.以下哪个ip不和10.11.12.91/28处于同一个子网
正确答案: D 
A.10.11.12.85/28
B.10.11.12.88/28
C.10.11.12.94/28
D.10.11.12.97/28

解答:前28位为网络号,故子网掩码为11111111.11111111. 11111111. 11110000(255.255.255.240)。
256-240=16,有16个子网,每一个子网段大小范围是16。
10.11.12.91/28中91可以表示为:01011011,前四位为网络号,后四位为主机号,
故包含10.11.12.91的子网范围是:01010000~01011111(80~95)。
去掉第一个和最后一个,和 10.11.12.91/28在一个网段的范围为: 10.11.12.81/28~ 10.11.12.94/28。

答案选择D。

6.以下程序的打印结果是()
1.#include<iostream>
2.using namespace std;
3.
4.void swap_int(int a , int b)
5.{
6.    int temp = a;
7.    a = b;
8.    b = temp;
9.}
10.
11.void swap_str(char*a , char*b)
12.{
13.    char*temp = a;
14.    a = b;
15.    b = temp;
16.}
17.
18.int main(void)
19.{
20.    int a = 10;
21.    int b = 5;
22.    char*str_a = "hello world";
23.    char*str_b = "world hello";
24.    swap_int(a , b);.
25.    swap_str(str_a , str_b);
26.    printf("%d %d %s %s\n",a,b,str_a,str_b);
27.
28.    return 0;
29.}

解答:swap_int(a, b)将实参10,5传递给了形参,在被调用函数中交换了10和5,但是调用结束,函数释放变量,实参中并没有交换;
swap_str(str_a, str_b)将实参的地址传递给了形参,其实跟上面的类似,并没有改变实参str_a、str_b的指向,实参没有交换。

真正实现交换的函数

实现交换的代码
 
#include<iostream>
using namespace std;
 
void swap_int(int &a , int &b)
{
    int temp = a;
    a = b;
    b = temp;
}
 
void swap_str(char **a , char **b)
{
    char *temp =
*a;
    *a = *b;
    *b = temp;
}
 
int main(void)
{
    int a = 10;
    int b = 5;
    char *str_a = "hello world";
    char *str_b = "world hello";
    swap_int(a , b);
    swap_str(&str_a , &str_b);
    printf("%d %d %s %s\n",a,b,str_a,str_b);
    system("pause");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值