网易互娱Android一面(凉)
开局自我介绍。
在学校做过什么项目(讲完之后居然一点都不问......)
Java部分:
- 讲讲hashcode 跟equals方法
HashCode方法是为了让所有对象中在堆中有一个唯一的标识符。
equals是为了判断2个对象逻辑上是否相同。
二者在使用时若复写equals一般要注意复写hashcode,避免出现逻辑上应该相同的两个对象hashcode不同。 - 使用equals方法有什么注意事项 (?)
百度:
1 自反性:对任意引用值X,x.equals(x)的返回值一定为true.
2 对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
3 传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
4 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
5 非空性:任何非空的引用值X,x.equals(null)的返回值一定为false
- Java跨平台特性怎么实现的(说了一次编译,class文件可以在别的虚拟机跑)
JVM将代码编译成class文件后,class文件可以在任何有JVM的环境运行。
Android部分:
- APK有啥(不知道)
5个部分:
1) 编译后的dex文件:.class文件编译后的产物,Android系统的可执行产物
2) Resource等资源文件(layout等)
3) Assets资源文件(js文件等)
4) Libray(so库等文件)
5) 签名文件
- Android工程文件目录有啥以及详细作用(答得有点懵)
- compileskdversion 跟targetsdkversion区别讲一下(不懂)
compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。
targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。也就是说,targetversion时就默认你经过了严谨的测试,会使用一些高级的以及新的特性。
- JVM虚拟机跟Android虚拟机讲一下(大概讲了两点)
1、JVM虚拟机是基于堆栈式虚拟机,Android虚拟机是基于寄存器式虚拟机,对内存比较友好
2、JVM虚拟机运行时一般只有一个实例,Android虚拟机在运行时内存占用比较小,可以多实例运行
3、JVM执行的是class文件,Android虚拟机执行的是dex文件 - Android内存泄漏解决?
1、 通过改变引用持有
2、 通过改变依赖关系 - 内存泄漏联系JVMGC的机制讲一下
内存泄漏就是GC时没有把自己没有使用的部分给GC掉,导致内存泄漏。
计算机网络:
- 三握为啥要三握?
避免两握时,出现第一次握手迟到过久导致的一方一致发送连接建立请求导致资源浪费的问题。 - 讲一讲DNS域名访问过程用了什么协议(DNS、ARP、RIP、HTTP)
自顶向下讲:
在应用层传输时使用HTTP协议
在运输层传输时,使用TCP协议,以及DNS协议
在网络层传输时,使用IP协议,以及路由选择协议:RIP、OSPF
在数据链路层传输,使用APR协议?
在物理层传输 - 讲讲分层结构(五层、七层)
五层: 七层:
物理层 物理层
数据链路层 数据链路层
网络层 网络层
运输层 运输层
应用层 会话层
表示层
应用层
操作系统:
- 讲讲大端小端(不懂)
- 讲讲虚拟内存跟物理内存
虚拟内存是为了让用户在使用时感觉像是使用了虚拟内存大小的内存,实际上只有物理内存大小的内存。其实现的基础就是分页式存储,缺页中断的发生。
算法部分:
- 讲一下如何确认一个链表的两个相同节点
1、可以使用一个HashMap存储一个链表,再遍历另外一个链表判断有无相同。
2、根据一个数学关系,同时遍历A跟B链表,若A链表为空,置为B链表,若B链表为空,置为A链表,若二者节点相同,则为相同节点,若二者都为空,则无相同节点。 - 讲一下如何确定链表是否有环
1、快慢指针
2、用HashMap存储 - 手写二分查找
这次面试体验差,没怎么准备,面试官问的问题没有章法,一下问Java一下问数据结构啥的。
整体体验很难受。
凉。
#面经##校招##网易互娱##安卓工程师#