python企业真题实战 - 广州锦行面试题
面试题:
- 数据分析的模块有深入了解过吗?
- 前端引用css的几种方式?
- MySQL与MongoDB的区别
- redis数据库怎么用?
- MySQL查询优化?
- 蜜罐怎么解释?
- 单线程做网络并发怎么实现?
- GIL对python的影响?
- 爬虫类库requests库的底层库原理?
参考答案:
-
数据分析的模块有深入了解过吗?
答:数据分析的常用模块有Matplotlib、Numpy和Pandas。
Matplotlib是专门用于开发2D图标的,使用起来简单,以渐进、交互式方式实现数据可视化。
Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
Pandas则是两者的整合,以Numpy为基础,借力Numpy模块在计算方面性能高的优势,基于matplotlib,能够简便的画图,还有属于自己的独特数据结构。 -
前端引用css的几种方式?
答:行内式、嵌入式、外链式。在实际开发中,一般外链式使用的比较多,因为单个网页css样式存放在一起,方便维护。 -
MySQL与MongoDB的区别?
答:①两者都是开源的数据库系统,MongoDB属于文档型数据库,数据都存放在内存里,也可以说是内存型数据库;而MySQL是存放在存储引擎上的,所以能处理远超内存总量的数据;
②MongoDB是非关系型数据库的代表之一,而MySQL是关系型数据库的代表之一;
③MongoDB不支持事务,拥有弱一致性的特点,更能保证用户的访问速度,而MySQL支持事务,缺点是在海量数据处理与热数据时,效率会显著变慢; -
redis数据库怎么用?
答:redis一般使用在网站做缓存、及临时数据处理,例如网站日志、图片验证码、用户浏览历史等。 -
MySQL查询优化?
答:MySQL分为两种优化,数据表设计优化和MySQL查询语句优化。
①:表设计优化:a.对较频繁的作为查询条件的字段建立索引;
b.可以考虑结合使用内在型数据库,如Redis,进行混合存储,提升查询效率;
c.选择恰当的数据类型,如整型的选择;
d.可以做冗余字段设计(空间换时间的思想,属于一种反范式设计),减少join的操作。
②:查询语句优化:a.使用慢查询工具找出效率低下的SQL语句进行优化;
b.SQL语句尽量大写,对于小写的sql语句,通常数据库在解析sql语句时,通常会先转换成大写再执行;
c.尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE;
d.查询时使用select明确指明所要查询的字段,避免使用select *的操作。 -
蜜罐怎么解释?
答:蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力(百科)。 -
单线程做网络并发怎么实现?
答:使用Node.js标准库。单线程解决高并发的思路就是采用非阻塞、异步编程的思想,而Node.js结构中的libuv它为 Node.js 提供了跨平台,线程池,事件池,异步 I/O 等能力;
每个Node.js进程只有一个主线程在执行程序代码,形成栈,还维护了一个“事件队列“(Event queue),当有网络请求或其他异步操作到来时,都会被放入“事件队列”中;当主线程执行完毕后,会通过Vent Loop(事件循环机制)一个一个将事件取出,从线程池分配一个线程去执行;当有事件执行完毕后,会通知主线程,主线程执行回调,线程归还给线程池;而主线程不断检查事件队列中是否有未执行的事件,直至所有事件处理完毕。
nodejs之所以单线程可以处理高并发的原因,在于libuv层的事件循环机制,和底层线程池的实现。 -
GIL对python的影响?
答:解决多线程之间数据完整性和状态同步的全局解释器锁,是Cpython解释器中引入时特有的一种概念。
因为这把锁时全局有效,当其他线程需要执行时,就需要获取到GIL的许可才能有cpu执行的资源,这是GIL影响python性能的主要的原因。 -
爬虫类库requests库的底层库原理?
答:根据第一句话的翻译是请求的HTTP库。
待解决(有大佬为我解答一下吗?)。