前言
跳,还是不跳?It is a problem。没错,小伙伴们!年底跳槽季来了!金三银四还远吗?你细品,最近身边的空气里是不是弥漫着一股浓浓的跳槽的味道?老实交代你们有没有偷偷摸摸盘算换个新工作呢?
当然,一般情况下还是不建议小伙伴们跳槽太过于频繁的,很多企业是很忌讳跳槽频繁的人的。甚至很多大厂甚至已经有明文规定的招聘原则来筛选跳槽频繁的人,典型的像京东进行人才招聘就有“二五原则”,即在以往的公司期间每个公司的工作时间不低于2年,或者某个公司就职时间超过5年。其实现在很多公司都有这样的要求,只不过京东写在了纸上。
但如果你或者你的公司正在面临如下情况的话,我还是建议你考虑考虑跳一下吧:
-
你的上级已经有好几年没晋升过了,这意味着你这个部门、这个企业、这个行业已经没有发展前景了。你的老板对你无动于衷、不培育、不提拔、不批评、不涨薪、不开除。
-
团队暮气太重,产品方向不明、市场不明,改需求改到天荒地老。
-
老板的总是跟你谈理想,画大饼,让加班,给低工资,还说这是历练,熬过去就好了。
-
压榨得太厉害,加班太厉害,一直掉头发,快秃头了。没有培训,连程序员自己自学的时间都被加班占用,身体和技术很难提升。
综上几点,再换个角度想想,如果每一次跳槽都积累了丰富的项目和技术经验,那这样的人才,相信很少有公司能拒绝了。当然还有一些其他原因可能促使你跳槽,但是无论如何请记住:永远不要因为“现在很差”而跳槽,要因为“未来更好”而跳槽,只有这样才能保证你一直往上走。
Android复习大纲分享
闲话说的有点多了,回归正题。如果你是一名Android开发者,也正好在做跳槽准备,那么接下来我整理的这份跳槽大纲一定会对你有所帮助。复习大纲内容涵盖:Activity面试题、Fragment面试题、Service面试题、Broadcast Receiver面试题、WebView面试题、Binder面试题、Handler面试题、AsyncTask面试题、HandlerThread面试题、IntentService面试题、视图工作机制面试题、事件分发机制面试题、HandlerThread面试题等。(内容较多,直接给大伙儿上截图吧!)
Activity面试题
1、Activity是什么
Activity是四大组件之一,它提供一个界面让用户点击和各种滑动操作,这就是Activity
2、Activity四种状态
-
runing
-
paused
-
stopped
-
killed
3、Activity生命周期
Activity生命周期方法主要有onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()等7个方法。
-
启动一个A Activity,分别执行onCreate()、onStart()、onResume()方法。
-
从A Activity打开B Activity分别执行A onPause()、B onCreate()、B onStart()、B onResume()、A onStop()方法。
-
关闭B Activity,分别执行B onPause()、A onRestart()、A onStart()、A onResume()、B onStop()、B onDestroy()方法。
-
横竖屏切换A Activity,清单文件中不设置android:configChanges属性时,先销毁onPause()、onStop()、onDestroy()再重新创建onCreate()、onStart()、onResume()方法,设置orientation|screenSize(一定要同时出现)属性值时,不走生命周期方法,只会执行onConfigurationChanged()方法。
-
Activity之间的切换可以看出onPause()、onStop()这两个方法比较特殊,切换的时候onPause()方法不要加入太多耗时操作否则会影响体验。
4、Activity切换横屏时生命周期
-
onSaveInstanceState()
-
onPause()
-
onStop()
-
onDestroy()
-
onCreate()
-
onStart()
-
onRestoreInstanceState()
-
onResume()
5、进程的优先级
oom_adj
是linux内核分配给每个系统进程的一个值,代表进程的优先级,进程回收机制就是根据这个优先级来决定是否进行回收。进程的oom_adj
越大,表示此进程优先级越低,越容易被杀回收;越小,表示进程优先级越高,越不容易被杀回收。普通app进程的oom_adj
>=0,系统进程的oom_adj
才可能小于0。进程优先级从小到大如下
-
空进程
-
后台进程
-
服务进程
-
可见进程
-
前台进程
6、Activity任务栈
- 先进后出
7、Activity启动模式
-
standard
-
singletop
-
singletask
-
singleinstance
8、scheme跳转协议
android中的scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以跳转到app中的各个页面
-
服务器可以定制化告诉app跳转哪个页面
-
App可以通过跳转到另一个App页面
-
可以通过H5页面跳转页面
9、Context、Activity、Application之间有什么区别
Activity和Application都是Context的子类。Context从字面上理解就是上下文的意思,在实际应用中它也确实是起到了管理上下文环境中各个参数和变量的总用,方便我们可以简单的访问到各种资源。虽然Activity和Application都是Context的子类,但是他们维护的生命周期不一样。前者维护一个Acitivity的生命周期,所以其对应的Context也只能访问该activity内的各种资源。后者则是维护一个Application的生命周期
10、Activity启动过程
-
在安装应用的时候,系统会启动PackaManagerService管理服务,这个管理服务会对AndroidManifest进行解析,从而得到应用程序中的相关信息,比如service,activity,Broadcast等等,然后获得相关组件的信息
-
当用户点击应用图标时,就会调用
startActivitySately()
,而这个方法内部则是调用startActivty()
,startActivity()
最终还是会调用startActivityForResult()
。由于startActivityForResult()
是有返回结果的,系统直接返回-1,表示不需要返回结果 -
startActivityForResult()
通过Instrumentation类中的execStartActivity()
来启动activity,Instrumentation这个类主要作用是监控程序和系统之间的交互。在这个execStartActivity()
中会获取ActivityManagerService的代理对象,通过这个代理对象进行启动activity -
在ActivityManagerService的代理对象中,通过Binder通信,调用到
ApplicationThread.scheduleLaunchActivity()
进行启动activity,在这个方法中创建一个ActivityClientRecord对象,用来记录启动Activity组件的信息,然后通过handler将ActivityClientRecord发送出去 -
在handler收到消息后,调用
ActivityThread.handleLaunchActivity()
启动Activity
11、简述Activity,View,Window三者关系
-
Activity本质是上下文,View本质是视图,Window本质是窗口
-
Activity构造的时候会初始化一个Window,其具体实现是PhoneWindow
-
PhoneWindow中有一个ViewRoot(View或ViewGroup),是最初