Java
文章平均质量分 65
洞之蝉
真正想做的人总是什么也不说,扭头就去做了。
展开
-
RPC框架原理
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。目前流行的开源 RP转载 2022-02-15 16:09:29 · 411 阅读 · 0 评论 -
ThreadLocal内存泄漏案例分析实战
用代码实战,彻底搞清楚ThreadLocal发生内存泄漏的情况。很多文章讲的模棱两可,在和群友的沟通中,基本弄清楚了ThreadLocal到底是什么回事,解决大多数文章都无法把知识点和实际使用结合起来讲。先写个小例子/** * 测试threadLocal内存泄漏 * 01:固定6个线程,每个线程持有一个变量 * 按理来说会有 6 * 5 = 30M内存无法回收,其余的在set方法中覆盖了。 */public class ThreadLocalOutOfMemoryTest { s转载 2021-11-16 15:56:32 · 861 阅读 · 0 评论 -
idea找不到maven
点击菜单栏Help->Find Action(Ctrl+Shift+A),输入Maven projects原创 2021-08-31 17:01:29 · 153 阅读 · 0 评论 -
Class类文件的结构(一)常量池、访问标志和索引
https://blog.csdn.net/qq_40511966/article/details/94410672转载 2021-07-25 15:28:26 · 66 阅读 · 0 评论 -
Java限流解决方案
前言说到限流,想必大家都不陌生,一个很简单的例子就是,在12306上面买票的时候,遇到某时刻开始抢票的时候,经常页面会弹出一个类似请稍后重试的提示,从后端的技术层面来看,大概有2层解释,第一是服务器担心扛不住瞬时的高并发流量被拖垮而快速响应,另一个就是对当前的这个请求做了限流限流基本概念结合大家过往经验,不难理解“限流”的含义,对一般的限流场景来说它具有两个维度的信息:时间 限流基于某段时间范围或者某个时间点,也就是我们常说的“时间窗口”,比如对每分钟、每秒钟的时间窗口做限定资源 基于可用资源转载 2021-07-21 19:57:04 · 1908 阅读 · 0 评论 -
Java 集合深入理解
https://blog.csdn.net/u011240877/category_6447444.html讲的很好原创 2021-07-16 17:10:30 · 203 阅读 · 1 评论 -
字节码增强技术探索
转自:https://tech.meituan.com/2019/09/05/java-bytecode-enhancement.html, 侵删1.字节码1.1 什么是字节码?Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也可以看出字节码对于Java生态的重要性。之所以被称之为字节码,是因为字节码文件由十六进制值组成,而JVM以两个十六进制值为一组,即以字转载 2021-07-15 11:55:03 · 268 阅读 · 0 评论 -
Lambda表达式
一、lambda表达式格式//排序 按binlog_dateCollections.sort(resultList, (o1, o2) -> Long.valueOf(new JSONObject((Map<String, Object>) o2).getString("binlog_time")) .compareTo(Long.valueOf(new JSONObject((Map<String,...原创 2021-07-08 13:24:07 · 70 阅读 · 0 评论 -
使用Picocli创建Java命令行程序
https://www.codenong.com/b-java-picocli-create-command-line-program/1.简介在本教程中,我们将使用picocli库,该库使我们可以轻松地用Java创建命令行程序。首先,我们将创建一个Hello World命令。 然后,我们将通过部分复制gitcommand来深入了解该库的关键功能。2.你好世界命令让我们从简单的事情开始:Hello World命令!首先,我们需要将依赖项添加到thepicocli项目中:转载 2021-07-06 11:15:12 · 1006 阅读 · 0 评论 -
基于阿里镜像仓库配置的 settings.xml
<?xml version="1.0" encoding="UTF-8"?><settings> <localRepository>/home/.m2/repository</localRepository><!--需要改成自己的maven的本地仓库地址--> <mirrors> <mirror> <id>alimaven</id> .转载 2021-07-06 00:37:02 · 276 阅读 · 0 评论 -
cglib之Enhancer
1. 背景cglib库的Enhancer在Spring AOP中作为一种生成代理的方式被广泛使用。本文针对Enhancer的用法以实际代码为例作一些介绍。2. Enhancer是啥Enhancer是cglib中使用频率很高的一个类,它是一个字节码增强器,可以用来为无接口的类创建代理。它的功能与java自带的Proxy类挺相似的。它会根据某个给定的类创建子类,并且所有非final的方法都带有回调钩子。2.1 Callback那么Enhancer使用的Callback具体有哪些呢?下面介绍以转载 2021-07-04 21:41:35 · 1547 阅读 · 0 评论 -
Java 9中的HTTP / 2支持简介
1.简介IETF流媒体小组于2015年(即HTTP / 1.1发布后的16年)批准了HTTP / 2协议。 HTTP / 2有望降低延迟,并且使许多替代方法变得过时,而这些替代方法是HTTP / 1.1所必需的,以便能够满足当今的响应时间要求。 在本文中,我将简要介绍HTTP / 2以及它如何更新基于文本的HTTP / 1.1,然后研究Java 9中即将推出的HTTP / 2支持。2. HTTP / 1.1的延迟优化技术人们越来越多地在Internet上住院,但是他们不会注意到,如果响应时间低.转载 2021-07-04 16:27:40 · 804 阅读 · 0 评论 -
JHSDB
我喜欢在分析性能和其他基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具,并在诸如jcmd,jps,jstat,jinfo,jhat和jmap,jrunscript,jstack之类的工具上进行博客撰写和jdeps。 JDK 9带来了新的命令行工具与具体涉及到新的JDK 9的功能,如模块(多个工具JLINK和JMOD)和增强弃用(jdeprscan)。 在本文中,我将重点介绍JDK 9随附的用于处理性能和可维护性问题的新命令行工具:jhsdb。...转载 2021-07-04 16:19:20 · 2274 阅读 · 1 评论 -
浅析WeakHashMap
在Java或者是Android编程中,我们一般都会使用到Map,比如HashMap这样的具体实现。更高级一点,我们可能会使用WeakHashMap。WeakHashMap其实和HashMap大多数行为是一样的,只是WeakHashMap不会阻止GC回收key对象(不是value),那么WeakHashMap是怎么做到的呢,这就是我们研究的主要问题。在开始WeakHashMap之前,我们先要对弱引用有一定的了解。在Java中,有四种引用类型强引用(Strong Reference),我们正常编转载 2021-06-17 21:12:19 · 174 阅读 · 0 评论 -
Guava cache使用总结
缓存分为本地缓存和远端缓存。常见的远端缓存有Redis,MongoDB;本地缓存一般使用map的方式保存在本地内存中。一般我们在业务中操作缓存,都会操作缓存和数据源两部分。如:put数据时,先插入DB,再删除原来的缓存;ge数据时,先查缓存,命中则返回,没有命中时,需要查询DB,再把查询结果放入缓存中 。如果访问量大,我们还得兼顾本地缓存的线程安全问题。必要的时候也要考虑缓存的回收策略。今天说的 Guava Cache 是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。他很好转载 2021-03-07 11:46:19 · 315 阅读 · 0 评论 -
Java本地缓存技术选型(Guava Cache、Caffeine、Encache)
前言对一个java后台开发者而言,提到缓存,第一反应就是redis和memcache。利用这类缓存足以解决大多数的性能问题了,并且java针对这两者也都有非常成熟的api可供使用。但是我们也要知道,这两种都属于remote cache(分布式缓存),应用的进程和缓存的进程通常分布在不同的服务器上,不同进程之间通过RPC或HTTP的方式通信。这种缓存的优点是缓存和应用服务解耦,支持大数据量的存储,缺点是数据要经过网络传输,性能上会有一定损耗。与分布式缓存对应的是本地缓存,缓存的进程和应用进程是同一个,转载 2021-03-07 11:21:53 · 1885 阅读 · 0 评论 -
maven 本地环境、开发环境 、测试环境、生产环境打包
在平常开发的过程中,我们的项目配置文件经常有有几套分别对应自己本地的环境、开发环境、测试环境、以及生产环境。因为在不同的环境中项目的相关配置也会有相关的不同,我们在不同的环境中部署就要手动修改为对应环境的配置,这样太麻烦了以及这样也会很容易出错。目前JAVA相关的项目基本都是使用Maven来进行构建。在maven中实现多环境的构建可移植性需要使用profile,通过不同的环境激活不同的profile来达到构建的可移植性。接下来我们就通过maven的相关配置来在打包时指定各个环境对应配置文件。第一步转载 2021-03-04 11:44:30 · 488 阅读 · 1 评论 -
IDEA注解标红,提示Cannot resolve symbol
file——》Invalidate Caches/Restart 清除缓存并重启IDEA重启之后,点击pom.xml,右键选择maven ,reimport ,依然未果的话选择重启电脑如果上述办法依然报错的话,可以检查setting中的关于maven的配置,查看maven home directory的路径,user setting file的路径,local repository的路径,之后再重新maven,选择reimport。就可以解决了...转载 2021-02-19 15:06:36 · 1623 阅读 · 1 评论 -
Kafka分区策略
1. 生产者分区选择配策略生产者在将消息发送到某个Topic ,需要经过拦截器、序列化器和分区器(Partitioner)的一系列作用之后才能发送到对应的Broker,在发往Broker之前是需要确定它所发往的分区。如果消息 ProducerRecord 指定了partition字段,那么就不需要分区器。 如果消息 ProducerRecord 没有指定partition字段,那么就需要依赖分区器,根据key这个字段来计算partition的值。分区器的作用就是为消息分配分区。publi.转载 2021-02-06 16:37:39 · 198 阅读 · 0 评论 -
pom文件中依赖红名解决方案
解决方案:右击pom.xml——》maven——》reimport原创 2020-11-17 11:52:56 · 1508 阅读 · 0 评论 -
POJO、JavaBean和EJB的区别
1、POJO(Plain Old Java Object)“Plain Old Java Object”的意思是“纯朴旧式的java对象”,现在大家也称它作“简单的java对象”。何为纯朴旧式?在该对象中只有private属性的参数以及根据每个参数定义的get和set方法,没有其它的方法、没有类的继承、接口的实现等,更没有被其它框架侵入的java对象。public class Student { private String name; private ...转载 2020-05-30 16:31:49 · 402 阅读 · 0 评论 -
mybatis: nested exception is org.apache.ibatis.binding.BindingException:
免责声明:转载仅仅因为解决了我的问题,如果对你无效,麻烦出门右拐别瞎在评论里怨天尤人。异常org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'seckillId' not found. Available...转载 2020-04-17 09:57:02 · 5421 阅读 · 4 评论 -
fastjson解析对象map时乱序问题解决方案
json = (JSONObject)JSON.parse(logTemplateObj.get(key), Feature.OrderedField);原创 2019-11-08 14:50:12 · 869 阅读 · 0 评论 -
基于Lucene 的一个简单文件索引
1.lucene适用范围文本检索、网站信息检索、数据库搜索2.lucene的组件【1】.document对象表示被索引的文档,IndexWriter将文档add到index中【2】用户query时,通过indexSearcher搜索lucene的index,同时计算term weight和score,之后返回结果3.API调用方法:创建索引创建indexWriter写入index,包括参数:1)I...原创 2018-02-28 15:02:12 · 342 阅读 · 1 评论 -
maven junit.framework不存在问题解决
转自:http://blog.csdn.net/hongweigg/article/details/52384655问题在使用maven进行一个工程的编译,已加入junit包的依赖,编译的时候却总是报“junit.framework不存在”错误。pom.xml中junit包加入如下:[html] view转载 2018-02-02 18:11:57 · 1963 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
转自:https://my.oschina.net/feichexia/blog/196575摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业转载 2016-10-17 11:28:53 · 1222 阅读 · 0 评论 -
使用 Maven 和 Eclipse IDE 创建 .jar 部署程序包 (Java)
本章节介绍如何使用 Eclipse IDE 和用于 Eclipse 的 Maven 插件将 Java 代码打包到部署程序包中。主题在您开始之前步骤 1:创建并构建项目在您开始之前安装用于 Eclipse 的 Maven 插件。启动 Eclipse。从 Eclipse 的 Help 菜单中,选择 Install New Software转载 2016-04-01 16:45:11 · 826 阅读 · 0 评论 -
找不到或无法加载主类(Exception in thread "main
http://my.oschina.net/leejun2005/blog/106789?fromerr=oIhx8gHQ 有时候 Eclipse 会发神经,好端端的 project 就这么编译不了了,连 Hello World 都会报“找不到或无法加载主类(Exception in thread "main" java.lang.NoClassDefFoundErro转载 2015-11-30 19:28:30 · 3193 阅读 · 0 评论 -
FTP的PORT(主动模式)和PASV(被动模式)
转自 http://my.oschina.net/binny/blog/17469最近做一个项目用到FTP和其它系统进行文件传输,结果在FTP网络连接的问题上花了很多时间,由于太久没搞多FTP,忘记了FTP不单单开放21端口,客户端采用不同连接模式对网络有不同。在此重温一下FTP的主动模式和被动模式的相关知识。 在使用FTP时,如果客户端机器和FTP服转载 2015-11-07 15:46:15 · 1479 阅读 · 0 评论 -
intelli idea中配置Tomcat找不到的解决办法
这两天新入职一家公司,公司用的是intelli idea,以前用习惯了eclipse,感觉到有点不太习惯,当然,intelli idea也有自己的强大之处。在开始配置Tomact之前,按照网上的说法, 发现点击+号之后没有Tomcat 于是乎,又去网上查找,找到一种说法是,关闭工程之后去plugins里面手动的添加。步骤如下: 然后网上那个人的说法是这样的, 但实际上我的又是这样的:还是没有 ...转载 2018-03-16 13:45:12 · 46706 阅读 · 17 评论 -
IDEA配置Tomcat
配置IntelliJ在IntelliJ的设置中,可以设置maven的安装目录,settings.xml文件的位置,和本地仓库的位置等信息。新建新建maven项目,create from archetype,选择maven-archetype-webappNext,填写GroupId,ArtifactId和VersionNext,这里在Properties中添加一个参数archetypeCatalo...转载 2018-03-16 14:52:18 · 435 阅读 · 0 评论 -
spark (java API) 在Intellij IDEA中开发并运行
转自:https://blog.csdn.net/dream_an/article/details/54915894概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序。 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中运行Spark程序.第二部分,将开发程序提交到Spark local或者hadoop...转载 2018-05-03 11:40:13 · 1463 阅读 · 0 评论 -
java自定义注解
java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。1、元注解元注解是指注解的注解。包括@Retention @Target @Document @Inherited四种。1.1、@Retention: 定义注解的...转载 2019-06-13 16:55:51 · 108 阅读 · 0 评论 -
【Java】多线程整理
一、多线程的随机性 1.多线程是异步的,代码顺序并非线程执行顺序,线程被调用的时机是随机的。public class MyThread extends Thread { @Override public void run() { super.run(); System.out.println("MyThread"); ...原创 2019-06-07 18:55:33 · 127 阅读 · 0 评论 -
java多线程——正确停止线程
一、什么时候需要立即停止线程比如:做Android APP开发,当打开一个界面时,需要开启线程请求网络获取界面的数据,但有时候由于网络特别慢,用户没有耐心等待数据获取完成就将界面关闭,此时就应该立即停止线程任务,不然一般会内存泄露,造成系统资源浪费,如果用户不断地打开又关闭界面,内存泄露会累积,最终导致内存溢出,APP闪退。参考:https://www.jianshu.com/p/264d...原创 2019-06-09 18:57:44 · 334 阅读 · 0 评论 -
IDEA打印GC日志
引言今天在看书的时候,在讲到垃圾收集器与内存分配策略的章节时,文中有如下一段代码:public class ReferenceCountingGC { public Object instance = null; private static final int _1MB = 1024 * 1024; private byte[] bigSize = new b...转载 2019-09-15 00:49:41 · 1128 阅读 · 0 评论 -
打jar包的问题
http://josh-persistence.iteye.com/blog/1938520有时候,由于项目的需要,我们会将源码编译后以工具包(class打成jar包)的形式对外提供,此时,你的 jar 包不一定要是可执行的,只要能通过编译,能被别人以 import 的方式调用就行了。但还有的情况是,我们的 jar 包是要可执行的,即能直接在 cmd 下直接运行。前者的转载 2015-11-05 16:08:18 · 510 阅读 · 0 评论