![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 58
努力终会有回报
这个作者很懒,什么都没留下…
展开
-
比较两个数据是否一致如果不一致删除交集外的数据
举例:关联区域下拉框 1 ,2 ,3,级联下拉框 001,002,003这种情况,二级下拉框可以不选择。背景:页面数据有个空间需要有个前后比较,如果变化了,需要在数据库中删除交集外的数据,第一次选择了 1 ,2 第二次选择了2,3 这种场景则需要将 1这种数据删除掉。使用not in ,因为是非子查询,因此不会影响sql执行效率!第三步:删除交集外的数据。原创 2023-01-10 10:35:33 · 170 阅读 · 0 评论 -
计算两个数值的同比和环比百分比并保留两位小数
笔者总结了计算两个int类型的数值的同比百分比和计算两个含小数的同比百分比,只需要将参数在传值时传入BigDecimal类型的即可,采用的是四舍五入保留2位的策略,如果其他的策略可自行更改。* 计算两个BigDecimal的百分比。* 计算两个值的百分比。原创 2022-12-17 22:04:03 · 1293 阅读 · 0 评论 -
关于对象转json字符串的几个工具比较
当处理层级关系比较浅的结构时,以上三家是都没有问题,但是当层级关系比较复杂时,譬如A对象里有B对象,List对象,B对象里有List等等就会出现json串丢失的现象。最近对一个大对象转成json字符串存入redis,在开发过程中发现比较有意思的,发现对象中的属性类型是List类型的,无法转成字符串,再次比较一下几个json转串的工具包。1、最常用的阿里巴巴家的fastjson--JSONObject方式。3、谷歌家的Gson方式。原创 2022-10-26 18:01:45 · 1416 阅读 · 0 评论 -
使用腾讯地图API根据详细地址反查坐标经纬度
业务背景:地图数据需要某个地点的详细坐标,通过调研,腾讯地图的API较为开放,个人每日10000次,并发5次/秒,企业1000000万次,基本符合业务需求。原创 2022-06-24 09:50:17 · 3292 阅读 · 1 评论 -
Guaua本地缓存结合Redis缓存使用demo
业务背景:客户端请求的快慢查询速度排序,本地服务器内存缓存 > redis等缓存 >数据库查询,因此一些业务是可以缓存在本地内存的,而java自带的Map,CurrentHashMap因此使用Guaua的Cache缓存会更加适用。......原创 2022-06-17 10:57:33 · 453 阅读 · 0 评论 -
必须使用@Autowired注解才能注入bean的几种情况
在开发过程中发现并不是所有的bean注入是@Autowired和@Resource两个注解都可以的,笔者总结了下以下两种情况必须使用@Autowired @Override public void init(ServletConfig config) throws ServletException{ SpringBeanAutowiringS......原创 2022-06-14 17:58:58 · 986 阅读 · 0 评论 -
关于Java应用服务器隔断时间卡死状态的一种场景解决
问题场景:公司有几个项目总是在运行一段时间后,总是出于卡死状态,接口请求后无任何响应原创 2022-06-14 11:38:21 · 1779 阅读 · 0 评论 -
Java解压缩zip包+rar包兼容rar4和rar5兼容多操作系统
业务背景:需要将zip包或者rar包进行解压缩,需要兼容rar4和rar5两种版本maven 依赖包:<dependency> <groupId>com.github.junrar</groupId> <artifactId>junrar</artifactId> <version>3.0.0</version></dependency><!-- 解压rar5原创 2022-05-12 10:51:25 · 5516 阅读 · 7 评论 -
jdk8+List数据根据某个属性去重
场景:由于特定查询,将主键重复的但是其他部分属性的对象数据进行了合并,但是想要去重掉主键一样的数据。实现方法:public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { Map<Object, Boolean> seen = new ConcurrentHashMap<>(); return t -> seen原创 2022-05-12 10:25:48 · 1372 阅读 · 0 评论 -
关于Java特性多态的理解
Java三大新特性之一--多态,老大难,估计工作十来年的小伙伴对于多态也有很多玩不明白,笔者也一直蒙圈中,今天找了一个小demo,想对多态有个深入的了解,demo介绍:A类是父类,B类继承A类,重写show(A obj)方法,通过下面各种多态的调用,方便理解对象的多态使用。static class A { public String show(D obj) { return ("A and D"); } public String show(A obj) { .原创 2022-01-06 16:33:46 · 2350 阅读 · 0 评论 -
关于Java面试过程中常见问题的整理(二)
1、Dubbo的集群容错策略① 默认的失败重试策略,Failover Cluster:失败重试重试2次,一共执行3次,这通常用于读操作或者具有幂等的写操作② Failfast Cluster:快速失败当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作③Failsafe Cluster:失败安全当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作④Failback Cluster:失败自动恢复当服务消费端用原创 2022-01-19 14:34:31 · 403 阅读 · 0 评论 -
Springboot版本的WebSocket向app端推送消息实现
业务背景:app端需要实时接收到服务端的交易价格信息,肯定无法实时主动去轮询拉取pull操作,需要一种push实时数据到app端,因此websocket技术正好应用于此。技术栈选型:1 传统型 使用@ServerEndpoint注解实现2 前沿性 使用springboot 三个核心 一配二拦三监听一配指的 是注册并配置websocket的handler监听器和拦截器二拦指的 是拦截客户端请求的websocket的参数和权鉴服务三监听指的 是监听各种事件(请求连接/接收消息/关闭连接)原创 2021-12-21 15:19:20 · 5364 阅读 · 2 评论 -
关于Java面试过程中常见问题的整理(一)
最近遇到了一些mysql的专用术语,然后整理下以备自己及需要的朋友使用1、覆盖索引 回表2、一级索引 二级索引3、mysql的mvcc原理4、mysql的各种锁行锁 包含 S读锁/共享锁和X写锁/排它锁S读锁,其他事务可以继续加共享锁,但是不能继续加排他锁X写锁,一旦加了写锁之后,其他事务就不能加锁了如何加读锁和写锁LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…]......原创 2021-12-15 17:31:34 · 1809 阅读 · 0 评论 -
Spring前一次定时任务没执行完,下次任务要求再次执行
业务背景:正常开发情况下,spring的定时任务只有当前任务线程执行完毕后才会扫描下一次定时任务,即为默认的同步任务。譬如定时表达式@Scheduled(cron = "0 0/1 * * * ?")意味当前定时任务理想情况下需要1分钟跑一次,但是当遇到有时间要求的定时任务时,同时又有新的增量任务进来时,则需要启动异步定时任务。如果采用的是spring自带的Scheduled注解实现的话第一步在springboot启动类上添加@EnableAsync注解启动异步任务第二步在实际的定时任务原创 2021-11-10 13:53:08 · 9991 阅读 · 0 评论 -
企业微信审批Java版
业务背景:公司目前的审批是走erp后台,然后还得走纸质的打印出来审批,影响效率,现在需要在企业微信直接提交申请单,然后审批,最后将审批数据同步到erp后台。第一步:验证回调Url,在配置回调url时,企业微信后台需要验证,因此需要写一个回调验证接口/** * 回调接口接受企业微信验证 * @param msgSignature * @param timestamp * @param nonce * @param echostr * @param response */@GetMap原创 2021-09-28 11:50:07 · 3666 阅读 · 0 评论 -
集群多机部署定时任务使用redis分布式锁
定时任务如果不进行控制,就会在集群环境下重复运行,除了使用qrtz或者类似xxl job等方式进行控制的,还可以使用redis分布式锁进行控制,获得锁对象的才可以进行业务操作代码实现:public void incrNewsViewCount() { Boolean flag = redisTemplate.opsForValue().setIfAbsent("news_count_incr_switch", "lock",60*60*3, TimeUnit.SECONDS); i原创 2021-08-13 14:36:51 · 2819 阅读 · 0 评论 -
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度
publicstatic intlengthOfLongestSubstring(Strings){int[] last = new int[128];for(int i = 0; i < 128; i++) { last[i] = -1;}int n = s.length();int res = 0;int start = 0; // 窗口开始位置for(int i = 0; i < n; i++) { //pwwdkw int index ...原创 2021-08-03 15:55:42 · 377 阅读 · 0 评论 -
反射将不同对象转化为map
业务背景:当多次请求一个方法时,需要将对象转化为map,不需要每次业务代码进行转换,可以通过反射自动将属性和属性值 转换成map的key ->value形式,这样轻侵入业务代码,省去了很大的工作量。通过反射写一个转化工具类,但是考虑到对象存在继承父类属性的因素,所以要在反射中考虑通过反射获取父类对象实例,然后将属性key和属性值value,put到map散列表中。代码实现:import java.lang.reflect.Field;import java.util.HashMap;原创 2021-07-27 16:57:58 · 291 阅读 · 0 评论 -
jdk8不使用sql进行去重并排序
数据库排序很影响性能,因此将排序给Java进行处理也是代码优化的一个不错的手段同时jdk8流作业可以对list进行去重操作示例代码:List<SubjectSyncPaiDto> collectAuctions = allAuctions.stream().distinct().sorted((o1, o2) -> { return o1.getAuctionStartDate().compareTo(o2.getAuctionStartDate());}).col原创 2021-07-21 14:43:06 · 197 阅读 · 0 评论 -
Java接口数据时间格式化问题
时间格式期望是yyyy-MM-dd HH:mm:ss格式但是实际是时间戳或者yyyy-MM-dd HH:mm:ss.0格式使用插件注解解决第一种方式:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")第二种方式:@JSONField(format= "yyyy-MM-dd HH:mm:ss")两种方式都是对时间数据进行格式化,轻嵌入业务代码...原创 2021-07-21 13:28:12 · 634 阅读 · 0 评论 -
多个list合并进行分页
需求背景:多个表的数据查询结果集list,最后需要合并给前台页面进行分页展示技术栈:google的guava的partition方法pom依赖:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version.guava>21.0</version.guava></depen原创 2021-07-19 16:34:11 · 2258 阅读 · 0 评论 -
Java 比较两个数组是否相同或者存在数组包含关系
业务背景:比较两个数组元素是否相同,或者数组A的元素是否包含数组B方法1:使用jdk方法public static void main(String[] args) { String [] array1 = {"1","2","3","4"}; String [] array2 = {"3","2","1"}; if(array1.length !=array2.length){ System.out.println("两个数组中的元素值不相同");原创 2021-06-21 15:38:03 · 3785 阅读 · 0 评论 -
低版本solr不重启服务动态加载词库增量分词
需求背景:系统热点词不断变化,需要solr动态加载词库里的分词,具体场景是cmsxi't主要要点1通过系统维护热点词的维护2异步系统原创 2021-06-07 16:29:52 · 281 阅读 · 0 评论 -
SpringBoot单元测试使用示例
IDEA环境下,在待测试类,ctrl+enter,选择Create Test生成 public class TrajectoryServiceImplTest extends TestCase然后添加注解@SpringBootTest(classes = StApplication.class) @RunWith(SpringRunner.class)@SpringBootTest(classes = StApplication.class)@RunWith(SpringR.原创 2020-09-27 14:55:31 · 391 阅读 · 0 评论 -
使用Springboot Admin搭建服务监控系统并推送钉钉群报警信息
需求背景:系统服务异常触发报警,原来都是邮件报警,邮件报警有其弊端,就是通知响应率和容错率不佳,因为业务邮件和报警邮件在一起,很多人慢慢会忽视邮件的内容,响应率会越来越低,而且邮件的容错率不佳,经常无缘无故“吃”掉你的邮件,使系统异常无法快速实时的到达我们的手中。因此使用即时消息发送报警需求就越来越刚需,钉钉群报警成为了不二之选。实现技术栈:Springboot Admin、Dingding access_token实现步骤: step1:搭建Springboot Admin Server..原创 2020-06-25 07:41:59 · 1548 阅读 · 2 评论 -
多线程处理多次Http请求慢的问题
业务场景:前端调Java接口,接口需要多次请求http请求,因为是顺序执行,每个http耗时很长,大概5秒左右,但是叠加起来是很恐怖的,有必要做成多线程去处理。大体思路:多线程去do任务,使用CountDownLatch进行计数当前线程执行结束,然后调用await()方法,继续向下执行上代码:public String picMark(Model model, HttpServletRequest request) throws Exception { Map<String,Ob原创 2020-06-17 13:44:22 · 2891 阅读 · 3 评论 -
JSON字符串转换成对象保证顺序一致性问题
业务场景:对前端传过的json字符串进行转换处理,但是在转换为对象时突然发现发生了乱序,不是进来的时候的顺序了,需要进行更正,保持顺序一致不变。元数据json字符串是这样的:"{"38b3794634c143ff88aa533ead0ec0b7":"good","2f0811da29c54b41988d6e5d173db3d4":"fair","5b16c7633c5f47e3bec17d64b2d2f7af":"fair","e11296e23ac54e...原创 2020-06-10 16:27:41 · 3453 阅读 · 0 评论 -
用线程池去处理大量查询/插数据库操作
在工作过程中经常遇到需要处理非依赖性的http接口请求或者非依赖型的查库入库操作在这种情况下,为了提升性能,用多线程来处理性能更佳import java.util.*;import java.util.concurrent.*;public static void main(String[] args) { Map<String,String[]> parameterMap=要处理的多任务数据 handleAssessScore(parameterMap)..原创 2020-06-03 18:39:08 · 1772 阅读 · 0 评论 -
关于synchronized在多线程中的几种锁类型和底层原理解析
1. 对象锁 类锁非static方法加synchronized锁,static方法加synchronized锁,不加synchronized锁 三种调用顺序比较 public class TheadStaticLock { public synchronized void m1(){ System.out .println(Thread.currentThread().getName()+" m1 start"); ...原创 2020-05-23 22:01:22 · 225 阅读 · 0 评论