入职新公司好几天了,给大家分享下面试的经历。
希望能对找工作的同学有帮助。
一、为什么辞职?
马老板说了,离职无非两个原因,「一个是受委屈了,一个是钱少了」
我确实觉得钱少了,因为去年又买了一套房,两套房贷压着,并且也有了可以涨薪的能力。但更重要的是觉得发展受限,我上家公司是家外包,18年10月份入职的,20年8月份离职。
程序员如果深感技术受限,会非常焦虑的,也容易否定自我。
2年时间在项目中技术并没有明显的提升,一些新的知识点或者新的尝试也不会让你做,因为所有的任务都是上面分配下来的。所以对于大多数新的技能都是通过下班后自己的个人项目进行尝试的。
身边很多同事都是30多岁了,这个年纪跳出外包的机会比较小了,或者意味今后他们的程序员生涯都会在外包待着。
这不是我想要的生活,18年有面了自研公司,而且工资比外包高,由于种种原因,还是选择了外包,当初走错了一条路,导致现在又要退回去走另外一条。
我希望在30岁前能真正理解前端这个行业,像一位老者回顾人生,能读透。如果可能的话,我大概会在30岁前成为真正的高级前端工程师,这两天我也对自己做了新的规划,希望真2023年能对现在的自己说,感谢曾经的你,我来接棒。
「当你想离职了,你要相信,你这个想法大概率是个正确决定」,这个时候不要犹豫,说明你已经意识到你不适合这里了,抓紧走,越快越好。
自己今年有做了2个小项目,基础功能做好了,还有很多问题,有时间再改。
二、面试经历
换工作的想法是今年6月份就有了,有看掘金上面很多知识点的总结和相关面经,说实话,「这些面经大多用的上。」
我面试的公司有10几家,有外包的,自研的,电话的,视频的,现场的都有,外包是他们打过来的。给出的offer最高的是18.5k,最低16k,我工作经验4年,这个工资基本是行情价。当然那些比较牛逼或是985,211的同学拿的工资会高很多,但是毕竟少数,这里不做讨论。
我是在职的时候就去面试了,因为担心疫情原因,招聘需求会减少。实际面试过程中,前端的需求还是较多的(可能也跟我最近2年没有去面试,对前两年的需求没有感知有关)
有一些规律可以给大家说一下,「大公司会把80%的时间花在问项目上,小公司或者外包会把80%时间花在问一些技术点上面」。
三、面试会问什么
3.1、具体题型
为了保证招聘公司能招聘到合适的员工,以下所有面试题都不会指出具体的公司。 以下问题分为「必问题」,和「大概率问题」,「小概率问题」
这个概率值是通过对面试的这10几个公司,做了全面的统计得出来的(「不具有普适性」)
有些问题大家都会,我就不贴答案了
3.2、必问题 必问题 必问题
(1)Activity生命周期?
这几乎是个老少咸宜,永远不会过时的问题,而且极有可能是第一个问题。
这个问题当然没什么好讲的啦,死记硬背是没什么用的了,关键是理解。我曾遇到这个问题的变种问题,问
onStart(),与onResume()有什么区别?
如果面试官抛出这个问题,是不是有点措手不及。甚至我听过更变态的问题:
什么情况下Activity走了onCreat(),而不走onStart()
这简直就是脑筋急转弯嘛。
(2)service生命周期?
这里要注意service有两种启动方式,startService()和bindService()
(3)如何理解Activity,View,Window三者之间的关系?
这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。
Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。
- Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。
- 这个PhoneWindow有一个“ViewRoot”,这个“ViewRoot”是一个View或者说ViewGroup,是最初始的根视图。
- “ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等
- 这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等。
(4)Activity的几种LaunchMode及使用场景
-
standard 模式
这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。使用场景:大多数Activity。 -
singleTop 模式
如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。使用场景如新闻类或者阅读类App的内容页面。 -
singleTask 模式
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。使用场景如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。 -
singleInstance 模式
在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。使用场景如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
(5)View的绘制流程
- measure过程
- layout过程
- draw过程
(6)Touch事件的传递机制
publicbooleandispatchTouchEvent(MotionEventev); //用来分派event
publicbooleanonInterceptTouchEvent(MotionEventev);//用来拦截event
publicbooleanonTouchEvent(MotionEventev);//用来处理event
其中Activity和View控件(TextView)拥有分派和处理事件方法,View容器(LinearLayout)具有分派,拦截,处理事件方法。
这里也有个比喻:领导都会把任务向下分派,一旦下面的人把事情做不好,就不会再把后续的任务交给下面的人来做了,只能自己亲自做,如果自己也做不了,就只能告诉上级不能完成任务,上级又会重复他的过程。
另外,领导都有权利拦截任务,对下级隐瞒该任务,而直接自己去做,如果做不成,也只能向上级报告不能完成任务。
(7)Android中的几种动画
被问到Android中有几种动画,这个问题也好难回答。
Android3.0之前有2种,3.0后有3种。
-
FrameAnimation(逐帧动画):将多张图片组合起来进行播放,类似于早期电影的工作原理,很多App的loading是采用这种方式。
-
TweenAnimation(补间动画):是对某个View进行一系列的动画的操作,包括淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)四种模式。
-
PropertyAnimation(属性动画):属性动画不再仅仅是一种视觉效果了,而是一种不断地对值进行操作的机制,并将值赋到指定对象的指定属性上,可以是任意对象的任意属性。
(8)Android中跨进程通讯有几种方式
-
访问其他应用程序的Activity
如调用系统通话应用
IntentcallIntent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:12345678");
startActivity(callIntent);
-
Content Provider
如访问系统相册 -
广播(Broadcast)
如显示系统时间 -
AIDL服务
兄弟萌,我不行了,整理出来有点多,一个一个详细罗列我的时间它不同意啊,就把技术点罗列出来
3.3、大概率问题
大概率题是基本50%以上会被问到
(1)AIDL理解
(2)Handler的原理
(3)Binder机制原理
(4)热修复的原理
(5)设计一套图片异步加载缓存方案
(6)Android内存泄露及管理
(7)Activity与Fragment通信
(8)Fragment的那些坑
(9)Android UI适配
(10)布局优化
3.4、小概率问题
个别公司会问,小于50%
(1)Http Https
(2)网络请求优化
(3)数据库优化
(4)图片优化
(5)HybridJAVA 与JS交互
(6)单例
(7)Java GC原理
(8)ANR
(9)Volley
(10)JAVA注解反射原理
(11)算法
(12)设计模式
(13)RxJava
3.5、 开放题
(1).你今后的规划是什么?
建议没有提前准备,不然你一下说不上来的。还好我年初的时候有做过清晰的规划,算是必问题了。
(2).你有什么优缺点
个人不喜欢这样的问题,但还真得说
我当时说优点:有自我驱动力 缺点:有些焦虑
肯定会追问,有自我驱动力体现在哪里,可以说下班后自学,数据库等等。 焦虑体现在行业内很多人掌握的知识点深刻且广泛,并且有自己的一套学习方法(「比如掘金里面这么多大佬,每次看你们的文章我都很焦虑啊」),相比,自己并没有这么出色。
又追问:那你觉得为什么别人说这么出色呢?
答:因为别人看了相关的知识点会用自己理解再整理输出,这样理解的更加深刻,也有助于复盘,我目前正在这样做。
(3).你觉得你来到我们团队能为我们带来什么
这个应该是面试官要考虑的东西。
这个我当时没答好,会说话的可以多说点。
(4).你为什么要离职/为什么要来我们公司
说真话吗,这个可以自己先准备好话术吧,建议说实话。
(5).介绍下你上个项目,并且说一下你上个项目用到了哪些技术点
很多人会觉得上个项目没什么可说的,用的技术都是比较大众,如果是这样的话,你就需要对上个项目梳理。我一开始也觉得我们上个项目没什么说的,梳理以后发现有很多自己没有意识到的技术点。
(6).你还有什么要问我的吗?
- 可以问下团队成员情况
- 项目组的技术栈
- 项目是新开发还是迭代
如果实在没问题了,可以说刚才在人事那里/上一个面试官那里有了大致的了解了。
四、教训
最后说个教训吧,是真教训!
大公司会问一些项目的细节,所以你必须对你自己做的项目非常了解,包括各个模块实现的步骤,思路,项目的配置,为什么要这么配置,不要觉得你的项目很简单,当你把所有代码都仔细过一遍,你会发现你的项目有很多值得你深入的地方。
「项目上欠下的技术债,面试大概率会被吊打。」 我这次就深刻的意识到了,所以如果你不急着离职的话,打开你项目一点点把业务梳理一边,一点点的过一遍代码,即使是别人写的。
分析里面用到的每个技术点,看一下相关的配置文件,会发现配置也是很有意思的地方。
最后,在这里我也分享一份干货,大佬收录整理的Android学习PDF+架构视频+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
如果你有需要的话,可以点赞+评论,关注我,私信【资料】获取或者自行下载获取
「祝大家都能找到自己喜欢的工作。」










网友评论