1.你认为JAVA与其他语言性比,有什么优点和缺点?
首先,java与C/C++相比,Java是一种完全面向对象的语言,虽然它的底层(运行时库)是用C语言开发的,可是并不依赖于C.因为Java的运行是在运行时库的支持下进行的,所以运行效率比可以更接近底层的C/C++来说效率会有所影响,不过java的类库采用很好的设计理念,已经成为业界的一种标准开发语言。他的跨平台的特性受到开发者的青睐,只需要开发一次就能在所有安装了Java运行时库的环境上运行。
其次,Java与C#相比。C#是微软开发的一种编程语言,语法类似Java,几乎就是Java的翻版,运行原理和Java也类似,也是通过运行时库的支持运行。不过支持的平台还有很有限。Java几乎被所有平台支持,而C#目前只被Windows和Linux支持,Windows下的支持当然是由微软自己开发的,而Linux下的支持则有mono支持。实际上mono也是把C#应用转化为Java应用而已,所以本质上,C#仍然只是被微软自己的操作系统支持。应用平台受到限制,是它最大的缺点。
2.JVM能有几个实例
每个Java程序对应于一个JVM实例,当一个Java程序运行时就创建一个JVM实例,因此JVM实例的个数取决于同时执行的程序个数。
3.Java是如何让实现跨平台的?
Java是利用JVM(Java虚拟机)实现跨平台的。
Java源代码(.java)经过Java编译器编译成Java字节码(.class),执行Java字节码,Java字节码经过JVM解释为具体平台的具体指令,并执行,不同的平台有不同的JVM,主流平台都提供了JVM,所以Java字节码可以在主流平台上能够解释执行,在这个意义上Java是跨平台的,也就是说:Java的字节码是跨平台的。
4.Java中会存在内存泄露吗?
内存泄露是指系统中存在无法回收的内存。有时候会造成内存不足或系统崩溃,Java存在内存泄露。
Java中得内存泄露当然是指:存在无用但是垃圾回收器无法回收得对象。而且即使有内存泄露问题存在,也不一定会表现出来。自己实现堆栈得数据结构时有可能会出现内存泄漏。
5.有没有使用过线程并发库
在Java5之后,就有了线程池得功能了,在介绍线程池之前,先来简单得看一下线程池得概念。假设我开了家咨询公司,那么每天会有很多人来咨询问题,如果我一个个接待得话,必然有很多人要排队,这样效率很差,我想解决问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,再来一个,我再分配一个客服去接待…如果第一个客服接待完了,我就让他接待下一个咨询者,这样我雇的这些客服可以循环利用。这些客服就好比不同的线程,那么这些线程的容器就叫做线程池。
6.静态变量和实例变量的区别
静态变量也叫类变量,这种变量前面加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所有对象的同一个变量都是共享同一块内存空间。
实例变量也叫对象变量,这种变量没有加static修饰符。只通过对象调用,而且所有的对象的同一个实例变量是共享不同的内存空间的。
区别在于:
静态变量是所有对象共有的,某一个对象将他的值改变了,其他对象再去获取它的值,得到的是改变后的值。
实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。
7.同步和异步有何异同,在什么情况下分贝使用他们?
如果数据将在线程间共享。列如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用一个需要花费很长时间来执行的方法,并不希望让程序等待方法的的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
8.简述 TCP/UDP协议的区别
比较项 | TCP | UDP |
---|---|---|
是否可连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠的 | 不可靠的 |
应用场合 | 传输大量的数据 | 少量数据 |
速度 | 慢 | 快 |
9.请描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。
10.什么是进程?
进程是操作系统结构的基础,是一个计算机中正在运行的程序实例。可以分配给处理器并由处理器执行的一个实体,由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。