如何面试Python 后端工程师(持续更新)

2023-11-05

看到“如何面试Python后端工程师”这个问题下一位大牛罗列的问题,感觉挺有价值。现在记在这里,找出这些问题的答案,持续更新。

一 . 语言

1.推荐一本看过最好的python书籍? 拉开话题好扯淡 

目前所知道的,看过的就是《Python 核心编程》(第二版),《Flask》


2.谈谈python的装饰器,迭代器,yield? 

2.1 装饰器,这篇博文说的很细致,总的来说,装饰器是对函数的一种通用处理方法。

 http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html

2.2 迭代器,生成器

http://www.cnblogs.com/kaituorensheng/p/3826911.html

带有 yield 的函数在 Python 中被称之为 generator(生成器)

xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器.


2.3 yield

https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

函数中有yield语句,这个函数就是一个“生成器函数”。函数的每次调用都是一个生成器。

比如 def f, f 是函数, 但 f(1),f(2)就是两个不同的生成器。

生成器中会返回迭代对象,达到省内存的目的。

3.标准库线程安全的队列是哪一个?不安全的是哪一个?logging是线程安全的吗? 

线程安全即解决线程同步问题。

Queue 是标准库中线程安全的队列,实现了(FIFO).

logging 是线程安全的,但不是 “Process-safe”的,进程安全?。

4.python适合的场景有哪些?当遇到计算密集型任务怎么办? 

Python适合的场景1. 科学计算 2. 快速原型开发 3.网站. 4. 脚本。 实际上在各个方向上它都有挺多应用,前列几项算是比较火的吧。计算密集型任务模块用C/C++做。多进程,多线程也可以稍微提高些。


5.python高并发解决方案?我希望听到twisted->tornado->gevent,能扯到golang,erlang更好

二. 操作系统可以直接认为是linux,毕竟搞后端的多数是和linux打交道。 

1. tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗?

TCP/UDP, 可靠与非可靠;三次握手,四次挥手;滑动窗口,拥塞控制;

TCP粘包: http://blog.chinaunix.net/uid-429659-id-5207848.html  


2. time_wait是什么情况?出现过多的close_wait可能是什么原因? 

参考资料:

http://blog.csdn.net/yusiguyuan/article/details/21445883

http://www.cnblogs.com/Jessy/p/3535612.html

CLOSE_WAIT

发起TCP连接关闭的一方称为client,被动关闭的一方称为server。被动关闭的server收到FIN后,

但未发出ACK的TCP状态是CLOSE_WAIT出现这种状况一般都是由于server端代码的问题,

如果你的服务器上出现大量CLOSE_WAIT,应该要考虑检查代码。

TIME_WAIT

根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态

TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒。

TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,

如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket,

甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。


3.epoll,select的区别?边缘触发,水平触发区别?

select,poll,epoll都是IO多路复用的机制。

I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行

相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个

读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。

水平触发(level-triggered,也被称为条件触发)LT: 只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你)。select属于条件触发。

边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件。

三 存储

存储可能包含rdbms,nosql以及缓存等,我以MySQL,redis举例。

mysql相关   mysql 是流行的RDBMS  关系型数据库


1.谈谈mysql字符集和排序规则? 


2.var char与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符

char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10, 除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。

尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

首先要确定mysql版本4.0版本以下,varchar(50),指的是50字节,如果存放UTF8汉字时,只能存16个(每个汉字3字节)

5.0版本以上,varchar(50),指的是50字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个


3.primary key和unique的区别? 


4.外键有什么用,是否该用外键?外键一定需要索引吗? 


5.myisam与innodb的区别?innodb的两阶段锁定协议是什么情况?

 
6.索引有什么用,大致原理是什么?设计索引有什么注意点? 

redis相关 

1.什么场景用redis,为什么mysql不适合? 

redis 所有数据放在内存中,内存数据库。nosql(不过也可以持久化,持久化使用RDB或AOF方式。)

mysql无论数据还是索引都放在硬盘中,使用时才交换到内存中,能够处理远超内存总量的数据。

mongodb,是一个内存数据库,数据都放在内存中。持久化:mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。然后,mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

数据量和性能:
当物理内存够用的时候,redis>mongodb>mysql
当物理内存不够用的时候,redis和mongodb都会使用虚拟内存。
实际上如果redis要开始虚拟内存,那很明显要么加内存条,要么你换个数据库了。
但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。
mongodb还是能够保证性能。有人使用mongodb存储了上T的数据。
mysql,mysql根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能表现。
当物理内存和虚拟内存都不够用的时候,估计除了mysql你没什么好选择了。
其实,从数据存储原理来看,我更倾向于将mongodb归类为硬盘数据库,但是使用了mmap作为加速的手段而已。

2.谈谈redis的事务?用事务模拟原子+1操作?原子操作还有其它解决方案吗? 


MULTI、EXEC、DISCARD和WATCH命令是Redis事务功能的基础。
Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项:

1. Redis会将一个事务中的所有命令序列化,然后按顺序执行。Redis不可能在一个Redis事务的执行过程中插入执行
另一个客户端发出的请求。这样便能保证Redis将这些命令作为一个单独的隔离操作执行。
2.在一个Redis事务中,Redis要么执行其中的所有命令,要么什么都不执行。因此,Redis事务能够保证原子性。

3.redis内存满了会怎么样?

可以配置文件,选择删除某些键值或者直接报错。。。

四 安全

web安全相关 
1.sql注入是怎么产生的,如何防止? 

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,

最终达到欺骗服务器执行恶意SQL命令的目的。

如何防止:

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和

双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全
平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

2.xss如何预防?html escape后能否避免xss? 


3.csrf是什么?django是如何防范的?

五 密码技术

1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么需要iv向量? 


2.简单说说https的过程? 

http 运行在TCP 之上,数据明文传输。HTTPS 运行在SSL/TLS之上,SSL/TLS运行在TCP之上,是加密协议,因此HTTPS传输

的已经是加密的数据,加密采用对称加密。但对称加密的密钥用服务器方的证书进行了非对称加密。

SSL/TLS中使用了非对称加密,对称加密以及HASH算法。

http://www.cnblogs.com/binyue/p/4500578.html

HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256


3.对称加密与非对称加密区别? 

对称加密是指加密和解密使用的密钥是同一个密钥,或者可以相互推算。

对称加密的优点是算法简单,加解密效率高,系统开销小,适合对大数据量加密。

缺点是解密加密使用同一个密钥,需要考虑远程通信的情况下如何安全的交换密钥,如果密钥丢失,

所谓的加密解密就失效了。

非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称为公钥,另一个只有所有者知道,

称作私钥。
用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开。

4.如何生成共享秘钥? 如何防范中间人攻击?


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何面试Python 后端工程师(持续更新) 的相关文章

  • C++primer 阅读随记

    目 录 一 C 基础 1 变量和基本类型 2 字符串 向量和数组 3 表达式 4 语句 5 函数 6 类 二 C 标准库 1 IO库 2 顺序容器 3 泛型算法 4 关联容器 5 动态内存 三 类设计者的工具 1 拷贝控制 2 重载运算与类
  • 实施Microsoft Dynamics 365 CE-5. 配置Dynamics 365 CE组织,包括配置不同的Dynamics 365 CE设置。

    本章将帮助您了解Dynamics 365 CE中为个人和管理员提供的Dynamics 365配置选项 您将了解哪些选项可以为单个用户配置 哪些是管理员用户可以完成的配置 您将了解业务管理和服务管理设置下提供的不同配置选项 您还将了解Dyna
  • RobotFramework之高级API

    一 窗口跳转 跳转页面的时候需要获取句柄 Get Window Handles 获取窗口的句柄 Select Window By Handle 切换到新窗口 但是在seleniumLibrary中只有Select window 所以我们进入
  • Top K问题的两种解决思路

    Top K问题在数据分析中非常普遍的一个问题 在面试中也经常被问到 比如 从20亿个数字的文本中 找出最大的前100个 解决Top K问题有两种思路 最直观 小顶堆 大顶堆 gt 最小100个数 较高效 Quick Select算法 Lee
  • 自适应表格中input框输入文字布局被打乱

    我今天在写一个新增用户表单的时候 发现我只要输入文字 input框的高度就会改变 导致布局被打乱 这是正常排列好的样式 这是我输入中文后的样子 后来我发现输入中文后 input的高度被撑开了 我一开始没有给盒子设置固定的高度以及行高 设置完
  • C 语言基础-什么是常量、变量?

    C 语言基础 常量和变量 常量 只读 常量是只读的固定值 在程序运行期间不会改变 不能被程序修改的量 可以是任意类型 定义常量的方式有两种 使用 define 宏定义 使用 const 关键字 常量大体分为 直接常量 字面常量 符号常量 d
  • python练习61:打印出杨辉三角形,包含二维列表的应用

    打印出杨辉三角形 要求打印出10行如下图 yanghui for i in range 10 yanghui append 构造二维列表 for j in range i 1 if j 0 or j i yanghui i append 1
  • CCF-CSP真题-2022-06-1归一化处理讲解

    题目传送门 这是CCF CSP2022 06的第一题 相比较还是比较简单 较难理解的是方差 每个样本值与全体样本值的平均数之差的平方值的平均数方差 数学计算公式是这样的 然而 用代码来写要简洁得多 这里采用暴力的复杂度算法 for int
  • MySQL utf8mb4 字符集,用于存储emoji表情

    最近在做微信相关的项目 其中MySQL 要存储emoji表情 因此发现我们常用的utf8 字符集根本无法存储表情 网上有不少替代方案 本人还是采用了修改MySQL字符集的方案简单快捷 首先将我们数据库默认字符集由utf8 更改为utf8mb
  • Pandas分组与排序

    Grouping and Sorting 分组 agg 排序 经常需要将数据根据某个字段划分为不同的组 group 进行分析 然后对组里的数据进行特定的操作 pandas的 groupby 操作便是实现这一功能 groupby的过程就是将原
  • jquery的两种常用自动加载方法

    一 jquery JavaScript的三种常用自动加载方法 1 function jQuery 2 function 3 window nl ad function 加载的先后顺序 第一步 代码块1加载 是在css html 信息加载完毕
  • Scala环境配置完成,在命令行还是不能运行

    刚开始我以为是版本兼容的问题 所以下载了很多个版本 发现没用 我找了很久都不知道是什么原因 网上也没找到跟我一样的问题 偶然我发现是系统环境变量PATHEXT中缺少东西 在PATHEXT中添加 bat 然后就可以了
  • AIX系统安装

    1 选择安装介质 CD ROM 现有备份的安装系统 网络安装 Token Ring Ethernet FDDI U盘 服务器通电启动系统 在控制台显示器出现keyboard字符时 按对应的按钮 1 进入系统管理服务模式 SMS 2 指定控制
  • C语言中结构体初始化并清零的方法有几种?

    结构体初始化清零方法 在C语言中 结构体初始化并清零的方法有以下几种 手动赋值为0 结构体定义后在函数内手动将每个成员都赋值为0 例如 struct MyStruct int a char b float c struct MyStruct
  • vue页面基本组成

    作为编写过html的人 vue页面的基本组成是什么呢 如何快速入手vue呢 我来讲下自己的思路 简介 vue是一个前端框架 运行它需要下载node js 后台支撑 下载vs code 代码编辑器 来编辑代码 可配合eliment ui 上百
  • nodejs处理图片文件上传

    如果使用express框架的话 其内置模块就可以直接处理文件上传了 而不需要饱含额外的模块 express版本 3 4 4 1 使用bodyParser过滤器 并且指定上传的目录为public upload 注意这里的目录为相对于expre
  • PyQt5学习笔记--GridLayout、FormLayout和StackedLayout布局

    目录 1 GridLayout布局 2 FormLayout布局 3 StackedLayout布局 1 GridLayout布局 import sys from PyQt5 QtWidgets import class MyWindow
  • select、poll、epoll

    因为实际需要所致 我们不得不考虑在现有的开源 商用的应用服务器之外开发一个 有性能要求 有并发要求的服务端应用 从技术要求的角度来分析一下 用Java实现这件事情我们可能关注的知识层面 在整体上 可能需要我们从下面几个层面出发来考虑 1 在
  • windows多个不同java共存

    windows多个不同java共存 如图我电脑存在java1 8和15 使用时 我会存在工具支持的java版本不一样 有的工具要8才能使用有的工具需要11或者15以上java才能正常使用 于是为了方便快捷便写了这个多java版本共存 jav
  • 微服务SpringCloud

    什么是SpringCloud SpringCloud是由Spring提供的一套能够快速搭建微服务架构程序的框架集 SpringCloud本身不是一个框架 而是一系列框架的统称 SpringClound就是为了搭建微服务架构才出现的 有人将S

随机推荐

  • Linux如何查看系统时间

    文章目录 一 使用date命令查看系统时间 二 通过 var log syslog文件查看系统时间 三 通过 proc uptime文件查看系统运行时间 四 通过hwclock命令查看硬件时间 五 通过timedatectl命令设置系统时区
  • Python实现普通二叉树

    Python实现普通二叉树 二叉树是每个节点最多有两个子树的树结构 本文使用Python来实现普通的二叉树 关于二叉树的介绍 可以参考 https blog csdn net weixin 43790276 article details
  • MES系统是什么?MES系统的主要功能是什么?看完本文就知道

    MES系统是什么 MES系统是一套面向制造企业车间执行层的生产信息化管理系统 MES可以为企业提供包括制造数据管理 计划排程管理 生产调度管理 库存管理 质量管理 人力资源管理 工作中心 设备管理 工具工装管理 采购管理 成本管理 项目看板
  • PytorchCNN项目搭建 6--- 训练、验证CNN

    PytorchCNN项目搭建 6 训练 验证CNN 1 配置args cfg log 等 2 将数据集dataset经DataLoader变成dataloader 3 加载网络net 4 选择损失函数和优化器 5 训练网络 得到损失值 主函
  • 【qt】蒙版mask使用

    蒙版 mask 蒙版基本概念 在绘图软件中 蒙版类似于蒙在原始图片上的一块玻璃 即蒙版 然后我们再在这块玻璃上使用其他工具对图片进行修改 这样就不会破坏原始图片 而又能看到图片修改后的效果 蒙版通常是黑白色的 通常通过改变蒙版 玻璃 的灰度
  • node 加密解密模块_Node之加密与解密处理

    crypto模块概述 在Node js中 使用OpenSSL类库作为其内部实现加密与解密处理的基础手段 这是因为目前OpenSSL已经成为了一个经过严格测试的可靠的加密与解密算法的实现工具 在Node js中 OpenSSL类库被封装在cr
  • 真正解决Pandas写入excel的多sheet问题

    真正解决Pandas写入excel的多sheet问题 遇到需要利用pandas的to excel 在同一个Excel文件中 循环在不同的sheet中写入数据 但查阅大量资料 基本都无法利用for循环 在 sheet1 sheet2 shee
  • java中native的用法

    Java开发中会碰到声明为 native的方法 如 public native int hashCode 这是一个native方法 为什么存在native方法呢 Java不是完美的 Java的不足除了体现在运行速度上要比传统的C 慢许多之外
  • 数学建模写作模板及排版经验(超全)

    开篇福利分享 链接 https pan baidu com s 10hJMmLw8pQ5r3csnnySH g pwd msy3 提取码 msy3 论文是建模中最后的一环也是最关键的一环 这环做好了那就圆满了 做砸了全功尽弃 了 关于怎么写
  • Raspberry Pi和Python OpenCV人工神经网络和卷积神经网络演示及其机器学习微型框架

    首先 主要讨论和演示机器学习中使用的基本数据模型及其演示 其次开始的深度学习讨论 然后 探讨 ANN 和 CNN 如何预测结果 例如 当呈现未知图像时 CNN 将尝试将其识别为属于它已被训练识别的类别之一 Raspberry Pi机器学习
  • 十三、Ubuntu18.04下配置C++版本的mediapipe

    十三 Ubuntu18 04下配置C 版本的mediapipe 1 官方教程 2 记录我的配置过程 2 1 安装Bazelisk 2 2 安装mediapipe库 2 3 安装OpenCv和FFmpeg 2 4 运行helloworld C
  • Airtest简单使用及采坑记录

    下载地址 http airtest netease com 打开方式 打开下载的文件夹 找到AirtestIDE exe双击即可打开 连接手机 USB连接方式 将电脑与手机用USB连接 打开手机开发者模式的USB调试 右上角出现设备信息后点
  • 【云原生之Docker实战】使用docker搭建Chemex资产管理系统

    云原生之Docker实战 使用docker搭建Chemex资产管理系统 一 Chemex介绍 1 Chemex简介 2 Chemex特点 二 检查dokcer版本 三 创建mysql容器 四 测试数据库连接 五 下载chemex镜像 六 创
  • 让AD 自动导出 3D效果照片到项目文件路径下,方便查看

    让AD自动在项目目录下生成PCB的3D照片 分辨率 设为最高 视图可以自定义或者从上到下俯视 颜色配置默认绿色 也可以选择当前视图 确定即可 这样查看起来非常方便 不用再打开文件查看了
  • 数据库设计(一对一,一对多,多对多)关联查询

    表与表之间的关系 1 一对一 需要两个表 当然做项目时为了省空间 通常只建一个表 如果要实现一对一的查询 可以建两个视图 示例如下 1 建物理表 初始化数据 CREATE TABLE person id INT NAME VARCHAR 1
  • 什么是CSMA/CD

    英文全称 Carrier Sense Multiple Access Collision Detection 载波侦听多路访问 冲突检测协议 CSMA CD 这种协议已广泛应用于局域网中 是广播型信道中采用一种随机访问技术的竞争型访问方法
  • windows下更改鼠标滚轮方向

    本来鼠标滚轮的方向无所谓 正确 与否 win下和mac下方向相反 只要习惯即可 但从win下切换到mac后 本来是想把鼠标方向调成跟win下一致 结果这么一反转 连多指手势的 左右 都反了 苹果 算你狠 于是我只有习惯所谓的 自然 滚动 习
  • 二维数组定义

    二维数组定义 1 方法一 int a new int m for int i 0 i
  • XD插件PhotoSplash2的用法

    1 安装 略 2 在画布上插入5个矩形 3 全部选中 并点击插件photosplash2 4 查询框中输入 flower 自动按照选中的矩形数量 选择照片 按 Apply 5 photos 5 效果
  • 如何面试Python 后端工程师(持续更新)

    看到 如何面试Python后端工程师 这个问题下一位大牛罗列的问题 感觉挺有价值 现在记在这里 找出这些问题的答案 持续更新 一 语言 1 推荐一本看过最好的python书籍 拉开话题好扯淡 目前所知道的 看过的就是 Python 核心编程