Python面试相关

来源:互联网 发布:淘宝开店起名 编辑:程序博客网 时间:2024/05/21 23:34

去参加了几个面试,记录一下问到的题目和答案。应试的是Python开发和运维相关。

1:MySQL的内存引擎有几种(相对的作用和优势)?

参考博客:MySQL中的各种引擎
InnoDB、MyISAM、HEAP(MEMORY)、BLACKHOLE、ARCHIVE、CSV、PERFORMANCE_SCHEMA、Merge、Federated和Cluster/NDB等。 

MyISAM:基于ISAM数据库引擎。提供ISAM里没有的索引和字段管理;有表格锁定机制用于优化多个并发的读写操作。MyISAM强调快速读取操作,主要用于高负载的select;支持三种不同的存储结构:静态型(空间换取高性能)、动态型(空间占比小,碎片多,降低性能)、压缩型(适用创建生命周期内只读的表)。

MEMORY:通过在内存中创建临时表存储数据;拥有极高的插入、更新和查询效率;默认使用哈希(HASH)索引,速度比使用B-+Tree型要快,也可以使用B树型索引;由于适用内存存储,故MySQL出现问题或重启后数据会消失,适合周期短的一次性表。

CSV:会在MySQL安装目录data文件夹中的和该表所在数据库名相同的目录中生成一个.CSV文件(可将csv类型文件当做表处理);不支持索引,无主键列,字段不可为null。

BLACKHOLE(黑洞):支持事务,所有数据写入都会消失,用于做日志记录或同步归档的中继存储;除非有特别目的,否则不适合使用。

ARCHIVE:非常适合存储大量独立、作为历史记录的数据;与innodb,myisam不同:提供压缩功能,插入速度高效;不支持索引,查询性能略差;

PERFORMANCE_SCHEMA:主要用于收集数据库服务器性能参数。提供进程等待的详细信息,包括锁、互斥变量、文件信息;保存历史的事件汇总信息,为提供MySQL服务器性能做出详细的判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期。

InnoDB:提供了ACID事务支持、系统崩溃修复能力和多版本并发控制(即MVCC)的行级锁;该引擎支持自增长列;5.5为默认引擎。

Merge:将一定数量的MyISAM表联合而成一个整体。

Federated:不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库;非常适合数据库分布式应用。

Cluster/NDB:用于多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大、安全和性能要求高的场景。

ISAM:读取数据速度快,内存和存储资源占用小;不支持事务处理、外来键、容错、索引。MySQL 5.1及其以上版本不再支持。

Berkeley:支持COMMIT和ROLLBACK等其他事务特性;5.1以上不再支持。

2:nginx均衡负载?(抽时间了解nginx的配置具体)

参考博客:nginx的5中负载模式
所谓负载均衡,即分摊到多个操作单元进行执行,提供一种廉价有效的方式扩展网络设备和服务器带宽,增加吞吐量,加强数据处理能力,网络灵活性和可用性。
nginx可作为反向代理服务器均衡负载;具有处理并发的优势。
nginx拥有的一个 upstream 模块可跨越单机限制,进行网络数据的转发和处理。
负载方式:
1.轮询(默认):每个请求按时间逐一分配到不同服务器,会自动剔除down掉的后端服务器。
2.weight:指定轮询几率,weight和访问几率成正比,用于后端服务器性能不佳的情况下。默认为1,weight越大,负载比重越大。
upstream bakend {      server 192.168.0.14 weight=10;      server 192.168.0.15 weight=10;  }
3.ip_hash:每个请求按访问ip的hash结果分配,访客访问固定后端服务器,可解决session的问题。
upstream bakend {      ip_hash;      server 192.168.0.14:88;      server 192.168.0.15:80;  }  
4.fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {      server server1;      server server2;      fair;  }  
5.url_hash:按访问url的hash结果来分配请求,每个url都会分配给同一个后端服务器,适用于后端服务器作为缓存时。
upstream bakend{#定义负载均衡设备的Ip及设备状态      ip_hash;      server 127.0.0.1:9090 down;  #不参与负载    server 127.0.0.1:8080 weight=2;      server 127.0.0.1:6060;      server 127.0.0.1:7070 backup;  # 其他所有后端服务器down或忙时才请求backup机器,因此这台压力最轻}  

3:多人上传代码时如何管理git?

遵循上传规范
1.开启代码保护,上传至master分支或master与其他分支合并时必须经过审核
2.不可直接在master上进行开发,更新master为最新内容后在此基础上创建新的分支(git checkout -b newMergeName),在新的分支上上传代码(git add .,git commit -m newMergeName),最终合并到master分支上。

4:Apache

5:Tomcat

0 0