自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 乐观锁和悲观锁

当线程 A 要更新数据值时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值为当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。CAS操作,包含3个数据,数据v表示需要读写的内存位置,数据a表示进行比较的预期值,数据b表示将要更新的值,如果内存位置v的值等于预期的a值,则将该位置更新为新值b,否则不进行操作。排他锁就是不能与其他锁并存,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁。

2023-07-21 23:30:15 124 1

原创 SpringCloud微服务五大组件

雪崩效应:在微服务架构中,存在多个微服务,若其中一个微服务出现故障,就很容易因为依赖关系而引发故障蔓延,最终导致整个系统瘫痪,列举:电商系统中,存在用户、订单、库存、积分、评论等微服务,用户创建一个订单,请求库存系统出货,库存系统出现问题,导致订单服务挂起或失败,在高并发的情况下,被挂起的线程导致后续请求被阻塞,最终导致订单服务不可用。服务降级:A 服务调用 B 服务,没有调用成功发生熔断,那么 A 服务拿一个默认值顶着,避免给我们的用户,响应一些错误的页面;这样就不需要挨个打开一一个个的页面一个个查看。

2023-06-10 14:48:46 1758

原创 SpringBoot常用注解

这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。默认按照名称进行自动装配,几乎和@Autowired注解功能一样,只不过不支持自定义(@Resource是java里面的注解,而@Autowired是spring中的注解)。该注解默认是优先按照类型去容器中找对应的组件,如果有多个相同类型的组件,再通过按照属性的名称作为组件的id去容器中找。返回的值,就是组件在容器中的实例。

2023-06-08 22:04:47 152

原创 HTTP 协议

张三在发出第一次请求后,服务器将其状态信息记录下来,比如他的名字、年龄、地址、购物历史等,并通过响应头 Set-Cookie字段,给予其一个 id=12345 的独特识别码作为 Cookie,那么其再次向服务器发出请求时,浏览器会自动在请求报文中的 Cookie 字段中带上 id=12345,服务器就可以通过这个查询到张三的具体信息,从而实现了保持状态的功能。我们可以给 GET 加请求体,给 POST 带上 URL 参数,可以用 GET 请求新增数据,POST 请求查询数据,实际上也是完全可行的。

2023-06-05 23:27:04 121 1

原创 MySQL优化

我们知道索引越长占用的磁盘空间就越大,那么在相同数据页中能放下的索引值也就越少,这就意味着搜索索引需要的查询时间也就越长,进而查询的效率就会降低,所以我们可以适当的选择使用前缀索引,以减少空间的占用和提高查询效率。如果要存很短的字符串,或者字符串值长度都相同,比如MD5值,或者列数据经常变更,选择使用char类型。假如我们没有添加索引,那么在查询时就会触发全表扫描,因此查询的数据就会很多,并且查询效率会很低,为了提高查询的性能,我们就需要给最常使用的查询字段上,添加相应的索引,这样才能提高查询的性能。

2023-05-30 23:48:54 71

原创 Java线程池工作原理

这个队列比较特别的时,采用一种预占模式,意思就是消费者线程取元素时,如果队列不为空,则直接取走数据,若队列为空,那就生成一个节点(节点元素为null)入队,然后消费者线程被等待在这个节点上,后面生产者线程入队时发现有一个元素为null的节点,生产者线程就不入队了,直接就将元素填充到该节点,并唤醒该节点等待的线程,被唤醒的消费者线程取走元素。线程池有一个重要的机制:拒绝策略。提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。

2023-05-30 22:48:13 109 1

原创 为什么String被设计为是不可变的

(2)用作HashMap的key。因为String是不可变的,所以对象一旦被创建之后,hash值也就不变了,我们就可以把hash值缓存起来,以后每次想要用到hash值的时候,不用重新计算,直接返回缓存过的hash值就可以了,提高效率。因为具备不变性的对象一定是线程安全的,我们不需要对其采取任何额外的措施,就可以保证线程安全。在 String 的源码中,除构造方法外,没有其他方法会修改 value[]里面的内容,而且 value[]的权限是 private,外部类访问不到,所以value[] 是不可变的。

2023-05-07 16:42:29 57 1

原创 Linux系统一个进程最多可以创建多少个线程

proc/sys/vm/max_map_count,用于控制一个进程可以拥有的最大内存映射区域数量,这个值会限制线程数量,默认值是 65530。/proc/sys/kernel/pid_max,表示PID的最大值,这个值会限制线程数量,默认值是 32768;/proc/sys/kernel/threads-max,系统支持的最大线程数,默认值是 14553;如果一个线程需占用8M栈空间,理论上可以创建 128T/8M个线程,也就是 1600多万个线程。(1)进程的虚拟内存空间大小和线程的栈空间大小。

2023-05-07 14:35:43 3093

原创 观察者模式

观察者模式1.一句话总结:观察者模式有一个被观察者A,多个观察者B.A持有多个B,当达到某个条件后,A可以执行B的某个方法进行"通知"B.2.代码:public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(Message message);}public interface Obser

2020-12-30 22:58:28 140 2

空空如也

空空如也

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

TA关注的人

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