1、什么情况下使用Python语言开发比较好?/你对Python怎么看?/。。。
1、python的设计哲学“简单、明确、优美”,决定了python开发的易用性和高效性,同样的业务需求,C++需要一周,python可能三天可以完成,
2、动态解释型脚本语言,跨平台
3、很多高校开始开设python教学班
4、潜在的问题也会少很多,因为python有非常强大的第三方库,同时封装了很多复杂的底层语言,如内存分配释放,指针的相关操作
2、开发语言选型需要考虑多个方面:
1、业务本身特点适合哪种语言
2、公司历史技术栈和人员技术储备倾向哪种语言
3、python是否存在内存泄露
内存泄漏(Memory Leak)是指程序中己动态分配的内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
python会存在内存泄露:
例如当对象A中引用对象B,同时对象B中又引用对象A,A和B出现循环引用,python中使用的引用计数的内存管理方式,此时A和B的引用计数将永远大于1,解释器无法自动回收对象A和B的内存空间,即产生了内存泄露。
l1 = [1, 2, 3] l2 = [4, 5, 6] l1.append(l2) l2.append(l1) print(l1) print(l2) # [1, 2, 3, [4, 5, 6, [...]]] # [4, 5, 6, [1, 2, 3, [...]]]
4. 过往的项目中有没有出现过性能问题?
有
对象A,B之间循环引用,导致内存泄露
5. 什么是协程
协程是一种用户态的轻量级线程,就是由用户自己控制调度,从而更高效利用CPU
一个线程在执行是,只有当子程序内部发送中断或阻塞时,才会交出线程的执行权交给其他子程序,在适当的时候在返回来接着执行,省去了线程间频繁切换的时间开销,同时也解决了多线程加锁造成的相关问题
6. 知道mysql的事务隔离吗?/事务隔离分哪几个级别?/事务隔离性怎么保证/...
数据库支持事务本身需要具备四个特性:原子性、一致性、隔离性、持久性 ACID
原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
A转账200 给B : A-200 B+200 这两个动作必须一起成功后者一起失败
一致性:事务前后数据的完整性必须保持一致
A-200 B+200 符合逻辑运算
隔离性:并发执行的多个事务之间互不干扰
持久性:事务一旦被提交,他对数据库中数据的改变是永久性的
事务的隔离性:并发执行的多个事务之间互不干扰
事务隔离的级别:
脏读:一个事务读取到另一个事务未提交的数据
不可重复度:一个事务内读取表中的某一行数据,多次读取结果不同(其他事务更改了数据)
虚读(幻读):一个事务内读取到别的事务插入的数据,导致前后读取不一致
mysql数据库事务隔离有四个级别: RU, RC,RR,SE(可序列化)
默认是RR级别: 可以处理脏读和不可重复读问题,SE可以解决幻读问题,但性能消耗大,一般不用,
mysql的RR级别引入了GAP LOCK(间隙锁),可以在RR级别解决幻读问题, innodb间隙锁就是不仅仅锁住所需要的行(如果锁住的这行不存在)还会锁住一个范围的行,这个范围依据锁住的这行而定。上下刚好是两个相邻索引叶节点的范围。包含下范围,不包含上范围。
7、 MySQL和MongoDB区别?
mysql是关系型数据库,存储引擎有MyISam, InnoDB, Merge等目前大都使用支持事务的InnoDB存储引擎。myslq5.7开始支持json格式,向nosql靠近
MongoDB 18年8月发布的4.0开始支持事务,当前其默认的存储引擎wiredtiger性能非常卓越
区别:
mysql索引底层是用B+树实现,mongoDB采用B树。
B树的特性决定MongoDB在海量读写的情况下性能比mysql优越,B+树的特性决定Mysql更适合多区间范围查询的业务需求
总体来说,如果是海量数据高并发读写,从技术角度推荐MongoDB,如果是数据结构相对统一,同时对于事务要求较高,个人倾向于Mysql
8. 什么是IO多路复用?/epoll和select,poll有什么区别?
I/O多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。
一个线程,通过记录IO流的状态来同时管理多个I/O,可以提高服务器的吞吐能力
select:最多支持1024个链接,轮询,非线程安全
poll:去掉1024的限制,轮询,非线程安全
epoll:去掉限制,不轮询,线程安全,只支持linux系统,绝大部分tcp链接处于就绪态时,轮询方式更好
9. 了解过tornado或sanic吗?/有木有接触过其他web框架
了解过,不过之前公司项目中大多框架选用django,少部分使用flask。
django设计哲学简便,快速,强调代码复用,大而全是代表特性
falsk相对小而精
tornado和sanic是异步框架(异步框架),性能非常卓越,tornado是facebook的开源项目,应用颇为广泛,sanic是基于python3.5的近些年兴起的框架,用到了很多python3的新特性
10、同步、异步、并行、并发
并发:多个任务交替执行,
并行:多个任务如果是单核处理器交替执行,在多处理器中可以重叠执行
同步:一个进程的输出作为另一个进程的输入,存在依赖关系
异步:彼此独立