-
如何停止一个线程请求?详情
Thread.stop()
可以停止,但是不安全的,已废弃的方法,不建议使用Thread.interrupt()
中断当前线程,可以在线程中用isInterrupted()
来判断线程是否中断。- 在线程的合适时机抛出异常。
-
线程之间通信方式 详情
- socket
- 文件传输
- aidl(binder)
- 剪切板
- intent+bundle
- 使用Message
-
线程和进程区别
- 线程是系统调度的最小单位
- 进程可以包含多个线程
- 一个应用可以有多个进程以及多个线程
- 进程有独立的存储空间,不可共享数据
- 线程可以共享数据,但由于线程的异步性,共同读取数据可能导致数据错误
-
Java的垃圾回收机制 详情
- 当对象没有被任何地方引用时候,JVM会在适当的时机释放该对象内存空间
- 强引用不会回收,软引用会在内存不足时候回收,弱引用对象会在垃圾回收运行时回收,虚引用会在对象被回收时收到系统的通知。
-
哈希算法以及HashMap的底层原理 详情
-
哈希算法,把任意对象通过计算,变化为数字的算法。
哈希算法并不是一个特定的算法而是一类算法的统称。哈希算法也叫散列算法,一般来说满足这样的关系:f(data)=key,输入任意长度的data数据,经过哈希算法处理后输出一个定长的数据key。同时这个过程是不可逆的,无法由key逆推出data。如果是一个data数据集,经过哈希算法处理后得到key的数据集,然后将keys与原始数据进行一一映射就得到了一个哈希表。一般来说哈希表M符合M[key]=data这种形式。
哈希表的好处是当原始数据较大时,我们可以用哈希算法处理得到定长的哈希值key,那么这个key相对原始数据要小得多。我们就可以用这个较小的数据集来做索引,达到快速查找的目的。稍微想一下就可以发现,既然输入数据不定长,而输出的哈希值却是固定长度的,这意味着哈希值是一个有限集合,而输入数据则可以是无穷多个。那么建立一对一关系明显是不现实的。所以"碰撞"(不同的输入数据对应了相同的哈希值)是必然会发生的,所以一个成熟的哈希算法会有较好的抗冲突性。同时在实现哈希表的结构时也要考虑到哈希冲突的问题。
密码上常用的MD5,SHA都是哈希算法,因为key的长度(相对大家的密码来说)较大所以碰撞空间较大,有比较好的抗碰撞性,所以常常用作密码校验。
-
HashMap原理
首先会把key值转化为hash值,然后把对应的hash值转化为哈希表的下标。
HashMap可以理解为一个以hash值转化后的值为下标,以链表为元素的数组。
-
-
数组和链表的区别 详情
-
数组
数组是一个连续的存储区域,需要预留存储空间,删除和插入效率低,随机读取效率高,不利于扩张
-
链表
存储空间可以不联系,通过指针来指向下一个位置,增加和删除数据容易,查找效率较低,且不具有随机访问性质。
-
-
读写锁和互斥锁的区别 详情
-
读写锁
读写锁有三种状态,读加锁状态、写加锁状态和不加锁转态
一次只有一个线程可以占据写的锁,但是可以有多个线程占据读的锁。读的时候,禁止写入,只允许多线程读取,写的时候禁止读取,也只能一个线程写入。
读写锁适合对数据结构读的次数远大于写的情况。
-
互斥锁
在访问资源之前,对资源加锁,访问完成之后解锁。在锁定的过程中任何其他试图访问资源的线程都将被阻塞,直到解锁。这种加锁方式只有一个线程能够访问被互斥锁保护的资源。
-
-
重载和重写的区别 详情
-
重载
可以理解为方法名相同的两个方法,这两个方法除了名字相同,没什么联系。唯一的要求就是两个方法的参数不能相同。
-
重写
是子类在继承父类方法时候,对父类的方法进行的重写。要求参数列表和方法吗必须与父类相同,而且访问权限只能高不能低。java7以后,返回值的类型可以是父类型的子类。
-
Android 面试中,常见的 java 问题(1)
最新推荐文章于 2021-02-12 17:47:31 发布