年薪百万的Python工程师总结的一套面试、笔试题【以及答案】

目录


~~在这里插入图片描述~~

​1、Redis中默认有多少个哈希槽

1、 2^14个

2、 Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。

2、实例变量和类变量的区别

1、 实例变量是对于每个实例都独有的数据

2、 类变量是该类所有实例共享的属性和方法

3、解释一下Python中的身份运算符

这也是一个在Python面试中常问的问题。

通过身份运算符‘is’和‘is not’,我们可以确认两个值是否相同。

>>> 10 is '10'
False
 
>>> True is not False
True

4、yield from 和 yield 的区别

简述yield和yield from

# 下面a()和b()是等价的
def a():
yield from [1,2,3,4,5]
def b():
for i in [1,2,3,4,5]:
yield i
for i in a():
print(i)
for i in b():
print(i)

yield将一个函数变成一个生成器

yield 返回一个值

yield from后面接可迭代对象,一个一个返回值。

5、py2项目如何迁移成py3

1、 先备份原文件,然后使用python3自带工具2to3.py将py2文件转换位py3文件

2、 手动将不兼容的代码改写成兼容py3的代码

6、生产者消费者模型的应用场景

说明

生产者只在仓库未满时进行生产,仓库满时生产者进程被阻塞;消费者只在仓库非空时进行消费,仓库为空时消费者进程被阻塞;

应用场景:处理数据比较消耗时间,线程独占,生产数据不需要即时的反馈等。比如说写入日志,将多线程产生的日志放在队列中,然后写入。

7、简述数据库的读写分离

读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

8、解释//、%、* *运算符?

//(Floor Division)-这是一个除法运算符,它返回除法的整数部分。

例如:5 // 2 = 2

%(模数)-返回除法的余数。

例如:5 % 2 = 1

**(幂)-它对运算符执行指数计算。a ** b表示a的b次方。

例如:5 ** 2 = 25、5 ** 3 = 125

9、什么是轮询和长轮询

轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。

这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。

var xhr = new XMLHttpRequest();
setInterval(function() {
   
    xhr.open('GET', '/user');
    xhr.onreadystatechange = function() {
   };
    xhr.send();
}, 1000)

长轮询是ajax实现:在发送ajax后,服务器端会阻塞请求直到有数据传递或超时才返回。 客户端JavaScript响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。

function ajax() {
   
    var xhr = new XMLHttpRequest();
    xhr.open('GET', '/user');
    xhr.onreadystatechange = function() {
   
        ajax();
    };
    xhr.send();
}

10、如果Redis中的某个列表中的数据量非常大,如何实现循环显示每一个值?

使用生成器一个一个取

11、Python的局限性?

1、 速度

2、 移动开发

3、 内存消耗(与其他语言相比非常高)

4、 两个版本的不兼容(2,3)

5、 运行错误(需要更多测试,并且错误仅在运行时显示)

6、 简单性

12、区分Python中的remove,del和pop?

  • remove:将删除列表中的第一个匹配值,它以值作为参数。
  • del:使用索引删除元素,它不返回任何值。
  • pop:将删除列表中顶部的元素,并返回列表的顶部元素。
numbers = [1,2,3,4,5]
numbers.remove(5)
> [1,2,3,4]

del numbers[0]
>[2,3,4]

numbers.pop()
>4

13、什么是ajax请求?手写一个ajax请求

ajax(异步JavaScript和XML)是指一种创建交付式网页应用的网页开发技术。可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

// 不使用第三方
var xhr = new XMLHttpRequest();
xhr.open("GET", url, false);
xhr.onreadtstatechange = function() {
   
    if (xhr.readystate == 4) {
   
        //响应内容解析完成,可以在客户端调用了
        if (xhr.status == 200) {
   
            //客户端的请求成功了
            alert(xhr.responseText);
        }
    }
}
xhr.send(null);
// 使用ajax
$.ajax({
   
    type: "GET",
    url: "",
    dataType: "json",
    success: function(data) {
   },
    error: function(jqXHR) {
   }
});

14、什么是覆盖索引

覆盖索引又可以称为索引覆盖。

1、 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。

2、 解释二:
索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。

3、 解释三:
是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,索引包含了查询正在查找的所有数据)。

15、简述多进程开发中join和deamon的区别

1、 join:当子线程调用join时,主线程会被阻塞,当子线程结束后,主线程才能继续执行。

2、 deamon:当子进程被设置为守护进程时,主进程结束,不管子进程是否执行完毕,都会随着主进程的结束而结束。

16、在Python中有多少种运算符?解释一下算数运算符。

在Python中,我们有7种运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

我们有7个算术运算符,能让我们对数值进行算术运算:

1、 加号(+),将两个值相加

>>> 7+8
15

2、 减号(-),将第一个值减去第二个值

>>> 7-8
-1

3、 乘号(*),将两个值相乘

>>> 7*8
56

4、 除号(/),用第二个值除以第一个值

>>> 7/8
0.875
  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值