hello,各位大佬上午|中午|下午|晚上|凌晨好,我是一灰灰,今天给大家介绍一个相对基础的知识点 HashMultmap;
guava基本上可以说是java开发项目中,大概率会引入的包,今天介绍的主角是一个特殊的容器 – HashMultmap
,可以简单的将它的数据结构理解为Map<K, Set<V>>
那么为什么会突然想到介绍一下它呢,因为昨天刚因为对它理解不够深刻,把它当作了Map<K, List<V>>
来使用,结果出了问题;既然如此那就好好盘一盘,反思一下
hello,各位大佬上午|中午|下午|晚上|凌晨好,我是一灰灰,今天给大家介绍一个相对基础的知识点 HashMultmap;
guava基本上可以说是java开发项目中,大概率会引入的包,今天介绍的主角是一个特殊的容器 – HashMultmap
,可以简单的将它的数据结构理解为Map<K, Set<V>>
那么为什么会突然想到介绍一下它呢,因为昨天刚因为对它理解不够深刻,把它当作了Map<K, List<V>>
来使用,结果出了问题;既然如此那就好好盘一盘,反思一下
本文作为elasticsearch 基本使用姿势第二篇,包含以下内容
更多相关知识点请查看: * 210331-ElasticSearch 基本使用姿势 - 一灰灰Blog
在使用es进行组合查询的时候,遇到一个非常有意思的场景,特此记录一下
某些场景下,直接针对某个Field进行分组查询,居然无法返回结果,会给出类似Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default
的提示信息,接下来看一下这个问题是个什么情况,以及如何解决
使用guava作内存缓存,大多数小伙伴应该都使用过,通过CacheBuilder
创建LoadingCache
一个kv格式的缓存,如果我们需要缓存的只是一个value呢?
针对这种场景,接下来介绍一种基于Supplier
来实现的缓存方式
通常我们序列化使用时,是直接使用Gson将整个对象转换为Json串,如果有看过gson源码的小伙伴会发现其内部实际上是基于JsonWriter来实现流式序列化的
接下来我们来看一下JsonWriter的使用姿势
前面介绍了几种gson在序列化时,忽略某些字段数输出的方式,然而当时的实例中,需要序列化的对象都是Java bean对象,如果我们需要序列化的是Map对象,又可以怎么处理呢?
使用Prometheus进行采样收集,借助Grafana进行大盘展示,可以说是系统监控层面的基本操作了,在grafana的大盘配置时,借助变量的灵活性,来展示不同维度的数据表盘比较常见
现在有这样一个场景,一个应用有多台机器,我们设置一个变量 instance 来表示具体的实例ip,支持通过ip来选择不同机器的监控,怎么操作?
在我们日常使用json序列化框架过程中,经常会遇到在输出json字符串时,忽略某些字段,那么在Gson框架中,要想实现这种方式,可以怎么处理呢?
本文介绍几种常见的姿势
在es的使用过程中,全文搜索属于一个常见的场景,特别是当我们将es作为日志存储检索来使用时,根据关键字查询对应的日志信息,可以怎么处理呢?
使用json进行数据交互可以说是非常常见的常见,在java侧,常用的json解析框架也不少,比如gson, fastjson以及spring mvc中默认使用的jackson;本文将主要介绍一下jackson的基本使用姿势,比如常见的
使用arthas进行应用排查定位,这里主要记录借助arthas,获取SpringContext,然后就可以通过SpringContext来访问应用内存数据,调用bean方法等操作
基本操作
1 | # 下载arthas |
Java 生态中,最最常见的json序列化工具有三个jackson, gson, fastsjon,当然我们常用的也就是这几个
json协议虽然是一致的,但是不同的框架对json的序列化支持却不尽相同,那么在项目中如何使用这些框架,怎样的使用才算优雅呢?
本文将介绍QlExpress中自定义操作符Operator
+ Micro
的使用姿势,通过扩展Operator,可以为规则脚本赋能,提供更友好的使用姿势
上一篇博文简单的介绍了一下QlExpress,以及一个最基础的使用demo,接下来我们看一下QlExpress的语法,重点关注一下它与Java不同的地方
SpringBoot项目启动,忽然提示找不到或者无法加载主类,记录两种常用的方式
方法一:清空idea缓存
idea清理缓存:
方法二:maven重新install
执行命令
1 | mvn clean install -DskipTests=true |
记录一下借助telnate进行简单的dubbo接口测试
telnate ip port
ls
列出所有服务invoke com.xxx.Service.sayHello("xxx")
源码: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange
下载二进制的插件,如3.8.0下载地址: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/v3.8.0
将下载的ez
包,放在插件目录下,一般centos的查检目录放在/usr/lib/rabbitmq/lib/rabbitmq_server-xxx/plugins
如果不知道具体在什么地方,可以通过进程查看
拷贝完毕之后,启用插件
1 | rabbitmq-plugins enable rabbitmq_delayed_message_exchange |
接着重启一下rabbit
1 | service rabbit-server restart |
关于Json序列化的框架可以说比较多了,比如Spring默认的Jackson,国内互联网用的比较多的FastJson,本文则主要介绍一下Gson的简单使用姿势,并不会涉及到不同的json框架的性能对比
本文主要内容来源于官方教程: https://github.com/google/gson/blob/master/UserGuide.md
在jdk中有一个数据结构BitSet,可以用来执行位操作,比如我们常见的统计网站在线人数、pv/uv等;但是当数据样本分布不均,可能导致较大的空间浪费;其次它更适用于正整数类型的判定,针对其他的业务场景,有点薄弱
本文将介绍BloomFilter(布隆过滤器)的相关知识点,以及Guava中BloomFilter的使用姿势
在191204-Ognl 使用实例手册 中,当时遇到一个问题,静态成员属性直接赋值时,会抛出异常;那么这个问题真的无解么?
此外之前的实例手册中,漏了一个内部类的使用姿势,本文也一并补上
上一篇博文介绍了ongl的基础语法,接下来进入实际的使用篇,我们将结合一些实际的case,来演示ognl究竟可以支撑到什么地步
在看本文之前,强烈建议先熟悉一下什么是ognl,以及其语法特点,减少阅读障碍,五分钟入门系列: 191129-Ognl 语法基础教程
本文将力求用最简单的语言是和示例,介绍一下OGNL的语法规则,文章主要内容参考自官方文档http://commons.apache.org/proper/commons-ognl/language-guide.html
记录下SpringBoot jar启动方式,开启远程debug的命令
1 | java -server -Xms512m -Xmx512m -XX:AutoBoxCacheMax=20480 -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=9999,suspend=n -jar web.jar |
rabbitmq启动,死活起不来,一直报错,记录下解决方式
1 | Redirecting to /bin/systemctl start rabbitmq-server.service |
最终解决问题之后,才发现是自己走进盲角了,花了不少时间,特此记录
在测试使用SpringCloud全家桶时,服务向注册中心注册,然后client就可以相互之间实现RPC调用(其实还是http访问)
如果我想看看当前注册中心获取了哪些服务,可以怎么办?
一个简单的方法就是借助DiscoverClient
来做,然后问题就来了
1 | public Application(DiscoveryClient discoveryClient) { |
上面的代码执行之后,发现返回是空数组;蛋疼的是换另外一个工程,同样的方式,却可以拿到注册的服务名
查了半天,最好才发现拿不到是因为在配置中添加了
1 | eureka.client.fetchRegistry=false |
上面就表示不会去主动获取注册的服务,因此也就拿不到服务了;改成true之后就ok了
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
一灰灰blog
知识星球
使用Spring搭建的web后端服务,与前端通过Json串进行交互,特此记录下使用姿势
这个可以说是最简单和最常见的一种使用姿势了,直接返回String,如下
1 | @ResponseBody |
JsonInclude
注解直接返回的是一个对象,然后交给框架来将对象转换为String丢给前端
1 | @RequestMapping(path = {"/index", "/"}) |
直接用上面的方式时,可能会抛出,提示没有对应的HttpMessageConverter
来转换ResponseWrapper对象
一个简单的使用姿势就是直接使用注解 com.fasterxml.jackson.annotation.JsonInclude
如下即可
1 | JsonInclude |
因此关键就是HttpMessageConverter
在起作用了,下一篇重点关注下这个是什么东西,干嘛用,以及如何自己实现一个特定需求的转换器
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
一灰灰blog
知识星球
什么场景下,需要主动向Spring容器注册bean呢?
如我之前做个的一个支持扫表的基础平台,使用者只需要添加基础配置 + Groovy任务,就可以丢到这个平台上面来运行了,而这个基础平台是一直都在运行的,所以在新来任务时,最直观需要注册的就是 DataSource
数据源这个bean了,那么可以怎么玩?
借助BeanDefinition
来实现bean的定义,从最终的使用来看,代码比较少,几行而已
1 | public <T> T registerBean(String name, Class<T> clazz, Object... args) { |
测试如下
1 | import com.github.hui.story.quickstory.server.VisitService; |
输出如下
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
一灰灰blog
知识星球
前面一篇博文 《Spring之定时任务基本使用篇》 介绍了Spring环境下,定时任务的简单使用姿势,也留了一些问题,这一篇则希望能针对这些问题给个答案
前面一篇博文,抛出了下面的几个问题,接下来则围绕问题进行分析
SpringMVC中处理请求参数有好几种不同的方式,如我们常见的下面几种
HttpServletRequest
对象获取@PathVariable
注解获取url参数@RequestParam
注解获取请求参数@ModelAttribute
注解获取请求参数对上面几种方式有兴趣的可以看一下这篇博文: SpringMVC之请求参数的获取方式
除了上面的几种方式之外,还有一种 @RequestBody
的使用方式,本文则主要介绍这种传参的使用姿势和相关注意事项
之前写了一篇博文,简单的介绍了下如何利用Redis配合Spring搭建一个web的访问计数器,之前的内容比较初级,现在考虑对其进行扩展,新增访问者记录
Update your browser to view this website correctly. Update my browser now