JAVA实现面试题(自己面试后的整合一些题,附答案)

来自20届,还在找工作的小白。

答案部分有问题欢迎大家指正

JavaWeb

  1. http协议的有什么作用?

    HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。

    作用:在浏览器与服务器间传送文档。

    HTTP(Hyper Text Transfer Protocol) 超文本传输协议,是基于应用层(TCP/IP参考模型)的通信规范;是从Web服务器传输超文本到客户端的传输协议,无状态的传输协议;不仅能够保证正确、快速、高效的传输超文本文档,而且可以确定资源加载顺序等。

    在Web开发中,页面缓存控制、数据传递、文档语言参数设定等等,都离不开HTTP协议。HTTP协议是整个Web应用的基础,深入理解HTTP协议,是每个PHP开发工程师必须掌握的知识。

    扩展资料

    HTTP 协议的特征:

    1、HTTP 协议简单,请求一个网页时,只需发送请求方法(GET/POST/…)和资源路径(URI)。

    2、HTTP 是无状态协议,本身对事务处理没有记忆能力,但是有专门的技术为HTTP请求提供会话能力:Cookie/Session。

    3、HTTP 采用问答式交互模型,每次连接只处理一个请求。

    4、HTTP 是标准的C/S模型。

    5、HTTP 允许传递数据对象类型丰富,由报头Content-Type标识。

  2. 域对象的作用?Servlet的域对象分别是?

    四个域对象:

    pageContext page域

    request request域

    session session域

    application context域

     

    1)域对象作用:

    保存数据 和 获取数据 ,用于数据共享。

     

    2)域对象方法:

    setAttribute("name",Object) 保存数据

    getAttribute("name") 获取数据

    removeAttribute("name") 清除数据

     

    3)域对象作用范围:

    page域: 只能在当前jsp页面中使用(当前页面)

    request域: 只能在同一个请求中使用(转发)

    session域: 只能在同一个会话(session对象)中使用(私有的)

    context域: 只能在同一个web应用中使用。(全局的)

     

    1、如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。

     

    2、如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过 程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

     

    3、如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,

    4、如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。

     

    *指定域获取变量值: ${pageScope.name}

    *域范围: pageScoep / requestScope / sessionScope / applicationScope

    原贴

  3. 重定向和转发的区别?

    原贴

    什么情况下必须使用重定向?什么情况下必须使用转发? 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用。 怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。

    转发和重定向的区别 不要仅仅为了把变量传到下一个页面而使用session作用域,那会无故增大变量的作用域,转发也许可以帮助你解决这个问题。 重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。 转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。 转发:一次请求,一次响应。地址栏的url不会改变。在服务器端执行,所以必须在同一台服务器上。转发速度快。 重定向:两次请求。地址栏的url会随之改变为定向后的那个url。在客户端执行,所以可以在不同的服务器上。重定向速度慢。

  4. 什么是会话?什么是无状态会话?如何保存会话中产生的数据?

    ①、用户打开浏览器向服务器发送请求,服务器创建一个session,会话就开始了。 ②、在小程序开发中,先程序用户与服务器的关系属于无状态session,他们这种会话是无法维系用户和系统之间的关系的。他们访问一次获取后就断开了连接。每次都是一个新的会话

    ③、原文链接

    session(服务端):

    将会话数据存入session对象域中,在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。 cookie(客户端):

    服务器将数据传递给浏览器,将接受数据通过浏览器存在本地。

     

    Session和Cookie的主要区别在于: •Cookie是把用户的数据写给用户的浏览器。 •Session技术把用户的数据写到用户独占的session中(服务器端)。 有了session,就不用使用Cookie来跟踪会话了!但是session不能像Cookie那样长命,一旦用户关闭浏览器窗口,那么session就死掉了。

    • cookie基于客户端,不安全,并且大小和个数的限制。

    • session域对象,范围一次会话范围,存个人相关的数据。

    • setAttribute(String name, Object value)

    • Object getAttribute(String name)

    • String getId() 获取seesion的唯一的ID

    • void invalidate() 销毁的seesion

  1. cookie和session的区别?cookie和session的原理?

    参考贴

  2. 浏览器禁用cookie以后session还能实现session数据共享吗?

    能,

    经常被使用的一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为:

    http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;

    另一种是作为查询字符串附加在URL后面,表现形式为:

    http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764

    还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。

  3. HTTP请求头、请求行、请求正文有什么作用? HTTP响应头、相应行、响应正文有什么作用?

    参考贴

  4. 请求乱码产生的原因?get和post请求方式解决方案?

    参考贴1

    参考贴2

    javaweb中get请求使用的默认编码是IOS-8859-1,而我们使用的是UTF-8的编码方式,两者编码方式不同,势必会产生编码解析错误。

    get解决方法:

     //获取字后在转化编码 
         String name = request.getParameter("username");
         String password = request.getParameter("password");
         name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

    修改tomcat的配置文件server.xml,

    post的乱码原因,它采用的编码是由页面来决定的即ContentType("text/html; charset=GBK")。当通过点击页面的submit按钮来提交表单时,浏览器首先会根据ContentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器

    post解决方案:

    在代码前加上request.setCharacterEncoding("UTF-8")即可

  5. 字节流输出中文一定会乱码吗?字符流输出中文一定会乱码吗?字节流和字符流乱码怎么解决?

    ①、一定会乱码,因为字节流读取文本是是一个字节一个字节读取的,gbk编码中文是2个字节,utf编码是3个字节代表一个字符。 解决办法 :先读一个字节出来,判断是否是双字节字符(如汉字)的一半,如果是,就再读一个字节进来。然后,将两次读取的内容组装在一起,就是一个完整的汉字了。就算是有多字节的,未来也是可以照此思路解决的。原贴有代码

    ②、不一定会出现乱码,出现此问题的原因:文件的编码,系统的编码,java的默认编码有冲突。

    解决办法:在读取数据的时候对数据进行转码。原贴

    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));

框架

  1. 说说你对spirng框架的理解?

① spring框架是一个开源而轻量级的框架,是一个IOC和AOP容器

② spring的核心就是控制反转(IOC)和面向切面编程(AOP)

③ 控制反转(IOC):是面向对象编程中的一种设计原则,用来降低程序代码之间的耦合度,

      使整个程序体系结构更加灵活,与此同时将类的创建和依赖关系写在配置文件里,由配置文件注入,达到松耦合的效果。
 ​
      与此同时IOC也称为DI(依赖注入),依赖注入是一种开发模式;依赖注入提倡使用接口编程;
 ​
      依赖注入使得可以开发各个组件,然后根据组件之间的依赖关系注入组装。

④ spring的注入方式:A:使用构造器注入:主要采用构造函数和构造器来进行注入

                                     B:setter方法注入:是容器通过调用无参构造器或无参static 工厂方法实列化bean之后,调用该bean的setter方法,    即实现了基于setter的依赖注入

⑤ 面向切面编程(AOP)将安全,事务等于程序逻辑相对独立的功能抽取出来,利用Spring的配置文件将这些功能插进去,

实现了按照切面编程,提高了复用性;最主要的作用:可以在不修改源代码的情况下,给目标方法动态添加功能

⑥ spring优点:a:低侵入式设计,独立于各种应用服务器

               b:依赖注入特点性将组件关系透明化,降低耦合度
 ​
               c:与第三方框架具有良好的整合效果
  1. spring框架中注入对象方式有几种?分别是?

Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。

  1. 如果一个接口有2个实现类,怎么注入?

参考贴

  1. 说说什么是AOP?有什么作用?

    原贴

    AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。

  2. SpingMvc的执行流程

    原贴

    • 一个请求匹配前端控制器 DispatcherServlet 的请求映射路径(在 web.xml中指定), WEB 容器将该请求转交给 DispatcherServlet 处理

    • DispatcherServlet 接收到请求后, 将根据 请求信息 交给 处理器映射器 (HandlerMapping)

    • HandlerMapping 根据用户的url请求 查找匹配该url的 Handler,并返回一个执行链

    • DispatcherServlet 再请求 处理器适配器(HandlerAdapter) 调用相应的 Handler 进行处理并返回 ModelAndView 给 DispatcherServlet

    • DispatcherServlet 将 ModelAndView 请求 ViewReslover(视图解析器)解析,返回具体 View

    • DispatcherServlet 对 View 进行渲染视图(即将模型数据填充至视图中)

    • DispatcherServlet 将页面响应给用户

  3. MyBatis中#{}和${}的区别

    试用#{}对应PreparedStatement,而${}对应Statement,#{}对sql进行预编译,排除特殊字符,这样更安全更,迅速基本都用#{},而${}则不会预编译和sql语句处理,容易出现问题。

    参考贴

  4. 声明式事务和编程式事务的区别?

    参考贴

  5. MyBatis与JDBC的区别?

    参考贴

  6. @Resources 和 @Autowired的区别?

    参考贴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值