面试问题记录

1、XML数据结构有且只有一个根节点,但是可以嵌套

2、JSONObjetWithData:options:error: 使用缓冲区数据来解析

3、writeJSONObject:toSteam:options:error: 使用流来解析

4、XML解析方式有哪些?各自的过程与优势分别是什么?

(1)SAX解析:读入的过程就是其解析的过程,类似于流媒体,是基于事件驱动的,当遇到tags后将触发事件对应的回调函数进行相应处理,可以指定条件随时停止。仅能顺序地读且不可修改,适合大型XML文档的解析,速度快。

(2)DOM解析:读入整个XML文档分析节点最后建立一棵文档树,不仅可以随机读取节点,还可以任意修改节点(遍历、插入、删除、修剪)。缺点是只适合小型文档,因为需在内存中利用深度优先搜索方式生成树,比较费时。

5、grep:使用正则表达式统计文本,并把匹配的行打印出来

6、wc:统计字节数、行数、字数

7、解释程序不是直接执行,而是转换成机器可识别码之后才能执行

8、M阶的B-树,树根结点中所含关键字数目最多为M-1,最少为M/2-1 向上取整个

9、数据传输率 = 记录位密度 * 线速度

10、进程通信方式?

(1)管道(PIPE、半双工)

(2)有名管道(named PIPE)

(3)信号量(semophore)

(4)消息队列(message queue)

(5)信号(signal)

(6)共享内存(shared memory)

(7)套接字(socket)

11、反射慢在哪里?

(1)由于是本地方法调用,让JVM无法优化

(2)反射方法调用还有验证过程和参数问题,参数需要装箱拆箱、需要组装成Object[]形式、异常的包装

12、SQL查询各班级成绩最高的同学?

select * from exam where (class_id,  score) in (select class_id, MAX(score) from exam group by class_id)

13、SQL注入是什么?如何解决?

定义:在表单中填入非法的SQL片段,导致后端在解析SQL时,最终得到可以窃取敏感信息的SQL语句。

解决:

(1)PrepareStatement类仅把传入的参数当做其本身,不参与前后的SQL语法解析;

(2)在提交表单时对参数进行正则表达式检测,对非法子串如” — 这些进行替换。

14、XSS(跨站脚本攻击)和CSRF(跨站请求伪造)分别是什么?区别?

XSS定义:是在具有漏洞的HTML和JS代码中植入一段非法的脚本语句,从而修改原本正常网站的逻辑,获取到想要的信息(如把填写的用户名和密码发送到自己的服务器上)。

CSRF定义:是事先获取到用户的认证信息后,然后伪装成正常用户的身份,在站点上执行一些并非用户本人希望执行的操作,如发布一些假评论、假广告。

区别:XSS利用的是用户对网站的信任,CSRF利用的是网站对用户的信任,CSRF由于已经拥有了合法用户的身份,所以服务器要识别其真面目将难上加难,危害性更大。

15、数据库中索引是什么?为什么采用这种结构?优缺点?适用场景?

定义:索引是对数据库表中一列或多列的值进行排序的一种结构,通常采用B+树实现。

为什么采用B+树结构:关系型数据库通常存储的索引能达到亿级,因此为了减少内存的占用,索引通常都是放在磁盘上的,那么此时查询的速度完全取决于磁盘IO的次数了。而B+树具有稀疏节点和稠密节点,稀疏节点仅作为中间节点串联相邻的节点,并不存在指向具体数据记录的指针,可存放的关键字数量变多,,而稠密节点恰好存储了键值与对应数据的节点,大大减少了磁盘IO次数。而B-树的每个节点存有键值与数据域(指向记录物理位置的指针),并未存储真实数据,故仍需磁盘IO,查询效率很低。

优点:索引加快了查询速度、表与表的连接速度等。

缺点:需要更多时间去建立和维护索引、同时占用很大空间。

适用场景:索引适合经常需要查询的场景,而不适合经常需要更新的场景。

16、数据库中的聚集索引和非聚集索引分别是什么?有什么不同?

聚集索引定义:

键值逻辑顺序与物理顺序相同,一张表仅一个,其叶级存储的是真实的数据页面,已经用指针将叶节点互相串联了起来,非常便于范围查找(只用先找到起始数据,再往下遍历完偏移量即可)

非聚集索引定义:

键值逻辑顺序与物理顺序不同,其叶级存储的仍然是索引,要通过指针才能得到真实数据。

17、B-树和B+树分别是什么样的?相对二叉排序树有何优势?B+树的优点?B-树的优点?

定义:两种树的结构都是一个n叉排序树,每个节点通常有多个孩子和值区间,且由指针指向下一层的更细区间。其中B-树的每个节点不仅作为索引节点(关键字+数据域指针)用,还附带了指向数据域的指针,可以方便的定位数据。而B+树的非叶节点均仅作为索引节点用,不附带指向数据域的指针,只有叶节点附带指针,且叶节点之间互相串联,非常便于顺序或范围访问。B+树经常用在数据库和操作系统的文件系统中。

btree

相对二叉排序树优势:

索引往往很大,需要存储在外存中,因此磁盘IO的次数就成为了性能的瓶颈,要尽量减少IO才能提升查询效率。B树和B+树中存在大量的关键字及分支,相较二叉排序树,大大降低了树的高度,将原来的深度查询转换成了代价更小的每个索引节点的线性区间查询中,仅有少量节点需要访问外存,能很快访问到数据。

B+树优点:

(1)B+树改进了B树,让内结点只作索引使用,去掉了其中指向data record的指针,使得每个结点中能够存放更多的key,因此能有更大的出度。这样就意味着存放同样多的key,树的层高能进一步被压缩,更重要的是可以一次性从盘块中读取多个关键字,而不用像B树那样把本来一次IO就能实现的拆分成几次IO,减少了IO次数,使得检索的时间更短。

(2)另外比较次要的,由于底部的叶子结点是链表形式,因此也可以实现更方便的顺序遍历。

B-树优点:

在基于外存访问的查询场景下,B-树相较于二叉排序树的优势已经非常明显。但相较于B+树来说优点不是特别突出,那就是:因为B-树的每个节点都存放了数据指针,对于那些会被经常频繁查询到的数据来说,可以将它们的关键字放在离根节点更近的位置,这样就从侧面进一步降低了查询深度。

Leave a Comment.