马爸爸总结了一句话:跳槽,要么是钱不到位,要么是受了委屈。
我给自己这次的跳槽经历做了一个分析,希望能对那些想换工作的朋友有所帮助。
许多朋友想换工作,但是对“换工作”的理解可能仅限于写简历、投简历、面试。在跳槽之前,我也是这么想的。
当时,工作并不顺利,我的专业技能并没有很好的发挥,公司也给不了什么发展前景,就有了跳槽的打算。
我看到一家行业内还不错的上市公司在招聘这个岗位,于是我发了简历。面试后我感觉很好,但我拒绝了,因为工资没有达到预期。
经过仔细思考,我发现我准备得太匆忙了,或者根本没有准备好。粗糙地写了一份简历,面试前也没有充分的准备,就去了那里。在面试中,项目的一些细节无法得到回答,许多知识点也没有很好的回答,这可能让面试官感觉处于普通水平。
在接下来的几个月里,我开始查阅各种跳槽和面试相关的资料,同时按计划组织重点、整理学习路径,逐步复习。
1、什么是ANR
Application Not Responding,页面无响应的对话框
2、发生ANR的条件
应用程序的响应性是由ActivityManager和WindowManager系统服务监视的,当ANR发生条件满足时,就会弹出ANR的对话框
3、造成ANR的主要原因
主线程被IO操作阻塞
4、如何解决ANR
1、什么是OOM
OOM指Out of memory(内存溢出),当前占用内存加上我们申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出Out of memory异常
2、OOM相关概念
3、解决OOM
Bitmap相关
其他相关
1、recycle
在安卓3.0以前Bitmap是存放在堆中的,我们只要回收堆内存即可
在安卓3.0以后Bitmap是存放在内存中的,我们需要回收native层和Java层的内存
官方建议我们3.0以后使用recycle方法进行回收,该方法也可以不主动调用,因为垃圾回收器会自动收集不可用的Bitmap对象进行回收
recycle方法会判断Bitmap在不可用的情况下,将发送指令到垃圾回收器,让其回收native层和Java层的内存,则Bitmap进入dead状态
recycle方法是不可逆的,如果再次调用getPixels()等方法,则获取不到想要的结果
2、LruCache原理
LruCache是个泛型类,内部采用LinkedHashMap来实现缓存机制,它提供get方法和put方法来获取缓存和添加缓存,其最重要的方法trimToSize是用来移除最少使用的缓存和使用最久的缓存,并添加最新的缓存到队列中
1、UI卡顿原理
View的绘制帧数保持60fps是最佳,这要求每帧的绘制时间不超过16ms(1000/60),如果安卓不能在16ms内完成界面的渲染,那么就会出现卡顿现象
2、UI卡顿的原因分析
3、UI卡顿的优化
1、Java内存泄漏引起的主要原因
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏
2、Java内存分配策略
静态存储区:又称方法区,主要存储全局变量和静态变量,在整个程序运行期间都存在
栈区:方法体的局部变量会在栈区创建空间,并在方法执行结束后会自动释放变量的空间和内存
堆区:保存动态产生的数据,如:new出来的对象和数组,在不使用的时候由Java回收器自动回收
3、Android解决内存泄漏的例子
单例造成的内存泄漏:在单例中,使用context.getApplicationContext()作为单例的context
匿名内部类造成的内存泄漏:由于非静态内部类持有匿名外部类的引用,必须将内部类设置为static
Handler造成的内存泄漏:使用static的Handler内部类,同时在实现内部类中持有Context的弱引用
避免使用static变量:由于static变量会跟Activity生命周期一致,当Activity退出后台被后台回收时,static变量是不安全,所以也要管理好static变量的生命周期
资源未关闭造成的内存泄漏:比如Socket、Broadcast、Cursor、Bitmap、ListView等,使用完后要关闭
AsyncTask造成的内存泄漏:由于非静态内部类持有匿名内部类的引用而造成内存泄漏,可以通过AsyncTask内部持有外部Activity的弱引用同时改为静态内部类或在onDestroy()中执行AsyncTask.cancel()进行修复
1、Android内存管理机制
2、内存管理机制的特点
3、内存优化方法
1、什么是冷启动和热启动
2、冷启动和热启动的区别
3、冷启动时间的计算
这个时间值从应用启动(创建进程)开始计算,到完成视图的第一次绘制为止
4、冷启动流程
总结:Application构造方法->attachBaseContext()->onCreate()->Activity构造方法->onCreate()->配置主题中背景等属性->onStart()->onResume()->测量布局绘制显示在界面上
5、冷启动优化
1、Android不用静态变量存储数据
2、SharePreference安全问题
3、内存对象序列化
Serializeble:是java的序列化方式,Serializeble在序列化的时候会产生大量的临时对象,从而引起频繁的GC
Parcelable:是Android的序列化方式,且性能比Serializeble高,Parcelable不能使用在要将数据存储在硬盘上的情况
4、避免在UI线程中做繁重的操作
1、插件化解决的问题
2、类加载器(Java中字节码添加到虚拟机中)
1、热更新主要流程
2、热更新主流框架
3、热更新的原理
1、进程的优先级
2、Android进程回收策略
Low memory Killer(定时执行):通过一些比较复杂的评分机制,对进程进行打分,然后将分数高的进程判定为bad进程,杀死并释放内存
OOM_ODJ:判别进程的优先级
3、Android保活方案
1、什么是Android Lint
Android Lint是一个静态代码分析工具,它能够对你的Android项目中潜在的Bug、可优化的代码、安全性、性能、可用性、可访问性、国际化等进行检查
2、Lint工作流程
3、配置Lint
1、什么是Kotlin
2、Kotlin环境搭建
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
BAT大厂面试题、独家面试工具包,
资料免费领取,包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
BAT大厂面试题、独家面试工具包,
资料免费领取,包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter
[外链图片转存中…(img-Foqn9NwL-1616417563688)]
文章浏览阅读5.3k次。keystone概述概念Keystone (OpenStack ldentity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。Keystone类似一个服务总线,或者说是整个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身份验证,来获得目标服务的Endpoi_openstack中最重要的身份服务是什么?是如何运作的?
文章浏览阅读2.1k次。仿QQ音乐webapp是基于Vue2.0,vuex,vue-router,axios和html5的flexible box布局与及css3的transform,animation,transition组成。Vuejs是一套MVVM框架,主要注重于view层,实现数据双向绑定与及虚拟DOM,解放你的双手,让你不用直接和真实的DOM进行操作,只要数据改变,vue自动检查DOM结构不同,更新DOM元素..._webpp
文章浏览阅读2.9k次。多模交互融合是普适计算和自然交互中最重要的组成部分。笔者认为,实现完整的多模交互融合需要分成四个阶段,分别为独立工作阶段、初步融合阶段、语义理解阶段和任务自适应阶段。01独立工作阶段各自..._多模态融合阶段
文章浏览阅读5.2k次,点赞23次,收藏25次。目录基本概念代码与实例基本概念建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们装配方式时适用的模式。下面给出一个UML实例:代码与实例程序运行截图如下:源码如下:Head.h#include ..._建造者模式
文章浏览阅读1.3w次。苹果手机使用的是ios苹果系统,在操作上与传统的安卓手机相比会有一定差异,因此一些刚使用苹果手机的网友会不清楚一些基础功能的使用方法,比如苹果手机录屏等。2、需要录屏的时候直接打开控制中心,点击屏幕录制图标,倒计时3秒之后开始录屏,想要结束录屏直接点击左上方的红色区域,然后点击停止即可,录制的视频就自动保存到相册中了。我们还可以使用第三方的工具进行苹果手机录屏,而且体验更多更丰富的功能。3、这些都设置好之后就可以开始录屏,在录屏开始前可以开启摇一摇结束录屏的功能,想要结束录屏的时候只需要晃动手机就可以。_苹果手机怎么录屏
文章浏览阅读3.1k次。原因:是编译的targer SDK版本过低(support v7-28.0.0会包这个问题)纯android项目只需要修改build.gradle中 compileSdkVersion 版本>=28。flutter项目,稍微有些不一样。flutter用的一些插件有些compileSdkVersion需要单独改。这是我的错误,如下:FAILURE: Build failed with an exception. ..._error: resource android:attr/fontvariationsettings not found.
文章浏览阅读7.4k次,点赞4次,收藏10次。微软Windows操作系统全面兼容机器人操作系统ROS1和ROS2turtlebot2:https://github.com/bfjelds/turtlebot2-win10文档:https://libraries.io/github/bfjelds/turtlebot2-win10安装在/opt/ros/melodic/x64文件夹下,依据如下教程即可安装成功。ROS..._ros2_java for windows
文章浏览阅读4.3k次,点赞7次,收藏20次。场景:点击父窗口按钮1,弹出子窗口。点击子窗口查询按钮,隐藏子窗口并把查询结果显示在父窗口上。参考文献Qt实例–主窗口和子窗口互发信号简化需求为:子窗口点击按钮,向父窗口发送消息,并显示在子窗口上:子窗口 DatasetQueryConditionWgt.h要定义两个函数:点击按钮,发送信号的槽函数SlotQueryBtnClicked(),注意带上slots发送信息的函数 SignalQueryConditionBtnClicked(QVariantMap m_queryCondition)_qt中对话框返回信息给父页面
文章浏览阅读546次。Defining and Redefining Pattern Rules_suffix rules are obsolete: .c.o
文章浏览阅读941次。前言上篇讲到Retrofit2+Okhttp3添加统一请求头,这篇是添加统一请求体,原理是相通的,把参数以请求体的方式添加到拦截器中,然后在配置给okhttp。 代码实现创建拦截器,并添加参数public class HeaderInterceptor implements Interceptor { @NonNull @Override public Re..._retrofit 设置请求体
文章浏览阅读2.4k次。mysql -uxx -pyyyselect count(id) from lottery.mop_bet_order_history where created_at < '2015-11-01' and created_at > '2015-10-01';delete from lottery.mop_hot_history where cre..._delete from where created_at < '2024-02-01';
文章浏览阅读5.8k次。下面过程说明了“android studio如何设置gradle版本为本地版本”:1. 打开File->Settings;2. 选择Build,Execution,Deployment->Gradle;3. 再选择右边的Project level settings ,选中use local gradle,在Gradle Home的右边,选择本地gradle的目录。最后,点击OK即可_use local gradle