
JAVA
文章平均质量分 89
CrazyHSF
这个作者很懒,什么都没留下…
展开
-
gradle 构建错误问题解决汇总
通过已经存在的代码使用IDEA构建项目,并且本身没用过gradle,也没有项目相关的构建文档,所以摸索着来构建项目,一路踩坑,整理成笔记,记录下来。问题一:构建服务提示 org.gradle.api.internal.ClosureBackedAction 错误错误提示:Build file /Users/xxx/build.gradle' line: 4A problem occurred evaluating root project 'xxx'.> org.gradle.api.in原创 2020-09-10 19:29:26 · 9200 阅读 · 0 评论 -
redisTepmlate操作redis异常: WRONGTYPE Operation against a key holding the wrong kind of value
RedisTemplate操作redis,异常错误:Caused by: io.lettuce.core.RedisCommandExecutionException: WRONGTYPE Operation against a key holding the wrong kind of value at io.lettuce.core.ExceptionFactory.createExecutionException(ExceptionFactory.java:135) at io.le原创 2020-07-13 16:30:14 · 2282 阅读 · 0 评论 -
JDK8中stream处理数据常用例子
处理List数据的时候往往需要通过一个for循环或者while 循环。在JDK8中引入了Stream,通过stream,可以便捷地处理List,并且减少比较多模版式的代码,在Stream中也可以使用lambda表达式。直接demoforeach//简单foreach输出List<Integer> list = buildList(1,2,3,4,6,7,8);list.stream().forEach(element -> { System.out.print(e原创 2020-06-10 00:49:28 · 658 阅读 · 1 评论 -
mongoDB生成自增Id
问题:mongoBD在写入数据之后系统会自动生成的12字节唯一标识,作为ID即相当于mysql的主键ID,这里想使用自增的数值来作为ID,但是mongo并不支持解决:需要ID数值自增,则基本上需要自己控制累加操作,可以借助redis生成唯一ID,redis本身单线程也有原子操作,保证ID唯不重复。这里既然已经接入了mongo,并且mongo也有原子操作,完全可以支持ID自增,直接使用mongo省...原创 2020-03-19 20:40:11 · 2274 阅读 · 0 评论 -
Google Guava 维护本地缓存
背景业务场景:有一个工单系统,需要通过用户姓名查询工单(用户大概在3K左右)存在问题:工单系统本身不维护用户信息,仅存在一个用户ID,但是功能需要通过用户姓名搜索用户数据来自两个服务,也就是用户有两个数据源,两个数据源均不支持使用户姓名搜索数据分页数据源不支持批量获取数据解决方案:方案一: 工单系统维护用户数据,写入DB。优点:直接支持分页、用户名搜索等。缺点:...原创 2020-01-11 18:44:50 · 377 阅读 · 0 评论 -
RabbitTemplate单元测试以及使用Jackson2JsonMessageConverter作为messageConverter问题笔记
需求:用户基本信息修改成功之后,需要同步修改的用户信息给别的服务,同步其冗余的用户信息。设计思路修改完成用户信息数据库已经结束操作确保已经写入数据库之后发送更新后的用户信息。发送消息操作单独启动一个线程发送,统一使用一个线程池管理。MQ选用RabbitMQ,服务内使用CachingConnectionFactory创建和维护MQ连接,统一使用RabbitTemplate发送消息。...原创 2019-10-16 21:28:17 · 2874 阅读 · 0 评论 -
lombok实践
为什么需要lombok为什么要用lombok实际编码中遇到的问题:个别javaBean的属性很多至少每个javaBean都需要写getter/setter(虽然可以生成)有的大佬在getter/setter里写逻辑导致数据异常排查十分困难生成getter/setter的代码返回值不统一,有的setter可能会返回this,有的是void增加属性的同时需要重新生成toString、e...原创 2019-09-29 01:44:27 · 240 阅读 · 0 评论 -
简述 volatile 特性以及原理
多处理器的计算机能够暂时在寄存器或本地内存缓冲区中保存内存中的值。结果是,运行在不同处理器上的线程可能在同一内存位置取到不同的值。 编译器可以改变指令执行的顺序以使吞吐量最大化,这种顺序上的变化不会改变代码的语义,但是编译器假定内存的值仅仅在代码中有显式的修改指令时才会改变。然而,内存的值 volatile关键字为实例域的同步访问提供了一种免锁机制。如果声明一个域为volat...原创 2018-08-30 01:07:58 · 1197 阅读 · 0 评论 -
原子性、有序性和可见性
概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很...原创 2018-08-09 23:57:38 · 519 阅读 · 0 评论 -
JAVA 中的 CAS 和 ABA
学习多线程的时候看到很多人说CAS,并且在concurrent包里面到处都是CAS,就稍微去学习了一下。稍微做个总结CAS:CAS: Compare and Swap 直接翻译就是 比较并交换。 直接从字面上理解就会发现我们已经有了疑问:比较,和什么比较,或者谁和谁比较。比较,以什么方式来比较。交换,和什么交换,或者谁和谁交换。Compare谁和谁比较 先找At...原创 2018-07-30 01:07:08 · 537 阅读 · 0 评论 -
HashMap和HashTable
相同:都保存映射关系数据,即键值对。HashTable 键值对结构: /** * Hashtable bucket collision list entry */ private static class Entry&lt;K,V&gt; implements Map.Entry&lt;K,V&gt; { final int has...原创 2018-07-21 00:57:47 · 271 阅读 · 0 评论 -
Java实现简单的链表-面向初学者
很久之前用C语言实现过链表,现在已经太久没用C语言。就先用JAVA实现一个简单链表好了,还是使用最原始的C语言实现的思路,想来语言变了实现方式大同小异吧。后续可能会不断实现不一样的数据结构。节点 先确定节点数据结构(一个节点一个数字好了),后续慢慢一点点扩展:/** * @author hsf * @description * @create 2018-07-14 下午3:47...原创 2018-07-15 02:24:24 · 19364 阅读 · 4 评论 -
学习笔记-HashMap
面试问候语—HashMapHashMap简直就像问候语一样,面试官问一个HashMap,应聘者呢回答一下表示相互的尊敬。 + 散列表 我觉得说HashMap之前应该先说一下散列表(hash table)。散列表在进行插入,删除,查找的效率都是很高的,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1)。对于散列表来说,确定元素的位置,就类似于在一个数组力通过下标确定元素一样。...原创 2018-07-13 23:53:26 · 278 阅读 · 0 评论