面试准备

Posted yijue-lu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试准备相关的知识,希望对你有一定的参考价值。

首行占位

Python相关

1.Python3特性和变化

  1.Python3默认编码是UTF-8,2为ASCII
  2.Python3中只有int,2中有int跟long,其中int不能超过sys.maxint
  3.Python3中print是一个函数,需要带括号,2中不需要
  4.Python3中input接收到的是str,2中接受到的是int(raw_input接受str)
  5.Python3中range返回的是可迭代对象(节省内存),2中是列表

 

2.GIL

  全局解释器锁,作用是保证一个进程同一时刻只有一个线程在运行

  产生原因:Python的线程是调用C语言的原生线程,当线程执行之后python解释器就无法对其进行控制,解决多线程之间数据完整性和状态同步,就有了GIL锁

  释放时机:线程开始IO操作,解释器每隔100opcode(操作码)或15ms

 

3.解释器

  1.CPython:应用最广泛

  2.IPython:基于CPython,增强交互体验

  3.PyPy:执行速度快(对代码进行动态编译,注意不是解释)

  4.JPython:运行在java平台上的解释器,把代码编译成java字节码执行

  5.IronPython:.net

 

4.循环引用

  是什么:

  解决方法:

    1.弱引用:weakref.ref

    2.手动回收:gc.collect()

 

5.内存回收

  1.引用计数

  2.分代回收

  3.标记-清除

  

6.进程、线程、协程

  进程:系统进行资源分配和调度的基本单位

    多进程的出现大大提高了用户体验

  线程:CPU调度的最小单位

    原因:多进程虽然提高了系统运行的效率,也有COW等技术对进程进行优化,但是进程的频繁创建和销毁代价较大、资源的大量复制和分配耗时仍然较高,于是80年代出现了能够独立运行的单位——线程。

    多线程之间可以直接共享资源,同时线程之间的通信效率又远高于进程间,将任务并发的性能再次向前推进了一大步。

  协程:一种用户态的轻量级线程,即协程是由用户程序自己控制调度的

    原因:协程的概念最早提出于1963年,45但由于其并不符合当时崇尚的的“自顶向下”的程序设计思想,未能成为当时主流编程语言的一部分。

随着技术的发展,虽然进程和线程大大提高了cpu的使用率,但一些场景下线程CPU时间片的大量切换其实是做了很多不必要的无用功,特别是Python中因为GIL锁的存在,其多线程很多时候并不能提高程序运行效率,于是协程的概念又开始发挥了作用

 

7.LEGB

  L:Local可能在一个函数或者类方法内部,局部命名空间

  E:Enclosed可能在嵌套函数内,闭包作用域

  G:Global全局命名空间

  B:Built-in内建命名空间

 

DB相关

1.mysql存储引擎

  1.MyISAM:优势是访问速度快

  2.InnoDB:5.5.5之后默认,支持事务和行级锁定,外键约束,缺点占用更多空间

  3.Merge

  4.Memory

 

2.MySQL索引机制

  由存储引擎决定,InnoDB用的是B+树

  建立索引可以大大提高MySQL的检索速度,它就像字典的目录,通过目录可以快速找到要查找的内容

 

  B+树与B树的区别:

    1.B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有

    2.B+树中所有的叶子节点都是通过指针连接在一起,而B树不会

  B+树的优点:

    1.非叶子节点不会带上ROWID,这样一个块中可以容纳更多的索引项,一是可以降低树的高度;而是一个内部节点可以定位更多的叶子节点

    2.叶子节点之间通过指针来连接,范围扫描将十分简单,而对于B树来说,则需要在叶子节点和内部节点间不停地往返移动。

  B树的优点:

    对于在内部节点的数据,可以直接得到,不必根据叶子节点来定位

 

  

  Innodb引擎(聚集索引)

  Myisam引擎(非聚集索引)

 

  聚集索引跟非聚集索引的根本区别:

    表记录的排列顺序与索引的排列顺序是否一致

 

3.事务特性

  ACID:原子性,一致性,隔离性,持久性

  

  事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中的所有更改都会被撤销。

 

4.事务隔离

  事务的隔离性是数据库支持事务必备的四个特性之一,简单来说事务隔离就是并发执行的多个事务之间互不干扰。

  事务隔离分为四个级别,第一个是RU未提交读,会出现脏读的问题,就是一个事物读取到另一个事物修改但未提交的数据;第二个是RC提交读,解决了脏读的问题,但是存在不可重复读的问题,就是一个事务对同一条数据两次读取结果不一致,这是因为两次读取过程中有其他事务队数据更改并提交;第三个是RR可重复读,解决了不可重复读的问题,但是存在幻读的问题,就是一个事务对同一范围两次读取结果不一致,这是因为两次读取过程中有其他事务对这个范围插入了新记录;第四个是SE可串行化,解决前面三种级别存在的问题,要求所有事务串行执行,读取的每行数据都会加锁,对性能和效率影响很大。

innoDB是mysql默认的存储引擎,默认的隔离级别是RR,并且在RR的隔离级别下更进一步,通过多版本并发控制(MVCC)解决不可重复读问题,加上间隙锁(也就是并发控制)解决幻读问题。因此innoDB的RR隔离级别其实实现了串行化级别的效果,而且保留了比较好的并发性能。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

 

  MVCC:多版本并发控制机制

    实现:通过保存数据在某个时间点的快照来实现的,同一个事务里能够看到数据一致的视图

 

  间隙锁:间隙锁是一个在索引记录之间的间隙上的锁

 

5.Redis

  使用场景:

    1.缓存高频次访问的数据,降低数据库io

    2.分布式架构,做session共享

    3.利用zset类型可以储存排行榜

    4.利用list做简易MQ或储存最新的n个数据

 

  数据类型:

    1.Hash

    2.Str

    3.List

    4.Set

    5.Zset

 

  存储机制:

    两种:Snapshot和AOF。无论是那种机制,Redis都是将数据存储在内存中。 

      性能 : Snapshot 性能较高

      安全:AOF安全型较好

  持久化方式:

 

以上是关于面试准备的主要内容,如果未能解决你的问题,请参考以下文章

前端面试准备

秋招面试字节面试准备(一面准备)

BAT Java面试完整汇总:面试准备(心态+简历)+面试题目+6条面试经验

BAT Java面试完整汇总:面试准备(心态+简历)+面试题目+6条面试经验

算法面试准备

Web 前端面试准备,附:前端面试题大全