五步搞定Android开发环境部署,系列教学

开头

很多人说Android开发前景越来越差了 我觉得这个回答是片面的

首先Android应用开发前景差是在最近两年出现的,也就是从2018开始,从那时起移动端的程序员已经慢慢出现供大于求的局面,本人作为移动端开发,深知这一点。

然而也必须说明一点,不论是Android开发还是iOS开发,虽然都出现了相关的程序员供大于求的情况,但市场仍然是有需求的,特别是对资深的开发人员及拥有相关底层开发知识的应用程序员市场及发展还是很多的;这里所讲的就业难都是相对于初级开发人员。

为什么会在18年出现应用端就业难?这是由于在前几年App风盛行,那几年只要是个和互联网的公司要是没个自己的App那都不好意思叫互联网公司,所以一般的互联网公司成立之初就会着手开发自己的App,不管是否是刚需,但市场终究是严峻的;App虽然好,能快速开展本公司的业务,但App的运营成本还是很高的,一个App在早期就开发团队来说一般都是需要至少Android开发一人,iOS开发一人,后台开发2人以上,还有UI及产品等等,当然最主要的问题是一般的公司对于这种模式都会面临回报周期长的问题,App开发完了还面临着推广的问题,市场抢占不了,也许之前的都会付之东流。于是在早期很多学校特别是培训机构就针对市场推出了应用端的培训课程,短到三个月长到半年的课程,于是乎每一个月都会有成千上万的应用端走向市场,所以时间一长,市场慢慢趋于稳定。应用端的人员慢慢就变得供大于求了,这也是慢慢出现应用端求职难的问题了。

以上说的是其中一方面,成本高和其他低成本,低运营的技术相继出现也是应用端求职难现象的助推手。

这里主要讲下2016年出现的小程序对于App的冲击,原生App有着开发周期长,运营成本高及回报周期长的特点,所以近年来很多公司都慢慢削去了应用端从而将资金放在其他部分,直到小程序的出现,开发成本一下就可以降下不少,为什么呢,因为小程序的开发语言可以由前端的开发人员承担,而且开发一个小程序不需要维护两套代码也就是不需要像原生App一样,需要Andoid端和iOS端,因为小程序是运行在微信中的,所以只要开发人员维护一套代码就够了,这大大的降低了前期的开发成本,其他细节在这就不细讲了,总之小程序的出现不同程度上更加冲击了应用端的竞争市场,从而也使得应用端就业竞争更加激烈。

当然市场还是需要应用端的人才的,这里所说的人才指的是那些会顺应技术发展和时代的有着不断学习力的开发人员,对于那些初级的程序员市场终究对于他们是残酷的,所以提升自己的竞争力在任何职业任何时候都是非常重要的,只有这样才不会被市场所抛弃。

就先写到这,手机码字很痛苦,写的很片面不好之处敬请指出,如果觉得有参考价值的朋友也可以关注一下我 我会定期分享一些关于Android进阶方面的知识,也会分享一下最新的面试题~

安卓基础知识

安卓基础知识确实很多,如果日常积累不够的话确实比较头晕,比如我承认我只在 APP 升级的时候搞过一个前台的 Service,但是面试的时候就会问你 Service 生命周期,如何绑定,如何跨进程通讯,如何关闭Service 等等,你肯定不能说"我没用过我不会"。

所以我们就要复习,一来我们可以应付面试,二来我们也可以通过基础知识的积累来提高我们的能力。

主要知识点

1.Activity 任务栈和 4 种启动模式关联性问题
2.IPC 非常重要,想要达到中级和高级的水平就必须要读懂,跨进程几种方式必须了解
3.Binder 肯定是必问的,当然还有 AIDL
4.自定义 View 的 draw measure layout 过程,事件的分发,拦截,处理,处理滑动冲突的思路,view滑动的几种方式
5.动画的几种实现方式
6.Window 在 Android 里的作用。它和 Activity 和 View 的关系
7.四大组件的工作过程,这个确实有难度,按自己能力钻研吧,也别陷的太深
但是,四大组件的使用方式必须会,Service 的启动和绑定,广播的使用方法,写个简单 ContentProvider 这些都是必须的
8.Looper,Handler,MessageQueue 的关系
9.主线程为什么是主线程,如何开启线程,线程池和安卓常用的四种线程池
他们的特点和使用场景
11.AsyncTask 原理,并发问题,缺点等
12.如何面对大的 bitmap,如何自己设计一个 ImageLoader
13.其实可以扩展为,如何设计一个 okhttp,如何设计一个 retrofit,eventBus 等等
14.其实就考察对开源框架的认识和使用的熟练程度
15.如何避免和处理 Crash 和 ANR
16.优化篇,过度绘制,OOM,内存泄漏,布局优化,MAT, Lint

大厂面试题

1.有个问题很常见:你了解过哪些开源框架?
2.okhttp 或者 retrofit 必须了解一下底层原理,即使不能读好源码,也要看看别人是怎么分析的
3.如今热更新和插件化特别火,一定要能说出来几种,并简单说明原理
4.MVC MVP MVVM 优缺点,一点要说出自己的切身体会
5.Fragment,生命周期和使用方法
6.Rxjava 尽量也看看
7.注解机制,现在这么多使用注解的框架
8.Acitvity的生命周期是什么样的?
9.Acitvity的生命周期,如何摧毁一个Activity? (美团)
10.Intent显示跳转与隐式跳转,如何使用?(美团)
11.Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?(美团)
12Activity如何保存状态的?
13.请描述Activity的启动流程,从点击图标开始。(B站)
14.你会在什么情况下使用Service?
15.startServer和bindServier的区别?(美团)
16.Service和Thread的区别?
17.IntentService与Service的区别?
18.ContentProvider如何自定义与使用场景是什么?
19.BroadcastReciver的静态注册与动态注册的区别?
20.广播的分类与工作原理

Java 基础知识

我是参照的《Thinking in Java》这个书和网上的博文,别的我也没买。网上 Java 的资料非常多,但是确实有很多写的不好,甚至有一些错误的,大家阅读要小心了。

主要知识点:

1.修饰符
2.类 接口 抽象类 匿名内部类 回调机制
3.几种基本类型,长度,边界
4.从 Iterator 到 Collection,再到 Set List Map(必问)
5.从以下几个角度理解学习:用法,具体实现类,线程安全性,底层数据存储结构,某些场景下如何选用?比如 ArrayList 和 LinkedList 如何选用
线程相关(必问)
6.锁机制 synchronize 用法
7.实现一个死锁
8.同步,生产者消费者模型
9.Thread 中的几个常用方法 比如问你 sleep 和 wait 区别
10.线程安全
11.JVM 了解一些,GC 了解一下,堆和栈的区别等
12.静态代理,动态代理 反射
13.设计模式 单例模式(要会写),工厂模式,抽象工厂,观察者模式等

大厂面试题

  1. 什么情况下会发生栈内存溢出?

  2. 如果让你写一段栈溢出的代码你会什么写,一个栈大概有多大,为什么?每个线程都有这样大小的一个栈吗? (美团)

  3. JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代?

  4. 介绍下GC回收机制与分代回收策略。

  5. Java中有几种引用关系,它们的区别是什么?

  6. GC收集算法有哪些?它们的特点是什么?

  7. 如何判断一个对象是否被回收,有哪些GC算法,实际虚拟机使用最多的是什么GC算法?(美团)

  8. Jvm内存 结构说一下。(东方头条)

  9. JVM DVM ART的区别(360)

  10. 描述GC机制。Class会不会回收?用不到的Class怎么回收?(东方头条)

  11. StackOverFlow与OOM的区别?分别发生在什么时候,JVM栈中存储的是什么,堆存储的是什么?(美团)

  12. Java虚拟机和Dalvik虚拟机的区别?

  13. 请描述new一个对象的流程。

  14. Java对象会不会分配到栈中?

  15. String, Stringbuffer, StringBuilder 的区别是什么?(东方头条)

a. String StringBuffer StringBuilder在进行字符串操作时的效率;这里主要考察String在内存中是如何创建的。(字节跳动)

  1. String为什么是不可变的?(字节跳动)

a. String为什么设计成final的?

  1. final 、finally、finalize 区别。

  2. 抽象类和接口的区别。

  3. 重载和重写的区别 (京东)

  4. 什么是值传递和引用传递,Java 是值传递还是引用传递?

算法和数据结构

主要知识点:

1.数组,链表,队列,栈,图
2.不会直接问你,会让你找到用处,比如Activity任务栈
3.算法
4.基本几种排序复杂度和思路
5.几种查找复杂度和思路
6.串的处理

大厂面试题

1.如何在一个1到100的整数数组中找到丢失的数字? 腾讯

  1. 如何在给定的整数数组中找到重复的数字? 小米

  2. 如何在未排序整数数组中找到最大值和最小值? 字节跳动

  3. 在Java中如何从给定数组中删除多重复制? 百度

5.常用的数据结构有哪些? B站

  1. 一个数组插入删除查找和链表的效率对比?如果一个数组要反复插入删除怎么优化降低时间复杂度? 腾讯

  2. arrayList底层原理 滴滴 字节跳动

8.如何在一次遍历中找到单个链表的中值? 中国平安

9.如何证明给定的链表是否包含循环?如何找到循环的头节点? 优酷

10.两个有交叉的单链表,求交叉点 华为

  1. 如何得到单链表的长度? 360

  2. 如何在不使用递归的情况下逆转单链表? 小米/美团

  3. 怎么判断链表有环? 滴滴

  4. 如何使用栈实现队列的功能?广州荔枝FM

  5. 两个栈实现一个队列 蘑菇街

  6. 两个队列实现一个栈 腾讯

  7. 对比一下队列和栈,以及它们底部实现 腾讯

推荐 LeetCode 刷题和读《剑指offer》。

性能优化

主要内容

1.ANR
2.内存溢出
3.内存抖动
4.内存泄漏
5.UI卡顿
6.冷启动优化等方面

大厂面试题

  1. 内存优化,内存抖动和内存泄漏。(东方头条)

  2. Bitmap压缩,质量100%与90%的区别?(东方头条)

  3. TraceView的使用,查找CPU占用(东方头条)

  4. 内存泄漏查找 (酷我音乐)

  5. ANR查找

a. ANR是什么,怎么解决?(美团)

  1. CPU波动

  2. 当前项目中是如何进行性能优化分析的

  3. 冷启动、热启动的概念(酷我音乐)

  4. View层次过深怎么优化,选择哪个布局比较好?(美团)

  5. 怎样检测函数执行是否卡顿 (字节跳动)

11.什么时候会发生内存泄漏?举几个例子(美团)

职业发展规划相关问题

主要内容

1.服装必须得体
2.按照约定时间到达面试场地,准备好简历
3.谈话内容要主次方面,突出重点,一定要有逻辑性
4.最重要的一点,如果你有这个能力尽量把考官带到自己熟悉的邻域(这个看自己怎么聊天了)
5.结束后,千万不要头也不回的走。问一下有没有什么要问你的,一般回去等通知多半凉了。

大厂面试题

1.为什么想离职
2.当前项目的强度和自己的角色
3.希望加入个什么样的团队
4.对我们公司的了解
5.最好提前想一想避免面试时候紧张思路乱,说话没有逻辑。

腾讯T3详细面试经历 已拿Offer

下面是这次面试的主要问题。

一面

1.MVP,MVC,MVVM
2.项目里有没有用,缺点是什么,如何改进
3.ClassLoader 原理
4.Binder原理和使用
5.Activity 如何显示到屏幕上
6.自定义 View 的注意事项
7.Retrofit 原理
8.okhttp 连接池如何维护的
9.MAT 如何使用,能干什么
10.注解如何使用,编译时和运行时注解的区别
11.有没有了解过热修复
12.Map 的实现类和数据结构
13.内存泄漏如何检测
14.如何避免过度绘制
15.锁机制
二面

1.List 的实现类和优缺点,他们是否线程安全
2.如何设计一个优秀的 SDK,如何让 SDK 适应业务模式的变化。
3.在纸上设计一个推送 SDK 或者监控 SDK
4.两道算法题
5.考察大量数据排序
6.考察多线程协同意识,和核心线程的利用意识。
7.只要求写思路,伪代码即可
8.为什么要离职
9.是否能接受加班
三面(HR)

1.当前项目组结构和项目组中的角色
2.为什么离职
3.多久能到岗
4.当前薪水
5.希望薪水

面试宝典

面试必问知识点、BATJ历年历年面试真题+解析:点击【答案】即可领取

学习经验总结

(一)调整好心态
心态是一个人能否成功的关键,如果不调整好自己的心态,是很难静下心来学习的,尤其是现在这么浮躁的社会,大部分的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。

(二)时间挤一挤,制定好计划
一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。另外,制定好学习计划也是很有必要的,有逻辑有条理的复习,先查漏补缺,然后再系统复习,这样才能够做到事半功倍,效果才会立竿见影。

(三)不断学习技术知识,更新自己的知识储备
的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。

(二)时间挤一挤,制定好计划
一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。另外,制定好学习计划也是很有必要的,有逻辑有条理的复习,先查漏补缺,然后再系统复习,这样才能够做到事半功倍,效果才会立竿见影。

(三)不断学习技术知识,更新自己的知识储备
对于一名程序员来说,技术知识方面是非常重要的,可以说是重中之重。**要面试大厂,自己的知识储备一定要非常丰富,若缺胳膊少腿,别说在实际工作当中,光是面试这一关就过不了。**对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值