第一个MVC程序
Hello SpringMVC配置版
新建一个Moudle , springmvc-02-hello , 添加web的支持!
确定导入了SpringMVC 的依赖!
配置web.xml , 注册DispatcherServlet
12345678910111213141516171819202122232425262728<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" vers ...
什么是SpringMVC
回顾MVC?什么是MVC
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。
是将业务逻辑、数据、显示分离的方法来组织代码。
MVC主要作用是降低了视图与业务逻辑间的双向偶合。
MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。
Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。
最典型的MVC就是JSP + servlet + javabean的模式。
Model1时代
在web早期的开发中,通常采用的都是Mod ...
声明式事务
声明式事务回顾事务
事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!
事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。
事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。
事务四个属性ACID
原子性(atomicity)
事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用
一致性(consistency)
一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中
隔离性(isolation)
可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏
持久性(durability)
事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中
测试给userDao接口新增两个方法,删除和增加用户;
12345//添加一个用户int addUser(User user);//根据username删除用户int deleteUser(String username); ...
B君的游戏
题目-B君的游戏题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1714
题解典型的Nim游戏,需要求SG函数,打表暴力。
ac代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <cstdio>typedef unsigned long long ull;const int MAX_DIG = 64;int sg[] = {0, 1, 2, 4, 8, 16, 32, 64, 128, 255, 256, 512, 1024, 2048, 3855, 4096, 8192, 13107, 16384, 21845, 27306, 32768, 38506, 65536, 71576, 92115, 101470, 131072, 138406, 172589, 240014, 262144, 272069, 38055 ...
整合Mybatis
整合Mybatis步骤1. 导入相关jar包
junit
12345<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version></dependency>
mybatis
12345<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version></dependency>
mysql-connector-java
12345<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-jav ...
AOP
AOP代理模式,是AOP的基础,一定要先搞懂它
静态/动态代理
什么是AOPAOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP在Spring中的作用提供声明式事务;允许用户自定义切面
以下名词需要了解下:
横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 ….
切面(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。
通知(Advice):切面必须要完成的工作。即,它是类中的一个方法。
目标(Target):被通知对象。
代理(Proxy):向目标对象应用通知之后创建的对象。
切入点(PointCut):切面通知 执行的 “ ...
Nim游戏
题目-Nim游戏题目链接:51Nod—1069 Nim游戏
ac代码123456789101112131415#include <stdio.h>#define _MAX 1001int main(){ int N, stone, tag = 0; scanf("%d", &N); while (N--){ scanf("%d", &stone); tag ^= stone; } //tag为0则为后手赢,否则为先手赢 printf("%c\n", tag == 0 ? 'B' : 'A'); return 0;}
静态/动态代理
代理模式AOP的底层机制就是动态代理!
代理模式:
静态代理
动态代理
学习aop之前 ,先了解一下代理模式!
静态代理静态代理角色分析
抽象角色 : 一般使用接口或者抽象类来实现
真实角色 : 被代理的角色
代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 .
客户 : 使用代理角色来进行一些操作 .
代码实现
Rent . java 即抽象角色
1234//抽象角色:租房public interface Rent { public void rent();}
Host . java 即真实角色
123456//真实角色: 房东,房东要出租房子public class Host implements Rent{ public void rent() { System.out.println("房屋出租"); }}
Proxy . java 即代理角色
123456789101112131415161718192021222324//代理 ...
使用注解开发Spring
使用注解开发说明在配置文件当中,要引入一个context约束
12345678910<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.or ...
博弈论
博弈论Bash Game巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。
分析先剖析题意——每次可以取1~m个,那存在如下几种情况:
n%(m+1)==0,此时,无论先手取几个,后手都可以取i个使每轮是m+1个,最终先手必输。
n%(m+1)!=0,此时先手先取n%(m+1)个,后手取k个,先手再取l个使k+l=m+1,最后一次即为先手取得。
例子51Nod—1066 Bash游戏
NIm GameNim Game:m堆n个物品,两人轮流取,每次取某堆中不少于1个,最后取完者胜
分析所有物品数目二进制异或 为0,则先手必输 所有物品数目二进制异或不为0,则后手必输
从另一个角度思考这个问题,如果物品数量随机,那么每个数目的每一位上1或0概率相同,
如果有奇数个堆,那么1的个数为偶数或者奇数的概率相同,
如果有偶数个堆,那么1的个数为偶数的概率略大1/(m+1),
也就是说异或结果的每一位为0或1的概率几乎差不多,而先手必输要求异或结果每一位都为0,其实输的概率很小
例子51Nod—1069 Nim游戏
SG函数当我们面对 ...





