克制 到4月2日的本日

  很多 互联网校招/练习 的网申都克制 了

  信托 各人 的简历已经都躺在体系 里等待 “临幸”了

  那么技能 岗的同砚

  你的leetcode刷完了么

  什么没刷完!?

  

  固然 很想对你犯一个白眼

  但逆行君是一个不离不弃的公众号

  目标 Android开辟 的你

  请收下这份核心 “三十六计”

域名被污染可以换dns进入吗_域名被污染可以换dns进入吗手机

  逆行君说

  下面为各人 总结的Android开辟 “三十六计(题)”,假如 各人 预备 口试 Android开辟 岗,是肯定 要不择本领 的搞清楚 的。

  但有两点必要 留意 :

  1、这些题目 对于各人 的口试 ,是“须要 不充实 条件”,可以作为时间告急 环境 下的应急之选。但想要在口试 中“不动如山”,还是 要多多刷题。

  2、逆行君为各人 奉上的参考答案只是一家之言,各人 在阅读时还是 要连合 网上的其他详解以及源码,多听多看。

  PS.固然 是面向Android开辟 ,但也有一部分 盘算 机底子 和Java语言的内容

  第一部分 :盘算 机网络

  一、ICMP协议是什么

  (1) ICMP协议全称Internet Control Message Protocol,即Internet控制报文协议。

  (2)是TCP/IP协议的一个子族,网络层。

  (3)用于在盘算 机、路由器之间转达 控制消息,如网络通不通、主机是否可达、路由是否可用等等。

  (4)ping下令 即基于ICMP协议。

  (5)路由跟踪的Tracert等下令 也基于ICMP

  二、DNS协议是什么

  (1)DNS全称Domain Name System,即域名体系 ,一个用于映射域名和IP地点 的分布式体系 。

  (2)DNS哀求 利用 UDP协议,但本身 属于应用层协议。

  三、堆和栈的区别

  (1)堆和栈在数据布局 和编程语言实现里的意思不一样。

  (2)作为数据布局 ,栈是后入先出的线性布局 ;堆是一个树,父节点总是大于(大概 总是小于)子节点,用于实现优先队列。

  (3)但在编程语言实现、运行时环境 、假造 机的语境下,栈(调用栈)是维护嵌套函数调用状态的布局 ,重要 是生存 局部变量的值和返回地点 ;堆是动态内存分配的空间,生存期超出函数的范围,布局 根据具体 的分配算法以及垃圾采取 算法而差别 。

  四、TCP和UDP的区别

  (1)TCP是传输控制协议,面向字节流 ,提供拥塞控制功能;UDP是用户数据报协议,面向报文,尽最大积极 交付数据;

  (2)TCP是面向毗连 的协议,UDP是面向非毗连 的协议。

  (3)TCP是传输可靠型协议,UDP是传输不可靠型协议。

  (4)TCP的速率 较慢,UDP的速率 较快。

  五、TCP拥塞控制逻辑

  (1)重要 由拥塞窗口cwnd实现,具体 逻辑重要 包罗 慢启动、快速重传和快速规复 等。

  (2)慢启动:窗口一开始很小(一样平常 为1)但是很快地(指数级)增长上来,直到到达 慢启动门限。

  (3)快速重传:TCP利用 3个雷同 的ACK来判定 命 据包丢失,开始快去重传

  (4)快速启动:重传后的慢启动

  六、TCP为什么断开毗连 要四次握手?

  (1)TCP是全双工的,每一个方向都必须单独举行 开关,以是 必要 四次握手。而创建 毗连 时发起者A的两个方向是默认打开的,B可以省去一个关照 A打开的哀求 ,以是 只必要 三次握手。

  第二部分 :Java底子

  一、HashMap和HashTable的区别

  (1)HashMap是线程不安全的,HashTable是线程安全的,以是 HashTable通常要比HashMap慢。

  (2) HashMap的迭代器是fast-fail的,即当迭代时HashMap的布局 被改变了,会抛出ConcurrentModificationException,而HashTable则不会。

  (3)HashMap不包管 随着时间的推移Map中元素的序次 是稳固 的。

  (4)HashMap的主键可以为null。

  二、SoftReference和WeakReference的区别

  (1)SoftReference只有当JVM即将OutOfMemory时才会被采取 。

  (2)WeakReference只要GC就会被采取 。

  三、HashMap辩论 后的处理 惩罚 方法

  (1)开放地点 法:又称再散列法,假如 散列值p1辩论 了,则基于p1再天生 另一个地点 p2,以此类推;常用再散列函数如线性探测、二次探测和伪随机数序列等。

  (2)链地点 法:Java8中一个链长度高出 8会转化为红黑树,镌汰 查找时间。

  四、equal()方法重写时要留意 的点

  (1)判定 对象非空

  (2)自反性、对称性、转达 性、同等 性

  五、new String()

  

  (1)输出为:true,false

  (2)String是final类,编译期指定的字符串会指向字符串池中的对象。

  (3)运行时天生 的String类会先在heap中创建 一个对象,同时去字符串池中探求 这个字符串,假如 没有则创建一个。

  六、Java优先级队列的实现原理

  (1) PriorityQueue利用 优先级堆实现

  (2)利用 堆排序算法举行 快速调解

  七、Java假造 机GC的原理

  (1)JVM的GC采取 根搜刮 算法。

  (2)GC Roots一样平常 有四种:栈帧的本地 变量表中引用的对象,方法区中的静态成员,方法区中的常量引用的对象(final全局变量),本地 方法栈JNI方法引用的对象。

  (3)当代 GC采取 算法重要 有三种:标记 -打扫 算法,复制算法和标记 -整理算法。

  (4)标记 打扫 算法缺点是服从 比力 低,轻易 出现内存碎片,一样平常 很少用到。

  (5)复制算法缺点是浪费内存多,不实用 于大对象和存活时间长的对象,一样平常 用于新生代对象的GC。(6)标记 整理算法降服 了内存碎片,但缺点还是 服从 不高,一样平常 用于老年代对象的GC。

  (7)HotSpot假造 机默认Eden和Survivor的比例是8比1,老年代利用 标记 整理算法,新生代利用 复制算法。

  (8)Survivor空间不敷 时大对象会直接进入老年代。

  (9)当一个对象不可达时会调用finalize()方法,但是仅调用一次。

  八、Java堆和栈的区别

  

  (1)全部 对象实例都是在Java堆上分配内存

  (2)方法区用于存放ClassLoader加载的类的相干 信息,包罗 类、静态变量和常量,String常量池也在方法区内。

  (3)Java栈存放方法调用时的局部变量、方法操纵 、方法出口与方法实行 的相干 信息,无穷 递归调用会撑爆Java栈。

  九、Java三大特性

  (1)封装,继承 ,多态

  十、Java的可变参数

  (1)实用 于参数个数不确定,范例 确定时。

  (2)只能出如今 参数列表的末了 。

  (3)Java把可变参数当做数组处理 惩罚 。

  十一、String为什么要计划 成稳固 的

  (1)字符串稳固 时,字符串池才有大概 实现,运行时能节省 很多 堆空间。

  (2)字符串稳固 ,就不消 思量 多线程同步题目 ,是线程安全的。

  (3)类加载器要用到字符串,字符串稳固 性提供了安全性,包管 精确 的类被加载。

  (4)字符串稳固 hashcode就能被缓存,作为HashMap的键要比其他对象速率 快。

  十二、怎样 明白 String的稳固 性

  (1)全部 在编译期间确定的字符串都会在常量池中。

  (2)new String("xxx")会在堆中创建对象。

  (3)string.intern()会根据字符串内容去常量池中探求 并返回雷同 内容的字符串,假如 没有则先创建。

  十二、Java用擦除实现范型的缘故起因

  (1)纯技能 角度思量 ,Java实现雷同 C++模板的范型是相称 简单 的,Java不但 在2014年的Poject Valhalla的Model1中实现过,在更早的1996年的实行 语言Pizza中也实现过。

  (2)Java夸大 二进制向后兼容性,即低版本编译器天生 的class文件要能在高版本的JRE上运行。

  (3)要保持兼容性的环境 下在没有范型的底子 上实现范型有两种思绪 :一是必要 范型的范例 (重要 是容器类Collections)原有的稳固 ,然后平行地加一套范型版本;二是让全部 必要 范型的范例 原地范型化。

  (4)C#在1.1至1.2时选择了第一条路,Java在1.4至1.5时选择了第二条。

  (5)第一个缘故起因 是C#在1.1期间 码并不多,整个体系都在微软的控制下,变动 比力 轻易 ,而Java1.4时已经有大量生产代码用于生产环境 ,假如 新功能必要 做大量源码级的修改,会大大影响新功能的遍及 。

  (6)第二个缘故起因 是,Java1.1至1.2时颠覆 过一次容器类的计划 (Vector、HashTable),假如 再加一套范型化的容器类画面着实 太美。

  十三、怎样 界说 一个Annotation

  (1)public @interface CustomAnnotation{}

  (2)元注解Target、Retention、Documented、Inherited

  (3)域 public String name() dafault "xx";

  十四、volatile关键字的作用

  (1)volatile只能用来域变量上,作用是包管 变量的可见性和读写操纵 的有序性。

  (2)Java实行 “int x = new Object()”时有三个步调 :1在栈帧中给x变量分配空间;2在堆中初始化Object;3将x指向Object。JVM不能包管 此中 2、3步的实行 次序 ,在多线程并发环境 下x不为null时这个对象不肯定 初始化完成了,而volatile关键字正是用来包管 这一点的,即读操纵 肯定 在写操纵 完成之后。

  (3)volatile不是被计划 用来多线程同步的,最常用的场景是懒加载双重查抄 的单例模式。

  (4)在JVM的实现中,volatile要比synchronized轻量,斲丧 资源更少。

  十五、notify了一个锁,wait的地方肯定 会被唤醒 继承 实行 吗?

  1. 假如 只有一个线程在wait,那么是的。

  2. 假如 有多个线程在同时wait同一个锁,那么唤醒 哪一个线程与JVM的实现有关,不能包管 某个线程肯定 会被唤醒 。

  第三部分 :Android底子

  一、触摸变乱 的分发

  (1)触摸变乱 的处理 惩罚 涉及三个方法:dispatchTouchEvent()、onInterceptEvent()、onTouchEvent()

  (2)从Activity的dispatch开始转达 ,假如 没有拦截,则不停 转达 到子view。

  (3)假如 子View没有斲丧 变乱 ,变乱 会向上转达 ,这时父Group才可以斲丧 变乱 。

  (4)假如 子View没有斲丧 DOWN变乱 (没有返回 true),后续变乱 都不会再转达 进来,直到下一次DOWN。

域名被污染可以换dns进入吗_域名被污染可以换dns进入吗手机

  (5)OnTouchListener的处理 惩罚 优先级高于onTouchEvent()

  二、Handler.postDelay()的原理

  三、Fragment的生命周期

  

  四、Gson的原理

  (1)假如 利用 默认的new Gson()对象,则采取 反射来举行 json的分析 。

  (2)假如 利用 GsonBuilder来创建,并利用 自界说 的TypeAdapter,则会用自界说 的TypeAdapter来分析 json字符串。

  五、Serializable和Parcelable的区别

  (1)S是Java的序列化方案,P是Android的

  (2)S在序列化的时间 会产生大量的临时 变量,导致频仍 GC,P则不会。因此在内存中利用 时(如网络中转达 或进程 间转达 )保举 利用 P。

  (3)P被计划 为IPC通讯 数据序列化方案,不实用 于生存 在磁盘上,此时应用S。

  (4)S只必要 继承 Serializable接口即可,P则必要 重写writeToParcel方法、重写describeContents方法、实例化Parcelable.Creator。

  六、一个Activity启动别的 一个Activity并返回的生命周期调用

  (1)A.onCreate()

  (2)A.onStart()

  (3)A.onResume()

  (4)启动B

  (5)A.onPause()

  (6)B.onCreate()

  (7)B.onStart()

  (8)B.onResume()

  (9)A.onStop()

  (10)返回A

  (11)B.onPause()

  (12)A.onRestart()

  (13)A.onStart()

  (14)A.onResume()

  (15)B.onStop()

  (16)B.onDestory()

  七、startService和bindService的区别

  (1)startService启动的Service在调用者本身 退出而没有调用stopService时会继承 在背景 运行。

  (2)bindService启动的Service生命周期会和调用者绑定,调用者退出时Service也会调用unBind()-onDestory()退出。

  (3)先调用startService再调用bindService时Service也只会走一遍生命周期。

  (4)除了startService和bindService,Service的生命周期只有三个方法:onCreate()、onStart()、onDestoty()。

  八、怎样 监听ListView的item被采取 了?

  (1)AbsListView.setRecyclerListener()

  (2)#onMovedToScrapHeap(View view)

  (3)RecyclerView.setRecyclerListener()

  (4)#onViewRecycled(ViewHolder holder)

  九、什么是属性动画

  (1)Android在3.0引入属性动画的缘故起因 是视图动画有两个无法降服 的缺点:只能对View举行 操纵 ,只支持移动、缩放、旋转和淡入淡出。

  (2)属性动画不针对View来计划 ,实际 上是一种不绝 地对值举行 操纵 的机制。

  (3)ValueAnimator是针对值来举行 变动 的动画,值可以是int或float或恣意 对象。假如 是对象的话必要 实现TypeEvaluator,int和float是可选的。

  (4)ObjectAnimator继承 ValueAnimator,可以对恣意 对象的恣意 属性实行 变动 动画,条件 是属性有get和set方法。

  十、Android体系 是怎样 包管 一个线程只有一个Looper的

  (1)Looper.prepare()利用 了ThreadLocal来包管 一个线程只有一个Looper。

  (2)ThreadLocal是Java1.5中提供的多线程保持对象的方法和克制 参数转达 路径过长的办理 方案(留意 它并不是被计划 用于多线程通讯 或同步的)

  十一、怎样 界说 一个Gradle Task

  (1)界说 Task范例 :class HelloWorldTask extends DefaultTask{}

  (2)@TaskAction用来标记 这个task被实行 时调用的方法:@TaskAction def hello {println "Hello World"}

  (3)@Optional用来标记 可选变量:@Optional String message = "m";

  (4)界说 Task时即可指定Task范例 ,同时也可界说 可选变量(假如 有的话):

  (5)task hello(type: HelloWorldTask)

  (6)task hello(type: HelloWorldTask){message = "message"}

  十二、ListView的ViewType的限定

  (1)只能是数字

  (2)取值[0, getViewTypeCount() - 1]

  (3)见android.widget.Adapter类的getItemViewType()方法的解释

  十三、什么是ViewStub

  (1)ViewStub是一个轻量级的View,用于耽误 加载布局 和视图

  (2)它不可见时不占布局 位置、所占资源非常少。当可见时或调用ViewStub.inflate时它所指向的布局 才会初始化

  (3)ViewStub只能被inflate一次

  (4)ViewStub只能用来inflate一个布局 ,不能inflate一个具体 的View

  十四、SurfaceView的特点

  (1)SurfaceView拥有独立的画图 外貌 ,即它的UI可以在独立线程中绘制

  (2)Android体系 的UI由SurfaceFlinger服务负责绘制,每一个窗口有一个Layer用于形貌 它的画图 外貌 ,以是 可以实现独立于主线程举行 绘制

  十五、怎样 调试ANR

  (1)DDMS输出的LOG可以判定 ANR发生在哪个类,但无法确定在类中哪个位置

  (2)在/data/anr/traces.txt文件中生存 了ANR发生时的代码调用栈,可以跟踪到发生ANR的全部 代码段

  (3)adb pull 来pull traces文件到电脑上

  十六、Android程序方法数上限65535是怎么来的?

  (1)方法数超限后的错误发生在构建期

  (2)Dex的文件界说 中方法数的索引长度为32位(2^32=65536×65536),以是 不是Dex文件格式的限定

  (3)Dalvik假造 机的指令会合 ,B类查询参数(@BBBB)的长度为16位,以是 支持的最大方法数是65535

  (4)不但 包罗 方法数,还包罗 field数和class数,以是 dx(class转dex的)工具会对其举行 查抄 ,超限就会报错

  (5)ART假造 机在安装应用时会主动 将多个dex文件编译成一个.ota文件用于实行 ,以是 理论上不存在方法数超限的题目

  (6)但是由于如今 apk标准 中仍旧 利用 .dex作为可实行 文件的格式,为包管 向下兼容Dalvik,dx工具在构建时仍旧 会对方法数举行 查抄 ,与实际 运行环境 是Dalvik还是 ART无关

被这满满的干货感动了吗

快点转给本身 和小搭档 吧