- 博客(635)
- 资源 (3)
- 收藏
- 关注
原创 【Java】Spring JDBCTemplate 实现
JDBCTemplate是使用模板设计模式的典范。通过使用接口做一定的抽象,避免了jdbc的样板代码。关于jdbc的样板代码这里就不做介绍了,大家应该都知道,这里直接看JDBCTemplate。String sql = "select * from user"; jdbcTemplate.query("", new Object[]{},new RowMapper&l...
2019-06-29 17:00:05 927
原创 【Java】lamda表达式(二)lamda表达式 与 框架
https://blog.csdn.net/u010900754/article/details/80290867这里介绍过一些lamda表达式的基本用法。这一篇谈一下自己对lamda表达式的一些感悟。1.困惑不知道大家有没有这种感觉,看源码尤其是一些框架代码,只要是有lamda表达式或者匿名内部类的地方,就容易头晕,经常看着看着就晕了。。。之前看公司框架层代码的时候差点...
2019-06-29 16:38:01 601
原创 【Java】classpath
classpath的作用在于让虚拟机找到运行所需的class。那么classpath是在哪定义的?可能会遇到这样的问题。我用不同方式执行下面一行打印classpath的代码,结果可能不同。System.out.println(System.getProperty("java.class.path"));不同方式是指在idea里直接run和打成jar包使用java -jar的方式run...
2019-06-26 11:06:42 423
原创 【maven】jar war
jar:可以分两种,一种是sdk,提供给其他项目使用的接口或者公共类库,这种打包不需要打依赖,只打本工程的文件即可。另一种是main程序,比如说定时任务或者rpc服务等,这种是需要在生产环境运行的,需要打依赖,可以使用类似assembly这样的插件。war:如果使用maven则比较方便,因为maven有自己的文件目录规范,并且会自动把依赖的jar包打入war包lib目录,这一点通过war-...
2019-06-25 23:26:43 134
原创 【Java】序列化
为什么需要?将内存中的对象信息持久化下来。Serializable接口?要想序列化一个对象,该对象的类定义必须实现Serializable接口,该接口只是一个标记接口,并不会承载任何序列化的功能。序列化过程中会检测对象是否是Serializable类型,如果不是就会抛出异常。serialVersionUID?以前写用ide程序时,总会碰到提示,让生成一个serialVersio...
2019-06-23 15:00:38 136
原创 【Java】线程池(三)拒绝策略
如果线程池无法执行任务,就会执行选择用当前的拒绝策略处理任务:public void execute(Runnable command) { if (command == null) throw new NullPointerException(); /* * Proceed in 3 steps: ...
2019-06-22 22:53:02 289
原创 【Java】内部类(二)
今天看到一篇很好的讲java内部类的文章,决定再总结下java的内部类。原文:https://juejin.im/entry/5d0821935188253444037fd4傻逼百度居然搜不到。。。内部类分类?1)静态内部类,static关键字修饰;2)非静态内部类;非静态内部类又可以进一步分为方法内部类,类内部类和匿名内部类三种。作用或者说为什么需要内部类...
2019-06-20 21:51:59 179
原创 【SpringMVC(一)】父子容器 web应用 容器启动 原理
之前介绍了spring ioc容器的基本原理,这里介绍下spring ioc容器在web场景下的原理。主要从以下几个方面:1.web应用容器概述2.web应用父容器启动过程;3.web应用父容器与servletContext的关系;4.dispatcherServlet中子容器启动过程;5.dispatcherServlet的子容器与父容器的关系;6.两个容器的配置文件;...
2019-06-16 21:57:50 1033 2
原创 【Spring】autowired NullPointerException
代码:@Servicepublic class Api { @Autowired private ServiceA serviceA; private String name = serviceA.getName();}@Servicepublic class ServiceA { public String getName(){ ...
2019-06-16 18:25:40 1191
原创 【Spring(三)】IOC 容器实现
Spring IOC可以帮助我们管理对象之间的依赖,那么内部又是如何实现的?首先看下IOC相关的接口定义:BeanFactory:最顶层的bean接口,主要定义了容器最基本的功能,比如根据bean的name或者type来获取bean。接着是三个扩展的接口,都继承了BeanFactory。HierarchicalBeanFactory定义了bean容器可以有父子关系。Li...
2019-06-16 17:38:05 237
原创 【缓存】缓存更新策略
这里不是缓存过期策略。缓存用于缓解后端db的压力,策略指的是更新缓存以及db的方式。主要可以分为两个大类:调用方主动更新缓存以及db:这种是最最常见也是最最容易想到的方式。即调用端需要同时维护db和缓存的调用,调用端逻辑比较复杂。读取:先读缓存,缓存未命中读取db然后回写缓存;写入:同时写入,有很多种。分类标准:db和缓存的先后;缓存失效还是更新。其实,对写入而言,不论...
2019-06-15 15:43:28 2233
原创 【Java】线程池(七)执行
之前写了线程池参数的作用:https://blog.csdn.net/u010900754/article/details/80993645这次看下实现。首先,线程池的作用,在ThreadPoolExecutor类的注释里已经写得很清楚了: * <p>Thread pools address two different problems: they usually * ...
2019-06-15 12:41:12 187
转载 【Jackson】Jackson NON_EMPTY
https://www.logicbig.com/tutorials/misc/jackson/json-include-non-empty.html
2019-06-11 17:45:46 811
原创 【Java】idea @NotNull @Nullable 注解
这两个注解在idea里面可以帮助我们检测方法的返回值,方法参数以及局部变量是否为空,从而帮助我们减少一些NPE的发生。1. 原始注解@NotNull @Nullable最开始只能使用idea提供的一个jetBrains java annotation的jar包下的注解。maven坐标:https://mvnrepository.com/artifact/org.jetbrains...
2019-06-08 12:26:09 41239
原创 【Java】NoSuchMethodError
刚开始写代码时,特别是类似web这种需要很多第三方jar包的项目,经常会遇到这个问题。这次记录下这个报错的原因。简而言之,这个报错是肯定是因为compile时方法存在,但是runtime时方法却不存在了。又是什么原因导致了上面的情况发生?其实也有不少,这里介绍一种常见的case:引入了同一个jar包的不同版本。如果恰好两个版本的某一个类的某一个方法签名不同,但是都被调用了,此时,j...
2019-06-08 00:22:07 2111
原创 【Java】guava(二) ListenableFuture 使用及原理
在Java没有发布CompletableFuture之前,异步编程只能使用Future接口和FutureTask,缺点就是没法做异步回调。所以guava在其并发包里面加入了ListenableFuture来支持异步回调。使用第一步:定义定制线程池ListeningExecutorService service = MoreExecutors.listeningDecorator(Ex...
2019-06-02 20:05:45 2765
原创 【Java】多线程 数目
今天看到一篇文章,讲多线程数目的,很棒:https://juejin.im/post/5cf35e195188252c023f9b72这个问题还是很容易被忽略的,就是多线程到底是为了什么?最开始学习多线程的时候,往往将多线程和性能高划等号,只要用了多线程就能提升性能,其实不然。那么多线程到底应该怎么使用?上面的文章其实解释的很清楚,多线程是为了让cpu的利用率尽可能高。首先,任...
2019-06-02 16:54:20 194
原创 【Java】CompletableFuture
CompletableFuture是java8中引入的机制,为了弥补异步执行时Future机制的不足。那么光是用Future会有什么问题?主要是无法做到回调机制以及多任务的协同。CompletableFuture实现了CompletionStage接口,提供了多种任务协同的回调方法,使得异步回调写起来很方便。其实future和completableFuture都是异步编程的模式,前...
2019-06-02 14:42:16 170
原创 【shell】sed 命令
sed全名是stream editor,文本的流式处理器。所谓的流式是与交互式相对的,交互式处理器比如vim。用法:1)行内替换;使用s命令,格式为sed "s/pattern/replacement/flags"。pattern是新内容,replacement是老的要被替换的内容,支持Basic RE。flags是替换选项,总共有以下四种:a)数字,表示替换第几处,...
2019-06-01 12:15:33 1074
原创 【jenkins】自动修改工程版本号 以及 父pom版本号 (maven-release-plugin)
之前介绍过使用maven-versn-plugin,maven-scm-plugin以及maven-release-plugin来管理工程的版本号以及依赖的版本号。这些maven插件已经帮助我们最大程度上解决了多项目多模块的版本问题。但是仍然不够智能,我们仍然需要执行若干maven命令,这里介绍下使用jenkins实现完全自动化更新版本的方法。这里会有两个工程,一个是root-pom,一...
2019-05-26 23:44:32 8830
原创 【maven】versions-maven-plugin 使用
一句话概括,这个插件是用来修改pom的版本的,几乎是所有的版本号,比如工程,依赖和插件等等。那么这个插件有什么用?之前介绍过maven的版本管理经验,所有依赖都有一个root-pom来统一管理。这样的话,每发一个release的包,其实就应该同时也修改了root-pom中这个包的版本号,这样,其他工程才能依赖到最新的代码。那么修改root-pom版本号的任务就可以交给versions插...
2019-05-23 00:40:07 4564
原创 【maven】maven 快照机制
搞不明白这个,拉取或者更新时就可能遇到各种各样的问题。首先release包的逻辑是很清晰的,就是看本地有没有,没有就从远程拉。这个是合理的,因为同一个版本号只能在仓库里发一个包,意味着只要本地有了,就应该是最新的。不应该允许从远程仓库删除release包。快照版本呢?每一个快照版本可以有多个包,每一个包都有对应的时间戳。发快照包时,远程maven仓库会将时间戳记录在一个叫做maven-...
2019-05-21 16:17:45 1684
原创 【maven】工程版本 管理
工程自己的版本号可以使用maven-release-plugin。每次从代码库拉代码开发时,拉到的都是下一个snapshot版本号,什么意思?比如当前稳定版是3.0.0,那么拉到的就是3.0.1-SNAPSHOT,开发完本地install时,打的jar包就是3.0.1-SNAPSHOT版本的。此时可能会在本地使用这个快照包做一些测试。测试没有问题,就需要发release包。使用release插...
2019-05-21 00:33:44 343
原创 【maven】maven-release-plugin 使用 (git)
简介很nb的插件。为什么?一般开发,基于一个snapshot版本开发,开发完以后,发一个对应的release的包,然后再将代码版本更新为下一个snapshot版本。这些工作当然可以纯手工完成,但是可能比较痛苦,这里介绍的release插件就是干这个的。使用这里使用了github作为代码仓库,使用本地的一个nexus作为maven的私服。1. 定义scm。scm是一款抽象了代码本...
2019-05-19 19:49:26 6189
原创 【maven】maven-scm-plugin 使用
scm-maven-plugin是一款代码版本控制的插件。maven自己将版本控制的过程抽象出来,然后将市面上各种版本控制的工具都做了对应了实现。这款插件其实我们不太会用到,主要是maven的release插件会使用该插件提交代码,这时就需要抽象,自己搞一套出来,否则maven根本不知道怎么提交代码,是git呢还是svn呢。下面简单记录下使用。这里作为例子,代码仓库用的github。第一...
2019-05-19 18:21:37 2540
原创 【maven】scope
首先要明白maven有3种classpath,不同阶段对应不同的classpath。test:只在test阶段用;compile:只在compile阶段用;runtime:最后jar包里打入的;依赖的scope就是用与指定这个依赖出现在上述哪一个classpath的。最常见的是compile,默认也是这个,表示会出现在上面所有的classpath中。最简单的事test,只在test时...
2019-05-16 10:12:17 170
原创 【maven】多模块 实践
最开始可能只有一个项目,可能仅仅需要构建一个工程就可以,但是随着项目越来越大,在代码工程角度,需要做模块化,模块化指的工程的拆分以及工程内模块的拆分。工程的拆分可以按照业务来拆分,模块的拆分可以按照功能来拆分。举个例子:项目包含了订单业务以及用户业务,那一般来讲是要拆成两个工程的。每一个工程都可以大致分为三个模块:sdk,service,api。sdk:封装本工程可以暴露...
2019-05-14 15:50:46 328
原创 【maven】插件 相关
这里记录下如何编写一个简单的插件。插件需要建立一个Mojo工程,idea里有对应的工程类型。插件命名最好为xxx-maven-plugin,因为如果是这样的命名,使用插件时可以只用xxx。不要使用maven-xxx-plugin,因为这是官方插件命名方式。pom文件:1. packaging需要定义为maven-plugin2.需要引入相关api的jar包。<...
2019-05-14 13:38:13 114
原创 【maven】maven-jar-plugin 搭配 maven-dependency-plugin 使用
正常的main函数程序,我们直接package生成的jar包无法直接运行,因为没有再/META-INF/MANIFEST.MF中指定主类。1.指定主类有很多方法,这里介绍下最简单的使用maven-jar-plugin插件的方法。只需要加一条mainClass的配置,指定主类名即可;这样不出意外可以运行。2.如果我们的项目有外部依赖,即定义了dependency,那么默认不会把依赖打...
2019-05-14 00:08:52 6953
原创 【maven】mvn 多模块构建 参数
现在的项目多模块越来越流行,下对于多模块的项目,有时我们希望只构建其中的一个或者几个模块,如果直接进入模块目录下执行mvn命令,一般会失败,因为单个模块没有聚合模块pom中的信息或者一些本工程内依赖的其他模块就会构件失败。所以,一般会使用下面的参数构建,此时仍然是以多模块的视角来让maven处理的。-pl:指定打包的模块,可以用路径也可以用坐标,如果父项目同时是父目录,那么进入父目录下,直接“...
2019-05-13 23:48:57 5392
原创 【shell】正则表达式
语法老是有几点忘记,但是正则又很重要,花时间记一下。首先看一下通用的正则表达式规范,大概如下:1.位置相关这里的位置指的是从哪里开始匹配正则表达式,如果不指定,可以从任意位置开始或者结束。$:从行末开始匹配;^:从行首开始匹配;2.标识符是正则表达式最最基本的元素。包括:2.1 任意字符比如A,a等等;2.2 .点号表示任意字符,这个必须特殊记忆,如果...
2019-05-09 22:55:11 165
原创 【感想】听分享后 笔记
1.服务无状态化如果设计成无状态的,好处是易于横向扩展;无状态指的是每个节点在处理请求时不会本地记录状态。如果必须记录,必须依赖外部存储,总而言之要让记录全局化,即所有实例都可以访问到;2.数据落地和缓存使用场景;设计;缓存更新;3.对于业务逻辑的思考如何立刻抽象出技术构架4.cdn的作用代理资源访问,使得资源的获取更快速,好过应用服务器...
2019-05-09 22:26:46 384
原创 【shell】awk 分组
直接用数组即可。a.txt文件:Tom baidu 8000Jerry alibaba 9000Jack tencent 8500Nika baidu 75001.分组求和,排序awk '{count[$2] += $3}END{for(i in count) print i, count[i]}' a.txt | sort -nrk 2baidu 15500a...
2019-05-09 00:07:15 967
原创 【maven】assembly 插件
assembly是一个打包的插件,可以允许我们定制打包的内容已经制定主类。 <build> <plugins> <plugin> <artifactId> maven-assembly-plugin </artifactId> ...
2019-05-08 00:36:09 158
原创 【shell】mv
mv命令要始终记得有两层含义,一是移动,二是重命名,一旦target即第二个参数不存在时,就会被当做重命名来处理。用的时候,如果是想移动,那么第二个参数必须是目录,如果目录不存在就当做重命名处理了,所以最好是在结尾加一个“/”,这样就肯定会被当做目录处理,就不会重命名了。移动可以是文件也可以是目录,也可以是多文件。如果是想重命名,那么第一个参数只能有一个。重命名文件,则第二...
2019-05-08 00:04:11 339
原创 【shell】cp
cp即copy,有以下三种用法:格式为:cp [参数] A B1.如果A为目录,则必须加上-r参数,表示递归把A目录下的所有目录文件递归地拷贝到B目录下。该种用法依赖于B目录是否存在。如果B目录没有,则新创建B并将A目录下的文件复制到B目录下,如果B目录有,则把A目录复制到B目录下,即被拷贝的A目录编程了B的子目录。2.如果A和B都是单个文件,那么就是把A文件内容复制为B,如...
2019-05-07 23:49:37 1158
原创 【Linux】vim 常用总结
1.命令模式下1.1 删除一行:dd1.2 移动到最后一行:G2.末行模式下2.1 查找:/xxx 翻页是n2.2 全局替换:%s/old/new/g2.3 退出保存:wq2.4 退出不保存:q!...
2019-05-06 23:58:08 131
原创 【shell】查看磁盘命令
主要就是du和df两个。du即disk usage,查看使用情况;df即disk free,查看剩余情况;1.先看du使用:du 文件名:查看某一文件的大小;miracle@localhost:~/test|⇒ du a.txt8 a.txtmiracle@localhost:~/test|⇒ du -k a.txt4 a.txtmiracle@...
2019-05-06 23:38:57 3559
原创 【shell】nohup 与 &
nohup与&其实都可以让一个任务在后台运行,区别在于nohup方式可以让子任务忽略sighup信号,也就是父进程退出后不会终止子进程。具体区别可以看这篇:https://www.jianshu.com/p/747e0d5021a2用法二者大同小异,取决于是否加nohup。nohup cmd [args] &t.sh:#!/usr/bin/env ...
2019-05-06 20:31:01 143
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人