小米android前端面试全流程
基本都在问项目,没什么八股。然后算法题是数组去重,很简单。
先简单介绍一下
面试官你好,我叫xxx,来自苏州大学信息与计算科学专业,我目前使用的技术栈是Vue,我目前有两个项目经历,一个是在苏州极云有限公司的一个校园集市的小程序,另一个是我自己做的一个后台管理的项目。
你现在是大三是吧?你们现在不上课吗,可以出来实习?
没什么课了,我们这个专业上学期的课还是挺多的,现在上学期的课都基本上完了,下学期没什么课。
就相当于大三下学期跟大四基本上都会全职出来实习了。那老师不会进行你的一些在校考核或者在校签到之类的东西吗?
不会。
那相当于就是你们专业也经常有其他的同学也出来实习了。
对,不过我们专业可能他们更多想考研。
我看之前是9月份到12月份刚做完一个实习,做了3个月左右,对吧?可以简单说说这个项目吗?
这个项目是一个校园集市的项目,我们可以进行发帖,可以发二手交易的帖子,然后还可以发跑腿接单的帖子,还有评论区,就是这些功能。
这个整个项目是自己一个人做的吗,还是说会有一个团队在做的?
是一个团队,在公司里面实习的项目。
那这个做这个小程序大概整个团队是多少人一起参与?
8个人以上。那其实还挺大的,一个小程序了。
在这个里面你主要是做了哪些东西呢?
我主要负责帖子详情,就点开帖子列表,然后我们就可以看到帖子详情,包括评论区。然后还有点开个人主页,个人主页可以看到他历史发的所有帖子,然后这个帖子列表的展示,还有那个菜单,我们可以长按然后进行删除,可以进行举报。
在那个之前,我看就是两个经历都是在24年的9月之后。那么像之前的话,这些技能,我看学校里面应该很少会教JS这样的东西吧。学校的课程一般是C++为主,那这些语言你怎么学的呢,包括这些框架?
我是23年12月的时候,那时候我一开始本来是想做一个网站,觉得挺有意思的,然后发现原来做网站需要学习前端技术。后面发现这个技术还挺有意思,就在B站上看一些课程,初步学习这些技术栈。
我的学习方式主要是需求驱动的,就是我想做什么事情然后再去搜相关的需求,看需要学什么技术。然后我会在谷歌上搜一些博主的学习路线,还有就是平时做项目的时候,我也喜欢进行记录然后写成博客发布出去。
像这两个经历就是有两份项目,项目做完之后你自己有总结过吗?比如说获得了哪些东西或哪些技能得到了提升?
比如说这个校园集市的项目,当时在个人主页帖子列表点进去到帖子详情后,如果点赞的话速度特别慢。后面我排查问题发现,是因为我们一开始将帖子列表的数据全部都放在Vuex的state里面。当我们点进帖子详情之后进行点赞,它也会触发state的更新,但是点击帖子详情之后那个帖子列表根本就没有显示了,它却在后台进行更新,就导致点赞操作特别慢。
后面我排查出来后,把帖子列表数据从Vuex里面拿出来,通过父子组件传值方式来进行数据的传输。这个经历让我发现有时候不能无脑使用Vuex,还要考虑一些性能的问题。
另外就是我自己做的那个后台管理项目,当时是跑通整个搭建脚手架的流程,自己去搭建一个脚手架,对前端工程化也有了更深的理解。
我们现在整个框架其实用的是React,这一块有了解过吗?
我主要还是使用的Vue技术栈,React没有太了解。不过我觉得它们主要共同点是都是用JS写的。
用过TS吗?TS和JS有什么区别?
TS就是更注重数据类型的规范,它会检验我们的数据类型是否符合规范。
那你自己用起来你觉得它们俩的对比上,你更喜欢哪个?或者说在哪些场景下你觉得TS用起来更舒服,哪些场景JS用起来会更舒服?
我个人觉得JS更舒服,就是我主要是想要达到效果,觉得怎么方便怎么来,没有太在意那个规范。
我们简单说个事情,比如说用面向对象的方法怎么去描述我们现在这个面试的场景?
首先有一个面试官的对象,他有相关的数据,比如说他在公司里的职位、员工编号、姓名、性别。然后他的方法就是可以发起一个面试会议,可以进入面试。
而面试者的话,他也有一个简历被投递到公司里边,这个简历会有一个编号,这是属于我的数据,还有我的姓名、学校。然后我的权限就是可以加入面试官提供的会议链接。
那这两个角色能不能抽象出更高层的类?
可以抽象出"人"这个类吧
(面试官笑)
面试结束后这两个角色要执行什么样的方法和流程?
面试者的话需要回家等通知,面试官的话要进行复盘这次面试,给面试者进行评级,然后和其他HR进行交流确定是否录取。
HTTPS和HTTP有什么区别?什么场景下会用HTTPS?
现在一般都是用HTTPS,因为它使用TLS加密,安全性高。
了解过它是怎么加密的吗?
了解SSL握手的流程。一开始是客户端先给服务端发送一个序列号,还有版本和加密方法,然后服务端收到之后会生成数字证书,再加上另一个序列号发给客户端。客户端收到之后会基于前面所有的内容生成一个哈希值,再生成一个随机数用公钥加密发给服务端。服务端收到后会使用私钥解密,解密之后就确认了加密密钥,然后再基于前面所有的内容生成一个哈希值。
HTTPS已经这么安全了,会不会被破解呢?
我觉得应该很难破解,因为它有数字证书,进行哈希值生成和校验的过程。要看这个数字证书里面的加密算法是怎样的,如果加密算法很容易破解那就有可能,但一般来说加密算法都比较复杂,很难破解。
之前做的项目里面,有没有对一些核心参数,比如用户ID、身份证、手机号这些敏感信息做过加密,还是都是明文传输?
(面试者表示没有做过加密处理)
看你用过NPM和Git这些管理工具,平时都怎么用的?
NPM的话就是看我们所需要实现的功能,通过NPM这个包管理工具引入我们所需要的包。Git的话是一个版本管理工具,可以方便进行多人协作。
NPM使用时会不会遇到版本冲突,或者升级后需要降级这样的情况?遇到过的话是怎么处理的?
遇到过。首先可以通过NPM官网下载历史版本,可以先使用原来旧版本。如果要强行解决这个问题的话,可以修改文件后缀名,把.js改成.ejs。
好的,技术方面就聊这些,我们来做个算法题吧。
(面试官展示题目)
这个题目是一个有序递增的数组,里面可能会有重复的数字,比如说0011222333。我想要的结果是把重复的去掉,只保留一个。比如原始数据是001122334456,最后的结果应该是0123456。
(面试者开始写代码)
(面试者先用Map方法实现)
你用了Map,又开辟了新的内存空间。如果不开辟新的内存,你有什么想法吗?
可以用双指针。
要不试试写一下双指针的解法?
(面试者实现双指针解法)
好的,题目没什么问题了。你有什么想了解的吗,关于我们团队?
公司是在南京建邺区是吧?
对,在南京建邺区。
其他没有什么问题了吗?
没有了。
好的,那今天就到这里,有结果会及时通知你的。
谢谢。
拜拜。