- 博客(82)
- 收藏
- 关注
原创 关于VO、BO、DTO、PO、Entity、DO的说法
在开发的过程中,我们不可避免的使用到了各种POJO类,一个优秀、整洁、易维护的代码,少不了对这些相似POJO类的区别,以下整理了多数POJO类后缀的定义与前端的交互类,一般在controller层,做为接口的入参接收类、出参返回类与数据库的表形成一一对应映射关系的类,有时候也会用Entity类来代替特点:只存储数据,不包含数据操作在服务间调用的类VO和PO类需要通过DTO类才能实现数据转化在服务内部使用的业务对象,在服务层中,由DTO转成BO然后进行业务处理后,转成DTO返回到接口层对于复杂的业务场景
2022-06-26 15:02:09
3215
原创 【踩坑】Mac安装Homebrew的时候报错误fatal: unable to access ‘https://github.com/Homebrew/brew/‘
1.问题Mac安装Homebrew的时候报错误fatal: unable to access ‘https://github.com/Homebrew/brew/’执行安装命令:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"现象:zyp@zypdeMacBook-Pro ~ % /bin/bash -c "$(curl -fsSL https://ra
2022-04-08 18:17:34
5196
1
原创 MAC使用笔记
这里写目录标题1.前沿2. 快捷键大全1. 系统相关快捷键1. 浏览器相关快捷键3. 如何修改host文件1.前沿对于win转Mac的小伙伴来说,入手会卡住一会,会碰到以下常见问题:2. 快捷键大全https://wenku.baidu.com/view/a2a5f56ee75c3b3567ec102de2bd960590c6d9bf.html1. 系统相关快捷键复制:command+C粘贴:command+V快速复制文件(含CV):command+D1. 浏览器相关快捷键最小化窗
2022-04-08 17:15:39
546
原创 【八股文】MongoDB篇
目录MongDB是什么存储类型MongDB优缺点1. 优点2. 缺点相关语法SpringBoot和MongDB整合1. pom相关依赖2. 常见类1. Criteria类1. where方法2. Query类1. addCriteria方法2. with方法1. 题外话:Sort是什么类?3. MongoTemplate(核心)1. find方法1. entityClass2. collectionName3. List 返回MongDB是什么存储类型MongDB优缺点1. 优点2. 缺点相关
2022-03-17 17:29:38
2953
2
原创 【Redis篇】Redis的持久化机制RDB和AOF
目录Redis的持久化机制RDB和AOF1. RDB(全量备份)1. 实现方式(生成dump.rdb文件)1. save方式(阻塞、同步)1. 触发时机(配置文件里说了)2. besave方式(非阻塞、异步)1. 不懂就问:那besave具体是怎么操作的呢?2. 触发时机(正常退出redis)2. 优点(备份文件容量小、支持异步备份)1. dump.rdb文件小2. 启动快3. besave异步备份4. 适合全量备份3. 缺点(数据会丢失)1. 容易丢数据2. AOF(增量备份、日志)1. 追加日志的方式(
2022-03-15 10:49:38
1189
原创 【Redis篇】什么是缓存雪崩、缓存穿透、缓存击穿?如何解决?
什么是缓存雪崩、缓存穿透、缓存击穿?如何解决?1. 缓存雪崩1. 概念指在某一个时间段,缓存集中过期失效。所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。2. 本质原因大量key同时过期3. 解决方案1. 防止缓存集中失效过期时间+随机数:尽量让缓存失效的时间均匀分布,最次也得随机分布,尤其是一些访问大的接口。2. 保护数据库加锁或者队列:防止大量线程对数据库的一次性进行读写,避免缓存失效时
2022-03-15 10:46:31
2336
原创 【多线程】给三个字母a、l、i,采用多线程的方式打印alialialiali。。。
题目给三个字母a、l、i,采用多线程的方式打印alialialiali。。。思路1. 使用ReetrankLock和Conditionhttps://www.cnblogs.com/maydow/p/4780780.html
2022-03-14 00:51:36
1224
原创 【Redis篇】Redis为什么这么快?Redis6.0之后变成多线程了?
1. Redis为什么这么快1. 完全基于内存绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中2. 数据结构简单对数据操作也简单,Redis中的数据结构是专门进行设计的3. 采用单线程(不用CPU上下文切换、不用锁操作)避免了CPU的上下文切换、资源竞争问题,不存在加锁释放锁操作,也没有死锁4. 使用多路I/O复用模型(重要)非阻塞IO(理解为监控室,忘了再百度以下)1. 涉及的系统调用函数有哪些select、poll、epoll等,这些函数都可以同时监视多个描述符的读写就绪状况
2022-03-12 16:18:16
2649
原创 【Redis篇】如何保证缓存和数据库的一致性?
目录如何保证缓存和数据库的一致性?1. 先删除缓存,后更新数据库1. 存在的问题2. 结果2. 先更新数据库,后删除缓存(感觉用这个方法没啥问题的)1. 存在的问题2. 结果3. 缓存延时双删:实现最终一致性1. 问:延迟多久怎么判断如何保证缓存和数据库的一致性?知识点:对缓存的操作一般都是删除而不是更新操作按照操作顺序可以分为以下几种:1. 先删除缓存,后更新数据库1. 存在的问题A请求删除缓存后,还未更新数据库的时候,突然!B请求来了(一次查询操作),查缓存发现没数据,就去数据库查询,B
2022-03-11 09:35:15
664
转载 【分布式篇】怎么处理微服务之间的链路追踪?traceId和大数据日志采集的实现原理?
怎么处理微服务之间的链路追踪?traceId和大数据日志采集的实现原理1. 什么是链路追踪?分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。2. 链路追踪的作用1. 故障快速定位可以通过调用链结合业务日志快速定位错误信息2. 链路性能可视化各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来3. 链路分析通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在
2022-03-09 22:09:15
705
原创 【Spring篇】Spring是如何解决循环依赖的?Bean的一、二、三级缓存是什么?
Spring是如何解决循环依赖的1. 解决方案(setter注入)用setter方法注入(非构造方法注入),且对于单例模式下的Bean注意:如果是构造器注入引起的循环依赖,直接启动不了,无解2. 关键词Bean的生命周期(实例化和属性赋值分开)、ObjectFactory、三级缓存2. Spring解决循环依赖的过程1. 现象ClassA引用ClassB,ClassB中又引用了ClassA。2. 解决步骤A的实例化,Spring选择合适的构造器实例化A,并把A的ObjectFa
2022-03-08 23:31:58
823
原创 【Mysql】什么是死锁?如何避免死锁
死锁1. 什么是死锁(争抢资源、互相等待)多线程因为争抢资源而出现的互相等待的状态2. 死锁产生的四个必要条件1. 互斥当资源被一个线程使用(占有)时,别的线程不能使用(如:张三拿到了苹果,李四就不能拿苹果了)2. 不可抢占资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放(如:李四不能从张三手里抢苹果,只能等张三主动放弃苹果)3. 请求和保持当资源请求者在请求其他的资源的同时保持对原有资源的占有(如:张三拿到了苹果,他还可以去那香蕉,并不冲突)4. 循环等待存在
2022-03-08 23:28:48
1512
原创 【Mysql篇】Mysql的隔离级别,以及存在的并发事务问题
目录Mysql的隔离级别,以及存在的并发事务问题1. 数据库在并发情况下的常见操作1. 读-读2. 读-写3. 写-写2. Mysql的隔离级别以及解决的问题1. READ-UNCOMMITTED(读未提交)2. READ-COMMITTED(读已提交)3. REPEATABLE-READ(可重复读,默认隔离级别)4. SERIALIZABLE(串行化)3. 问:不可重复读和幻读的区别是什么?Mysql的隔离级别,以及存在的并发事务问题1. 数据库在并发情况下的常见操作1. 读-读不存在任何问题,也
2022-03-08 23:27:25
997
原创 【多线程】cpu密集型和IO密集型是什么
cpu密集型和IO密集型是什么是任务、方法的类型1. cpu密集型(计算密集型、cpu高了)处理运算时间比较长,系统运行的大部分状况是CPU Loading 100%,不太需要访问I/O设备1. 例如计算圆周率、对视频进行高清解码2. 要注意什么尽量避免CPU的切换,任务同时进行的数量 = CPU的核心数1. IO密集型IO的速度远远低于CPU和内存的速度,cpu性能好,处理运算时间比较短,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作1. 例如Web应用2. 要注意什
2022-03-08 14:59:02
1234
原创 【多线程篇】sleep和wait的区别?notify和notify的作用?如何实现生产者-消费者模式
目录sleep和wait的区别?1. sleep方法(休眠)1. 源码分析2. 作用3. 题外话:sleep之后线程会释放锁吗4. sleep的使用场景2. wait方法(等待)1. 源码分析1. 作用2. 使用场景3. notify1. notify的作用2. 为什么要使用notify、notifyAll?3. 应用场景4. 如何使用wait和notifyAll实现生产者-消费者模式1. 注意事项1. 题外话:为什么wait和notify方法要在synchronized方法里使用?2. 实现1. 生产者1
2022-03-07 09:56:33
2368
1
原创 【多线程篇】如何停止一个线程?stop和interrupt有什么区别?interrupted和isInterrupted的区别?
目录如何停止一个线程?1. 使用return(退出标志)2. 使用thread.stop方法(弃用)3. 使用thread.interrupt方法(推荐)1. 题外话:如何查看一个线程停止状态1. Thread.interrupted(会清除标志位)2. thread.isInterrupted(不会清除标志位)3. native修饰的isInterrupted方法(是前两个方法的本质,单独拿出来好了)2. 题外话:interrupted和isInterrupted的异同点?1. 相同点2. 不同点3. 题
2022-03-07 09:54:18
735
原创 【Mysql篇】mybatis通过jdk动态代理的原理
mybatis通过jdk动态代理的原理关键字:MapperRegistry .getMapper、mapperProxyFactory.newInstance、MapperProxy、InvocationHandler使用Configuration的getMapper方法时,会调用mapperRegistry.getMapper方法,public class MapperRegistry { private final Configuration config; private fin
2022-03-06 23:49:22
692
转载 【Mysql篇】Mysql中三大日志binlog、redolog、undolog
Mysql中的binlog、redolog、undologMysql执行器在执行更新相关的语句时候,会记录日志1. binlog 二进制日志binlog是Mysql自带的日志模块(叫什么归档日志),所有引擎都可以使用1. 发生时机(commit之前)MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性图片来源:JavaGuide链接 MySQL三大日志(binlog、redo log和undo log)2. redolog 事务日志
2022-03-06 17:44:23
283
原创 【Mysql篇】索引是什么?索引的底层模型是什么?索引失效场景以及失效的原理
目录索引1. 索引是什么2. 索引的优点(加快查询效率)3. 索引的缺点(占用空间、更新变慢)4. 索引的类型1. hash2. 平衡二叉树AVL1. 定义2. 问题3. B树1. 定义2. 特点3. B+树(mysql索引推荐的存储结构)1. 定义2. 特点5. 索引的种类1. 聚集索引(如主键索引、唯一的隐式非空索引)1. 定义(数据和索引放到一起)2. 非聚集索引(数据和索引分开)3. 联合索引6. 什么时候需要创建索引7. 什么时候不需要创建索引8. 哪些情况会不走索引9. 主键和索引的区别10.
2022-03-06 17:41:29
1135
原创 【Mysql篇】什么是MVCC?什么是快照读?版本链?什么是readView?MVCC如何实现事务的隔离性?
这里写目录标题什么是MVCC(多版本并发控制)题外话:当前读和快照读1. 当前读(行锁 + 间隙锁)2. 快照读(mvcc + undolog)1. 定义(Mutli Version Concurreny Control)2. MVCC的组成要素1. 每条记录有三个隐藏列1. 事务ID(trx_id)2. 回滚指针(roll_pointer)3. 隐藏主键(row_id)2. undolog日志1. 分类1. insert undo_log(insert操作,给自己事务看的)2. update undo_l
2022-03-05 12:39:11
1612
原创 【算法】电话号码的字母组合(回溯解决)
题目思路对于这种无法用有限个for循环写出来的代码,我们采用回溯的方法,穷举代码实现public class Test07 { public static void main(String[] args) { Test07 test07 = new Test07(); List<String> res = test07.getRes("234"); System.out.println(res); }
2022-03-04 22:18:28
188
原创 【算法】合并两个有序链表
题目题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/思路双指针、虚拟头代码实现/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; }
2022-03-03 16:27:51
132
原创 【Java基础篇】什么是fail-fast机制?什么是ConcurrentModificationException异常?并发修改异常?
目录什么是fail-fast机制?1. 什么是fail-fast机制(ConcurrentModificationException什么时候会抛出)2. 什么时候会触发fail-fast机制1. 题外话:List如何在遍历时删除元素?1. 使用Iterator方法中的remove操作2. 倒序遍历什么是fail-fast机制?1. 什么是fail-fast机制(ConcurrentModificationException什么时候会抛出)日常吐槽:换个问题吧兄dei,你不如问问什么时候会抛出Conc
2022-03-02 14:21:14
223
原创 【MQ篇】RocketMQ如何消息队列保证高可用
目录RocketMQ如何消息队列保证高可用(集群)1. 以RocketMQ为例1. 几个概念1. Topic消息类型(大类)2. Queue队列(明细类)3. 消费者组2. RocketMQ消息的存储结构(ConsumeQueue + CommitLog)1. ConsumeQueue 逻辑队列(类似索引,指向真的文件CommitLog)2. CommitLog (提交日志?这名字也太怪了)刷盘后存在磁盘上的文件3. 实现高可用的思路(多个Broker)4. NameServer(类似于注册中心,管理Bro
2022-03-01 21:59:35
1037
原创 【MQ篇】RocketMQ如何保证消息的顺序性
目录1. RocketMQ如何保证消息的顺序性1. 为什么会出现乱序(负载均衡)2. 例子3. 如何解决1. 保证Producer、Queue、Comsumer是一对一对一的关系1. 缺点1. 吞吐量降低2. 有阻塞的风险2. 把需要保持顺序消费的消息放到同一个Queue中,且让同一台机子处理1. 存在的问题3. 使用有序消费的模式1. RocketMQ如何保证消息的顺序性1. 为什么会出现乱序(负载均衡)Broker中的每个Topic都有多个Queue,写入消息的时候会平均分配(负载均衡机制,默认
2022-03-01 21:56:28
5414
1
原创 【Mysql篇】什么是MVCC?多版本并发控制
目录1. 什么是MVCC(多版本并发控制)1. 定义(Mutli Version Concurreny Control)2. MVCC的组成要素1. 每条记录有三个隐藏列1. 事务ID(DB_TRX_ID)2. 回滚指针(DB_ROLL_PTR)3. 隐藏主键(DB_ROW_ID)2. undo_log日志3. read-view(读视图)1.什么时候生成Read-View?3. MVCC实现原理4. 例子5. MVCC主要有什么作用1. 非阻塞的并发读写2. 实现读已提交和可重复读1. 问:MVCC如何实
2022-03-01 17:19:26
738
原创 【Redis篇】什么是布隆过滤器?
目录1. 定义2. 构造方法3. 相关概念1. hash算法2. 容器大小3. 误判率2. 作用(类似containKey的功能)3. 原理1. 定义一个很大的bitmap2. 构造方法 private static BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), size,0.01);3. 相关概念1. hash算法一般都是哈希取余运算吧,将数据库中查出来的数据都塞到这
2022-03-01 00:14:25
299
原创 如何使用xxl-job,如何使用xxl-job实现
1. 同步对外统一的接口public class SyncController { @Autowired // 注入ApplicationContext的Bean工厂类 private ApplicationContext applicationContext; /** * * @param jobName * @param executeParam * @return * @throws Exception
2022-02-28 15:46:04
1393
原创 【问题总结】用Stream流将List转为Map的时候,出现Duplicate key错误,怎么办?
目录1. 场景还原1. 伪代码2. 控制台现象2. 错误做法3. 正确做法1. 场景还原1. 伪代码public static void main(String[] args) { ArrayList<User2> list = new ArrayList<>(); list.add(new User2(1, "2")); list.add(new User2(1, "3")); list.add(new Use
2022-02-28 13:39:29
1538
原创 【算法】01背包模型
目录题目01背包相关要素1. 背包2. 对于物品i思路1. dp数组模型2. 递推公式(难点):3. dp数组初始化值:dp[i][0] dp[0][j]1. dp[i][0] = 02. dp[0][j]4. 确定遍历顺序:2个维度:物品和背包容量逻辑图代码实现题目有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。01背包相关要素背包容量w、物品体积weight[i]、物体
2022-02-27 19:28:22
718
原创 【算法】 斐波那契数列(动态规划的经典题目)
题目思路(动态规划的5个步骤)确定dp数组以及下标的含义:dp[i]就是结果递推公式:F(n) = F(n-1) + F(n-2)dp数组初始化值:F(0) = 0,F(1) = 1确定遍历顺序:数组下标从小到大举例验证代码实现public class Test01 { public static void main(String[] args) { System.out.println(fib(3)); } public static in
2022-02-27 11:46:23
142
原创 【算法】前 K 个高频元素(学懂PriorityQueue使用的一道题)
题目思路遍历数组,保存在map里,key存元素值,value存元素出现的个数使用PriorityQueue,根据Map的value降序,并把map里的数据都塞到PriorityQueue中去从PriorityQueue中取k个数值,因为已经设定好PriorityQueue的取值规则,取值的时候自动按照Map的value降序来获取取出来的就是结果代码实现public class Test01 { public static void main(String[] args) {
2022-02-26 13:57:06
168
原创 【算法】有效的括号
leecode原题思路1.使用栈的特性,一一匹配2. 如果循环完毕,stack不为空,则返回false3. 遍历的时候,如果是左括号,则把对应的右括号压栈4. 遍历的时候,如果是右括号,把栈顶字符取出来比较,相等则弹栈,不相等则直接返回false5. 遍历的时候,如果发现stack为空了,循环还未结束,则直接返回false代码实现public class Test01 { public static void main(String[] args) { } pu
2022-02-26 11:19:17
125
原创 【算法】三数之和
package com.example.demo2.哈希;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 三数之和 * * 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? * 请你找出所有满足条件且不重复的三元组。 * * 注意: 答案中不可以包含重复的三元组。 * * * 思路:i指针、
2022-02-25 20:28:49
147
原创 【算法】判断是否为字母异位词?使用哈希表求解的经典题目
题目答案class Solution { public boolean isAnagram(String s, String t) { int[] arr = new int[26]; // 遍历s的char,依次存进去 for (char c : s.toCharArray()) { arr[c - 'a'] += 1; } // 遍历t的char,找到依次删除 fo
2022-02-25 16:33:22
132
原创 【算法】判断链表是否有环? 如果有环,算出环的入口
步骤:通过双指针(slow1步,fast2步),计算出相遇点再加2个指针index1、index2,一个从头节点开始出发,一个从相遇节点开始出发,他们相遇点就是入口节点(前提是fast循环一次)/** * 判断是否有环? 如果有环,算出环的入口 * @Date 2022/2/25 */public class Test03 { public static void main(String[] args) { ListNode listNode = detectC
2022-02-25 13:11:15
219
原创 【数据结构】什么是二叉树?
目录二叉树1. 分类1. 满二叉树(满节点的二叉树)2. 完全二叉树(从上到下,从左到右,是连续的就行)3. 二叉搜索树4. 平衡二叉搜索树(AVL)2. 存储方式1. 链式存储(链表实现,每个节点都有2个指针)(算法中用这个比较多)1. 代码如何使用链式存储定义一个二叉树2. 顺序存储(数组实现,因为数组连续,所以实现一定是完全二叉树)1. 公式(记不住的,看图就行)3. 二叉树的遍历方式1. 深度优先遍历1. 分类2. 如何实现(用栈的递归特性)2. 广度优先遍历1. 层次遍历(迭代法)2. 如何实现(
2022-02-25 09:30:00
481
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人