都在说行业内卷,卷的是什么呢?大概就是一些我这样的一些‘劣币’吧~
背景
疫情之下,部门解散,又再一次的踏上了求职之旅。虽然已经工作多年,但是越发的感觉到自己的不足。
没有正确方向的职业规划;没有打开自己的眼界;被自己思维方式所束缚的感觉。
前奏
正好坐在家里复习,突然接到了hr电话。
简单沟通之后,觉得离家也比较近,是个机会。就立马约在了15分钟后面试。
穿鞋、关门、下楼、骑车、出发…
到达目的地后,hr简单沟通,把我引入了会议室。等待面试官的到来…
过程
坐了一小会儿,
一个中年稍胖带着眼镜的男人拿着电脑进来了。
很自然的做了自我介绍,‘我叫xx’,顺便关上了会议室的门。慢慢的坐到我旁边的位子上。
没有其他开场白,我想着先主动出击吧。在他准备却未开口之前,就说:“我先做个自我介绍吧!”
他示意之后,
我便把演练过的‘自我介绍’一一说出。
他把电脑背对着我,偶尔敲击键盘,偶尔看向我。
看似漫不经心,但他听的很认真,我介绍的核心被他拿出来提问。
“你觉得学技术是为了满足需求还是用户体验?”
我说了自己的看法。
介绍完之后,正式开始
Round 1 你的项目经验
Q:“说说你感觉做的不错的项目吧!~”。
A:“好,对我来说成长最大的一个项目是…”(内心OS:这不是一道送分题嘛!技术水,但项目经验还是丰富的,挑个最有心得和熟悉的项目上吧)
(连环问…)
Q:“在项目中你的职责是什么?”
A:“略…”
Q:“你在项目中做了哪些工作?”
A:“略…”
Q:“你在做这个项目过程中碰到了什么问题?”
A:“从现在来看,当时的项目性能很差…”
(他立马打断,我们这一趴不聊技术,只聊项目)
A:“碰到了客户的大量需求X,短时间内难以完成…”
(他追着这个一直在往下问,难点在哪里?怎么分析?怎么解决?结果是什么?)
毕竟自己做过,所以也能根据问题一一作答。他在过程中会偶尔发出疑问,或者重复复述,差点让我产生自我怀疑的感觉!
这个环节大概有半个小时。可能业务有相关性,不断地在挖掘业务深度和应用。而且他的方式一直是引导式的,语气平缓,让我自己感觉发挥的还不错。
Round 2 技术水平
Q:“好,我们现在聊聊技术,你最擅长的技能点是哪一块?”
A:“Redis吧”(脑子里快速过了一遍最近复习的知识点,感觉这块理解深一点,可以拿来说吧!)
Q:“为什么要用Redis?”
A:“减少数据库压力,部分数据存在内存中效率高…等!”
(本以为他会垂直深入下去问,没想到他来了个横切!)
Q:“Redis内存结构和数据库内存表有啥区别?”
A:“你说的是mysql的memory引擎表么?”
Q:“每种数据库都有内存表,oracle,sqlserver,mysql都有!”
A:“嗯,数据结构有区别…”(脑子里回忆起来内存表是对sql语句及返回数据的高速缓存,但是有点模糊,所以把确定的说了)
(不是说好的redis么,怎么调到MySQL了)
Q:“那sql的语句的一个执行逻辑是什么?”
A:“ 我本以为他问的是下面这个:
(8)SELECT
(9)DISTINCT
(11)<top num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | ROLLUP>
(7)HAVING <having_condition>
(10)ORDER BY<order_by_list>
但真实想要的答案是这个:
1. sql发送到客户端
2. 从高速缓存中查找是否有sql/数据,如果无则继续
3. 检查sql语法是否正确
4. 检查sql语义是否正确(表名、字段名是否正确)
5. 对查询对象加锁
6. 检查查询权限
7. 确定最优执行计划
8. 执行语句
9. 返回数据
”
(这个问题没有回答好)
Q:“如果让你来设计一个sql语句的执行器,你会怎么做?”
A:“按照自己的思路回答了下”(他开始考察你的理解/设计/原理,并且希望能快速有效响应。)
在我说了一些内容后,他立马打断,继续深入问
Q:“数据库的索引结构是什么?”
A:“mysql b+tree”
Q:“聚簇索引和红黑树区别?”
A:“二叉、多差;节点的存储内容不同…”(他问的内容是很基础的东西,但是会时不时的反问你:‘是这样么?’,‘具体数值是多少?’, 考察你是不是很笃定)
Q:“b+tree读的过程?b+tree的叶子节点存储什么数据?确定只有这个么?…”
A:(一些问题记忆模糊,有点hold不住了)
Round 3 你最近的一个较好功能工作
Q:“说说你最近做的功能工作?”
A:“前端时间在做爬虫相关工作”
Q:“那你说一下爬虫吧,说说你的看法?”
A:“爬虫就是搜索引擎、大站释放出了很多蜘蛛,爬取互联网上的内容。有的遵循robot协议,有的不遵循”
Q:“这一趴我们聊得实际一些,你说的太虚了”(应该是讲得太泛了)
A:“…”
A:“爬虫,就是访问目标网站,获取网站上一些公开的内容。解析url,去重,分析url的响应html,处理入库”
Q:“url去重怎么做的?”
A:“用不重复数组 set”
Q:“如果A访问B,B访问A,每次访问带时间戳,怎么去重?”
A:“解析url地址,或者针对response做处理。”
Q:“判断重复你是全表扫么?如果xx怎么办,如果xx怎么办?”
这里问到的一些问题其实是在工作过程中会存在但是不会太关注的点。但他问的很致命,有些我在短时间内是没法做出好的解决方案( 很快就联想到:他可能会在面试评价表上写这么一句话“工作过程中没有深入思考,预设场景没法给出有效解决!” )
Q:“碰到了什么技术问题?怎么处理?”
A:“碰到一些反爬机制,可以用ip代理池防止封ip,三方处理图形验证码,滑动验证码等”
Q:“解析url你是怎么做的?”
A:“三方工具 jsoup,selenium等”
Q:“有没有自己处理,不用三方工具的”
A:“因为html标签是固定的,当做一个字符串用分割或截取处理,或者使用javascript获取页面上的元素等…”
Q:“好,下一趴”(一直在考察自己的深度及原理性的东西,他也不做解答就是一直问下去)
Round 4 你自己的兴趣点在哪方面
Q:“你说说你自己对哪些方面感兴趣吧!”
A:“哦,有看一些SEO方面的资料,挺感兴趣!”(有自己的博客加持并联系,还是有很多心得的,所以感觉能和他聊一聊)
Q:“SEO的目标对象是什么?”
A:“满足用户的需求!”
Q:“是这样么?”(他一脸怀疑,我瞬间感觉他懂这块!)
A:“SEO是为了服务企业网站、个人网站能够快速的被搜索引擎检索到。但是这样做的目的也是为了满足用户的体验”。(把自己的一些理解说出来。)
Q:“深爬、广爬是什么意思?区别!”
A:“深爬就是… 广爬就是。”(看来他真的懂)
Q:“提高排名的因素有哪些?分别是什么?”
A:“内容,域名年龄,服务器… 等有很多很多”(毕竟自己读过相关,都能回答上来)
Q:“你知道搜索引擎有哪些算法么?”(过程中他总是往算法、底层方向引导)
A:“我不需要关注算法,只要关注内容这块,把这块做好就可以了”。
(这里他说了我很认可的一句话,【是我在不断实践摸索中理解的】,他是真得非常懂这块,及很深的理解)
Q:“如果你懂了原理和背后的设计,就不会有那么多的试错,也不用参考网上的这篇文章、那篇文章来左右你的思维”(他很快地就分析出了我目前碰到的问题,而且提炼的很精华)
A:“嗯嗯嗯,是的,是的…”(我只能在惊诧中,附和着他)
…
Round X 总结一下
面试过程中,每当一个环节结束时,他都会问,“你总结下xxx的核心/本质/作用/思维”。
我也会把这一环节的核心内容尽量精简的表达出来。
所以会感觉这个面试官的手段有很多,从多个角度考察被面者。
结束
差不多一个小时的时间,问的差不多了。他主动介绍了公司的信息,
(主动介绍,是不是有戏啊!)
我把他在介绍过程中产生的疑问抛了出来,他也做了回答。
问我还有什么想问的。(我直白一点,就直接问了)
Q:“你觉得我怎么样,可以么?”(经过分析,这种死亡问句还是不要出现的好?容易给面试官造成一种窘境,给自己埋坑)
(他微微一笑)
A:“嗯,项目部分不错。但是技术层面有点不够深入,不晓得底层原理。这个是你的学习方法可能有问题。我们今天就聊到这”。
好吧,一说这话,就知道凉了。
总结
首先,还是非常感谢这个公司给予的面试机会。
整个面试过程很舒服,面试官很谦和,他的能力很高,大概有7、8楼那么高。
因为他在引导,并且在问题上能直击要害。上帝视角看着你,深度、广度都很好。
仿佛我之前的经历被看穿一般。用什么来打比方呢?
我会开车,能正常的上路;他不仅会开汽车,还会修汽车,更能解决开车过程中碰到的各种问题。
可能我的水平太差,但这就是一个直观的感受。被降维打击了。
“知其然,知其所以然”
码农与程序员之间就是这样被拉开距离的。