落队的飞行兵

飞行火箭兵在探索世界...
私信 关注
rocketeerLi
码龄3年

自由地努力着

  • 203,932
    被访问量
  • 70
    原创文章
  • 35,983
    作者排名
  • 146
    粉丝数量
  • 于 2018-08-10 加入CSDN
获得成就
  • 获得149次点赞
  • 内容获得180次评论
  • 获得465次收藏
  • GitHub 获得104Stars
荣誉勋章
TA的专栏
  • linux
    1篇
  • 比赛
    4篇
  • 硬件学习
    1篇
  • 随笔
    1篇
  • 设计模式
    25篇
  • 计算机视听觉
    12篇
  • 机器学习
    4篇
  • opencv
    1篇
  • 爬虫
    5篇
  • 计算机网络
    1篇
  • 人工智能
    1篇
  • MyEclipse
    1篇
  • Java
    1篇
  • Debug
    5篇
  • LaTex
    1篇
  • 算法题
    1篇
  • 深度学习
    5篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

安装 Centos 7 的两个问题

这几天看了一下鸟哥的linux私房菜基础篇。准备安装一个 Centos 系统学习一下。刚好今天主机的所有硬件都到齐了,于是就开始装机+装系统。安装 centos 系统一共有俩问题,全都是因为使用 UltraISO 直接或间接导致的。强烈不建议使用这个刻录 centos 系统的启动盘。
原创
84阅读
0评论
0点赞
发布博客于 8 月前

IP 代理池的搭建(笔记)

前言去年实习的时候做过爬虫,但是理解的很浅,所以今年趁着在家的时候,又打算认真地学习一下。刚好看到崔庆才老师拉勾网的教程 52讲轻松搞定网络爬虫,于是就跟着学了一下。到代理池这时,由于一些基础东西没整明白,耽误了好一阵,好在整个项目代码量不大。断断续续的,终于在今天对着 github 敲完了一遍,有的地方做了一下小改动。在这里记录一下搭建过程和最后结果。具体参考崔老师的博客:[Python3网络爬虫开发实战] 9.2-代理池的维护 和项目地址:ProxyPool代理池介绍爬虫的反爬方法有很多,最简单
原创
282阅读
0评论
0点赞
发布博客于 1 年前

datawhale 学习笔记——模型融合入门

前言这是 datawhale 数据挖掘学习的最后一次打卡——模型融合,内容很好理解,就是将训练出来的多个模型融合在一起,集成,形成一个效果更好的模型。这次的任务基本上是比较独立的,既没有用到 task3 的特征工程内容,也没有用到 task4 中创建的模型,相对比较独立。不过这次打卡不打算粘贴什么代码了,代码全都在教程里,这里只记录一下我的理解。简而言之,模型的融合方法大致有以下三种:加...
原创
166阅读
0评论
0点赞
发布博客于 1 年前

datawhale 学习笔记——建模调参入门

前言居然又拖到了最后一天才开始打卡,。果然 ddl 是第一生产力。放上这次的教程链接:Datawhale 零基础入门数据挖掘-Task4 建模调参看标题就知道这次的这次的内容是建模和调参。虽然说是零基础入门系列,但是这次的教程对真的零基础的人来讲并不是很友好,还是需要很多前置知识的。主要是机器学习模型方面的教程,教程里给出了几篇作者写的文章。个人感觉需要一定门槛,如果看不懂建议参考其他的。...
原创
209阅读
0评论
0点赞
发布博客于 1 年前

datawhale 学习笔记——特征工程入门

特征工程介绍我理解的特征工程是一种更深层的数据分析,为特定的数据做处理,深挖其中的信息,以便后续模型得到更好的效果。本文是参考天池二手车预测比赛的教程——特征工程做的笔记,task3 中提到了很多特征处理的方法,主要介绍了其中的五种方法:异常数据处理特征构造数据分桶特征归一化特征筛选首先,导入需要的包,并载入...
原创
206阅读
0评论
0点赞
发布博客于 1 年前

datawhale 学习笔记——数据分析入门

写在前面(这部分是废话)这是参加 datawhale 数据挖掘的第一次打卡,打卡内容是数据分析,希望自己能坚持做下去。开始的时候,第一天看了一下题目背景,运行了一下 baseline,刚好中期报告要改,就放下了。今天在这里做一下数据分析这部分的笔记。介绍本文主要是根据天池上的教程进行学习的,一些不理解地方做了笔记,内容没有教程全,附上教程链接:Datawhale 零基础入门数据挖掘-Task...
原创
222阅读
0评论
1点赞
发布博客于 1 年前

使用 PyTorch 处理CUB200_2011数据集

最近在研究一些深度学习的东西,想找一些数据集,第一眼看到 CUB 的时候,就相中它了,数据集大小合适,类别还很多,关键还提供了目标检测的边框,不仅可以做分类,还可以做检测(虽然只是单目标检测~),感觉很酷,想研究一下。CUB 数据集一共 200 个类别,共 11788 张图片,每张图片除包括类别标签外,还有一个标注的物体边框(Bounding Box)、关键点和一些其他属性,算是一个很细粒度的图像分类的数据集了。
原创
1627阅读
3评论
0点赞
发布博客于 1 年前

Arduino 输入引脚悬空时,串口信号不稳定

问题描述最近开始玩 Arduino, 在设置数字引脚为输入端时,发现了一个现象,当引脚没有用杜邦线连接到下拉电阻或上拉电阻时,串口的信号就会发生震荡,很不稳定。引脚用杜邦线接出来但没有连接也是一样的效果。这个现象与我正常理解的不太一样,我理解的是在不接地或者没有信号时,引脚的串口信号会保持一个稳定的状态(保持高电压或者低电压),但事实是,信号会随机变化。但是由于引脚信号在使用过程中需要变化...
原创
1797阅读
3评论
0点赞
发布博客于 2 年前

利用 MSR Identity Toolkit v1.0 中的 GMM-UBM 做语音说话人确认

最近开始搞毕设,刚完成一个小任务,趁着有空,整理一下这学期的实验。时间有点久远了,害怕时间再长一些,自己真的就全忘光了。本实验很大一部分参考了班级里一位萌妹子的博客,在这里贴一下地址:hit说话人确认实验实验中,就写了一些生成配置文件的 python 代码,关于说话人确认部分的代码基本没写;因此感觉,这个实验,有点,,,。。。emm,主要还是自己事情有点多,直接选了个最简单的。
原创
1009阅读
4评论
0点赞
发布博客于 2 年前

lucky boy

本文不讲任何知识,纯属个人随笔,算是这个博客上的第一篇随笔了。突然发现,写着写着,变成了自己保研的经历帖。。。那就改改标题啥的吧,要不文不对题了,刚好最近特喜欢肖茵的《lucky boy》,感觉自己就是个 lucky boy,哈哈哈。
原创
250阅读
5评论
9点赞
发布博客于 2 年前

基于 PyTorch 实现 ResNet-18 并在Cifar-10数据集上进行验证

通常的认识是,神经网络的深度越深,效果越好;但事实并不完全一致,太深的神经网络很容易导致梯度消失或梯度爆炸。ResNet 网络的提出,就是为了解决网络深度增加的问题。ResNet 提出了一个新的网络块——残差块:
原创
4323阅读
15评论
1点赞
发布博客于 2 年前

基于 PyTorch 实现 VGG-11 并在Cifar-10数据集上进行验证

VGG 论文地址:VGG 是一个很经典的卷积神经网络结构,是由 AlexNet 改进的,相比于 AlexNet,主要的改变有两个地方: 使用 3 x 3 卷积核代替 AlexNet 中的大卷积核 使用 2 x 2 池化核代替 AlexNet 的 3 x 3 池化核
原创
3101阅读
0评论
0点赞
发布博客于 2 年前

基于 PyTorch 实现 AlexNet 并在 Cifar-10 数据集上进行验证

这是深度学习课程的第二个实验,实验的主要内容是卷积神经网络,要求实现 AlexNet。但是 AlexNet 的输入不符合 Cifar-10 数据集,因此这里将参数更改了一下,但网络结构没有变,还是五层卷积,三层全连接。虽然对于 32 X 32 这么小的图片,用 AlexNet 有点大材小用的感觉,但实验要求,而且对于初学者来说,AlexNet 还是很经典的,能学到不少东西,直接干就好了。
原创
6482阅读
11评论
7点赞
发布博客于 2 年前

使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证

这是深度学习课程的第一个实验,主要目的就是熟悉 Pytorch 框架。MLP 是多层感知器,我这次实现的是四层感知器,代码和思路参考了网上的很多文章。个人认为,感知器的代码大同小异,尤其是用 Pytorch 实现,除了层数和参数外,代码都很相似。Pytorch 写神经网络的主要步骤主要有以下几步:1. 构建网络结构2. 加载数据集3. 训练神经网络(包括优化器的选择和 Loss 的计算)4. 测试神经网络
原创
2935阅读
5评论
4点赞
发布博客于 2 年前

tensorboardX 报错 OSError: [Errno 22] Invalid argument

最近,在学习 tensorboardX 时,生成了 log 文件,但是,执行 tensorboard --logdir=runs 的时候出现了下面的bug:TensorBoard 1.13.1 at http://DESKTOP-T3AN8OM:6006 (Press CTRL+C to quit)Traceback (most recent call last):File “d:\ana...
原创
819阅读
1评论
0点赞
发布博客于 2 年前

AttributeError: module 'torch.utils' has no attribute 'data' 解决方法

今天在用 pytorch 实现自定义数据读取时,出现了下面这个bug : AttributeError: module 'torch.utils' has no attribute 'data' 原因是自己没有导入 'data' 包,不能通过 '.' 的方式使用;添加 import torch.utils.data 或是 另一种导入包的方式:from torch.utils import data 都可以
原创
14041阅读
2评论
5点赞
发布博客于 2 年前

MyEclipse破解 CI-2018.9.0版本

介绍myeclipse 是 eclipse 进化版,有很强大的功能,但是,它是收费的。这也是阻碍大多数人使用它的原因。作为学生,想使用该工具进行学习,但苦于资金有限,只能进行破解后再学习。本人找了很多的破解教程,最初感觉很简单,就打算直接开搞;但是,按照教程一步一步来,结果发现,自己就是不能成功。为此,我还安装了很多不同的版本,但由于没有找到根本原因,全都以失败告终。后来,仔细研究后才知道原因...
原创
23297阅读
44评论
25点赞
发布博客于 2 年前

找出字符串中第一个字母和最后一个字母是第一次重复且中间没有重复字母的最长子串

请编写一段代码,满足以下要求:给出任意一个字符串,打印一个最长子字符串及其长度,如果有相同长度的子字符串,都要一起打印出来,该子字符串满足以下条件:(1)第一个字母和最后一个字母是第一次重复(2)这个子字符串是满足条件里面的最长的(3)第一个字母和最后一个字母之间的字母不能重复例如,给定字符串为 adsasadm...
原创
1073阅读
4评论
0点赞
发布博客于 2 年前

隐马尔可夫基本思想(HMM)

写在前面我在学习语音处理的时候,课上老师花了很大的精力给我们讲解 HMM 算法。然而当时没有认真听,直到快考试了,才去学。一直觉得 HMM 是一个很神奇的东西,但搞懂它的思想其实并不难。本文不讲算法,只为读者介绍 HMM 的基本思想。马尔科夫链开始,一定要明白马尔科夫链是个什么东西,这是理解 HMM 的基础。马尔科夫链是马尔科夫随机过程的特殊情况,它有两个参数——时间和状态,这两个参数都是...
原创
489阅读
0评论
2点赞
发布博客于 2 年前

快速中值滤波——Python实现

中值滤波是空域中常用的一种滤波方式,是一种非线性的滤波。它的原理就是将窗口像素排序,取中值,然后移动窗口,不断重复取中值的过程。快速中值滤波是中值滤波的优化版,它利用了窗口每次平移时,没有移出窗口的像素点还是排好序的,因此,只需要把新加入的像素点插入到其中即可完成排序。此外,由于我们并不需要一个完整的排序数列, 只需要找到中值就可以了。
原创
3605阅读
0评论
5点赞
发布博客于 2 年前

空域中图像处理算子

空域也叫空间域,是一种像素级上的操作,即直接对图像上的像素值进行增加或减少。空域滤波按照过滤频率的高低,分为平滑(模糊)和锐化,平滑对应低通滤波;锐化对应高通滤波。也可以按照滤波的算法,分为线性滤波和非线性滤波,线性滤波就是滤波过程中,对像素的处理是线性的,如加减乘除等;而非线性滤波就是像素的处理是非线性的,如取最大值、取中值等。
原创
1077阅读
0评论
1点赞
发布博客于 2 年前

快速双边滤波——Python实现

课程的最后一个实验是处理雀斑,网上查找了很多方法,最后我选择了快速双边滤波。但是实验又不能直接调用 opencv 的库,因此,我参照了这个博客,将用 C 写的快速双边滤波改用 Python 重新写了一遍。快速双边滤波是啥呢,官方滴说,它是一种非线性的滤波方法。它最大的特点就是既使用了颜色的相似度,又利用了空间的距离相似度。也就是
原创
5440阅读
7评论
1点赞
发布博客于 2 年前

requests 爬虫的通用结构——爬取芬兰网站

最近在学习爬虫,发现 requests 这个库在爬取小规模网页的时候,非常好用。用 requests 库爬取了几个芬兰的网站,发现,可以用一套代码结构来爬取这种网页。下面介绍一个爬取 芬兰日常 这个网址的代码结构。为了便于理解,这个网站是找的几个当中,最简单的。如果需要爬取更复杂的网站,可以在上面进行扩展。利用 requests 库写的爬虫,无外乎这几个步骤:1. 解析当前的 url,并找出这个 url 页面内所有需要爬取的子链接。2. 获取每个超链接页面的详细信息3. 保存数据
原创
2601阅读
0评论
0点赞
发布博客于 2 年前

Python爬虫——正则表达式基础

正则表达式是处理字符串的一种很强大的工具,我们可以利用正则表达式自由地处理字符串。作为处理字符串的强大工具,正则表达式在处理爬虫的请求内容方面,有着巨大的作用。下面就从 Python 的五个函数开始,来简单介绍一下正则表达式以及它在处理爬虫请求方面的应用。...
原创
225阅读
0评论
0点赞
发布博客于 2 年前

五个简单的 Requests 库爬虫实例

本文是中国大学MOOC上的 Python网络爬虫与信息提取 课程中的笔记,是五个基本的爬虫操作,个人觉得其中的方法比较常用,因此记录下来了。
原创
1514阅读
0评论
1点赞
发布博客于 2 年前

Requests库基本使用

Requests 库介绍Requests 库是一个非常容易上手的 python 爬虫库,相比于 urllib 库, requests 库非常简洁。下面是我在看视频教程的过程中,记录的一些笔记。get() 方法requests 基本的 get 方法首先来看一下 requests 下 get 方法的基本用法,下面代码输出了 get() 方法返回值的类型和状态码(状态码为 200 表示请求成功)...
原创
8366阅读
0评论
9点赞
发布博客于 2 年前

SQL错误(1064):You have an error in your SQL syntax; check the manual that corresponds to your MySQL

在 mysql 中报错:SQL错误(1064):You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR2(32) NOT NULL comment 'P',Ywlx number(5) comment '业务类型',Ywid' at line 2
原创
7132阅读
0评论
0点赞
发布博客于 3 年前

MatplotlibDeprecationWarning: The 'hold' keyword argument is deprecated since 2.0.mplDeprecation)

D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py:3126: MatplotlibDeprecationWarning: The ‘hold’ keyword argument is deprecated since 2.0.mplDeprecation)Setting or unsetting hold (deprecated in...
原创
2392阅读
0评论
0点赞
发布博客于 3 年前

解决利用 opencv 调亮图片时,颜色改变问题

今天写代码时,需要将图片的亮度进行调整,我是直接在读出来的 R、G、B三个通道上分别增加了一个固定的值。由于颜色值是在[0, 255]区间内的,正常来讲,即使超出了这个范围,利用 opencv 进行展示之前的合并中,也是会自动截断的。但是还是出现了颜色改变的问题。代码如下:
原创
1173阅读
1评论
0点赞
发布博客于 3 年前

图像颜色空间转换—— Python 实现

颜色空间指的是组织颜色的特定方式。我们知道,一种颜色可以由 红、绿、蓝 三种颜色组合出来,这里的 红、绿、蓝 三原色就是一种颜色模型。而这种由三原色组织颜色的方法就是一种颜色空间。任何一种颜色,在颜色空间中,都可以通过一个函数表示出来,在 RGB 模型中,函数的参数就是 R、G、B 三原色。当然,同一种颜色,在不同的颜色空间中,由于侧重点不同,表现出来的色彩是不一样的。通常的图片是采用的 RGB 三原色来表示的,所以,现在,我们的目的就是将同一幅图片转换成用其他颜色空间来表示。
原创
2364阅读
0评论
3点赞
发布博客于 3 年前

Python读取并解析 bmp 文件

由于要开始学习图像方面的知识,读写图片是难免的。对图片的结构有一定的了解对理解图片存储还是很有帮助的。由于实验的代码是用 python 写的,因此读取文件就直接使用 python 了,虽然用 C 来读写文件更有效率,但我个人感觉 python 也没有很慢。下面来看一下bmp 文件结构和读取 bmp 文件的过程。
原创
16861阅读
4评论
12点赞
发布博客于 3 年前

DTW 算法的实时语音识别——命令词识别(Python 实现)

这是我们计算机视听觉的第三个实验,也是本学期语音部分的最后一个实验,大概花了两天才写完。上个实验做的是语音编码问题,这个实验是语音识别的事,感觉处理语音还是比较有意思的。
原创
6624阅读
8评论
7点赞
发布博客于 3 年前

人工智能实验

这学期的人工智能实验,一共有三个。个人感觉,除了第二个实验稍微复杂一些之外,剩下两个还是比较简单的。我们是6个人组成了一组,我负责做第二个实验,虽然复杂了一些,但网上的参考还是很多的。人工智能实验已经验收完了,考试也已经完事了,刚好轻松一下,在这里简单介绍一下这几个实验。所有的实验代码在这里给出:人工智能实验 这里就不再粘贴代码了,只给出思想和解决方案。实验介绍实验一:知识表示实验...
原创
2444阅读
2评论
2点赞
发布博客于 3 年前

语音差分编码(DPCM)的实现与改进——Python实现

这是视听觉信号处理的第二个实验——语音差分编码(DPCM)。总体来讲,思路上还是比较简单的,很容易理解。如果编程能力好的话,相信很快就能完成。奈何我太菜了,写了几个晚上才算搞定。做了点扩展,添加了自己神奇的想法,在这里记录一下。先附上代码地址:
原创
1597阅读
0评论
1点赞
发布博客于 3 年前

HTTP 代理服务器的设计与实现

花了好几天才把计算机网络的实验一搞定,在此记录一下这个实验的流程。本实验的要求也是比较简单明了的:(1) 设计并实现一个基本 HTTP 代理服务器。要求在指定端口(例如 8080)接收来自客户的 HTTP 请求并且根据其中的 URL 地址访问该地址 所指向的 HTTP 服务器(原服务器),接收 HTTP 服务器的响应报文,并 将响应报文转发给对应的客户进行浏览。 (2) 设计并实现...
原创
3376阅读
16评论
7点赞
发布博客于 3 年前

org.apache.ibatis.ognl.NoSuchPropertyException解决方法

前几天在写测试文件的时候,发现出现了下面的错误:> org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'et.isPrivate != null'. Cause: org.apache.ibatis.ognl.NoSuchPro
原创
28156阅读
1评论
7点赞
发布博客于 3 年前

双门限法语音端点检测(Python实现)

花了几天时间写完了第一个视听觉信号处理的实验,其实还挺简单的,在这里分享一下。本文介绍一下利用双门限法进行语音端点检测的方法,该方法主要利用了语音的短时能量和短时过零率。端点检测就是在一段包含语音的信号中,准确地确定语音的起始点和终止点,将语音段和非语音段区分开。我们知道,一段语音中,有静音部分和浊音部分,静音部分包括清音、噪音和无声(噪音可以归结到无声中),浊音部分和清音才是我们需要听的语音,因此,可以说只有这两部分才是对我们有用的语音。
原创
10625阅读
22评论
12点赞
发布博客于 3 年前

语音短时过零率计算——Python实现

上一篇文章介绍了语音短时能量,这篇介绍一下语音的短时过零率。短时过零率也是一个比较基础的语音时域特征,下面就来介绍一下。短时过零率就是单位时间穿过坐标系横轴的次数,计算公式如下:
原创
4983阅读
10评论
6点赞
发布博客于 3 年前

语音短时能量计算——Python实现

刚开始学习计算机视听觉,第一个实验是端点检测算法。这个算法实现起来还是比较简单的,主要是该算法利用到的两个数据——语音短时能量和短时过零率。今天先分享一下我计算短时能量的方法。语音短时能量,顾名思义就是计算较短时间内的语音能量。这里的较短时间,通常指的是一帧。也就是说,一帧时间内的语音能量就是短时能量,语音的短时能量就是将语音中每一帧的短时能量都计算出来,然后我们就可以利用这个短时能量数组做很多事情了。通常而言,短时能量用途有以下几个方面:
原创
9717阅读
2评论
5点赞
发布博客于 3 年前

Logistic Regression(逻辑回归)

最近刚开始学习机器学习,想通过博客的方式写一些自己的理解。逻辑回归虽然称为回归,但它却是一个分类算法,一个用来解决二分类问题的算法,它通过将线性回归预测出的值映射到 {0,1} 上来实现分类的(0叫做负类,1叫做正类)。这是一个很简单的二分类算法,它的思想与线性回归很相似:
原创
172阅读
0评论
0点赞
发布博客于 3 年前

局部加权回归

总结一下对 CS229 第三讲中的局部加权回归。线性回归并不能拟合一些特殊的模型,比如,忽上忽下的训练集。当目标函数没有明显的线性关系时,使用线性回归训练出来的线性模型并不能进行很好地匹配。这个时候就可以利用我们的局部加权回归来进行拟合。什么是局部加权回归呢?简单地说,就是当目标函数的线性关系不是很明显时,每次预测一个输入变量 x 的值的时候,选择距离 x 最近的那些点进行建模。通常使用...
原创
346阅读
0评论
0点赞
发布博客于 3 年前

梯度下降、多元线性回归

本文介绍了机器学习中的多元线性回归模型和梯度下降,并利用梯度下降进行推导,是机器学习的基础。
原创
1010阅读
0评论
0点赞
发布博客于 3 年前

CSDN 中利用 LaTex 插入数学公式

LaTex 是一个很强大的数学公式书写工具,最近发现 CSDN 的 markdown 编辑器支持部分 LaTex 功能,很是神奇。这篇文章简单介绍一下了一些比较常用的数学公式和矩阵的书写。
原创
1028阅读
0评论
3点赞
发布博客于 3 年前

VS2017配置 openCV 环境

介绍最近一直想学 OpenCV ,在 Win10 上 VS2017 中配置了好久才成功。期间借鉴了很多博主的博客,为了方便自己以后再配置,在这里记录一下自己的配置过程。下载并安装OpenCVOpenCV 3.4.1 的下载地址在 这里。 选择 Windows 然后下载并解压,解压就是安装,安装的路径可以自己选择,这里我直接安装在了 D 盘。配置环境变量如果你配置过 J...
原创
308阅读
1评论
0点赞
发布博客于 3 年前

23种设计模式

设计模式六大原则——SOLID设计模式的六大原则有:Single Responsibility Principle:单一职责原则 一个类只负责一个职责。Open Closed Principle:开闭原则 一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。Liskov Substitution Principle:里氏替换原则 所有引用基类的地方必须能透明地使用其子类的...
原创
98阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之迭代器模式(Iterator Pattern)

介绍迭代器模式是一种行为型设计模式,它是我们经常使用的一个设计模式,但是基本上不会单独写一个迭代器,大都使用的是 Java 语言内置的迭代器。可以说这是一个融入 Java 语言的设计模式,不止 Java ,其他很多语言都会内置这个模式。下面来看它的定义: Provide a way to access the elements of an aggregate object sequ...
原创
123阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之桥接模式(Bridge Pattern)

介绍桥接模式也叫桥梁模式,是一种结构型设计模式。主要目的是实现类与类之间的解耦。先来看一下它的定义: Decouple an abstraction from its implementation so that the two can vary independently. 将抽象和实现解耦,使得二者可以独立地变化。桥接模式的目的还是很清楚的,就是为了解耦。而且该模式...
原创
80阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之享元模式(Flyweight Pattern)

介绍享元模式是一种结构型设计模式。该模式主要是通过将对象的粒度细分,从而减少创建大量对象所占的内存。下面先来看一下它的定义: Use sharing to support large numbers of fine-grained objects efficiently. 使用共享对象可有效地支持大量的细粒度的对象。享元模式将一个对象分为内部状态和外部状态。所谓内部状态...
原创
135阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之解释器模式(Interpreter Pattern)

介绍解释器模式是一种行为型设计模式,该模式主要目的是解析一串固定模式的表达式。解释器模式与命令模式比较相似,通常利用该模式解析语法树。下面先来看一下它的定义: Given a language, define a representation for its grammar along with an interpreter that uses the representation...
原创
126阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之访问者模式(Visitor Pattern)

介绍访问者模式是一种行为型设计模式,该模式的核心是访问者根据不同的具体类执行不同的方法。这里的具体类一般是一个容器内的不同类,例如,一个公司下的不同职员。所有的具体类都要实现接收访问者访问的方法,然后访问者根据传进来的具体类来判断执行那个方法。先看一下访问者模式的定义: Represent an operation to be performed on the elements o...
原创
153阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之状态模式(State Pattern)

介绍状态模式是一种行为型设计模式。当对象在不同状态下有不同行为时使用,在该模式中,我们将对象的不同状态 定义成不同的类,在这些状态类下有它们各自的行为,然后利用环境类使客户端在调用时,不需要显示地去设置状态之间的转换。下面先来看一下它的定义: Allow an object to alter its behavior when its internal state changes...
原创
890阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之备忘录模式(Memento Pattern)

介绍备忘录模式是一种行为型设计模式。它可以保存一个对象的状态,在需要的时候对其进行恢复,相当于键盘上的 ctrl + z。 下面先看一下它的定义: Without violating encapsulation, capture and externalize an object’s internal state so that the object can be restored...
原创
287阅读
1评论
1点赞
发布博客于 3 年前

Java设计模式之外观模式(Facade Pattern)

介绍外观模式也叫做门面模式,是一种结构型设计模式。它将一系列的类封装起来,避免其他类直接访问这些类,如果要访问这些类,必须经过这个封装的类。这个封装的类就相当于这系列类的门面一样。下面先来看一下外观模式的定义: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a hi...
原创
158阅读
3评论
0点赞
发布博客于 3 年前

Java设计模式之观察者模式(Observer Pattern)

介绍观察者模式是一种行为型设计模式,也叫做发布订阅模式(Publish/subcribe)。当一个对象发生改变时,多个对象需要得到通知,这个时候就需要利用观察者模式来实现。先看一下它的定义: Define a one-to-many dependency between objects so that when one object changes state, all its d...
原创
84阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之组合模式(Composite Pattern)

介绍组合模式是一种结构型设计模式。它一般是 用来创建树状的结构,表示“部分-整体”的层次关系。由于该模式使用的是对象组合的方式来实现的,区别于继承的方式,因此也叫做合成模式。先来看一下它的定义: Compose objects into tree structures to represent part-whole hierarchies. Composite lets clien...
原创
357阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之策略模式(Strategy Pattern)

介绍策略模式属于行为型设计模式。它将各个算法封装起来,可以让调用者在运行时动态选择自己所需要的算法。首先来看一下它的定义: Define a family of algorithms, encapsulate each one, and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式中,利用一个...
原创
160阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之适配器模式(Adapter Pattern)

介绍适配器模式是一种结构型设计模式。该模式的主要功能是将一个类与另一个类的接口匹配起来,使得这两个类最后都实现同一个接口。先来看一下它的定义: Convert the interface of a clss into another interface clients expect. Adapter lets classes work together that couldn`t ...
原创
119阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之责任链模式(Chain of Responsibility Pattern)

介绍责任链模式是一种行为型设计模式,该模式是降低请求者和处理者之间耦合度的解决方案。一个请求者可能对应多个处理者,不同的请求也需要不同的处理者去处理,但是一个请求者如果要持有多个处理者的对象,耦合度未免太高了。而责任链模式就是解决这种问题的。首先看一下它的定义: Avoid coupling the sender of a request to its receiver by gi...
原创
107阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之命令模式(Command Pattern)

介绍命令模式是一种行为型设计模式,它是降低类之间耦合度的一种方式。命令模式中,将每个具体操作封装成一个个命令,调用者只需要发出特定的命令即可实现相应的功能。各个命令类会自动找到实现这个功能的对象并调用它们的方法。下面先来看一下命令模式的定义: Encapsulate a request as an object, thereby letting you parameterize c...
原创
165阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之中介者模式(Mediator Pattern)

介绍中介者模式是一种行为型设计模式,它是降低类与类之间耦合度的有效方式。一般在多个类之间有紧密联系的时候使用。先来看一下它的定义: Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from ref...
原创
126阅读
0评论
0点赞
发布博客于 3 年前

深拷贝与浅拷贝

介绍在写 Java 项目的时候,使用原型模式创建对象是非常常见的,然而 clone() 方法也并不是谁都可以拷贝的。拷贝,有深拷贝和浅拷贝之分,下面我们就来详细看一下两种拷贝方式。浅拷贝浅拷贝就是说,使用 clone() 方法时,对象的有些部分并不进行拷贝。先看一个例子:有一个水果篮,里面可以放入各种水果,我们将它设为可以拷贝的:public class Fruit...
原创
75阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之原型模式(Prototype Pattern)

介绍原型模式属于创建型设计模式,它为对象提供了一种新的创建方式——使用 clone() 方法。通过该方法对对象进行拷贝。被拷贝的对象需要实现 Cloneable 接口,该接口中没有任何方法,实现该接口仅仅是告诉 Java 这个对象是可能被拷贝的,并不表示可以被拷贝。如果要表示可以被拷贝,还需要重写 Object 类中的 clone() 方法,重写之后,就可以使用 clone() 方法进行对...
原创
87阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之代理模式(Proxy Pattern)

介绍 Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问。普通代理模式强制代理模式动态代理模式总结...
原创
99阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之建造者模式(Builder Pattern)

介绍 Separate the construction of a complex object from its representation so that the same construction process can create different representations. 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。例...
原创
157阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之模板方法模式(Template Method Pattern)

介绍 Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm`...
原创
932阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之抽象工厂模式(Abstract Factory Pattern)

介绍抽象工厂模式总结
原创
112阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之工厂方法模式(Factory Pattern)

介绍工厂模式属于创建类设计模式中非常基础的一种,对于它的定义是这样的: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclas...
原创
330阅读
0评论
0点赞
发布博客于 3 年前

设计模式六大原则——SOLID

SOLID设计模式的六大原则有:Single Responsibility Principle:单一职责原则Open Closed Principle:开闭原则Liskov Substitution Principle:里氏替换原则Law of Demeter:迪米特法则Interface Segregation Principle:接口隔离原则Dependence Inver...
原创
10906阅读
5评论
12点赞
发布博客于 3 年前

Java设计模式之常见的单例模式(Singleton pattern)

介绍单例模式是设计模式当中十分常见的一种。它是用来干嘛的呢?简单地说,当某个类创建的对象在整个程序中只有一个时,就可以使用它。在单例模式中,类的构造器是私有的,即你不能通过调用这个类的构造器来创建该类的实例。 作用那么你可能会问,单例模式用于解决什么问题呢?创建的对象保证只有一个,有什么用呢?如果你认为没用那就大错特错了。节省运行资源最直接的作用,就是当程...
原创
70阅读
0评论
0点赞
发布博客于 3 年前

Java设计模式之装饰器模式(Decorator pattern)

介绍给对象添加方法的方式有多种,通常,当说到给对象添加方法时,最直接的就是直接在该对象的类中增加新的方法,但这样在最上方增加方法,不仅更改了原来的代码结构,还会让代码看起来十分臃肿;然后,我们就能想到继承,直接新增加一个类来继承,在子类中添加方法,然而这样做并不够灵活,而且在不断增加方法时,还会出现多重继承的现象,导致代码结构很乱;那么,这时候就需要另一种方式了,这种方式就是组合的方式。关...
原创
139阅读
0评论
0点赞
发布博客于 3 年前