• 2018年最新JAVA面试题总结之JavaWeb(2)


    转自于:https://zhuanlan.zhihu.com/p/39522575

    1、tomcat的优化方式?
    回答:
    Tomcat的优化我准备从三方面来说:

    第一部分: 内存优化
    Tomcat的默认内存配置比较低,不用说大项目,就算是小项目,并发量达到一定程度也就可能会抛出OutOfMemoryError异常,
    为了解决这个问题,我们要修改JVM的一些配置,在tomcat的bin目录下的catalina配置文件中,配置Xms和Xmx,也就是
    Java虚拟机初始化时堆的最小内存和最大内存,这俩值通常会配置成一样,这样GC不必再为扩展内存空间而消耗性能.
    除了这两个,还可以配置XX:PermSize和XX:MaxPermSize,它们是Java虚拟机永久代大小和最大值,除了这几个参数
    还可以再根据具体需要配置其他参数。

    第二部分: 配置优化
    配置优化,主要有三方面:
    1. Connector 优化
    Connector是连接器,它负责接收客户的请求,以及向客户端回送响应的消息。
    默认情况下Tomcat只支持200线程访问,超过这个数量的连接将被等待甚至超时放弃,所以我们需要提高这方面的处理能力.
    修改这部分配置需要修改conf下的server.xml,找到Connector 标签项,修改protocol,默认的协议类型是BIO,也就是阻塞式I/O操作,
    简单项目及应用可以采用BIO.

    第二种协议类型是NIO,它就是一种基于缓冲区是、并能提供非阻塞I/O操作的java API,它有更好的并发运行性能. NIO更适合后台需要耗时完成请求的操作

    第三种协议类型是APR,它主要可以提高Tomcat对静态文件的处理性能.
    选择哪个协议也是根据实际项目进行配置.

    除了这个协议类型,还有一个非常重要的参数要改,就是maxThreads,就是当前连接器能够处理同时请求的最大数目.这个数目也并非
    越大越好,它也受操作系统等硬件制约,所以这个值要根据压力测试后实际数据进行配置.

    2. 线程池
    使用线程池的好处在于减少了创建销毁线程的相关消耗,而且可以提高线程的使用效率。使用线程池就在Service标签中配置Executor就可以了

    3. Listener
    还有一个影响tomcat性能的因素是内存泄漏,我们在Server标签中配置一个JreMemoryLeakPreventionListener就可以用来预防JRE内存泄漏

    第三部分: 组件优化
    可以选用Tomcat Native组件,它可以让 Tomcat使用 Apache 的 APR包来处理包括文件和网络IO操作,从而提升性能及兼容性


    2、http协议有哪些部分组成?
    回答:1.请求部分:1)请求行:请求方式 路径 协议及版本 2)请求头:请求头中保存的是本地浏览器信息的,是发送到服务器,被服务器解析的 3)请求体:请求体中存储的是请求数据,请求方式是POST时,请求体中才有内容;

    2.响应部分:1)响应行:协议及版本 状态码 状态码描述 2)响应头:包含了服务器信息以及响应内容信息,被浏览器解析的 3)响应体:存储响应数据,给一般用户看的
    3、Get和Post的区别?
    回答:Get请求方式:地址栏里会显示我们提交的数据(不安全),并且地址栏中支持提交少量数据,请求的数据存在请求行中;
    Post请求方式:地址栏里不显示我们提交的数据信息(相对安全),可以提交大量数据,请求的数据存在请求正文中。

    4、cookie和session的区别?
    回答:共同点:cookie和session都是用来跟踪浏览器用户身份的会话方式;

    区别:cookie数据保存在客户端,保存数据不安全且存储数据量有限;session数据保存在服务器端,保存数据安全且存储数据量大,session是基于cookie进行信息处理的;

    5、什么是ajax,为什么要使用ajax?
    回答:Ajax是一种创建交互式网页应用的网页开发技术;Asynchronous JavaScript and XML的缩写;

    Ajax的优势:1.通过异步模式,提升了用户体验;

    2.优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了宽带占用;

    3.Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载;

    Ajax的最大特点:可以实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度。

    注意:ajax在实际项目开发中使用率非常高(牢固掌握)。
    6、浅谈你对ajax的认识?
    回答:同上(第5个问题)

    7、Cookie和Session以及Servlet的生命周期?
    回答:1.Cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束。

    2. Session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁;但是,如果在20分钟内(如在第19分钟时)访问过session,那么将重新计算session的生命周期。注意:关机会造成session生命周期的结束,但是对cookie没有影响。

    3.init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

    service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个”请求”(ServletRequest)对象和一个”响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

    destroy():仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

    8、说一下你熟悉的常用linux命令?
    回答:1.列出文件列表:ls

    2.创建目录和移除目录:mkdir rmdir

    3.用于显示文件后几行内容:tail

    4.打包:tar -xvf

    5.打包并压缩:tar -zcvf

    6.查找字符串:grep

    7.显示当前所在目录:pwd

    8.创建空文件:touch

    9:编辑器:vim vi

    9、后台传过的json数据前台怎么接收?
    回答:在前台可以使用js代码接收,也可以通过ajax接收,也有专门的前端框架接收

    10、后台传过来一个集合前台怎么接收?
    回答:使用el表达式或者ognl表达式,或者根据实际情况从域中取数据

     

  • 相关阅读:
    使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。
    《大道至简》第三章读后感
    动手动脑
    zencart设置特价商品价格
    如何设置zencart买满多少免运费?
    zencart分类页每页显示产品数量自定义选择的方法
    Access数据库LIKE问题
    zencart清空产品商品实用命令
    dedecms织梦后台发布文章提示“标题不能为空”的解决办法
    zencart重置用户登录密码sql
  • 原文地址:https://www.cnblogs.com/incognitor/p/9907627.html
Copyright © 2020-2023  润新知