Spring MVC基于MVC模式(模型(Model)-视图(View)-控制器(Controller))实现,能够帮助你构建像Spring框架那样灵活和松耦合的Web应用程序。 核心类与接口 DispatcherServlet 前置控制器 HandlerMapping 处理器映射 Controller 控制器 ViewResolver 视图解析器 View 视图处理 Spring MVC的请求流向 当用户在浏览器中点击链接或提交表单的时候,就会产生HttpRequest。 请求首先会来到DispatcherServlet,DispatcherServlet会查询一个或多个处理器映射来确定将该请求发给哪一个控制器,根据请求所携带的URL信息来进行决策。如果没有找到合适的控制器,通过defaultHandler返回Response给浏览器。 在对应的控制器中,控制器开始处理请求、创建模型数据并将模型数据打包并标示出用于渲染输出的View名称,接着把模型和视图名发送回Dispatc 继续阅读 >>


李猛 18/04/27 23:12:09
7-4 排座位(25 分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。 输入格式: 输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系,其中关系为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查询的宾客编号。 这里假设朋友的朋友也是朋友。但敌人的敌人并不一定就是朋友,朋友的敌人也不一定是敌人。只有单纯直接的敌对关系才是绝对不能同席的。 输出格式: 对每个查询输出一行结果:如果两位宾客之间是朋友,且没有敌对关系,则输出No problem;如果他们之间并不是朋友,但也不敌对,则输出OK;如果他们之间有敌对,然而也有共同的朋友,则输出OK but…;如果他们之间 继续阅读 >>


殷健翔 18/04/27 21:19:46
注:本文中的部分内容摘抄自他人博客,如有侵权,请联系我,侵删~ 本篇博客主要讲述 synchronized 关键字的实现原理以及 JDK 1.6 后对 synchronized 的种种优化。synchronized 的使用不再赘述。 博主目前依旧存在的疑惑 请在阅读完此篇博客之后,帮助博主回答这三个问题: 多线程争夺 Monitor 的具体过程是怎样的?是根据 ObjectMonitor 中的 _count 值判断当前 Monitor 是否被锁定吗? JVM 如果检测到在单线程环境下执行同步代码(StringBuffer),是会进行锁消除呢,还是会使用偏向锁? 对于偏向锁的撤销过程及膨胀过程,博主只是在一些博客的基础上给出了自己的理解!不权威,建议阅读源码,博主对这部分知识的讲解持怀疑态度,如果在阅读的过程中发现博主对偏向锁的撤销与膨胀理解有误,请指出,感激不尽~(网上基本上没有从源码角度分析的,对于偏向锁撤销与升级的详细过程也是众说纷纭) 引言 我们先来看一份代码: 继续阅读 >>


董恒毅 18/04/27 11:38:27
2018年6月18日更新: 前一段时间,将MySQL升级到8.0后,MyCLI这个插件无法使用了,于是在它的GitHub上提出了一个Issue,最近得到了回复。 在MySQL 8.0使用mycli要先确保PyMySQL>=0.6.7 ,亲测有效。 pip3 install pymysql 2018年5月1日更新: 多谢楼下小伙伴的提醒,MyCLI确实更强大。 MyCLI 简介 MyCLI 是一个易于使用的命令行客户端,可用于受欢迎的数据库管理系统 MySQL、MariaDB 和 Percona,支持自动补全和语法高亮。它是使用 prompt_toolkit 库写的,需要 Python 2.7、3.3、3.4、3.5 和 3.6 的支持。MyCLI 还支持通过 SSL 安全连接到 MySQL 服务器。 如何在 Linux 上为 MySQL 和 MariaDB 安装 MyCLI 在 Debian/Ubuntu 发行版上,你可以很容易的像下面这样使用 apt 命令 来安装 继续阅读 >>


李猛 18/04/25 13:21:41
本文是我看了http://python.jobbole.com/88291/后加上自己的一些感想所创 我们都知道,IO比CPU慢很多个数量级,而传统的IO,是阻塞型的,CPU花在等待IO上的时间很多,那么想要提高并发量,选择解决CPU在等待IO上花费的大量时间是一个比较好的出路。 先来看一个阻塞型IO的例子。 同步阻塞下载程序 该脚本的功能是下载10个网页。 import socket urls = ['/'+str(i) for i in range(10)] host = 'www.baidu.com' def fn(url): sock = socket.socket() sock.connect((host,80)) # 这里会阻塞直到发送成功 #send不会阻塞 sock.send(('GET %s HTTP/1.0\r\nHost: %s\r\n\r\n' % (url,host)).encode('utf-8')) respon 继续阅读 >>


李余通 18/04/24 23:53:57
在c++的STL中有函数可以直接对数组元素进行全排列,即next_permutation和pre_permutation,这两个函数都可以实现全排列,只是排列的顺序不同,next_permutation作用为向后排序,而pre_permutation作用为向前排序。 需要头文件#include <algorithm> 示例 #include <iostream> #include <algorithm> using namespace std; int main() { int nums[10]; for( int i = 0; i < 10; i++ ) { nums[i] = i + 1; } int n; cin >> n; do { for( int i = 0; i < n; i++ ) { cout << 继续阅读 >>


王良 18/04/24 22:50:15
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 言归正传,让我们一起进入虚函数的世界。 虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的 继续阅读 >>


楚东方 18/04/24 11:59:24
毫无营养的博客,纯粹给自己公众号打广告~ 新开的一个公众号,大家记得加关注了 公众号的内容主要是关于自己的一些学习生活上的总结以及blog上的一些文章了~ 作者:YinJianxiang 发表于 2018/04/23 00:49:58 原文链接 https://blog.csdn.net/YinJianxiang/article/details/80045200 阅读:63 评论:2 查看评论 继续阅读 >>


殷健翔 18/04/23 00:49:58
前言 说实话自己已经很久没有更新博客了,一方面是自己在这地方天天摸鱼,不好好学习,没什么可以更新的东西;令一方面,自己是在太懒,没办法,毕竟在一个非211、985学校的所谓“实验班”待着,学习太差,蒟蒻一个,还得应付一天到晚的通原、信号与系统、模电、数电…没办法,学业要紧…学业要紧…(不能挂科)不过期间还是水了一次数学建模美赛(当然还有其他的比赛),虽然有很多的不足,完成的也不够好,但感觉第一次比赛还是应该多想些积极的方面。也挺感谢自己的两个队友书记(主要建模和翻译,顺便帮我写paper)和时神(网络大神,负责算法编程)的,(至于我,苦逼写(bian)paper,latex排版,还有协助时神算法实现)要是没有他们可能也就没有这次的机会。至于结果,只拿到一个S,不算特别好,甚至感觉有点窝囊。当然也恭喜那些拿M奖和H奖的童鞋,真的很优秀^_^ 日程 2018年数模美赛时间在北京时间2月9日6点至2月13日9点举行(真的很无语,离春节就一个星期,一个蒟蒻背井离乡,真的挺凄惨的) 201 继续阅读 >>


殷健翔 18/04/23 00:14:40
Python中一共有三种推导式,做一个简述。 推导式的结构 开始符号 处理结果 迭代对象 过滤条件 结束符号 列表推导式 读取输入的内容并转成整数。 [int(x) for x in sys.stdin.readline().split() if x != '\n'] 开始符号:[ 结束符号:] 处理结果:int(x) 迭代对象:for x in sys.stdin.readline().split() 过滤条件:if x != '\n' #实际上这句话可以不要 会生成一个类似[1,2,3,4]的列表 生成器表达式 这个和列表推导式很类似,只是开始符号和结束符号变成了()。 生成器的好处是惰性计算,不会一下子占用太多内存。 集合推导式 这个和列表推导式很类似,只是开始符号和结束符号变成了{}。 {x**2 for x in [1,2,3,4,1,2,3] if x != 1} ==>{16, 9, 4} 字典推导式 符号:{} 处理结果k:v #e 继续阅读 >>


李余通 18/04/22 10:23:44