自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 WireShark抓包学习

下图中,即为一条条数据包。点击某一条数据包后可看见该数据的详细信息,包含了物理层、IP层和TCP协议的相关信息。

2025-01-01 23:18:54 865

原创 谷粒商城——session共享

1. 导入SpringSession依赖2. 在登陆所在的微服务中添加store-type=redis(用redis存储session)3. 在启动类上方添加@EnableRedisHttpSession依赖4. 创建Session信息类。并实现序列化。(不序列化存储到redis会报无法序列化的错误)。5. 随后再调用session.setAttribute方法保存Session信息类的时候,会自动将其保存至redis中。

2024-07-16 23:14:11 480

原创 面试八股——HashMap

若大于则进行扩容。=null,则先判断key是否存在,若key存在则直接覆盖value,如果key不存在,则将键值对插入红黑树或链表中(如果是链表则要判断插入之后的长度是否大于8,以判断是否将链表变为红黑树)。然后,根据key计算其对应的索引值i。如果table[i]==null,则直接插入,红黑树是为了解决链表过长之后,查找时间过长的问题,将链表存储变为红黑树存储。随后判断插入后的容量是否大于扩容阈值。2. 加载因子:初始值为0.75。1. 容量:初始容量为2^4。首先,判断用于存放键值对的。

2024-04-28 22:53:59 346

原创 面试八股——常见数据结构

其核心思想就是将key通过散列函数映射为数组的下标。但是这种映射的方法可能会产生冲突,即不同的键映射为了同一个数组下标。在二叉搜索树中,对于任意一个节点,左子树中的所有节点的值都小于该节点的值,右子树所有节点的值都大于该节点的值。,所有会产生冲突的key对应的值会被放入同一个链表中。处理散列冲突:数组中存储的不再是数据信息,而是一个。红黑树是一种自平衡的二叉搜索树。

2024-04-24 11:28:43 458

原创 面试八股——RabbitMQ

出现原因举例:在保证MQ消息不重复的情况下,消费者消费消息成功后,在给MQ发送消息确认的时候出现了网络异常(或者是服务中断),MQ没有接收到确认,此时MQ会补发一条消息,从而导致重复消费。当MQ成功接收消息后,会返回给MQ一个确认消息,MQ此时会将对应消息删除。如果在规定时间内MQ未收到确认消息,则任务消息发送失败。如订单支付,给订单消息创建TTL,如果超时,订单消息变为死信,订单失效。当MQ成功接收消息后,会返回给生产者一个确认消息。如果在规定时间内生产者未收到确认消息,则任务消息发送失败。

2024-04-23 23:15:19 488 2

原创 面试八股——线程

a调用start()方法后变为可执行状态,当a执行完成后进入死亡状态。当调用wait()方法后,a进入等待状态,调用notify方法后,a进入执行态。wait(long time)、wait()只能通过notify唤醒。start()方法是开启一个线程,来执行run()方法,start()方法只能被调用一次。wait()、wait(long time)是Object的成员方法,每个类都有。wait()、wait(long time)、sleep(long time)都可让线程放弃CPU使用权,进入阻塞态。

2024-04-18 20:25:47 435

原创 面试八股——集合——List

其扩容过程如下:如果新插入一个数据后,首先判断当前ArrayList长度是否足够保存所有数据,如果不行的话就要进行扩容,ArrayList长度变为原先的1.5倍,随后将数据插入并返回成功布尔值。Arrays.asList后,新的List存储数据的数组地址指向的是原数组的地址,而ist.toList()是将原数组的数据拷贝一份到新的list中。Arrays.asList修改原数组之后,List的数据也会改变,而list.toList()则不会改变。2. 效率问题(增删改查)二者都不是线程安全的。

2024-04-17 20:27:00 654

原创 面试八股——JVM★

类加载类加载器的定义类加载器的类别

2024-04-15 13:45:01 395

原创 面试八股——Spring——常见注解

Spring的常见注解SpringMVC注解SpringBoot常见注解

2024-04-14 17:11:17 192

原创 面试八股——SpringMVC的执行流程

JSP阶段前后端分离阶段

2024-04-14 16:39:01 150

原创 面试八股——Spring——AOP与事务

下图中由于②导致异常:原因:解决办法:自己抛出一个非检查异常(具体原因看“抛出检查异常”)。

2024-04-14 15:50:08 374

原创 面试八股——Spring框架——Bean

Bean是单例的,且不是线程安全的。例子如下:下述的类变量是可修改的,当多用户访问时会造成成员变量的不一致。

2024-04-13 20:56:55 288

原创 谷粒商城——秒杀业务

场次与商品关联表:promotion_seesion_id表示秒杀场次id,sku_id表示商品id,seckill_price表示秒杀价格,seckil_count表示商品数量,seckill_limit表示每个用户的秒杀限量,seckill_sort表示商品排序。其次需要缓存秒杀活动中商品信息(商品id、价格、秒杀库存、限购数量、排序及对于商品的相关详细信息:名称、描述等一些商品表中的内容(这个需要在秒杀服务里新创建一个类)),这里的key需要为场次id+商品id以区分不同秒杀场次的商品,

2024-04-12 11:09:59 1090 1

原创 面试八股——框架——总体描述

2024-04-11 23:03:22 137

原创 面试八股——数据库——分库分表

垂直策略垂直分库垂直分表水平策略水平分库水平分表(和水平分库差不多,区别是但这些表可以在同一个库内)

2024-04-11 14:16:45 279

原创 面试八股——数据库——事务

原子性:事务是不可分割的操作单元,要么全部成功,要么全部失败。一致性:事务结束时,所有数据都必须保证一致状态。隔离性:事务在独立环境运行,不会受到外部的并发操作的影响持久性:事务一旦提交或回滚,他对数据的改变是永久性的。(保存在磁盘中)以转账为例:假设A向B转账100元。则A账户-100,B账户+100。原子性则保证A账户-100,B账户+100操作要么都成功,要么都失败。一致性保证A账户必须-100,B账户必须+100。原子性:事务是不可分割的操作单元,要么全部成功,要么全部失败。

2024-04-11 11:30:40 516

原创 谷粒商城——订单提交

首先查询仓库里是否有足够的商品(商品总库存-已锁定的商品库存>商品本次下单数量)。如果拥有足够数量的商品就需要锁库存,将数据库中对应商品的锁定数量的值增加本次下单的商品数量。如果数量不足则抛出库存不足的异常。3. 验证成功后,需要创建订单TO类,订单TO类包含如下属性:订单类、订单项类、总价、邮费。最后对订单进行验价(最后一次对订单价格进行验证),如果验价成功就进行并远程调用。首先需要创建一个订单类,设置用户信息、收货地址信息和订单状态信息。上述都成功则进行订单保存(保存订单与订单项到相应数据库)。

2024-04-09 14:46:29 287

原创 八股面试——数据库——索引

聚簇索引是主键,非聚簇索引是其他属性。

2024-04-07 22:51:25 487

原创 谷粒商城——通过接口幂等性防止重复提交订单

如果用户向后端服务提交多次相同订单的提交服务,那么后端应该只生成一条订单记录。有一些操作天然是幂等的,如查询操作和删除操作等。

2024-04-01 16:58:40 743

原创 谷粒商城——订单服务——订单确认模型

包括用户的地址列表、购物车中所有选中的购物项、会员积分信息、库存信息和防止重复提交的令牌(作用后面在阐述)。地址列表、购物项信息、库存信息可通过OpenFeign远程调用获得。

2024-04-01 15:47:02 233

原创 谷粒商城——RabbitMQ

Headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。交换机的原理就是:每一个消息都有其路由键(routing key),每一个消息队列有自己的binding key。交换机就是通过这两个的匹配关系将消息绑定到对应的队列中。fanout类型类似于广播,他不查看routing key与binding key的匹配关系,而是将消息绑定到所有队列。用于对RabbitMQ中的交换机、队列和交换机与队列的绑定关系进行实例化的管理类。

2024-03-31 16:15:08 1453

原创 面试八股——数据库——慢查询

查询速度很慢的查询。慢查询一般会发生在多表查询、聚合查询和表数据量较大的查询操作中。可通过Mysql自带的慢日志定位慢查询操作。在MYsql开启慢查询日志并配置慢查询的查询时间阈值。以后所有超过该阈值的慢查询都会被记录。

2024-03-30 17:07:53 424

原创 面试八股——数据库——整体问题

2024-03-30 16:26:40 186

原创 谷粒商城——购物车

数据库设计:购物车的主要属性有id,userid,product_info(有关商品的信息,例如id、价格等),num。所以需要通过不同的user_id来辨识不同的购物车,表中的一条记录表示的是某一用户购物车中的一个商品的信息(包括商品具体信息+数量)。1. 判断用户登录情况:通过cookie中的token进行判断,如果未登录,需要跳转到登录页登录。2. 判断购物车中是否已存在商品:存在则直接数量+1跳转至第5步。购物车对象设计:包含多条购物车数据的记录(但是user_id相同)。与添加商品思想类似。

2024-03-29 14:05:46 332

原创 谷粒商城——缓存——SpringCache

")(放在相应服务层实现方法上方):表示该方法的结果需要缓存,如果缓存中已存在该结果,方法就不会调用,如果缓存没有该结果,就会调用该方法,并将结果存储在缓存中。失效模式指的是将修改后的数据就是写入数据库之后删除对应缓存,当有用户查询时再重新建立新的缓存。当我们在某个服务层的实现类方法(这个方法一般是用来修改缓存中的一些数据的)中上方加入@CacheEvict(value="cacheName",key="在此之前需要介绍一下缓存更新(也叫缓存一致性)的两种模式:当对缓存中数据进行修改时,可以用。

2024-03-26 23:15:33 2035 1

原创 面试八股——Redis的访问速度为什么那么快

2024-03-26 17:30:32 411

原创 面试八股——redis——集群

一个主节点负责写操作(增删改),多个从节点负责查操作。主从复制是让主节点修改数据之后,将对应数据同步到从节点中。,假如当主节点宕机之后,整个集群便丧失了写(增删改)数据的能力。上述两种策略还没有解决海量数据存储和高并发写的问题。0. redis集群的方案。2.哨兵模式(实现高可用)1.主从复制(高并发读)无法保证集群的高可用性。

2024-03-26 17:10:32 439

原创 面试八股——Redis——分布式锁——Redisson

注意看门狗机制:redisson会监听持有锁的线程,并每隔一段时间(releaseTime/3,默认releaseTime为30s),如果线程还未释放锁的话,会给锁做一次续期。),从服务器负责处理读的操作,当从主务器坏了,会从次服务器中选出一个服务器重新作为主服务器,新的线程直接访问新的主服务器。还没有接收主服务器同步过来的信息,导致新的进程无法在新的主redis服务器中获取原有的锁的信息,所以能够直接获取到锁。服务器,但这些服务器分主次,主服务器负责处理写的操作(原先还是次服务器的新主服务器。

2024-03-25 22:28:39 639

原创 面试八股——redis——分布式锁——使用场景

2024-03-25 17:09:25 170

原创 面试八股——Redis——缓存——数据淘汰策略

那么Redis就要需要根据一定策略删除相应的数据。上一篇介绍的是数据过期删除策略,其原因是因为。但是需要数据淘汰策略的原因是。内存中的数据已经满了。

2024-03-25 16:57:53 201

原创 面试八股——Redis——缓存——过期删除策略

redis实际删除策略为:1. 惰性删除2. 定期删除。

2024-03-25 16:52:13 177

原创 面试八股——redis——持久化

但是可能会有这样会有冗余,假如说我修改30次了key为tom的值,但是只有最后一次才是真正有效的,因此可以通过重写来解决这个问题,即只保留最后一次修改的操作记录。

2024-03-25 16:38:21 291

原创 谷粒商城——缓存的读写一致性

如果修改完数据库,需要保证缓存中的数据也更新为相应的最新值。此时需要在更新数据库之前加上写锁,在更新/删除完缓存后才释放写锁。

2024-03-24 20:58:09 487

原创 谷粒商城——利用读写锁从数据库中读取三级分类

在读取数据库前,先激活读锁。

2024-03-24 20:47:37 184

原创 谷粒商城——Redisson读写锁

当激活写锁时,其他线程无法读与写。当激活读锁时,其他数据仅可以进行读操作。当使用读写锁时,能够保证用户一定能。(因为写操作时其他用户不可读)。

2024-03-24 19:51:39 297

原创 谷粒商城——Redisson看门狗

如果一个线程已经上锁后,在运行的过程中中断导致未释放锁从而导致其他线程无法进行,为此需要为每个锁设置自动过期时间。但是如果线程运行时间较长,可能在锁到期后还没执行完。为解决这种问题,Redisson使用。

2024-03-24 17:30:10 383

原创 面试八股——Redis——缓存——双写一致性

解决办法1:添加分布式锁。

2024-03-24 15:11:57 145

原创 面试八股——redis——缓存——缓存穿透、击穿、雪崩

解决办法1:加互斥锁。大量并发时,先让一个人去查,其他人等着。这样剩下人就可在缓存直接获取值。(项目中使用的方法)解决办法2:使用逻辑过期时间,即过期只进行逻辑删除。HR:你在项目中的那些场景用到了redis?(项目中使用的方法)

2024-03-24 14:53:28 438 2

原创 面试八股——Redis——常见问题

2024-03-24 14:18:18 121

原创 谷粒商城——缓存的概念

由于相同的微服务部署在不同的服务器中,假设服务器数量为N,这样依然还是放进来N个DB访问请求(其实问题也不大)。问题描述:所有缓存数据设置的过期时间相同,从而导致在同一时间失效,恰好这个时间有大量访问,这些访问就需要同时去访问数据库,导致数据库压力过大崩溃。,其他微服务就会重新上锁,如果之前的校验结果为真,则本业务会将其他微服务上的锁删除。问题描述:如果缓存中一个访问频率高的值过期,此时有大量访问访问这个值,导致DB压力过大。这样在访问不同的服务器中的微服务时,需要重复将数据加入到缓存区中。

2024-03-21 21:57:32 820

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除