设计模式演绎-抽象工厂模式
定义 Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 为创建一组相关或相互依赖的对象提供一个接口,而无须指定它们的具体类。 通用类图 通用代码/* 抽象产品类 */public abstract class AbstarctProductA{ // A产品的共有的方法 public void shareMethod(){ } // A类产品必须实现的方法 public abstract void doSomething();}// 省略抽象产品B/* 产品A1的实现 */public class ProductA_1 extends AbstactProductA{ // 实现抽象类的要求 public void doSomething(){ }}// 省略其他产品实现类/* 抽象工厂类 */p...
读《软件开发本质论》
书籍信息 中文书名: 软件开发本质论英文书名: The Nature of Software Development作者: [美]Ron Jeffries译者: 王凌云 阅读感悟 我们最终想要的是价值,提供价值的是功能特性。功能特性发布的越早,我们就能越早提供价值。 基于价值的的管理比基于时间或工件等不提供价值的事物更胜一筹。 根据功能特性做计划很简单,只要在必要的时候才进行估算。根据以往完成的工作量来安排下一阶段的工作,效果会更好。 采用逐渐增加功能特性的增量式开发方法,要求我们每隔几周就能开发出小而完整的产品。所开发的必须总是能够正常运行,而且其设计也是良好的。 开发工作必须要交付真正可用的功能特性。 专注于价值。 目的、自主与专精是提高员工满意度和工作效率的三大驱动力。 目的来源于具体的业务。开发团队需要专门配备一位业务人员(产品负责人或客户),由他来指导团队确定哪些功能特性需要首先完成,哪些可以推迟。业务人员负责将疑虑或问题告诉团队,而不是解决方法,团队一起努力解决。 自主能够给整个团队带来责任感。 专精源自迭代过程。每经过一次迭代,都会完善完成一词的定...
Centos7安装Chrome浏览器
2018年7月17日更新: # 不需要那么麻烦,一条命令搞定yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 以下是原文: Centos7默认的是Firefox,但还是更喜欢Chrome。以下是安装方法。 # 添加Fedora中文社区提供的镜像源sudo wget http://repo.fdzh.org/chrome/google-chrome-mirrors.repo -P /etc/yum.repos.d/sudo yum install google-chrome-stable 补充:Centos7上Chrome有各种小问题,用了30分钟之后,卸载,换回了firefox- -# 再补充:经测试,安装Chrome-beta版本没有任何问题了。 sudo yum install google-chrome-beta
乔布斯:遗失的访谈(1995)
这是乔布斯在1995年接受的一次采访的视频。无意中看到深受触动。收藏,分享。
将Spring Boot Application设为服务
通过Spring Boot构建的项目,可以在pom中设置,使用maven生成jar包,而非传统的war包。相较war包,jar包简化了实施的难度,但在windows下,需要想办法将jar设置成开机启动,否则重启就是个悲剧了。将ja包装为一个windows 服务是一个很好的办法。下面具体说说怎么做。 如何构建可运行Jar<packaging>jar</packaging> <!--这里是jar--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version></parent> <dependencies> ....</dependencies> <build> <p...
内网环境中的BS系统前端埋点
行业软件的运行环境通常有三个特点:没有外网、浏览器版本低、业务优先。我们要做前端埋点,就必须考虑这三点。 监控谁行软的前端埋点,主要是为了分析用户的使用路径,用以改善冲浪率;分析用户在页面的驻留时间,用以改善信息传递的准确性;识别出哪些功能是主要关注功能。基于此点,我们设置监控的对象应为: 页面的button元素 页面的a元素 浏览器的页面后退 浏览器的页面关闭 记录操作时间、操作人、操作元素的相关信息、url轨迹 怎么监控使用js对button和a绑定onclick事件,并捕获page的onbeforeunload事件,结合url轨迹来判断是返回还是关闭 怎么记录对于频繁操作,不应每次触发都往后端post数据,最好使用localStorage;先将埋点捕获的日志写入localStorage中,然后择机提交,比如页面关闭时、用户退出时、或者每5分钟,提交后清空对应的key值。 附录 localStorage的兼容性 九种缓存机制对比
Tess4J文字识别过程记录-未完成...
考虑到产品未来可能需要对图片中的文字进行识别分析,所以抽空我做了一点初步的尝试。暂且写下来做个记录吧。 选型经过一番寻找,锁定了tesseract。tesseract是一个开源的OCR引擎,支持中文识别。Tess4J提供了tesseract面向java的api封装。 安装 使用tess4j必须先安装tesseract,我的系统环境是centos,可以很方便的使用yum安装。为了识别中文还需要安装中文datafile。 sudo yum install tesseract sudo yum install tesseract-langpack-chi_sim.noarch //简体中文支持 其他操作系统,需要参考tesseract的说明安装。 然后在java项目中,通过maven引入tess4j。目前3.x版本里最新的是3.4 <dependency> <groupId>com.sun.media</groupId> <artifactId>jai_imageio</artifactId> ...
解决 Spring Cloud Zuul 前端跨域请求问题
正在做的一个微服务架构的项目中,不出意料的在前端请求时遇到了跨域的问题 stats code: 401。以下就是我们采取的解决方案。 在zuul的入口类,即注解为@EnableZuulProxy的类中,增加以下代码: @Beanpublic CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); //允许跨域 config.setAllowCredentials(true); //允许向该服务器提交请求的URI,*表示全部 config.addAllowedOrigin("*"); //允许访问的头信息,*表示全部 config.addAllowedHeader("*"); //允许的meth...
ajax-post参数传递方式
今天在写一个测试的ajax请求的时候,突然忘记了怎么用request body 传参。借这个机会,总结一下。当从前端通过ajax向后台发起一个post请求时,一共有三种方式传递参数。 通过url传递参数 ajax:通常采用形如以下的js代码。这样实质上是拼成了这样一个url : http://lefer.cn/getUserInfo?username=lefer $.post({ url: "http://lefer.cn/getUserInfo", data: { username:"lefer", }, success: function( result ) { alert(result); }}), java:通常在controller中采用形如以下的代码来接受参数。 @RequestMapping("/getUserInfo")public void getUserInfo(@RequestParam String ...
设计模式演绎-工厂方法模式
定义 Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to subclasses. 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其他类。 通用类图 Product 是抽象产品类,ConcreteProduct是对Product类的具体实现 Creator 是抽象创建类,也就是抽象工厂,ConcreteCreator是实现工厂,如何创建产品类就是在ConcreteCreator类中实现。 通用代码/* 抽象产品类 */public abstract class Product { // 产品类的公共方法 public void method1(){ //实现业务逻辑 } //抽象方法: 在实现类中必须实现 public abstract void ...
