ython后端面试(持续更新)

常用协议TCP、IP、HTTP

Socket编程基础

Python并发库

Mysql常考,索引优化

关系型和NoSQL的使用场景

Redis缓存

常用框架对比,RESTful

WSGI原理

Web安全问题

设计原则,如何分析

后端系统常用组件(缓存、数据库、消息队列等)

技术选型和实现(短网址服务、Feed流系统)

学习能力

业务理解能力,沟通交流能力

心态

扎实的计算机理论基础

代码规范,风格良好

能在指导下靠谱地完成业务要求

扎实的计算机基础和丰富的项目经验

能够独立设计和完成项目要求

熟悉成员web组件(缓存、消息队列),具有一定的系统设计能力

具有产品意识,技术引导产品

沟通交流嫩合理,团队协作能力

技术领导能力和影响力

平台决定成长(业务体量)

准备面试需要有的放矢,跟职位相匹配

基本信息(姓名、学校、学历、联系方式等)

职业技能(编程语言、框架、数据库、开发工具等)

关键项目经验(担任职责,用到了哪些技术)

知名项目经验

技术栈比较匹配

开源项目(GitHub、技术blog、Linux、unix geek)

内容精简、突出重点。不宜超过两页、可以套用模板

主要格式,推荐PDF

信息真实,不弄虚作假。技能要和岗位匹配

个人信息

掌握的技术,参与过的项目

应聘的岗位,表达对该岗位的看法和兴趣

根据候选人过去的行为评测其胜任能力

理论依据:行为的连贯性

人在面对相似的场景时会倾向于重复过去的行为模式

评判人的业务能力,沟通交流能力,语言表达能力,坑压能力等

提问方式:说说你曾经

说说你做过的这个项目

说说你碰到过的技术难题?你是如何解决的?有哪些收获?

千万别说没了,直接说表明你对岗位缺乏了解和兴趣

表现出兴趣:提问工作内容(业务)、技术栈、团队、项目等

问自己的感兴趣的问题

态度真诚,力求真实,不要弄虚作假

言简意赅,突出重点,省略细枝末节。适当模拟训练

采用STAR模型让回答更有条理

动态强类型语言

动态还是静态指的是编译期还是运行期确定类型

强类型指的是不会发生隐式类型转换

胶水语言,轮子多,应用广泛

语言灵活,生成力高

性能问题、代码维护问题、Python2、3兼容问题

比如file,StringIO,socket对象都支持read/write方法

再比如定义了__iter__魔术方法的对象可以用for迭代

所谓的monkey patch就是运行时替换

比如gevent库需要修改内置的socket

运行时判断一个对象的类型的能力

Python一切皆对象,用type,id,isinstance获取对象类型信息

Inspect模块提供了更多获取对象信息的函数

比如[i for i in range(10) if i % 2 == 0]

一种快速生成list、dict、set的方式。用来替代map、filter等

(i for i in range(10))返回生成器

print成为函数

编码问题。Python3不再有Unicode对象,默认str就是unicode

除法变化。Python3返回浮点数

类型注解(type hint)。帮助IDE实现类型检查

高级解包操作。a, b, *rest = range(10)

Keyword only arguments。限定关键字参数

Chained exceptions。Python3重新抛出异常不会丢失栈信息

生成的pyc文件统一放在__pycache__

一些内置库的修改。urllib,selector等

性能优化等

yield from链接子生成器

asyncio内置库,async/await原生协程支持异步编程

six模块

2to3等工具转换代码

__future__

可变类型参数

不可变类型参数

传递值还是引用呢?都不是。唯一支持的参数传递是共享传参

Call by Object (Call by Object Reference or Call by sharing)

Call by sharing(共享传参)。参数形参获得实参中各个引用的副本

不可变bool int float tuple str frozenset

可变list set dict

用来处理可变参数

*args被打包成tuple

**kwargs被打包成dict

Python使用异常处理错误

BaseException

SystemExit/KeyboardInterrupt/GeneratorExit

Exception

网络请求(超时、链接错误等)

资源访问(权限问题、资源不存在)

代码逻辑(越界访问、KeyError等)

继承Exception实现自定义异常(想想为什么不是BaseException)

给异常加上一些附加信息

GIL, Global Interpreter Lock

Cpython解释器的内存管理并不是线程安全的

保护多线程情况下Python对象的访问

Cpython使用简单的锁机制避免多个线程同时执行字节码

限制了程序的多核执行

CPU密集程序难以利用多核优势

IO期间会释放GIL,对IO密集程序影响不大(爬虫,web)

CPU密集可以使用多进程

IO密集可以使用多进程、协程

cython扩展

Python中什么操作才是原子的?一步执行到位

一个操作如果是一个字节码指令可以执行完成的就是原子的

原子的是可以保证线程安全的

使用dis操作才分析字节码

使用各种profile工具(内置或者第三方)

内置的profile、cprofile等工具

使用pyflame(uber开源)的火焰图工具

web应用一般语言不会成为瓶颈

数据结构和算法

数据库层:索引优化,慢查询消除,批量操作减少IO,NoSQL

网络IO:批量操作,pipeline操作减少IO

缓存:使用内存数据库redis/memcached

异步:asyncio,celery

并发:gevent/多线程

Least-Recently-Used替换掉最近最少使用的对象

字典用来缓存,循环双端链表用来记录访问顺序

常见排序算法的时空复杂度

链表有单链表、双链表、循环双端链表

如何使用Python来表示链表结构

实现链表常见操作,比如插入节点,反转链表,合并多个链表等

LeetCode练习常见链表题目

206翻转链表

队列(queue)是先进先出结构

Python dict/set底层都是哈希表

哈希表如何解决冲突

先序、中序、后序

堆其实是完全二叉树,有最大堆和最小堆

传说中的手写算法题,白纸或者白板上手写代码

工作用不到,为什么还要考?

没有太好的方式,刷常见题。防止业务代码写多了算法手生

刷题(LeetCode+剑指Offer+不同公司的面经)

链表涉及指针操作较为复杂,容易出错,经常用作考题

熟悉链表的定义和常见操作

常考题:删除一个链表节点

LeetCode237

常考题:合并两个有序链表

LeetCode21

二叉树涉及到递归和指针操作,常结合递归考察

二叉树的操作很多可以用递归的方式解决,不了解递归会比较吃力

常考题:二叉树的镜像(反转二叉树)

LeetCode226

常考题:如何层序遍历二叉树(广度优先)

LeetCode102

后进先出(栈)vs 先进先出(队列)

常考题:用栈实现队列

LeetCode232

堆的常考题基本围绕在合并多个有序(数组/链表)、TopK问题

理解堆的概念,堆是完全二叉树,有最大堆和最小堆

会使用Python内置的heapq模块实现堆的操作

常考题:合并k个有序链表

了解字符串的常用操作

Python内置了很多字符串操作,例如split、strip、upper、replace等

THE END
0.科研速递|构造式隐写构造式隐写是近年来学术界研究的热点,最近的研究表明,由秘密信息直接生成高质量的数字图像是可以实现的。本期介绍复旦大学多媒体智能安全实验室在ACM MM 2022上录用的两篇论文,采用不同的手段实现了两种构造式隐写方法。 生成式隐写网络 近年来,生成式隐写(generative steganography)成为了一个新兴的研究方向。相比于传统隐写jvzquC41eu4gwmfp0gjv0ls1h35128h464;7c=:6;380rjlg0jzn
1.有机化合物的表示方法一、有机化合物构造式的表示方法 分子中原子的连接次序和键合性质叫做构造,表示分子构造的化学式叫做构造式。 二、有机化合物立体结构的表示方法 1. 伞形式 从垂直于C-C键轴方向看,实线表示的键位于纸面上,实楔形线表示的键伸向纸面前方,虚楔形线表示的键伸向纸面后方(纸的背面)。 jvzquC41yy}/5?5fqe4dp8ftvkimg88433>83Bd;7::44<>90jznn
2.《建筑施工高处作业安全技术规范》JGJ801991第4.1.3条 攀登的用具,结构构造上必须牢固可靠。供人上下的踏板其使用荷载不应大于1100N.当梯面上有特殊作业,重量超过上述荷载时,应按实际情况加以验算。 第4.1.4条 移动式梯子,均应按现行的国家标准验收其质量。 第4.1.5条 梯脚底部应坚实,不得垫高使用。梯子的上端应有固定措施。立梯工作角度以75°±5°jvzquC41yy}/lrfpujk:;7hqo1nuou4422=048uc26914@783;724@524;7387mvon
3.Lua中的变量类型与语句学习总结Lua2.5. Table构造式 除了上述直接赋予{}创建空table以外,可以初始化其值,如day = {"S", "M", "T"},或者point = {x = 10, y = 20}(即point.x=10,point.y=20)。以上两种初始化方式可以混用,还可以用分号代替逗号,来将列表部分和记录部分明显地分隔开,如polyline = {color = "blue"; {x = 0, jvzquC41yy}/lk:30pku1jwvkerf1A;5::4ivv
4.C++Map和Set详解(上)构造一个 pair 对象(键值对): std::pair<int, int> p(10, 20); 利用make_pair 函数模板构造一个 pair 对象(键值对),通过传递给 make_pair 的参数隐式推导出来。 std::pair<int,int> p = std::make_pair(10,20); // 常用这种构造方式 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1::37488
5.2018年一级建筑师《建筑设计》考点复习预制配置式钢筋混凝土楼板的类型(按构造方式及受力特点分) ①实心板:跨度在2.4m内,板厚跨度的1/30,60~80mm,板宽600~900mm ②槽形板:是一种梁板结合的预制构件,板厚25~30mm,肋高150~300mm,板宽600mm、900、1200,跨度3~7.5mm,当板长超过6m,每隔1000~1500mm增设槽肋(荷载由两侧的边肋来承担) jvzquC41yy}/qq6220ipo8pcqunj1ƒmwegpjcwjwunj1=92539/j}rn
6.干货厌氧处理器的发展及新技术的特点原理启动要素!升流式厌氧污泥床(UASB)是第二代废水厌氧生物处理反应器中典型的一种。由于在UASB反应器中能形成产甲烷活性高、沉降性能良好的颗粒污泥,因而UASB反应器具有很高的有机负荷,近10年来得到了最广泛的应用,目前约占全世界正在运行的厌氧反应器中总数的70%。 jvzq<84yyy4oppwjl0ipo8mvon5htnjpapkxu89:4;4ivvq
7.C++unorderedmap和unorderedset的介绍和使用unordered_set的构造方式 unordered_set的函数接口说明 unordered_multiset 4、map/set与unordered_map/unordered_set的区别 set/unordered_set的性能对比 1、unordered系列关联式容器 在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到O(logN) ,即最差情况下需要比较红黑树的高度次,当树中jvzquC41dnuh0lxfp0tfv8gkva€zz8ftvkimg8igvcomu86489<68>7