安之一隅

莫听穿林打叶声,何妨吟啸且徐行。

0%

使用maven也很久了,都知道可以用来compile source code,package jar等,但是一直没有去深究过它到底如何做的,命令行一大堆信息,调用了各个插件,原理是个啥?今天有空,于是探究了一下。 What is Maven 说白了,maven就是一个插件执行框架,maven的所有动作,都是在调用各种plugin的功能。我们使用maven,去调用各种插件,就是为了去使我们的项目构建、测试、编译、打包等等步骤变得更加高效。 Lifecycle maven将我们对project的构建划分为多个Lifecycle,也就是项目的生命周期。 Lifecycle包含clean,def
阅读全文 »

Git常用操作 Git设置 查看当前所有配置 1 git config --global --list 代理设置 设置代理 1 2 3 4 5 6 7 8 skywater@skywater MINGW64 /d/blog (master) $ git config --global http.proxy 127.0.0.1:1080 skywater@skywater MINGW64 /d/blog $ git config --global http.proxy http://127.0.0.1:1080 skywater@skywater MINGW64 /d/blog
阅读全文 »

MapStruct [TOC] 什么是MapStruct 业务系统开发过程中,常常有分层概念,如持久层,业务层,数据传输层,视图层。 每个分层各自有自己的bean命名规则,对应上面提到的,如DO,BO,DTO,VO等。虽然命名不同,但绝大部分情况下,bean的内容都大同小异。所以,相同业务对象Bean在不同层交换数据时常常会涉及到类型的映射转换。MapStruct就是其中一种。 与其他Bean映射工具对比 市面上有很多映射工具类,比较流行的有Spring BeanUtils,Cglib BeanCopier,Apache BeanUtils,Dozer,orika,以及这次讲的MapSt
阅读全文 »

Lombok使用 [TOC] 介绍 lombok可用用来简化我们的代码。 比如,通过在Pojo上添加lombok提供的@Data注解,我们就不用再手动写get set方法了。 1 2 3 4 5 6 7 8 9 10 11 import lombok.Data; @Data public class Student { private String name; public static void main(String[] args) { new Student().getName(); } } 同理,也可以通过其他注解来省
阅读全文 »

关于将MySQL从5.x升级到8.0.16的过程记录。 下载新的mysql https://downloads.mysql.com/archives/community/ 下载后解压 创建my.ini 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [mysqld] default_authentication_plugin=mysql_native_password log-bin-trust-function-creators=1 binlog_expire_logs
阅读全文 »

什么是AQS AQS全名为AbstractQueuedSynchronizer,即队列同步器。 它创始于JDK1.5,作者是很牛的Doug Lea,也是J.U.C的作者。 它是构建Lock、CountDownLatch等同步组件的基础框架。 常见的Lock实现,比如重入锁,读写锁等,内部都聚合一个AQS,一般会以内部类的形式出现。 我们在使用Lock提供的API时,其内部会适配到AQS的抽象方法上去。 AQS同步的实现较为复杂,内含了同步状态的管理、线程队列、等待、通知、唤醒等一系列底层操作。 而我们只需要关注Lock的API,如何去真正实现同步的则交由AQS就可以了。
阅读全文 »

MyBatis-binding模块与代理模式 Mybatis通过SqlSession来进行CRUD,其所调用的sql使用id标识存放在xml中,可以通过SqlSession提供的一些方法进行调用,其中一种是传入sql的id与所要使用的参数 1 2 3 4 5 public interface SqlSession extends Closeable { // ... List selectList(String statement, Object parameter); // ... } 但这样做有一个缺点,经常用ibatis的话,可能深有体会,如果s
阅读全文 »

单点登录方案与实现总结 何为登录? 众所周知,http是一个无状态协议。何为无状态?举几个有状态协议的例子,譬如TCP协议,需要三次握手,握手完成后双方及建立了连接,可以互相传输数据,传输完成后会断开连接。在譬如websocket,是一个全双工协议,也需要双方建立连接与断开连接。可曾听说过断开http连接?好像没有这回事吧,只有这次http请求200了,还是500报错了这种说法,因为http是无状态的,这次发的http请求与下一次并没有联系,也就不存在断开的概念。 看这样的场景,我需要访问某个网站的属于我的数据了,我发了一个http请求,这次http带有了用户凭据(用户密码),被认证为有权限
阅读全文 »

停止mysql服务器 关掉mysql进程 配置不读取授权表启动 cmd运行不要用powershell,使用--skip-grant-tables 1 mysqld --skip-grant-tables=OFF --shared-memory --console 最好加上--console,把信息直接打到控制台,有报错的话能直接发现。之前直接启动会闪退,通过加上--console后发现需要配置--shared-memory 重新加载授权表 mysql客户端连接到服务器,并执行 1 2 host> mysql mysql> FLUSH PRIVILEGES; 修改root
阅读全文 »

Windows下JVM高CPU占用分析 线上Windows Server服务器出现卡顿情况,windows下不好用top命令,通过任务管理器查看,java.exe进程CPU占用长时间处于80%左右,严重消耗服务器资源。但进程是看不出具体是什么在占用CPU的,需要到线程维度分析。windows下查看线程不是很方便,需要下一个工具:ProcessExplorer。 打开该软件,检查对应的java.exe进程,右键点击Properties,切换到Threads选项卡。 可以看到该进程下所有的线程信息。TID即是线程号。 大致浏览发现,并非某个线程在占用CPU,而是很多线程分摊了系统CPU资
阅读全文 »