- 博客(11)
- 收藏
- 关注
原创 使用FLink提供的类JdbcSink将数据写入Clickhouse
//TODO 获取jdbcSink的工具类 将数据写入Clickhousepublic class clickHouseUtil { public static <T>SinkFunction<T> getJdbcSink(String sql){ SinkFunction<T> jdbcSink = JdbcSink.<T>sink(sql, new JdbcStatementBuilder<T>() { .
2022-03-20 19:49:18
3210
原创 旁路缓存(Cache-aside)
1)什么是旁路缓存旁路缓存策略以数据库(Hbase,redis)中的数据为准,缓存中的数据是按需加载的,它可以分为读策略和写策略。读策略:从缓存中读取数据;如果缓存命中,则直接返回数据;如果缓存不命中,则从数据库中查询数据;查询到数据后,将数据写入到缓存中,并且返回给用户。写策略:更新数据库中(HBASE,Redis)的记录;删除缓存记录。2)缓存和数据库的数据一致性问题错误一:先失效缓存,后更新数据库1)请求A删除缓存数据2)请求B查询缓存,未命中3)请求B往数
2022-03-20 19:13:11
9236
原创 时间戳和日期(年月日时分秒)的转换工具类
public class DateTimeUtil { /*JDK1.8的DateTimeFormatter替换SimpleDateFormat,因为SimpleDateFormat存在线程安全问题*/ public final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd " + "HH:mm:ss");//TODO 将时间戳转换成日期 格式化成年月日时.
2022-03-20 18:44:35
769
原创 SimpleDateFormat线程不安全测试
class DateFormatTest { private static SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH); private static String date[] = { "01-Jan-1999", "09-Jan-2000", "08-Jan-2001" , "07-Jan-2002" , "06-Jan-2003" , "05-Jan-2004" , "04-J..
2022-03-20 18:32:12
129
原创 方法返回值前面的<T>是什么?浅谈泛型模板T
//Java 方法返回值前面的T是什么 TODO 它的作用是定义泛型class Show<T>{ public void print1(T t){ System.out.println(t); } public <T>void print2(T t){ System.out.println(t); }}class Demo{ public static void main(String[] args) {.
2022-03-20 17:27:49
963
原创 Jedis连接池和线程池
封装RedisUtil通过连接池获取连接对象因为不涉及到高并发因此不用加锁//封装jedis连接池class RedisUtil_1{ private static JedisPool jedisPool; private static Jedis jedis; public static Jedis getJedis(){ if (jedisPool == null) { JedisPoolConfig jedisPoolConf
2022-03-20 16:18:29
799
原创 并发三特性:原子性,可见性,有序性
并发的三个特性我们常说的并发场景下有三个重要特性:原子性、可见性、有序性。只有在满足了这三个特性,才能保证并发程序正确执行,否则就会出现各种各样的问题。原子性: CAS 和 Atomic* 类,可以保证简单操作的原子性,对于一些复杂的操作,可以使用synchronized 或各种锁来实现。可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。有序性:程序执行的顺序按照代码的先后顺序执行,禁止进行指令重排序。看似理所当然的事情,其实并不是这样,指令重
2022-03-20 14:10:43
2092
原创 Java单例设计模式
//单例模式的两种实现方式 懒汉式和饿汉式/*这两种实现,在单线程的模式下,也不会出现线程安全的问题,但是如果在多线程的情况下,就可能会出现多线程的安全问题* 改进:双重校验锁 volatile:易变的 动荡的 反复无常的* 第一次判断singleton是否为null是为了避免singleton已经创建的情况下 避免进入同步代码块 提升效率* 第二次判断singleton是否为null是为了是为了避免并发情况下A线程经过第一次判断 进入同步代码块* 此时B线程也经过判断准备进入同步代码块 .
2022-02-26 17:04:19
308
原创 Java中的泛型擦除以及Flink中的类型擦除(笔记)
package JavaTest;import java.util.ArrayList;/** * Create by zgn on 2022/2/8 12:12 **///TODO 泛型擦除测试public class genericTypeEraser { public static void main1(String[] args) { ArrayList arrayList = new ArrayList(); ArrayList<Stri.
2022-02-08 14:22:52
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人