plainify

一个科班小前端的大厂面经

「跟我来面试」系列的第一篇文章是关于前端的,发出后看到有读者反馈说内容较少,问的问题比较基础。因为博主是后端的,前端方面并不是非常了解,所以我找到了同组的小伙伴,让他分享一下自己春招时的一些经历。 他和我是同一个实验室的,就叫他 x 吧,目前研一,两年制硕士,今年实习。x 的本科前半段迷茫在科班的基础理论学习和课程作业中,大一大二对前端一无所知,没想关心太多,只想保研就好。大二暑假参加一项学校项目,机缘巧合接触到了前端,发现软件工程还有很多值得探寻的地方。大三时他的保研形势已定,于是参加各种比赛,摸索自己的兴趣所在,终于在一系列比赛中尝到了前端的甜头,于是决定正式入坑,带着起初“前端能让页面好看”这般粗浅好笑的见识,打开新世界,一步步丰富自身。终于在这次春招中取得了一些小成果: 网易雷火三轮技术+HR,拿到 offer。 字节跳动教育业务三轮技术+HR,拿到 offer。 美团两轮技术,leader 给了口头 offer。 阿里淘系目前三面结束,被大 leader 全方位调教,拿到 offer 腾讯 PCG 到第四面,战线很长,后续没有继续面腾讯,淘系 offer 拿到后就推掉了这里。 说实话,你可能不知道花一个月时间拿到 4 个大厂 offer 是什么体验,我们一般都管这种人叫“offer 收割机”。 在这里分享下面经,附带他的简要回答和思考。对于基础问题,大家可以查漏补缺,建议收藏;对于场景或者高层思考型问题,大家参考即可,这些都是面试官根据自己部门或每个人的履历定制的。轮次越多,问题也就越偏向高层,需要大家更多的总结思考,找到平衡,甚至再生产。 点击文章底部**「阅读原文」,即可查看他的个人主页。以下是他的整理,篇幅较长,建议大家收藏**,方便复习 👇 网易雷火三轮技术+HR 一面 一面一般都是基础,在回答问题的基础上,最好能主动发散广度深度,面试官印象会很好。 介绍下自己并聊聊项目。 这个因人而异,要大方得体,讲出重点。主要围绕项目是什么,为何要做这个项目,解决了什么痛点,你在其中负责了什么工作,遇到并解决了什么问题,如何和不同模块合作,把控了多少架构。后两点需要一定思考和积累,把前面的讲清楚能满足一些面试官,但是大厂面试官常常会希望你说一些架构和整体方面的理解,是加分项。 如何用 await 和 async 写一个睡眠函数? function sleep(time){ return new Promise(function(resolve,reject){ setTimeout(()=>resolve('over'),time); }); } async function run(time){ let result = await sleep(time); console.log(result); } run(3000);复制代码 说说 inline 元素和 inline-block 元素的区别。 CSS 基础题,我从布局方面不换行和尺寸方面 inline 设置宽高无效,inline-block 可以来讲,还发散了一些 CSS 元素体系讲了讲。 inline 元素的 margin 有用吗? 是一个很刁钻的切入口,大家常常忽略对 inline 元素的研究,还好我平时比较喜欢捣鼓 CSS,其实再默认水平方向的文档下,设定水平方向 margin 是有效的,垂直方向无效。 讲讲 html 如何添加事件监听,事件处理有哪些阶段? 添加事件监听很简单,document....

plainify

从三本到985再到微软,他做了这些

对大多数人来说,在即将到达大学终点的时候通常会出现两条路,一条是步入社会就业,另一条是踏入高校读研深造。 往年,研究生复试和春招基本是同时进行的,这也就导致考研结束后很多人觉得自己没考好就直接放弃了复试。今年由于疫情的原因很多学校的复试都推迟到了 4 月底 5 月初,这就让很多 2、3 月开始工作的人,又多了一次选择的机会。 其实每年的这个时候都会有很多人讨论究竟是读研好还是工作好,不过毕竟没有人可以同时涉足两条道路,所以选择就变得格外重要。毕业之后我选择读研这条路,我的朋友寒食君也曾和我交流过并写了一篇文章《保研之路:从双非到南大》,现在很难确定这个决定对我来说是否正确,对其他人也同样如此。我们需要全方面的考量自己,从性格、抗压能力、未来期望、家庭条件等多个方面去考虑。 今天写这篇文章,不是为了告诉大家如何去选,而是想介绍一个我在读研期间认识的一个人,他的经历让我有些惊讶,完全可以拿去当考研成功的案例,这里给大家做选择时提供一些参考。他是我的舍友,本科来自于烟台大学材料科学工程中韩合作。高考时遭遇滑铁卢无奈去了这个三本,后来跨考考研时逆袭到南京大学读软件工程专业,读研时开始自学 Java,在这次的春招实习中斩获了网易、腾讯和微软的 Offer,最后选择了微软。从三本到 985 读研,再到斩获数个大厂 Offer ,这样的人,实在是少有。 最近一直有更新面经系列,本来也想记录下他的面试过程的,但是一想到他这励志的经历,便想请他谈谈自己这几年的心路历程,留下一点文字,给正在看文章的人一些指引和参考。下面我将会采用 Q&A 形式记录一些重要的内容。 为什么选择考研? 因为我本科是中韩合办的材料专业,所以专业课是由韩国语教授的。又因为我韩语不行,所以专业课都听不懂,说实话对我来说毕业都挺困难的。最简单的原因就是找不到工作,得想办法混个饭吃。放在面前的选择有三个,一是去韩企。我不会韩语,所以去不了。二是考公务员,我不知道你们了解山东不,在山东公务员首先很难考,其次像我这种不会喝酒的感觉也没啥前途。三就是考研了,也算是个没有办法的办法? 为什么考研选择了南京大学,而且还是跨考软件工程? 我高考考了两年,最后压本科线上的这个专业。本科挂了一万个科,在本科其实有想过修软件工程的双专业,也不是没报名,可惜第一天上课就和高数补考撞了。所以我就放弃了双专业(其实是因为懒得去了),去了补考(也没补过,最后重修了)。考研考了两年,第一年考南航差一分上线(吃鸡太好玩了,而且上线也不一定能录取),看到现在你肯定觉得我在装逼。其实我说这些是想表达,你想学习其实不一定来不及。第一年考研结束后,切实感受到了生活压力(同学大四回家生孩子了,导致没顺利毕业,爸妈帮他看孩子他也不好意思要钱,只能在我租的房子里睡沙发)。也好好想了想自己想要什么,所以决定好好冲个猛的,猛的冲不动就回家打工混吃等死。我认为我唯一比别人猛的方面,就是用搜索工具。我要散播第一个消费主义观点:**扔了百度,快想想办法用谷歌吧。**然后说几个关于考研择校的观点,不一定对,抛砖引玉: 招人越多的越好,这样如果你初试分足够高,复试就会特别稳。不用担心会因为奇奇怪怪的事情把你黑掉。而且招人足够多,分数线的波动就不会特别大。招三个人,有两个猛男一个关系户你考第三不也无能为力嘛。 如果你想考好学校,出身又很垃圾,那就直接冲猛的,在你能力范围内越猛的越好。这样可以一定意义上避免学历歧视,因为在好学校看来你们学历都挺垃圾的。(这是我的个人看法) 现在每个学校基本都能搞得到历年真题,尽量选变化不大的。学校出题变化大,对于猛男来说没啥,但是我们小弱鸡不能拿二十几岁的一年时光来赌这个。 想要完成以上的筛选工作困难并不大,特别是在你搜索工具用的得心应手的情况下。南大软院在我考研那年来看性价比是特别高的。你可以试着问问你的亲戚朋友,如果不在江苏省内的,可能很多人都不知道南大是个什么级别的学校,说不定你说南大很多人都以为是南开大学。但是这又是个极好的学校,所以很适合捡漏。又因为考英二数二(对高考英语 80 分且四级没过的我比较友好),会导致调剂困难(大部分学校都是考英一数一的),有一部分人就会因此不敢报名。而我的打算就是考不上就回家打工嘛,我也没想调剂,所以比较适合我。确定南大之后就是计算机院和软院之间的选择了,南大计算机院有国重,用屁股想想就知道对科研要求高,我啥也不会还跨考,本科也不好也没啥科研能力,别人咋也不可能要我。经过一通排除,我就选择南大的软工(当时在考研群里看了几个考人工智能院的大佬,第一届参考书都整不明白就敢冲,瑞思拜)。 然后是我考研的一点小心得。我太讨厌我家乡的生活了,导致我有无穷的动力来压迫我自己好好学习。考研第二年,真的是拼了命在学,不然像我这种啥也不会的不努力想考上南大肯定是不可能的。我要在这里散播我的第二个消费主义观点,**能花钱省时间的,价格不是太离谱就别犹豫。**跨考相较于不跨考的人来说,你的时间肯定是更宝贵的。保证时间,一是需要延长学习时间,二就是要在单位时间内学多一点。我完成这两点的方式如下: 建立起学习的工作流。 通过番茄钟来保证单位时间的效率,也可以有效统计每天的学习时间。 使用 anki 和思维导图来进行知识的复习,保证你学完的东西不会白学。 花钱让自己学习的效率更高。(别人售卖的,声誉良好的课和资料一定是有原因的,他至少花费了课程数倍的时间来沉淀知识,这也是我觉得为啥听话的孩子普遍吃亏少发展好的原因) 但是我认为学了两年是最重要的一点,说到底就是磨出来的。当然我也吃了一些亏,我经常会纠结哪个课最好,然后对比很久。方法总是第二步,开始学习才是最重要的第一步。找到一个差不多的尽快开始,会比花时间在比较上好很多。 你本科是材料专业的,考研时才接触的软件工程,现在研一也快结束了,有什么收获吗? 从一个啥也不会的小菜鸡到能写出来点能动弹的东西,还是挺有成就感的。 一个好的环境很重要,我能有这些大公司的面试机会就是吃了南京大学的红利。而我研一能有这些进步,主要在于身边有太多优秀的人。说实话第一次上课我是挺震惊的,虽然没有很多人在听课,但是所有人都在学自己的东西。这个公众号的主人也给了我很大帮助,我刚上学真是一头雾水啥也不懂。没他指路现在估计我还在慌着面试呢。披头士几个人都猛,但他们肯定不能都是天才吧。持续训练,刻意练习,才是我们这些笨逼的归宿。虽然现在我在他们之间还是最菜的,但是比较来看,说刚开学的时候我和他的编程能力差一百个我是不过分的,但现在估计也就差几个我了。 这次春招,你面试了哪些公司?最终选择了哪家呢? 面了一万个公司。你能想到的说的出名字的说不出名字的基本都面了,阿里、腾讯、头条、美团、网易、微软等等等等等等等。拿到 offer 的就只有微软、腾讯和网易,没拿到的就是都挂了。这其实还是一个笨逼多锻炼的故事,多试试总有运气好的时候吧。而且面试官的问题都是类似的,有一次我上午面网易,下午面腾讯,问的问题几乎一模一样。只要你在面试之间多总结,总能磨进去。最后还是选择了巨硬,第一是因为从小就想去巨硬,第二是因为比尔盖茨是我的爱豆,第三就是因为身体不太好,想养老发自内心。 可以简单说下,面试这些公司的过程吗? 大伙开始投阿里提前批的时候,我很慌,不敢投。导致错过了很多锻炼面试的机会,因为最开始是不进系统的。你一个部门挂了其实就只是那一个部门有你的记录,建议大伙还是阿里提前批多锻炼。小公司练手是个美好的想法,但是不切实际。为啥小公司是小公司,他们效率真的不太高,像有的同学阿里、腾讯或者头条都拿到 offer 了小公司还没有开始面试。 最开始面试肯定是慌得一逼,话都说不顺溜。面多了感觉其实还是在于多吹,你吹得面试官和你都开心,这次面试基本就没啥问题。下面说一些我的经验,不一定对,毕竟还是挂了很多面试。 别人问你一个问题你最好把你知道的都说出来。如果我当时遇到了这个问题,我就会把我是咋解决的过程说出来。 代码题需要疯狂判断边界条件。写之前就要和面试官沟通时间复杂度和空间复杂度,说不定面试官心情好会给你点提示。会写英文注释就用英文注释装逼。 最后问问面试官对你的建议,过来人说话还是好使的。 把面试官对你项目的质疑,提炼出来,下次在详细介绍项目的时候把它变成你对你的项目的思考。 为什么会选择微软,你觉得微软相较于其他几家公司,更吸引你的地方在哪呢? 前面回复啦~...

plainify

刚完一波蚂蚁金服的面试后,他说他累了

这是「跟我来面试」系列的第二篇,被面试人是我隔壁宿舍的好友,近期刚刚结束了蚂蚁金服的三轮技术面试,面完之后他跟我说很累,直言不想再体验了。 因为学院的安排,我们被要求暑期实习,近期也有各种内推信息发在群里,和大多数人边面试边复习不同,我的这位好友在我们疯狂投简历的时候就一直踏踏实实准备,因为我们会在自己的小群里分享自己的面试经过,他就一直潜水,直到有一天突然告诉我们蚂蚁金服的 hr 说他通过了我们才知道他已经成功上岸了。这种人,我们一般只能用五个字来形容:闷声发大财。 他的面试经历我仔细看了看,一面重点在基础知识的考查,二面重点在项目以及对框架的使用与理解上,三面压力面,是很熟悉的套路,考察的知识点也是经常问到的,具有一定的参考价值,接下来我们就来看看他的这几轮面试经历吧。 一面 笔试题很简单,多线程循环打印 1-100 奇偶数 你觉得项目中用了 MQ 给你带了什么好处,设计初衷是什么?会带来什么缺点嘛?(项目针对性比较强,不细说) 在网页键入 taobao.com,到返回一个页面,这期间都发生了什么? 你说到了 session 和 cookie,这两者有什么区别,应用场景是啥? 返回界面的文字,图片,链接,你觉得是从哪里来的,或者说储存在哪里? 描述一下 TCP 三次握手,这期间可以携带数据吗?携带了数据会造成什么后果? 描述一下四次分手,第二次和第三次中间处于何种状态? 说一下 object 类的所有方法以及他们的功能(真的是所有:clone,notify/all,finalize,wait,hashcode,equals,tostring,getclass) 抽象类和接口有什么区别?说一下你的个人理解。 详细说一下 final 关键字,修饰变量,方法,类都有什么不同?能想到什么具体应用场景吗? 说一下 equals 方法,hashmap 的底层,跟 hashtable,concurrentHashMap 都什么区别 静态分派和动态分派的区别?具体应用场景? 1.8concurrentHashMap 有什么变化,优化的意义在哪? hashmap 除了结点数大于 8,还有什么情况会树化(这个我没想出来,也可能是我没听清楚) hashcode 方法有什么特点?hashset 的底层是如何实现的?为什么用 hashmap? 说说 JVM 内存结构(这里要问清楚是 JMM 还是运行时常量池) 你刚说 1.8 后方法区移动到内存中变成元空间,为什么要移过去呢? 那为什么常量池没有移动到内存,而是转移到堆了呢? 最后一个问题,说一下线程池的饱和策略 因为项目中使用到了 MQ,所以就顺便问了下,好在并没有提问太过深入的东西,随后问题几乎每个都是高频考点,2、4、5 主要考察计算机网络中的通信过程,例如三次握手/四次挥手,7-14 考察 Java 基础,随后就是和 JVM 以及多线程有关的问题了。有需要的小伙伴可以参考这个进行针对性的复习。 二面 从项目启动到现在,介绍一下你的工作以及遇到的难点,怎么解决的? 讲一下微服务架构都有哪些模块?他们是怎么一起工作的? 让你实现一个 eureka,你会怎么实现? 用户认证,为什么要用 JWT,而没用 session-cookie,应用场景?优劣?加密用的是什么算法? 为什么使用 rabbitMQ,没用别的 mq? 说一说你项目应用了什么设计模式?适配器模式什么应用场景? 让你实现 AOP,你怎么实现? spring 事务有了解吗?是如何传播的?在你项目里的实际业务中是如何传播的? 例如有 ABC 三个事务,分别原子性,整体也原子性,A 事务出错回滚,整体事务也会回滚,你会怎么设计呢? ZooKeeper 有了解吗?redis 和 Mencache 的选型问题?...

plainify

搏一搏,单车变摩托,记录一下我的淘宝实习面试

楼主这段时间一直在找暑期实习,前几天刚结束了阿里巴巴淘系的 HR 面,现在在等通知,正好趁着这段空窗期整理回顾下前段时间的面试。 目前我是研一在读,投递的岗位是 Java 后端的暑期实习,我是在今年 2 月份开始准备实习的事情,虽然简历投递的很早,但是到面试已经是 3 月的事情了。接下来说说我前期做的一些准备吧。 不知道为什么,今年好像很多公司都加入了笔试环节,这里就要求我们对一些算法题进行针对性的训练,这里推荐力扣和牛客的剑指 offer 系列,把那 70 多道题刷两遍,心里多少就会有点底了。其次就是对于知识点的针对性复习,这个过程就跟我们高三时的一轮复习一样,力求将知识点都过一遍,包括但不限于 Java 基础、数据库、计算机网络、操作系统、组成原理、框架源码、设计模式等。这些知识点可以根据网上其他人的面经针对性学习,也可以根据市面上流传的各种面试宝典针对性复习。这里我推荐一个仓库,我复习时的知识点都是按照这上面来的,https://github.com/Snailclimb/JavaGuide 下面的内容是我整理的面试题目。大家可以参考着复习。 提前交流 我是找的学长内推的,刚开始有一次交流,也不知道算不算一面,主要问了下面的东西: 说一下 cas,主要应用在哪 说一下 Java 中的锁,自旋锁会升级成什么? 项目中的限流是怎么做的 说一下 Java 是如何加载一个类的? 什么是双亲委派模式? TCP 滑动窗口了解吗? 用的是什么数据库?说一下 mysql 的的事务隔离 InnoDB/MYINSAM 的区别和应用场景 介绍下 MYSQL 的索引 进程和线程的定义 进程调度算法有哪些? 说一下你对线程池的理解 用过什么模式(除了 JDK 以外。自己实现的 /除了单例模式外) 单例模式为什么要有两个 null 判断,一个不可以吗? 排序(归并排序 /堆排序/快排) 说一下你对 Spring 的理解,AOP 的原理是什么? 有什么想问面试官的 因为是提前交流,感觉就是摸一下底,问的知识点都很基础,只不过因为是刚开始复习,所以有些知识点还不是很清楚,后来交流的学长也给了一些建议和指导。 一面 然后就是正式的一面了,一面比较细致,上来先做了一道算法题,题目很简单,剑指 offer 里的原题,顺时针打印矩阵,https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/ 还有道多线程编程题,大致意思就是提供一个多线程的工具类,打印数组。 下面是问题的记录: 自我介绍、说一下最近在做什么事? 可以跟我介绍下卷积神经网络吗? 可以说一下逻辑回归是什么吗? 你觉得反向传播和动态规划之间有什么样的联系吗? 我看你的微信公众号叫「01 二进制」,那你能说一下为什么计算机会使用二进制,而我们人类会使用 10 进制呢? 计算机是怎么做加法的?那如何用加法代替减法? 使用过 Linux 吗?可以说下常用的 Linux 命令吗? 用什么命令可以查询文本中的文字?用什么命令可以查询磁盘存储的容量? Vim 使用过吗?可以说下有哪些快捷键吗? 我看你的博客里有一篇博客写到了区块链,你可以说下去中心化对我们的生活有什么影响吗?你觉得区块链有价值吗? 在区块链的世界中,那些数据怎么样会变得有效?(广播机制、共识机制) 类比打电话,两个系统的通信我们可以采用哪些方式?(我说了 http) 说一下 HTTP 和 HTTPS 的区别 HTTPS 中用了什么加密方式,在什么阶段体现的? 分布式的 CAP 理论了解过吗? 你了解的一些集群有哪些选举方式? 公众号里写了很多和 python 有关的文章,那你觉得这两个语言使用起来有什么差异? 最近有看什么书吗? HashMap 为什么线程不安全?是否模拟过不安全的场景? 说一下 Java 的值传递和引用传递 SpringBoot 和 SpringMVC 的区别 说一下 Spring 中 bean 的加载过程 JVM 的垃圾回收器了解吗?垃圾回收算法有哪些?JDK8 默认的垃圾回收器是什么? 有什么想跟我沟通的吗? 总的来说这一次的面试体验不是很好,因为那个时候刚大致过完一遍知识点,脑袋里的知识都混在一起了,而且偏偏问的东西也很杂,就连公众号里的文章他也看了,这点是我没想到的。不过面试官很 nice,一直都在和我探讨这些问题,气氛也不是很紧张,之后几天就迎来了二面。...

plainify

未雨绸缪,小米前端实习面经

前一篇文章中说到了我准备开一个新系列用于整理周围人面试的一些经历,本文是她面试小米的一份经历,也是这个系列的第一篇文章,投稿人是我同校同学,虽然本科就是一个学校的,但直到研究生才认识,之所以说她未雨绸缪是因为在我还没开始投实习简历的时候她就已经拿到了小米的实习 offer 了。作为一个米粉,我其实挺羡慕的,因为小米一直是我很向往的公司。 她是在 boss 直聘上投的小米,base 南京,因为是部门直招,看完了简历就约了面试,速度还是很快的。据她说虽然只有一轮面试,但是持续了将近一个小时,面试官还是比较随意的,问的问题都很基础,以下是她的面试记录。 一开始自然是老生常谈的自我介绍,一个好的自我介绍应该包含这几点要素: 用简单的话说清楚自己主要的技术栈于擅长的领域; 把重点放在自己在行的地方以及自己的优势之处; 重点突出自己的能力比如自己的定位的 bug 的能力特别厉害; 好的自我介绍会让面试官对你产生兴趣,毕竟换做你是面试官,一定也希望面试者不是客套地说说自己喜欢编程、平时花了很多时间来学习、自己的兴趣爱好是打球吧。 接下来就是一些基础方面的问题了,按照类别进行了整理。 css/js/html css 块元素和行内元素 css 如何实现水平居中? position 有哪四个属性?谈一谈你的理解 谈一谈你对盒模型的理解 flex 属性以及使用的一些问题 什么是 rem 布局? js 原型链是什么? js 闭包以及相关的使用 es6 新增了什么 基本数据类型(es6 新增) var 和 let 区别 什么是事件委托机制 es6 的 promise 以及回调函数的使用 es7 的 async 和 await LocalStorage 和 sessionStorage 区别以及 API vue MVVM 怎么理解 vue-router 说一下 vue 和 jQuery 的区别,哪个好 向面试官问问题 实习生培养方式 实习期间的主要工作 最后 问题基本都回答出来了,面试官可能也比较满意,主要运气比较好吧,面试官说没什么问题的应该只有这一轮技术面。...