- 博客(24)
- 收藏
- 关注
原创 Java多线程
1.继承Thread类,重写run方法,启动时用start方法。2.实现runnable接口,重写run方法,启动时用start方法。3.实现callable接口,重写run方法,启动时用start方法。callable做线程池的任务时,可以得到线程的执行结果。
2025-04-28 13:35:40
371
1
原创 SpringBoot集成jasypt实现配置文件密码加密
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="明文" password=关键字 algorithm=PBEWithMD5AndDES。java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="密文" password=关键字 algorithm=PBEWithMD5AndDES。
2025-04-28 13:35:38
218
1
原创 Redis哨兵配置异常总结
异常原因是由于用光了可用的端 口号,所以新的连接没办法绑定端口,即“Cannot assign requested address”。感觉是服务器端的redis配置问题。IP应该是redis地址,如果不是就是redis配置有问题。哨兵redis配置问题,检查哨兵从节点里主节点的配置。虽然报错,但是不影响使用。
2025-04-28 13:35:02
141
原创 Redis哨兵模式+Redission分布式锁
redis: host: 10.127.0.1 port: 6379 timeout: 3000 database: 0 password: password是一种特殊的模式,首先redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运营,其原理是哨兵通过发送命令、等待redis服务器响应,从而监控运行的多个redis实例。主管下线:某一个哨兵链接不上redis实例,则哨兵认为该redis实例下线,为该实例添加标记。客观下线:多个哨兵连接不到redis实例时,由哨兵发起投票
2025-04-28 13:34:57
450
原创 RabbitMQ
缺点:RabbitMQ只会检查第一个消息是否过期,如果过期则丢到死信队列,如果第一个消息延时时间很长,第二个消息的延时时间很短,第二个消息也并不会优先得到执行。topic交换机消息的routing_key不能随意填写,必须满足一定的要求,必须是一个单词列表,以点好分隔开。延时队列还有很多其他选择,比如利用Java的DelayQueue,利用Redis的zset,利用Quartz或者利用kafka的时间轮,这些方式各有特点。正常情况下消息是放在内存中的,但在惰性队列下消息是放在磁盘中的。
2025-04-28 13:34:33
758
原创 Java常见面试题
Callable 接口类似于 Runnable,从名字就可以看出来了,但是 Runnable 不会返回结果,并且无法抛出返回结果的异常,而 Callable 功能更强大一些,被线程执行后,可以返回值,这个返回值可以被 Future 拿到,也就是说,Future 可以拿到异步执行任务的返回值。Future 接口表示异步任务,是一个可能还没有完成的异步任务的结果。所以说Callable用于产生结果,Future 用于获取结果。
2025-04-28 13:34:30
567
原创 Redis 高级篇
Key本身的数据量过大:一个String类型的Key,它的值为5MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。单个key的value小于10KB对于集合类型的key,建议元素数量小于1000。
2025-04-28 13:34:08
617
原创 Redis网络模型
select模式存在的三个问题能监听的FD最大不超过1024每次select都需要把所有要监听的FD都拷贝到内核空间每次都要遍历所有FD来判断就绪状态poll利用链表解决了select中监听FD上限的问题,但依然要遍历所有FD,如果监听较多,性能会下降epoll模式中如何解决这些问题的?基于epoll实例中的红黑树保存要监听的FD,理论上无上限,而且增删改查效率都非常高,性能不会随监听的FD数量增多而下降。
2025-04-28 13:33:47
712
原创 Java随笔
修饰类:抽象类修饰方法:抽象方法包含抽象方法的类肯定是抽象类,抽象类不一定包含抽象方法。继承抽象类的子类必须重写抽象方法。重载是在一个类中实现的,方法名相同,形参列表不同,与权限修饰符、返回值类型无关。重写发生在子类与父类之间,方法名、参数列表必须相同,也称为方法的重置、覆盖。
2025-04-28 13:33:23
600
1
原创 Redis原理篇
类似java的HashTable,底层是数组加链表来解决哈希冲突Dict包含两个哈希表,ht[0]平常用,ht[1]用来rehash当LoadFactor大于5或者LoadFactor大于1并且没有子进程任务时,Dict扩容当LoadFactor小于0.1时,Dict收缩扩容大小为第一个大于等于used+1的2”收缩大小为第一个大于等于used 的2”Dict采用渐进式rehash,每次访问Dict时执行一次rehash。
2025-04-28 13:32:57
1026
原创 列表数据编辑/查看和新增公用一个对话框,数据重置方法
JSON.parse(JSON.stringify()), 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。针对对象和array类型,浅拷贝只是拷贝了指针地址,实际存储位置还是一样的,修改拷贝后的值,拷贝前的值也会跟着变。对象的浅拷贝: Object.assign({},被拷贝的对象),再点击新增,即使使用resetFields()方法,也会带出第一次进列表点击的数据。
2023-06-09 20:00:00
158
原创 Java-IO流
缓冲字节输入流自带一个8KB的缓冲池,每次由操作系统提取8KB的数据放入缓冲池,我们直接从缓冲池读取数据,故性能较好。定义一个与文件大小一样的字节数组,然后全部读取再输出。如果读取的文件过大,会导致内存溢出。同BufferedInputStream,有一个8KB的缓冲池。缓冲字节输入流,把低级的字节输入流包装成高级流,从而提高性能。解决字符流读取不同编码乱码的问题。传输方式分类:字节流/字符流。流向分类:输入/输出流。可以提高字节流和字符流读写数据的性能。缓冲字节数组性能最好。
2023-05-05 18:30:00
118
原创 Java常用集合初识
map的底层结构是数组+链表+红黑树,简单来说是HashTable是锁了整个map,ConcurrentHashMap锁的是map的链表部分。数组获取stream流:Arrays.stream(数组);forRach:逐一处理(终结方法,调用后不可再连续操作,不可再点其它方法)count:记总数(终结方法,调用后不可再连续操作,不可再点其它方法)先获取map的所有键(map.keySet()),再根据键获取值。集合获取stream流:集合.stream();map:加工方法,把原来的元素加工之后再放回去。
2023-05-05 10:12:49
90
原创 lambda表达式
Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个。lambda表达式只能简化接口中只有一个抽象方法的匿名内部类写法。接口中只有一个抽象方法又称函数式接口。,即没有函数名的函数。Lambda表达式可以表示闭包,和传统数学上的意义有区别。函数式接口注释:@FunctionalInterface。(匿名内部类被重写方法的形参列表)->{被重写方法的方法体代码;简化匿名内部类的写法。
2023-04-26 21:30:00
55
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人