java面试题Web篇
文章目录
- 1.get和post请求的区别
- 2.什么是SQL攻击?如何解决
- 3.cookie和session的区别
- 4.简述一下src与href的区别
- 5.CSS选择器有哪些
- 6.重定向和请求转发的区别
- 7.vue的生命周期八个钩子函数
- 8.Ajax
- 9.数据库
- 1)聚合函数
- 2)SQL关键字
- 3)Select 语句完整的执行顺序
- 4)数据库三范式
- 5)事务
- 6)事务隔离级别
- 7)数据库里索引的作用
- 8)数据库里的字段约束有哪些,各有什么作用
- 9)数据库优化的方案有哪些
- 10.JSP九大内置对象
- 11.javaweb三大组件:Servlet、Filter、Listener
- Servlet特点
- Filter过滤器的作用,与springmvc的关系
- Listener分类,作用
- 12.什么是盒子模型?
1.get和post请求的区别
- Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
- Get传送的数据量较小,一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
- Get执行效率却比Post方法好。Get是form提交的默认方法。
2.什么是SQL攻击?如何解决
SQL注入:
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
防止的方法:
永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。
永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。
应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中
3.cookie和session的区别
1.存储位置不同
cookie的数据信息存放在客户端浏览器上。
session的数据信息存放在服务器上。
2.存储容量不同
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东 西,并且设置session删除机制。
3.存储方式不同
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。
session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
4.隐私策略不同
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
session存储在服务器上,不存在敏感信息泄漏的风险。
5. 有效期上不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
6.服务器压力不同
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
流程:
1.用户首次访问服务器端,在服务器端创建一个session对象
同时服务器会自动为当前的session创建一个特殊的cookie:(名称: JESSIONID, 值:当前session.getId())
session.getId()称之为钥匙, “找"session
2.下次访问,浏览器会提交这个特殊cookie到服务器端,服务器会自动解析Cookie,拿到"钥匙”,根据"钥匙"找到session
可以使用session里面的数据
4.如果开启一次新的会话,这个特殊的cookie(浏览器级别的cookie)就会销毁了,找不到session.
4.简述一下src与href的区别
href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。
src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
5.CSS选择器有哪些
id选择器( # myid)
class选择器(.myclassname)
标签选择器(div, h1, p)
通配符选择器( * )
属性选择器(a[rel = “external”])
6.重定向和请求转发的区别
1,请求转发:用request的getRequestDispatcher()方法得到ReuqestDispatcher对象,调用forward()方法
//request.getRequestDispather(“目标访问的方式”).forward(请求,响应)
全程1次请求1次响应,地址栏不变,是服务器跳转,只能跳转到当前项目。
2,重定向:调用response的sendRedirect()方法
//response.sendRedirect(“目标访问的方式”)
全程2次请求2次响应,地址栏改变,是浏览器跳转,可以跳转到任意网址。
7.vue的生命周期八个钩子函数
生命周期认我们在控制整个vue时更容易形成更好的逻辑,可以分为四个阶段:创建阶段,挂载阶段,更新阶段,销毁阶段分别有:
创建阶段:
beforeCreate() 只有一些实例本身的事件和生命周期函数。
created() 是最早使用data和methods中数据的钩子函数。
挂载阶段:
beforeMount() 指令已经解析完毕,内存中已经生成dom树。
Mounted() dom渲染完毕页面和内存的数据已经同步。
更新阶段:
beforeUptate() 当data的数据发生改变会执行这个钩子,内存中的数据是新的,页面是旧的。
Updated() 内存和页面都是新的。
销毁阶段:
beforeDestroy() 即将销毁data和methods中的数据此时还是可以使用的,可以做一些释放内存的操作。
Destroyed() 已经销毁完毕。
8.Ajax
Ajax 即"Asynchronous JavaScript And XML"(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
$.ajax({ 选项 })
常见的选项有: type:请求方式,常见的值有"get",“post"等,默认值:get
url:请求的路径,”/ajax/hello"
data:请求的参数,参数的常见写法有 键值对或者json
方式1:name=tom&pwd=123
方式2: {“name”:“tom”,“pwd”:“123”}
success:请求成功后的回调函数
function(返回值的参数名){} contentType:用来设置请求参数的mime类型,默认值:表单的enctype默认值
name=tom&pwd=123
error:ajax请求时内部发生错误时执行的回调函数 function(){}
dataType:指定返回值的类型 常见值:text json
async:是否异步 默认值true
Ajax应用程序的优势在于:
- 通过异步模式,提升了用户体验
- 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
- Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
9.数据库
1)聚合函数
COUNT:统计行数量
SUM:获取单个列的合计值
AVG:计算某个列的平均值
MAX:计算列的最大值
MIN:计算列的最小值
2)SQL关键字
1.分页
MySQL的分页关键词limit
SELECT * FROM student LIMIT 2,6; 查询学生表中数据,从第三条开始显示,显示6条
2.分组
MySQL的分组关键字:group by
SELECT sex, count(*) FROM student GROUP BY sex;
3. 去重
去重关键字:distinct
select DISTINCT NAME FROM student;
3)Select 语句完整的执行顺序
顺序依次为form…on…left join…where…group by…avg()/sum()…having…select…order by…asc/desc…limit…
4)数据库三范式
第一范式:1NF 原子性,列或者字段不能再分,要求属性具有原子性,不可再分解;
第二范式:2NF 唯一性,一张表只说一件事,是对记录的惟一性约束,要求记录有唯一标识;
第三范式:3NF 直接性,数据不能存在传递关系,即每个属性都跟主键有直接关系,而不是间接关系。
5)事务
事务是应用程序中一系列逻辑相关的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。
1.事务的基本要素(ACID)
1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。
事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。
2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。
比如A向B转账,不可能A扣了钱,B却没收到。
3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
6)事务隔离级别
读未提交(read-uncommitted)
读提交(read-committed):oracle默认的事务处理级别
可重复读(repeatable-read):mysql默认的事务处理级别
串行化(serializable)
7)数据库里索引的作用
主要作用是为了提高查询效率,它的执行也是有一定条件的,不是加了索引就一定能够加快查询的效率,由于索引的创建是需要占据内存空间的.以下不适合加索引:
1:如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了
2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义
3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新
4、mysql中通过Explain来查看索引的扫描次数
8)数据库里的字段约束有哪些,各有什么作用
主键约束:实现实体的完整性(PK:主键),值唯一,不能为空,且使用主键的自增策略
外键约束:用于多表之间的查询该表组建作为另外张表的外键建立标语标志就的关系(FK)
非空约束:(NOT NULL)保证该字段的内容不能为空null
唯一约束:(UNIQUE)字段的值必须唯一的约束
检查约束:(CHECK)检查列的值是否满足一个boolean表达式
默认约束:(default)给指定的字段可以设置默认值,不设置值时使用默认值而不是null
9)数据库优化的方案有哪些
(1)查询SQL尽量不要使用select *,而是具体字段
(2)索引不是越多越好,每个表控制在5个索引以内
(3)尽量避免子查询,可以将子查询优化为join多表连接查询
(4)尽量使用数值替代字符串类型
(5)连接查询的性能上尽量使用小表驱动大表的原则
(6)查看慢查询日志,找出执行时间长的SQL进行优化
(7)查询尽量避免返回大量数据
(8)因为where子句后面的条件是执行顺序是从右到左,所以尽量把能过滤掉大部分数据的条件放在最后
(9)对查询频次较高, 且数据量比较大的表, 建立索引
(10)避免在where子句中使用or来连接条件
(11)使用varchar代替char
(12)使用explain分析你SQL执行计划
(13)优化like语句:‘1%’
(14)批量插入性能提升
10.JSP九大内置对象
在JSP中无需创建就可以使用的9个对象,它们是:
out对象:用于向客户端、浏览器输出数据。
request对象:封装了来自客户端、浏览器的各种信息。
response对象:封装了服务器的响应信息。
exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
config对象:封装了应用程序的配置信息。
page对象:指向了当前jsp程序本身。
session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
11.javaweb三大组件:Servlet、Filter、Listener
Servlet:接收请求和响应数据到客户端
Servlet特点
- Servlet是单例的(Servlet对象在内存中只有一个,所有请求访问的是同一个servlet)
- Serlet是线程不安全的.不能避免,尽量减少安全问题 在servlet里面尽量避免定义成员变量
- 说明: 凡是单例对象,总是存在线程安全问题,为了减少或者尽量避免安全问题, 在单例类避免定义成员变量.
- servlet和springmvc什么关系?
- springmvc底层: 封装的servlet
- springmvc中央控制器: 就是一个servlet,分发浏览器的请求
Filter:拦截请求和响应
Filter过滤器的作用,与springmvc的关系
自定义过滤器: 实现Filter接口, 有个方法doFilter(req, response): 拦截请求和响应,放行:Filterchain对象放行方法
SpringMVC大量用到了过滤器, 比如: CharacterEncodingFilter,处理乱码问题,以及加载springmvc的配置文件
- 过滤器和springmvc的拦截器有关系有什么区别?
1.过滤器是web是三大组件之一,基于web开发环境(web项目).
2.springmvc的拦截器和过滤器没有关系,拦截器实现基于代理(默认jdk动态代理)方式实现的.
Listener:监听对象状态的改变,以及加载配置文件
Listener分类,作用
自定义一个监听器: 实现Listener接口
监听器:分为三大类,八个监听器
监听器:在spring框架里面,springmvc框架里面使用,springboot框架里面.
*比如: spring框架,使用ContextLoaderListener在web服务器启动时,读取spring配置文件,初始化bean对象,装配到spring容器中(ConCurrentHashMap)
12.什么是盒子模型?
在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域。4个部分一起构成了css中元素的盒子模型
java面试题Web篇相关推荐
- Java面试题-进阶篇(2022.4最新汇总)
Java面试题-进阶篇 1. 基础篇 1.1 基本数据类型和包装类 1.2 Double转Bigdecimal可能会出现哪些问题?怎么解决? 1.3 equals 与 == 的区别? 1.4 Java ...
- Java面试题基础篇(一)
Java面试题基础篇(一) Java面试题基础篇(一) 1.jre和jdk有什么区别? 2.==与equals的区别? 3.接口和抽象类的共同点和不同点? 4.lamda表达式的优缺点? 5.Stri ...
- 年终盘点 | 2019年Java面试题汇总篇(附答案)
作者 | 老王 来源 | Java中文社群「微信公众号」 在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几 ...
- 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案
在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当然其中有不少的面试题来源 ...
- Java面试题十篇基本问题,学完这些我就不信拿不到offer
前言 网上找了很多的Java面试题及部分资料,选取了其中10篇来作为本次的分享.以下为整理出来的文章,给大家分享. java面试题及答案 第一篇 一面 手写ArrayList 手写进制转换算法,求出一 ...
- Java面试题-框架篇九
81,使用Spring框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约2MB. 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们. ...
- Java面试题——基础篇一
目录 什么是Java? JVM.JRE和JDK的关系 Java语言有哪些特点? &和&&的区别 final 在 java 中有什么作用? String 属于基础的数据类型吗? ...
- Java面试题 Web+EJB Spring+数据结构 算法计算机基础
六.Web 部分:(共题:基础40 道,基础37 道,中等难度3 道) 122.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? [基础] 答:Web 容器加载Servlet ...
- Java面试题-基础篇二
11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...
- Java面试题-javaweb篇七
61,JDBC访问数据库的基本步骤是什么? 1,加载驱动 2,通过DriverManager对象获取连接对象Connection 3,通过连接对象获取会话 4,通过会话进行数据的增删改查,封装对象 5 ...
最新文章
- 教你在Python中构建物体检测系统(附代码、学习资料)
- 【转载】flash时间轴中变量的作用域
- 常用命令-临时记录!
- 计算机组成原理第6章-总线
- C语言fscanf函数了解
- 智能巡检告警配置实践
- hdu 2188巴什博弈
- MS SQL数据库备份和恢复存储过程
- (原)caffe在ubuntu中设置GPU的ID号及使用多个GPU
- NRF52832学习笔记
- Java并发AtomicIntegerArray类
- 在其他的电脑上配置绿色Jre+tomcat运行环境
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_6、SpringBoot2.xHTTP请求配置讲解...
- 记录一些比较常用的简单jsp模板
- NetBean将IDE设置导出为Zip存档
- IBM阿蒙克公司已经与纪念斯隆-凯特琳癌症中心合作,用“沃森”来帮助癌症治疗
- PE文件解析(1):Dos头与NT头
- 利用WPT(Windows Performance Toolkit)进行程序的性能分析
- 中国物料喷射(MJ)市场趋势报告、技术动态创新及市场预测
- 《Android App开发进阶与项目实战》出版后记