Java知识点总结(二)

ID生成策略

主键自增id

主键自动增长,不用手工设值、数字型,占用空间小、检索非常有利、有顺序,不会重复,但在迁移旧数据是会出现id冲突

UUID

基于时间,计数器和地址生成32位的id

redis生成id

原子性自增,并发性能高,id格式可以自定义

雪花算法

64位long型的id,按时间递增

UidGenerator

基于Snowflake算法的唯一ID生成器,适用于高并发

美团leaf算法

全局唯一,绝对不会出现重复的ID,且ID整体趋势递增

BIO,NIO,AIO,IO多路复用

BIO

我们最常见的io模型,例如serversocket,一个客户端对应一个服务端,但在处理高并发场景下大量客户端同时请求时会造成阻塞,虽然可以通过多线程或线程池来进行优化,但是还是会有性能问题

NIO

非阻塞型IO,不再是一个连接对应一个处理线程,而是一个有数据传输的连接对应一个处理线程,没有数据传输的则不需要工作线程来处理,这个操作是通过多路复用器完成的(selector),当有读写操作时,selector会获取相对应的selectionKey,并且通过他找到对应的channel

AIO

读写操作是异步进行的,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。

select,poll,epoll

  1. select函数:进程通过调用select函数,监测多个fd文件,只要有数据状态准备就绪了就视为可返回状态,调用函数返回(数组实现)

  2. poll:poll解决了select连接数有上限的问题,但仍有大量遍历造成性能消耗的问题(链表实现)

  3. epoll:采用事件驱动来完成,epoll 先通过 epoll_ctl()来注册一个 fd,一旦基于某个 fd 就绪时,内核会采用回调机制,迅速激活这个 fd,当进程调用 epoll_wait()时便得到通知。(红黑树和双链表实现)

布隆过滤器

作用:判断某个东西可能存在或者一定不存在,可以解决redis缓存击穿的问题

底层:bitmap+映射函数,通过k个映射函数将字段对应的映射位置置为1,当查询时如果全为1,则该元素可能存在(会有误判可能)

相关推荐
Evand J12 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter13 小时前
ZPL文件预览
开发语言·c++
aiks_yuan13 小时前
Java CPU 100% 怎么排查:JDK 11 起 jstack 自带线程 CPU 时间,不用再 top -H 换算十六进制(JDK 8、11、17 实测)
java
Flynn Liang15 小时前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang15 小时前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j
聪明的笨猪猪16 小时前
实际工程问题:AI生成Redis分布式锁的原子性缺陷导致库存超卖
java·经验分享·面试·ai编程
软件技术NINI16 小时前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
Flynn Liang17 小时前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
噢,我明白了18 小时前
JAVA中的一些基础应用知识点
java·开发语言
SL_staff18 小时前
私有化低代码不是妥协,而是企业级数字化的自主可控主航道
java