
JAVA
文章平均质量分 53
火山九日啊
码出一片天
展开
-
记一次Shard JDBC的坑(SQLFeatureNotSupportedException: getObject with type)
环境Mybatis: 3.5.2+JDBC: shardingsphere-jdbc 4.1.1错误日志Error attempting to get column 'create_time' from result set. Cause: java.sql.SQLFeatureNotSupportedException: getObject with type; getObject with type; nested exception is java.sql.SQLFeatureNotSup转载 2022-04-16 10:46:42 · 1416 阅读 · 2 评论 -
JVM内存回收
JVM内存回收对象在Eden区分配大对象直接进入老年代长期存活的对象将进入老年代对象动态年龄判断老年代空间分配担保机制对象内存回收判断对象是否可回收的方法引用计数法可达性分析算法常见引用类型finalize()方法最终判定对象是否存活即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历再次标记过程。如何判断一个类是无用的类如何判断一个常量是废弃常量何为深拷贝浅拷贝?java会出现内存泄漏?什么情况下会发生栈内存溢出?对象在Eden区原创 2021-09-28 11:12:07 · 596 阅读 · 0 评论 -
jvm对象创建和内存分配机制
jvm对象创建和内存分配机制对象创建的过程类加载检查分配内存分配内存的方法对象内存分配的流程栈内分配对象逃逸分析标量替换分配内存并发问题的解决初始化零值设置对象头对象头分为两个部分对齐填充什么是指针压缩?为什么要进行指针压缩?执行 方法对象创建的过程类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。new指令对应到语言层面上讲是,new关键词、对象原创 2021-09-27 14:57:28 · 510 阅读 · 0 评论 -
JVM内存模型简谈
JVM内存模型JVM的主要组成JVM内存模型图为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?java会出现内存泄漏?什么情况下会发生栈内存溢出?栈溢出StackOverflowError示例字符串常量池八种基本类型的包装类和对象池JVM的主要组成作用:首先通过编译器将.java文件编译成.class文件,类加载器再把字节码文件加载到内存中。将其放在运行时数据区的方法区中,而字节码文件只是jvm的一套指令规范,并不能直接交由底层操作系统去执行,而是需要特定的命令解析器执原创 2021-09-23 12:53:37 · 272 阅读 · 0 评论 -
Docker Compose部署mysql
部署Mysql新建一个mysql.yml文件在同个目录下执行以下命令创建容器docker-compose -f mysql.yml up -dmysql.yml文件内容version: '3.7'networks: devnet: external: trueservices: mysql: image: mysql:5.7.27 container_name: mysql hostname: mysql restart: unles原创 2021-08-18 02:13:15 · 199 阅读 · 0 评论 -
Docker Compose部署Kafka
部署Kafka新建一个kafka.yml文件在同个目录下执行以下命令创建容器docker-compose -f kafka.yml up -dkafka.yml文件内容version: '3.7'networks: devnet: external: trueservices: zookeeper: image: bitnami/zookeeper container_name: zookeeper hostname: zookeeper原创 2021-08-18 02:11:38 · 232 阅读 · 0 评论 -
使用natapp内网穿透,亲测好用!
背景说明在对接微信和支付宝支付或者登录的时候,基本都需要进行回调接口的联调,而我们在本地开发的时候,由于内网地址无法被外网访问,所以第三方服务器无法回调我们的接口地址,所以我们需要一个内网穿透的工具帮我们实现, 才能让外网访问到我们内网的接口地址,这个就是natapp。官方示例链接: natapp官方新手教程文档地址.Java示例编写接口@RestController@RequestMapping("/wechat")@Slf4jpublic class WechatControlle原创 2021-07-21 17:32:55 · 494 阅读 · 0 评论 -
SpringBoot实现微信登录
1. 查看微信开发文档2. 申请测试号,可以获取到appId和appsecret(下面application.yml参数配置用到)3. 在测试号页面,关注自己的测试公众号。4. 网页授权获取用户信息点击修改,填上自己的域名,可以使用内网穿透工具将本地映射成域名5. 在项目中引入微信开发包和 <dependency> <groupId>com.github.binarywang</groupId>..原创 2021-07-21 16:57:20 · 2254 阅读 · 0 评论 -
Maven在打包的时候出现Could not find artifact错误怎么办?
原因:多模块项目构建,需要将parent项目先install , 然后才可以打包其他项目;原创 2021-06-01 20:16:03 · 5219 阅读 · 0 评论 -
CompletableFuture实现异步调用
项目场景:例如:项目场景:删除视频时候异步记录日志代码:自定义线程池@Slf4j@AllArgsConstructor@Configuration@EnableAsyncpublic class ExecutorConfig { private SettingProperties properties; @Bean("asyncExecutor") public Executor asyncExecutor() { ThreadPoolTa原创 2021-03-08 10:46:25 · 316 阅读 · 0 评论 -
ES报错:Elasticsearch health check failed
解决方案:添加如下配置即可顺利解决原创 2020-11-30 18:41:59 · 3245 阅读 · 0 评论 -
Java性能优化的15个细节
1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。2. 尽量避免随意使用静态变量当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如public clas转载 2020-08-10 10:54:54 · 176 阅读 · 0 评论 -
Idea将dev分支合并到master分支
当我们在dev分支开发完代码后,需要提交并合并到master分支,这时候我们就需要这几个步骤:首先将dev commit, 然后push到远程dev分支然后本地切换到master分支,拉取最新的master分支代码(多人开发必备)紧接着将dev的代码合并到本地master分支,最后再push到远程master上...原创 2020-06-30 18:51:02 · 8347 阅读 · 3 评论 -
Springboot初始化之CommandLineRunner
我们的Springboot项目在启动后,有时候我们希望程序帮我们马上执行某些代码,可以使用 org.springframework.boot 包提供给我们的CommandLineRunner接口,写一个类实现它,并重写run 方法即可,下面直接上代码:@Component@Order(value = 2)public class CommandLineRunnerTest implements CommandLineRunner { @Override public void r原创 2020-06-29 16:27:20 · 289 阅读 · 0 评论 -
@Async注解实现异步调用
说明:在Springboot项目中,使用@Async注解其实很简单,其作用就是在调用方法时加上这个注解,该方法的调用就变成了异步,无需等待执行完成,即可执行后续的代码逻辑。使用:1.首先pom文件引入必要的依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId&g原创 2020-06-18 11:44:31 · 308 阅读 · 0 评论 -
反射是什么? 什么是java的反射?
在 Java 中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为 RTTI,英文全称为 Run-Time Type Identification,即运行时类型识别,有没有一点“知行合一”的味道?运行时类型识别主要由Class类实现。在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得;但有一些知识不是的,需要在实践的时候才能得到真知——这或许就是王阳明提倡的“知行合一”。01、 Class类在Java中,我们常用“class”(首字母为小写的c转载 2020-06-05 17:32:14 · 132 阅读 · 0 评论 -
最简单的Kafka集群搭建方式!
最简单的Kafka集群搭建方式!前言安装Docker ComposeKafka集群搭建前言本文使用Docker compose 快速搭建kafka集群 , Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。安装Docker Compose使用Docker compose 的前提是安装了Docker , Docker的安装这里就省略了 , 如果没有安装的可以自行百度安装, 接下来是安装Docker Compose的步骤:首先直接原创 2020-06-03 21:27:55 · 566 阅读 · 0 评论 -
非常实用的8种idea插件, 还不知道就out了!
IntelliJ IDEA是目前最好最强最智能的Java IDE,默认已经集成了几乎所有主流的开发工具和框架。在这里不讨论Idea和Eclipse的关系,这里介绍几款比较火的的Idea插件。目录translationstatisticRestfulToolkitlombok (强烈推荐)alibaba Java coding guidelines (强烈推荐)sonarLintFree-idea-mybatis (强烈推荐)CodeGlance translatio原创 2020-06-02 16:09:43 · 1580 阅读 · 0 评论 -
Java面试必问之--单例模式(懒汉式)
public class Singleton { private static volatile Singleton instance; private Singleton(){ } public static Singleton getInstance() { if (Objects.isNull(instance)) { ...原创 2020-03-24 16:08:45 · 170 阅读 · 0 评论 -
ApplicationRunner 接口的作用
SpringBoot 的 ApplicationRunner 接口可以让项目在启动时候初始化一些信息 , 比如 数据库连接 , 或者自定义的一些配置等;步骤 : 重写ApplicationRunner 接口的run方法 , 在run方法中输出你要的配置信息即可.public class InitLoad implements ApplicationRunner { @Overr...原创 2020-01-06 13:51:44 · 4046 阅读 · 2 评论 -
使用拦截器获取用户真实IP地址
@Log4j2public class MyInterceptor extends HandlerInterceptorAdapter { private static final String USER_AGENT = "user-agent"; /** * 重写前置拦截器 * @param request * @param response...原创 2019-12-03 18:01:59 · 1682 阅读 · 0 评论 -
JAVA实现文件下载 , 文件删除
/** * @param filePath 文件将要保存的目录 * @param url 请求的路径 * @return * @从制定URL下载文件并保存到指定目录 */ public static boolean saveUrlAs(String url, String filePath) { int b...原创 2019-11-20 17:06:11 · 1178 阅读 · 0 评论