基础问题积累

一.构造方法能被继承吗?   为什么不能被继承

二.详解JDBC与Hibernate区别

不同点:

◆使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言

◆操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。

◆数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。

三.throw 和 throws两个关键字有什么不同

throw 是用来抛出任意异常的,你可以抛出任意 Throwable,包括自定义的异常类对象;throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。如果方法抛出了异常,那么调用这个方法的时候就需要处理这个异常。

四.Error和Exception的区别

 

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

Servlet生命周期分为三个阶段:

1,初始化阶段  调用init()方法

2,响应客户请求阶段  调用service()方法

3,终止阶段  调用destroy()方法

Servlet与JSP的比较:

有许多相似之处,都可以生成动态网页。

JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。

Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观

 

.HQLQBC的区别

QBC 全称:Query By Criteria

HQL 全称:hibernate Query Language

HQL优点:与sql相近,可读性好,功能强大,效率高。

HQL缺点:字符串形式,只有在运行时才被解析,扩展性差。

QBC优点:提供面向对象的接口,编译时就可被解析,便于排错调试,扩展性好,允许用户扩展Criteria接口.

QBC缺点:可读性差,功能没有HQL强大,不支持报表查询和子查询。

 

七. Thread的run()与start()的区别

多线程原理:相当于玩游戏机,只有一个游戏机(cpu),可是有很多人要玩,于是,start是排队!等CPU选中你就是轮到你,你就run(),当CPU的运行的时间片执行完,这个线程就继续排队,等待下一次的run()。

 

调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体

 

1.start()方法来启动线程,真正实现了多线程运行。-----就绪状态

 

2.run()方法当作普通方法的方式调用。               -----运行状态

 

记住:多线程就是分时利用CPU,宏观上让所有线程一起执行 ,也叫并发

 

八.struts2的执行流程

   1) 客户端发起一个请求(*.action)

   2) 主控器FilterDispatcher拦截请求

   3) 主控器通过ActionMapper判断请求是否交给action处理.如果是,那么判断请求的action是否存在,如果不存在,报404错误.如果不是交给action处理,那么将请求转发给对应的web组件.

   4) 主控器创建ActionProxy对象,这个对象全权负责action的执行.

   5) ActionProxy通过ConfigurationManager对象获得当前访问的action的相关配置信息.

   6) ActionProxy根据获得的action的配置信息,创建ActionInvocation对象.

   7) ActionInvocation对象负责执行action前面的拦截器以及action对象,并且处理action执行后的结果

   8) action前面的拦截器被执行,最后执行action.(Struts2,多实例单线程)

   9) ActionInvocation得到action执行后的逻辑视图,根据逻辑视图找到物理视图,然后转发请求.

补充说明:

 逻辑视图和物理视图的解释

View是视图的意思,但是Struts2支持的视图类型有甚多种,其中物理视图有很多,比如我们jsp、word.doc word.xls等一些文件可以显示内容的都可以算作是物理视图。那什么是逻辑视图呢。逻辑视图其实就是我们在struts.xml文件Result中配置的name中的字符串元素。

<result name="error">/register.jsp</result>

那么name中的error其实就是逻辑视图,它属于一个理论上要实现的视图可是没有实际的实现它,才使用到物理视图显示他的结果我们才能看得到。

传智播客-struts2的执行流程

尚硅谷-struts2的执行流程

.session常用方法:

第一个方面(从hibernate角度)

       get方法 在get时发出sql语句 此时对象为持久态 在缓存中

       load方法 在load时候产生代理对象 但是当访问属性时才发出sql语句 (延迟加载) 此时对象为持久态 在缓存中

       evict方法 清除缓存中的内存对象 被evict的对象 下次请求相同oid的对象时 会重新发出sql语句

       load方式加载的对象 被evict后 已经与当前对象失联 不能再操作其属性 否则报错could not initialize proxy - no Session

       get方式加载的对象 因为在get时候就已经发出sql语句 所以可以操作其普通属性

       也就是说evict的对象已经脱离了session处于游离状态

       clear方法 清除session缓存中所有的对象 也就是说所有的对象都是游离状态

       merge方法 产生一个相同oid的对象 持久化对象 因为有缓存就是自己 瞬时态对象就是复制一个就不是自己因为没有缓存

        如果是离线状态不能merge

       flush方法 将session缓存中的对象 发出sql语句到数据库

       save方法  插入一条记录到数据库 有返回值 就是id 因为调用方法就返回id 所以马上会生成sql语句

       persist方法 不会立即插入 因为不用生成id返回 等flush后才插入

       refresh方法 重新发出一个sql语句去刷新对象

 

第二个方面(从JavaWeb角度)

void setAttribute(String attribute, Object value)

设置Session属性。value参数可以为任何Java Object。

通常为Java Bean。value信息不宜过大

String getAttribute(Stringattribute)        

返回Session属性

Enumeration getAttributeNames()        

返回Session中存在的属性名

void removeAttribute(String attribute)

移除Session属性

String getId()        

返回Session的ID。该ID由服务器自动创建,不会重复

long getCreationTime()        

返回Session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.getCreationTime())

long getLastAccessedTime()        

返回Session的最后活跃时间。返回类型为long

int getMaxInactiveInterval()        

返回Session的超时时间。单位为秒。

超过该时间没有访问,服务器认为该Session失效

void setMaxInactiveInterval(int second)        

设置Session的超时时间。单位为秒

 

十.hibernate的执行流程(7步)

1.读取hibernate主配置文件(configration)中的信息

Configuration cfg=new Configuration().configure();

2.创建sessionfactory工厂

SessionFactory sessionFactory=cfg.buildSessionFactory();

3.获取session

Session session=sessionFactory.getCurrentSession();

4.通过session开启事务

Transaction transaction=session.beginTransaction();

5.执行持久化操作

Session.save(user);

6.提交事务

transaction.commit();

7.关闭资源

session.close();

sessionFactory.close();

十一.COOKIE和SESSION的区别

cookie保存在客户端,session保存在服务器端,

cookie目的可以跟踪会话,也可以保存用户喜好或者保存用户名密码

session用来跟踪会话

后面衍生出session技术,session技术是要使用到cookie的,之所以出现session技术,主要是为了安全。

1,session 在服务器端,cookie 在客户端(浏览器)

2,session 默认被存在在服务器的一个文件里(不是内存)

3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

4,session 可以放在 文件、数据库、或内存中都可以。

5,用户验证这种场合一般会用 session 因此,维持一个会话的核心就是客户端的唯一标识,即 session id

 

当一个浏览器请求来到之后,Servlet处理程序(Servlet容器内部实现)将会主动检查请求信息Cookie当中是否有JSESSIONID,若有,找到对应JSESSION的HttpSession对象,如果没有,创建一个,具体的机制在Servlet容器的实现当中。

 

客户端:持久化的cookie cookie中存了JSessionID进行唯一标识

服务器端:session  session根据JSessionID创建一个session cookie进行会话跟踪

注意:session cookie存储在浏览器内存中,而不是写在磁盘中的.因此存活时间是一次会话

我们可以通过session cookie和persistent cookie进行跨窗口的会话跟踪(seesion tracking)

 

 

 

 

 

 

 

 

 

 

    • Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。如Java.lang.StackOverFlowError和Java.lang.OutOfMemoryError。对于这类错误,Java编译器不去检查他们。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。
    • Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
    • Servlet 通过调用 init () 方法进行初始化。
    • Servlet 调用 service() 方法来处理客户端的请求。
    • Servlet 通过调用 destroy() 方法终止(结束)。
    • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值