compare make beauty (021 to 030)

本贴最后更新于 1666 天前,其中的信息可能已经时移俗易

021.http 中重定向和请求转发的区别?

  • 本质区别:转发是服务器行为,重定向是客户端行为
  • 重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失
  • 请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。
  • 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 运行机制:如下图:
    image.png
    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 注入。
  • $ 方式一般用于传入数据库对象,例如传入表名
  • 一般能用#的就别用 $
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 150 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 431 关注
  • Web
    115 引用 • 431 回帖 • 8 关注
  • SQL
    124 引用 • 296 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...