Android开发重要知识点
一、网络
1、https原理
2、tcp/ip协议
三次握手:https://www.cnblogs.com/cenglinjinran/p/8482412.html
四次挥手:https://www.zhihu.com/question/63264012
二、多线程
java基础知识相关
Android相关
1、从点击一个图标到这个应用启动的全过程
https://blog.csdn.net/freekiteyu/article/details/79318031
性能优化
https://www.jianshu.com/p/797395731747
三、第三方插件
1、ProtoBuffer
2、EventBus
https://www.jianshu.com/p/e7d5c7bda783
https://www.jianshu.com/p/d9516884dbd4
https://baike.baidu.com/item/EventBus/20461274?fr=aladdin
ThreadLocal、ThreadLocal内存泄漏问题
HashMap,ConcurrentHashMap
反射
注解
3、ButterKnife
和androidx冲突问题,R2代替R
4、Retrofit
官网:https://square.github.io/retrofit/
与OkHttp的区别:定位不一样,OkHttp功能更强更多,而Retrofit是对OkHttp的进一步封装和增减,使其使用更安全,更方便
四、jetpack
1、RecyclerView
缓存问题
多种布局问题:https://www.jianshu.com/p/66702b7a6881
刷新界面问题
空数据界面显示问题:RecyclerView设置空数据视图
2、ConstraintLayout
https://www.jianshu.com/p/17ec9bd6ca8a
五、java基础
1、反射
(1)java反射机制是什么?
java反射机制是一种在程序运行状态下,动态获取或者调用类或对象的方法、字段等所有成员信息的功能。
其本质就是在得到指定类X的Class(Class对象)后,根据该Class对象反向获取类X的各种信息。当X.java被编译后生成X.class文件,当程序运行时,JVM会在磁盘中寻找X.class文件并加载到JVM内存中为其分配内存空间,同时JVM会自动为X.class创建一个Class对象,在ClassLoader中,有且只有一个X类的Class对象。
(2)为什么要使用反射(使用反射有什么好处)?
1)可以动态编译,在运行期才确定类型,体现java的灵活性。比如某个类“A”由同伴开发,但没有开发完,而我需要预先写道代码中,如果直接通过new A()的给方式,编译肯定会报错,但使用Class.forName("A")这样的反射方式就可以通过编译,不影响自己开发和编译。由于Class.forName("...")中的参数是字符串,可以将该字符串写入配置文件,通过I/O的方式读取,这样就可以通过修改配置文件来控制加载哪个类了,java中的Spring就有很多这种操作。
2)可以访问类中用private修饰的字段、方法、构造函数等成员。
3)可以对某些类/方法/字段起到“后门”作用。比如某些类方法/字段比较敏感,为了避免外部人员不小心使用到而导致某些严重后果,就需要“隐藏”起来(比如用private修饰),但是内部开发人员又需要用到,这时候就可以使用反射的方式来实现。因为相比于通过new的方式直接使用,反射方式会复杂一些,且需要对该敏感的类/方法/字段比较了解。(这个说法是在某教学课堂上老师讲到的,听起来挺有道理的,但其它地方好像没听说过这种说法)
4)可以越过泛型。比如ArrayList定义好元素的类型后,就无法添加其它类型了,但是通过反射的方式却可以做到,可以参考后文的链接。
(3)反射有什么弊端?
1)性能差;原因后面有说明。为了避免这一点,有些地方通过使用注解生成器的方式将需要反射的地方提前到编译期完成,比如EventBus就可以通过选择使用注解生成器来实现这一点。有个比较有名的java反射框架jOOR,可以了解一下。
2)会破坏一些类的安全性。上面的第2)和第3)点也说到了,可以使用private修饰的成员等这些不太希望被“外人”使用的功能。
(4)反射为什么性能差?
没找到权威答案,网上零零星星收集了一些(参考https://www.zhihu.com/question/19826278):
1)jvm无法优化反射相关得代码;
2)动态加载,原本在编译期做的事,等到运行期才做;
3)反射的具体逻辑是委托给MethodAccessor实现,而该类需要在第一次调用invoke时才会实例化对象,是一种lazy init;
4)method.invoke方法,每次调用时都需要对参数进行数组包装;
5)method.invoke方法中要对方法的可见性做检查;
6)MethodAccessor对象实现反射有两种方式:开始15次是native方式,以后是java方式。在使用java方式时,其invoke方法中要检查参数的类型匹配。
2、面向对象
(1)面向对象的三大特性:封装、继承、多态;
多态:1)重写,override,子类覆盖父类的方法;重载,overload,同一个类中方法名相同,参数必须不同,返回值、修饰符可以不同。
Android开发重要知识点的更多相关文章
- 2016-2017-2 20155322 实验四 Android 开发基础
2016-2017-2 20155322 实验四 Android 开发基础 实验内容 下载和安装Android Studio 学会使用Android Studio进行简单的Android开发 实验知识 ...
- 40k*16 薪,五年Android开发4轮面试拿下腾讯 Offer !(附真题)
概述 感觉毕业后时间过得真快啊,从16年6月本科毕业入职了一家不大的公司,到现在快五年了,前段时间金三银四想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,前几天拿到了腾讯的offer,想把 ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- Android开发中目前流行控件和知识点总结
Android开发中目前流行控件和知识点总结 1.SlidingMenu 滑动菜单 应用案例:Facebook . Path 2.0 .人人.网易新闻 下载地址: https://github.c ...
- Android开发工程师文集-Android知识点讲解
前言 大家好,给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢 WebView讲解 一般通过Intent调用系统的浏览器: Uri uri = Uri.parse( ...
- Android 开发必备的知识点——JVM基础【转】
image 1.JVM与操作系统的关系 Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机.它能识别 .class ...
- 两年Android开发三面上岸腾讯,这些核心知识点建议收藏
概述 感觉毕业后时间过得真快啊,从 19 年 7 月本科毕业入职后,到现在快两年了,前段时间金三银四期间想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,面试好几家大厂,最后选择了腾讯.也祝 ...
- Android开发网上的一些重要知识点[经验分享]
1. android单实例运行方法 我们都知道Android平台没有任务管理器,而内部App维护者一个Activity history stack来实现窗口显示和销毁,对于常规从快捷方式运行来看都是s ...
- Android开发的基础知识点
1.Android开发的四大组件: Activity:android应用程序上看到的一页. Service:运行在后台,可以其他组件交互(音乐播放器). BroadcoastReceiver:用来对外 ...
随机推荐
- TypeScript – Decorator 装饰器
前言 TypeScript 5.0 之后就可以使用正真的 JS Decorator 了, 从前 experiment 的版本依然可用, 但是不建议继续用, 因为差很远, 一起用会混乱. Decorat ...
- 3. 无重复字符的最长子串 Golang实现
题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度. 注意区分子串和子序列. 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复 ...
- [Tkey] [IOI 2018] werewolf
注意看,我耗时五个小时 AK 了 IOI 题意 给你一个图,每次给定若干询问 \((s,t,l,r)\),请你完成下述要求: 定义 \(S\) 为到 \(s\) 的最短路径不小于 \(l\) 的点构成 ...
- [OI] 指针与迭代器
取地址与解引用 一般来说,我们有一个取地址符 & 可以返回该变量的地址. int main(){ int a; cout<<&a; } 0x6ffe1c 如果我们现在有一个 ...
- Linux 防火墙与安全管理工具详解
Linux 防火墙与安全管理工具详解 1. Iptables 概述 Iptables 是 Linux 系统中用于控制网络流量的工具,通过定义规则来过滤.转发和修改数据包.其规则可以细致地管理进入和离开 ...
- USB 同步字段中高速同步字段和低速全速同步字段的区别
USB(Universal Serial Bus)有几种不同的传输模式:低速(Low-Speed).全速(Full-Speed).高速(High-Speed)和超级速度(SuperSpeed).同步字 ...
- 新建数据库 phpStudy
官网:https://www.xp.cn/下载phpStudy : 环境配置:1. 下载MySQL8.0.12 2. 安装HeidiSQL11.0 开启 MySQL8.0.12 修改MySQL的密码: ...
- 在 KubeSphere 中部署高可用 Redis 集群
作者:余生大大,大数据开发工程师,云原生爱好者,KubeSphere 社区用户. 前言 Redis 是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性和高可用一般为集群模式的部署. 常规部 ...
- 记一次CPU飙升的问题排查
1.背景 通过公司监控工具监控,发现公司某个应用cpu利用率达到120%,也就是说这个应用自己单独占用一个cpu使用,为何占用这么高?让我们一起排查一下 2.开始排查 (1) 第一步获取cpu过高应用 ...
- 黑客工具:Amass – 寻找子域
安装 所有信息都可以在 OWASP Amass 项目的 Github 页面上找到:https://github.com/OWASP/Amass.我们将一起完成安装过程,以便更快地部署. 转到发布页面并 ...