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表达式,或者根据实际情况从域中取数据
2018年最新JAVA面试题总结之JavaWeb(2)的更多相关文章
- 2018年最新Java面试题及答案整理(持续完善中…)
2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...
- 2018年最新Java面试题及答案整理
基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰符: pub ...
- 2018年最新JAVA面试题总结之框架(4)
转自于:https://zhuanlan.zhihu.com/p/40098726 1.谈谈对spring框架的了解 ,spring有什么作用(IOC,AOP),spring的核心是什么?回答:Spr ...
- 2018年最新JAVA面试题总结之基础(1)
转自于:https://zhuanlan.zhihu.com/p/39322967 1.JAVA中能创建volatile数组吗?volatile能使得一个非原子操作变成原子操作吗? 回答: 能,Jav ...
- 2018年最新JAVA面试题总结之数据库(3)
转自于:https://zhuanlan.zhihu.com/p/39804394 1.MySQL的delete与truncate区别? 回答:delete语句执行删除的过程是每次从表中删除一行,并且 ...
- 2016最新Java笔试题集锦
更新时间:2015-08-13 来源:网络 投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...
- 最全最新java面试题系列全家桶(带答案)
最全最新java面试题系列全家桶(带答案) 置顶 2019年04月06日 22:40:28 青春季风暴 阅读数 14082 文章标签: java面试题技术栈 更多 分类专栏: 面试 版权声明:本文 ...
- 2021最新Java面试题全集-20210326版
在手撕了数千道网络流传的面试题,外加十多个不眠之夜, 终于从里面精心挑选出约500道题目, 做为大家求职.跳槽前复习准备面试使用. 一:挑选题目的原则: 常考的.常被面试问到的 题目有一定的深度和难度 ...
- 509道Java面试题解析:2020年最新Java面试题
<Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...
随机推荐
- Nginx从入门到实践(三)
动静分离 动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问. 动静分离的一种做法是将静态资源部署在nginx上, ...
- 主成分分析_PCA解释
粘贴自:http://blog.codinglabs.org/articles/pca-tutorial.html 数据的向量表示及降维问题 向量的表示及基变换 协方差矩阵及优化目标 协方差矩阵对角化 ...
- Jmeter接口测试操作
一.Jmeter接口测试操作步骤 1. 启动jmeter,右键点击测试计划-->添加-->Threads(Users)-->线程组,点击线程组菜单,右边显示参数设置. 2 . 右键点 ...
- python基础学习小结
Python是一门面向对象的解释性语言(脚本语言),这一类语言的特点就是不用编译,程序在运行的过程中,由对应的解释器向CPU进行翻译,个人理解就是一边编译一边执行.而JAVA这一类语言是需要预先编译的 ...
- python 之金玉良言 或许是最后一次给自己系统总结--已结
jar tvf xxx.jar vim xxx.jar 配置一下 notepad++ F5 cmd /k D:"Program Files (x86)"\python\python ...
- hdu5965扫雷 枚举+递推
题目链接 思路:枚举第一列的可能种数,然后递推即可,中途判断是否满足条件,最后再判断最后一列是否满足条件即可. #include<bits/stdc++.h> #define LL lon ...
- Tortoisegit图文使用教程
本文只针对使用Tortoisegit的用户,使用命令行的后面可以不用看了 1.安装Git及Tortoisegit 先上图,首先需要把123按顺序安装了 Git下载地址:https://git-for- ...
- 2018-2019-2 20165234 《网络对抗技术》 Exp4 恶意代码分析
实验四 恶意代码分析 实验目的 1.监控自己系统的运行状态,看有没有可疑的程序在运行. 2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals ...
- thrift安装及python和c++版本调试
一.安装过程 1.安装依赖库 ]# yum install boost-devel-static libboost-dev libboost-test-dev libboost-program-opt ...
- windows安装pycrypto报错
在Windows上安装的时候直接 pip install pycrypto会报错 由于直接安装安装Crypto模块 会报错如下:因此需要先安装Microsoft Visual C++ 9.0 进入下载 ...