无论你是初中级 中小公司现实问到的面试基础题 面试官问:

1. 介绍一下常见的数据结构:
 答:两大类 线性结构个非线性结构
 线性结构: 数组 链表 队列 栈
 非线性结构: 树 堆 图 散列表2. String 是可变还是不可变的 为什么
 答:不可变的
 如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变3. left join 和rigth join 使用两张表 a表20 条 B表10条 A表 left join B表 或 B表 right join A表 怎么显示的
 答:
 1、left join 是左联接 返回包括左面表中的所有记录和右面表中联结字段相等的记录 left join是以左面表的记录为基础的,右面表数据不足的地方用NULL填充
 2、right join 是右联接 返回包括右面表中的所有记录和左面表中联结字段相等的记录,其结果刚好相反,以右面表为基础的,左面表数据不足的地方用NULL填充4. ArrayList和LinkedList 区别:
 答:ArrayList底层是数组 查询效率高 增删改慢
 LinkedList底层是链表 查询效率慢 增删改快5. HashMap和HashTable区别
 答: HashMap 是线程不安全的 key和value 可以为null
 HashTable是线程安全的 key和value 不可以为null6. final、finally、 finalize的区别?
 final 是一个修饰符 常量 ,不可以被继承 不可以重写
 finally 是异常处理关键字 无论有没有异常都会运行
 finalize 是Object 一个方法 对象在GC回收前调用7. String和StringBuind StringBuffer 区别
 String 为字符串常量 操作少量的数据用
 StringBuilder 与StringBuffer都继承自AbstractStringBuilde
 StringBuilder 是线程不安全的 单线程操作字符串缓冲区 下操作大量数据
 StringBuffer 是线程安全的 多线程操作字符串缓冲区 下操作大量数据8. 讲一下常用的集合有哪些 有哪些常用方法
 Map Collection
 Map 下有 HashMap HashTable TerrMap
 Collection 下有 List set
 List 下有ArrayList LinkedList vectro
 set 下有 HashSet和TerrSet
 Map:常用方法 put() get() remove() contains(key) keyset() values(); size();
 List set 常用方法 add() remove() size() contains() clear()9. 创建线程的2中方式?
 继承 Thread 类
 实现 Runable10. 启动线程的方法?
 线程对象点 start()11. 线程的5种状态?
 初始化 -可运行状态(就绪)- 运行状态 阻塞状态 销毁12. 如何保证线程的安全?线程同步的关键字?
 synchronized 来修饰13. 解释一下java的GC?
 GC是java的自动回收机制,回收哪些没有任何引用指向它的对象,14. 写几个常见的RuntimeException?
 NullpointerException
 ClassCastExcetpion
 ArrayIndexOutOfBoundsException
 ArithmeticException
 NoSuchMethodException15. java中反射机制获取类的映射类型有几种方式?分别是?
 类名.class 对象名.getClass() class.forName()16. String s=new String(〝xyz〞);创建了几个String Object?分别是什么?
 2个
 一个是String 类型的引用 就是String s;
 另一个是新的String类型的字符串,就是new String(“xyz”)17. List与Set的区别?
 Lst 有序的 元素可以重复
 Set 无序的 元素不可以重复18. #{}和${}的区别是什么?
 #{}表示预编译处理 ${} 表示字符串替代19. servlet的生命周期?
 实例化-初始化-服务-销毁