点击上方程序人生, 选择置顶公众号
第一时间关注程序猿 (媛) 身边的故事
原文标题: 一名 python web 后端开发工程师的面试总结
先介绍下我的情况
通信背景, 工作一年多不到两年之前一直在做 C++ 的 MFC 软件界面开发工作公司为某不景气的国企研究所 (喏, 我的工作经验很水: 1 是方向不对; 2 是行业有偏差) 然后目前是在寻找 python 后端开发这一块的工作, 使用的框架为 django; 之前一直通过 CSDN 以及其他几家技术博客 / 论坛吸收大家的经验, 在感激之余, 也想输出点什么, 造福大家, 因此就有了这篇水文, 希望大家能够多多吸取我的经验教训, 早日找到一份自己满意的工作!
面试的几家: 北京的两家创业公司, 规模均在 40-50 人之间; 果壳(止步于电话面, 拉钩投的); 知乎(止步于电话面, 论坛发帖后的内推); 爱奇艺(拉钩上投的); 杭州的网易(同学内推)
面试这一轮下来, 最大的感受就一个: 平时一定要坚持每天都码点代码就算再烂的项目, 也要坚持上传 github 真的, 只要你能坚持一周有 5 天以上都能持续上传 Git, 半年下来, 面试官绝对对你刮目相看
其他感受: 不同的公司着重点都不一样, 不过真的就如这篇博文 (http://blog.csdn.net/yueguanghaidao/article/details/49638261) 的博主所说, 木桶原理, 哪块都不能少我就是因为平时只关注做自己的小博客系统, 而没做其他的部分, 导致爱奇艺倒在了手写代码上面哎, 忧伤平时多刷刷 leetcode, 看看剑指 offer / 面试金典, 都是套路啊~~
面试这几家公司所遇到的面试 / 笔试题, 目前还能记住的如下虽然可能绝大部分都是基础, 但希望大家不要只是看看就过去了, 最好还是假装你被问到这个问题, 你来把答案说出来或写出来:(不按公司分了)
python 语法以及其他基础部分
可变与不可变类型;
浅拷贝与深拷贝的实现方式区别; deepcopy 如果你来设计, 如何实现;
__new__()与__init__()
的区别;
你知道几种设计模式;
编码和解码你了解过么;
列表推导 list comprehension 和生成器的优劣;
什么是装饰器; 如果想在函数之后进行装饰, 应该怎么做;
手写个使用装饰器实现的单例模式;
使用装饰器的单例和使用其他方法的单例, 在后续使用中, 有何区别;
手写: 正则邮箱地址;
介绍下垃圾回收: 引用计数 / 分代回收 / 孤立引用环;
多进程与多线程的区别; CPU 密集型适合用什么;
进程通信的方式有几种;
介绍下协程, 为何比线程还快;
range 和 xrange 的区别(他妹的我学的 py3);
由于我有 C/C++ 背景, 因此要求用 C 来手写: 将 IP 地址字符串 (比如 172.0.0.1) 转为 32 位二进制数的函数
算法排序部分
手写快排; 堆排; 几种常用排序的算法复杂度是多少; 快排平均复杂度多少, 最坏情况如何优化;
手写: 已知一个长度 n 的无序列表, 元素均是数字, 要求把所有间隔为 d 的组合找出来, 你写的解法算法复杂度多少;
手写: 一个列表 A=[A1,A2,,An], 要求把列表中所有的组合情况打印出来;
手写: 用一行 python 写出 1+2+3++10**8 ;
手写 python: 用递归的方式判断字符串是否为回文;
单向链表长度未知, 如何判断其中是否有环;
单向链表如何使用快速排序算法进行排序;
手写: 一个长度 n 的无序数字元素列表, 如何求中位数, 如何尽快的估算中位数, 你的算法复杂度是多少;
如何遍历一个内部未知的文件夹(两种树的优先遍历方式)
网络基础部分
TCP/IP 分别在模型的哪一层;
socket 长连接是什么意思;
select 和 epoll 你了解么, 区别在哪;
TCP UDP 区别; 三次握手四次挥手讲一下;
TIME_WAIT 过多是因为什么;
http 一次连接的全过程: 你来说下从用户发起 request 到用户接收到 response;
http 连接方式 get 和 post 的区别, 你还了解其他的方式么;
restful 你知道么;
状态码你知道多少, 比如 200/403/404/504 等等;
数据库部分
MySQL 锁有几种; 死锁是怎么产生的;
为何, 以及如何分区分表;
MySQL 的 char varchar text 的区别;
了解 join 么, 有几种, 有何区别, A LEFT JOIN B, 查询的结果中, B 没有的那部分是如何显示的(NULL);
索引类型有几种, BTree 索引和 hash 索引的区别(我没答上来这俩在磁盘结构上的区别);
手写: 如何对查询命令进行优化;
NoSQL 了解么, 和关系数据库的区别; redis 有几种常用存储类型;
Linux 部分
讲一下你常用的 Linux/git 命令和作用;
查看当前进程是用什么命令, 除了文件相关的操作外, 你平时还有什么操作命令;
(因为我本人 Linux 本身就很水, 只会基本的操作, 所以这部分面试官也基本没怎么问反正问了就大眼瞪小眼呗)
django 项目部分
都是让简单的介绍下你在公司的项目, 不管是不是后端相关的, 主要是要体现出你干了什么;
你在项目中遇到最难的部分是什么, 你是怎么解决的;
你看过 django 的 admin 源码么; 看过 flask 的源码么; 你如何理解开源;
MVC / MTV;
缓存怎么用;
中间件是干嘛的;
CSRF 是什么, django 是如何避免的; XSS 呢;
如果你来设计 login, 简单的说一下思路;
session 和 cookie 的联系与区别; session 为什么说是安全的;
uWSGI 和 Nginx 的作用;
(我发现基本不问 django 实现细节相关的东西或者问也问的很少, 哎, 之前准备的方向完全错了)
洋洋洒洒写了一个小时, 发现还是有很多细节问题都已经忘了哎, 自己的笔记做的还是不行不过这些问题如果你能都答上来, 起码我觉得你应该可以去试试面试初级 web 后端了, good luck!
后记: 发现一个整理的特别棒的 github 仓库, 比我写的强多了共享给大家~:https://github.com/taizilongxu/interview_python
- THE END -
你有哪些面试经验?
欢迎投稿分享
征稿要求:
稿件字数以 800~1500 字左右为宜, 多于 2000 字的文章在手机上阅读起来比较麻烦, 少于 800 字的文章看起来不过瘾;
你有自己拍的适合做文章插图的照片也可一并附上~ 如果不方便, 程序和小七也会帮你配图~
加程序人生编辑们的微信, 备注 #投稿 #:
程序 微信 ID:druidlost
小七 微信 ID:duoshangshuang
我们在这里期待你的故事!
点击图片 get 往期内容
来源: http://blog.csdn.net/csdnsevenn/article/details/79068624