- 博客(43)
- 资源 (10)
- 收藏
- 关注
原创 Python学习笔记 模块介绍
模块导入模块Python官方教程让我们在Python解释器中练习。但是当我们结束解释器,所有的代码都消失了。如果我们希望让代码永久保存的话,就需要将它们保存到文件中。每一个以.py结尾的文件,都是一个Python模块。我们可以在代码中使用import关键字导入其他模块。print('--------------导入模块--------------')import sysprint(f'{sys.pa
2017-03-31 22:58:02 389
原创 Python学习笔记 控制流和函数
控制流条件语句Python只有一种条件语句,那就是if语句。如果需要多重分支,使用if-elif-else结构。Python没有switch语句,条件语句只有if这么一种。而且在Python中表达某个数在一个范围之间不需要两个条件用&&连接,直接写成4 <= i <= 5这样的就行了。i = 5if i <= 3: print('1<=3 is true')elif 4 <= i <=
2017-03-31 21:40:02 434
原创 设计模式(十八) 中介者模式
当我们进行多人聊天的时候, 如果程序写成一对一的结构,那么当人数一多的时候程序就无法维护了。所以更好的做法就是抽象出一个聊天服务器,每个用户只和服务器进行通信。这样抽取出一个中介者的设计模式,就是中介者模式。如果系统中有大量对象需要互相通信,我们就可以思考该系统是否可以使用中介者模式进行重构。下面我们来写一个聊天室的小例子。首先需要一个聊天室,内部有一个List保存所有消息。聊天室还有一个方法用于显
2017-03-30 01:09:46 379
原创 设计模式(十七) 迭代器模式
迭代器模式是现在使用非常广泛的一种模式,Java、C#等很多语言都是用迭代器创建集合,然后提供for-each语法糖让我们能够方便的遍历集合。如果对Java或C#等语言的集合比较熟悉的话,那么迭代器模式你也一定很熟悉。首先我们来编写迭代器的接口。该接口有两个方法,next()和hasNext(),用于判断是否存在下一个值并获取当前值。public interface Iterator { b
2017-03-30 00:47:41 330
原创 设计模式(十六) 解释器模式
解释器模式是一种行为型模式,它的主要作用是用一种方式来实现对表达式或文法的处理。我们可以使用解释器模式处理语言的解析,在设计计算机语言的时候解释器模式很有用处。解释器模式可能需要用到一点编译原理的知识。不过我自己编译原理的内容都忘光了,所以这里不做编译原理的任何介绍了。直接来看代码吧。我们来做一个不含括号的四则运算的解释器。解释器模式首先需要一个表达式接口,其中有一个方法用于解析表达式的值。publ
2017-03-30 00:23:01 298
原创 设计模式(十五)命令模式
命令模式也是一种行为型模式,当我们的系统中需要处理各种命令(例如命令行)的时候,可以考虑使用命令模式,将命令封装为对象。这样和将命令直接硬编码到程序中相比,无疑是更好的。我们来做一个在线测评系统(OJ)的后端。我们需要检测一下当前后端有多少种可用的编译环境。检测方法很简单,就是使用各种编译环境的-version参数来查看一下版本,如果获取到版本号就说明当前编译环境是可用的。首先,我们新建一个接口,作
2017-03-29 20:21:07 363
原创 Java学习笔记 调用外部程序
在Java中可以调用外部程序,这需要通过Process等类来实现。创建进程先来介绍一下Process的创建,我们需要使用ProcessBuilder类。如果需要命令行参数的话,则传入多个参数。比方说下面我就创建了一个查看Java版本号的ProcessBuilder。ProcessBuilder pb = new ProcessBuilder("java","-version");ProcessBui
2017-03-29 19:59:17 387
原创 设计模式(十四)责任链模式
前面讨论了创建型模式、结构型模式,今天我们来讨论一下行为型模式。责任链模式,就是我们讨论的第一种行为型模式。责任链模式具体不容易说出来,但是如果看一看责任链模式的实际例子就很容易明白了。最典型的例子就是Java EE Servlet中的过滤器,以链式方式对请求进行过滤了。当我们遇到类似需求的时候,也可以使用责任链模式来解决。下面我们来模拟一下Java Servlet中的Filter。首先,需要请求和
2017-03-29 17:12:02 244
原创 设计模式(十三)代理模式
代理模式也是一种结构性模式,它的主要作用是创建一个现有对象的代理,以便我们能够针对对象的生命周期、访问权限等进行控制。代理模式和适配器模式的区别是:适配器模式主要用于现有接口和新接口之间的转换和衔接,而代理模式对现有接口进行控制,所以代理模式不能改变对象的接口。假设我们有一个字符资源类,它实现了资源接口,并且能够随意设置字符串的值。public interface Resource { St
2017-03-28 23:19:52 263
原创 设计模式(十二)享元模式
如果系统中可能存在大量相同的对象,那么我们可以建立缓存池之类的东西,将这些重复对象进行复用。这种设计模式就是享元模式。假设有一个游戏,里面需要汽车和摩托车两种载具。我们希望这些载具可以在游戏中复用,而不是每次都创建新对象。所以这个例子就可以使用享元模式来做。首先是汽车和摩托车的抽象。我们使用Visible接口表示这个对象将要在游戏中显示。public interface Visible {
2017-03-28 21:21:43 305
原创 一点Python学习资源
Python是一门流行的动态语言,优点是学习简单、功能强大、类库丰富。缺点是性能没有Java等编译型语言好。现在Python在网站开发、大数据处理、网络爬虫等领域使用非常广泛。而且哪怕你不从事这些工作,也可以学一学Python,然后把它当做一门脚本语言来使用,在日常使用中也可以发挥重要作用。Python有两个版本,2和3,而且它们是不兼容的。由于Python3出来了也有些年头了,所以我推荐直接学习P
2017-03-26 18:18:17 504 1
原创 玩一玩微信公众号开发(二) 管理凭据和自定义菜单
管理access_tokenaccess_token介绍在前面我们成功的使用了Spring Boot Web程序和微信对接。但是这仅仅是一个开始,我们还需要获取access_token,也就是凭据,才能进行之后的工作。微信开发文档有如下介绍。 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_toke
2017-03-26 18:01:20 966
原创 玩一玩微信公众号开发(一) 接入系统
一开始我准备学一学微信开发。后来看了一下文档,需要自己搭服务器进行接口对调。有点麻烦所以就没继续学下去。现在学习过了Kotlin、Spring Boot很多东西,感觉可以比较方便的进行开发了。今天就来回过头学习一下。准备工作申请公众号首先说明一下,有两个微信相关平台,微信公众平台和微信开放平台。公众平台是我们运营微信号的主要地方,我们要想申请订阅号、公众号等都需要到这个平台进行申请。微信开放平台则是
2017-03-23 20:46:06 5921 8
原创 一点.NET学习资源
.NET平台是微软为Windows推出的一套跨Windows平台的开发平台,它提供了一个类似Java虚拟机的托管运行环境(CLR),提供了几种运行在.NET平台上的优秀的编程语言(C#和Visual Basic等),以及一整套强大的.NET类库。.NET在windows上使用非常广泛,我们安装一些游戏,往往就需要.NET框架的支持。另外微软还提供了.NET平台上开发图形界面程序的工具(WinForm
2017-03-22 21:44:38 597
原创 设计模式(十一)外观模式
外观模式是另一种结构型设计模式,当我们想要隐藏系统的复杂实现,想客户包含简单的使用接口的时候,就可以使用外观模式。我们需要创建一个外观类,提供要给用户暴露的方法。外观模式的优点就是用户和系统解耦,系统可以独立于用户修改,缺点就是用户虽然和系统解耦了,但是转而和外观类耦合。所以将来如果需要修改外观类将是一个麻烦的事情。我们用代码来说明一下外观模式吧。假设有这么一个生产流程:工厂生产产品需要一个请求,请
2017-03-22 02:04:22 490 2
原创 设计模式(十)装饰器模式
装饰器模式是一种非常有用的结构型模式,它允许我们在不改变类的结果的情况下,为类添加新的功能。我们来举例说明一下。首先添加一组形状,它们都实现了形状接口。public interface Shape { String getShape();}class Square implements Shape{ @Override public String getShape() {
2017-03-21 23:48:38 363
原创 设计模式(九)组合模式
在数据结构中,有树这么一种结构,转换到设计模式中就是组合模式。组合模式的作用就是以统一的方式处理一组具有树形结构的对象。最典型的例子就是菜单项了,一个菜单下可能包括多个菜单项,每个菜单项都可能包含其他子菜单。下面我们来实现菜单项。由于每个菜单项可能包含其他菜单项,所以我们需要一个列表来保存可能的菜单项。public class MenuItem { private List<MenuItem
2017-03-21 23:16:38 326
原创 Kotlin IO操作
前段时间学习了一点内容,写了一篇Groovy开发工具包 。我当时就在想Kotlin怎么没有好用的文件操作API呢?后来我发现我太傻了,Kotlin这么好用的语言怎么可能没有自己的文件API呢?Kotlin的IO操作都在kotlin.io包下。Kotlin的原则就是Java有的就直接利用,没有的才自己想办法写。因此Kotlin的IO操作主要是依靠扩展方法,在原有的Java类上添加功能实现的。这一点倒
2017-03-21 17:06:25 11537 2
原创 设计模式(八)过滤器模式
过滤器也是一种结构型模式,它允许我们使用不同的规则过滤某一组对象。首先我们来编写一个实体类,用作被过滤的对象。public class Person { private int age; private String name; private Gender gender; @Override public String toString() {
2017-03-21 00:04:29 1286
原创 设计模式(七)桥接模式
参考资料:设计模式—–桥接模式(Bridge Pattern)。一开始我看的是菜鸟教程上的桥接模式,但是它讲的很垃圾,我看了半天没看明白,又查阅了这一篇,终于算是理解桥接模式了。桥接模式也是一种结构型模式,用来解决软件系统中多维度的变化。假如只有一个维度的变化,我们可以直接重写多个子类来解决。但是如果有两个维度同时变化呢?试想一下,汽车在道路上行驶,汽车有轿车、SUV之分,而道路又分为高速公路、市区
2017-03-20 23:29:34 281
原创 设计模式(六)适配器模式
前面介绍的几种设计模式都是创建型模式,用于以不同的方式创建对象。下面我们来看看适配器模式,这是一种结构型模式,用于在两个无关的接口之间搭建桥梁。适配器模式主要用于在新旧代码直接转换。直接看例子吧。假设我们有一个音乐播放器。public interface MusicPlayer { void playMusic();}class MyMusicPlayer implements Music
2017-03-20 22:45:46 298
原创 设计模式(五)原型模式
原型模式算是一种比较好理解的创建型模式了。当创建一个对象的开销比较大(比如需要从数据库或者网络中获取)时,我们可以考虑使用原型模式,创建一个对象的原型,以后获取对象的时候不在new,而是从原型中复制来获取。原型模式一般情况下不单独使用,而是和其他设计模式同时使用。Java等一些编程语言实现了类似Cloneable的接口,我们可以直接利用这些接口来实现原型。废话不多说,直接看代码吧。首先定义一个原型接
2017-03-20 21:58:16 235
原创 设计模式(四) 建造者模式
建造者模式和工厂模式类似,也是一种创建型模式。它们的主要区别在于:工厂模式需要提供一些信息,而对象在最后一步才创建,而建造者模式则是一步一步的创建对象。一个非常典型的建造者的例子是Java中的StringBuilder,通过一步一步的添加字符串,最后构造不可变的String对象。当我们要创建的对象本身内部结构比较复杂,或者当配件的组合非常多的时候,就可以考虑使用建造者模式。直接看代码吧。首先我们需要
2017-03-20 21:07:13 261
原创 做一个Spring Boot小例子
在我的《Spring Boot 框架介绍和使用》里介绍了Spring Boot,但是没有例子。所以这一篇的主要内容就是来做一个小例子。结合我上面那篇一起看效果更佳。运行项目创建项目和上篇文章一样,我用了2.0的快照版本的Spring Boot,因为现版本1.5的Thymeleaf还是2.1的版本,比较旧。在Idea中运行Spring Boot项目不如Spring Tool Suite简单,因为在ST
2017-03-20 01:51:27 2872
原创 Spring Boot 框架介绍和使用
本文参考自Spring Boot文档。Spring Boot 简介Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很简单,就是帮我们自动配置。Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Sp
2017-03-17 23:33:04 32174 1
原创 设计模式(三) 单例模式
单例模式也是一种创建型模式,而且也非常容易理解:在一个系统中可能需要多个配置文件,我们希望这些配置文件的实例只存在一个,而不是存在多个重复的实例。这时候就需要使用单例模式。单例模式有几个要点:一是必须确保只存在一个类的实例。二是类必须自己创建自己,不允许其他类来创建自己。三是必须提供一个方法允许其他类访问单例成员。根据这些特点,我们可以很容易猜出单例类在Java的样子:首先他的构造方法必须是
2017-03-17 23:02:06 330
原创 设计模式(二) 抽象工厂模式
前面我们说了工厂方法模式,当只需要生产某一种类的时候可以使用。如果我们需要生产多类产品,就可以考虑使用抽象工厂模式。抽象工厂模式的使用情景如下:系统需要多种产品,但是每次只需要一组产品。产品种类较固定,产品的组合可能频繁变化。说得好像有点云里雾里,所以先看一个例子吧。首先我们先来定义两组产品接口,一个是调料,一个是食物。public interface Food { String ge
2017-03-15 23:17:42 231
原创 Spring 定时任务
本文参考自Spring官方文档 34. Task Execution and Scheduling。在程序中常常有定时任务的需求,例如每隔一周生成一次报表、每个月月末清空用户积分等等。Spring也提供了相应的支持,我们可以非常方便的按时执行任务。项目准备这里我使用Gradle来建立项目,然后在build.gradle中添加下面一行。springVersion的值是目前最新的Spring版本'4.3
2017-03-15 21:55:58 1560
原创 设计模式(一) 工厂方法模式
介绍关于设计模式,大家可能已经有很多了解了。因此这里直接开始吧。首先来介绍一下工厂方法模式,它是一种创建型模式。在设计模式:可复用面向对象软件的基础中对工厂方法由如下的解释。 工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”当然在实际情况中并不一定非要死板的定义一个工厂接口和多个工厂具体类。如果某个类对象创建复杂,我
2017-03-14 18:16:58 323
原创 Spring Data JPA 介绍和使用
本文参考了Spring Data JPA官方文档,引用了部分文档的代码。Spring Data JPA是Spring基于Hibernate开发的一个JPA框架。如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情。下面来逐步介绍它的强大功能。添加依赖我们可以
2017-03-11 21:50:35 28442
原创 Spring EL 简介
本文参考自Spring官方文档 Spring EL。在Java上有很多表达式语言,在很多领域有各种各样的应用。我们应该很熟悉Java EE的表达式语言吧,让我们能在JSP中随意插入数据。Spring也提供了一个表达式语言并添加了自己的功能,以便可以方便的和各种Spring框架交互。我们在项目中不需要手动管理Spring表达式的这些接口和实例,只需要在合适的时候编写Spring表达式,转换器就会自动解
2017-03-10 00:19:03 4158
原创 用Groovy写Servlet
本文参考自Servlet support,大部分代码引用了原文档。快速开始Groovy语言提供了一个模块,可以让我们写用Groovy脚本的方式来编写Servlet,这叫做Groovlets。先看看一个简单的例子吧。下面这几个例子都来自官方文档。if (!session) { session = request.getSession(true)}if (!session.counter) {
2017-03-07 23:15:24 943
原创 Groovy模板引擎
本文参考自Template engines,一些代码直接引用了文档的内容。模板引擎介绍Groovy语言包含了一个模板引擎功能,可以生成各种类型的格式化文件,非常方便。模板引擎有下面几个,它们都实现了Template接口。SimpleTemplateEngine - 基本的模板StreamingTemplateEngine - 功能和 SimpleTemplateEngine相同,不过支持大于64
2017-03-07 21:06:35 12225 1
原创 Groovy开发工具包
本文参考自The Groovy Development Kit,一些代码直接引用了源文档。Groovy开发工具包(The Groovy Development Kit)的名字一开始迷惑了我,我以为是一些IDE的插件之类的。在实际看了原文档之后,我才明白这是Groovy提供的一组类库和方法,让我们开发更加方便。IO功能在Java中读写文件非常麻烦。由于JDK类库设计问题,以及Java本身的局限性,导致
2017-03-07 01:03:35 939
原创 Groovy 的SQL模块
Groovy的SQL模块提供了对JDBC的抽象,让我们使用JDBC更简单,相关类在groovy.sql包下。本文参考自Working with a relational database,一些代码引用了官方文档,需要了解详细信息请参见原文。连接数据库和原文一样,为了简单这里使用嵌入式数据库HSQLDB,连接时在内存中创建一个数据库。数据库驱动可以使用Maven或Gradle导入,也可以使用Groov
2017-03-06 18:21:26 6097
原创 Groovy 处理JSON
Groovy自带了转换JSON的功能,相关类都在groovy.json包下。本文参考自Groovy文档 Parsing and producing JSON。首先我们定义两个简单的类。class Person { int id String name List<Book> books @Override String toString() { "
2017-03-06 00:08:23 23357 3
原创 Grape 依赖管理器
本文参考自Groovy文档 The Grape dependency manager,本文代码大部分来自Groovy官方文档。Groovy自带了一个嵌入式的jar依赖管理器,这个管理器的主要作用应该是配合Groovy脚本使用,让我们不需要任何额外配置就可以执行Groovy脚本。快速开始我们只要在Groovy文件的导入声明上添加@Grab注解即可,在注解上我们需要添加Maven依赖的相关信息。依赖项默
2017-03-05 21:39:46 1754
原创 Groovy与Java的不同点
本文参考自Groovy文档 Differences with Java,所有代码都是Groovy文档中的,也可以将本文看做英文源文档的简略翻译。Groovy设计时目标之一就是让Java程序员快速习惯Groovy。不过在Groovy中也有很多地方和Java不相同。列举如下。默认导入下面这些包会由Groovy默认导入,我们不需要手动导入这些包就可以直接使用其中的类。java.io.*java.lan
2017-03-05 20:59:07 7264
原创 Groovy 闭包
本文介绍了Groovy闭包的有关内容。闭包可以说是Groovy中最重要的功能了。如果没有闭包,那么Groovy除了语法比Java简单点之外,没有任何优势。但是闭包,让Groovy这门语言具有了强大的功能。如果你希望构建自己的领域描述语言(DSL),Groovy是一个很好的选择。Gradle就是一个非常成功的例子。本文参考自Groovy 文档 闭包,为了方便,大部分代码直接引用了Groovy文档。定
2017-03-05 18:53:58 767
原创 Groovy 快速入门
Groovy是一门基于JVM的动态语言,很多语法和Java类似。大部分Java代码也同时是合法的Groovy代码。本文是快速入门,所以针对语法并不会做非常详细的介绍。如果需要详细语法,请直接查看Groovy官方文档。另外为了省事,本文中的一些代码例子直接引用了Groovy文档。基本内容注释单行注释,以//开头。多行注释,/* */。GroovyDoc注释,和JavaDoc注释类似。 /*
2017-03-04 16:30:31 10200
Spring Boot小例子程序
2017-03-20
纯Servlet和JSP实现的博客小程序
2017-01-22
JSP分页小例子
2017-01-20
Hibernate查询练习小例子
2017-01-11
Hibernate Validator 小例子
2017-01-10
Hibernate查询小例子
2017-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人