1.深拷贝和浅拷贝
2.java中会不会内存泄露
3.oom和软引用的问题
4.多线程并发遇到什么问题
5.进程通信方式
6.判断单链表有没有环
7.new和malloc区别
8.java内存回收机制
9. hashtable 和 hashmap
10.hashcode和equal
11.java 和c++区别
1.深拷贝是复制对象并用一个引用指向新生成的对象,浅拷贝是只新生成一个引用指向原来的对象
2.会。内存泄露是指无用的对象未得到释放内存。Java有内存回收机制,垃圾回收器可以自动回收无用对象。java垃圾回收器是用有向图搜索的。
但
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是
java
中内存泄露的发生场景。
3.oom是outofmemory,内存溢出。java分为四种类型引用:强引用,软引用,弱引用,虚引用。
强引用为
一般引用,jvm不会回收该对象。
软引用:只有在内存不足的时候JVM才会回收该对象。
弱引用:当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。
虚引用:如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。
4.不同级别锁等。
5.进程通信方式有:管道,共享内存,信号量,信号,socket。
6.参考点击打开链接
7.根本上来说new是生成一个对象,malloc是申请一段内存,由指针控制。所以new返回类型指针,自动分配字节数,调用构造函数。
8.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
9.hashtable是安全的,可为null值的,
hashmap是不安全的,不可为null值,速度较快
10.hashcode:对象的哈希编码,对象的编号,用于判断对象是否相同
11.java是单继承,c++是多继承
java不支持指针,c++支持指针
java虚拟机收集器管理内存,c++需要程序员管理内存
这三个就是最基本的
java不支持指针,c++支持指针
java虚拟机收集器管理内存,c++需要程序员管理内存
这三个就是最基本的
hashcode:对象的哈希编码,对象的编号,用于判断对象是否相同