SSM
MyBatis基本介绍ORM(Object Relational Mapping): 对象关系映射,指的是持久化数据和实体对象的映射模式,解决面向对象与关系型数据库存在的互不匹配的现象
MyBatis:
MyBatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需关注 SQL 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 Statement 等过程。
MyBatis 通过 XML 或注解的方式将要执行的各种 Statement 配置起来,并通过 Java 对象和 Statement 中 SQL 的动态参数进行映射生成最终执行的 SQL 语句。
MyBatis 框架执行 SQL 并将结果映射为 Java 对象并返回。采用 ORM 思想解决了实体和数据库映射的问题,对 JDBC 进行了封装,屏蔽了 JDBC 底层 API 的调用细节,使我们不用操作 JDBC API,就可以完成对数据库的持久化操作。
MyBatis 官网地址:http://www.mybatis.org/mybatis-3/
参考视频:https://space.b ...
Java
SE基础数据变量类型
成员变量
局部变量
静态变量
定义位置
在类中,方法外
方法中或者方法的形参
在类中,方法外
初始化值
有默认初始化值
无,赋值后才能使用
有默认初始化值
调用方法
对象调用
对象调用,类名调用
存储位置
堆中
栈中
方法区(JDK8 以后移到堆中)
生命周期
与对象共存亡
与方法共存亡
与类共存亡
别名
实例变量
类变量,静态成员变量
静态变量只有一个,成员变量是类中的变量,局部变量是方法中的变量
初学时笔记内容参考视频:https://www.bilibili.com/video/BV1TE41177mP,随着学习的深入又增加很多知识
数据类型基本类型Java 语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型
byte:
byte 数据类型是 8 位、有符号的,以二进制补码表示的整数,8 位一个字节,首位是符号位
最小值是 -128(-2^7)、最大值是 127(2^7-1)
默认值是 0
byte 类型用在大型数组中节约空间,主要代替整数,byte 变量占用的空间只有 i ...
juc
JUC进程概述进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位
进程的特征:并发性、异步性、动态性、独立性、结构性
线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。线程是进程中的一个实体,是系统独立调度的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源,与同属一个进程的其他线程共享进程所拥有的全部资源
关系:一个进程可以包含多个线程,这就是多线程,比如看视频是进程,图画、声音、广告等就是多个线程
线程的作用:使多道程序更好的并发执行,提高资源利用率和系统吞吐量,增强操作系统的并发性能
并发并行:
并行:在同一时刻,有多个指令在多个 CPU 上同时执行
并发:在同一时刻,有多个指令在单个 CPU 上交替执行
同步异步:
需要等待结果返回,才能继续运行就是同步
不需要等待结果返回,就能继续运行就是异步
参考视频:https://www.bilibili.com/video/BV16J411h7Rd
笔记的整体结构依据视频编写,并随着学习的深入补充了很多知识
对比线程进程对比:
进程基本上相互独立的,而 ...
校验器框架
需求
将校验逻辑集中管理,需要使用的时候直接调用,无需编写类似的逻辑
思路
校验流程和链表类似,可以使用链表来进行封装
实现
校验链的构建通过配置类来实现,用户需要指定链表中节点的参数类型和
核心配置类对用户的参数和业务进行封装ChainPoint、最终封装为ServicePoint
参数设置配置类中进行设置
业务设置配置类中进行设置
难点1、配置类中配置多条校验链
使用list?
TraceId的正确使用姿势,提高日志排查效率
问题通常服务遇到问题,通过查询日志信息来定位bug,但是只能根据日志的关键信息来查询,查询信息不全,排查困难
如何解决将traceID注入日志,查询的时候根据traceID查询出整个链路信息
原理网关生成traceID,接下来的链路打印日志的时候带上traceID,那么我们就知道了这一条链路上的所有业务流程走向了。
微服务如何拆分?原则是什么?
微服务拆分的意义把所有鸡蛋放在一个篮子里所带来的风险是显而易见的——一损俱损。微服务架构正是通过分而自治的理念来降低服务故障的风险,从而实现服务的可行性。
微服务易于实现
更小的服务意味着更少的代码。更小的服务意味着不必考虑太多整体的技术架构或一站式的解决方案。只需要拿上趁手的兵器(开发工具和语言),奋勇开疆即可!
在实现微服务时,配以Spring Boot类开箱即用的工具,可以使自己更加有信心赶超进度。
微服务易于维护
更小的服务意味着更少的代码、更少的业务需求,也就容易被开发人员所理解,包括开发者和维护者。对于软件设计来讲,一个非常大的质量指标,就是软件是否可维护。更小、更内聚的微服务更加易于维护。
微服务易于部署
微服务往往采用轻量级的技术来实现,如内嵌容器的方式,这样,它更容易将其自身及所依赖的运行环境打成一个包来进行分发,从而避免了不同的部署导致的环境不一致的问题。再配合Docker等容器技术,可以进一步降低部署的复杂性。
微服务易于更新
微服务更容易被维护和修改,再加上每个微服务都是独立部署的,这样替换单个服务,并不会影响整体的软件功能。所以,微服务可以拥有 ...
设计一个社区系统
12345678//todo 将用户评论、点赞、收藏、系统消息发送到 RabbitMQ,统效率和服务稳定性;实现消息的异步解耦. (点赞、收藏 业务优化)//todo 利用 AOP 切面技术,当系统收到新的消息时(如评论、点赞等),自动将这些消息发送至 Kafka 消息队列中。接着,通过消费者服务从 Kafka 中取出消息,并将其存储到Redis 缓存中等待用户消费(推拉结合),这一过程既确保了消息处理的高效性,也增强了系统的可靠//todo 通过 AOP +TracelD 记录接口访问日志,实现任务的追踪、监控和诊断。//todo 集成本地缓存 Guava 和 Caffeine,有效提高服务的吞吐率、QPS 近 30%;//todo 采用自旋锁策略优化缓存架构,针对热 key的并发访问进行同步,防止其失效时导致的缓存击穿://todo 结合 MyBatis 拦截器和 DFA 算法实现了一套完善的敏感词自定义过滤方案,确保了社区内容的健康和安全。
点赞、收藏
点赞收藏其实业务基本相同、一整个流程就是:
1、判断用户是否已经点赞
2、关系表插入数据
3、点赞数+1
取消点赞也是类似, ...
java八股
面向对象集合IO异常多线程
笔记本突然掉帧解决方案总结
问题描述游戏时突然帧率爆降至个位数,并伴随游戏声音撕裂,1秒钟左右迅速恢复。目前基本认定为WIN系统原因。
解决办法汇总
关闭[颜色]中的透明效果。
关闭[背景]中的幻灯片放映或者是wallpaper engine。
电源管理,改为高性能模式
Nvdia面板,改为最佳性能优先
关闭Win10的快速启动设置
关闭Win10随机化内存分配设置
重装系统,更换显卡驱动版本,有概率解决问题
雪花id生成器
雪花组成
第一位(符号位):由于ID都是正整数,所以第一位始终为0。(负数的二进制第一位为1)
时间戳(41位):记录时间戳的差值(相对于某个固定时间点),单位是毫秒。41位时间戳可以使用69年(从1970年开始,可用至2039年)。
工作机器id(10位):用于标识不同的工作机器(如不同的服务器实例),支持在同一数据中心内部署最多1024台机器。
如果存在跨机房部署的情况下可以把这10个bit位,拆分成两个5bit,前5个bit表示机房id,后面5个表示机器的id
序列号(12位):用于在同一毫秒内产生不同的ID,支持每个工作机器在同一毫秒内产生最多4096个ID。
实现流程
初始化参数 在启动服务时,需要为每个工作机器分配一个唯一的工作机器id和一个数据中心id。这些id通常在服务配置中指定,并且在整个服务运行期间保持不变。
生成时间戳 每次生成ID时,首先获取当前时间戳(毫秒级),并计算其与起始时间戳的差值。起始时间戳是一个固定的时间点,通常设置为服务的启动时间或某个固定的时间点。
分配工作机器id和数据中心id 根据服务的配置,将工作机器id和数据中心id分别放入I ...