Talk is Cheap, Show me the Code! <<网站首页文章列表

  • 魔神重返战场!厄祭战争的巴巴托斯:第四形态

    被MG巴巴托斯:第四形态的液压杆以及优秀的可动所吸引,在淘宝预定了这块2019年亚洲的万代模型,在几个月的漫长等待之后终于补款了。前两周收到货,迫不及待进行了撸胶。 没有工具的战损 没有战斗过的巴巴托斯是不完整的,巴巴托斯就应该破损。本着这一原则,我在巴巴托斯作死战损的路上,越走越远。我没有胶佬的喷涂、阴影、做旧工具和技术,那怎么办呢?鞭炮大法是绝对不会上的,那么就剩锉刀了,没错,就是用锉刀。我的思路就是,先锉刀锉一锉,在零件的凸起处使劲摩擦,怎么锉怎么对。然后用黑色水笔在锉刀磨损处上个色,待自然干之后,用干纸巾进行清理。干纸巾不会将黑色水笔的上色完全擦干净。然后对颜色太深的地方进行800目或者1200目的打磨,使磨损严重的地方看上去更光滑。然后,就完事了,看看头:![图片](https://oomabc.com/staticsrc/img/202006/02/1591084957568f3a5d68b3c5b4287b17b67cd7aafe172.jpg)是不是还真那么回事?哈哈,要求不能太高,与胶佬不能比,不能比!!! -------- 直接上图![图片](https://oomabc.com/staticsrc/img/202006/02/15910850847070d3569b5184747e485fd292e44e41f29.jpg)![图片](https://oomabc.com/staticsrc/img/202006/02/1591085138598cbd5ad71db604a3da3f981844737d37a.jpg)![图片](https://oomabc.com/staticsrc/img/202006/02/1591085162955f8d05485cd624140ad2bd974368f4724.jpg)![图片](https://oomabc.com/staticsrc/img/202006/02/1591085184388af0123420af84843841cbaf81f653a9b.jpg) 经典姿势![图片](https://oomabc.com/staticsrc/img/202006/02/15910852247568b4dd7b1b9174dec834b2da8d788ef59.jpg) 包装盒姿势![图片](https://oomabc.co

    巴巴托斯   万代   高达   模型   铁华团   2020-06-02 浏览(6) 阅读原文>>
  • 来聊一聊这个被淘汰的图片验证码

    前言这里只讨论验证码的实现方法,不对验证码的用户体验进行探讨。下面就是今天要讨论的验证码样子:![图片](https://oomabc.com/staticsrc/img/202005/31/15908963708353912f9d6699c40babb335bf835eab827.jpg)从上图可以看出,这个验证码分为两部分:+ 点击区域(包含文字“猎技公网上科络”,其实就是猎上网络科技)。+ 下方提示区域(包含文字“猎上网络”),提示用户要在点击区域按顺序点击哪些文字。 -------- 点击区域的原始文字分布通过CSS定位,将点击区域的图片展示给用户,通过JS让用户可以在该区域的文字上进行点击和取消点击。 随机定位该区域文字是通过程序进行了随机定位,目的就是打乱顺序,提高识别词组的难度。 随机缩放对所有文字进行了随机的缩放,为了肉眼可辨认,缩放值在一定范围内,再次提高文字识别难度。缩放的原则就是人眼可以快速识别,但是干扰了机器识别。 随机旋转对所有文字在一定角度内进行了旋转,进一步提高识别难度。变形的原则就是,人眼快速识别,但是干扰机器识别。可以进一步对文字进行扭曲等等。 随机颜色对所有文字进行文字前景色的随机,结合背景色的混淆,进一步提高识别难度。 文字识别的干扰还可以对文字区域进行背景图片填充,通过增加像素点的颜色干扰提示识别难度。有时候增加背景图之后,背景图会与随机的文字颜色进行融合,不仅提高了机器识别难度,更增加了肉眼识别难度。因此可以在文字的同坐标下,增加一个与之同缩放同旋转的大一号的浅色相同的文字,作为文字描边。这个描边是在目标文字之下的,所以不会是一个完全描边,但是大大降低了肉眼识别难度。---- 目标文字分布通过CSS定位,将提示区域的图片展示给用户,并在图片前方提示用户“按顺序

    验证码   Java   图片处理   Canvas   2020-06-02 浏览(2) 阅读原文>>
  • 搜索引擎入门——ElasticSearch的基本查询

    快速预览不管处于什么年龄阶段,我个人在学习新事物的时候总会有一个迫切的诉求,那就是希望新事物能以旧方式呈现。所以,我也希望在搭建好ElasticSearch之后,它能像其它数据存储引擎一样,让我快速的进行数据的预览、查询、新增。不知道是不是我的思想过于陈旧了,总觉得熟悉的面貌能让我快速进入角色,开始学习。好在我也找到了一款Chrome插件,让我们对ElasticSearch数据进行预览等操作。![图片](https://oomabc.com/staticsrc/img/201910/28/15722296647314c5ee3921d514ec5adb1f11d0477d175.jpg) Dejavu The Missing Data Browser and Web UI for Elasticsearch.它是一款ElasticSearch专用的浏览器插件,支持ES的查询、数据导入、语句分析等功能:+ 导入数据的方式支持在线JSON,JSON文件、CSV文件+ 在线进行数据查询、过滤、数据统计+ 进行数据的CRUD操作![blockimg](https://oomabc.com/staticsrc/img/201910/28/157222969364193b245fadd104a179943e05659981aab.jpg)上图就是插件打开之后的主页面,需要输入ES的地址,以及我们需要预览的index的名称,这里是position,截图中的数据都是在我通过json文件导入之后的。当然,我们可以使用官方推荐的Kibana。 Import Data![blockimg](https://oomabc.com/staticsrc/img/201910/28/15722299661141f3137807f8b4d109c22755bfc80af6d.jpg)点击Upload File按钮边上的问号,可以看下格式说明。简单来说,Json格式就是一个Java对象的Json字符串。准备好文件直接上传就行了,不过建议文件大小不要过大,几十兆就行了,否则浏览器容易卡死。其它功能,我也没做过多的使用,这里就不展开介绍了,大伙自己个儿去试试看吧。 查询SearchElasticSearch提供的RESTful

    搜索引擎   ES   ElasticSearch   2019-10-29 浏览(197) 阅读原文>>
  • 搜索引擎入门——启动第一个ElasticSearch单机节点

    地转天旋,万事开头难。 斗霜傲雪二十年,堂堂剑气尚寒。 戎马倥偬一生,多少失败成功? 试看大千世界,依旧海阔天空。其实吧,启动一个单机的Elasticsearch(下文称ES)节点,非常简单。之所以会有这么一首诗,完全是为了装,贱笑,贱笑了! Elasticsearch简介ES是应用非常广泛的分布式搜索引擎和分析引擎。著名的ELK中的E就是ES,L指的是Logstah,它用于收集数据(日志),K指的是Kibana,它是一个可视化的操作和分析工具。ES可以为几乎所有类型的数据提供实时搜索和分析功能。无论是结构化数据、非结构化数据、数值型数据、甚至是空间地理数据,ES都能以支持快速搜索为前提,有效的对其进行存储和索引。通过它,我们不进行可以进行快速搜索,还能通过聚合、统计等功能来发现数据中隐藏的趋势。ES的分布式特性可以很轻松的进行集群扩展,以解决数据量和查询量快速增长带来的问题。ES解决的不仅仅是搜索的问题:+ 给我们的网址添加一个搜索框,当然这解决的是基础的搜索问题+ 储存和分析海量数据,比如访问日志、性能指标或其它案例数据+ 可以实时的通过机器学习为用户行为数据进行建模+ 作为业务上自动化工作流的存储引擎+ 作为空间地理信息管理系统(GIS),为空间数据进行管理、集成和分析+ 为其它场景的海量数据查询、分析提供基本能力使用ES的场景千变万化,但是其基本的索引和查询方式都是一样的。 数据输入作为一个分布式的文档存储引擎,ES不会按行(一行包含多列)来存储数据,取而代之的是更为复杂的且序列化过的JSON文本。如果你运行的是一个多节的ES集群,那么索引数据将会分布在各个节点,而且可以通过任意节点访问到所有数据。 为什么这里是JSON,应该是ES进行了封装,屏蔽了Lucene层面的D

    搜索引擎   ES   ElasticSearch   2019-10-28 浏览(191) 阅读原文>>
  • 择其善而从之——我为什么开始学习ElasticSearch

    人生天地之间,若白驹之过隙,忽然而已。 感慨刚毕业与同学合租打网游的场景仿佛还在眼前,现在参加工作都已经九年了,这时间流逝的速度一点不亚于“过隙白驹”啊!九年时间,我工作过三家公司,包括现在这家,三家公司的工作时间分别是一年、四年、4年。像我这个跳槽频率,应该可以算低了,特别是我们这一行。而且,其中有八年时间我都专注于Java领域的搜索引擎开发;往细节说,就是专注于垂直领域的基于Solr的搜索引擎开发。所以,在“Solr应用于垂直搜索”这个领域,我应该可以算得上专家了,至少时间上差不多够到专家门槛了。来现在这家公司之前,面试过几个公司,对我的技术和业务能力还算认可,不过他们都要求我转ElasticSearch。关于这个ES,我也是听说过,只是没用过。所以我问他们,为什么选这个框架而不是Solr(之所以这么问,有一部原因是我一直使用的Solr居然被人看不起)?是基于数据量考量还是基于功能考量。大部分人都没有颇具说服力的理由,主要的原因有以下几条:1. ElasticSearch 是一个分布式搜索引擎框架,分布式又是互联网热门词汇2. ElasticSearch 实时性比较好3. ElasticSearch 支持的数据量更大4. ElasticSearch 查询性能更高,尤其是大数据量的时候但是一问具体有测试报告或者自己做过测试没有,都说没有。问号脸???没有调查就么有发言权。当时针对这几个理由,我也无力反驳,谁叫我不懂ElasticSearch呢。----- 理性分析不过话说回来,为什么我遇到的公司的技术负责人选技术这么随意呢?ElasticSearch 能搭上分布式的船就选它?分布式自带大数据属性,所以就是一个互联网公司了?而且部署了支持大数据的分布式搜索引擎的互联网公司?暂且不纠结是不是面试官不屑于跟我说明具体

    ElasticSearch   ES   Solr   搜索引擎   2019-10-12 浏览(242) 阅读原文>>
  • 君子性非异也,善假于物也——功能强大的Postman

    君子性非异也,善假于物物也!相信大部分开发人员,尤其是后端开发,都听过postman这款堪称神器的软件吧。它的一切都是为API而生的:+ 管理API:创建、更新、删除、执行我们开发的接口+ 分享API:可以将我们编写的接口共享给小组其他成员,比如将写好的并经过良好自测的接口提供给前端同学+ 控制API版本:通过版本号,我们可以同时管理接口的多个版本+ API的自动化测试:通过postman,我们可以很简单的就是实现接口的断言测试下面我们就先从入门使用开始介绍postman的常用功能和技巧吧。------ 基础我使用的是postman的mac版本,所以后续的介绍都是基于这个版本的。当我们打开postman之后,在Collections菜单中默认是没有内容的,不过官网已经为我们准备了一个[完整的学习样例](https://docs.postman-echo.com/)。打开这个网站之后,你会看到如下页面:![blockimg](https://oomabc.com/staticsrc/img/201909/21/15690767925025a5fef3bbd3b4eabacd8de6ef572638b.jpg)这是学习样例的共享API页面,也就是接口文档页面,我们直接点击右上角的Run in Postman按钮,浏览器会打开我们本地的Postman软件然后倒入整个学习样例接口:![blockimg](https://oomabc.com/staticsrc/img/201909/21/1569077253599adc167d2da9b4c429033da442d85c76d.jpg) 集合(Collection)+文件夹(Folder)左边Collections中,Postman Echo就是一个API集合,而里面的Request Methods或者Headers就是这个集合下的细分文件夹。所以,我们针对一个独立的项目可以创建一个Collections,然后为不同的模块创建不同的文件夹。你可以随意运行学习样例中的几个Request,有个初步的感觉。 接口文档当我们完成了一些接口的开发及自测之后,就可以将这

    API   Postman   2020-05-31 浏览(380) 阅读原文>>
  • 实现一个关于队列的伪需求是一种怎样的体验

    最近花了一天的时间,在实现一个关于队列扩展的伪需求。就是当队列消息有积累的时候,如果对队列中的消息进行去重,或者说在一定范围内去重。 场景比如,有一个用于通知搜索引擎进行职位索引更新的消息队列,消息内容就是职位主键positionId,当职位数据更新频繁的时候,在队列中积累了100个消息,其中有30个消息都是关于同一个职位A的。那么,我的需求就是如何在这些消息被消费前,将其根据职位主键进行去重,也就是说,职位A的索引更新,我只想执行一次,而不是30次。我之所以把这个需求称为伪需求,因为队列本身就是为了有序进行任务的一个数据结构,即先进先出。而经过去重,本质上就是对于同一个主键,都只执行一次,因此顺序是不能严格保证的,不过在主键上还是保留了大方向上的有序性。即使是伪需求,对于我们目前的情况来说,还是很有必要的。 需求针对的数据范围从目前的索引更新日志分析看来,任务高峰时期,在几十毫秒内会有十来个相同的消息(每个消息都是一批职位主键)连续从队列中被消费。我自己定义的数据范围的概念就是:当队列中消息积累的某个时刻,针对这些积累的数据进行去重,这些积累的数据就是数据范围,这是一个动态的数据范围。每当进来一个消息,就会针对当前的数据范围进行去重,保证当前数据范围不会存在重复数据。发生这种重复的现实原因就是,索引更新队列的通知服务是开放的,公司内部很多其他服务都会通知搜索引擎进行数据更新。比如职位服务在发布、更新职位时,算法服务在进行职位匹配后,数据统计服务在统计职位数据后等等。而且很多时候,由于功能的先后接入以及缺乏相关良好的规划,甚至会出现一些重复通知的情况,在一个调用链中,上下游可能会重复通知索引更新队列

    队列   rabbitmq   Spring   过滤器   2019-10-18 浏览(175) 阅读原文>>
  • 局域网域名解析服务配置——BIND域名解析

    已经很久没更新博客了,最近在忙公司“上云”的项目,也就是将应用从自有IDC机房迁移到阿里云上。于是乎,服务器相关配置的任务都落到我头上了:+ 服务器hostname设置+ 搭建内网域名解析服务 + 服务器nameserver配置 BIND BIND(Berkeley Internet Name Domain)是现今互联网上最常使用的DNS软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。 安装BIND服务在事先准备好的DNS服务器A(IP地址是172.16.1.1)上,通过命令来安装BIND服务:bashyum install bind.x8664 -y安装成功之后,可以通过命令查看关于BIND服务的文件目录:bash[root@dns-server etc] rpm -ql bind/etc/logrotate.d/named/etc/named/etc/named.conf/etc/named.iscdlv.key/etc/named.rfc1912.zones/etc/named.root.key/etc/rndc.conf/etc/rndc.key/usr/sbin/named/usr/sbin/named-checkconf/usr/sbin/named-checkzone/usr/sbin/named-compilezone/usr/sbin/named-journalprint/var/named/var/named/data/var/named/dynamic/var/named/named.ca/var/named/named.empty/var/named/named.localhost/var/named/named.loopback/var/named/slaves[root@dns-server etc]+ /etc/named.conf:bind的主配置文件+ /etc/named.rfc1912.zones:定义域名空间解析明细的文件+ /usr/sbin/named-checkconf:检测/etc/named.conf文件语法+ /usr/sbin/named-checkzone:检测zone和对应zone文件的语法 named.conf配置bash[root@dns-server etc] more named.conf//// named.conf//// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS// ser

    DNS   BIND   域名解析   named   2019-09-09 浏览(205) 阅读原文>>
  • 搜索引擎入门——什么是中文分词以及它对于搜索引擎的意义

    什么是分词分词就是将连续的字序列,按照一定的规范重新拆分、组合成词序列的过程。通常字序列是无意义或者弱意义的,而词序列是具有完整意义表达的最小单元,它比字序列饱满但比短语简练。所以分词的直接目的就是将一段文本,提取出一系列最符合文本本意的词序列。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,但是词之间是没有形式上的分界符的,所以中文分词大多借助词库字典来进行分词。比如一句话:我是一个年过半甲的程序员,比较合理的分词结果就是我、是、一个、年过半甲、的、程序员。不过,分词的最终结果受应用场景、分词技术综合影响,具体的结果会稍有不同。比如,垂直领域的搜索引擎大多行业相关,所以其停用词(stopword)范围也不一样。上面例子中的我、是、的都被看做停用词,不会被索引,因为搜索这些关键字会被认为是无意义搜索。而对于年过半甲这个词,由于不是一个通用的词语,所以在基于词库的分词器中可能也不会被分出。 停用词(stopword)人类语言包含很多功能词。与其他词相比,功能词没有什么实际含义。最普遍的功能词比如限定词(“这”、“那”、“个”、“啊”等),这些词帮助在文本中描述名词和表达概念,如地点或数量。介词如:“下”,“上” 等表示两个词的相对位置。这些功能词的两个特征促使在搜索引擎的文本处理过程中对其特殊对待。第一,这些功能词极其普遍(词的文档频率很高)。记录这些词在每一个文档中的数量需要很大的磁盘空间。第二,由于它们的普遍性和功能,这些词很少单独表达文档相关程度的信息。如果在检索过程中考虑每一个词而不是短语,这些功能词基本没有什么帮助。在信息检

    搜索引擎   分词   中文分词   2019-08-13 浏览(379) 阅读原文>>
  • 搜索引擎入门——Solr查询参数详解以及如何使用Java完成对接

    零、前言经过文章[《搜索引擎入门——启动第一个Solr应用 》](https://oomabc.com/articledetail?atclidf9b37293ec184ab6ad4d672327057dd7)的介绍,我们已经成功搭建了一个搜索引擎服务。通过使用Solr提供的rest接口,我们已经能够完成索引重建、更新以及查询的功能。本章主要介绍以下几个方面的内容:+ 查询界面的基本使用:基本关键字查询、二次查询、排序、分页、默认查询字段、返回字段设置等等。+ 查询语句的调试:主要是进行关键字查询得分的调试,可以清楚的看到每一个结果所匹配的条件以及详细得分计算情况。+ 关键字高亮与摘要:搜索引擎常见的功能,对命中的关键字进行高亮展示。+ 高级自定义查询:主要是借助solr封装的一些函数进行字段的简单计算,最终干预文档得分。------ 一、基本查询![图片](https://oomabc.com/staticsrc/img/201907/24/15639473826215ea242bf30ce49149aad6480e98c91a3.jpg)上图是我们项目中使用的一个职位索引的查询页面,这是Solr启动之后我们所要重点关注的查询页面。 普通查询语句 q这个参数可以直接输入关键字,那么它查询的字段就是schema.xml中配置的默认查询字段keyword。关于schema.xml的相关配置可以参考另一篇文章[《搜索引擎入门——聊聊schema.xml配置》](https://oomabc.com/articledetail?atclidadb7b81f31ca4b45b1315b3af89a9c23)。那么,qjava的查询结果与qkeyword:java的查询结果是一样的。这个q里面可以设置任意多组查询条件,比如qpositiontitle:java cityname:上海 functionname:技术,就是搜索上海的技术职能下的java岗位。多组条件可以用AND符号连接,如果都是AND可以用空格代替,系统自动使用defaultOperator配置的连接符。当然我们也可以进行

    Java   搜索引擎   edismax   查询条件   solrj   2019-07-24 浏览(579) 阅读原文>>
  • 搜索引擎入门——聊聊schema.xml配置

    Java   搜索引擎   schema   分词器   2019-07-24 浏览(325) 阅读原文>>
  • 搜索引擎入门——启动第一个Solr应用

    零、关于Solr摘自维基百科: Solr(读作“solar”)是[Apache Lucene](https://zh.wikipedia.org/wiki/Lucene)项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr 4还增加了NoSQL支持。 Solr是用Java编写、运行在Servlet容器(如[Apache Tomcat](https://zh.wikipedia.org/wiki/ApacheTomcat)或Jetty)的一个独立的全文搜索服务器。 Solr采用了[Lucene](https://zh.wikipedia.org/wiki/Lucene) Java搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。 Solr强大的外部配置功能使得无需进行Java编码,便可对其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制。 因为2010年Apache Lucene和Apache Solr项目合并,两个项目是由同一个[Apache软件基金会](https://zh.wikipedia.org/wiki/Apache%E8%BD%AF%E4%BB%B6%E5%9F%BA%E9%87%91%E4%BC%9A)开发团队制作实现的。提到技术或产品时,Lucene/Solr或Solr/Lucene是一样的。 Solr的历史2004年,Solr作为CNET Networks为公司网站添加搜索功能的一个内部项目,由Yonik Seeley创建。 后来Yonik Seeley随Grant Ingersoll和Erik Hatcher创建了LucidWorks(原名Lucid Imagination),公司提供商业支持、咨询和Apache Solr搜索技术的培训。2006年1月,CNET Networks决定捐赠其到Apache软件基金会顶级项目Lucene,公开发布其源代码。像在Apache软件基金会的任何新项目一样,其进入了一个潜伏期,以助于解决组织、法律和金融问题。2007年1月,Solr结束

    Solr   Java   搜索引擎   2019-07-24 浏览(345) 阅读原文>>
  • Java对象结构以及Java锁

    java对象结构 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 对象头(Header)对象头又可以分为两个部分:MarkWord和Klass+ Markword第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开指针启压缩)中分别为32bit和64bit,官方称它为“MarkWord”。+ Klass Pointer对象头的另外一部分是Klass类型指针,即对象指向它的类元数据的指针(所以也可以称为元数据指针),虚拟机通过这个指针来确定这个对象是哪个类的实例。所占空间大小为64bit,即8字节(开启指针压缩,大小为4字节)。+ 数组长度(只有数组对象有)如果对象是一个数组, 那在对象头中还必须有一块数据用于记录数组长度。这是一个int类型的数值,所占空间为4字节。 实例数据(Instance Data)这里面包括了对象的所有成员变量,其大小由各个成员变量的大小决定,比如:byte和boolean是1个字节,short和char是2个字节,int和float是4个字节,long和double是8个字节,reference是8个字节(开启指针压缩,reference是4字节)。 静态属性的所占空间不计算在对象内存的大小中,因为它们存放在方法区。 对齐填充(Padding)第三部分对齐填充并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。由于HotSpot的虚拟机的自动内存管理系统要求对象起始地址必须是8字节的整数倍,就是对象的大小必须是8字节的整数倍。而对象头部分正好是8字节的倍数(1倍或者2倍),因此当对象实例数据部分没有对齐时,就需要通过对齐填充(P

    Java   对象结构      MarkWord   2019-07-23 浏览(235) 阅读原文>>
  • 重温Java设计模式——适配器模式

    前言程序设计模式其实是前人在不断探索过程中总结出来的,符合一定的开闭原则并且相对来说足够优雅的代码范式。经历过足够长的项目洗礼,其实用性自然是不用怀疑。既然是在编码过程中衍化而来的范式,那么我辈在开发过程中也会或多或少的用到,或者说自然而然的写出来。所以,关于Java设计模式的介绍,主要是帮大家规范平时的代码。换句话说,帮助大家缩短从自热而然的初窥门径到熟练运用的所花费时间。至于具体的代码,大家其实不用过于在意,关键是领会其思想,解决了什么问题。 关于适配器模式百度百科对适配器一词的解释: 适配器是英语Adapter/adaptor的汉语翻译。适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。Java的适配器模式中的适配器,也是起到了一个转换的作用,将目前手头有单不匹配的功能接口转换成适用的目标接口。更专业的解释是: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。话不多说,下面记录一些我借鉴一些技术文章并结合自己的想法,而进行的一些测试。![图片](https://oomabc.com/staticsrc/img/201906/21/1561088076827de97c411b3d9476b8d35ab82e426b2c6.jpg) 电脑电源适配器我先根据我们最常接触的电源适配器来进行抽象,应用下适配器模式。首先定义一个供电电源接口类PowerSource.java:Javapackage designpatterns.adapter.e3;/ @author Smile.Wu @version 2015-10-19 电源接口 /public interface PowerSource { int supplyPower();}定义一

    Java   设计模式   适配器   2019-07-01 浏览(1042) 阅读原文>>
  • 开发一个简单的集成编译、打包、服务检测、依赖发布的模块

    什么是持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。 减少风险 一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况,减少假定。 减少重复过程 减少重复的过程可以节省时间、费用和工作量。说起来简单,做起来难。这些浪费时间的重复劳动可能在我们的项目活动的任何一个环节发生,包括代码编译、数据库集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,让人们的时间更多的投入到动脑筋的、更高价值的事情上。 任何时间、任何地点生成可部署的软件 持续集成可以让您在任何时间发布可以部署的软件。从外界来看,这是持续集成最明显的好处,我们可以对改进软件品质和减少风险说起来滔滔不绝,但对于客户来说,可以部署的软件产品是最实际的资产。利用持续集成,您可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成。如果出现问题,项目成员马上就会被通知到,问题会第一时间被修复。不采用持续集成的情况下,这些问题有可能到交付前的集成测试的时候

    集成发布   Shell   服务监控   2019-06-09 浏览(331) 阅读原文>>
  • 1  2  3  4 
    blogTest
    分享文章
     
    使用APP的"扫一扫"功能,扫描左边的二维码,即可将网页分享给别人。
    你也可以扫描右边本博客的小程序二维码,实时关注最新文章。