记一次面试服务端实习生的知识点不足之处

今天下午参加了一家非常不错的公司,面试官人很好,虽然有些问题没答对,但是面试官还是温馨的提示了告知了问题的答案。

下面为一些未答上或者答的不好的问题以及答案:

javascript框架:

        由于对这个方面的内容没有过深的学习和了解过,所以当答这个问题的时候,脑子中还是一头雾水的....

后来立马查询了javascript框架的一些知识,有如下常用框架:

Jquery

这个框架相对在学习中还算接触了解学习过并且使用过。

好处:

jquery是一个快速、简洁的JavaScript框架,帮助你简化查询DOM对象,处理事件,制作动画,和处理Ajax交互过程。利用jQuery将改变你编写JavaScript代码的方式。原先用20行代码完成的功能,jQuery用10行就可以轻松搞定。

ps:ajax的优点这个当时回答没有答到关键点,ajax关键优点异步传输,局部刷新。

以下几个框架就是日常学习没有用过的框架,补充了解:

Dojo

Dojo 是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供 Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。Dijit是一个可更换皮肤,基于模板的WEB UI控件库。DojoX包括一些创新/新颖的代码和控件:DateGrid,charts,离线应用,跨浏览器矢量绘图等。 

YUI(Yahoo! User Interface Library) 

Yahoo! User Interface (YUI) Library是一组采用DOM scripting,Dhtml和Ajax等技术开发的Web UI控件和工具。中文说过来就是“Yahoo用户界面库”。 
    Yui 工具包利用DOM脚本来简化浏览器内的开发(in-browser devolvement),使用DHTML和AJAX的特性开发所有的Web程序。 

    YUI控件库为你页面提供一组高交互性性的可视化元素。这些元素完全在客户端创建维护,不需要请求服务器进行页面刷新。 

Mootools 

MooTools 是一个简洁,模块化,面向对象的JavaScript框架。它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代码。 Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计 也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。 

prototype :

prototype是一个易于使用、面向对象的JavaScript框架。它封装并简化和扩展一些在Web开发过程中常用到JavaScript方法与Ajax交互处理过程。 

script.aculo.us 

script.aculo.us 是一个易于使用,支持多种浏览器,用于增强Prototype的JavaScript框架。script.aculo.us包含:动画框架 (animation framework),拖放(drag and drop), Ajax控件,DOM工具,单元测试等。

ExtJS

ExtJS是一个跨浏览器,用于开发RIA(Rich iInternet Application)应用的JavaScript框架。提供:高性,可定制的Web UI控件库。良好的设计、丰富的文档和可扩展的组件模型。 

服务器架构:

        之前只接触过阿里云的轻量服务器和ECS服务器,没有过多了解多少有关服务器架构的知识。故本次答的也不是特别令人满意。

按服务器的处理器架构(也就是服务器CPU所采用的指令系统)划分把服务器分为CISC架构服务器RISC架构服务器VLIW架构服务器三种。

CISC服务器

CISC的英文全称为“Complex Instruction Set Computer”,即“ 复杂指令系统计算机”,从计算机诞生以来,人们一直沿用 CISC指令集方式。早期的 桌面软件是按CISC设计的,所以,微处理器(CPU)厂商一直在走CISC的发展道路,包括Intel、AMD,还有其他一些已经更名的厂商,如TI(德州仪器)、Cyrix以及VIA( 威盛)等。在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。 顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。CISC架构的服务器主要以IA-32架构(Intel Architecture, 英特尔架构)为主,而且多数为中低档服务器所采用。
如果企业的应用都是基于NT平台的应用,那么服务器的选择基本上就定位于IA架构(CISC架构)的服务器。如果企业的应用主要是基于 Linux操作系统,那么服务器的选择也是基于IA结构的服务器。如果应用必须是基于Solaris的,那么服务器只能选择SUN服务器。如果应用基于AIX(IBM的Unix操作系统)的,那么只能选择IBM Unix服务器(RISC架构服务器)。

RISC服务器

RISC的英文全称为“Reduced Instruction Set Computing”,中文即“精简指令集”,它的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。在中高档服务器中普遍采用这一指令系统的CPU,特别是高档服务器全都采用 RISC指令系统的CPU。在中高档服务器中采用RISC指令的CPU主要有Compaq(康柏,即新惠普)公司的Alpha、HP公司的 PA-RISC、IBM公司的Power PC、 MIPS公司的MIPS和SUN公司的Sparc。

VLIW服务器

VLIW是英文“Very Long Instruction Word”的缩写,中文意思是“超长指令集架构”,VLIW架构采用了先进的EPIC(清晰并行指令)设计,我们也把这种构架叫做“IA-64架构”。每时钟周期例如IA-64可运行20条指令,而CISC通常只能运行1-3条指令,RISC能运行4条指令,可见VLIW要比CISC和RISC强大的多。VLIW的最大优点是简化了处理器的结构,删除了处理器内部许多复杂的控制电路,这些电路通常是超标量芯片(CISC和RISC)协调并行工作时必须使用的,VLIW的结构简单,也能够使其芯片制造成本降低,价格低廉,能耗少,而且性能也要比超标量芯片高得多。基于这种指令架构的微处理器主要有Intel的IA-64和AMD的x86-64两种。

Redis和mongodb、Memcached的区别:

Memcached

优点:
    Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量。
支持直接配置为session handle。

局限性:
    只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。
 无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。
 无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。
 Memcached内存分配采用Slab Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重value设计。
Redis
优点:

支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)
支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。
支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。
单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。
支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。
支持简单的事务需求,但业界使用场景很少,并不成熟。

局限性:

Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。

支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。
Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。
Mc和Redis都是Key-Value类型,不适合在不同数据集之间建立关系,也不适合进行查询搜索。比如redis的keys pattern这种匹配操作,对redis的性能是灾难。

mongodb

优点:

文档结构的存储方式,能够更便捷的获取数据

内置GridFS,支持大容量的存储

内置Sharding,分片简单

海量数据下,性能优越

支持自动故障恢复(复制集)

缺点:

不支持事务操作

占用空间过大

MongoDB没有如MySQL那样成熟的维护工具

无法进行关联表查询,不适用于关系多的数据

复杂聚合操作通过mapreduce创建,速度慢

模式自由,  自由灵活的文件存储格式带来的数据错误

MySQL四种存储引擎:

由于在以前的学习过程没有接触过数据库存储引擎,故本次当面试官问到这个问题的时候也是大眼瞪小眼,一头雾水。。而且mysql的核心就是存储引擎。。。

InnoDB存储引擎:

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。InnoDB主要特性有:

1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合

2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的

3、InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上

4、InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键

5、InnoDB被用在众多需要高性能的大型数据库站点上

InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件

MyISAM存储引擎:

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。MyISAM主要特性有:

1、大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持

2、当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成

3、每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16

4、最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上

5、BLOB和TEXT列可以被索引

6、NULL被允许在索引的列中,这个值占每个键的0~1个字节

7、所有数字键值以高字节优先被存储以允许一个更高的索引压缩

8、每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快

9、可以把数据文件和索引文件放在不同目录

10、每个字符列可以有不同的字符集

11、有VARCHAR的表可以固定或动态记录长度

12、VARCHAR和CHAR列可以多达64KB

使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)

MEMORY存储引擎

MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。MEMORY主要特性有:

1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度

2、MEMORY存储引擎执行HASH和BTREE缩影

3、可以在一个MEMORY表中有非唯一键值

4、MEMORY表使用一个固定的记录长度格式

5、MEMORY不支持BLOB或TEXT列

6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引

7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)

8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享

9、当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)

ARCHIVE引擎

这个存储引擎基本上用于数据归档;它的压缩比非常的高,存储空间大概是innodb的10-15分之一所以它用来存储历史数据非常的适合,由于它不支持索引同时也不能缓存索引和数据,所以它不适合作为并发访问表的存储引擎。Archivec存储引擎使用行锁来实现高并发插入操作,但是它不支持事务,其设计目标只是提供高速的插入和压缩功能。

数据库的优化方法:

由于在以前的学习过程没有过多接触数据库的优化,所以在这次面试过程中对这个问题答的也不是很满意。

1、选取最适用的字段属性

2、使用连接(JOIN)来代替子查询(Sub-Queries)

3、使用联合(UNION)来代替手动创建的临时表

4、事务

5、锁定表

6、使用外键

7、使用索引

8、优化的查询语句

SQL注入:

至于sql注入应该算是从前从未接触过的概念吧,当面试官问的时候我回答的是存储过程,当时就把面试官逗笑了,后来面试官告诉我是SQL安全性问题,当时尴尬至极....

sql注入概念:

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

(简单来说:sql注入本来只是让用户输入内容,但是却输出的命令,还是在管理员毫不知情的情况下操作)

SQL注入攻击可以分为:平台层注入、代码层注入。

SQL注入的产生原因通常表现在以下几个方面

1.不正当的类型处理。

2.不安全的数据库配置

3.不合理的查询集处理

4.不当的错误处理

5.转义字符处理不合适

6.多个提交处理不当    

以上就是对整个面试过程疑惑不足点的总结了,如果补充还请多多评论




 





猜你喜欢

转载自blog.csdn.net/Jet_Green/article/details/80597853