• [转]Java常用概念解答


    1. 事务是什么?

    事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、

    一致性、隔离性和持久性)属性,只有这样才能成为一个事务:

    原子性

    事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

    一致性

    事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改

    ,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正

    确的。

    隔离性

    由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么

    是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

    这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事

    务执行的状态相同。

    持久性

    事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

    2. 在数据库中条件查询速度很慢的时候,如何优化?

    1.建索引
    2.减少表之间的关联
    3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面
    4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据

    3.  session.load()和session.get()区别

    Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:
    1) 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
    2) Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
    3 ) load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。

    4.  说一下Servlet的生命周期

    A:定位:用户根据地址请求指定的servlet,web.xml根据用户输入的地址,定位到具体的servlet。
    B:加载:将找到的servlet类加载到web容器中(servlet容器)。
    C:实例化:调用默认无参构造函数,实现servlet的实例化。
    D:初始化:调用Init方法,实现成员变量的初始化。
    E:服务处理:servlet的service方法接收用户请求,根据当前用户请求的方式是get还是post,service自动将用户请求传递到doGet和doPost方法中进行处理。处理完成后,产生响应结果。
    F:销毁:调用destroy方法,实现servlet的释放工作。
    服务器关闭时进行释放。或者是servlet产生改变重新加载前进行释放原来的servlet。

    注意:在servlet容器中,一个servlet只会产生一个一个实例对象进行工作。

    5.  谈谈final, finally, finalize的区别。

    final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父

    类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,

    可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能

    读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

    finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的

    catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

    finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前

    做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在

    Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其

    他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

    6.  为什么使用Hibernate,Hibernate执行流程。

    1. 封装了jdbc,简化了很多重复性代码。
    2. 简化了DAO层编码工作,使开发更对象化了。
    3. 移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
    4. 支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

    Hibernate执行流程:

    1. 通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。
    2. 由hibernate.cfg.xml中的读取解析映射信息。
    3. 通过config.buildSessionFactory();//得到sessionFactory。
    4. sessionFactory.openSession();//得到session。
    5. session.beginTransaction();//开启事务。
    6. persistent operate;
    7. session.getTransaction().commit();//提交事务
    8. 关闭session;
    9. 关闭sessionFactory;

    二 手写编程题

    1. 请用C++、Java、C#或VB.NET 任意一种面向对象的语言实现一个计算器控制台程序,要求输入输入两个数 和 运算符,得到结果。

    2. 写一段代码验证StringBuffer ,String 字符串连接性能差别

    String tempstr = “abcdefghijklmnopqrstuvwxyz”;

    int times=5000;

    long here1= System.currentTimeMillis();

    String str = “”;

    for (int i = 0; i < times;i++) {

    str =str+ tempstr;

    }

    long here2= System.currentTimeMillis();

    long time = (here2 - here1);

    System.out.println(“以上代码执行需要”+time+”毫秒”);

    long here1= System.currentTimeMillis();

    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < times; i++) {

    sb.append(tempstr);

    }

    long here2= System.currentTimeMillis();

    long time = (here2 - here1);

    System.out.println(“以上代码执行需要”+time+”毫秒”);

    1.servlet的生命周期? 
    答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。   这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。    web容器加载servlet,生命周期开始。
      通过调用servlet的init()方法进行servlet的初始化。
      通过调用service()方法实现,根据请求的不同调用不同的do***()方法。   结束服务,web容器调用servlet的destroy()方法。 2、Servlet执行时一般实现哪几个方法? 答:public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo()
    public void service(ServletRequest request,ServletResponse response) public void destroy()
    3.说出Servlet的生命周期,并说出Servlet和CGI的区别。
    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
    2.简述jsp和servlet的联系。 Java Servlet是JSP技术的基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。现在许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器,也可以通过附件的应用服务器和模块来支持Servlet,这得益于Java的跨平台特性。另外,由于Servlet内部以线程方式提供提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此Servlet的效率非常高。
    4、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?  JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以
    组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 5、MVC的各个部分都有那些技术来实现?如何实现? 
    答:MVC是Model-View- Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重 用。 
    6. jsp有哪些内置对象?作用分别是什么? 
    答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): (1 request)HttpServletRequest类的Request对象.
        作用:代表请求对象,此请求会包含来自GET/POST请求的参数。主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 
    (2 response)HttpServletResponse类的Respone对象.
        作用:代表响应对象,主要用于向客户端发送数据。网页传回用户端的回应,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等) (3 out)   JspWriter类的out对象.     作用:主要用于向客户端输出数据(用来传送回应的输出 );  Out的基类是JspWriter,并提供了几个方法使你能用于向浏览器回送输出结果。 (4 session)HttpSession类的session对象.
        作用:主要用于来分别保存每个用户信息,与请求关联的会话;会话状态维持是Web应用开发者必须面对的问题。
    (5 applicaton)   ServletContex类的application对象
        作用:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.这有助于查找有关servlet引擎和servlet环境的信息.
    (6 pageContext)PageContext类的PageContext对象
        作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。 (7 config)   ServletConfig类的Config对象.
       作用:代码片段配置对象,表示Servlet的配置。该对象用于存取servlet实例的初始化参数。

    (8 page)Object类的Page(相当于this)对象.
        作用:处理JSP网页(JSP网页本身),是Object类的一个实例,指的是JSP实现类的实例(表示从该页面产生的一个servlet实例),即它也是JSP本身,只有在JSP页面范围之内才是合法的。 (9 Exception)作用:处理JSP文件执行时发生的错误和异常,针对错误网页,未捕捉的例外  7.JSP的内置对象及方法。
       request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 
       response response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)    
     out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。     pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间,
    servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 
       session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息     application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 
       config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。     page page表示从该页面产生的一个servlet实例 8、jsp有哪些动作?作用分别是什么?  答:JSP共有以下6种基本动作 
      jsp:include:在页面被请求的时候引入一个文件。    jsp:useBean:寻找或者实例化一个JavaBean。    jsp:setProperty:设置JavaBean的属性。 
      jsp:getProperty:输出某个JavaBean的属性。    jsp:forward:把请求转到一个新的页面。 
      jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记  9、Request对象的主要方法:
    setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值
    getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

  • 相关阅读:
    influxdb + cadvisor + grafana 监控 docker容器应用性能
    zabbix_get命令
    【工作笔记】python+influxdb+grafana监控云行情
    沙雕与大婶 | 把5W2H融入你的架构设计吧
    GO系列 | 5分钟入门GO【译】
    Docker深入浅出系列 | 5分钟搭建你的私有镜像仓库
    Docker深入浅出系列 | Swarm多节点实战
    Docker如何给Springboot项目动态传参
    沙雕与大婶 | Mock掉你的外部依赖吧
    ed后缀读音规则
  • 原文地址:https://www.cnblogs.com/ZhuRenWang/p/4743668.html
Copyright © 2020-2023  润新知