2018/12/11面试内容,相关知识点梗概,答案仅供参考。
1. filter过滤器定义,如何使用的?
filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。
使用步骤:
1)编写一个过滤器的类实现Filter接口
2)实现接口中尚未实现的方法(着重实现doFilter方法)
3)在web.xml中进行配置(主要是配置要对哪些资源进行过滤)
总结Filter的作用
1)公共代码的提取
2)可以对request和response中的方法进行增强(装饰者模式/动态代理)
3)进行权限控制
2.MySQL和Oracle的区别
1)Oracle是大型数据库而MySQL是中小型数据库,Oracle市场占有率高达40%,MySQL只有20%左右,同时MySQL是开源的而Oracle价格非常高。
2)Oracle支持大并发,大访问量。
3)安装所用的空间差别也是很大的,MySQL安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
4)操作上的一些区别
①主键
MySQL一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,MySQL将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值赋给该字段即可;只是ORM框架是只要是native主键生成策略即可。
②单引号的处理
MySQL里可以用双引号包起字符串,Oracle里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换;把所有出现的一个单引号替换成两个单引号;
③翻页的SQL语句的处理
MySQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;Oracle处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80
④长字符串的处理
长字符串的处理Oracle也有它特殊的地方。Insert和Update时最大可操作的字符串小于等于4000个单字符,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用Oracle里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
⑤空字符的处理
MySQL的非空字段也有空的内容,Oracle里定义了非空字段就不允许有空的内容 。按MySQL的NOT NULL来定义Oracle表结构,导数据的时候会产生错误。因此导数据时要对空字符串进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较MySQL里用 字段名like’%字符串’,Oracle里也可以用字段名like’%字符串’但这种方法不能使用索引,速度不快。
⑦Oracle实现了ANSII SQL中大部分功能,如:事务的隔离级别、传播特性等而MySQL在这方面还是比较的弱。
3.讲一讲你知道MySQL的缺点
1)无法避免的bugs
任何一个软件包都有bug,但稍微深入了解一下,就会发现和MySQL相关的bugs自成体系。突然你就需要留心,因为NULL并不是以同样的方式出现,外键约束也灭有像你想象的那样执行,连主键自动增长也会出错。
2)关系表的不灵活性
关系表具有条理性是好的,但这迫使程序员要编造或把一些数据塞到已经定义好模式的列中。NoSQL之所以越来越受欢迎,其中一个原因就是它为程序员提供了足够的灵活性,以计算数据库的使用。如果一个街道地址需要增加一行,那么,你可以将它很容易地插入到一个NoSQL文档中。如果你想添加一个完整的新的数据块,无论它包含什么内容,文档模型也可以原封不动地接受你的数据,而不必改为它要求的数据格式。
3)存储引擎混乱
总体来说,MySQL的存储引擎接口定义还算良好的。MySQL不是实际上的同一的数据库。它是由几个数据库组成,它们的大多数细节都被统一的表面掩盖了。开始时是有一个MyISAM引擎,它很快但在前后一致上不能做到完备。有时你需要速度并且可以接受不一致的结果时是很好的。
4)JOIN联合查询
5)分支的混乱
6)原生JSON支持的缺乏
7)封闭源和专有模块的兴起
原文参考链接:https://blog.csdn.net/cocacola456/article/details/54893946?locationNum=8&fps=1
4.Oracle数据库如何设置自增序列?
Oracle不能像MySQL那样设置主键自增,Oracle用<序列+触发器>的方式使数据表的一列或多列实现自增
序列sequence+触发器trigger:实现数据表S_DEPART中的主键的自增
5.cookie和session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
- session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE。
- 单个cookie保存的数据不能超过4k,很多浏览器都限制了一个站点最多保存20个cookie。
原文参考链接:https://www.cnblogs.com/shiyangxt/articles/1305506.html
6.转发和重定向的区别
- 转发使用的是getRequestDispatcher()方法,重定向使用的是sendRedirect();
- 转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
- 转发是服务器行为,重定向是客户端行为;
- 转发是浏览器只做了一次访问请求,重定向是浏览器做了至少两次的访问请求的;
- 转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。
参考链接:https://blog.csdn.net/lijun102542/article/details/78518733
https://blog.csdn.net/liubin5620/article/details/79922692
7.JSP和JS的区别
- JSP全称是Java Server Page,JS全称是JavaScript。
- 最主要的区别是运行位置不同。
1️⃣JSP运行在后台服务器上,混合在HTML中的Java程序段用于控制HTML的动态生成,并且通常负责调用后台数据库中的数据,形成能够根据使用情况的变化的,具有丰富数据交互效果的页面。
2️⃣JavaScript通常是运行在前台,即运行与用户浏览器的,通常不需要服务器的后台支持(AJAX交互例外),混合在HTML中的JavaScript脚本程序直接被浏览器解释执行,以提高页面的美观性和UI操作响应速度为基本目标。 - JSP在HTML中用<%%>里面实现,JS在HTML中用实现
8.如何进行JS调试?
浏览器F12
参考链接:https://jingyan.baidu.com/article/154b46310165e028ca8f4128.html
9.SVN是什么?怎么用?
版本管理的工具,总结起来有以下六点功能:
- 备份。写错了能改回来
- 代码还原。这个和第1点很像,但不完全一样,代码还原是还原到指定的时间,我个人理解是由多个时间点可供还原的;
- 协同修改。因为代码管理的核心是提升开发效率,你能提交diamante,别人也可以修改。
- 多版本项目文件管理。也就是一个项目可以保留多个分支。
- 追溯编写时间和编写人。也是一个很重要的功能,谁写的有留档。
- 权限控制。权限,比如你是做oa的,旁边坐的是做ERP的,那当然不能让他改你代码,SVN也有这效果,能够分开管理。
10.数据库多表查询,关联查询
11.SpringBoot
12.重载(overload)和重写(override)的区别
overload(重载)
- 参数类型、个数、顺序至少有一个不相同。
- 不能重载只有返回值不同的方法名。
- 存在于父类和子类、同类中。
override(重写) - 方法名、参数、返回值相同。
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
- 存在于父类和子类之间。
- 方法被定义为final不能被重写。
14.接口和抽象类的区别
1.接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。
2.接口里只能定义静态常量,不能定义普通成员变量,抽象类里则既可以定义普通成员变量,也可以定义静态常量。
3.接口不能包含构造器,抽象类可以包含构造器,抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
4.接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
5.一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。