1: springmMVC运行原理 1).springmvc 所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作 2).DispatcherServlet查询一个或多个HandlerMapping找到处理请求的Controller 3).DispatcherServlet请求提交到Controller 4).Controller进行业务逻辑处理,会返回一个ModeAndView 5).Dispatcher查询一个或多个ViewResolver视图解析器,找到ModeAndView对象指定的视图对象 6).视图对象负责渲染返回给客户端 2: 为什么要用spring AOP(面向切面编程)让开发人员可以创建非行为性的关注点,称为横切关注点,并将他们插入到应用程序中, 使用AOP后,公共服务(如日志,持久性,事物等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC允许创建一个可以构造对象的应用环境,然后向这些对象传递他们的协作对象 3:解释一下DI(依赖注入)和IOC(控制反转) 控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外部以减少依赖 4: spring中的BeanFactory与ApplicationContext作用 BeanFactor负责读取bean配置文档,管理bean加载实例化,维护bean之间的依赖关系,负责bean的声明周期 ApplicationContext除了提供上述功能外还提供更完整的框架功能 spring即是一个AOP框架,也是一IOC容器。spring最好的地方是他有助于替换对象,有了spring,只要用javaBean属性和配置文件加入依赖性(协作对象)。 然后可以很容易的在需要时替换具有类似接口的协作对象(spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架) 5: javaBean 最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等也有很大的意义 在JSP程序中常用JavaBean来封装业务逻辑、数据库操作等等,可以很好地实现业务逻辑和表示逻辑的分离,使得系统具有更好的健壮性和灵活性。 2、javabean的优点。 在JSP页面中使用JavaBeans的代码简洁。 JavaBeans也有助于增强代码的可重用性。 它们是Java语言对象,充分利用该语言的面向对象的特征。 3、javabean的序列化 序列化的过程是通过Java标准的对象序列化机制实现的。 首先,JavaBean类必须实现java.io.Serializable接口使类能够被序列化; 然后通过使用java.io.ObjectOutputStream类对bean实例序列化。 序列化的beans被作为资源使用应该具有下面的要求: 存储序列化bean的文件扩展名必须是.ser。 6:spring的事物管理 事物就是对一系列的数据库操作(如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间 有一条出现异常,那么回滚之前吊带所有操作 这样可以防止出现脏数据,防止数据库出现问题 开发中为了避免这种情况一般会进行事物管理。spring也有自己的事物管理机制一般是使用TransactionMananger进行管理 可以通过spring注入来完成此功能 7:ssm 第1个S struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求 第2个s spring是一个业务层框架,是一个整合框架,能够很好的黏合表示层与持久层 第3个 m mybatis是持久层, 8:mybatis与ibatis区别 1、Mybatis实现了接口绑定,使用更加方便。 在ibatis中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。 这可以说是Mybatis最重要的改进。 2、对象关系映射的改进,效率更高 而在Mybatis中,除了兼容ibatis2.x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句sql将查询出的dto对象自动封装成所需的对象。 3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。 和hibernate一样,mybatis也有缓存机制 一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,所以当session commit或close后,缓存就会被清空 二级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache 9:进程和线程之间有什么不同? 一个进程是一个独立的运行环境,它可以被看作一个程序或者一个应用。而线程是进程中执行的一个任务,java运行环境是一个包含了不同类和程序单一进程,线程可以被为轻量级进程,线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源, 10:多线程的好处是什么? 在多线程程序中,多个线程并发的执行提高工作效率,cpu不会因为某个线程需要等待资源而进入空闲状态,多个线程共享堆内存,由此创建多个线程去执行一些任务会比创建多个进程更好。举个列子:servlets比CGI更好,是因为servlets支持多个线程,而CGI不支持。 11:线程优先级的理解? 每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的,我们可以定义线程的优先级,但是这个并不能保证优先级的线程会在低优先级的线程前执行,线程优先级是一个int变量(1-10),1代表最低优先级,10代表最高优先级。 12:linux基本操作命令 基本命令有: ls:查看文件与目录的命令 cd:切换目录和打开文件 cp:复制 rm:删除 cat:打开文本文件,查看文本文件内容 find:查找 13:BS和CS的区别 BS是客服端,CS服务端,CS比较安全一点, 14:java bean的实例化? 使用类构造器实例化,使用静态工厂方法实例化,使用实例化工厂实例 化 15:Mybatis的传参方式? 字符串传参,JAVA实例化传参,map传参, 16:(美元符号)$和(井号)#的区别? (1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号 , (2)$将传入的数据直接显示生成在sql中, (3)#方式能够很大程度防止sql自动注入, (4)$方式无法防止SQL自动注入, (5)$方式一般用于传入数据库对象,例如传入表名, (6)一般能用#就别用$ 17:resultType 和 resultMap的区别? resultType就是返回的类型, resultMap返回时一个结果集, 18:高并发解决方案 高并发的解决方法有俩种,一种是使用缓存、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费: 19:cookie和session的区别? cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 20:hashmap和hashtable的区别? HashMap不是线程安全的, HashTable是线程安全的一个Collection。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 21:map的四种遍历 1,在for-each循环中使用entries来遍历, 2,在for-each循环中遍历keys或values 3, 使用lterator遍历 4,通过键找回值遍历 22:tomcat和weblogic的优缺点 WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。WebLogic不开源不免费。 Tomcat服务器是一个免费的开源的Web 应用服务器,Tomcat 技术先进、性能稳定,运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;但是项目大的时候Tomcat无法满足需求 23:Jsp的九大内置对象 1,request对象 2,response对象 3,session对象 4,out对象 5,page对象 6,application对象 7,exception对象 8,pageContext对象 9,config对象 24:springMVC中的M,V,C,分别代表什么? m代表model模型,v代表view视图,c代表controller,控制器。 25: 26:Spring注解方式 @RequestMapping @Controller @Service @RequestParam 27:Spring有几个模块 Spring核心容器 Core Spring AOP Spring ORM Spring DAO Spring WEB Spring上下文 Context 28:String和StringBuffer的区别 (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringBuffer类对象为可修改对象,可以通过append()方法来修改值 (2)String类对象的性能远不如StringBuffer类。 29:hibernate的缓存机制 Hibernate有Session一级缓存和SessionFatory二级缓存。 30:栈和队列有什么区别 (1)对插入和删除操作的"限定"。 (2)队列先进先出,栈先进后出。(记住这个就可以了) (3) 遍历数据速度不同。 31:冒泡排序法 依次比较相邻的两个数,将小数放在前面,大数放在后面。