05 2022 档案
摘要:前言 InnoDB 支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,而意向锁就是其中的一种表锁。 意向锁(Intention Locks) 需要强调一下,意向锁是一种不与行级锁冲突的表级锁,这一点非常重要。意向锁分为两种: 意向共享锁 (inten
阅读全文
摘要:详解TCP 一、OSI七层模型 应用层 为应用程序提供服务并规定应用程序中通信的相关细节。包括文件传输、电子邮件、远程登录等协议。 表示层 将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换。 会话层 负责建立和断开通信连接(数据流动
阅读全文
摘要:转载地址:https://blog.csdn.net/danchu/article/details/70238002 什么是CGLIB CGLIB是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的O
阅读全文
摘要:什么是MVCC 全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。以下文章都是围绕InnoDB引擎来讲,因为myIsam不支持事务。 同一行数据平时发生读写请求时,会上锁阻塞住。但mvcc用更好的方式去处理读—写请求,做到在发生
阅读全文
摘要:事务原理 事务基础 事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。 一致性(Consistency):事
阅读全文
摘要:你知道什么是CAS机制吗?CAS和Synchronized的区别是什么?适用场景呢?优点与缺点呢? 我们先来看一手代码: 启动两个线程,每个线程中让静态变量count循环累加100次。 该代码输出结果如下。因为这段代码是线程不安全的,所以自增结果很可能会小于200. 我们加上synchronized
阅读全文
摘要:在《深入理解Java虚拟机(第二版)》*3.2.3节:再谈引用* 中,介绍了Java中的几种引用: 在JDK 1.2以前,Java中的引用的定义很传统:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。 这种定义很纯粹,但是太过狭隘,一个对象在这
阅读全文
摘要:本文目的: 深入理解Java类加载机制; 理解各个类加载器特别是线程上下文加载器; Java虚拟机类加载机制 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。 在Java语言里面,类型的
阅读全文
摘要:一、Java垃圾回收机制 在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收
阅读全文
摘要:抽象类与接口区别 抽象类 Java中接口和抽象类的定义语法分别为interface与abstract关键字。 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点: a、抽象类不能被实例化只能
阅读全文
摘要:间隙锁 临键锁 默认情况下,InnoDB在 REPEATABLE READ事务隔离级别运行,InnoDB使用 next-key 锁进行搜 索和索引扫描,以防止幻读。 索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足
阅读全文
摘要:一、什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 (2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在
阅读全文
摘要:动态代理 前言 代理模式是一种设计模式,能够使得在不修改源目标的前提下,额外扩展源目标的功能。即通过访问源目标的代理类,再由代理类去访问源目标。这样一来,要扩展功能,就无需修改源目标的代码了。只需要在代理类上增加就可以了。 其实代理模式的核心思想就是这么简单,在java中,代理又分静态代理和动态代理
阅读全文
摘要:在处理多线程并发安全的方法中,最常用的方法,就是使用锁,通过锁来控制多个不同线程对临界区的访问。 但是,无论是什么样的锁,乐观锁或者悲观锁,都会在并发冲突的时候对性能产生一定的影响。 那有没有一种方法,可以彻底避免竞争呢? 答案是肯定的,这就是ThreadLocal。 从字面意思上看,ThreadL
阅读全文
摘要:前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露、强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这样情况发生,增强系统的健壮性。 内存泄露 内存泄露为程序在申请内存后,无法释放已申请的内存空间,一次
阅读全文
摘要:前言 在我们开发中经常会用到很多的常用的工具类,这里做一个总结。他们有很多的方法都是我们经常要用到的。所以我们一定要把它好好的掌握起来! Java String API 1.获取: int length():获取字符串的长度。 char charAt( int index )根据位置获取该位置上某个
阅读全文
摘要:源码分析 概述 在平常的开发都说对于字符串的拼凑时,要尽量使用StringBuilder来操作,特别是对于长字符串的拼凑。 StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和St
阅读全文
摘要:Reentrantlock 一、ReentrantLock与synchronized的比较 相似点 它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,等到释放掉锁或者唤醒后才能继续获得锁。 区别 对于Syn
阅读全文
摘要:StringBuffer详解 概述 StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
阅读全文
摘要:Mysql 锁 根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类 一、全局锁 全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flush tables with read lock。当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以
阅读全文
摘要:Mysql 索引 一、特点 优点 索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度,这也是创建索引的最主要的原因。 索引可以帮助服务器避免排序和创建临时表 索引可以将随机IO变成顺序IO 索引对于InnoDB(对索引支持行级锁)非常重要,因为它可以让查询锁更少的元组,提高了表访问并发
阅读全文
摘要:Java线程池+源码详解 在Java面试中,线程池相关知识,虽不能说是必问提,但出现的频次也是非常高的。同时又鉴于公众号“程序新视界”的读者后台留言让写一篇关于Java线程池的文章,于是就有本篇内容,本篇将基于Java线程池的原理、实现以及相关源码进行讲解等。 什么是线程池 线程池是一种多线程处理形
阅读全文
摘要:无锁 偏向锁 轻量级锁 重量级锁 JDK1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在JDK1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。
阅读全文
摘要:热榜 Spring Quartz(将数据存储到数据库,分布式时可以共享数据) 核心调度接口Scheduler 定义任务的接口Job的execute方法 Jobdetail接口来配置Job的名字、组等 Trigger接口配置Job的什么时候运行、运行频率 QuartzConfig:配置 → 数据库 →
阅读全文
摘要:统计访问量 UV(Unique Visitor) 独立访客,需通过用户IP排重新统计数据。 每次访问都要进行统计。 HyperLoglog,性能好,且存储空间小。 DAU(Daily Active User) 日活跃用户,需通过用户ID排重新统计数据。 访问过一次,则认为其为活跃。QW Bitmap
阅读全文
摘要:置顶、加精、删除 功能实现 点击“置顶”、“加精”、“删除”,修改帖子的状态 在DiscussPostMapper增加修改方法 DiscussPostService、DiscussPostController相应增加方法,注意在Es中同步变化 要在EventConsumer增加消费删帖事件 修改ht
阅读全文
摘要:引入SpringSecurity框架 1. Spring Security 介绍 简介 Spring Security是一个专注与为Java应用程序提供身份认证和授权的框架,它的强大之处在于它可以轻松扩展以满足自定义的需求。 特征 对身份的认证和授权提供全面的、可扩展的支持。 防止各种攻击,如会话固
阅读全文
摘要:6.5 开发社区搜索功能 搜索服务 将帖子保存至Elasticsearch服务器。 对贴子实体类DiscussPost用注解进行相关配置 从Mybatis取数据存入 在dao层创建DiscussPostRepository类,继承ElasticsearchRepository接口即可,它集成了CRU
阅读全文
摘要:Spring boot整合Ealsticsearch 引入依赖 spring-boot-starter-data-elasticsearch 配置Elasticsearch Redis和Es底层都用到了Netty,有启动冲突。解决:在CommunityApplication类加入初始化方法进行配置。
阅读全文
摘要:消息通知页面 通知列表 显示评论、点赞、关注三种类型的通知 通知详情 分页显示某一类主题所包含的通知 未读消息 在页面头部显示所有的未读消息数量 1.新增MessageMapper方法 // 查询某个主题下最新的通知 Message selectLatestNotice(@Param("userId
阅读全文
摘要:触发事件 触发事件 评论后,发布通知 点赞后,发布通知 关注后,发布通知 处理事件 封装事件对象 开发事件的生产者 开发事件的消费者 创建对象实体 public class Event { //事件类型 private String topic; //消息发送方Id,1为管理消息 private i
阅读全文
摘要:优化登录模块 使用Redis存储验证码 验证码需要频繁的访问与刷新,对性能要求较高。 验证码不需永久保存,通常在很短的时间后就会失效。 分布式部署时,存在Session共享的问题。 使用Redis存储登录凭证 处理每次请求时,都要查询用户的登录凭证,访问的频率非常高。 使用Redis缓存用户信息 处
阅读全文
摘要:关注列表 粉丝列表 业务层 查询某个用户关注的人,支持分页。 查询某个用户的粉丝,支持分页。 表现层 处理“查询关注的人”、“查询粉丝”请求。 编写“查询关注的人”、“查询粉丝”模板。 一、业务层 1.修改FollowService // 查询某用户关注的人 public List<Map<Stri
阅读全文
摘要:关注 需求 开发关注、取消关注功能。 统计用户的关注数、粉丝数。 关注 若A关注了B,则A是B的Follower(粉丝),B是A的Followee(目标)。 关注的目标可以是用户、帖子、题目等,在实现时将这些目标抽象为实体。 修改RedisKeyUtil public class RedisKeyU
阅读全文
