前言
2024/8/15
这篇面经是大二上学期写的,是我第一次比较正式的面试,现搬过来给大伙做个参考
目前我大二,已经打了几个竞赛,像全国大学生物联网设计竞赛、蓝桥杯、大学生创新创业大赛这些。奖倒是拿了不少,不过总感觉自己写的代码和实际生产脱节,担心自己写的都是“玩具级”的工程。于是萌生了到企业中接触实际业务代码的念头,很着急寻找一个合适的实习机会来充实自己的经历(和简历)
本次是我“找实习”之路的第一站: 深圳福强海关,很是紧张激动。作为一个长期呆在象牙塔的学生,我很期待此次面试
岗位及要求
岗位: python 后端开发
要求:
flask python基础语法 并发 vue.js h5c3 js sql(mysql clickhouse) pandas numpy
过程记录
属于内推,没有笔试,提交简历后直接线上面试
面试官1:你现在是大二,能腾出时间来吗?我们每周要来三天
我:可以接受的,我能抽时间来
(我总不能说腾不出时间吧)
面试官1:有没有做过前端相关的工作
我:有了解过,经验不多
面试官1:没事没事,稍微问点简单的。你简历上说有web开发相关知识,有没有用过某个前端的框架
我:没有用过,都是在用原生 js 开发
面试官1:好的,明白了,那原生 js 要怎么和后端交互
我:就是用 js 收发 AJAX 请求,用到 fetch api (还有XHR,不过毕竟是老api,就不提了)
面试官1:pandas 之类的有用过吗
我:用的比较少,之前打一个数据分析比赛的时候用过
面试官1:嗯嗯,黄哥(?)你来问一下 python的问题吧
面试官2:pandas 用过是吧,有用 dataframe 写到数据库的经历吗
我:没将 pandas 和数据库结合过,只是在 flask 开发的时候用到了数据库,用 pymysql 一类的驱动来向数据库写东西
面试官2:OK,懂你意思;那 dataframe 分组这些有用过吧,就是,分组函数
我:(? 什么玩意,太久远了,dataframe 是啥都忘了)应该?没有用过
面试官2:那你们使用 pandas 是干嘛的,分组啊,统计这些都没有吗?
我:(肯定是有的,但是咋用的都忘完了)有用过,之前打数据分析比赛的时候,给了一个分析银行客户忠诚度的任务,有一个几万行数据的 excel 表,我就用 pandas 按照一些行列元素进行筛选。例如某个产品哪些年龄端的人购买最多,我就筛出来然后用 matplotlib 画图然后做数据分析这样子
面试官2:还记得怎么写的吗?
我:已经比较久了,是大一上的比赛,之后就没用过 pandas 了
面试官2:问个简单的,python的list怎么去重
我:新建空列表,遍历原列表,把元素逐个放进新列表,如果某个元素已在新列表,就不放,这就得到一个不重复的列表 (还可以利用集合自动去重,更方便但是无法保证数据顺序,li = list(set(li)) )
面试官2:解释一下 break 和 continue 的区别
我:break会直接打断整个循环,continue会直接进入循环的下一次而不会进行打断
面试官2:你是有在开发里用过还是刷的题啊
我:有用过,在项目里写过相关的代码
面试官2:SQL语言熟悉吗
我:懂得不多,基本操作还是会的
面试官2:用过是吧?简单查询怎么做
我:select + 想要的列名 + from + table名
面试官2:内连接和外连接了解吗
我:不是很了解,还没用到这个地步
面试官2:你是课程中学到的 select 这些句子还是项目中用到过
我:我是在学习网络安全的时候了解的,有一种漏洞叫SQL注入,做相关题目的时候学习了一些SQL语句的用法
面试官2:我看你简历上有写会PHP代码审计,你是很熟悉PHP吗
我:不算特别熟,我对php中的一些危险函数比较了解,例如一些能导致命令执行漏洞的函数我能够辨认出来
面试官2:行,冲哥(?)你继续问吧
面试官1:你是怎么防止SQL注入的
我:目前了解了两种方法,一种是用orm技术,另一种是sql预编译(这里说了一大堆,讲得比较乱,个人不太满意)
(还有用waf做过滤,如此基础,但是当时没说出来)
面试官1:你说的这两种方法有区别吗
我:(? 啥玩意,当然有区别,但是突然问到我也讲不出来)额,开发上写起来有区别,但是更深层次的区别我就不清楚了
面试官1:(显然不满意) 两者都是预处理嘛
面试官1:你有部署过自己写的web服务吗
我:有部署过,之前租过云服务器,在上面部署的
面试官1:那前端是怎么部署的
我:前端文件放进flask的工程文件里,然后要用的时候用模板渲染了发到客户端
面试官1:噢,是利用了这个flask服务器部署了前端是吧
面试官1:python怎么手动控制事务
我:(完蛋,听都没听过)这方面不是很了解,可能用到过,但是说不出来
(其实就是commit、rollback这些,原来这就叫手动控制事务,寄)
面试官1:行,那就问这么多,成绩单发我没有,等一下发给我,然后退会议吧
(此时心态发生了一点变化,还要看成绩单,很难受)
师兄评论
看你回答可能被人带着的样子,以后可以尝试下跟着自己的节奏,而不是面试官的节奏
例如SQL语句那里,你不要让别人问你,你自己说
甚至可以说很多高级的东西,但是又不要让别人感觉你只会这些
(我:这样子,就是要主动些,把自己会的展示了,是吗)
是的,给我,我可能就会说啊,我们平时项目里面很多时候都会用到 SQL 语句啊,包括用到一些 SQLite,然后 MySQL,然后 MogoDB 这种数据库,也用过一些 redis 这种非关系数据库啊。然后我们也平时也做过一些关于大数据存储的一些优化啊,例如还有一些跨表建值关联,然后也做过一些数据库里面的一个全文检索的虚拟表。哎,做过这种东西。
面试官很多时候问你一些技术问题的话,他的印象分会低很多,如果你自己能更好地再展示这些能力可能会好不少
总结
最终没有拿到 offer。个人认为原因主要有二
一、准备不足,岗位要求里写明了要求掌握 pandas,却在明知自己忘得差不多的情况下,没有临时补习,导致关于其的问题全部回答得不理想
二、过于被动,面试经验不足,以为答好面试官的问题就可以了。正如师兄所说,要跟着自己的节奏,主动展示自己会的东西,而不是等着面试官来问
无论如何,此次面试经历是十分宝贵的。还是要再接再励,精进自己的开发知识,这样才能有底气