public class Test注释 {
/**①写注释的方法,输入/**,然后点击enter
* ②测试float的最小值,有个小tip:按住Ctrl,然后点击MIN_VALUE,可以点击MIN_VALUE
* ③短路与&&、不短路与&,小tips:按住shift+tab减少缩进
* ④选择多行注释的方法:先选中要注释的内容,然后按住Ctrl+shift+/
*/
public static void main(String[] args) {
float maxF=Float.MIN_VALUE;//float类型的最小值
char Wen='\u6587';//Unicode
char Long='\u9f99';
System.out.println(Wen);
System.out.println(Long);
boolean a=(4>9)&&(4>3);//短路与
System.out.println(a);
boolean b=(4>2)&(2>4);//非短路与
System.out.println(a);
System.out.println(b);
}
}
MVC
1、mvc是(model view controller)的缩写,他是一个非常经典的开发模式,在web开发中有着广泛的应用。
2、目的
高类聚低耦合
3、mvc案例
3.1、在model(模型层)中定义一个student类
3.2、在dao层(可以实现对数据库进行操作)中创建一个类studentDao并且写一个查询接口liststudent ( ) ;(先写一个接口,再写实现类,有利于以后功能延伸)
3.3、在dao.impl中创建一个实现类studentDaoImpl是实现studentDao接口
3.4、在service层定义一个接口studentservice
3.5、serviceImpl中实现studentservice接口
3.6、在controller中定义一个类studentController
并且调用studentservice中的查询方法将数据打印在控制台
Spring
我们知道在面向对象设计的软件系统中,它的底层都是由N个对象构成的,各个对象之间通过相互合作,最终实现系统地业务逻辑
齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。
耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson 1996年提出了IOC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中。
IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。
1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。
IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。如下图:
大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。
我们再来做个试验:把上图中间的IOC容器拿掉,然后再来看看这套系统:
图4 拿掉IOC容器后的系统
我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言,这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了,跟别人没有任何关系!
我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下:
软件系统在没有引入IOC容器之前,如图1所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
AOP
Aop:面向切面编程
1.能够将那些与业务无关,却为业务模块所共同调用的逻辑和责任封装起来,
便于减少重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性
2.Spring Aop就是基于动态代理的,当要代理的对象实现了某个接口,就会使用Jdk动态代理
3.如果没有某个接口,就是使用cglib生成一个被代理对象的子类作为代理
//使用aop之后我们可以把一些通用的功能抽象出来,在需要的时候自己使用即可,这样大大的简化了代码量
//常用的aop的有 事务处理 日志管理 权限控制
DI
1.指 Spring 创建对象的过程中,将对象依赖属性通过配置设值给该对象
2.就是给对象的属性设置属性值
SpringMVC工作原理
1. 客户端(浏览器)发送请求到dispatcherServlet前端控制器
2. DispatcherServlet 根据请求信息调用 HandlerMapping ,解析请求对应的 Handler
3. 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由HandlerAdapter 适配器处理
4. HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑
5. 处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View
6. ViewResolver 会根据逻辑 View 查找实际的 View
7. DispaterServlet 把返回的 Model 传给 View (视图渲染)
8. 把 View 返回给请求者(浏览器)
Spring 管理事务的方式
1. 编程式事务,在代码中硬编码。(不推荐使用)
2. 声明式事务,在配置文件中配置(推荐使用)
声明式事务又分为两种:
1. 基于XML的声明式事务
2. 基于注解的声明式事务
Spring 框架中用到的设计模式
1.工厂设计模式 : Spring使用工厂模式通过 BeanFactory 、ApplicationContext 创建 bean 对象
2.代理设计模式 : Spring AOP 功能的实现
3.单例设计模式 : Spring 中的 Bean 默认都是单例的
4.模板方法模式 : Spring 中 jdbcTemplate 、hibernateTemplate 等以Template 结尾的对数据库操作类,它们就使用到了模板模式
5.包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库,这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
6.观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式,spring MVC中也是用到了适配器模式适配 Controller
Mybatis
Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。
作为一个半ORM框架,MyBatis可以使用XML或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
通过xml文件或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。
由于MyBatis专注于SQL本身,灵活度高,所以比较适合对性能的要求很高,或者需求变化较多的项目,如互联网项目。
SpringBoot
在使用Spring框架进行开发的过程中,需要配置很多Spring框架包的依赖,如spring-core、spring-bean、spring-context等,而这些配置通常都是重复添加的,而且需要做很多框架使用及环境参数的重复配置,如开启注解、配置日志等。Spring Boot致力于弱化这些不必要的操作,提供默认配置,当然这些默认配置是可以按需修改的,快速搭建、开发和运行Spring应用。
以下是使用SpringBoot的一些好处:
自动配置,使用基于类路径和应用程序上下文的智能默认值,当然也可以根据需要重写它们以满足开发人员的需求。
创建Spring Boot Starter项目时,可以选择选择需要的功能,Spring Boot将为你管理依赖关系。SpringBoot项目可以打包成jar文件。可以使用Java-jar命令从命令行将应用程序作为独立的Java应用程序运行。
在开发web应用程序时,springboot会配置一个嵌入式Tomcat服务器,以便它可以作为独立的应用程序运行。(Tomcat是默认的,当然你也可以配置Jetty或Undertow)
SpringBoot包括许多有用的非功能特性(例如安全和健康检查)。
Hadoop
1、分布式系统基础架构
2、主要解决海量数据的存储和海量数据的分析计算问题
优势
1)高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
3)高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
4)高容错性:能够自动将失败的任务重新分配
HDFS,是一个分布式文件系统
YARN ,是一种资源协调者,是 Hadoop 的资源管理器
MapReduce 将计算过程分为两个阶段:Map 和 Reduce
1)Map 阶段并行处理输入数据
2)Reduce 阶段对 Map 结果进行汇总