面试题2019.11.4

1.set,list,字典的底层原理以及哪个存值快,哪个取值快,为什么?

在cpython中,列表被实现为长度可变的数组,Python中的列表是由对其它对象的引用组成的连续数组。
CPython使用伪随机探测的散列表作为字典的底层数据结构。由于这个实现细节,只有可哈希的对象才能作为字典的键。
集合被实现为带有空值的字典,只有键才是实际的集合元素。

dict的查找速度和插入的速度极快,不会随key增加而变慢;但是要占用大量的内存,内存浪费多。
list正好相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。

  1. MySQL的底层是什么?

B+Tree作为索引结构,聚簇索引每张表只有一个,叶子节点包含所有数据;辅助索引不包含所有数据;

  1. 联合索引和单列索引

多个单列索引在多条件查询时只会生效第一个索引!所以多条件联合查询时最好建联合索引!
最左前缀原则:
顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上,
注:如果第一个字段是范围查询需要单独建一个索引
注:在创建联合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。这样的话扩展性较好,比如 userid 经常需要作为查询条件,而 mobile 不常常用,则需要把 userid 放在联合索引的第一位置,即最左边

  1. osi七层之间是怎么通信的

物理层,数据链路层(对电信号进行分组),网络层(定义了一个IP协议),传输层(建立端口到端口的通信tcp协议,udp协议),会话层,表示层,应用层(规定应用程序的数据格式)

  1. tcp协议使用时要注意什么

必须绑定IP和端口,其次注意沾包问题,因为tcp自带优化算法,不知道所发文件的大小产生的问题,利用python中stack这个包大包报头。

  1. MySQL在使用时要注意什么

建表角度:
1、合理安排表关系
2、尽量把固定长度的字段放在前面
3、尽量使用char 代替varchar
4、分表:水平分和垂直分
SQL语句的角度:
1、尽量用where来约束范围到一个比较小范围的程度,比如分页
2、尽量使用连表查询,而不是使用子查询
3、删除数据或者修改数据的时候尽量使用主键作为条件
4、合理创建和时候用索引
1、查询的条件字段不是索引字段,对哪一个字段创建了索引就对哪一个字段做条件查询。
2、在创建索引的时候应该对区分度比较大的列进行创建1/10以下的重复率比较适合创建索引。
3、范围
范围越大越慢
范围越小越快
!= 慢
like 'a%' 快
like '%a' 慢
4、条件列参与计算/使用函数
5、and 和 or
多个条件的组合,如果使用and连接,其中一列含有索引,都可以加快查找速度。
如果使用or连接,必须所有的列都含有索引,才能加快查询速度。
6、联合索引 (最左前缀原则)必须带这最左边的列作为条件,从出现范围开始整条索引失效。
7、条件中写出来的数据类型必须和定义的数据类型一致。
8、select的字段应该包含order by的字段。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 6,023评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,687评论 1 32
  • 主键,外键,超键,候选键 数据库事务的四个特征及含义 视图的作用,可以更改吗 视图是虚拟的表;只包含动态检索数据的...
    DamaoShao阅读 6,313评论 0 3
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,656评论 1 8
  • 一步一步走过的脚印 沉在故乡的池塘 作了鱼儿的新房 留在青涩的青春小道 被泪水灌满 给了初恋 让分手掰成两半 在一...
    山上人家123阅读 308评论 3 13

友情链接更多精彩内容