美文网首页Android进阶之路Android开发Android技术知识
Android程序员:该如何准备面试才能找到好工作,打破疫情危机

Android程序员:该如何准备面试才能找到好工作,打破疫情危机

作者: Z_萧晓 | 来源:发表于2020-03-23 17:06 被阅读0次

2020可谓是地狱开局,不少人表示“可以重启2020吗?”

新冠肺炎病毒蔓延全球,美股一周之内两次熔断,经济形势逐渐严峻,来势汹汹的疫情在短时间内冲击各行各业,大公司裁员,中小企业倒闭,管理层降薪,居家隔离工资最低标准等等都成为社会新闻的热门话题。

疫情下的“众生相”

有人年前裸辞,年后找不到新工作,企业推迟复工进程使一大波人陷入被动的境地,房贷、车贷、花呗成为压在当代年轻人背上的三座大山。

2020年即将毕业的应届生们,在这个金三银四的校园春招季,依然深受开学延迟的困扰。

2月12日,教育部高校学生司司长王辉在新闻发布会上表示,2020年将有874万全国普通高校毕业生,与2019年同比增加40万人,然而招聘市场中应届生新增岗位数量与2019年同比减少49%,上半年应届生的就业面临着极大的挑战。本该在年后热闹起来的招聘市场,随着疫情史无前例地沉寂了。

招聘市场的“马太效应”

身处网络安全领域的你有什么体验呢?难道就真的找不到出路了吗?

在这个特殊时期,焦虑、迷茫随之而来,但千万不要在这种情绪中沉浸太久,因为招聘市场中出现了马太效应。

强者更强
弱者更弱
生活不会更容易,但是你可以更强大

对于部分互联网企业而言,公司业务在疫情这几个月反而有了提升和突破,风口之下,互联网行业的招聘需求与日俱增。

例如远程办公产品的爆发,让互联网中高端的技术人员缺口变得更大。

疫情之下,校园招聘季或许会迟到,但好工作始终在等待优秀的人。

机会永远是留给有准备的人的,在这种状态下,通过网络求职,不仅能实现信息上的迅速同步,也能大大减少焦虑感。

求职者的机遇

那么该如何在众多网络求职者中脱颖而出呢?

无法重启2020
那就试着重启自己

第一,先审视一下你是HR要找的人吗?首先要充分收集企业信息,对于你想求职的岗位要有足够的认知并具备与之匹配的能力,其次了解企业文化、展示学习能力、拥有团队意识和责任感也必不可少。

第二,针对自己所在行业做好职业规划,HR往往更亲睐对于自己的职业有长期规划的求职者。

第三,适当准备面试话术,视频面试时顺畅的网络环境、仪表得体、表达清晰、态度谦和,也是专业技能之外的加分项。

最重要的一点是根据选择的企业的职位有针对性地准备简历,一份完美的简历将是你获得工作机会的敲门砖。

网上信息千千万,一不小心就容易掉入陷阱之中,作为求职者一定要学会冷静判断和思考

Android 面试必备琐碎知识点

除了以上说的意见,想要找到好的工作还是需要多刷刷面试题的,接下来放上一部分整理的Android 面试必备琐碎知识点:

  • ANR
  • android 系统线程使用有数量限制
  • 内存泄露-内部类
  • SharedPreferences apply 提交
  • ...

ANR

什么是ANR,你要是回答:主线程执行耗时任务那一准没戏

ANR是指指定时间内操作无响应,类型有:

  • InputDispatching Timeout: 5秒内无法响应屏幕触摸事件或键盘输入事件
  • BroadcastQueue Timeout: 前台广播onReceive()函数10秒没有处理完成,后台为60秒
  • Service Timeout: 前台服务20秒内,后台服务在200秒内没有执行完毕
  • ContentProvider Timeout: ContentProvider的publish在10s内没进行完

Acitivity 的5秒是我们最常见的ANR,但这不是其定义,了解了ANR定义,其他平台上的ANR一样就了解了,区别是具体时间考量不同。

有个经典的问题:Activity sleep 20秒会ANR吗

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.e("zengyu","before sleep");
                try {
                    Thread.sleep(20000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.e("zengyu","after sleep");
            }
        });
    }
}

答案是不会,若是在这20秒内你点别的按钮的话就会ANR,对于第一个按钮来说,sleep就是我们要的操作,所以不算是无响应。

Android 系统线程使用有数量限制

android 里我们不能无限制 new thread,很多设备会给你 crash,当然部分手机不会,比如三星,但是国产机一般都会

像这样的操作那是万万不能的

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for (int i = 0; i < 10000; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
}

该用线程池的时候不要吝啬,该用就用

内存泄露-内部类

这里只说内部类的问题。

内部类天然就持有外部类的引用,就算你内部类不用外部类的任何数据和操作也会持有外部类,没有外部类的引用,是找不到内部类的。

所以像这样的代码最好别写,要不外部类销毁时,内部类还在运行,那外部类就无法被GC标记。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {
            @Override
            public void run() {
                //TODO
            }
        }).start();
    }
}

静态内部类算是外部类,可以避免内部类持有外部类引用的问题,有时候有条件可以这么写:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new StaticThread().start();
    }

    private static class StaticThread extends Thread {
        @Override
        public void run() {
            super.run();
            //TODO
        }
    }
}

SharedPreferences apply 提交

SharedPreferences 写入数据时应该使用 Editor.apply 代替 Editor.commit
SharedPreferences 操作的是本地 xml 文件,SharedPreferences 读取数据时会优化以下,就是让 SharedPreferences 操作过的 xml 文件内容常驻内存,这样读取操作效率就上来了,就不再是IO耗时操作了。

但是我们经常使用的 Editor.commit 是同步操作,是个IO操作,操作的是file文件,要是你写的数据量大,所在的 xml 文件大,那么没2位数ms的时间别想完成操作,但是大家想想16ms系统会刷新一帧,也许你不经意的使用的 commit 正是你百思不得其解的页面为什么会卡一下的元凶;

而 Editor.apply 则会使用 xml 常驻在内存中的部分,你修改的内容先写入内存,然后 SharedPreferences 会有异步操作去同步到IO文件,这很像一些对象型数据库的思路。

这个点大家要记住了,有人就是爱问这个,这个的确也是让 app 流畅起来的一个小法宝。这个世界上万事万物都是有因果关系的,app 卡也是,只是因为我们知识点不够深入,不了解罢了,一旦我们知道了,8成的卡顿都可以避免。

弱引用使用场景

这个放些例子上来,大家体会

public class MainActivity extends AppCompatActivity {
    private static class StaticHandler extends Handler {
        private WeakReference<MainActivity> activityWeakReference;

        public StaticHandler(MainActivity mainActivity) {
            this.activityWeakReference = new WeakReference<>(mainActivity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //TODO
            //use activityWeakReference.get() to get view
        }
    }

    private StaticHandler mStaticHandler = new StaticHandler(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mStaticHandler.sendEmptyMessage(0);
    }
}

最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

Android学习PDF+架构视频+面试文档+源码笔记

【Android开发核心知识点笔记】

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【Android高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

【Android进阶学习视频】、【全套Android面试秘籍】关注我【主页简介】或者【简信我】查看免费领取方式!

2020注定是一个不平凡的年份,如何化危机为机遇,全看大家自己的表现了。

相关文章

网友评论

    本文标题:Android程序员:该如何准备面试才能找到好工作,打破疫情危机

    本文链接:https://www.haomeiwen.com/subject/wfbwyhtx.html