021.http 中重定向和请求转发的区别?
- 本质区别:转发是服务器行为,重定向是客户端行为
- 重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失
- 请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。
022.Cookie 和 Session 的区别
Cookie
是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。 以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie- Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在 应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
- 无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。
- 在存储的数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象。
023.什么是 jsp,什么是 Servlet?jsp 和 Servlet 有什么区别?
- jsp 本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet 实例。
- Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生 成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接 口。
- jsp 是 html 页面中内嵌的 Java 代码,侧重页面显示;
- Servlet 是 html 代码和 Java 代码分离,侧重逻辑控制,mvc 设计思想中 jsp 位于视图层,servlet 位于控制层 Jsp 运行机制:如下图:
JVM 只能识别 Java 类,并不能识别 jsp 代码!web 容器收到以.jsp 为扩展名的 url 请求时,会将访问请求交给 tomcat 中 jsp 引擎处理,每个 jsp 页面第一次被访问时,jsp 引擎将 jsp 代码解释为一个 servlet 源程序,接着编译 servlet 源程序生成.class 文件,再有 web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互。
024.SQL 之连接查询(左连接和右连接的区别)
- 左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的 数据则显示相应字段的数据,如果不匹配则显示为 null。
- 右连接(右外连接):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表匹配的 数据则显示相应字段的数据,如果不匹配则显示为 null。
- 全连接:先以左表进行左外连接,再以右表进行右外连接。
- 内连接: 显示表之间有连接匹配的所有行。
025.存储过程和存储函数的特点和区别?
- 特点:
(1)、一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
(2)、对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
(3)、存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以 返回一个表对象,因此它可以在查询语句中位于 FROM 关键字的后面。 - 区别:
(1)、函数必须有返回值,而过程没有.
(2)、函数可以单独执行.而过程必须通过 execute 执行. (3)、函数可以嵌入到 SQL 语句中执行.而过程不行. 其实我们可以将比较复杂的查询写成函数.然后到存储过程中去调用这些函数.
026.存储过程与 SQL 的对比?
- 优势:
1、提高性能
:SQL 语句在创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进 行分析、优化,并给出最终被存在系统表中的存储计划,这样,在执行过程时便可节省此开销。
2、降低网络开销
:存储过程调用时只需用提供存储过程名和必要的参数信息,从而可降低网络的流量
3、便于进行代码移植
: 数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。
4、更强的安全性
1)系统管理员可以对执行的某一个存储过程进行权限限制,避免非授权用户对数据的访问
2)在通过网络调用过程时,只有对执行过程的调用是可见的。 因此,恶意用户无法看到表和数据库对象名称、 嵌入自己的 Transact-SQL 语句或搜索关键数据。
3)使用过程参数有助于避免 SQL 注入攻击。 因为参数输入被视作文字值而非可执行代码,所以,攻击者将命令 插入过程内的 Transact-SQL 语句并损害安全性将更为困难。
4)可以对过程进行加密,这有助于对源代码进行模糊处理。 - 劣势
1、存储过程需要专门的数据库开发人员进行维护,但实际情况是,往往由程序开发员人员兼职
2、设计逻辑变更,修改存储过程没有 SQL 灵活
027.编程式事务与声明式事务的区别?
1)编程式事务是自己写事务处理的类,然后调用
2)声明式事务是在配置文件中配置,一般搭配在框架里面使用!
028.BeanFactory 与 AppliacationContext 有什么区别?
BeanFactory
: 基础类型的 IOC 容器,提供完成的 IOC 服务支持。如果没有特殊指定,默认采用延迟初始化策略。相对来说,容 器启动初期速度较快,所需资源有限。
ApplicationContext
是在 BeanFactory 的基础上构建,是相对比较高级的容器实现,除了 BeanFactory 的所有 支持外,ApplicationContext 还提供了事件发布、国际化支持等功能。ApplicationContext 管理的对象,在容器启动 后默认全部初始化并且绑定完成。
029.在 Spring AOP 中,关注点和横切关注的区别是什么?
关注点
是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点
是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需 要的功能。因此这些都属于横切关注点。
030.Mybatis 中#和 $ 的区别?
- #相当于对数据 加上 双引号,$ 相当于直接显示数据
- #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是 111,那么解析成 sql 时的值为 order by "111", 如果传入的值是 id,则解析成的 sql 为 order by "id".
- 将传入的数据直接显示生成在 sql 中。如:order by user_id$,如果传入的值是 111,那么解析成 sql 时的值为 order by user_id, 如果传入的值是 id,则解析成的 sql 为 order by id
- #方式能够很大程度防止 sql 注入
- $ 方式无法防止 Sql 注入。
- $ 方式一般用于传入数据库对象,例如传入表名
- 一般能用#的就别用 $
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于