面试其实还是要区分对待的,行内老牛和新人在不同的方向上都有各自的特点,包括老牛们丰富的经验、全面的眼界等等,也包括新人的锐气和新的思维观念。
如果正在Python这条路上愁眉不展的话,可以私信小编我“资料”我收集了不少强力资料,另外面试相关资料都有的,里面包括Python,人工智能,web,数据分析,爬虫从基础到职业进阶的私信我就可以
1.基础部分
这块没什么太多的区别:线程、进程、协程必问;三者区别和联系,应用场景;python中有何特殊之处;python的协程用过吗,如何实现的,asyncio中是如何实现的,协程间是如何实现调度的?
元类的作用;
如何实现动态加载;
如何实时debug;
可变、不可变是什么,为何会这么设计;
如何理解python的一切皆对象;
lambda函数,怎么看待;
迭代器是什么,next和iter各自是干嘛的;
如何垃圾回收,什么情况会内存泄漏,如何排查;
2.算法排序部分
这块没啥好说的,LeetCode刷起来。至于如何刷,我觉得知乎上说的不错,第一遍直接看答案,照着答案手打去理解;熟悉常见的数据结构/算法之后再做题,至于先做哪些题,我觉得没必要一道道来,先熟悉数据结构和常见的算法,[知乎如何刷LeetCode](大家都是如何刷LeetCode的?)然后可以先做腾讯50,或者热点面试题这种;
如果数据结构你都了解,那么推荐一个大神:[labuladong的算法小抄](labuladong的算法小抄)。看完之后你会发现,什么狗屁算法题,都是模板,直接往里套就行。。回溯、动态规划、二分、二叉树、双指针、滑动窗口。。。全给你整明白了,值得每天看一遍,真的牛逼
手写LRU(LRU简直不要太频繁,几乎必考,也经常会让手写,,python使用OrderedDict还是很轻松的)
手写堆排;
找中位数,或者类似topK问题(堆排,或者快速排序的思想)
单链表排序;
手写冒泡,如何优化;
大文件/海量数据的处理,这块也很频繁,推荐专门搜下这方面,基本就是分治的思想,哈希表,tire树,或者AC自动机,布隆过滤器。多看两篇文章就懂了,没啥好说的
如何设计URL短链,比如微博分享的这种(抖音问的)
二叉树的右视图;
链表第K位翻转;
三数之和的进阶版:三数之加减乘除,,这题我没想出来,直接跪了。。
等等一些,基本都是常见的LeetCode中等难度及以下的题,简单的题基本都会问这样实现的时间、空间复杂度多少,如何优化
3.网络基础部分
这块问的不多,可能是我样本比较少吧,当然也得必需准备,万一到时候说不出,那就基本凉了。。
握手挥手、time_wait这些都是必需准备的,没啥好说的
HTTP版本,常见header,HTTPS介绍
Nginx介绍,有几个进程,为何这么快;
uwsgi介绍,是干嘛的;
socket方面,epoll为何快,底层用了什么?顺带说下红黑树,比如左旋右旋,变色,和AVL区别,为啥大家都会用这个;
4.数据库部分
这块是重头戏,高不高级就看着快了
分成3部分吧,MySQL,Redis,MQ/KAFKA
首先是MySQL,
ACID说一下;
事务隔离的级别,默认是啥,幻读是啥意思;
如何优化?涉及到分库分表,慢查询如何看,explain哪个字段能看是否用索引;最左前缀优先匹配;建索引的原则;
CPU高应该怎么办;
B+树和B树区别,MySQL为何用B+;主键查询和非主键索引查询有何区别;
哈希索引;
什么是聚簇索引;
B树有何优点,什么场景会用B树?(memcache)
扇区、节点大小的概念,为何树的高度要低;
innodb和myisam的区别,存储方面呢;
你如何看待外键,优劣;
redis
(这块问的超多,也有可能是因为我说我看过单机Redis的源码)
常见使用场景有哪些?
为啥快?单线程到底是因还是果;
发布订阅功能,和MQ,比如rabbitMQ有何区别?
排行榜、