利用递归文法+可以用什么?

Q:浅拷贝构造与深拷贝构造

类中有指针的时候,需要用深拷贝开辟一块新内存

Q:什么是SQL注入,怎么解决SQL注入

SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。

SQL注入漏洞可能会影响使用SQL数据库(如MySQL,Oracle,SQL Server或其他)的任何网站或Web应用程序。犯罪分子可能会利用它来未经授权访问用户的敏感数据:客户信息,个人数据,商业机密,知识产权等。SQL注入攻击是最古老,最流行,最危险的Web应用程序漏洞之一。

SQL注入攻击可以通过多种方式执行。在选择特定攻击方法之前,攻击者可能会观察系统的行为。

这是典型的攻击,攻击者可以通过相同的通信通道发起攻击并获得结果。这是通过两种带内技术完成的:

● 基于错误的SQL注入:从显示的错误消息中获取有关数据库的信息

● 基于联合的SQL注入:依赖于攻击者能够将UNION ALL被盗信息的结果与合法结果连接起来。

这两种技术都依赖于攻击者修改应用程序发送的SQL,以及浏览器中显示的错误和返回的信息。如果应用程序开发人员或数据库开发人员无法正确地参数化他们在查询中使用的值,那么它会成功。两者都是试错法,可以检测到错误。

也称为推理SQL注入,盲注入攻击不会直接从目标数据库中显示数据;相反,攻击者会仔细检查行为中的间接线索。HTTP响应中的详细信息,某些用户输入的空白网页以及数据库响应某些用户输入需要多长时间,这些都可以是线索,具体取决于攻击者的目标。他们还可以指向攻击者尝试的另一个SQLi攻击途径。

这种攻击有点复杂,当攻击者无法在单个直接查询 - 响应攻击中实现其目标时,攻击者可能会使用此攻击。通常,攻击者会制作SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。

二阶注入就是一种带外注入攻击。在这种情况下,攻击者将提供SQL注入,该注入将由数据库系统的单独行为存储和执行。当二级系统行为发生时(它可能类似于基于时间的作业或由其他典型管理员或用户使用数据库触发的某些事情)并且执行攻击者的SQL注入,那就是当“伸出”到系统时攻击者控制发生了。

如何防止SQL注入攻击?

以下建议可以帮助防止SQL注入攻击成功:

避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。

不要将敏感数据保留在纯文本中

加密存储在数据库中的私有/机密数据;这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。

将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。

避免直接向用户显示数据库错误

攻击者可以使用这些错误消息来获取有关数据库的信息。

对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)

这为面向Web的应用程序提供了保护,它可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程序(以及数据库)。

定期测试与数据库交互的Web应用程序

这样做可以帮助捕获可能允许SQL注入的新错误或回归。

将数据库更新为最新的可用修补程序

这可以防止攻击者利用旧版本中存在的已知弱点/错误。

总结:SQL注入是一种流行的攻击攻击方法,但是通过采取适当的预防措施,例如确保数据加密,保护和测试Web应用程序,以及您是最新的补丁程序,您可以采取有意义的步骤来保持您的数据安全。

Q:从输入一个URL到访问到资源经历的过程

Q:URL转ip地址用的什么协议?该协议传输层用的什么协议?为什么?

DNS系统采用递归查询请求的方式来响应用户的查询,其一般过程如下:

(1)客户端首先向首选域名服务器查询。

(2)首选域名服务器检查本地资源记录,如果存在则作权威回答,如果不存在,则检查本地缓存,如果有记录则直接返回结果。若本地资源记录和缓存记录都不存在,则向根域名服务器查询。

(3)根域名服务器返回相应顶级域的权威域名服务器的地址,首选域名服务器继续向该顶级权威域名服务器查询。

(4)顶级权威域名服务器返回次级域的权威域名服务器地址,首选域名服务器如此迭代查询,直到得到对查询域名的权威回答,保存在本地缓存中并返回给客户端,完成此次查询。目前绝大多数的网络都会开放DNS服务,DNS数据包不会被防火墙等网络安全防护设备拦截,因此,可以基于DNS协议建立隐蔽通道,从而顺利穿过防火墙,在客户端和服务器之间隐蔽地传输数据。

DNS区域传输的时候使用TCP协议:

1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。

2.TCP是一种可靠连接,保证了数据的准确性。

域名解析时使用UDP协议:

客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

Q:什么是索引,为什么要使用索引,索引使用多了会造成什么后果?

索引是对数据库表中一个或多个列的值进行排序的结构。

设置索引付出的代价:1:增加了数据库的存储空间 2:插入和修改的时候需要花费较多的时间(因为索引也要随之变动)

好处:提高了表的搜索效率

Q:TCP为什么是3次握手?

3次握手可以实现功能,4次的话比较多余,如果是2次握手的话会出现问题,具体问题如下解释:

A发一个消息给B,网络原因阻塞,然后A超时重传。当A和B通信完了之后,这个阻塞的消息到达了B,B以为是A的一个新请求,所以一直会给他一个确认,等待和A建立连接发数据,但是对于A来言,他不会去理睬这个确认,所以B的资源就被浪费了。

Q:什么是逻辑地址,什么是物理地址,页面置换算法有哪些?

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。

物理地址就是内存中真实的地址

Q:线程/进程之间通信方法?死锁怎么预防?使用多线程需要注意哪些问题?

管道,命名管道,信号量,消息队列,信号,共享内存,套接字,全双工管道

锁机制,信号量机制,信号机制

Q:递归转迭代需要用什么数据结构?为什么?

用栈,递归本来就是函数栈的调用

Q:服务端80端口被占用怎么办?

netstat可以查看端口状态

Q:什么命令可以查看进程运行状态?

1.排序,取第k大,时间复杂度O(nlogn)

Q:写LCA(二叉树就行)

面试得offer了就没看,坑待填

Q:正则表达式是什么文法

面试得offer了就没看,坑待填

三、简答题:(每小题5分,共35分)

请证实是文法的一个句型,并写出该句型的所有短语、素短语以及句柄。 3、 求出下列文法所产生语言对应的正规式。

4、 将表达式((a*d+c)/d+e)*f+g分别表示三元式、四元式、逆波兰式序列 5、 消除下列文法的左递归。

7、对基本块P画出DAG图

假定只有L在基本块出口之后活跃,写出优化后的四元式序列。

A、0型 B、1型 C、2型 D、3型 2、编译程序必须完成的工作有

①词法分析 ②语法分析 ③语义分析 ④代码生成 ⑤中间代码生成 ⑥代码优化

①②③④ B、①②③④⑤ C、①②③④⑥ D、①②③④⑤⑥ 3、LR(K)文法________二义性的。

A、都是 B、都不是 C、不一定都是 4、语法分析的常用方法是________。

①自顶向下 ②自底向上 ③ 自左向右 ④自右向左

A、①②③④ B、①② C、③④ D、①②③

5、用高级语言书写的源程序都必须经过编译,产生目标代码后才能投入运行,这种说法 A、不正确 B、正确

C、由文法的开始符号推出的所有符号串

A、① B、②③④ C、③④ D、①②③④

9、____这样的语言,他们能被确定的有限自动机识别,但不能用正规表达式表示:

A、存在 B、不存在 C、无法判定是否存在 10、LR(K)文法是_________。

A、从左到右分析,共经过K步的一种编译方法。

B、从左到右分析,每次向前预测K步的一种编译方法。

C、从左到右分析,每次向貌似句柄的符号串后看K个输入符号的一种编译方法。

D、从左到右分析,每次走K步的一种编译方法。

13、素短语是指_______的短语。 ①至少包含一个符号

②至少包含一个非终结符号 ③至少包含一个终结符号

④除自身外不再包含其它终结符号 ⑤除自身外不再包含其它非终结符号

⑥除自身外不再包含其它短语 ⑦除自身外不再包含其它素短语 可选项有:

A、①④ B、①⑤ C、①⑥ D、②④ E、③⑤ F、③⑦ G、②⑦

14、算符优先分析属于 分析方法。

A、自顶向下 B、自底向上 C、 自左向右 D、自右向左 15、简单优先分析法每次都是对 进行归约

A、最左短语 B、直接短语 C、句柄 D、素短语 E、最左素短语

A、一个子程序 B、一个仅有一个入口和一个出口的语句 C、一个没有嵌套的程序段

D、一组顺序执行的程序段,仅有一个入口和一个出口

A、是 B、不是 C、无法判断

20、语法分析的任务是

①分析单词是怎样构成的 ②分析单词串是如何构成语句和说明的 ③分析语句和说明是如何构成程序的 ④分析程序的结构 A、 ②③ B、②③④ C、 ③④ D、①②③④ 二、(简答题,共计20分)

(2)写出句型T *P↑(T*F)的短语、直接短语、句柄和素短语。 2、(5分)构造识别下面正规式的NFA

3、(5分)消除文法G[S]的左递归

1、(10分)将下面具有?的NFA确定化和最小化

(1)对下面的文法G[Z]

(1)求出文法中每个非终结符的FOLLOW集

(2)该文法是LL(1)文法吗?构造LL(1)分析表

一、选择题(本大题共20小题,每小题1分,共20分) 1、描述一个语言的文法是___________。

a、唯一的 b、不是唯一的 c、个数有限的 2、简单优先分析法每次都是对___________进行归约。

a、① b、②③④ c、③④ d、①②③④ 4、LR(K)文法________二义性的。

a、都是 b、都不是 c、不一定都是

5、一个上下文无关文法G包括四个组成部分依次为:一组_____、一个_____、一组

a、字符串 b、字母数字串 c、产生式 d、结束符号 e、开始符号 f、文法

6、文法G所描述的语言是__________的集合 a、文法G的字汇表V中所有符号组成的符号串 b、文法G的字汇表V的闭包V*中的所有符号串 c、由文法的开始符号推出的所有符号串

d、由文法的开始符号推出的所有终结符号串。

①自顶向下 ②自底向上 ③自左向右 ④自右向左 可选项有:

a、①②③④ b、①② c、③④ d、①②③ 9、LR(K)文法是_________。

a、从左到右分析,共经过K步的一种编译方法。

 一个文法G,若存在P经过一次或多次推导得到Pa(即能推导出以P开头的式子), 则称G是左递归的。

  左递归分为直接左递归和间接左递归。
  直接左递归经过一次推导就可以看出文法存在左递归,如P→Pa|b。

消除直接左递归的方法:

  1、把所有产生式写成候选式形式。如A→Aa1|Aa2……|Aan|b1|b2……|bm。其中每个a都不等于ε,而第个b都不以A开头。
  2、变换候选式成如下形式:
  A’ →a1A’|a2A’……|anA’|ε

  例1:文法E→E+T|T,T→T*F|F,F →(E)|id消除直接左递归后有:
  E→TE’,E’ →+TE’|ε,T→FT’,T’ →*FT’|ε,F→(E)|id

消除间接左递归的方法:

  要求文法不存在A 经过一次或多次能推导出A和不存在ε产生式(形如A→ε)。 
  1、以某种顺序排列非终结符A1,A2,……,An;
     { 用产生式Ai→a1b|a2b|……|akb代替每个开如Ai→Ajb的产生式,其中,Aj→a1|a2|……|ak是所有的当前Aj产生式;}
    消除关于Ai产生式中的直接左递归性}
  3、化简由步骤2所得到的文法。

  例2:有文法S→Qc|c,Q→Rb|b,R→Sa|a,消除文法的左递归。
  以非终结符号排序为R,Q,S
  把R的产生式代入Q中有:
  把Q的产生式代入S中有:
  消除直接左递归得到结果:
  Q 和 R的产生式是多余的删除,得到最终结果:

一个文法含有下列形式的产生式之一时:

则称该文法是左递归的。

然而,一个文法是左递归时,不能采取自顶向下分析法。

a)把直接左递归改写为右递归:

设有文法产生式:A→Aβ|γ。其中β非空,γ不以A打头。

一般情况下,假定关于A的产生式是:

其中,αi(1≤i≤m)均不为空,βj(1≤j≤n)均不以A打头。

则消除直接左递归后改写为:

消除该文法的直接左递归。

解:按转换规则,可得:

对于间接左递归的消除需要先将间接左递归变为直接左递归,然后再按a)清除左递归。

例4.13:以文法G6为例消除左递归:

解:用产生式(1),(2)的右部代替产生式(3)中的非终结A得到左部为B的产生式:

再把原来其余的产生式A→aB,A→Bb加入,最终得到等价文法为:

c)消除文法中一切左递归的算法

设非终结符按某种规则排序为A1,A2,An

若Aj的所有产生式为:

消除Ai中的一切直接左递归


我要回帖

更多关于 举例说明语法的递归性 的文章

 

随机推荐