1、什么是IoC
Ioc—Inversion of Control,即“控制反转”,是一种思想,
一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
高内聚低耦合的设计能够让构造和演化都更加高效,比如:
- 开发更方便组织分工
- 代码更容易进行复用
- 更容易进行测试
- 软件演化有更好的灵活性,能快速响应需求变化,维护代价更小
2、什么AOP
AOP面向切面,切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
实现策略JAVA SE动态代理、CGLib
spring aop通知(advice)分成五类:
前置通知[Before advice]:
在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:
在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:
在连接点抛出异常后执行。
返回通知[After (finally) advice]:
在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:
环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。
3、什么是MVC
MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,
是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,
将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,
不需要重新编写业务逻辑,达到减少编码的时间。
4、常用的设计模式
1工厂方法 关注对象创建。
2策略模式 关注对象行为。业务变化时,对数据模块的增加修改不受影响,开放封闭原则。
3外观模式 BS/CS
4适配品模式 报表自主开发或购买第三方
5观察者模式 主界面菜单(菜单的Enable、Vieable状态)采用事件驱动方式
Spring(ICO控制反转/DI依赖注入)
5、什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
6、什么是Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
7、什么是JPA
JPA是Java Persistence API的简称,中文名Java持久层API,
是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
SQL
DROP TABLE IF EXISTS `jd_product`;-- 产品信息表
CREATE TABLE `jd_product` (
`prod_no` int(11) NOT NULL AUTO_INCREMENT,-- 产品ID
`prod_name` varchar(150) NOT NULL, -- 产品名称
`prod_TypeId` int(11) DEFAULT NULL, -- 类型ID
`prod_brandId` int(11) not null, -- 品牌ID
`low_price` decimal(9,2) DEFAULT NULL, -- 产品最低售价
`state` int(11) DEFAULT '', -- 状态(上架0,下架1)
`picture` varchar(20) DEFAULT NULL, -- 产品封面图
`gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
`else` int(11), -- 作用于其它
`sales` int(11), -- 销量
PRIMARY KEY (`prod_no`), -- 主键
foreign key (`prod_TypeId`) references jd_protype(`prot_id`), -- 类型外键
foreign key (`prod_brandId`) REFERENCES jd_brand(`brand_id`) -- 外键
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;