首页 > 笔经面经 > 5000字干货总结,python社招面试经验分享

5000字干货总结,python社招面试经验分享

头像
SunnyJoy
编辑于 2019-12-03 12:12:18 APP内打开
赞 35 | 收藏 153 | 回复9 | 浏览3900

即使是临近年末,我依然选择了裸辞,冒着可能会失业的风险。

我之前是在深圳工作的,因为自己是江苏人,也不想在深圳长期发展,所以先辞了职,回到上海这边好让自己更方便的参加面试。

这是我第二次裸辞了,有了上一次的裸辞经验,我这一次在心理准备方面,明显更加的游刃有余。

花了一周多一点的时间,在上海参加了十几家公司的面试,也包括美团、字节跳动等大厂,可是因为能力不够或技术栈不匹配被刷了。最终有三四家想要要我,我也拿到了一份较为满意的offer。

面试是一个非常消耗心力的过程,我很难想象,若不是我比较侥幸,拿到了几个还满意的offer,我很难想象在此时凄风苦雨的寒冷的上海,孑然一身的我,会面临怎样的崩溃与绝望。

所以,我衷心希望,我能够把自己的一些面试经验分享出来,去帮助到一些正在找工作的朋友,让他们的求职之路更顺利一些,少一点像我这样的折腾。

我工作三年,主要编程语言是python,找的是后端开发或运维开发的岗位,想结合自己的实际面试经历,来谈一谈python社招的一些经验,欢迎大家交流讨论~

面试之前

市场环境

先说一下大环境,中国的互联网环境已经渐趋稳定成熟了,但初中级别的程序员依然很泛滥,高级程序员很缺失。所以想要在众多应聘者中脱颖而出,实力才是王道。

另外,通常的招聘季是金三银四或者金九银十,像我这个11月份去找工作的毕竟是很少了,但我觉得上海毕竟是大城市,要说市场上没有岗位是不可能的,另外在淡季,和我竞争的人也很少了。所以,基于以上的判断以及自己的勇气,我毅然觉得辞职,从深圳来到了上海。

个人定位

我觉得,每一个招聘者都要对自己在市场上的位置做一个合理的评估,这样才能准确的知道自己想要找什么类型的公司,是大公司大平台呢,还是中小型企业呢,还是创业公司呢?评估的依据,取决于自己的实力,职业道路的方向,以及对市场的认识。

不过如果不清楚也没有关系,投递公司的时候可以各类公司都投一投,大中小公司都去面一面,总之,不要把鸡蛋放在一个篮子里,多给自己制造一些机会。面试是一个很好的去接触外界,了解自己能力水平的过程,可以帮助你对市场环境有一个更清晰的认识。面试结束后通常有反问问题的环节,也可以把握住机会,多去问一问对方公司在做的东西,使用的技术栈等等。

对于我自己来说,我就把面试当成一个很好的检验自己的机会,同时让我有机会去和别的公司交流技术。所以说,平时在工作过程中,也可以隔三差五的出去面试一下,看看自己的能力水平几何,避免自己和市场脱节太久,以及温水煮青蛙的情况。

简历

接下来就是制作一份简历,关于如何制作一份简历,网络上的教程也很多了。我觉得技术简历的关键就是要把自己的做的比较出彩的项目,以及个人技术栈讲清楚,这些都是面试中问的比较频繁的几个点。另外因为自己痴迷于markdown,第一次尝试了markdown风格的简历,效果还不错,蛮清晰的。

渠道

对于招聘渠道的选择,如果有小伙伴的内推那是最好的,另外建议多注册几个app,多管齐下的去寻找面试机会,比如拉勾、boss直聘、猎聘等等。一些想去的公司的官网的招聘页,也是一个不错的信息来源。

面试准备

作为技术面试,该如何去复习准备面试呢,我觉得可以从以下几点去考虑。

数据结构与算法

为什么把这一块放在第一个讲,因为这是技术面试里非常重要,但是平时工作中又最容易忽视的一块。都说「面试造航母,工作拧螺丝」,如果不是算法岗,程序员在日常工作中算法使用场景非常有限,但这就是面试考察的一个重点。

我大概面了十几家公司,基本每家公司都会考一些算法题,或者让你说一下思路,或者直接手写程序,如果没有事先准备过,会特别的不适应,尤其是白板算法那块。

所以,我的准备建议是,面试前至少前一周,就要花时间去练习算法题,保持手感了。

首先强推leetcode网站,中文站是https://leetcode-cn.com/。leetcode是非常有名的刷题网站,里面汇聚了各大企业的经典算法题,而且可以在线提交代码,自定义测试用例,查看其他人的题解等等。如果你觉得中文站上面的题解没有自己想要的,也可以看一下外文站https://leetcode.com/
,他们的题目顺序都是一样的,只是中文站在本土化这方面更强一点。

如果因为时间紧迫,我建议你针对以下数据结构和算法的知识点进行重点复习:

  1. 各种排序算法,冒泡排序,堆排序,快速排序等,时间复杂度空间复杂度分析,能做到手写。

  2. 常用数据结构。链表、二叉树、堆、栈等等。

  3. 经典算法题。(待整理)

基础知识

任何一门技术面试,基础知识一定是重中之重。对于python程序员面试来说,我觉得下面三块内容比较重要,考察的频率也非常高。

  1. 语言基础

可变对象、不可变对象、装饰器、迭代器和生成器、线程和进程、魔术方法、动态解释性、元类等。

  1. web基础

http请求、状态码、网络安全、django处理请求的顺序、cookie和session

  1. 数据库

mysql的事务、索引、锁、性能调优,nosql数据库中redis考察的比较多。

项目经验

一般对应届生来说,基础知识很重要。对于社招来说,项目经验是非常重要的一块内容。

我建议可以从下面几个角度去准备自己的项目:

  1. 项目介绍

推荐STAR模型。

S——situation,项目是什么背景下产生的
T——task,你的任务是什么
A——action,你怎么做的
R——result,结果如何

  1. 项目中的难点、闪光点

我相信每一个真实做过自己的项目的人,肯定会对自己的项目有所思考。总结一下自己在这个项目里最难的地方,以及最精彩的地方,也可以使用上面的STAR模型。

  1. 项目框架

有的面试官会要求你在白纸上把项目的框架图或者设计图画出来,这个也可以提前准备下,做到条理清晰,临场画的话很容易乱。

总结

面试是一场艰难的战役,我发现在那种紧张对弈的交锋氛围中,我从来没有体会过所谓超常发挥的感觉,准备了100分,能把60分发挥出来就已经非常不错了。所以,建议每一个面试者都要提前把一些必问的东西(个人介绍、项目经验等等)提前准备好,并且模拟表达一下,以防临场紧张而忘词。

面试真题

因为自己大厂和创业公司都会去面,给我的感觉是,大厂的考察深度会更深一点,比如问你怎么用python定位一些内存满、CPU满的问题,怎么做mysql性能优化等等。而小公司问的更多是一些基础问题,以及看你之前经验的一个匹配度。

我这里从我亲身的面试经历,精选出了30道面试常考题,涉及到了python面试的方方面面,大家可以自行测试。

python基础

  1. python是什么样的语言,和其他语言的区别。
  2. python中的线程和进程,以及使用场景,你知道协程吗?
  3. GIL是什么,为什么会有GIL,去掉会怎样,有了GIL为什么还要给程序加锁?
  4. 迭代器、可迭代对象、生成器分别是什么?生成器的作用和使用场景?
  5. python中的装饰器是什么?如何实现?使用场景?
  6. python中的元类是什么?
  7. python中的可变对象和不可变对象之间的区别。
  8. python的魔术方法你知道哪些,newinitcall的区别是什么
  9. django的中间件是什么
  10. celery的原理,如何配置worker的权重

项目

  1. 如何定位内存过高或CPU过高的问题
  2. 画一下你的项目的结构
  3. 项目中你遇到的最大的困难是什么,是如何解决的?
  4. 项目中你最有成就感的地方是什么?
  5. 你业余是怎么学习编程的?看哪些书?有自己做过什么项目?

web

  1. HTTP/GET/POST/PUT/PATCH之间的区别
  2. 状态码的含义以及出现场景,301,302,404,500,502,504等
  3. cookie和session的区别和联系
  4. 从url请求到返回,中间经历了什么
  5. HTTP和HTTPS的区别,HTTPS如何进行加密的

数据库

  1. mysql的索引是什么,如何建立索引,B+树的结构
  2. mysql中的事务是什么,隔离等级是什么
  3. 如何优化sql语句
  4. mysql的性能优化等

操作系统

  1. 堆和栈的区别
  2. 什么是io多路复用
  3. nginx的配置

算法

  1. 找到整数列表的最大k个数,时间复杂度
  2. 输入一维数组array和n,找出和值为n的任意两个元素
  3. 常见的排序算法,时间复杂度分析
  4. 生成一个旋转矩阵

职业发展

作为一个代码打工仔,对于我来说,想要成为牛逼的程序员的路还很长,一刻都不能懈怠。

我无法从HR角度,或者技术leader的角度来臆测哪种状态的面试更能获取面试官青睐。但通过我积攒的大量的面试经验,我多少可以推断一些成为有竞争力的程序员的一些必要条件。

1. 技术是王道

这一点毋庸置疑。我是一个非科班出身的程序员,在技术成长方面更多的是在工作中学,但这还远远不够,每一位想要成为大牛的程序员,都必须深入底层原理去学习,比如操作系统、网络、数据结构和算法等,也许这些东西在你工作中看起来没用,却是提高你的技术深度,扩大技术视野的非常重要的一环。

我是一个比较容易自卑的人,在面试的时候,遇到答不上来的问题还是非常容易挫败的,觉得自己好弱。术业有专攻是一方面,但很多基础的东西是一个程序员的基本素养,在这上面丢分还是很容易给面试官造成一个不好的印象的。另外,面试所覆盖的点也不一定完全击中你所准备的东西,我觉得面试者可以在面试过程中主动「推销」自己,哪怕一个问题没答上来,也要尽可能的展现一下自己在这一块内容里做过哪些研究,避免面试官错误预估你的水平。

除了基础知识和底层原理,技术的另一块内容就是你在工作中的实践了。我在工作中常常见到一类人,他们只满足于被分配的任务,抱着多一事不如少一事的观念,不去把一个问题深入的去弄明白,害怕技术挑战,包括我自己曾经也是这一类人。

其实这样对职业发展的道路是非常不好的,如果不去走出舒适区,你永远只是一个CURD的程序员,完全没有市场竞争力。在面试中最能展现自己的,就是你在面对技术难题的时候,是如何研究,如何思考,如何解决的。所以,工作中遇到技术难题,一定要把它当做技术上的试金石,成长的宝贵的机会,而不要当做拦路虎而逃避。

2. 工作经历

面试官常会问的一个问题是,你未来的职业规划是什么。我不知道其他人有没有清晰的规划,对我自己来讲,更多的还是走一步看一步,并没有想的特别远,这其实是很不好的。

曾经有一个面试官对我讲,5年是一个关键节点,如果你工作5年,依然没有华丽的工作履历,或者工作能力仍旧处于小白水平的话,是非常危险的,市场对你的能力是由怀疑的。

我想,如果作为一个5年开发经验的人,他差不多也换了两三份工作了吧,从每一个公司的情况每一个工作岗位的内容,多少可以看出点他的职业发展路径有没有一条清晰的路线。如果一个人的目标很明确,他的每次跳槽一定有自己的内在逻辑在里面,他的技术成长也不会太差。而如果每次跳槽都很盲目,技术成长没有延续性,很可能你虽然工作很多年,但是根本没有核心的技术竞争力,这是要警惕的。

对未来的规划这块内容,我自己也非常欠缺,因为我总是抱着要「活出自我」的想法,对一些世俗理论天然排斥,其实是走了很多弯路的,不过既然我意识到了这一点,亡羊补牢为时未晚吧,未来,会多接触一些技术大牛,参加一些技术论坛,不会囿于自己的舒适区,早点找到一条快速的职业发展路径。

薛兆丰老师曾经讲过一句话,「每个人都在为自己的简历打工」,我在这里感同身受,卖方只是提供工作岗位的,竞争永远是买方和买方之间的竞争。所以,想要出人头地,一定要比其他员工多下功夫,少壮不努力,老大徒伤悲。

3. 格局

这个词是我从一个猎头朋友那儿听到的,他说在职场中,男生最重要的是格局。

我是这么理解的,只有你愿意到达什么样的高度,你才有可能成为什么样的高度的人。比如,如果你只甘心做一个工程师,那就活该当一个底层码农了,而如果你能够站在更高的维度去做一些事情,我相信你能收获很多宝贵的东西。

比如,在实际开发中,多去把一些业内的新技术引用进来,而不是仅仅满足于已经成熟的开发框架;不再仅仅去完成领导分配的任务,多站在公司或者团队的视角去看问题,多一些全局的视野;遇到问题时,不要简简单单的解决了就完事了,要学会深入底层,以及触类旁通,把这一类问题都解决,形成自己的思考问题的逻辑框架……

这些东西也是我在此前的工作中缺失的,我希望我自己能够在新的工作中,多思考,多沉淀,形成自己的技术格局。 毕竟也不是初入职场的小白了,我理当给自己提出更高的要求,这也是为了在下一次的招聘过程中,能更顺利一些。


每次拿到offer之后,总会长舒一口气,觉得自己可以休息一下了。但随之而来的是,后面的入职、适应新的工作、新的工作团队,搬家找房,一个又一个的挑战接踵而至。

还不能懈怠啊,希望自己在二十一世纪一十年代能安稳下来,以最好的姿态去迎接2020年!也祝所有在找工作的朋友们早日拿到满意的offer。

最后,我建了一个github的项目,上面会持续更新我的python学习心得和面试指导,欢迎star~

https://github.com/ZhiyuSun/python-interview

9条回帖

回帖
加载中...
回帖

相关热帖

笔经面经近期热帖

近期精华帖

热门推荐