a) List有序【有索引】、Set无序【没有索引、TreeSet底层使用二叉树结构实现,因此有序】css
b) List容许数据重复、Set不容许重复前端
c) 实际开发中可使用Set集合来去除重复数据程序员
a) 数组结构web
b) 链表结构【单向链表、双向链表】面试
c) 键值对ajax
d) 二叉树spring
e) 矩阵数据库
a) HashMap容许null键和nul值,HashTable不容许null键也不容许null值编程
b) HashMap线程不安全,HashTable线程安全json
c) HashMap与HashTable都是无序的,可是TreeMap是有序的
d) 项目中一般状况下要使用properties,Properties是HashTable的子类,可是要求键和值都必须是字符串【通常用来配置一些项目中的初始化数据,例如jdbc、链接池等】
a) JDBC
b) 本身封装JDBC的工具类
c) Commons-Dbutils+dbcp【QueryRunner】
d) SpringJDBC【JdbcTemplate】
e) JPA【配置文件、domain实体类+注解、EntityManager】
f) SpringDataJpa【是Spring对JPA的封装,用起来更简单快捷,极可能还要使用文浩对SpringDataJpa的扩展】
g) Hibernate框架
h) Mybatis
a) Spring表明春天的意思,其实就是程序员的春天
b) Spring有两大核心特色:控制反转(建立对象的权力交给Spring)/依赖注入(建立对象以后,对象的某些属性须要初始化,使用set方法或者构造方法对这些属性进行初始化)、AOP(面向切面编程,在方法执行先后添加其余业务逻辑、底层使用动态代理技术实现,能够用来作例如:权限验证、事务管理、日志记录等功能)
c) Spring是一个容器型框架,内部有不少子框架,分别实现了不少不一样功能,并且相互之间能够无缝集成【spring-jdbc,springMVC,SpringDataJPA】
d) Spring能够和目前市面上其余几乎全部框架集成到一块儿,一般状况下使用FactoryBean方式进行配置
e) 我在项目中使用Spring,哪里须要对象的时候,直接使用@Autowired自动注入就能够了,很是方便。
a) SpringMVC是对Servlet/JSP技术的封装,原来的Servlet用来作项目的时候使用不是太方便【一个Servlet只能处理一种请求】
b) 使用SpringMVC首先要配置中央控制器【DispatcherServlet】(还要加上初始化参数指定SpringMVC的配置文件路径),而后SpringMVC的配置文件中添加配置,经过请求访问路径进行匹配(/xxx/yyy:/xxx匹配Controller类,/yyy匹配类中的方法)
c) /xxx/yyy: 请求首先来到中央控制器中,经过HandlerMapping(处理器映射器)找到相应的处理器(Controller类),而后再使用处理器适配器(HandlerAdapter)处理请求参数的封装以及类型自动转化,经过反射方式执行该控制器类中的该方法,方法执行完毕后通常状况下要求返回一个字符串,再通过视图解析器(ViewResolver)进行解析,最后再默认利用请求转发方式跳转页面。
a) 面向切面编程(Aspect Oriented Programming)
b) AOP自己是由AOP联盟推出的一套接口规范,Spring的AOP实现了AOP联盟规范中的一部分
c) 基于动态代理技术实现:本来有一个接口一个实现类,使用JDK动态代理或者CGLIB动态代理技术生成一个代理类,代理类和被代理类型要求必须实现相同接口,代理类中持有一个被代理类的对象做为属性,在重写接口的方法中调用被代理对象的相应方法,而且在调用以前或者以后添加其余业务逻辑。最后将这个代理对象返回。
d) 好处:下降耦合度(方法调用者与被代理对象之间的耦合度)
e) 能够用来实现事务管理、日志管理、权限验证等等功能,感受在调用方法的时候不知不觉间就插入了其余业务逻辑。
f) Spring的AOP支持配置文件方式和注解方式实现AOP
g) Spring中对事务管理业务加强类还写了不少实现类,只须要把它配置成bean就能够直接使用了。
a) 控制反转(IOC):将建立对象的权力交给Spring来管理,能够经过配置bean标签或者扫描包(@Controller、@Service、@Repository、@Component)的方式,默认使用类名称(首字母小写)做为键,建立的对象做为值存入Spring容器中,并且默认是单例模式,也能够本身指定一个名称做为键
若是是bean标签,可使用id或者name属性指定
若是是注解方式,能够在注解后面加上字符串指定
b) 依赖注入(DI):建立对象以后要给对象的某些属性进行赋值,利用set方法或者构造方法给对象属性赋值。由于在项目中常常要在一个对象中持有另外一个对象做为属性【这种关系称为关联关系】,可是关联关系耦合度过高,为了下降耦合度,利用set方法或者构造方法的参数【从Spring容器中获取,获取到的对象还有多是代理对象】传入,将关联关系变为依赖关系。
a) 最简单的bean标签
b) 实例工厂:配置一个工厂bean,再配置一个目标bean,使用factory-bean属性引用工厂bean的id,使用factory-method指定工厂bean对象中的方法名称,这个方法必须返回一个目标bean对象。
c) 静态工厂:配置工厂bean,可是要加上factory-method指定工厂bean对象中的方法名称,这个方法必须返回一个目标bean对象。
d) FactoryBean:其实就是实例工厂方式,专门用来与其余框架集成【变相的实例工厂,可是工厂方法名称是固定的,必须叫getObject】
a) SpringDataJpa是Spring对JPA的实现封装,用起来更方便,如今目前市面上仍是有20%左右的公司在使用SpringDataJpa
b) 核心接口是Respotory、JpaRepository、JpaSpecificationExecutor
c) SpringDataJpa好处是DAO层只须要写接口继承JpaRepository、JpaSpecificationExecutor接口,不须要咱们本身写实现类
d) 还不够方便,每每咱们都要使用文浩的扩展【只是封装了获取Specification对象的方法】,而后本身再扩展。
a) 前端使用的是easyui框架:easyui框架很是适合用来作管理系统的后台系统,方便实用,基于js、jQuery、css实现,方便理解和学习,easyui内部集成了不少插件,包括咱们使用的tree、datagrid、tabs、form、validatebox、combobox、window、dialog、messager。。。。。这些插件都有一个共同点,建立的时候一般状况下都须要传入一个json对象做为参数。
b) 发送数据到后台:一般状况下都是利用jQuery的ajax,传递json格式请求参数
c) 后台方法中每每也是返回JSON格式的数据:@ResponseBody(SpringMVC就再也不使用视图解析器进行页面跳转,而是利用jackson工具将方法返回值转化为JSON格式的字符串进行响应)
a) 传统方式:req.getParameter()
b) 直接在方法形参列表中写形参变量:形参变量名称与请求参数名称一致
c) 直接在方法形参列表中写形参变量+@ReqquestParam:形参变量名称与请求参数名称不一致
d) 直接使用domain实体类对象接收:实体类对象的属性名称与请求参数名称一致,并且属性必须有set方法、domain实体类必须有无参构造
e) 使用RESTFUL风格:@PathVariable(“aa”) aa字符串仍然要与方法映射中的变量名称一致
f) 请求参数传递过来都是字符串类型,SpringMVC会自动进行类型转化,若转化失败会报400错误
a) 传统方式:三大做用域.setAttribute,在转发到页面,在页面中就能够取出数据,可是这种只支持同步请求
b) Model
c) ModelMap
d) ModelAndView:这三个其实就是将数据保存到请求做用域中,转发以后能获取数据,也只支持同步请求
e) @ResponseBody注解将返回的值【对象、数组、集合、Map集合】自动转化为JSON格式字符串,再利用响应对象中的输出流,这种方式是从此用得最多的,支持异步请求
a) 服务器启动时候【listener配置】
b) 请求访问的时候【全部请求都来到一个中央控制器中,再进行统一分发】
a) 列举具备表明性的问题,可是千万不要说技术性问题
b) N to n错误:断开关联关系,设置为null
c) Datagrid上展现数据,数据中某个属性是懒加载对象的时候,会出现no session:web.xml中添加一个过滤器
d) No Serializer:懒加载对象原理(JPA会自动建立一个类继承懒加载对象的类,而且重写属性的get方法,目的是为了在get方法被调用的时候发送SQL去加载数据,会额外添加几个属性)
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
e) Easyui中常常容易把id选择器写错:在浏览器中按F12查看js报错信息
f) 请求参数传递错误:也能够按F12,去查看请求的参数以及响应消息
a) 通过查看SpringDataJpa接口的继承体系,发现SpringDataJpa默认使用SimpleJpaRepository来建立子类对象,而且生成代理对象,最后返回出来
b) 咱们能够给咱们全部的业务Repository抽取一个公共父接口(BaseRepository+@NoRepositoryBean注解),扩展的方法写在这个父接口中
c) 而后写一个父接口的实现类,继承SimpleJpaRepository,而且实现自定义的父接口中扩展的方法
d) 而后将全部业务Repository继承咱们自定义的父接口(BaseRepository)
e) 由于SpringDataJpa默认使用SimpleJpaRepository来建立子类对象,因此咱们要让SpringDataJpa默认使用咱们自定义的BaseRepository父接口的实现类来建立子类,就须要修改配置文件
factory-class="cn.itsource.ibs.repository.BaseRepositoryFactoryBean
a) 任何系统中都须要权限管理
b) 权限管理通常状况下须要6张表
c) 关系:
d) 经过角色管理功能:能够去控制角色关联哪些用户、也能够控制角色拥有哪些权限
a) 采购模块是进销存系统中必要的核心功能模块,由于销售的商品不是自主生产的,是做为一个中间商赚差价
b) 采购分为采购申请和采购入库两部分
c) 采购是公司内部某部门某员工发起申请,由主管或者经理审核以后实施
d) 采购员线下采购
e) 采购申请完毕
f) 供应商送货上门
i) 没有:直接新增一条数据到库存表中
ii) 有:数量累加、金额累加、入库日期以当前时间为准、单价使用加权平均法计算
(1) 面试的时候切忌说话不流畅、结巴
(2) 将面试官的问题引导到本身熟悉的方向去
(3) 到面试场合中切忌耍手机、注意坐姿
(4) 提高本身沟通表达能力
(5) 回答问题时注意逻辑、条理清晰