JAVA开发
记录自己在开发过程遇到的问题,想法,各种实现,涵盖JAVA技术、架构、数据库、缓存等
gin_91
JAVA工程师
展开
-
Docker 内JAVA用SVG代码转PNG , 图片中文乱码问题
场景:使用JAVA的org.apache.batik从SVG代码生成PNG图片public static void convertToPng(String svgCode, OutputStream outputStream){ try { byte[] bytes = svgCode.getBytes("utf-8"); PNGTranscoder t = new PNGTranscoder(); Tra..原创 2020-11-18 22:04:49 · 1297 阅读 · 0 评论 -
提交给FixedThreadPool线程池的任务没执行完,且整个程序阻塞
坑位描述:用线程池去跑批量任务,总共343个任务,newFixedThreadPool的设置corePoolSize为30。即用 固定30个线程去消费343个任务,并且使用了AQS的发令枪(CountDownLatch)实现在所有任务都结束后,进行程序后续的操作。由于每个任务里都涉及到图片上传云服务器、调用地图API解析商圈位置、地铁距离等一系列"高端"操作,受带宽限制挺大的(地图API里也有并发限制),故整个程序运行起来也是异常缓慢。代码大概如下: final int原创 2020-10-25 11:56:10 · 3056 阅读 · 0 评论 -
Spring Cloud 入门者必看,架构、概念、组件
来源:[微信公众号]石杉的架构笔记|0概述毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。实际上,Spring Cloud是一个全家桶式的技术栈,包含...转载 2020-02-24 11:30:20 · 699 阅读 · 2 评论 -
调用链选型之Zipkin,Pinpoint,SkyWalking,CAT
Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较...转载 2020-02-18 21:30:29 · 1715 阅读 · 0 评论 -
多节点Tomcat日志合并与检索
目录简介简单方式(rsylog)一、rsyslog的安装与使用1.将服务端与客户端的rsyslog升级到最新版本2.关闭服务端的SeLinux和514端口防火墙3.服务端配置4、客服端配置5、重启rsyslog6、示例二、rsyslog的配置说明三、常见异常简介当Tomcat进行负载均衡分布式部署(非微服务)后,产生的日志如何去检索查看?...原创 2019-10-20 12:23:53 · 1299 阅读 · 0 评论 -
基于RedisTeamplate实现的分布式锁
简介项目中采用了多tomcat节点部署实现负载均衡,针对抢单、秒杀等场景需要保证数据有序性(业务需要),则要使用分布式锁。这个是借鉴了另外一个jedis实现(https://github.com/abelaska/jedis-lock),这里改成了redisTeamplate实现,直接和spring集成。源码package com.andmobi.outservice...原创 2019-10-19 21:42:38 · 1833 阅读 · 2 评论 -
用swagger2 ,维护API文档很麻烦吗?返回值无法说明? --- 还是没用对方法?
之前在和一些技术同事聊到了接口文档这事,并提到了swagger,收到的反馈有这些:“很麻烦!接口文档要和代码耦合在一起”“字段说明要写好几遍!一改要改好多地方!”"请求参数想描述清楚要写一堆玩意儿!!"我也看了下,控制器方法上要对每个参数这么描述,确实有点反人类啊!@ApiImplicitParams({ @ApiImplicitParam(name="mobi...原创 2020-03-15 23:36:07 · 2349 阅读 · 1 评论 -
微服务实战(二) 搭建第一个SpringBoot小应用
1、搭建第一个springboot微服务创建一个maven工程,工程结构如下:pom.xml内容如下:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mav...原创 2020-01-28 20:44:28 · 1257 阅读 · 2 评论 -
springboot打包 -- 项目JAR包和依赖JAR包分离
写在前面的 当我们使用spring boot写项目时,一般都会遇到一个问题,那就是spring boot打包时,会将自己写的代码和项目的所有依赖文件打成一个可执行的jar包。通常我们的项目都是运行在服务器上的,当项目更新时,每次都要向服务器上传这个包。如果项目的依赖包很多,那么这个文件就会非常大。大文件上传不仅浪费带宽,有时候网络不稳定,传输一半断网,又要重新上传,非常麻烦。默认的m...转载 2020-01-19 11:19:13 · 6170 阅读 · 3 评论 -
Mybatis Plus 自定义SQL+多表查询结果+分页
关于Mybatis plus的 基本使用就不赘述了。只是记录一下"自定义SQL+多表联查+多实体查询参数+分页"情况下,怎样使用环境: Mybatis Plus 3.1.0自定义Sql 直接写在Mapper接口方法上,使用了 @Select 注解@Select("<script>" + " select tp.*,tpt.name as typeNa...原创 2020-03-14 22:10:08 · 6996 阅读 · 2 评论 -
java agent 详细介绍
什么是 javaagentjava agent是java命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,并且对该 java 包有2个要求:这个 jar 包的MANIFEST.MF 文件必须指定 Premain-Class 项。 Premain-Class 指定的那个类必须实现 premain()方法。重点就在 premain 方法,也就是我们今天的标题。从字面上...转载 2020-02-20 01:04:26 · 4054 阅读 · 1 评论 -
JAVA1.8中的Lambda表达式("->")用法
这是最近看到过的最通俗易懂的Lambda语法说明了,非常清晰!还不会用的来学习一下吧!转自知乎:https://www.zhihu.com/question/20125256/answer/324121308什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块...转载 2020-02-05 18:02:01 · 4604 阅读 · 0 评论 -
搜索引擎相关度算法 -BM25 JAVA实现
bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法。它的出现主要是解决TF-IDF算法中 TF的影响可无限增大的不足,本质上BM25是基于TF-IDF并做了改进的算法。如图所示,传统的TF-IDF算法中 词频的影响程度是无限增大的,换而言之就是关键词出现的越频繁,TF-IDF相关度就越高。稍微有点简单粗暴;而BM25算法就是让词频的影响到达一定程...原创 2019-12-05 14:22:35 · 2794 阅读 · 5 评论 -
TF-IDF 词频-逆文档频率 JAVA实现源码分析
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。词频(TF)表示词条(关键字)在文本中出现的频率。 这个数字通常会被归一化(一般是词频除以文章总词数)...原创 2019-11-29 21:53:41 · 900 阅读 · 0 评论 -
jieba中文分词器 JAVA实现源码分析
中文分词技术在文本处理分析、搜索引擎、AI自然语言识别等领域都有着非常广泛的应用,最近我也在研究SEO中的内容文本分析,掌握分词的原理可以说是必不可少的。在python机器学习中文处理普遍都用到了 jieba 分词器,后来发现 jieba 还有个java版本的,正好有需要,直接拿来用了,也看了核心的源码,注释倒是没有的,所以自己记录一下阅读源码过程中的理解。源码介绍结巴分词(ja...原创 2019-11-22 22:41:34 · 4118 阅读 · 0 评论 -
高并发超库存下单的一个解决小技巧
问题描述:库存更新成负数产生原因:由于多线程并发时每个下单线程判断是否超库存时,读到了数据库同样的值,都认为库存满足要求,都执行了下单扣库存的操作,结果就是库存被更新成了负数,实际下单量大于实际库存。解决办法:1、可以通过java的sychronized关键字以及Lock API去加锁,这样实现比较重,并且跨jvm的情况需要考虑分布式锁。2、在数据库压力不是特别大的情况下,...原创 2019-10-20 11:59:56 · 2572 阅读 · 0 评论 -
基于Redis的持久化缓冲器---延迟同步数据库,将要更新到数据库的数据暂存redis,延迟更新到数据库
简介在高并发场景下,像访问次数以及访问记录保存是非常影响性能的,每一次详情页面读取就会产生一条 update 和 insert 。所以需要一个持久化缓冲机制,将高频的数据库写入操作放到Redis去缓冲,设定一个延迟时间,到时间后才去持久化到数据库。如果项目已经集成Redis,则可以很方便地通过简单代码就实现数据的缓冲,极大程度增加系统吞吐率和响应速度。(本文介绍的是一个轻量级的实现,还...原创 2019-10-19 22:13:05 · 4087 阅读 · 0 评论