面试题整理

一、接口和抽象类的区别是什么?

  1. 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
  2. 抽象类要被子类继承,接口要被类实现。
  3. 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。
  4. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  5. 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
  6. 抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果。
  7. 抽象类里可以没有抽象方法。
  8. 如果一个类里有抽象方法,那么这个类只能是抽象类
  9. 、抽象方法要被实现,所以不能是静态的,也不能是私有的。
  10. 接口可继承接口,并可多继承接口,但类只能单根继承。

二、什么是值传递和引用传递?

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

三、线程有几种创建方式,你喜欢哪种,为什么?

  • 继承Thread类(真正意义上的线程类),是Runnable接口的实现。
  • 实现Runnable接口,并重写里面的run方法。
  • 使用Executor框架创建线程池。Executor框架是juc里提供的线程池的实现。

调用线程的start():启动此线程;调用相应的run()方法

继承于Thread类的线程类,可以直接调用start方法启动线程(使用static也可以实现资源共享).一个线程(对象)只能够执行一次start(),而且不能通过Thread实现类对象的run()去启动一个线程。

实现Runnable接口的类需要再次用Thread类包装后才能调用start方法。(三个Thread对象包装一个类对象,就实现了资源共享)。

(补充)线程的使用的话,注意锁和同步的使用。(多线程访问共享资源容易出现线程安全问题)

一般情况下,常见的是第二种。

Runnable接口有如下好处:

1、避免点继承的局限,一个类可以继承多个接口。

2、适合于资源的共享

四、什么是数据库的连接池?

连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他的线程服务。

连接池的主要优点有以下三个方面。

第一、减少连接创建时间。连接池中的连接是已准备好的、可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。

第二、简化的编程模式。当使用连接池时,每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用JDBC编程技术。

第三、控制资源的使用。如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统连接需求影响很大,很容易产生资源浪费和高负载异常。连接池能够使性能最大化,将资源利用控制在一定的水平之下。连接池能控制池中的连接数量,增强了系统在大量用户应用时的稳定性。

五、Servlet是什么?

servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要。servlet由servlet容器管理,servlet容器也叫 servlet引擎,是servlet的运行环境,给发送的请求和响应之上提供网络服务。比如tomcat就是我们常用的一个servlet容器,其接受 客户端并做出响应的步骤如下:

1、客户端访问WEB服务器,发送HTTP求

2、WEB服务器接收到请求后,传递给servlet容器

3、servlet容器加载servlet,产生servlet实例,并向其传递表示请求和响应的对响

4、servlet得到客户端的请求信息,并进行相应的处理

5、servlet实例把处理结果发送回客户端,容器负责确保响应正确送出,同时将控制返回给WEB服务器

六、简述一下servlet的生命周期;

  • 创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。
  • 调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次;
  • 响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。
  • 在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。
  • -

七、doPost()和doGet()方法的区别;

get和post是http协议的两种方法。

这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。

在servlet开发中,以doGet()和doPost()分别处理get和post方法。

首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。都会执行这个方法。

1.doGet()
GET调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来一些问题。

2.doPost()
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。

八、HTTP响应的结构是什么?

HTTP响应由三个部分组成:

  • 状态码(Status Code):描述了响应的状态。可以用来检查是否成功的完成了请求。请求失败的情况下,状态码可用来找出失败的原因。如果Servlet没有返回状态码,默认会返回成功的状态码HttpServletResponse.SC_OK。

  • HTTP头部(HTTP Header):它们包含了更多关于响应的信息。比如:头部可以指定认为响应过期的过期日期,或者是指定用来给用户安全的传输实体内容的编码格式。

  • 主体(Body):它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。

  • -

九、Cookie是什么?说说cookie和session的区别;

Cookies是指服务器暂存放在你的电脑里的txt格式的文本文件资料,主要用于网络服务器辨别电脑使用。通俗的说,Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息,以便于下次登陆的时候,会提示您曾经输入的用户名,甚至密码等。

cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。

十、Jsp的隐含对象是什么?有哪几个?

  1. out :来源于java.io.Writer类,它用于发送输出流到客户端。

  2. request: 来源于javax.servlet.http.HttpServletRequest接口。它被关联到每一个HTTP请求。

  3. response :来源于javax.servlet.http.HttpServletResponse。response对象用于把取得的数据返回到客户端。

  4. pageContext: 提供访问JSP页面的命名空间。它也提供用来访问其他的JSP隐含对象。

  5. session :来源于javax.servlet.http.HttpSession。它用于存储客户端请求的信息,因此它是有状态交互式的。

  6. application :来源于javax.servlet.ServletContext。

  7. config: 来源于ServletConfig,它包含了当前JSP/Servlet所在的WEB应用的配置信息。

  8. page :来源于当前被访问JSP页面的实例化。它实际使用的是JSP转换成的Servlet。

  9. exception: 用于捕获JSP抛出的异常。它只有在JSP页面属性isErrorPage=true时才可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值