自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 裸辞期间 Java书单总结

从1月中旬裸辞后,所看过的书单如下:《Netty权威指南》《Netty实战》《Redis设计与实现》《Redis实战》《高性能mysql》《Java并发编程的艺术》《深入理解Java虚拟机》《图解HTTP》…其中很多书一遍一遍的看,每次看读有新收获,力争能深入理解其中的内容。特别是java虚拟机,并发相关的书籍值得一啃再啃。极客时间专栏《Java36讲》《mysql实战》...

2019-03-09 17:04:54 645 5

原创 2018年终总结 - 程序员的自我反思

目录2018 结束语2018 年 做了些什么2019 年要做什么2018 结束语今年已经进入了12月,2018年马上就要结束了,也是时候做一个2018年的年终总结。之前的公司每年年底因为绩效评定都需要自己写一个年终总结进行汇报,现在这些资料却已经找不到了,还是有些遗憾的。从2014年大学毕业到现在,已经4个年头,工作也已经4年多,然而可能我一直处于后知后觉的思维中,知道今年才想停下脚步好好...

2018-12-03 18:35:50 6373 12

原创 如何整合SpringMVC和Swagger2,并且使用Mock数据进行联调

在开发中,我们经常会需要对接口进行联调沟通,然而这是在整个开发周期中最占用时间的一块。尤其最近在接手一个项目中,采用前后端分离开发的模式,写前端的同学完全不懂后台代码(对,我们之前都是一个人写前后端所有相关的代码滴!),接口经常性需要进行调整,基本就是重复沟通,重复浪费时间。于是我决定在项目中引进神器“Swagger”,用来一键生成文档,减少了后端开发同学编写接口文档的时间,同时前端采用Mock数

2017-06-20 18:22:27 4236 1

原创 angularjs select初始化时多了一个 null option

情景:在使用angularJs是,init select元素时,使用ng-repeat 构造 option时, 会出现一个多余的值为null的option。 例如以下代码(jade模板):select( ng-model="user.departmentName" required name="{{$index}}") option.form-control(ng-repeat="d

2017-06-01 13:56:53 1928

原创 AngularJs ng-show 和 ng-if的区别

相同点: ng-show和ng-if都可以用来控制元素是否显示。当值为true时,表示显示该元素;当值为false时,表示隐藏该元素。不同点:ng-show在页面进行渲染的时候,已经将该元素加载,如果值为false,元素需要隐藏的话,在Chrome浏览器中可以查看出,渲染出来的元素仅仅是加了一个ng-hide的class,以此来控制元素的显示与否。 ng-if 在页面渲染的时候,如果值为false

2017-06-01 11:25:14 9792

原创 源码解读(二): spring容器初始化的refresh操作

在上一篇文章 源码解读(一): spring在web容器中的初始化过程 中,我们了解了Spring容器的初始化整个过程,但是你看了之后可能会有疑问。既然到这个时候初始化都已经完成了,那么bean的初始化应该从什么时候开始呢?不要着急,在上一篇文章中,ContextLoader中的ConfigureAndRefreshWebApplicationContext中的最后一步方法refresh操作中设定了

2017-04-20 18:33:45 3170

原创 源码解读(一): spring在web容器中的初始化过程

Spring容器本质上就是创建类的工厂,并且对类进行管理。Spring 在web容器中通常是通过在web.xml文件中配置切入点来进行相关初始化的。当web容器解析web.xml文件时,会初始化ContextLoaderListener类,这个类继承了ServletContextListener,也就是Web容器监听器。并且实现了ServletContextListener接口中的contextI

2017-04-14 14:04:55 6814

原创 深入理解Spring的两大特征(IOC和AOP)

众所周知,Spring的核心特性就是IOC和AOP,IOC(Inversion of Control),即“控制反转”;AOP(Aspect-OrientedProgramming),即“面向切面编程”。参考书《Spring In Action》,下面分享一下我对这两大特性的个人理解。IOC:IOC,另外一种说法叫DI(Dependency Injection),即依赖注入。它并不是一种技术实现,而

2017-04-05 11:46:53 86970 16

原创 Java接口和抽象类的区别

抽象类: Java是一门面向对象编程的语言,所有的对象都是类的概念来进行描述的。但是反过来看,并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。举例来说,圆形和方形都是形状,但是我们在描绘形状时,我们描绘的是一系列拥有相同内核特征却有不同的表现方式的事物,仅仅通过我们的描述是无法确定唯一一个满足特性的东西。我们把这个形状类就称为抽象类。所以,抽

2017-03-29 15:13:08 442

原创 数据库三大范式

第一范式第二范式第三范式第一范式1NF,强调数据中列的原子性,即列中的值不能再分割为其他列。例如: 现在有一个用户User表,表中字段分别包括,用户名,联系方式,性别等信息。 username sex tel 小明 男 13112345678 0755-1234567 小红 女 13234567890从表中可以看出,小明的数据中联系方式有两种,包括手机

2017-03-23 15:21:21 697

原创 Spring事务管理(三)使用tx标签

由于事务的配置方法较多,没有一一实践过,现在贴出平常常用的一种使用tx标签的配置方法,仅供参考。<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan

2017-03-21 16:12:04 2741 1

原创 Spring事务管理(二)Spring中的事务管控

上一节中,我们了解了事务的基本概念,和多个事务并发运行时可能导致的问题。下面讲一下Spring中的事务管控。

2017-03-21 15:57:37 3147 2

原创 Spring事务管理(一)什么是事务?

事务的概念并发事务导致的问题我们在实际业务场景中,经常会遇到数据频繁修改读取的问题。在同一时刻,不同的业务逻辑对同一个表数据进行修改,这种冲突很可能造成数据不可挽回的错乱,所以我们需要用事务来对数据进行管理。1. 事务的概念事务必须服从ACID原则。ACID指的是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持

2017-03-15 14:07:23 40685 14

原创 Spring中Can not set field to $Proxy 报错解决

问题: 在spring相关项目启动的时候,报错相关内容为Can not set field to $Proxy。 原因:因为JDK实现动态代理业务的时候,只能针对接口进行定义。然而对于类需要进行代理,需要使用到CGLib。CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。JDK动态代理与CGLib动

2017-03-14 14:17:42 3330

原创 Javascript arguments 对象详解

arguments 是一个类似数组的对象, 对应于传递给函数的参数。

2017-02-05 16:49:05 473

原创 Javascript 判断假值的方法

概念:什么叫假值? 在JavaScript中,false、null、0、”“、undefined 和 NaN被称为假值。Boolean 对象是一个布尔值的对象包装器。var x = new Boolean();如果Boolean构造函数的参数不是一个布尔值,则该参数会被转换成一个布尔值.如果参数是 0, -0, null, false, NaN, undefined, 或者空字符串 (“”)

2017-02-05 15:57:25 3302

原创 Apache-HTTPClient 用户验证实现

问题:在微服务框架之外的系统中,我们经常会遇到使用httpClient进行接口调用的问题,除了进行白名单的设置,很多时候我们需要在接口调用的时候需要身份认证。翻了一下官方文档,解决方法很多,但是都不太符合实际业务场景,这里提供一种简单粗暴的解决方法。解决方法:利用请求头,将验证信息保存起来。public class HttpClientUtils { protected static fina

2016-12-01 11:05:23 2670

原创 Json转化为Java对象(object,List等)

问题:前后端数据交互时,经常会遇到Json串与Java对象转化的问题,有的Java对象中还包含了List对象等。解决方案: 1. 引入 json-lib包,Maven坐标如下: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId>

2016-12-01 10:25:16 16798

原创 Java 使用JGit获取Git代码

package com.sf.sgs.smp.manager.test;import org.eclipse.jgit.api.*;import org.eclipse.jgit.api.errors.GitAPIException;import org.eclipse.jgit.api.errors.JGitInternalException;import org.eclipse.jgit.

2016-11-11 16:06:47 16037 3

翻译 JGit Authentication JGit验证机制

验证机制在JGit中大部分与本地git相同。普遍使用SSH协议和HTTP(S)协议和他们所支持的验证方法。 这篇文章总结了如何使用JGit的验证API去安全连接远程GIT库。 虽然在下面的例子中使用的是CloneCommand方法,但是它能实现的方法可以应用到所有用于连接远程仓库的类,例如FetchCommand,PushCommand,LsRemoteCommand等等。所有这些命令都有一个相

2016-11-10 18:52:27 9347

原创 如何正确使用数据库索引

索引不是越多越好 索引会增加表在insert、update、delete操作的工作量 索引占用额外的存储空间 什么时候不走索引在索引上使用is null 和is not null在索引列上使用NOT(<>)对索引列进行计算对索引列进行格式转换对索引列使用函数对索引列进行多字段连接索引列上因类型不匹配而进行隐式转换复合索引的前导列没有被作为查询条件like语句前后使用通配符%

2016-11-10 11:45:50 1540

原创 LogStash

timestamp 用来标记事件的发生时间。因为这个字段涉及到Logstash的内部流转,所以必须是一个joda对象,如果你尝试自己给一个字符串字段重命名为@timestamp的话,Logstash会直接报错。所以,请使用 filter/date插件来管理这个字段。type 标记事情的唯一类型。host 标记事情发生在哪里。tags 标记事件的某方面属性。只是一个数组,一个时间可以有多个标签。

2016-11-10 11:01:43 1646

原创 Bootstrap modal模态框可拖动

问题:Bootstrap模态框默认不可拖动,如果屏幕不适配模态框大小,容易造成用户使用不方便的问题。解决方法:可全局加,也可单页面添加下列代码。$(document).on("show.bs.modal", ".modal", function(){ $(this).draggable(); $(this).css("overflow-y", "scroll"); //

2016-11-10 10:29:01 20193 7

翻译 Lucene

Lucene 是一款高性能的、可拓展的信息检索(IR)工具库。信息检索是指文档搜索、文档内信息搜索或者文档相关的元数据搜索等操作。Lucene - 爬虫开源软件: - 常见的搜索理论模型: - 索引过程核心类 - 域索引选项 - 域存储选项 - 核心Directory子类

2016-08-01 14:25:16 3261 1

原创 JDK7 遍历文件树

FileVIsitorpreVisitDirectory:一个路径被访问时调用postVisitDirectory:一个路径的所有节点被访问后调用visitFile:文件被访问时被调用visitFileFailed:当文件不能被访问时FileVisitResultCONTINUE:继续TERMINATE:终止,这次遍历结束了SKIP_SUBTREE:子树(当前路径的子目录)不再遍历了

2016-08-01 14:23:26 478

原创 ConcurrentLinkedQueue 的实现原理分析

ConcurrentLinkedQueue 是一个基于链接节点的无界线程安全队列,它采用先进先出FIFO的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部,当我们获取一个元素时,它会返回队列头部的元素。它采用了“wait-free”算法。并且采用CAS操作,保证数据的一致性。CAS是compare and set的缩写,意思是指在set值之前先比较改值有没有变化,只有在没变化的情况

2016-08-01 14:05:31 649

原创 Linux time 命令的输出理解

Linux中time命令,经常用来计算某个程序的运行耗时,用户态CPU耗时,系统态CPU耗时。例如:$ time testreal 4m26.226s user 6m15.008s sys 1m2.479sreal:表示test整个程序的运行耗时。user:表示test程序运行在用户态的cpu时间。sys:表示test程序运行在核心态的cpu时间。核心态:在内核态,代码拥有完全的,不受任

2016-08-01 14:03:00 2761

原创 Bootstrap 模态框避免点击背景处关闭

问题: Bootstap 模态框在用户点击背景空白处时,会自动关闭。解决方法:在HTML页面中编写模态框时,在div初始化时添加属性 aria-hidden=”true” data-backdrop=”static”,即可。在需要显示模态框,初始化时,$(‘#myModal’).modal({backdrop: ‘static’, keyboard: false}); 其中 ,backdrop

2016-06-08 11:07:18 36588

原创 全方位立体监控之日志解决方案ELK(3)

在实际生产环境中,除了框架本身的特性,还需要考虑更多符合自身硬件条件以及业务需求来进行大量的改造优化工作,而这一步往往是最重要。 下面是搭建生产环境过程中,可能遇到的问题以及解决方案:Logstash作为远程Agent,需要占用服务器太多资源,并且必须依赖Java环境。每增加一台服务器,部署成本相比较大。解决方案: 使用Filebeat作为远程agent,Filebeat使用当前流行高效率go

2016-06-06 14:46:50 1669

原创 全方位立体监控之日志解决方案ELK(2)

Logstash详细介绍下面我们将对ELK框架进行深入详细的了解,了解了其中的原理,才能选择更加高效可靠的配置方案。ElasticSearch的配置比较简单,主要性能瓶颈在于内存以及节点设置方面,Kibana的配置也较为简单,web应用无很大的优化改进空间,主要在于第三方插件的使用。下面我们主要介绍Logstash的方案设计。Logstash使用Ruby语言编写,它编写了自己的一套DSL。Logs

2016-06-06 14:41:18 2693

原创 全方位立体监控之日志解决方案ELK(1)

在微服务框架中,由于各个系统功能分离明确,需要大量的服务器对系统部署进行支持。每个生产系统都会产生大量的日志,数据分散且管理困难,一旦出现问题,查找日志需要寻找运维人员进行协助,但是可能出现查询日志速度较慢,无法准确定位,影响生产问题解决的情况。所以我们需要一套日志系统来收集各个服务器上的日志数据,并且能使用集中高效的web方式搜索查看日志,同时能对日志进行维度分析等。在此,我们选择ELK框架来实践

2016-06-06 11:50:05 2935

原创 字符串切分遇到的问题

在进行字符串切分时,想要拿出文件名的名称,去除后缀,采取了split方法,但是发现不起作用。之后了解到对于“.”这样的字符,需要进行转义,才能被识别。 String[] urls = url.split("\\.");这样就可以解决问题了。

2015-12-01 11:21:01 429

原创 zookeeper简单配置使用

zooKeeper简要安装使用

2015-11-11 15:43:20 412

转载 Email正则匹配

Email正则匹配值为: ^\s*\w+(?:\.{0,1}[\w-]+)@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)\.[a-zA-Z]+\s*$

2015-07-21 17:06:07 404

原创 WEB前端网页返回代码常见值

404:访问路径不正确,原始网页URL失效403:资源不可用。服务器理解客户的请求,但拒绝进行处理。通常由于文件或目录的权限设置导致301:请求的网页已永久的移动到新的位置。服务器返回此响应时,会自动将请求者转到新的位置。(永久移动)302:服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。(临时移动)500:服务器内部响应出错200:服务器已成功处理了请求,

2015-07-01 11:21:42 655

原创 MyBatis配置文件报错

现有代码: <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >配置文件报错,只需要更改为: <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN

2015-07-01 11:08:49 1069

翻译 Gradle chapter7 Gradle chapter7.Java Quickstart

Java 插件正如我们所见,Gradle是一个通用构建工具。它可以在你的构建脚本中实行你所关注的构建内容。发散性地说,如果你不在脚本中添加任何代码,那么它不会构建任何东西。大多数的Java项目与基本过程是十分相似的:你需要编译你的Java源文件,运行一些单元测试,并且创造一些包含你的类的JAR文件。如果你不需要为每个项目都进行编码那将是非常好的。幸运地是,你不需要这样做。

2015-06-26 14:21:09 460

翻译 Chapter 6.基本构建脚本

项目与任务Gradle中的一切都建立在两个基本的概念上:项目和任务。每一个Gradle构建由一个或者多个 项目组成。 一个项目展现出什么取决于你使用Gradle做了些什么。例如,一个项目可能代表一个JAR库或一个web应用程序。 它可能代表了一种 从其他项目产生的jar组装起来的ZIP。 一个项目并不一定代表一样东西需要构建。 它可能代表一件事要做,比如分期或部署您的应用程序。不要着急如果它暂时看起

2015-06-26 11:33:56 426

翻译 chapter 50 The Java Gradle Plugin Development Plugin

Java Gradle Plugin development plugin 正处于孵化阶段。请注意DSL和其他配置可能在之后的Gradle版本中有改变。Java Gradle Plugin development plugin 可以用来协助Gradle插件的开发。它自动提供了Java插件,添加了gradleApi()依赖给编译配置并执行Jar任务执行期间插件元数据的验证。50.1 Usage使用J

2015-06-26 11:32:58 451

翻译 Chapter 51.依赖管理

51.1 介绍 每一个构建依赖管理是一个重要的特性,Gradle放置了一个强调提供一流的依赖管理同时便于理解和兼容各种各样的方法。如果你熟悉方法适用于Maven或者Ivy,你会惊喜的发现Gradle完全兼容两种方法,并且足够灵活去支持充分定制的方法。这有一些亮高点关于Gradle支持依赖管理:传递依赖管理 :Gradle给了你充分地控制你项目的依赖树。支持不受管理的依赖:如果你的依赖是十

2015-06-26 11:30:23 563

空空如也

空空如也

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

TA关注的人

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