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,就是当前连接器能够处理同时请求的最大数目.这个数目也并非
越大越好,它也受操作系统等硬件制约,所以这个值要根据压力测试后实际数据进行配置.

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

  2. 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生命周期结束。

  1. 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表达式,或者根据实际情况从域中取数据

Original: https://www.cnblogs.com/incognitor/p/9907627.html
Author: 無名之徒
Title: 2018年最新JAVA面试题总结之JavaWeb(2)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619813/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Nginx常见问题

    基于端口的虚拟机: 使用端口来区分,浏览器使用域名或ip地址:端口号 访问。 注意:~ 代表自己输入的英文字母。 16、location正则案例 1 #优先级1,精确匹配,根路径 …

    数据库 2023年6月14日
    0112
  • H5、C3基础知识笔记

    HTML5 本文内容参考于”HTML5|W3scool”教程 简介 是最新的 HTML 标准,拥有新的语义、图形以及多媒体元素 提供了新的 API 简化了 …

    数据库 2023年6月11日
    089
  • Tomcat的关于Web应用的类加载器

    类加载器的补充 一 类加载器的结构 二 类加载器的源码 源码视频 ClassLoader: 类加载器的基础实现,双亲委派就是这里实现的 SecureClassLoader: 安全相…

    数据库 2023年6月11日
    064
  • Django中使用QQ登录

    1.返回QQ登录网址的视图 请求方式: GET /oauth/qq/authorization/?next=xxx 请求参数: 查询字符串 参数名 类型 是否必须 说明 next …

    数据库 2023年6月14日
    0102
  • docker安装下载

    一、docker安装 查看 sudo systemctl status docker 安装 …

    数据库 2023年6月9日
    070
  • Java学习-第一部分-第三阶段-项目实战:满汉楼项目

    满汉楼项目 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 注意:笔记内容仅为实现该项目的基本后端功能,并不会实…

    数据库 2023年6月11日
    096
  • Git 环境搭建

    安装 Git:官网 👉https://git-scm.com/ GIt基础配置(以下操作均在 git bash 窗口下进行) git config –global user.na…

    数据库 2023年6月6日
    068
  • kafka学习

    Kafka概述 Kafka是分布式(点对点模式)(发布-订阅模式)消息系统,由Scala 写成, 它主要用于处理流式数据。本质是基于消息队列缓存数据. Kafka对消息保存时根据T…

    数据库 2023年6月16日
    067
  • 23种设计模式之访问者模式(Visitor Pattern)

    文章目录 概述 访问者模式的优缺点 访问者模式的使用场景 访问者模式的结构和实现 * 模式结构 模式实现 总结 概述 访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可…

    数据库 2023年6月6日
    081
  • MySQL事务基本使用

    1 事务概述 1.1 事务的支持情况 1.2 事务的特性 1.3 事务的状态 2 使用事务 2.1 显示事务 2.2 隐藏事务 3 事务隔离等级 3.1 数据并发问题 3.2 事务…

    数据库 2023年6月9日
    096
  • MySQL视图

    视图 常见的数据库对象 视图概述 为什么使用视图 可以帮助我们使用表中的 部分数据,对其修改可以改变原来表中的值 可以简化查询 控制数据的访问(权限) 视图的理解 视图是一个本身没…

    数据库 2023年5月24日
    059
  • Nginx 静态资源、跨域、Rewrite

    Nginx服务器基础配置实例 前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述。通过这些指令的合理配置,我们就可以让一台Nginx服务器正常工作,并且…

    数据库 2023年6月6日
    0130
  • C++学习笔记(5)–STL

    void test03() { for (size_t i = 0; i < 100; ++i, cout << i << " "…

    数据库 2023年6月14日
    091
  • 重新学习数据库(3)

    单元概述 通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行…

    数据库 2023年6月16日
    0184
  • 前端开发:如何正确地跨端

    导读:面对多种多样的跨端诉求,有哪些跨端方案?跨端的本质是什么?作为业务技术开发者,应该怎么做?本文分享阿里巴巴ICBU技术部在跨端开发上的一些思考,介绍了当前主流的跨端方案,以及…

    数据库 2023年6月14日
    083
  • 利用VBS循环弹窗

    VBScript是Visual Basic Script的简称,即 Visual Basic 脚本语言,有时也被缩写为VBS。 将以下代码复制到文本文档中,保存后修改文件后缀名称为…

    数据库 2023年6月11日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球