A:可以的。
A:我主要使用java语言进行开发。
A:好的,静态区主要存储了java代码中的静态变量及代码块,只保存一份拷贝。新建对象时,栈中存储了相应引用的标记,指向堆中的具体对象实例;当对象实例化,在堆中产生相应对象的实例,并与栈中引用相对应。能想到的就这些了。
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
静态区:
1.方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
A:我想一下。好的,Object对象常用方法有hashCode()(前几天刚好看了相关代码),equals()方法,getClass()方法等。(equals方法是在得到提示的情况下说出来的,当时有些着急)
public boolean equals(Object obj)
比较当前对象与obj是否为同一对象,返回值:ture/false
public String toString()
返回当前对象的字符串表达形式
public native int hashCode();
返回对象的Hash码。Hash码是标志对象的唯一值,Hash码相同的对象是同一对象
protected void finalize()throws Throwable
对象销毁时被调用
以下三个函数用于控制线程
public final native void notify();public final native void notifyAll();public final native void wait();
native型方法指由C++语言编写的方法,Java解释器对其进行转义后才执行。
“==”与equals()
"==" 一般用于基本数据类型比较。若用作两个引用对象比较,仅当引用变量引用同一个对象时,才返回true,否则false。
A:我对hash了解不多,从我的理解中,hashCode方法给每一个对象生成了唯一的hash标记;在比较对象是会否相等时,实际上equals方法是比较两个对象的hash码,如果相等则为同一个实例,否则不同。这里应该涉及到深拷贝和浅拷贝的知识了。
hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,
例如,java.util.Hashtable 提供的哈希表。
hashCode 的常规协定是:
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,
必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。
从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。
以下情况不 是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,
那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。
但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。
(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
当equals方法被重写时,通常有必要重写 hashCode 方法,
以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,其中a和b为常数(这种散列函数叫做自身函数)
2. 数字分析法
3. 平方取中法
4. 折叠法
5. 随机数法
6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。
即 H(key) = key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
A:(还是太紧张了)嗯,我只想到MD5算法,不好意思哈。
A:避免哈希冲突的方法有取余法,增大除数能够增加余数的间隔从而使对象之间的内存距离增大;还可以使用“加盐”算法,增加字符串使得计算的结果更加离散。
同上
A:java的序列化我只是看过基本概念。据我的理解,java序列化是使用stream将对象转化成二进制数据,然后通过传输被接收端接收到再重新组装成对应的对象。
Serialization(序列化)是一种将对象以一连串的字节描述的过程;
反序列化deserialization是一种将这些字节重建成一个对象的过程。
A:我能想到的有选择排序、冒泡排序、快速排序、堆排序,还有,猴子排序(原谅我当时笑场了,对面也笑了);他们的复杂度分别是O(n^2)、O(n^2)、O(nlogn)、堆排序是O(nlogn)。
最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序 O(n2) O(n*log2n) 不一顶 O(n)
插入排序
O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)
A:数组在内存空间中是连续的,链表是离散分布的,数组增删改查是O(2^n),链表是O(n)
数组是连续的内存,对于访问数据,可以通过下标直接读取,时间复杂度为O(1),而添加删除数据就比较麻烦,需要移动操作数所在位置后的所有数据,时间复杂度为O(N)。
链表是物理上非连续的内存空间,对于访问数据,需要从头便利整个链表直到找到要访问的数据,没有数组有效,但是在添加和删除数据方面,只需要知道操作位置的指针,很方便可以实现增删,教数组比较灵活有效率。
Q:请举例说明TCP传输过程 A:三次握手对吧,嗯,假设有AB两个端点,A作为发送端,B作为接收端。
A向B发送请求,B收到请求之后向A发送响应,A接受到B的响应再次向B发送请求,B收到该请求之后双方建立连接。
发送的请求分别为SYN,SYN/ACK,ACK。
http://blog.csdn.net/whuslei/article/details/6667471/
A:是2.0
A:我只知道2.0版本是全面支持了HTML5,其他的不了解了。
A:了解一点儿。
A:javascript本身并不具备面向对象,它通过prototype原型链实现继承,可以通过new的方式建立函数对象,实现面向对象。
http://blog.csdn.net/yueguanghaidao/article/details/9747033
A:我所了解到的javascript MVC 框架有react.js,angular.js,backbone等。
A:进程是运行中的程序,每一个进程之间拥有各自的资源,是程序运行的最小单元;线程是进程的子集,多个线程共享资源,是资源分配的最小单元。(这里被对面提示协程是进程间的关系,属于我的回答漏洞)
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。
进程与线程的区别
线程与进程的区别归纳:
a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
c.调度和切换:线程上下文切换比进程上下文切换要快得多。
d.在多线程OS中,进程不是一个可执行的实体。
只搜索到这个答案,如果有别的详细的答案请留言告知,不胜感激 https://www.zhihu.com/question/40543936
先来先服务(FCFS, First Come First Serve)
时间片轮转法
多级反馈队列算法(Round Robin with Multiple Feedback)
最短进程优先
最短剩余时间优先
最高响应比优先