- 博客(24)
- 收藏
- 关注
原创 stream Collectors.toMap 空指针异常
List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap具体用法实例如下:正常情况下hashMap是允许value为null的,但是toMap方法使用了Map.merge方法可以过滤掉value为null的值
2022-06-13 17:36:50
413
原创 数据库缓存一致性解决方案
在日常开发当中为了提高响应率,减少响应时长,缓存是一定会用的。那么在修改数据库的时候缓存的更新肯定会有延迟,如何保存缓存和数据库数据的一致性是一个问题。方案1:同步删除顾名思义在修改数据库数据的时候,同步删除缓存缺点:1、不能保证每个入口都能同步删除2、如果直接修改数据库不能同步删除3、如果缓存删除失败,会出现脏数据方案2: 延迟双删删除缓存-》修改数据库-〉等待一段时间在删除一次缓存缺点:1、无法确定延迟时间(主从同步会出现延迟)2、无法绝对保障数据一致方案3: 异步监听binlo
2022-04-24 12:47:32
1695
原创 Spring三级缓存解决循环依赖
什么叫循环依赖?@Componentpublic class CircularDependencyA { private CircularDependencyB circB; @Autowired public CircularDependencyA(CircularDependencyB circB) { this.circB = circB; }}@Componentpublic class CircularDependencyB
2022-04-23 14:06:13
288
原创 springboot消费kafka Listener method could not be invoked with the incoming message
bug背景:使用mysql cdc kafka 处理消息,当mysql删除一条记录时会触发此bug错误信息:org.springframework.kafka.listener.ListenerExecutionFailedException: Listener method could not be invoked with the incoming messageEndpoint handler details:Method [public void com.flex.notify.listen
2022-03-23 15:43:45
4526
原创 FeignClient List<xxObject> java.lang.ClassCastException
bug场景:1、使用feginClient调用业务系统获得List<xxObecjt>2、遍历List执行业务逻辑List<xxObecjt> xxObecjtLsit = feginClient.getList();for (xxObject obecjt : xxObecjtLsit) { .......}报错信息:java.lang.ClassCastException: class com.alibaba.fastjson.JSONObject cannot
2022-03-23 14:05:53
3584
原创 java.lang.UnsupportedOperationException
今天刷题时遇到一个问题,代码如下: public static void main(String[] args) { List<String> strList = Arrays.asList("dag","cag","ctg","cot"); strList.remove("dag"); }执行结果:Exception in thread "main" java.lang.UnsupportedOperationException at java
2021-12-04 18:32:46
322
原创 redis之分布式锁
Jedis + ThreadLocal 实现分布式可重入锁import redis.clients.jedis.Jedis;import redis.clients.jedis.params.SetParams;import java.util.HashMap;import java.util.Map;public class RedisWithReentrantLock { private final ThreadLocal<Map<String, Integer>&
2021-11-30 12:36:21
755
原创 Failed to find Electron v4.2.12 for darwin-arm64
今天运行一个前端项目,报错Failed to find Electron v4.2.12 for darwin-arm64搞了一个小时是因为我的电脑时 m1版本的mac ,目前 Electron 仅11以及以后的版本支持m1这是m1的悲哀吗,唉????????
2021-11-29 17:10:36
2268
8
原创 并行与并发
并行cpu就好比一条高速公路,如果公路有四个车道,那么它可以并行行驶四辆车,cpu的核心数就是车道数。并发谈论并发的时候必须在单位时间内讨论,俗话说一心不能二用,cpu也是如此。原则上来说一个cpu只能分配给一个进程,如果想“一心多用”,就只能使用并发技术,常见的就是“时间片轮转进程调度算法”。在我们的操作系统上肯定不止打开了一个软件,那么是如何做到一心多用的呢,实际上cpu的运行速度是非常快的,他可以飞速的每个进程之间切换,每个进程执行一个时间片,然后切换下一个进程。由于切换速度非常快,所以我们
2021-11-22 13:42:36
1071
原创 成为优秀架构师的必备技能
扎实的基础知识,空余时间多看一些书,设计模式、算法、数据结构。有时间维护自己的博客,一个优秀的架构师要学会分享自己的技术和知识。1、熟练使用各种框架,并知道它们实现的原理。2、jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;3、池技术,什么对象池,连接池,线程池……Java反射技术,写框架必备的技术,遇到有严重的性能问题,替代方案java字节码技术;4、nio,没什么好说的,值得注意的是"直接内存"的特点,使用场景;java多线程同步异步;java各种集合对象的实现原理,了解这些可以让你
2021-11-22 10:58:49
6039
原创 volatile的实现原理
volatile关键字在多线程场景中使用,其底层实现原理是:当对volatile变量执行写操作后,JMM会把工作内存中的最新变量值强制刷新到主内存写操作会导致其他线程中的缓存无效操作系统的缓存行(cacheline)默认是64bytes,声明一个变量x,volatile int x,当两个线程同时对x进行 x++ 操作时,会先将x加载到自己的缓存中,修改之后强制刷新到公共的缓存中,以此来保证一致性。...
2021-11-22 10:08:23
290
原创 daemon 守护线程
Daemon线程是一种支持性线程,因为它主要用作程序中台调度以及支持性工作。这意味着,当一个Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会推出。可以通过调用Thread.setDaemon(true)将线程设为Daemon线程。(Daemon属性需要在线程启动之前设置)在Java虚拟机退出时finally块不一定会执行。public class Test1 { static class DaemonRunner implements Runnable{ @Ove
2021-11-21 16:26:08
1112
原创 zookeeper之分布式锁
import com.zzh.zookeeper.config.ZKUtils;import com.zzh.zookeeper.lock.WatchCallBack;import org.apache.zookeeper.ZooKeeper;import org.junit.After;import org.junit.Before;import org.junit.Test;/** * @Author:zzh * @Date: 2021/06/22/ 15:28 * @Descrip
2021-06-22 17:00:43
114
原创 zookeeper之分布式配置中心
import org.apache.zookeeper.ZooKeeper;import java.io.IOException;import java.util.concurrent.CountDownLatch;/** * @Author: zzh * @Date: 2021/6/21 18:01 * @Description:zk的工具类,获取连接 */public class ZKUtils2 { private static ZooKeeper zkCli; p
2021-06-22 16:56:32
174
原创 Join condition is missing or trivial.Use the CROSS JOIN syntax to allow cartesian products between t
报错信息:Join condition is missing or trivial.Use the CROSS JOIN syntax to allow cartesian products between these relations.;原因:spark默认不支持笛卡尔积操作解决:通过参数spark.sql.crossJoin.enabled开启,方式如下:spark.conf.set("spark.sql.crossJoin.enabled", "true")...
2020-08-06 10:42:18
2891
原创 Centos7 安装和配置MySQL5.7
https://blog.youkuaiyun.com/WYA1993/article/details/88890883
2020-06-20 16:02:28
137
原创 Java Thread 线程的创建方法及生命周期
线程的概念程序: Program,是一个指令的集合进程: Process,(正在执行中的程序)是一个静态的概念进程是程序的一次静态执行过程,占用特定的地址空间每个进程都是独立的,由3部分组成 cpu data code**缺点:**内存的浪费,cpu的负担**线程:**是进程中一个“单一的连续控制流程”(a single Thread,equential flow of control)/执行路径线程又被称为轻量级进程(lightweight process)Threads run
2020-06-08 10:28:36
151
原创 IDEA设置类和方法注释模板
类注释settings-》editor-》file and code templates/** * @Author: zzh * @Date: ${DATE} ${HOUR}:${MINUTE} * @Description: */点击应用,效果方法注释settings-》editor-》 live templates1、新建自己的模板分组2、新建模板3、选择应用范围4、添加注释模板,修改快捷键为enter* * @author: zzh * @descrip
2020-06-07 11:38:55
207
原创 java.lang.NoClassDefFoundError: Could not initialize class
//代码ImageIO.read(ResourceMgr.class.getClassLoader().getResourceAsStream("images/tankU.gif"));//错误信息java.lang.NoClassDefFoundError: Could not initialize class目录结构错误原因idea与eclipse不同,静态资源文件需要放在resource目录下,修改目录结构为解决问题...
2020-06-02 13:14:45
395
原创 僵尸进程和孤儿进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <sys/types.h>int main(
2020-05-31 16:49:37
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人