- 博客(52)
- 收藏
- 关注
原创 Java基础常见面试题总结-并发(二)
AQS(AbstractQueuedSynchronizer)是java.util.concurrent包下的核心类,我们经常使用的ReentrantLock、CountDownLatch,都是基于AQS抽象同步式队列实现的。AQS作为一个抽象类,通常是通过继承来使用的。它本身是没有同步接口的,只是定义了同步状态和同步获取和同步释放的方法。JUC包下面大部分同步类,都是基于AQS的同步状态的获取与释放来实现的,然后AQS是个双向链表。CAS全称,比较与交换,是乐观锁的主要实现方式。
2024-02-08 20:34:10
677
原创 Java基础常见面试题总结-并发(一)
线程死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力作用,它们都将无法推进下去。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方持有的资源,所以这两个线程就会互相等待而进入死锁状态。下面通过例子说明线程死锁,代码来自并发编程之美。//资源 1//资源 2try {}, "线程 1").start();try {}, "线程 2").start();
2024-02-08 20:33:39
745
原创 Java基础常见面试题总结-集合(二)
CopyOnWriteArrayList相当于线程安全的ArrayList,CopyOnWriteArrayList使用了一种叫写时复制的方法,当有新元素add到CopyOnWriteArrayList时,先从原有的数组中拷贝一份出来,然后在新的数组做写操作,写完之后,再将原来的数组引用指向到新数组。当我们往容器添加元素时,不直接往容器添加,而是先将当前容器进行复制,复制出一个新的容器,然后往新的容器添加元素,添加完元素之后,再将原容器的引用指向新容器。读的时候不需要加锁,如果读的时候有其他线程正在向。
2024-02-08 19:24:46
1231
原创 Java基础常见面试题总结-集合(一)
Hash 值的范围值比较大,使用之前需要先对数组的长度取模运算,得到的余数才是元素存放的位置也就是对应的数组下标。这个数组下标的计算方法是。将HashMap的长度定为2 的幂次方,这样就可以使用位运算代替%取余的操作,提高性能。// 容纳键值对的最大值// 负载因子int size;Node[] table的初始化长度length为16,默认的loadFactor是0.75,0.75是对空间和时间效率的一个平衡选择,根据泊松分布,loadFactor 取0.75碰撞最小。
2024-02-08 19:24:11
831
原创 Java基础常见面试题总结(下)
动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法。对于任意一个对象,能够调用它的任意一个方法和属性。Java泛型是JDK 5中引⼊的⼀个新特性, 允许在定义类和接口的时候使⽤类型参数。声明的类型参数在使⽤时⽤具体的类型来替换。泛型最⼤的好处是可以提⾼代码的复⽤性。
2024-01-28 19:39:05
792
原创 Java基础常见面试题总结(上)
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身,两者指向同一片内存空间。所以对引用对象进行操作会同时改变原对象。java中不存在引用传递,只有值传递。即不存在变量a指向变量b,变量b指向对象的这种情况。字符串常量池(String Pool)保存着所有字符串字面量,这些字面量在编译时期就确定。字符串常量池位于堆内存中,专门用来存储字符串常量。
2024-01-28 19:38:35
933
原创 sql事务
事务是并发控制的单位,是用户定义的一个操作序列。MySQL 事务主要用于处理操作量大,复杂度高的数据。在 MySQL 中,事务是一组SQL语句的执行,它们被视为一个单独的工作单元。但是在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务是必须满足4个条件(ACID)::原子性(tomicity,或称不可分割性)、一致性(onsistency)、隔离性(solation,又称独立性)、持久性(urability)。
2023-12-11 21:00:50
635
1
原创 linux搭建seata并使用
备份原application.yml文件,将application.example.yml文件改为application.yml。编辑nacos-config.sh,【如果运行了nginx,修改端口为7777:自己的代理端口】进入nacos网页查看服务列表,查看seata-server服务。进入nacos查看,共103个配置文件。注册中心registry模块。配置security模块。进入bin文件夹进行启动。api-feign接口。配置config模块。
2023-12-11 20:22:10
1837
原创 线程池详解
在实际应用中,应该根据任务的性质和系统资源合理配置线程池的参数,以避免资源浪费或过载。例如,CPU 密集型任务应该配置较小的线程池,通常接近CPU核心数,而IO密集型任务由于线程并不是一直在执行任务,可以配置更多的线程。
2023-12-07 20:14:20
817
原创 docker配置静态ip
docker network create —driver bridge —subnet=自定义网络ip/16 —gateway=网关值 自定义网络名称。
2023-12-07 19:46:35
1052
原创 三种定时任务总结
Scheduled注解是Spring Framework提供的一个非常简单的创建定时任务的方法,将注解添加在方法。Spring Boot会自动配置一个任务调度器来执行这些方法。但需要在Spring Boot应用的主类或配置类上添加注解来启用定时任务的自动配置。然后,你可以在任何Spring管理的bean上使用@Scheduled注解来声明定时任务。Quartz是一个开源的作业调度库,可以集成到几乎任何Java应用程序中。它提供了丰富的调度选项,包括一次性执行、按照固定间隔重复执行以及基于日历的作业调度。
2023-12-04 19:51:55
1370
原创 docker搭建nginx实现负载均衡
创建一个什么都不配置的nginx拿到一个nginx.conf文件和conf.d文件夹。创建文件、文件夹(只需创建logs文件夹即可,log文件是运行后自动挂载的)使用端口:8075映射80。打开nginx.conf。
2023-12-02 15:33:09
815
原创 docker配置redis插件
从页面上下载对应的redis.conf文件放入redis下的conf文件夹,作为通用的conf文件。将redis.conf文件拷贝到6390/conf文件夹下配置6390的redis.conf文件配置插件布隆过滤器插件,限流插件【令牌桶】
2023-12-02 12:08:29
1138
原创 docker配置redis主从、哨兵集群
该依赖会和knife4j-openapi2-spring-boot-starter的依赖造成冲突,所以需排除spring-boot-starter-actuator。改为debug和/var/log/redis.log【设置日志打印级别和容器内的日志地址】配置日志文件位置/var/log/sentinel.log、和自己的ip、端口号。配置需要监控的redis的主的ip和端口,自定义名称,这里是mymaster。设置从服务器是否只读【yes只读,no可以写】从:6381【配置文件同6380:改下端口号】
2023-12-02 12:06:15
530
原创 synchronized的实现原理
Java虚拟机是通过进入和退出Monitor对象来实现代码块同步和方法同步的,代码块同步使用的是和指令实现的,而方法同步是通过后面的标识来确定该方法是否为同步方法。使用CAS操作将当前线程的ID记录到对象的Mark Word中。将对象的Mark Word复制到当前线程的Lock Record中,并将对象的Mark Word更新为指向Lock Record的指针。当线程A已经获得锁时,线程B再来竞争锁,线程B不会直接被阻塞,而是在原地循环 等待,当线程A释放锁后,线程B可以马上获得锁。
2023-11-30 20:49:12
960
原创 过滤器、拦截器、aop的特点
java为我们提供了一个Filter接口,我们只需要实现这个接口就能实现自定义过滤器,然后添加一些必要的配置让过滤器生效。过滤器只能初始化一次,并且过滤器只会在项目停止或者是重新部署的时候才销毁。我们可以实现的这个Filter接口,里面最重要的是一个doFilter方法,当我们编写好Filter,并配置好对那个URL资源进行拦截时,每一次请求这个资源之前就会调用这个doFilter方法。并且在这个doFilter方法里面也有着一个。
2023-11-29 20:29:36
854
原创 代理的三种方式
JDK动态代理只能代理接口实现类,原因是JDK动态代理是基于接口实现的,代理对象的类型由接口列表决定。如果你想代理一个类而不是一个接口,你需要使用其他的代理技术,比如CGLIB动态代理。CGLIB 动态代理。
2023-11-28 20:22:23
618
原创 Rpc和http的区别
RPC(Remote Procedure Call)中文名「远程过程调用」,拆开理解,「过程」也叫方法或函数,「远程」就是说方法不在当前进程里,而是在其他进程或机器上面,合起来 RPC 就是调用其他进程或机器上面的函数。简单讲,就是本地调用的逻辑处理的过程放在的远程的机器上,而不是本地服务代理来处理。首先来看看一个 基于 TCP 的 RPC 调用的基本流程,以便对它有个宏观的认识。RPC的目标就是要将2~8这些步骤都封装起来,让用户对这些细节透明。
2023-11-25 18:05:16
451
原创 设计模式(四)建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者属于对象创建型模式。
2023-11-23 21:21:13
344
原创 WebSocket于HTTP 、WebSocket与Socket的区别
这里有一张图详细介绍了 TCP/IP 协议族中的各个协议在 OSI模型 中的分布,一图胜千言(下图来自 科来)1. WebSocket介绍参考:WebSocket原理及技术简介原理WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。连接过程 —— 握手过程浏览器、服务器建立TCP连接,三次握手。这是通信的基础,传输控制层,若失败后续都不执行。TCP连接成功后,浏览器通过HTTP协议向服务器传送WebSocket支持的版本号等信息。(开始前的
2023-11-22 20:59:11
85
原创 Hashtable、HashMap和ConcurrentHashMap
其实可以看出JDK1.8版本的ConcurrentHashMap的数据结构已经接近HashMap,相对而言,ConcurrentHashMap只是增加了同步的操作来控制并发,从JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+红黑树。**1.数据结构:**取消了Segment分段锁的数据结构,取而代之的是数组+链表+红黑树的结构。
2023-11-21 19:57:44
34
原创 网络模型:OSI、TCPI/P模型、五层模型
数据链路层(Data Link Layer,缩写 DLL)负责节点到节点的消息传递,该层的主要功能是确保在物理层上从一个节点到另一个节点正确传输数据。虽然 OSI 模型由国际标准组织制定,但其实现过于复杂、制定周期过长,在其整套标准推出之前,TCP/IP 模型已经在全球范围内被广泛使用,因此,TCP/IP 模型才是事实上的标准。TCP/IP 模型中的 传输层 对应 OSI 模型中的 传输层,负责端到端数据传输和错误控制。TCP/IP模型中的网络层与 OSI 模型中的网络层对应,定义了数据逻辑传输的协议。
2023-11-20 19:31:59
250
原创 搭建并使用gitlab
访问http://192.168.133.100 linux主机ip地址。创建gitlab文件夹以及子文件夹config,logs,data。查询docker镜像gitlab-ce(社区版本)使用root用户登录,在gitlab上创建仓库。下载镜像gitlab/gitlab-ce。创建与docker容器里面文件的映射文件。在idea中clone对应的链接即可。
2023-11-18 11:32:29
218
1
原创 生产者-消费者模型
与此同时,消费者也从缓冲池中取出这些数据。在多线程开发中,如果生产者生产数据的速度很快,而消费者消耗数据的速度却很慢,那么生产者就必须等待消费者消耗数据后才能继续生产数据,因为存放数据的空间是有限的;同理如果消费者的速度大于生产者的速度,那么消费者就会经常处理等待状态,所以为了达到生产者和消费者生产数据和消费数据之间的平衡,就需要引入一个缓冲区来存储生产者生产的数据,所以就引入了生产者消费者模型。生产者-消费者模型一般用于将生产数据的一方和消费数据的一方分割开来,将生产数据与消费数据的过程解耦开来。
2023-10-30 20:05:16
247
原创 数据库分表分库的原则
分表的应用场景是当单个表中的数据量超过数据库的处理能力或性能需求时或者当单个表的并发读写操作过多,导致数据库性能下降时可以考虑分表,简单来说就是单表的数据量大影响了接口的响应时间,而数据库的实际负载却不高的时候。分表也分为垂直分表和水平分表。
2023-10-28 15:49:44
222
1
原创 RBAC-基于角色权限的模型
在RBAC模型中,权限不直接赋予用户,而是赋予角色,用户通过成为角色的成员而获得角色的权限。当用户的角色发生变化时,只需要改变用户的角色,而不需要单独修改用户的权限。同样,当权限需求发生变化时,只需要修改角色的权限,而不需要单独修改每个用户的权限。它根据用户的角色,来划分和控制用户的权限,使得权限管理更加清晰、简洁和高效。在这个模型中,可以定义角色之间的约束关系,如互斥角色、角色继承等。在这个模型中,角色可以形成层级结构,上层角色继承下层角色的权限。角色之间的约束关系,如互斥角色、角色继承等。
2023-10-21 15:39:36
60
1
原创 深入了解Spring MVC
Spring MVC是一个基于Java的Web框架,它提供了一种结构化和灵活的方式来构建Web应用程序。它使用了经典的MVC(Model-View-Controller)设计模式,通过将应用程序分成不同的组件来提高代码之间的可维护性和可测试性。
2023-10-17 19:38:26
38
原创 mysql存储引擎
数据库存储引擎是数据库管理系统 (DBMS) 中的一个重要组成部分,它负责管理数据的存储、检索和修改。存储引擎定义了数据库如何在磁盘上组织数据、如何执行读取和写入操作,以及如何处理事务和并发性。
2023-10-16 20:56:57
34
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人