JAVA
网瘾少年徐志摩
这个作者很懒,什么都没留下…
展开
-
Java Stream map flatMap mapMulti的升维和降维
【代码】Java Stream map flatMap mapMulti的升维和降维。原创 2022-10-24 19:59:12 · 1541 阅读 · 0 评论 -
Java VirtualThread 虚拟线程的个人粗浅理解
上图证明虚拟线程底层依赖于ForkJoinPool(),还要注意一点ForkJoinPool()的平台线程都是守护线程与其他线程池不一致。先说结论:虚拟线程依赖于ForkJoinPool()进行底层实现,ForkJoinPool()依赖于平台线程。先随便看个VirtualThread的相关资料理解虚拟线程和平台线程的概念或者看这个也行。原创 2022-09-23 18:15:05 · 1812 阅读 · 0 评论 -
用循环代替递归做无限层级关系
起因是:https://v2ex.com/t/832785#reply32 楼主被hr给的一道题难住了这里给出比较简洁的实现:Map<String, Map> treeMap = new HashMap<>(); Stream.of("中国 浙江 杭州","中国","中国 广东","中国 广东 广州 越秀区") .forEach(s -> { Map<String,原创 2022-02-10 11:16:47 · 1863 阅读 · 0 评论 -
使用Completablefuture和Stream实现获取多个任务,满足要求的任意结果
先上代码DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("主线程结开始 "+LocalDateTime.now().format(formatter)); //任务函数 Function<Long,Long> longConsumer = (Long time) -> {原创 2021-08-09 22:45:46 · 3233 阅读 · 5 评论 -
Spring boot基于Lettuce的分布式锁
RedisUtil提供加锁,解锁,key和value生成public class RedisLockUtil { /** * redis分布式锁-加锁 * @param redisTemplate redis 加锁解锁要保证同一个 * @param key 分布式锁key * @param value 分布式锁value 一般为随机数 * @param timeout 分布式锁过期时间 秒 * @param number 重试次数原创 2021-04-15 14:28:40 · 2133 阅读 · 0 评论 -
Java实现redis sortSet(zset)数据结构
static class Tuple implements Comparable<Tuple> { private long uid; private long score; public long getUid() { return uid; } public Tuple setUid(long uid) { this.uid = uid; ..原创 2021-04-13 14:04:57 · 1155 阅读 · 0 评论 -
微博时间线实现方案假想
问题徐志摩关注了2000个博主,每个博主发送200条微博,需要按照这40万条微博进行倒序浏览前200条,如何优化数据结构和算法避免40万条临时数据的重排序?解题直接排序40万条数据必然不可取,首先要知道用户需要浏览的数据不过只有头部的几百条而已整个40万数据的重排序完全无意义,所以解题思路就是就是优化掉"不需要"排序的数据方案1:查询徐志摩关注的2000个博主的uid和每个博主对应的最后一条微博发送时间,按照最后发送时间倒序获取前200个博主,此时能够获取到的微博数至少为200条,再查询这200个博原创 2020-10-28 22:52:34 · 583 阅读 · 0 评论 -
双括号初始化导致的诡异问题
明明是同样的类型,却编译不通过!最开始我以为是泛型的问题,反复查找资料和尝试后,最终定位到是双括号导致的!参考资料:Java:双括号初始化 /匿名内部类初始化法阅读资料后可知,第一层括号实际上是产生了一个HashMap的子类所以可以解释为什么图上的代码会编译错误因为HashMap产生了一个子类,而第二层为代码块所以可以调用类内部方法总结:千万不要再使用双括号初始化,使用new Object()和代码块代替即可!双括号会带来非常多的class文件以及OOM风险为了节省一两行代码得不偿失!...原创 2020-06-08 23:36:32 · 347 阅读 · 0 评论 -
Java Stream 集合中对象单属性去重和多属性去重
在Stream中distinct()可以进行去重,内部原理是通过构建一个ConcurrentHashMap并使用putIfAbsent()来去重,但是由于ConcurrentHashMap与HashMap一样是通过hashCode()和equals()方法来查找和比对的而如果对象所属的类没有将hashCode()和equals()重写的话就会导致同一个类的多个new出来的对象是无法判定为"相等"的...原创 2020-02-28 16:20:55 · 8437 阅读 · 0 评论 -
如何在多消费者环境中保证单用户任务不并发?
问题: 在队列中一个用户存在10个需要加钱的任务,多个消费者同时获取到了一个任务,在执行时发生了并发导致加钱金额减少解决方案1,在多个者中使用分布式锁保证单个用户的锁同时只能有一个线程持有2,将uid哈希后/10取余,建立0-9的10个队列,每个队列一个线程详解分布式锁方案会导致存在不必要的加锁/释放锁的消耗,但是实现最简单最快hash取余方案实际上是将多线程变成分组单线程任务,...原创 2019-12-25 18:24:55 · 220 阅读 · 0 评论 -
Spring boot第一次请求很慢问题
问题有以下几个:1、dispatcherServlet 是懒加载的2、数据库链接是懒加载的3、linux 下真随机数生成器解决方案:1,servlet配置load-on-startup的作用–配置spring.mvc.servlet.load-on-startup=12,指定配置文件中spring.datasource.druid.initial-size=1,即启动时会初始化数据库连...原创 2019-11-29 11:02:47 · 9127 阅读 · 3 评论 -
SpringBoot搭建netty-socketio教程
首先按照SpringBoot + Netty-SocketIO在项目中实战详解搭建项目序言:因工作项目需要使用到推送功能,且与前端Socket.IO框架对接,因此使用了Netty-SocketIO。Netty-SocketIO顾名思义是基于Netty的SocketIO,底层是基于Netty。有关SocketIO的相关API与官网提供的NodeJS版本API相似,相关配置与Netty相关配置相似。...原创 2019-10-21 15:06:05 · 3687 阅读 · 2 评论 -
Kafka 使用Java实现数据的生产和消费demo
前言在上一篇中讲述如何搭建kafka集群,本篇则讲述如何简单的使用 kafka 。不过在使用kafka的时候,还是应该简单的了解下kafka。Kafka的介绍Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 Kafka 有如下特性: - 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以...转载 2018-06-19 11:48:53 · 438 阅读 · 0 评论 -
JAVA8 六种线程池介绍
(1) newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。 可能导致内存溢出,一般使用newFixedThreadPool代替 (2) newFixedThreadPool 创建一个定长线程池,可控制线...原创 2018-08-15 19:30:37 · 3389 阅读 · 0 评论 -
Java8--CompletableFuture 组合式异步编程
原文:https://www.jianshu.com/p/4897ccdcb278 使用CompletableFuture构建异步应用Future 接口的局限性future接口可以构建异步应用,但依然有其局限性。它很难直接表述多个Future 结果之间的依赖性。实际开发中,我们经常需要达成以下目的:将两个异步计算合并为一个——这两个异步计算之间相互独立,...转载 2018-08-15 17:58:57 · 3394 阅读 · 0 评论 -
JAVA8 Collectors.toMap value为null报错
Root Causejava.lang.NullPointerException java.util.HashMap.merge(HashMap.java:1224) java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320) java.util.stream.ReduceOps$3Reducin...原创 2018-07-28 13:13:21 · 17843 阅读 · 3 评论 -
Transaction rolled back because it has been marked as rollback-only
参考资料:https://blog.csdn.net/paincupid/article/details/77104264 在写循环调用A类的a方法时,由于B类b方法抛出异常(如果是A类自身方法抛出异常不会导致事务回滚导致rollback-only问题) 解决方案:不让b方法抛出异常,b方法自己捕获异常并处理...原创 2018-07-06 11:46:53 · 226 阅读 · 0 评论 -
IDEA开启形参(方法参数)提示
勾选后会增加形参描述,但是不会提示所有的,暂时没找到其他设置能够提示所有参数原创 2018-07-02 15:59:44 · 17729 阅读 · 0 评论 -
LinkedHashMap 结构图
LinkedHashMap 双向链表结构图原创 2018-07-02 14:11:36 · 1963 阅读 · 1 评论 -
JAVA8之Comparator特殊排序以及ComparatorUtils介绍
1,将数组按照自然顺序排序public static void main(String[] args) { String[] array = {"G", "D", "E", "A", "C", "B", "F"}; //并行流可以提高效率并在数据不超过1 << 13 == 8192时不会使用多线程执行原创 2018-09-05 15:42:41 · 3211 阅读 · 0 评论 -
JAVA生成二维码,图片合成,图片添加文字
首先引入zxing用于生成二维码 &lt;!-- https://mvnrepository.com/artifact/com.google.zxing/core --&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.zxing&lt;/groupId&gt; &lt;artifactId&原创 2018-10-23 12:24:43 · 6059 阅读 · 11 评论 -
Java的初始化顺序
父类static代码块、父类static属性(执行顺序与在类中定义顺序有关)子类static代码块、子类static属性(执行顺序与在类中定义顺序有关)父类属性、父类代码块(执行顺序与在类中定义顺序有关)父类构造函数子类属性、子类代码块(执行顺序与在类中定义顺序有关)子类构造函数 参考文章:http://www.cnblogs.com/miniwiki/ar...原创 2016-08-12 16:19:49 · 414 阅读 · 0 评论 -
JDK优化之熵池策略
首先请看:JVM上的随机数与熵池策略要看结果请直接拉到文章底部在apache-tomcat官方文档:如何让tomcat启动更快里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用的“熵源”(entropy source)的策略。他提到tomcat7的sessionid的生成主要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是”SHA...原创 2019-08-05 12:35:28 · 3339 阅读 · 0 评论 -
Java8使用LocalDateTime获取正确的第几周和计算日期最佳方式
先上问题public static void main(String[] args) { //使用DateTimeFormatter获取当前周数 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("w"); //2018年第一天 System.out....原创 2019-04-08 16:42:51 · 21003 阅读 · 6 评论 -
JAVA ThreadLocal内存泄漏问题
资料链接:再看ThreadLocal原创 2018-11-15 17:42:23 · 792 阅读 · 0 评论 -
Java日经问题总结
本文旨在快速解决常规,常见,常识的三常问题1,Mybatis二级缓存相关深入了解MyBatis二级缓存-逆流而上 -----又名二级缓存从了解到放弃Spring Cache简单介绍和使用-----正儿八经的缓存方案Spring Cache+Redis实现自定义注解缓存-----新手参考demo...原创 2018-11-01 14:49:32 · 5450 阅读 · 6 评论 -
Java深入理解并发/并行,阻塞/非阻塞,同步/异步
1. 阻塞,非阻塞首先,阻塞这个词来自操作系统的线程/进程的状态模型中,如下图:一个线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止。各个状态的转换条件如上图,其中有个阻塞状态,就是说当线程中调用某个函数,需要IO请求,或者暂时得不到竞争资源的,操作系统会把该线程阻塞起来,避免浪费CPU资源,等到得到了资源,再变成就绪状态,等待CPU调度...转载 2018-10-24 14:35:24 · 582 阅读 · 0 评论 -
Spring过滤json中的XSS
spring处理json是通过MappingJackson2HttpMessageConverter实现的。而MappingJackson2HttpMessageConverter中的read()和writeInternal()分别对应json的请求和响应。也就是说我们的过滤工作就这两个方法中展开。writeInternal首先创建一个类并继承MappingJackson2HttpMessa...原创 2018-10-24 10:29:24 · 6495 阅读 · 0 评论 -
JAVA获取项目根目录
//根目录 String rootDirectory = System.getProperty("user.dir");如果读取文件发现读取路径怎么都不对,可以尝试先查看根目录,然后拼接根目录+文件路径原创 2018-10-23 12:25:58 · 5419 阅读 · 1 评论 -
Java获取泛型参数的类型的方法
最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下。 由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型)。但是有的时候,我们确实需要获知泛型参数的类型,比如将...转载 2018-05-29 14:29:16 · 2882 阅读 · 0 评论 -
Java使用apache.http.client.fluent快速构建HTTP请求
相关包&amp;amp;amp;amp;amp;lt;!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --&amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp;lt;dependency&amp;amp;amp;amp;amp;gt; &amp;原创 2018-06-11 13:03:49 · 6106 阅读 · 0 评论 -
Java工具类
TimeUnit.SECONDS.sleep(2); //线程暂停2秒String startTimeStr = DateFormatUtils.format(startTime, "yyyyMMddHHmmss"); //格式化任意时间StringUtils.leftPad("1188G",9,"0")//左侧补齐RandomStringUtils //生成随机字符串Ra...原创 2017-08-22 19:44:04 · 669 阅读 · 1 评论 -
mybatis疑难杂症之配置文件无限加载 Property 'configLocation' not specified, using default MyBatis Configuration
mybatis启动控制台无限输出日志不报错,经过比对发现Property 'configLocation' not specified, using default MyBatis Configuration然后找到没有加载的mapper.xml配置文件,发现namespace和model路径错误,但是为什么没有直接报错就不得而知...原创 2017-05-31 10:14:56 · 2668 阅读 · 1 评论 -
Hibernate-Validation的使用和常用的注解
首先是要加入下面两个包hibernate-validator-4.1.0.Final.jar validation-api-1.0.0.GA.jar 如果在验证不通过的时候进行了添加、更新或删除操作的时候,则会抛出javax.validation.ConstraintViolationException异常下面是测试用的类 @RequestMapping(value = "/save.action...转载 2016-11-22 11:14:09 · 3511 阅读 · 0 评论 -
Spring Cache+Redis实现自定义注解缓存
pom中引入<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.6.1.RELEASE</version></dependency原创 2017-05-09 15:23:23 · 3742 阅读 · 0 评论 -
Java打印类名 文件名 方法名 行数
public class GPSUtil {public static String gps() {StackTraceElement s = new Throwable().getStackTrace()[1];String str = "类:" + s.getClassName() + "文件名:" + s.getFileName() + " 方法:" + s.getMethodName...原创 2017-03-21 10:15:36 · 1739 阅读 · 0 评论 -
通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种是:通过 在xml中定义init-method 和 destory-method方法第三种是: 通过bean实现InitializingBean和 DisposableBean接口下面演示通过 @P...转载 2017-02-24 15:03:20 · 251 阅读 · 0 评论 -
Spring组件扫描<context:component-scan/>使用详解
1.如果不想在xml文件中配置bean,我们可以给我们的类加上spring组件注解,只需再配置下spring的扫描器就可以实现bean的自动载入。<!-- 注解注入 --><context:annotation-config></context:annotation-config><context:component-scan base-package="...转载 2016-12-16 09:52:02 · 288 阅读 · 0 评论 -
Spring 注解学习@ExceptionHandler 和@ResponseStatus
Spring注解,改变了我的开发思路。前段时间,用@RequestBody,@ResponseBody,不费吹灰之力就解决了JSon自动绑定。接着就发现,如果遇到RuntimeException,需要给出一个默认返回JSON。 以前都是用SimpleMappingExceptionResolver拦截实现,今天偶尔看下资料,@ExceptionHandler,就把这个异常给拦截了,太方便了! 相关...转载 2016-11-22 17:20:46 · 1963 阅读 · 2 评论 -
Java8 stream 之groupingBy() 分组排序
List matchsList = new ArrayList();Map&gt; MatchsListMap = matchsList.stream() .collect(Collectors.groupingBy(Matchs::getMatchDate)); 此时MatchsListMap的排序规则是根据MatchDate降序的(默认),也就是说ma原创 2017-12-29 12:06:37 · 98431 阅读 · 19 评论