由于在上家公司离职时没能及时找到下家公司工作,本人技术层面更是不足,导致迟迟未找到合适的工作,所以本人写此博客以记录面试题目,需要的童鞋可以作为参考!!!
java基础部分:
1.hashmap与hashtable区别:两句话总结:Hashmap=》不同步,空键值,效率高,线程不安全;Hashtable=》同步,非空键值,效率略低,线程安全。
2.Arraylist和LinkList区别:1.ArrayList是实现了基于动态数组的数据结构,LinkList基于链表的数据结构;
2.对于随机访问get和set,ArrayList优先于LinkList,因为LinkList需要移动指针;
3.对于新增和删除操作add和remove,linkedList比较占优势,因为ArrayList要移动数据。
3.java类加载顺序:1.虚拟机在首次加载java类时,会对静态初始化块,静态成员变量进行初始化(执行顺序按排列的先后顺序),父类优先于子类执行,
2.实例化时,会对非静态变量,非静态初始化块进行初始化,之后是构造函数初始化,父类优先于子类执行,
3.静态方法和非静态方法都是被动调用,即系统不会自动执行,主要区别在于静态方法可以直接用类名调用,非静态方法需要实例化才能调用。
4.线程启动方法是start(),而不是run(),此考点常用于选择题,切记。
5.字节流(char)和字符流(char)区别:stream结尾是字节流,reader和writer结尾是字符流,一个按字节读,一个按字符读。(具体须看个人理解)
6.什么是面向对象?
面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体一一对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法处理。类通过一个简单的外部接口与外部发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。(看个人理解,最好举例说明)。
7.string和stringbuffer区别:String是不可变类,任何对String的改变都会引发新的String对象的生成;
StringBuffer是可变类,任何对它所指代的字符串的改变都不会产生新的对象。
8.对String类的理解?1.对象的初始化:String s = "abc";创建了2个对象,一个是“abc”对象,储存在常量空间中,一个是使用new关键字为对象s申请的空间。
2.字符串常见操作:charAt()索引找字符,compareto()比较字符,concat()连接字符,equals()判断2个对象内容是否相等,getBytes()字符串转成数组,便于数据存储和传输(常用),indexOf()查看字符返回索引,length()返回长度,replace()替换字符,split()拆分字符串,获得数组,substring()截取字符串,trim()去空格,valueOf()类型转换。
9.error和exception区别:error表示恢复不是不可能但很困难的严重问题,比如内存溢出,exception表示一种设计或实现问题。
10.Math.round(11.5),Math.round(-11.5),相当于+o.5所以是12,-11
11.静态数组不能定义在mian入口方法中(切记)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
12.编写单例模式:
懒汉式:public class Signleton{
private Singleton(){};
private static Signleton single = null;
public static Singleton getInstance(){
if(single==null){
single=new Singleton();
}
return single;
}
}
饿汉式:public class Singleton1{
private Singleton1(){}
private static dinal Singleton1 single = new Singleton1();
public static Singleton1 getInstance(){
return single;
}
}
13.冒泡排序:
public static void mp(int[]numbers){
int temp;
int size = numbers.length;
for(int i=0;i<size-1;i++){
for(int j=1;i<size;j++){
if(numbers[i]<numbers[j]){
temp=numkbers[i];
numbers[i]=numbers[j];
numbers[j]=temp;
}
}
}
}
14.java递归:斐波那契数列:
public class Fibonacci{
public static void main(String[]args){
for(int i = 0;i<20;i++){
System.out.println(Foo(i));
}
}
public static int Foo(int i){
if(i==0||i==1){
return 1;
}else{
return Foo(i-1)+Foo(i-2);
}
}
}
}
15.如何利用反射获取私有属性?
A a = new A();
Field field= a.getClass().getDeclaredFieLd("X");
field.setAccessible(true);
field.set(a,1);
field.get(a)
16.java泛型如何理解?
泛型通过继承关系可以处理父子间关系。
17.堆栈与队列的区别?(自己搜索)
18.软件生命周期?
1.问题定义与规划,
2.需求分析
3.软件设计
4.程序编码
5.软件测试
6.运行维护
19.工作流理解?
至于javaee部分需要稍作整理,敬请期待。。。。