面试题学习0209

1.下面哪些项是TCP具有的能力?()
*有链接
*数据库可靠传输
*端到端流量控制

2.在公司局域网上 ping www.bilibili.com 没有涉及到的网络协议是?()
*TCP

3.以下哪个数据结构底层使用红黑树实现的?()
*map

4.以下ip地址钟不属于私网地址的是:()
*127.2.0.1

5.下列排序算法中,最坏情况时间复杂度与其他选项不同的是()
*归并排序

6.下面哪一项正则能正确的匹配网址:http://www.bilibili.com/video/av21061574()
*/^(http://)?(\w+).bilibili.com/?video/av(\d{1,8})/?$/

7.以下设计模式的应用场景中,属于代理模式的选项有()
*防火墙
*CopyOnWriteList

8.由3个“1”和5个“0”组成的8位二进制补码,能表示的最小整数()
*-125

9.深度为k的二叉树至少由几个结点()
*2^k-1

10.以下软件设计模式的应用场景中,属以下git命令中,用于显示工作区和当前分支文件的差异的命令是()
*git diff HEAD

11.下面哪些拘束属于局域网技术()
*FDDI
*令牌环

12.线程的哪些资源可以共享()
*堆
*静态变量

13.列哪个是建立TCP连接的正确流程:()
*客户端向服务器端发送SYN包;服务端向客户端发送SYN+ACK;客户端回复ACK

14.以下说法正确的是:()
*非静态方法不存在线程安全的问题

15.两个人抛硬币,规定第一个抛出正面的人必须穿女装,请问先抛的人穿女装的概率多大?()
*2/3

16.有限状态自动技能识别()
*正规文法

17.按照二叉树的定义,具有3个节点的二叉树有几种。()
*5

18.无向图G=(V,E),其中V={a,b,c,d,e,f} E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)}对盖度进行深度优先遍历,得到的顶点序列正确的是()
*a,b,e,d,f,c

19.如果文法G存在一个句子,满足下列条件之一时,则称该文法是二义文法。()
*该句子有两个不同的最左推导
*该句子有两个不同的最右推导
*该句子有两棵不同的语法树

20.设指针q只想点链表中结点A,指针p指向单链表中节点A的后续结点B,指针s指向被插入的结点X,则在节点A和节点B插入节点X的操作序列为()
*q->next=s; s->next=p;

21.a-(b+c)*d+e/f的逆波兰式是
(1) abc+d-ef/+

22.当前发送帧数据为101010,发送方和接收方约定除数为1101,用循环冗余算法进行封装后,接收方拿到的数据是()
*101010011

23.一个完全二叉树有870个节点,其叶子节点个数为
*435

24.设某棵二叉树的中序遍历序列为cadb,前序遍历序列为acbd,这个二叉树的后续遍历序列是
*cdba

25.设一组初始关键字序列为(38,65,97,76,13,27,10),则第3套冒泡排序结束后的结果为
*38,13,27,10,65,76,97

26.在TCP/IP网络中,TCP协议工作在
*传输层
*应用层

27.HTTP协议中的禁止访问(Forbidden)的状态码是
*403

28.在SQL查询时,如果去掉查询结果中的重复组,需要使用
*distinct参数

29.执行C语言程序段“y=1;x=5;while(x–);y++;”后,y的值为
*2

30.对下列递归函数int f(int n) {return((n==0)?1:f(n-1)+2):},函数调用f(3)的返回值是
*7

31.实现一个HTML语法检查器。HTML语法规则简化如下:标签必须闭合,可以由开始和结束两个标签闭合,如

,也可以自闭合,

标签可以嵌套如
或者
,但是标签不能交叉:
是不允许的标签里可以有属性

属性的规则是name=“任意非引号字符”,多属性声明之间必须有空格,属性声明不符合规则时,整段HTML都算语法错误
输入文本只会出现字母a-z和<>"=
请用任意语言实现一个HTML语法检查器函数,有语法错误返回1,没有语法错误返回0

import java.util.*;
import java.util.Stack;

public class Main{

public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    String str = input.nextLine();
    int result = 1;
    if(solve(str)) result = 0;
    System.out.println(result);
}
 
public static boolean solve(String str){
    str = str.trim(); //消除前后的空格
    if(str == null && str.length() == 0) return false;
    Stack<String> stack = new Stack<>(); //记录标签的入栈顺序
    int i = 0;
    while(i < str.length()){
        if(i == 0 && str.charAt(i) != '<') return false; //第一个字符不是<,则表明不是以标签开始
        if(i == str.length() - 1 && str.charAt(i) != '>') return false; //最后的字符不是>,则表明不是以标签结束
        if(str.charAt(i) == '<'){
            int j = i + 1;
            //'<'之后如果是标签,紧跟在'<'之后的字符必定是a-z或者'/'
            if(j < str.length() && (str.charAt(j) >= 'a' && str.charAt(j) <= 'z' || str.charAt(j) == '/')){
                //获取标签字符串<xx xx="">
                boolean inStr = false; //是否处于字符串"里面
                while(j < str.length()){
                    if(!inStr && str.charAt(j) == '>'){  //标签结束
                        if(!checkAtt(str.substring(i + 1, j), stack)) //传入的标签已经去除'<'和'>'字符
                            return false; //属性有语法错误
                        i = j;
                        break;
                    }
                    else if(str.charAt(j) == '"') inStr = !inStr;
                    j++;
                }
            }
        }
        i++;
    }
    if(stack.isEmpty()) return true;
    return false;
}
 
public static boolean checkAtt(String str, Stack<String> stack){  //处理标签里面的属性
    if(str == null && str.length() == 0) return true;
    int type = 0; //记录标签的类型,0为开始标签<x>,1为结束标签</x>,2为自闭合标签<x/>
    if(str.charAt(0) == '/'){  //判断是否是结束标签
        if(!(str.length() >= 2 && str.charAt(1) >= 'a' && str.charAt(1) <= 'z')) return false; //结束标签的'/'之后必须紧跟字母
        type = 1; //为结束标签
        str = str.substring(1);
    }
    str = str.trim(); //去除字符串后面的空格
    if(str.charAt(str.length() - 1) == '/'){ //判断是否是自闭合标签
        if(type == 1) return false; //不能同时为结束标签,又是自闭合标签
        type = 2;
        str = str.substring(0, str.length() - 1);// 去除最后的'/'
    }
    int i = 0;
    //获取标签的名字,并判断是否符合闭合规则
    while(i < str.length() && str.charAt(i) != ' ') i++;
    String name = str.substring(0, i);
    if(type == 0) stack.push(name);
    else if(type == 1){
        if(!stack.isEmpty() && stack.peek().equals(name)) stack.pop();
        else return false;
    }
    //判断其属性是否有语法错误
    boolean hasAtt = false; //判断该标签是否有属性,针对结束标签不能有属性
    boolean hasBlank = false; //判断属性name之前是否有空格
    while(i < str.length()){
        while(i < str.length() && str.charAt(i) == ' ') {hasBlank = true; i++;}
        while(i < str.length() && str.charAt(i) != '=' && str.charAt(i) != ' ') i++; //获取属性名字
        if(i < str.length() && str.charAt(i) == '='){ //如果没有'='说明不是属性,不进行处理
            i++;
            if(i >= str.length() || str.charAt(i) != '"') return false; //'='之后必须是双引号
            i++;
            while(i < str.length() && str.charAt(i) != '"') i++; //寻找下一个双引号
            if(i >= str.length()) return false;
            if(!hasBlank) return false; //属性之前没有空格,语法错误
        }
        hasBlank = false;
        hasAtt = true;
        i++;
    }
    if(type == 1 && hasAtt) return false; //结束标签不能有属性
    return true;
}

}

/*

1、’<’之后的字符如果不是a-z,则认为不是开始标签,可认为是标签的文本部分

2、“</”之后的字符如果不是a-z或者空格,则认为不是结束标签,认为是标签的文本部分

3、结束标签不能有属性,<a/>中’/’之后不能有属性

4、标签的文本部分可能是单独的双引号(例子:<div>”</div>,输出0)

5、题目说属性的规则是name=”任意非引号字符”,所以属性的’=’前和后都不能有空格

6、题目说属性之间必须有空格,这说明不是属性之间,就允许没有空格。超级坑的例子:

<fff><a name="x></a></fff><div>"/></fff><x o="p" q="rst"><z addr="></x>>"></z><y/><x/></x><u v="sfa"d"d"/>

答案输出0。最后的v=”sfa”d”d”,在不违背题目条件的情况下,只能认为v=”sfa”是属性,而d”d”不是属性,可以没有空格。同时也说明了,在标签里不是属性的字符串是允许存在的,没有错误的。

7、整个HTML字符串的前面和后面不能是文本内容

8、采用stack判断标签的闭合状态

9、如果采用练习模式,是没有例子的。估计是因为提示的例子是HTML字符串,所以浏览器会视其为html代码而执行,so可以采用浏览器检查代码看例子。当然浏览器会对错误的字符串进行处理,比如<a/>,在浏览器里会被处理为<a></a>。如果只有<a>,没有结束标签时,浏览器会自动补齐,添加</a>

10、我是菜鸟,对html的语法规则不是很了解,想了两天,呜~好惨
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值