1.Java跨平台原理
答:Java实现跨平台无非就是JVM起的作用,由于各种操作系统(windows、Linux等)支持的指令集,是不完全一致的,就会让我们的程序在不同的操作系统上执行不同的程序代码,java开发了适用于不同操作系统及位数的java虚拟机来屏蔽各系统的差异,提供了统一的接口,对于java开发者而言,只需在不同的操作系统上安装对应的不同Java虚拟机即可,Java程序遵循Java规范,程序接可以在所有操作系统上运行了。
总结说:Java通过不同系统、不同版本、不同位数的Java虚拟机(jvm)屏蔽不同的系统指令集,对外提供统一的接口(Java API),对于我们普通开发者而言,只需按照接口开发即可,若系统需要部署到不同的环境时,只需在系统上安装对应版本的虚拟机即可。
2.搭建一个Java开发环境的步骤
答:首先需要了解Java开发环境需要些什么?
- 适用于我们开发环境的jdk
- 对应开发环境eclipse
- 若开发web应用,还需web服务器(tomcat)
- 下载相应组件
- 安装
Jdk,按照正常流程安装即可,配置JAVA_HOME,因为后面的eclipse和tomcat依赖于这个变量
Eclipse正常解压就可以,设置workspace的默认编码
Tomcat正常解压就可以,把tomcat集成到eclipse,安装插件就可以
........
Svn/git
3.Java基本数据类型
答:有8种,分别是byte、short、int、long、float、double、char、boolean它们分别占1字节 8位、2字节 16位、4字节 32位、8字节 64位、4字节 32位、8字节 64位、2字节 16位、1位。
4.面向对象的特征有哪些(回答比较抽象的问题时,要举例说明)
答:四个基本特征:封装、继承、多态、抽象
面向对象的封装性:即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。
比如张三这个人,有姓名、性别、年龄等属性,要有自己提供的获取或改变的方法来操作,private name setName getName。
面向对象的继承性:在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并且可以加入若干个新的内容,或改变原来的方法更适合特殊的需要。
面向对象的多态性:靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定。
面向对象的抽象性:找出一些事物的相似和共性之处,然后将这些事物归为一个类。
5.有了基本数据类型,为什么还要包装数据类型?
有个装箱和拆箱的概念
装箱:把基本数据类型转换成对应的包装数据类型
Integer i= 1;自动装箱,实际上在编译时会调用Integer.valueOf()方法
拆箱:把包装类型转换为基本数据类型:基本数据类型 名称 = 对应的包装类型
Integer i = 1;
Int j = i; //自动拆箱或下面写法
int j = i.intValue() 手动拆箱
自动拆箱,实际上在编译时会调用intValue()方法
答:java是一个面向对象的语言,而基本数据类型不具备面向对象的特性。
6.int和Integer的区别
答:Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。
7.“==”与“equals”的区别(先说清楚一个再说另一个)
答:==用来判断两个变量的值是否相等,变量可以分为基本数据类型和引用类型,如果是基本数据类型的变量直接比较值,而引用类型需要比较对应引用的内存的首地址。
Equals用来比较两个对象长得是否一样,判断两个对象的某些特征是否一样,实际上就是调用对象的equals方法进行比较,如果不重写equals方法,则继承的是Object中的,否则要重写。
8.String和StringBuilder的区别?StringBuffer和StringBuilder的区别(回答该问题第一句话即可)
答:String是内容不可变的字符串,String底层使用了一个不可变的字符数组 String str = new String(“dddd”);
而StringBuilder和StringBuffer是内容可变的字符串,StringBuilder和StringBuffer底层使用的可变字符数组。
引入一个问题
最经典的是拼接字符串:
- String进行拼接:String c = “a” + “b”;
- StringBuilder或者StringBuffer
StringBuilder sb = new StringBuilder(); sb.append(“a”).append(“b”);
拼接字符串不能使用String进行拼接,要使用StringBuilder或者StringBuffer
StringBuilder是线程不安全的,而效率较高;StringBuffer是线程安全的,而效率较低
9.Java中的集合
答:java中的集合分为value,key-value(Collection,Map)
存储值又分为List,Set
List是有序的,可以重复的
Set是无序的,不可以重复,根据equals和hashcode来判断,也就是如果一个对象要存储在set中,必须重写equals和hashcode方法。
存储key-value为map
10.ArrayList和LinkedList区别
答:list常用的是ArrayList和LinkedList,它们区别是
ArrayList底层使用的是数组,LinkedList底层使用的是链表。
数组的优点是:查询较快,而插入、删除、修改较慢(数组在内存中是一块连续的内存,如果插入或删除时需要移动内存)
链表不要求内存是连续的,在当前元素中存放上一个或下一个元素的地址,查询时需要从头部开始,一个一个找,查询效率低,插入时不需要移动内存,只需改变引用指向即可,插入或删除效率高。
ArrayList使用在查询比较多,但插入和删除比较少的情况,该情况用的较多
而LinkedList使用在查询较少,而插入、删除较多的情况
11.HashMap和HashTable区别?
答:相同点(1)HashMap和HashTable都可以用来存储key-value
区别:(1)HashMap可以把null作为key或value的,而HashTable不可以
(2)HashMap是线程不安全的,效率高,而HahTable是线程安全的,效率低。
12.实现一个拷贝文件的工具类是使用字节流还是字符流
答:拷贝文件不确定时只包含字符流,有可能有字节流(图片、声音、图像等),为考虑通用性,应使用字节流。