- 博客(18)
- 收藏
- 关注
原创 八股学习-JUC java并发编程
可以把 JMM 看作是 Java 定义的并发编程相关的一组规范,除了抽象了线程和主内存之间的关系之外,其还规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。说白了就是定义了一些规范来解决这些问题,开发者可以利用这些规范更方便地开发多线程程序。对于 Java 开发者说,你不需要了解底层原理,直接使用并发相关的一些关键字和类(比如volatile、各种Lock)即可开发出并发安全的程序。
2025-03-19 21:52:28
934
原创 java设计模式
单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。单例模式的应用场景:需要全局唯一实例的场景(如配置管理、日志记录、缓存管理)。需要控制资源访问的场景(如数据库连接池、线程池)。需要统一管理的场景(如窗口管理器)。
2025-03-13 16:25:04
191
原创 高级软件工程实验--使用git并使用docker部署 DevStar 搭建 Git 仓库托管平台(MAC系统)
Git是当今最流行的版本控制系统之一,无论是个人开发还是团队协作,都离不开它的帮助。如果你是Mac用户,并且想快速掌握Git的使用方法,这篇指南将带你从零开始完成安装、配置和基础操作。
2025-03-13 10:51:39
657
原创 八股复习-spring的依赖注入和控制反转
传统方式:在传统的程序设计中,对象的创建和依赖关系的管理是由程序员自己控制的。比如,你需要手动new一个对象,然后把它传递给其他对象。控制反转:Spring 把对象的创建和依赖关系的管理“反转”给了框架。你只需要告诉 Spring 你需要什么对象,Spring 就会自动帮你创建并管理这些对象。依赖:一个对象需要依赖其他对象才能正常工作。比如,需要依赖来访问数据库。注入:Spring 会自动把依赖的对象“注入”到需要它的地方。你不需要手动创建依赖对象,Spring 会帮你搞定。
2025-03-08 14:06:54
300
原创 八股复习-动态代理和类加载器
RPC 框架基于动态代理实现,主要是为了隐藏远程调用的复杂性,提供透明的调用方式,并增强功能。通过动态代理,RPC 框架可以在运行时生成代理对象,拦截方法调用,并在调用前后插入额外的逻辑,从而实现高效的远程服务调用。类加载器是 Java 中非常重要的机制,它负责将类加载到 JVM 中,并确保类的唯一性和安全性。通过双亲委派模型,类加载器可以避免重复加载类,并保护 Java 核心类库不被篡改。理解类加载器的工作原理,对于掌握 Java 的动态代理、类隔离、热部署等高级特性非常有帮助。
2025-03-08 14:02:20
653
原创 八股复习-threadlocal
/ 线程1获取自己的值。你可以把自己的东西(比如衣服、毛巾)放进自己的储物柜里,别人看不到也拿不到你的东西。的作用就是为每个线程提供一个“储物柜”,让每个线程可以存放自己的东西(变量),而不会和其他线程的东西混在一起。存储用户的登录信息,这样每个请求的线程都可以独立访问自己的用户信息,而不会和其他请求混淆。可以让每个线程拥有自己的“专属变量”,不同线程之间的变量互不干扰。它的作用类似于“储物柜”,每个线程都有自己的专属空间,互不干扰。中的,如果线程一直不结束(比如线程池中的线程),而。
2025-03-07 20:56:45
982
原创 八股复习-消息队列RocketMQ
消息队列一大用处:异步实效性不高的事情可以慢慢做,没必要浪费主要任务的资源消息队列的二大用处:解耦解耦就是把一些功能模块抽取出来,减少了开发和联调的工作量。比如图片中,购票的实效性应该是高的,但是短信通知和邮件通知就没必要那么高,可以放在消息队列里慢慢处理。消息队列三大用处:削峰短信系统没那么重要,硬件资源可能会差一些,在并发量很大达到峰值时会崩溃,所以用消息队列处理去吧,慢一点没关系。这就是消息队列最重要的功能:异步,解耦,削峰。
2025-03-07 18:42:49
1152
原创 八股复习-java线程池详解
this 逃逸是指在构造函数返回之前其他线程就持有该对象的引用,调用尚未构造完全的对象的方法可能引发令人疑惑的错误。方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。线程池实现类ThreadPoolExecutor是Executor框架中最核心的类,也是用的最多的。构造函数的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。池化技术的作用:池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。
2025-03-06 13:42:52
610
原创 数据库相关八股-持续更新
但过了一会儿,贷款审批失败,银行撤回了这 500 元,你的账户又变回。与此同时,另一个银行员工正在处理你的贷款申请,他临时给你。你想着“等会儿买”,过了一会儿你再来看时,发现。你在图书馆查“数据库原理”类书籍,发现馆里有。你去银行查余额,银行员工告诉你账户里有。,但这个操作还没提交(事务未完成)。你回去办借阅手续时,再次查询,却发现。1.什么是脏读,不可重复读,幻读?相关书籍,你打算借阅其中 3 本。2.不可重复读和幻读的区别是什么?你去超市买牛奶,发现货架上有。,因为别的顾客拿走了 4 瓶。
2025-03-05 16:49:25
879
原创 黑马点评面试知识总结7-达人摊店和好友关注
项目实战篇写到这里,最复杂的部分已经写完了,后面这几个功能都是用来丰富项目的,让我们更全面的学习redis,学会redis的各种数据结构。
2025-02-27 14:56:49
669
原创 黑马点评面试知识总结6-秒杀优化和redis消息队列
现在我们再把思路拉回到优惠卷秒杀,我们已经阐述了单机环境下和集群环境下的优惠卷秒杀,并且学会了使用redission这个终极大招,现在对秒杀业务代码进行优化。秒杀业务如下所示:查询优惠卷 -> 判断秒杀库存是否足够 -> 查询订单 -> 一人一单?-> 扣减库存 -> 创建订单这六部操作中,有很多部分需要查询数据库,比如查询优惠卷,查询用户订单,扣减库存和创建订单。而且是串行执行的,这就会导致进程执行很慢,那么我们应该如何优化呢?
2025-02-27 09:55:50
1274
原创 黑马点评面试知识总结5-redission(解决锁续期问题)
Redisson是一个基于 Redis 的 Java 客户端,它不仅提供了对 Redis 的基本操作支持,还实现了许多分布式相关的功能,比如分布式锁、分布式集合、分布式对象等。它的目标是让开发者能够以最简单的方式在分布式系统中使用 Redis。
2025-02-26 16:18:50
1137
原创 黑马点评面试知识总结四-一人一单(集群环境,分布式锁)
接着上一篇继续,上一篇末尾提到了集群环境下锁实效的问题,这一章节主要就是学习一下分布式锁的使用。首先抛出概念:分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路。分布式锁有需要满足很多条件,比如说可见性,互斥,高可用,高性能,安全性等等。这里不加以阐述。直接上干货。
2025-02-26 15:22:33
1025
原创 黑马点评面试知识总结3-优惠卷秒杀(单机环境)
乐观锁:会有一个版本号,每次操作数据会对版本号+1,再提交回数据时,会去校验是否比之前的版本大1 ,如果大1 ,则进行操作成功,这套机制的核心逻辑在于,如果在操作过程中,版本号只比原来大1 ,那么就意味着操作过程中没有人对他进行过修改,他的操作就是安全的,如果不大1,则数据被修改过,当然乐观锁还有一些变种的处理方式比如cas。悲观锁可以实现对于数据的串行化执行,比如syn,和lock都是悲观锁的代表,同时,悲观锁中又可以再细分为公平锁,非公平锁,可重入锁,等等。这是最基础的数据库操作,还没用到redis。
2025-02-26 13:57:54
1166
原创 黑马点评面试知识总结2-商户查询缓存
而且不只是它,在新线程更新数据的这个时间段内,其他到来的查询redis的线程也会查到过期,但是无法获得互斥锁,所以也返回这个过期的数据。接下来是逻辑过期的代码实现,首先补充一下逻辑上的缺失,我们默认这种方案查询商户的时候redis中是存在数据的,但是如果redis中没命中怎么办,很好解决,直接返回,因为我们之前说热点key是逻辑过期,换句话说就是永远存在,只是逻辑上不存在了,所以如果redis中没有,那数据库肯定也没有呀,这热点key都是我们提前设置好的,所以不用查数据库,数据库根本没有。
2025-02-26 11:56:45
659
原创 黑马点评面试知识总结一(解决session共享问题)
使用redis的原因:tomcat集群不能共享session空间,第一次访问的事tomcat1,第二次如果访问了tomcat2就会失效,所以用redis,因为redis是共享的。
2025-02-25 15:28:40
297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅