9.进程和线程的区别
一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,线程之间共享内存,从而极大
地提高了程序的运行效率。
线程在执行过程中和进程是有区别的。每个独立的进程有一个程序运行的入口,
顺序执行序列,和程序的出口。但线程不能独立执行,必须依赖应用程序中。
由应用程序提供多个线程的执行控制。
从逻辑角度来看多线程的意义在于一个应用程序中,有多个执行部分可以同时
执行。但操作系统并没有将多线程看做多个独立的应用,来实现进程的调度和
管理以及资源的分配。这就是进程和线程的重要区别。
进程局域一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统
进行资源分配和调度的独立单元。
线程是进程的一个实体,是cpu调度和分配资源的基本单元,他比进程更小的能
独立运行的基本单位。线程自己基本上不拥有系统资源,只用于一点在运行中
必不可少的资源。但是他可与同属一个进程的其他线程共享进程所拥有的全部资源。
一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
进程线程的主要差别在于他们是不同的操作系统资源管理方式。进程有独立的地址
空间,一个进程崩溃后不影响其他进程的运行。而线程只是进程中的不同执行路径。
线程有自己的堆栈和局部变量,单线程没有独立的地址空间,一个线程死掉就等于
整个进程死掉。所以多进程比多线程程序健壮。但是切换进程时,耗费资源较大,
效率较差。但对于一些同时进行并且又要共享某些变量的并发操作,只能用线程,
不能用进程。
10.Java中==和equals的区别,equals和hashCode的区别
==是运算符,拥有比较两个变量是否相等
equals是object类的方法,用于比较两个对象是否相等,默认Object类的equals方法是比较两个对象的地址,即使用==。
hashCode也是Object累的一个方法。返回一个离散的int整数。在集合操作类中使用。为了提高查询速度。
11.常见的排序算法时间复杂度
12.HashMap的实现原理
- HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
- HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。