自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

低至一折起的博客

Write the Code,Change the World!!!

  • 博客(114)
  • 问答 (1)
  • 收藏
  • 关注

原创 程序猿谨记

函数不要超过50行。不要一次性写太多来不及测的代码,而是要写一段调试一段。UT和编码要同步做。多写注释方便的往往是自己。碰到一堆问题时,一次只尝试解决一个问题。没把握一眼看出问题症结的时候,老老实实单步调试。设计模式是个好东西,但不要强行使用。没造成可观的损失前不要尝试做性能优化。没事别重复造轮子。大多数情况下Boss不关心技术含量,而且往往简单的解决方案更快更有效果。不要害怕接

2017-12-27 15:27:58 173

原创 Bean Validation 校验实践

前言在应用程序的业务逻辑中,经常会碰到需要校验参数的情况。经常要判断一个 Model 的字段是否为 Null 之类,或者判断长度等。那么在代码层面上,就会需要编写很多校验,影响代码的阅读以及维护,而且造成代码的冗余。应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层...

2019-11-27 14:02:01 255

转载 Java 中的 String 有没有长度限制

转载:https://juejin.im/post/5d53653f5188257315539f9aString是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西容易被忽略的。就如本文我们要讨论的问题:Java中的String有没有长度限制?这个问题要分两个阶段看,分别是编译期和运行期。不同的时期限制不一样。...

2019-08-16 11:07:01 4771 1

原创 SaaS应用12原则:(十二)管理进程

后台管理任务当作一次性进程运行进程构成(process formation)是指用来处理应用的常规业务(比如处理 web 请求)的一组进程。与此不同,开发人员经常希望执行一些管理或维护应用的一次性任务,例如:运行数据移植(Django 中的 manage.py migrate, Rails 中的 rake db:migrate)。运行一个控制台(也被称为 REPL shell)...

2019-08-12 14:41:23 286

原创 SaaS应用12原则:(十一)日志

把日志当作事件流日志使得应用程序运行的动作变得透明。在基于服务器的环境中,日志通常被写在硬盘的一个文件里,但这只是一种输出格式。日志应该是事件流的汇总,将所有运行中进程和后端服务的输出流按照时间顺序收集起来。尽管在回溯问题时可能需要看很多行,日志最原始的格式确实是一个事件一行。日志没有确定开始和结束,但随着应用在运行会持续的增加。12-factor应用本身从不考虑存储自己的输出流。不应该...

2019-08-12 14:40:42 398

原创 SaaS应用12原则:(十)开发环境与线上环境等价

尽可能的保持开发,预发布,线上环境相同从以往经验来看,开发环境(即开发人员的本地部署)和线上环境(外部用户访问的真实部署)之间存在着很多差异。这些差异表现在以下三个方面:时间差异:开发人员正在编写的代码可能需要几天,几周,甚至几个月才会上线。人员差异:开发人员编写代码,运维人员部署代码。工具差异:开发人员或许使用 Nginx,SQLite,OS X,而线上环境使用 Apache,MySQ...

2019-08-12 14:39:58 260

原创 SaaS应用12原则:(九)易处理

快速启动和优雅终止可最大化健壮性12-Factor 应用的进程是*易处理(disposable)*的,意思是说它们可以瞬间开启或停止。这有利于快速、弹性的伸缩应用,迅速部署变化的代码或配置,稳健的部署应用。进程应当追求最小启动时间。理想状态下,进程从敲下命令到真正启动并等待请求的时间应该只需很短的时间。更少的启动时间提供了更敏捷的发布以及扩展过程,此外还增加了健壮性,因为进程管理器可以在授...

2019-08-12 14:39:19 244

原创 SaaS应用12原则:(八)并发

通过进程模型进行扩展任何计算机程序,一旦启动,就会生成一个或多个进程。互联网应用采用多种进程运行方式。例如,PHP 进程作为 Apache 的子进程存在,随请求按需启动。Java 进程则采取了相反的方式,在程序启动之初 JVM 就提供了一个超级进程储备了大量的系统资源(CPU 和内存),并通过多线程实现内部的并发管理。上述 2 个例子中,进程是开发人员可以操作的最小单位。在 12-factor...

2019-08-12 14:38:34 279

原创 SaaS应用12原则:(七)端口绑定

通过端口绑定(Port binding)来提供服务互联网应用有时会运行于服务器的容器之中。例如 PHP 经常作为 Apache HTTPD 的一个模块来运行,正如 Java 运行于 Tomcat。12-Factor 应用完全自我加载而不依赖于任何网络服务器就可以创建一个面向网络的服务互联网应用 通过端口绑定来提供服务,并监听发送至该端口的请求。本地环境中,开发...

2019-08-12 14:37:41 371

原创 SaaS应用12原则:(六)进程

以一个或多个无状态进程运行应用运行环境中,应用程序通常是以一个和多个进程运行的。最简单的场景中,代码是一个独立的脚本,运行环境是开发人员自己的笔记本电脑,进程由一条命令行(例如python my_script.py)启动。另外一个极端情况是,复杂的应用可能会使用很多进程类型 ,也就是零个或多个进程实例。12-Factor 应用的进程必须无状态且无共享任何需要持久化的数据都要存储在...

2019-08-12 14:36:53 150

原创 SaaS应用12原则:(五)构建,发布,运行

严格分离构建和运行基准代码 转化为一份部署(非开发环境)需要以下三个阶段:构建阶段是指将代码仓库转化为可执行包的过程。构建时会使用指定版本的代码,获取和打包依赖项,编译成二进制文件和资源文件。发布阶段会将构建的结果和当前部署所需配置相结合,并能够立刻在运行环境中投入使用。运行阶段(或者说“运行时”)是指针对选定的发布版本,在执行环境中启动一系列应用程序进程。12-facto...

2019-08-12 14:36:09 212

原创 SaaS应用12原则:(四)后端服务

把后端服务(backing services)当作附加资源后端服务是指程序运行所需要的通过网络调用的各种服务,如数据库(MySQL,CouchDB),消息/队列系统(RabbitMQ,Beanstalkd),SMTP 邮件发送服务(Postfix),以及缓存系统(Memcached)。类似数据库的后端服务,通常由部署应用程序的系统管理员一起管理。除了本地服务之外,应用程序有可能使用了第三方发...

2019-08-12 14:35:07 370

原创 SaaS应用12原则:(三)配置

在环境中存储配置通常,应用的配置在不同部署(预发布、生产环境、开发环境等等)间会有很大差异。这其中包括:数据库,Memcached,以及其他后端服务的配置第三方服务的证书,如 Amazon S3、Twitter 等每份部署特有的配置,如域名等有些应用在代码中使用常量保存配置,这与 12-Factor 所要求的代码和配置严格分离显然大相径庭。配置文件在各部署间存在大幅差异,代码却完全一...

2019-08-12 14:34:12 291

原创 SaaS应用12原则:(二)依赖

显式声明依赖关系( dependency )大多数编程语言都会提供一个打包系统,用来为各个类库提供打包服务,就像 Perl 的 CPAN 或是 Ruby 的 Rubygems。通过打包系统安装的类库可以是系统级的(称之为 “site packages”),或仅供某个应用程序使用,部署在相应的目录中(称之为 “vendoring” 或 “bunding”)。12-F...

2019-08-12 14:33:16 134

原创 SaaS应用12原则:(一)基准代码

一份基准代码(Codebase),多份部署(deploy)12-Factor 应用(基于 12 原则设计的应用称为 12-Factor 应用)通常会使用版本控制系统加以管理,如 Git,SVN 等。一份用来跟踪代码所有修订版本的数据库被称作代码库(code repository, code repo, repo)。在类似 SVN 这样的集中式版本控制系统中,基准代码 就是指控制系统中的这一份...

2019-08-12 14:31:54 562

原创 SaaS应用12原则:简介

简介如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor(12 原则,或 12 要素)为构建如下的 SaaS 应用提供了方法论:使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源可以在工具、架...

2019-08-12 14:29:38 319

转载 DBA的五款优秀SQL查询优化工具

转载:云+社区,https://cloud.tencent.com/developer/news/41125551cto原文链接:http://news.51cto.com/art/201907/600285.htm一般来说,SQL查询优化器分析给定查询的许多选项,预估每个选项的成本,最后选择成本最低的选项。如果查询优化器选择了错误的计划,则性能差异可能从几毫秒到几分钟。幸运的是,现在有许多第...

2019-07-30 11:00:33 5634

原创 PO/VO/BO/DTO/POJO 解释

POPersistant Object 持久对象最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。VO1. Value Object 值对象2. View Object 表现层对象主要对应界面显示的数据对象。对于一个 WEB 页面,或者 SWT、SWING 的一个界面,用一个 VO 对象对应整个界面的值。BOBusin...

2018-10-08 17:10:34 258

原创 MySql 日常指导,及大表优化思路

当MySQL单表记录数过大时,增删改查性能都会急剧下降单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候 MySQL 单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量。字段尽量使用 TINYINT、...

2018-08-22 20:09:07 240

原创 Bean 复制的几种框架比较

4 种复制方法:Apache BeanUtilsApache PropertyUtilsSpring BeanUtilsCglib BeanCopier测试 Bean,FromBean 与 ToBean 属性一致public class FromBean { private String name; private int age; private...

2018-07-03 19:55:44 3653

转载 高效判断数组中是否包含某个特定的值

4 种方式使用List:public static boolean useList(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetValue); }使用Set:public static boolean useSet(String[] ...

2018-06-26 20:07:07 326

原创 优雅的转换字符串首字母为大写

将字符串,首字母转换为大写,通常写法public static void main(String[] args) { String name = "ddAaa"; name = name.substring(0, 1).toUpperCase() + name.substring(1); System.out.println(name); ...

2018-05-23 18:04:31 595

原创 Sonar问题解决:普通方法调用静态属性

问题:普通方法调用静态属性时,Sonar会认为有问题这是我们经常用的,实现Spring的Bean工厂,写一个工具类, 开放一个静态方法:获取实体类public class BeanHelper implements BeanFactoryAware { private static BeanFactory factory; /** * 获取实体类 ...

2018-05-10 20:21:37 2550

原创 内容垂直居中

方法一:采用上下 padding 形式,将内容放置在垂直居中.line { padding: 2% 0; text-align: center; height: 5px;}<div class="line"> 内容垂直居中</div>方法二:采用高度与行高一直,保证内容只有一行,内容自然垂直居中.lin...

2018-05-04 15:45:21 132

原创 通用任务定时执行实现

Quartz触发器配置从触发器中配置一个通用触发MainStarter<bean id="mainStarter" class="com.zb.timer.MainStarter" ></bean><bean id="mainStarterDetail" class="org.springframework.scheduling.quartz.Met.

2018-04-13 10:41:39 267

转载 Mybatis Update操作 返回值修改为受影响条数

到底 update 返回值代表什么呢?我们来验证一下便知道了,假设有如下一张表以及两条数据: 我们来编写一个简单的单元测试用例来验证下,首先使用 mybatis 简单的写个 mapper 进行更新操作,其中 xml 中的内容为: 数据库连接配置为: 接来下,我们来编写一个简单的单元测试来验证下: update 的返回值是不是受影响的记录的条数 ,对应的单元测试代码如下: 由...

2018-03-21 20:44:58 41226 9

原创 小产权房

小产权

2018-03-05 17:20:57 204

原创 ER图三元联系简介

数据库设计时,遇到三元联系怎样确定,下面做个简单介绍。一、确定联系三元联系共 4 种情况: 1. 1 : 1 : 1 2. 1 : 1 : N 3. 1 : M : N 4. M : N : P1 : 1 : 1 联系解释: - 一名技术员对于每个项目使用一本手冊 - 每一本手冊对于每个项目属于一名技术员 - 一名技术员可能在做多个项目,对于不同的项目维...

2018-03-01 17:25:40 20430 12

转载 别再说你不懂线程池——做个优雅的攻城狮

作者:爱撸铁的攻城狮 链接:https://juejin.im/post/5a743c526fb9a063557d7eba 来源:掘金什么是线程池线程池,顾名思义就是装线程的池子。其用途是为了帮我们重复管理线程,避免创建大量的线程增加开销,提高响应速度。 为什么要用线程池作为一个严谨的攻城狮,不会希望别人看到我们的代码就开始吐槽,new Thread().start(...

2018-02-08 14:15:51 268

原创 form 表单中 disabled 属性的元素不参与表单提交

示例代码:form id="saveForm"> input id="saveForm-age" name="age" disabled="disabled" /> input id="saveForm-age" name="age" disabled="true" />form>当上述两种写法出现时,表单提交的数据中,将不包括 age 这个属性,这是因为 inpu

2018-01-26 15:57:38 6546 1

原创 GIT 换行符相关操作

背景关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个

2018-01-24 16:07:50 896

原创 JiBX 入门级使用

简介 JiBX is a tool for binding XML data to Java objects这是官网开篇介绍,JiBX 是绑定XML结构数据到Java对象上的工具,效率是Xstream的3倍。 官网:http://jibx.sourceforge.net/index.html使用方法例子: Java 对象package com.zb;

2018-01-23 16:58:33 629

原创 UTF-8-UTF-16-UTF-32-比较

优点UTF-8兼容 ASCII能适应许多 C 库中的 \0 结尾惯例没有字节序问题良好的多语种支持(相对 GBK 等跟语种绑定的编码方式)以英文和西文符号比较多的场景下(例如 HTML/XML),编码较短由于是变长,字符空间足够大,未来 Unicode 新标准收录更多字符,UTF-8 也能妥妥的兼容,因此不会再出现 UTF-16 那样的尴尬不存在大小端字节序问题,信息交换时非常便捷容

2017-12-28 10:27:06 771

原创 ASCII-Unicode-UTF-8-关系

历史原由本段摘抄于知乎:作者 - 于洋 链接很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。开始计算机只在美国用。八位的字节一共可以组合出256(

2017-12-28 10:26:40 159

原创 文件带-BOM-的看法

释义BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。UTF-8需不需要用BOM?UTF-8 不需要 BOM,(尽管 Unicode 标准允许在 UTF-8 中使用 BOM)。 在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一下:把带有 BOM 的小端序 UTF-16 称作「Unicode」而又不详细说明,这

2017-12-28 10:26:03 702

原创 Navicat-快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ctrl+n 打开一个新的查询窗口 ctrl+w 关闭一个查询窗口

2017-12-27 15:32:00 296

转载 StarUML-破解教程

转自:http://bbs.chinapyg.com/thread-79022-1-1.html打开对应 mac版本的安装包位置,在对应目录/Applications/StarUML.app/Contents/www/license/node/LicenseManagerDomain.js文件。找到文件23行,修改对应下面函数。更改为如下代码:function validate(PK, nam

2017-12-27 15:30:21 495

原创 Windows打开关闭服务命令

net start 服务名称 net stop 服务名称

2017-12-27 15:29:47 992

原创 Yoda表达

在C/Objective-C中,if、while、for之后的判断式并不需要一定传入布尔类型。也可以传入整型、指针等类型,只要非0就为真,并且赋值是有副作用的。比如: a = 0 上面代码返回a的数值,这样就有可能出现将判断: if ( a == 0 ) 错写成: if ( a = 0 ) 为避免这个问题,有种变通写法: if ( 0 == a ) 这种写法被称为Yoda表达式,因为

2017-12-27 15:29:16 538

原创 查找端口号被占用情况

开始–运行–cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选”查看”-“选择列”经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用假如我们需要确定谁占用了我们的9050

2017-12-27 15:28:33 234

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除