面试题、六

 

一、JDBC和hibernate的区别

(1)hibernate和jdbc主要区别就是,hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库.

(2)Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合 (3)Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。 还有一点,正确的使用JDBC技术,它的效率一定比hibernate要好,因为hibernate是基于jdbc的技术。

二、Echarts的实现原理

Canvas 基于像素 单个html,类似于画笔在画布上画画 Echarts基于canvas画图 Svg 基于对象模型 多个图形元素 高保真

三、ajax是如何进行前后台交互的

1、url 请求地址 2、type 请求方式,默认是'GET',常用的还有'POST' 3、dataType 设置返回的数据格式,常用的是'json'格式,也可以设置为'html' 4、data 设置发送给服务器的数据 5、success 设置请求成功后的回调函数 6、error 设置请求失败后的回调函数 7、async 设置是否异步,默认值是'true',表示异步

四、SSM之间有什么关系,各自的作用

1.持久层:DAO层(mapper层)(属于mybatis模块)

DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作。

DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包。

然后在Spring的xml配置文件中定义此接口的实现类,就可在其他模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类,这里往往用到的就是反射机制,DAO层的jdbc.properties数据源配置,以及有 关数据库连接的参数都在Spring的配置文件中进行配置。

ps:(有的项目里面Dao层,写成mapper,当成一个意思理解。)

2.业务层:Service层(属于spring模块)

Service层:主要负责业务模块的逻辑应用设计。也就是项目中你看到的Service包。

Service层的设计首先是设计接口,再设计其实现的类。也就是项目中你看到的service+impl包。

接着再在Spring的xml配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。

扫描二维码关注公众号,回复: 9698766 查看本文章

最后通过调用DAO层已定义的接口,去实现Service具体的实现类。

ps:(Service层的业务实现,具体要调用到已定义的DAO层的接口.)

3.控制层/表现层:Controller层(Handler层) (属于springMVC模块)

Controller层:主要负责具体的业务模块流程控制,也就是你看到的controller包。

Controller层通过要调用Service层的接口来控制业务流程,控制的配置也同样是在Spring的xml配置文件里面,针对具体的业务流程,会有不同的控制器。

4.View层 (属于springMVC模块)

负责前台jsp页面的展示,此层需要与Controller层结合起来开发。

Jsp发送请求,controller接收请求,处理,返回,jsp回显数据。

 

五、使用Oracle的驱动是什么

oracle数据库的驱动是固定的,连接时,直接写oracle.jdbc.driver.OracleDriver即可

六、MVC模式实现技术有哪些

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

Model(模型)表示应用程序核心(比如数据库记录列表)。

View(视图)显示数据(数据库记录)。

Controller(控制器)处理输入(写入数据库记录)。 MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。 Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。   通常模型对象负责在数据库中存取数据。 View(视图)是应用程序中处理数据显示的部分。   通常视图是依据模型数据创建的。 Controller(控制器)是应用程序中处理用户交互的部分。   通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。 MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

七、get和post的区别

img

八、redis缓存机制

数据库缓存: sql语句时key值,查询结果resultSet是value,当同一个查询语句访问时(select * from t_product),只要曾经查询过,调用缓存直接返回resultSet,节省了数据库读取磁盘数据的时间。

持久层缓存: 减少了连接数据库的时间;减少了resultSet封装成对象的过程。

业务层和控制层的缓存: 减少调用层次。

描述缓存在业务层的逻辑:

查询商品信息

判断当前查询在缓存是否有数据

  如果有数据,直接返回,当前请求结束;

  如果没有数据,查询持久层数据库数据,获取数据存储再缓存一份,供后续访问使用;

缓存雪崩/缓存击穿 海量请求访问服务器,服务器的性能由缓存支撑,一旦一定范围的缓存数据未命中,请求的数据访问涌入数据库;承受不了压力造成宕机--重启--海量请求并未消失--宕机--重启,系统长时间不可用;这种情况就是缓存的雪崩。

九、==和equals()的区别

对于==,比较的是值是否相等如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址

对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

十、++i和i++的区别

i++是先赋值,然后再自增;++i是先自增,后赋值

十一、JDBC是如何处理sql中传入的参数的

一、数组形式的参数 优点: 针对简单sql,可以节约部分内存空间。减少代码量、易读。 缺点: 1、相同的参数不可以复用,让array占用更多的空间。(当然,以现在的硬件来说,这点空间/内存、多余添加数组值花费的时间 完全微不足道) 2、如果是in的参数,要动态拼接(?)占位符。(个人认为最麻烦、繁琐的,扩展:oracle对in最大支持1000) 3、如果sql中参数过多,其实不好阅读修改。 个人习惯用List添加参数,然后再把List转换成Array。 好处是:如果用数组,当sql存在动态条件,那么无法确定数组长度。而用List就不需要自己去维护。 二、map形式的参数 优点: 1、解决了in参数的问题。 2、参数值可以复用。 三、javaBean形式的参数 如果参数是通过JavaBean传到dao层,那么不用把bean转换成map。相对的如果是通过map传到dao层的,也用map形式也无需转换成javaBean。

十二、SVN中标记和标记合并的作用

SVN的“合并(Merge)”功能:这个功能是用来将分支(branch)与主干(Trunk)合并用的。通过自动合并,可以将大部分文件的变动合并到一起,形成一个集合全部改动的文件。 SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。

十三、使用vue.js开发

那么什么是Vue组件呢?它是vue.js最强大的功能之一,是可扩展的html元素,是封装可重用的代码,同时也是Vue实例,可以接受相同的选项对象(除了一些根级特有的选项) 并提供相同的生命周期钩子。 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢? 组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素。

使用组件的好处?

提高开发效率

方便重复使用

简化调试步骤

提升整个项目的可维护性

便于多人协同开发

十四、jsp内置对象各个作用

1、request对象 request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

2、response对象 response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。

3、session对象 session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

4、application对象 application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

5、out 对象 out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

6、pageContext 对象 pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。

7、config 对象 config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

8、page 对象 page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

9、exception 对象 exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

十五、如何以递归算法输出一个文件夹下的文件和文件目录

import java.io.File;

public class TestFile {
  public static void main(String[] args) {
      File f=new File("D:\\shixun");
      printFile(f,0);
  }
  public static void printFile(File file,int level) {
      //打印树状的层次关系
      for(int i=0;i<level;i++) {
          System.out.print("*");
      }
      //输出目录或者文件的名字
      System.out.println(file.getName());
      if(file.isDirectory()) {//判断file是否为目录
          File [] listFiles=file.listFiles();
          for(File temp:listFiles) {
              //自己调用自己
              printFile(temp,level+1);
          }
      }
  }

}

十六、Object的8种常用方法

getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()

十七、servlet的生命周期

Servlet 生命周期包括三部分: 1.初始化:Web 容器加载 servlet,调用 init()方法 2.处理请求:当请求到达时,运行其 service()方法。service()自动派遣运行与请求相对应的doXXX(doGet 或者 doPost)方法。 3.销毁:服务结束,web 容器会调用 servlet 的 distroy()方法销毁 servlet。

十八、map有哪些是线程安全的

JAVA中线程安全的map有:Hashtable、synchronizedMap、ConcurrentHashMap。

java中map中线程安全怎么实现: 同步的map就是Hashtable, concurrenthashmap。 你看到的Hashtable就是直接在hashmap上加了个锁,concurrenthashmap就是分成多个分段锁。

java代码中线程安全级别: 绝对线程安全。 在任何环境下,调用者都不需要考虑额外的同步措施,都能够保证程序的正确性。 这个定义要求很严格,java里面满足这个要求的类比较少,对于实现jsr133规范(java内存模型)的jdk(一般指jdk5.0之上),一般的不变类都是满足绝地线程安全的。比如 String,Integer类。一般情况下,定义了如果一个类里面所有字段都是final类型的,一般都认为这个类是不变的。不变类都是绝对线程安全的。

相对线程安全 在一般情况下,调用者都不需要考虑线程同步,大多数情况下,都能够正常运行。jdk里面大多数类都是相对安全的。最常见的例子是java里面Vector类。

十九、什么是事务,作用是什么

一个事务是有下列属性的一个工作单元: 原子性(ATOMICITY): 一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。

一致性(CONSISTENCY): 一个事务应该保护所有定义在数据上的不变的属性(例如完整性约束)。在完成了一个成功的事务时,数据应处于一致的状态。换句话说,一个事务应该把系统从一个一致-状态转换到另一个一致状态。举个例子,在关系数据库的情况下, 一个一致的事务将保护定义在数据上的所有完整性约束。

隔离性(ISOLATION): 在同一个环境中可能有多个事务并发执行,而每个事务都应表现为独立执行。串行的执行一系列事务的效果应该同于并发的执行它们。这要求两件事:

在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。 两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现这个特征。

持久性(DURABILITY): 一个被完成的事务的效果应该是持久的。

二十、JDK1.8有什么新特性

1、default关键字 2、Lambda 表达式 3、函数式接口 4.方法与构造函数引用 5、局部变量限制 6、Date Api更新 7、流

猜你喜欢

转载自www.cnblogs.com/zhaozhitong/p/12450160.html