面试是一个月以前的事了,已经被录用,有些地方记不清了。总共面了两轮,都是飞书线上面试。每次面试最后都有反问环节,我都事先准备了要反问的问题。
一面
一面问的都是Flutter相关的技术问题,完全没有牵扯到其他方面,面试官是负责社招的,实习后也由他来带我。总共面了40分钟左右,问题如下,打钩的是我觉得算回答出来的:
- ✔ 自我介绍
- ✔ 学习Flutter多久了?
- ❌ 了解Dart中的dynamic和var吗?它们赋值后可以更改数据类型吗?
- ✔ const和final的区别,late的用法?
- ✔ Dart空安全相关,
?.
和??
- ❌ Dart如何实现单例?
- ❌ 给一张UI图,说出大致的布局实现方式?
- ✔ 要点击导航栏切换body,如何实现?
- ❌ 快速点击导航栏切换页面,多个页面请求完成后在短时间内快速渲染,页面会出现闪烁,如何解决?
- ❌ 更改页面的宽度,要icon不变,仅缩小文字的宽度,文字溢出设置成省略号的样式,如何实现?
- ✔ Dart中的可选参数是什么,有什么用,如何设置其默认值?
- ❌ 组件前加const起到什么作用?
- ❌ 如何实现局部刷新?
- ✔ 如何实现动画?如改变透明度、位移、旋转等
- ✔ 如何用Flutter的Canvas绘制出折线、带填充的矩形?
问到动画和Canvas是因为简历上有写。
Dart中的var
和js类似,是可变的,当时没接触到这个概念。单例的实现见Dart笔记,页面闪烁用防双击处理,局部刷新用ValueNotifier
。
一面个人感觉挺失败的,很多问题都没回答上来。比如给UI图实现布局,我有开发经验按理这不是难事,但面试官给的是PC端的页面,我之前做的都是移动端,导航栏在底部,PC端导航栏在左边,而且一些布局也略微不同,加上面试是直接口述而非敲代码可以修改,一时有点无从下手,气氛明显尴尬了起来。问到局部刷新,我记得似乎曾经在某个帖子有看到过SafeArea与之相关,就半蒙半猜地说了,面试结束后一百度,根本是牛头不对马嘴……面到后面自己都没自信了,只想快点结束。
当时面完就觉得没戏了,没想到过了两天居然收到了hr的电话,约了二面。
二面
二面的问题更有开放性,面试官好像是软件部门的主管,有开摄像头,在我回答不出来的时候会引导我思考,所以感觉会轻松一些,总共20多分钟。
- ✔ 自我介绍
- ✔ 为什么想要来实习?
- ✔ 为什么学习Flutter?
- ❌ 为什么Flutter选用Dart作语言?Dart优势何在?
- ✔ 问项目,哪些功能是调用第三方接口?项目是否获奖?开发中最大的困难是什么?
- ❌ 结合信安专业,如何防止攻击者破解用户账号密码?
- ✔ 除了移动端、Flutter,是否关注了其他技术相关的东西或行业发展?
和一面相比明显感觉二面的问题更综合考量一个人的能力、行业理解和培养价值。
有点出乎我意料的是,面试官看到我是信安专业的,问了我安全方面的问题。先是问有什么提高账号安全性的方法,我回答数据库密码存储哈希值而非明文、做输入检查防止SQL注入等。又问如果有人尝试用暴力尝试的方法破解密码应该如何防御?我回答加验证码。又问现在AI很强大,可以完成验证,是否有别的方法?面试官提示如果绕过客户端直接给后端发包呢,我回答APP加混淆避免反编译,不要让攻击者知道接口URL。面试官说加混淆可以,但接口总是要暴露在外的,有没有别的办法?我回答后端判断短时间内是否有同一个IP地址多次尝试登录同一个账号,如果是说明有人在暴力破解,就拒绝请求。面试官说如果是在连校园网的环境下,很多设备的IP地址是一样的,可能造成“误伤”,并且后端如何知道设备的登录次数呢?又问如果是固定密码去试账号要如何防御?最后我没有回答出来,面试官说这可能要不止一次网络请求,应该是属于进阶一点的问题了。
最后反问环节我问面试官我有哪些地方表达得不好,面试官回答这不能说。他告诉我大概五个工作日内会有结果,这一等就是半个月,就在我以为凉凉了要准备投下一份简历的时候,又接到了hr的电话,被录用了。
现在回想起来,还是有很多可以改进的地方。
首先是自我介绍,我觉得可以准备得充分些,简历上有的就不用说太多了,可以突出个人优势,也好暗示面试官的关注重点。如果只是把简历上已有的信息说一遍意义不大。
其次是有些地方没get到面试官想问的点。比如二面问后端如何知道设备的登录次数,应该是想问服务器如何识别是同一台设备,需要用到cookie什么的,当时脑子没转过弯来没想到考察的是cookie。
复盘后发觉两次面试都答的不咋地,没想到还能被录用,或许技术栈符合也是很重要的原因之一吧,也是很感谢面试官能给我这个机会。