zoukankan      html  css  js  c++  java
  • Java面试总结

    • sleep()和wait()的区别? 
    1. sleep是Thread类的方法,wait是Object类中的方法
    2. sleep()不释放同步锁,wait()释放同步锁
    3. 调用wait()方法后,需要别的线程执行notify/notifyAll才能够重新获得CPU执行时间
    • 实现线程的两种方式? 

    1. 继承java.lang.Thread,并重写它的run()方法
    2. 实现java.lang.Runnable接口,实现它的run()方法
    • Java中HashMap和HashTable的区别
    1. HashMap允许空的键值对, 而HashTable不允许
    2. HashMap非同步,HashTable同步,HashMap效率>HashTable
    • String 、StringBuilder 和StringBuffer的区别
    1. string对象是不可变的,其他两个可变
    2. String中的对象是不可变的,是线程安全的;StringBuilder没有对方法加同步锁,非线程安全;StringBuffer对方法加了同步锁,线程安全
    • List、Map、Set的区别?
    1. Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:
      • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快 
      • TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序
    2. List的特征是其元素以线性方式存储,集合中可以存放重复对象
      • ArrayList() : 代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。 
      • LinkedList(): 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。
    3. Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象
    • 说出ArrayList、Vector和LinkList的存储性能和特性?
    1. ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
    2. Vector中的方法由于添加了synchronized修饰,因此Vector是线程安全的容器,但性能上较ArrayList差
    3. LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快
    • 简述java的垃圾回收机制?

        ??????

    • 简述jdbc中PreparedStatement和Statement的主要区别?
    1. Statement为一条Sql语句生成执行计划,如果有多条sql语句,就会执行多次执行计划
    2. PreparedStatement是预编译的,用于使用绑定变量重用执行计划,通过set不同数据只需要生成一次执行计划,可以重用
    • 简述Struts的工作原理
    1. Struts2是实现MVC(Model-View-Controller)设计模式的Web应用框架
    2. struts2的整个生命周期开始于来自客户端的request请求,然后通过servlet容器执行相应的filter
    3. FilterDispatcher被调用,它通过查找ActionMapper决定哪一个Action将会被执行
    4. 若ActionMapper中找到可以执行的Action,FilterDispatcher将控制权委托给ActionProxy
    5. ActionProxy读取struts.xml配置文件,ActionProxy创建一个ActionInvocation实例,并将控制权交给ActionInvocation实例
    6. ActionInvocation(其采用的是命令行设计模式)实例逐个调用Interceptors,然后调用相应的Action
    7. 一旦Action有返回,ActionInvocation在struts.xml中寻找相应的action返回结果
    8. 拦截器再以相反的顺序执行和响应返回到过滤器。然后将result返回到servlet容器并发送到窗户端。
    • 简述servlet的生命周期?JSP的生命周期?
    1. Servlet是运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过Java.servlet.Servlet接口中的init(),service()和destory()方法表示。Servlet的生命周期有四个阶段:加载并实例化,初始化,请求处理,销毁
    2. JSP页面必须转换成Servlet,才能对请求进行服务,因此JSP的底层完全是Servlet。这样看来JSP 的生命周期就包括六个阶段:转换,编译,加载并实例化,初始化,请求处理(_jspService()调用),销毁
    • spring工作原理
    1. spring mvc所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作
    2. DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller
    3. Controller进行业务逻辑处理后,会返回一个ModelAndView
    4. Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
    5. 视图对象负责渲染返回给客户端
    • SSH整合
    1. SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)
    2. Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用JSP,HTTP,Form,Tag,Resourse;Controller:ActionServlet,struts-config.xml,Action)
    3. Spring:Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层
    4. Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作
  • 相关阅读:
    selenium入门:基于界面的自动化测试
    selenium入门:环境搭建
    Python入门:迭代器
    Python入门:生成器并行(协程)
    Python入门:生成器应用-斐波拉契数列
    Python入门:生成器定义
    Python入门:装饰器案例3
    Python入门:装饰器案例2
    Python入门:装饰器案例1
    Spring MVC 上传文件---依赖引用
  • 原文地址:https://www.cnblogs.com/happyrocky/p/HappyRocky_Java_1.html
Copyright © 2011-2022 走看看