
java
文章平均质量分 65
猿Why
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[Maven]maven-dependency-plugin的奇怪用法
从Maven本地仓库拷贝pom中所有依赖到新的目录原创 2024-05-23 14:42:24 · 254 阅读 · 0 评论 -
[Elasticsearch]系列-RestClient StackOverflowError
Elasticsearch Client StackOverflow原创 2022-07-23 18:09:10 · 907 阅读 · 0 评论 -
[杂货铺系列]-【INVOKESPECIAL/STATIC on interfaces require ASM 5】
猿Why碰到一个异常【INVOKESPECIAL/STATIC on interfaces require ASM 5】。跟踪到异常抛出的类:org.springframework.asm.MethodVisitor /** * Visits a method instruction. A method instruction is an instruction that invokes a method. * * @param opcode the opcode of the ty原创 2022-01-21 20:21:17 · 1570 阅读 · 0 评论 -
[ElasticJob系列]ElasticJob-Lite试验
猿Why在工作中解决问题的时候,了解到了分布式任务调度。看到“分布式任务”字样,原认为是“处理比较消耗资源的请求,使得此类请求处理均衡分发到分布式的系统中”,直到看到了扫盲文章。在看完ElasticJob官方文档之后,终于对分布式任务调度有了入门了解。分布式任务调度中心场景就ElasticJob而言,分布式任务调度比较适合的场景是后台作业。特别是定时的后台作业,并且业务处理逻辑比较简单,任务之间的数据依赖性不大的情况会比较适合。例如:员工每月工资定时发放,考勤计算工资发放金额。按照自己的理解,对El原创 2021-05-13 19:53:18 · 1212 阅读 · 2 评论 -
温故知新-Servlet
猿Why在完成需求的时候,顺便复习了Servlet的基础知识,通过这篇文章记录一下,算作是对[杂货铺系列]ProxyServlet权限托管实践篇的补充。Servlet接口释信息解读Servlet作用Servlet是一个运行在服务端的,用于处理客户端请求并返回结果的Java应用程序。通常使用HTTP协议。实现一个Servlet可以通过继承类通用类型Servlet:javax.servlet.GenericServlet可以实现接口:javax.servlet.http.HttpServ原创 2021-01-30 16:41:40 · 218 阅读 · 0 评论 -
autoconfig-maven-plugin异常情况
最近在使用autoconfig-maven-plugin打包应用遇到一个异常:Nested JAR URLs are not supported跟踪代码后,发现JDK中一段代码的处理,如下图:分析代码后,暂定认为是JDK(jdk1.8.0_231)中代码逻辑不严谨,后边继续跟进。...原创 2020-08-30 23:10:52 · 4019 阅读 · 9 评论 -
[Spring Cloud系列]Ribbon服务更新
之前,猿Why认为应用中集成Consul进行服务注册与服务发现。那么,应用中的服务列表应当也是由Consul模块进行更新。为了给同事一个准确的回答,再次看了看源码后,发现服务列表的更新,并不是由服务注册中心和服务发现模块来处理的(比如Consul、Eureka)。首先,服务注册中心的概念是抽象的,所以服务列表的更新必然不是由服务发现的具体实现方式(Consul、Eureka)来实现的。具体实现方式仅需要提供从服务注册中心获取服务列表的API,提供给负载均衡时候的服务发现使用。猿Why目前工作中用到的负载原创 2021-01-06 20:50:39 · 892 阅读 · 0 评论 -
[Spring Cloud系列]Consul实验篇
猿Why为什么会想着写这样一篇文章?请先阅览先序篇。先序篇,对Consul服务的服务特性、Spring Cloud Consul模块服务注册与服务发现原理进行了了解。但是感觉还是不够,在与同事“抬扛”的时候,明显的底气不足,特别是和“云端的架构师”聊服务治理的时候。所以,猿Why打算针对Consul的一些服务特性做几个验证性试验。问题一:Consul服务重启,应用服务是否需要重新注册?实验步骤:启动Consul服务启动应用服务,注册到ConsulConsul服务关闭Consul服务重新启动原创 2020-12-19 15:29:15 · 2450 阅读 · 2 评论 -
【RocketMQ系列】-Topic创建机制
猿Why自问自答,先来回答上一篇文章中的三个问题!1:RocketMQ的Topic创建有几种方式?归根结底就一种方式:DefaultMQAdminExt(rocketmq-tools)形式上会有两种方式:预先创建生产者第一次发送消息时候使用默认策略创建2:RocketMQ服务没有指定的Topic情况下(某种业务场景),是由业务流程发起者来创建Topic还是RocketMQ运维人员创建合适?线上环境当然是预先创建合适,开发环境中就都可以了。3:Producer和Consumer在执行原创 2020-11-05 21:29:36 · 1219 阅读 · 0 评论 -
从源码入手:Filter与Interceptor
关于Filter与Interceptor的文章,多如牛毛!但是“每两篇文章中就能找到三个冲突(有差异)的知识点”。猿Why想找到官方“辟谣”,所以打算从源码入手,来看看二者。文中只会介绍Filter和Interceptor各自可以做什么,不会说明二者的差异和不同(原因后文说明)。API来源:Filter:javax.servlet.FilterInterceptor:org.springframework.web.servlet.HandlerInterceptor可见,二者的来源是完全不一样的。原创 2020-09-16 09:27:34 · 196 阅读 · 0 评论 -
Java属性拷贝——大道至简
写业务代码的同学,一定经常使用一个API:org.springframework.beans.BeanUtils#copyProperties(java.lang.Object, java.lang.Object)从一个实例中拷贝属性值到另外一个实例(可以是相同class或不同class)对于写业务代码同学来说,确实很“省”代码。员外近仨月就节省了很多代码。例如,历史文章中有一篇,就是自己为了偷懒,写的一个工具方法:传送门昨天review同事的一段代码(压测报告响应时间长),业务逻辑非常简单:数原创 2020-07-05 20:19:34 · 598 阅读 · 1 评论 -
实现一个分页接口需要几步?
如何写出一个返回分页结果的接口?先看下图,一个支持分页的数据表格需要什么样的数据结构?Step01:定义分页数据结构PageInfo {currentPage:当前页码totalPage:总页数totalCount:符合查询条件的记录总数pageSize:页面大小(容量)pageBegin:条件查询语句(SQL)左边参数(非必须,可计算得出)pageEnd:条件查询语句(SQL)右边参数(非必须,可计算得出)list:返回当前页的数据(记录)}Step02:PageInfo的初始化原创 2020-06-28 20:29:48 · 3338 阅读 · 0 评论 -
Java对象拷贝
在有些业务开发场景中需要对已有的数据进行copy(或者clone)操作,那么现有的copy方式有哪些?开始讲之前需要进行知识点扫盲:什么是引用?Java中的引用类似C/C++中的指针,引用的值,指向内存中的一块空间。对象引用赋值示例: @Test public void referenceTest() { User source = new User();...原创 2020-04-29 23:28:09 · 334 阅读 · 0 评论 -
Terminate vs Disconnect(别再傻傻分不清楚了)
在集成开发工具(Intellij Idea)关闭的时候是否遇到过这种情况?热部署(dev-tool)没有集成到你的SpringBoot项目中来,“机缘巧合”之下,关闭IntelliJ Idea窗口!此时弹出框框TODO 一张图片你又着急下班溜掉(去跟程序员的女朋友约会)思绪万千的时候你点了Disconnect当你下次打开IntelliJ Idea工具,启动你的项目,就会遇到问题:Th...原创 2020-03-13 18:43:25 · 8246 阅读 · 3 评论 -
LIKE模糊查询
任何一个后端开发人员都写过模糊查询的方法(当然包括猿Why)……后端会有这样几个过程:从前端接收查询条件参数,例如:conditionA,conditionBselectByLike(String conditionA,String conditionB);通过持久层、SQL预编译等步骤,就会有这样的SQL语句:SELECT d.fieldA, d.fieldB, d.fieldC...原创 2020-03-13 12:56:48 · 485 阅读 · 0 评论 -
单元测试模拟请求-编程方式(OkHttpClient)
场景:1:开发人员自行测试接口;(postman可行)2:可重复进行测试;(postman可行)3:参数灵活可调;(postman不可行)4:基础数据可配;(postman不可行)思路:类似于Mock模拟请求既然1可以用postman进行,ok!保证接口能调通先。step1:step2:将模拟请求代码化(postman支持代码生成,入口见上图,生成代码如下图)猿Why Java...原创 2020-03-03 19:10:36 · 888 阅读 · 0 评论 -
脱离集成开发工具构建项目
Maven + Git + VS Code官网快速构建项目框架代码并下载到本地(并解压)命令窗口进入项目文件,依次执行以下git命令$ git init$ git add .$ git status$ git commit -am "项目初始化"$ git remote add origin url$ git pull$ git push -u -f origin master...原创 2020-02-06 16:21:12 · 190 阅读 · 0 评论 -
JAVA equal和hashCode
Java程序中,==、equals是经常被拿来问的问题。在没有遇到具体的业务开发要求的时候,并没有对其有深刻的认识!直到最近。会用到equals的业务场景:某个类的实例(对象)再做对比(比较属性值)时候使用。有一篇文章将的特别好,传送门。文章具体细节不再做解释。==和equals的区别,最后引申出Java中地址和值得问题。又引申出hashCode这个Object的native方法。那么当...原创 2020-01-17 14:44:26 · 640 阅读 · 0 评论 -
一个基本的数据表格应该支持什么样的操作(需要什么接口)
前端技术,基于LayUI。最近半年的时间,在按照“全栈”的角色做开发。碰着些业务、前端开发、接口开发人员“不专业”的设计(自认为)。对于树形结构、数据表格,前端做什么数据暂存?新增、删除、更新逻辑混乱,鸡肋。一个简单数据表格都应该支持什么样的操作?最基础的是数据展示,即:调用接口加载、展示数据。工具栏可以提供操作:新增、删除、修改(包括批量新增、删除、修改)。并且三个操作在一个接口中完成...原创 2019-11-26 16:05:23 · 559 阅读 · 0 评论 -
ORM数据库插入操作,主键生成
数据库自动生成:数据库,自增型主键。插入操作完成后,返回主键值(以作他用),返回值写在传入参数的实体类中的主键属性中。另外,插入成功会返回1,代表受影响的记录条数(插入一条数据,受影响记录数自然为1)。弊端:分库、分表,单一主键唯一性保证需要单独维护。主键生成工具:生成唯一不重复的主键。好处:可以赋予业务含义...原创 2019-10-25 09:22:16 · 1369 阅读 · 0 评论 -
服务后台运行
Java程序员应该遇到过类似这样的命令:[root@localhost]# java -jar demo.jar无论是在Windows还是Linux下,这样的命令执行,都会有这么一个问题:当你的cmd或者窗口Linux本地或者xshell远程terminal,当窗口关闭或者链接断开是时候,对应的子进程就会死掉了。但是,这不是开发或者运维人员所希望的。那么,如果起一个进程在后天运行,不会随...原创 2019-04-26 17:09:32 · 1050 阅读 · 0 评论 -
Java OOM问题
阅读《深入理解Java虚拟机-JVM高级特性与最佳实践》.周志明 笔记关于OOM(out of memory),目前有两方面的接触。一个是在面试当中面试官会经常问到(面试造航母),另外一个就是在使用IDEA或者eclipse开发项目,项目启动过程中或者运行时候会出现OutOfMemoryError。线上运行的项目还从来没有遇到过这样的问题(但是总会遇到吧)!所以还是有必要去了解甚至是掌握相关的...原创 2019-03-16 00:30:18 · 1863 阅读 · 0 评论 -
Java中的时间类型处理
在Java中,时间类型的应用一直叫我脑壳疼。在计算(比较时间的先后、某一个时间节点的前后时间推算,如“最近一个周一是在几月几号”),这样的问题,对于计算机(或者说代码)来说,时间的计算就是以Unix元年开始的相对时间长度。Unix元年好比[数轴]上的[原点]。而对于用户(people)来说,当然是希望能够看到类似于“2019-09-26”或者是“2019-09-26 08:08:08”这样的东...原创 2019-09-26 09:25:26 · 980 阅读 · 0 评论 -
Java 内省机制 反射机制 应用实例
场景描述:当两个类的实例:a(A),b(B)中的属性有同名属性,类型也一样。这在Java开发当中是经常遇到的。想要将a的属性值赋值给b中的同名属性。解决方案1:写好多的if…else判断,且代码扩展性太差;解决方案2:利用Java的内省机制和反射机制。Apache BeanUtils做的非常好。要是有兴趣可以去好好看看。以下是笔者写的一段小例子:import java.be...原创 2018-10-29 16:02:46 · 252 阅读 · 0 评论 -
大文件(10G以上吧)的处理
笔者遇到一个场景:对一些大小10G以上的文件,进行数据统计。按照以前(处理比较小的文件,大概是千行级别的文件)的个人习惯,会将文件内容想办法存到数据库当中,然后写SQL语句进行统计。但是这次需要处理的文件实在有点大(千亿行级别)了。所以将整个解决过程记录下来:难题一:单个文件大小超过了我的计算机内存的大小,肯定是不能直接加载到数据库里边来操作了。想到的解决办法就是把大文件切割成小文件处理(过滤...原创 2018-11-28 10:56:35 · 7627 阅读 · 0 评论 -
ThreadLocal 方法耗时计算
《Java并发编程的艺术》笔记import java.util.concurrent.TimeUnit;/** * @Author: yangkun3 * @CreateDate: 2019/3/1 * @Description: 复用在方法调用耗时统计的功能上,在方法的入口前执行begin()方法, * 在方法调用后执行end()方法,好处是两个方法的调用不用在一个方法或者类中...转载 2019-03-02 10:33:42 · 1106 阅读 · 0 评论 -
对于一个后端来说,什么是RESTful API
不知道从什么时候开始,在招聘要求中出现这么一条:能够写出RESTful风格 API。先看概念:RSET即表述状态传递(Representational State Transfer)。表述性状态转移是一组织架构约束条件和原则。而满足这些约束条件和原则的应用程序或设计就是RESTful。需要注意,是设计风格而不是标准。另外REST 通常使用 JSON 数据格式。想想:当其他程序员看到你的...原创 2019-03-03 17:19:43 · 705 阅读 · 0 评论 -
Java GC
阅读《深入理解Java虚拟机-JVM高级特性与最佳实践》.周志明 笔记上一篇文章记录了自己学习JVM运行时数据区,对内存几个区域的划分有了了解,以及会遇到的一些OOM的问题。使用1.7和1.8的JDK环境跑了几个程序,结果有些不一样。为什么有些不一样,带着问题进行第三章的阅读:垃圾收集器与内存分配策略。目前内存动态分配和内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那么为什么...原创 2019-03-20 12:03:09 · 253 阅读 · 0 评论 -
JVM监控和分析工具
阅读《深入理解Java虚拟机-JVM高级特性与最佳实践》.周志明 笔记给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。经常使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度,但在学习工具之前,也应当意识到工具永远都是知识技能的一层包装,没有什么工具是“秘密武器...原创 2019-03-21 00:18:55 · 400 阅读 · 0 评论 -
虚拟机类加载机制
阅读《深入理解Java虚拟机-JVM高级特性与最佳实践》.周志明 笔记虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 -----引自 《深入理解Java虚拟机-JVM高级特性与最佳实践》第7章、Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。Java依...原创 2019-03-22 18:57:45 · 135 阅读 · 0 评论 -
Java并发编程-CAS
CAS(Compare-and-Swap):比较替换。这个思想非常的重要,在Java并发编程中多处用到,包括轻量级锁也用到了CAS的思想。所以我觉得有必要单独学习一下。class CAS{ Object value; Object getValue(){ return this.value; } void setValue(Objec...原创 2019-04-03 21:23:46 · 316 阅读 · 0 评论 -
Java内存模型与线程
阅读《深入理解Java虚拟机-JVM高级特性与最佳实践》.周志明 笔记Java内存模型主内存与工作内存Java内存模型的主要目的是定义程序中各个变量的访问规则,即虚拟机中变量存储到内存和从内存中取出变量这样的底层细节。此处的变量包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然不会存在竞争的问题。Java内存模型规定了所...原创 2019-03-26 17:22:02 · 168 阅读 · 0 评论 -
线程安全与锁优化
阅读《深入理解Java虚拟机-JVM高级特性与最佳实践》.周志明 笔记线程安全的实现方法:1.互斥同步互斥同步是一种常见的并发正确性保障手段。同步是指在多个并发线程访问共享数据时,保证共享数据在同一时刻只被一个(或者是一些,使用信号量的时候)线程使用。而互斥是实现同步的一种手段,临界区(Critical Section)、互斥量(Mutex)和信号量(Semaphore)都是主要的互斥...原创 2019-03-26 23:34:01 · 166 阅读 · 0 评论 -
Java并发编程-happens-before
Java规范提案中(JSR-133)使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作的执行结果需要对另外一个操作可见,那么这两个操作之间必须要勋在happens-before关系。两个操作可以是在同一个线程之内,也可以是不同线程之间。与写代码的人密切相关的happens-before规则如下:程序顺序规则:一个线程中每个操作,happens-bef...原创 2019-04-04 17:56:50 · 151 阅读 · 0 评论 -
Java并发编程-开篇:volatile与synchronized
关于多线程的问题,一直是面试过程中最令笔者头痛的问题。因为项目开发过程中,很少会遇到多线程的开发任务(可能是本人还比较low)。所以打算认真来学习一下多线程、高并发相关的知识。以《Java并发编程的艺术》这本书作为主要学习资料来看看。并且记录在自己的博当中,作为读书笔记。Java中所使用的并发机制依赖于JVM的实现和CPU指令。volatile关键字的应用:Java语言规范中对vola...原创 2019-04-03 20:13:08 · 311 阅读 · 0 评论 -
SpringBoot中文指南阅读笔记
SpringBoot到底是什么时候火起来的,为什么要选择它,是不好说的。目前上手直观的体验就是:配置很方便(注解方式)、部署方便(内嵌容器)、依赖关系成熟(基本无需解决jar包冲突问题)。但是面试的时候总是答不到面试官的点子上。所以打算找本书来看,于是选择了spring boot中文指南。Spring Boot特性:核心特性:SpringApplication | 外部化配置 | Prof...原创 2019-04-16 22:23:22 · 209 阅读 · 0 评论 -
《Spring Cloud微服务实战》阅读收获-微服务的基础(前提)
微服务九大特性微服务并不是什么心技术,而是一种业务架构的划分。不同的功能模块划分成为不同的服务,服务之间通过HTTP或者RPC进行调用 。spring cloud是建立在spring boot之上的,建立单个spring boot 服务:自动化配置、 快速开发、 轻松部署。单个spring boot 项目的配置是很简单的,但是如果是一个微服务架构的项目,开发人员还需要了解如何在Spri...原创 2019-05-06 21:26:18 · 219 阅读 · 0 评论 -
Java两种单例(Java并发编程的艺术)
本文作为自己的备忘录。基于volatile(可以防止指令重排序)和synchronized的双重检查。还可以对非static的实例字段进行初始化。public class SafeDoubleCheckedLocking { private volatile static Instance instance; public static Instance getInst...原创 2019-07-25 23:01:45 · 162 阅读 · 0 评论 -
正则表达式-这个操作有点骚
先前已经接触过一些正则表达式,以及实战应用。例如:日志切割、日志切割、日志切割……不过都是在Linux中操作的。作为一个Java开发人员,自然也避免不了需要使用到正则来秀一波操作。*****正文分割线场景:服务端接口提供者有一项工作是必须要做的,就是参数校验。比如字符串的长度限制(同数据库保持一致)、有语义的字符串(电话号码、邮箱地址等)。目前“猿why”我的做法是在需要校验的fiel...原创 2019-08-28 10:04:08 · 257 阅读 · 0 评论 -
分布式事务管理
分布式事务管理有一个业务操作包含了服务A、服务B、服务C的三个操作,当且仅当三个事务的操作都成功,算该业务场景成功完成。否则需要进行回滚。解决方案:基于XA协议的两阶段提交XA是一个分布式事务协议。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往是由数据库实现的,如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提...原创 2019-09-27 12:00:36 · 626 阅读 · 0 评论