Java
文章平均质量分 84
写代码的喵o
人菜还爱玩
展开
-
【撸源码】【ThreadPoolExecutor】线程池的工作原理深度解析——上篇
线程池这块,作为高频面试题,并且实际使用场景巨多,所以出了这篇文章,一块来研究一下线程池的实现原理,运行机制,从底层深挖,不再局限于面试题。该方法有三个重载,分别对应的参数为Callable第一个为单任务,可以等待执行,调用get方法,得到的结果是null。第二个为任务+一个固定的返回值。调用get方法,最终会拿到设置的这个result。第三个为传入一个有返回值的任务,即callback,调用get,可以拿到任务执行结果返回值。提交一批任务,全部执行,全部执行完之后,返回结果。原创 2024-05-24 17:53:05 · 868 阅读 · 0 评论 -
【撸源码】【mybatis-plus】乐观锁和逻辑删除是如何工作的——下篇
至此,乐观锁的核心原理已经全部完成,到这,乐观锁的整体原理逻辑均已清楚。但是在乐观锁原理解读的过程中,有一些深入的点需要分析,接着我们就来拓展的再深度挖掘下非核心原理,实现的也很精妙,学习意义很大。原创 2024-05-17 10:56:35 · 893 阅读 · 0 评论 -
Kafka从0到消费者开发
多台机器启动集群环境,配置改动很少,都很简单。其他的按照正常上面的流程,重新启动即可。原创 2024-05-09 10:27:49 · 469 阅读 · 0 评论 -
【撸源码】【mybatis-plus】乐观锁和逻辑删除是如何工作的——上篇
至此,mp将所有表数据缓存的逻辑已经全部完成了。回想2.1.1中所说,这里一定会有值,那么这里一定是全部的表吗?整合一下这个方法的调用链简简单单,又是一篇,至此,逻辑删除的全部工作原理已经完全清晰。逻辑删除很有用,并且拥有较为强大的能力,但一些细节的处理不足,还有一些特殊的要求是无法满足的,此时就需要屏幕前的你大展拳脚给增强一下了。基础组件的升级需要谨慎谨慎再谨慎,一不小心,整个公司的系统都会被你全部干瘫痪了。感悟读源码到底有没有用处?我理解的源码好处是。原创 2024-05-09 10:02:34 · 893 阅读 · 0 评论 -
KSTry简单使用说明
ksTry是一个开源的流程编排项目,和Spring适配度极高,文档齐全,使用简单。原创 2024-02-29 10:07:20 · 846 阅读 · 0 评论 -
dubbo注册中心及服务间调用问题排查
通过一系列测试,最终可以确定的是,nacos一个节点宕机,是不会导致服务异常的。本次说nacos集群不稳定,无非是一次甩锅给架构的一次行为而已。后需通过细节了解并非所有服务出现不可用,nacos集群服务所有的服务端,只有某个服务链在报异常。报异常的服务链,确实有服务宕机的情况产生。后需宕机服务启动后,依然报这个错,随后直接启动了nacos,启动后就不报错了,很有可能是在空白期,还没有达到真实可调用的情况。当nacos启动后,正好空白期过去了,就下了结论认为是nacos的问题。原创 2024-02-29 10:00:40 · 1006 阅读 · 0 评论 -
DDD架构实践
什么是ddd架构,是以ddd思想为参考,做出一份符合ddd思想的框架。随着技术的迭代升级,越来越多的瓶颈暴露出来,性能瓶颈,系统复杂度瓶颈,这些都逐一被迭代出的技术产物解决。最终的一个产物微服务,几乎完美解决了性能和系统复杂度的问题,保证服务性能的前提下,还简化了系统的复杂度,降低开发难度,让系统更加容易维护。但是对于B端企业来说,单单解决性能和系统复杂度问题还远远不够,极度复杂的业务,让系统难以维护,动辄几百上千行的方法,让开发人员头疼。原创 2023-12-18 10:53:38 · 1713 阅读 · 0 评论 -
记一次由 jedis 引发的离谱选学问题
我的应用中,使用 jedis 作为连接 redis 的客户端,一直在用的好好的,后来有一个新的组件,也需要使用 redis,但是组件是内部封装的,我只能提供一个 StringReidsTempalte,所以我基于应用本身构造的 factory,又重新构建了一个新的 template。使用版本。原创 2023-12-08 11:25:02 · 960 阅读 · 0 评论 -
java 如何使用代理访问接口
在和某开放平台交互的时候,由于必须要设置白名单,本地家中ip 会变化,配置白名单的流程又很复杂,所以需要使用代理的方式来访问开放平台。本文主要讲的就是在 java 中如何使用代理来访问开放平台,利用服务器的公网 ip,免除一次次的配置 ip 带来的困扰。原创 2023-12-06 11:52:50 · 1434 阅读 · 0 评论 -
jvm事故排查--cpu利用率高问题处理
不知道从什么时候开始,我的服务整体都超级慢,一个很简单的查询数据库的接口,从调用到查询,总共耗时13秒+,由于涉及到内网环境、rpc接口调用等情况,一直无法精准定位。系统环境分布:系统分为nginx + 应用网关 + 应用服务 + tidb数据库 + redis缓存 + nacos调用链:由浏览器发起请求,调用到nginx。由nginx将请求转发到应用网关网关经过几个拦截器的处理之后,将请求路由到后端服务后端服务通过拦截器,进行认证。原创 2023-12-01 15:30:33 · 1241 阅读 · 0 评论 -
【问题记录】一次由filter引发的血案,如何定位上游链路的问题,问题排查与定位思路分享
由于网关B转发请求的时候,有时携带了登录信息,有时没有携带。导致filter中的执行链路异常,网关的threadLocal没有做npe的兼容,导致应用服务器抛出异常,触发物理网关的302转发。排查问题困难,由于网关侧没有做好链路id的转发和继承,导致将问题引向了一个错误的方向。写代码时,一定要注意代码习惯,不要去写那种明显有npe的情况,尽量去避免系统因npe导致的异常做好异常控制,不要任由异常肆无忌惮的往上抛链路id管控好,即使没有办法统一,也要建立一个关联关系,不要引导错误的指向。...原创 2022-08-04 08:59:08 · 293 阅读 · 1 评论 -
【idea插件开发】从0入门idea插件开发,idea插件开发教程,如何开发idea插件
作为一枚程序员,平时最常用的ide就是IntelliJ IDEA。平时会用到各种各样的插件,通过插件的使用,提高自己的开发效率。idea具有全局性,安装好插件后,对idea生效,所有的工程均能找到。idea使用的便捷性,在固定的菜单中,或者右键即可看到该插件的使用入口专注度高,展示出来的内容均是自己需要关注的,不需要关注的就不会展示。可以专注思考自己要怎么用。和系统解耦,插件可以给给开发提效,却不会去占用项目的空间位置。…目前已有插件并不能真的完全满足自己的需求。举个简单的栗子,比如,最近在用mybatis原创 2022-06-26 15:13:00 · 25567 阅读 · 4 评论 -
局部线程池为什么会造成内存泄漏
公司里面有一个部门产生的故障,故障问题是服务器oom,导致服务不可用。最终排查到的原因是有一个方法,在内部创建了线程池。每次调用该方法都会创建一个线程池,从而导致了oom。这个oom是由于什么原因造成的呢?是常规的堆内存溢出导致的oom吗?创建的线程池对象,会被gc回收吗?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DNfWWDzs-1654603140526)(https://raw.githubusercontent.com/xiaopangzhi795/learn-原创 2022-06-07 20:05:38 · 1035 阅读 · 0 评论 -
每天十道面试题之性能篇(二)
本期面试题简述垃圾回收机制如何判断一个对象是否存活(或GC对象的判定方法)垃圾回收的优点和原理,并考虑两种回收机制垃圾回收器的基本原理是什么,垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?java中会存在内存泄漏吗?请简单描述深拷贝和浅拷贝system.gc()和Runtime.gc()会做什么事情?finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?如果对象的引用被置为null,垃圾收集器是否原创 2021-08-12 19:20:27 · 197 阅读 · 0 评论 -
Spring Boot+RabbitMQ 实现延迟消息实现完整版,实用!
[转自:Spring Boot+RabbitMQ 实现延迟消息实现完整版,实用!](https://mp.weixin.qq.com/s/BW5eh4xYFrYBdz0MwcMdgQ)概述曾经去网易面试的时候,面试官问了我一个问题,说下完订单后,如果用户未支付,需要取消订单,可以怎么做我当时的回答是,用定时任务扫描DB表即可。面试官不是很满意,提出:用定时任务无法做到准实时通知,有没有其他办法?我...原创 2020-05-28 00:28:18 · 178 阅读 · 0 评论 -
创建线程池的几种方式,不要再用工具创建了,非常不安全
不要着急,静下心来慢慢看不能使用快速创建线程池的方式,都非常不安全,要自己创建。ThreadPoolExecutor pool = new ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, ...原创 2020-05-27 06:27:44 · 385 阅读 · 0 评论 -
如何使用java获取自己计算机的详细信息--->超级详细的教程
准备工作准备好相关第三方包官网下载地址:https://sourceforge.net/projects/sigar/files/latest/download?source=files如果下载速度过慢,可以考虑使用站内地址下载哟 hyperic-sigar-1.6.4.zip 密码:cp7o有兴趣的可以去了解下这个平台:hyperic官网获取和自己系统一致的dll文件将下载好的文...原创 2020-06-05 00:40:43 · 539 阅读 · 0 评论 -
swagger 配置教程
第一步 引入相关pom<dependency> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter</artifactId> <version>1.9.0.R...原创 2020-06-15 00:45:35 · 971 阅读 · 0 评论 -
使用IDEA搭建SwaggerUI 中文乱码解决!
1、file --> Settings --> file encodings(Ctrl+Alt+S)2、在弹出的对话框右侧,将所有的Encoding(一共三个)全部改为“UTF-8”3、Apply and OK 。4、然后清除缓存重启(InValidate Caches/Restart)...原创 2020-06-15 00:34:20 · 1458 阅读 · 0 评论 -
java获取客户端真实的ip地址,客户端信息等
获取客户端真实ip// Request 该接口是blade包下的,不同框架使用不同的接口即可。一般spring boot的可以使用java封装的httpServletRequest 对应获取头信息改为get方式即可。public String getIpAddr(Request request) throws UnknownHostException { String Xi...原创 2020-06-13 00:19:30 · 172 阅读 · 0 评论 -
后台获取客户端真实ip的时候,一直获取不到的问题。
http请求头嘛,都是可以自己写的。如果你循环出所有的请求头,然后逐一遍历,将所有的参数名统一大小写,也不会出现这种问题,但是如果你要根据参数名精准获取某一个请求头的时候,一定要精准获取,否则即使获取的姿势对,也会和自己想要的结果擦肩而过!如果使用正确的姿势,nginx配置也正确的情况下,依然获取不到自己想要的内容,别再犹豫了,干看是没用的,请求进来的时候,将所有的请求头打印出来成日志,然后逐一去比对吧!程序猿永远都是一群动手的人。很多东西需要思考,但是思考的东西总归是需要付诸行动去验证的。...原创 2020-06-13 00:38:47 · 2115 阅读 · 2 评论 -
maven打包的时候,跳过单元测试
1、pom.xml中配置<properties> <!--跳过单元测试 --> <maven.test.skip>true</maven.test.skip> <maven.javadoc.skip>true</maven.javadoc.skip></properties>2、使用...原创 2020-06-10 00:09:13 · 297 阅读 · 0 评论 -
Java项目运维与监控调优
引言编写目的目前线上问题是以java的为主,但是配置方式不是特别的统一,把这些进行统一化后有利于问题的定位和解决一些不稳定因素。阅读对象开发人员、运维人员。JAVA项目线上配置启动java应用注意事项服务器一定要安装JDK,不要JDK和JRE混装,要使用JDK作为系统环境变量,并且使用JDK启动java服务,否则jps,jmap,jstat等工具不能使用。如果不能使用将不能对jav...原创 2020-06-11 00:59:45 · 1376 阅读 · 0 评论 -
高效随机数工具类 ---》Random是伪随机
package com.test.demo.controller;import java.io.Serializable;import java.util.concurrent.ThreadLocalRandom;public class TestController implements Serializable { private static final long seri...原创 2020-06-25 00:41:41 · 128 阅读 · 0 评论 -
判断是否在jar包中运行
URL url = FactoryTestApplication.class.getResource("");String protocol = url.getProtocol();if ("jar".equals(protocol)) { HandlerProcessor.test = "jar包中启动";} else if ("file".equals(protocol)) {...原创 2020-06-25 00:58:57 · 1035 阅读 · 0 评论 -
数据库多数据源自动选择实现
1、写对应枚举的数据源public enum DataSourceEnum { DB1("空铁", "datasource1"), DB2("同程", "datasource2"), DB3("账号", "datasource3"); private String name; private String value; DataSourceEnum...原创 2020-06-25 00:50:42 · 559 阅读 · 0 评论 -
list拷贝之System.arraycopy的用法
System.arraycopy(src, 0, src, 3, 2);描述解释:String src[] = new String[] { "hello", "huang", "bao", "kang" };src = Arrays.copyOf(src, 5);System.arraycopy(src, 0, src, 3, 2);for (String str : src) { ...原创 2020-06-25 00:54:58 · 555 阅读 · 0 评论 -
mybaties详细配置过程
下载驱动jar包,以及mybaties包。在pom文件中添加约束即可<!-- ********mybatis********* --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.myba...原创 2020-06-25 00:57:12 · 166 阅读 · 0 评论 -
spring boot 项目中,配置文件相关配置。附加等配置
配置文件可以写成这种结构目录的#选择关联的主配置文件,省略前面的application,只写后面的dev即可。可以快捷配置线上,开发,测试等环境不同的配置文件spring.profiles.active=dev# 项目启动后所使用的端口server.port#将配置写到一个配置文件太过凌乱,分开写,可以让可读性和维护性增强。多个配置文件,可以使用这个配置将之关联到一起spring....原创 2020-06-25 00:39:35 · 106 阅读 · 0 评论 -
spring boot 实现全局404页面
springBoot2.0版本以下import org.springframework.boot.autoconfigure.web.ErrorController;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping; ...原创 2020-06-25 00:13:19 · 1043 阅读 · 0 评论 -
ssm全局异常处理
在这里即使用GlobalExceptionHandler类捕获控制层的异常,代码如下:package org.jit.sose.exception;import java.util.HashMap;import java.util.Map;import org.springframework.web.bind.annotation.ControllerAdvice;import org....原创 2020-06-25 00:44:24 · 511 阅读 · 0 评论 -
Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Pointcut is n...
例:<aop:config> <aop:pointcut expression="execution(* com.zsn.Service.Impl.*.*(..))" id="myPointcut" /> <aop:advisor advice-ref="advice" pointcut-ref="myPointcut" /> </ao...原创 2020-06-25 00:54:34 · 2569 阅读 · 0 评论 -
ssm框架搭建
使用框架的版本:Spring 4.0.2 RELEASE Spring MVC 4.0.2 RELEASE MyBatis 3.2.6Maven引入需要的JAR包<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...原创 2020-06-25 00:42:51 · 87 阅读 · 0 评论 -
spring cloud找不到注册中心的问题
服务端配置server.port=10081eureka.instance.hostname=localhosteureka.client.register-with-eureka=falseeureka.client.fetch-registry=falseeureka.client.service-url.default-zone=http://${eureka.instance....原创 2020-06-25 00:22:04 · 954 阅读 · 0 评论 -
通过 java 反射调用方法的坑 java.lang.NoSuchMethodException
有时候通过java反射调用方法 会报 java.lang.NoSuchMethodException ,但是进入类里面查看,明明是有这个方法,咋提示没有呢?这是因为有的方法是私有的,而代码里面是通过 getMethod 方法获取,就会报这个错误。要知道原因, 需要搞清楚以下四个方法的区别getMethods() 返回所有公共方法的对象数组getMethod(String name,Clas...原创 2020-06-25 00:48:42 · 798 阅读 · 0 评论 -
SpringBoot项目取消数据库配置
@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。springboot会自动注入数据源,而你却没有配,所以他就抛出该异常。如果你只是简单的想建个项目,并不需要数据库支持,那么你可以让他不去注入数据源。@SpringBootApplication(exclude={...原创 2020-06-25 00:16:00 · 807 阅读 · 0 评论 -
System.arraycopy底层源码
JDK:jdk1.8.0_11OpenJDK:openjdk-8u40-src-b25-10_feb_2015public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, ...原创 2020-06-25 00:46:18 · 1627 阅读 · 1 评论 -
项目初始化类
原文链接Spring中的InitializingBean接口的使用InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。测试,如下:import org.springframework.beans.factory.InitializingBean;public cl...原创 2020-06-25 00:51:49 · 85 阅读 · 0 评论 -
通过反射,获取类注解上面的值
package com.zllog.factorytest.factory;import com.google.common.collect.Maps;import com.zllog.factorytest.annotation.HandlerType;import com.zllog.factorytest.util.SpringContextUtil;import org.spri...原创 2020-06-25 00:36:58 · 160 阅读 · 0 评论 -
java自定义注解
word注解代码@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Test { String name() default "小明"; int age() default 19;}...原创 2020-06-25 00:17:56 · 110 阅读 · 0 评论
分享