编程之锁相关 乐观锁是一种乐观的思想,对于某些数据是读多写少的,发生并发写的时机不多,就假设当前数据是没有在被修改,从而不上锁。在Java中进行写数据时,通常cpu是将数据写入主内存中,在此过程之前,当前写数据线程存有数据备份,就将线程中的数据与主内存中的数据进行比较,相同则更新数据到主内存,不同则继续进行cas操作。
常用算法介绍 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
Redis 这种方式的好处是可以减少Redis的CPU负载,因为扫描和删除是在指定的时间间隔内进行的,不会对Redis的性能造成太大影响。通过设置合适的回收策略,可以在内存达到限制时,自动删除一些不必要的数据,以保证Redis的内存使用率不会超过预定的限制。AOF持久化的优点是它可以更好地保护数据,因为AOF文件中记录了Redis执行的每个写操作,所以即使Redis在持久化操作之前崩溃,也可以通过重放AOF文件来恢复数据。这种策略可以尽量保留未过期的数据,并且优先删除最近最少使用的数据,以保证内存的有效利用。
SpringCloud 服务注册和发现组件:Eureka、Consul、Zookeeper等,用于实现服务注册和发现功能。服务调用组件:Ribbon、Feign、RestTemplate等,用于实现服务之间的调用和负载均衡。API网关组件:Zuul、Spring Cloud Gateway等,用于实现API网关功能,提供统一的入口和路由控制。配置中心组件:Config Server、Spring Cloud Config等,用于实现配置管理功能,支持动态刷新配置。
RabbitMQ 在RabbitMQ中,交换机(Exchange)是消息路由的核心组件之一,它接收生产者发送的消息并将消息路由到一个或多个队列中。Topic交换机:Topic交换机根据消息的Routing Key和绑定的队列的模式将消息路由到一个或多个队列中。Direct交换机:Direct交换机是最简单的一种交换机,它根据消息的Routing Key将消息路由到一个或多个队列中。在RabbitMQ中,生产者将消息发送到交换机,然后交换机将消息路由到相应的队列中,消费者从队列中接收并处理消息。
持久层框架 在上世纪90年代,针对Java连接数据库,JDBC(Java DataBase Connectivity)为Java开发人员提供了标准的访问数据库的接口。但是,随着时间的推移,数据库的访问量越来越大,对于数据库访问层的需求就越来越高。因此很多其他的持久层框架就应运而生了,例如MyBatis、Hibernate、JPA等。
Mysql相关知识点 第一范式(1NF):要求数据库表中的每一列都是不可再分的原子数据项,即每一列只能包含一个数据。第二范式(2NF):要求数据库表中的每个非主键列都必须完全依赖于主键,即非主键列必须与主键形成一对多关系。第三范式(3NF):要求数据库表中的每个非主键列都不能依赖于其他非主键列,即非主键列必须直接依赖于主键。
Spring框架 spring是一个Java企业级应用的开源开发框架。1、轻量:一个轻量级框架,基本的只需要大约2M。2、控制反转:通过控制反转实现松散耦合,对象们给出他们的依赖,而不是创建或查找依赖的对象。3、面向切面(aop):可以将业务逻辑和系统服务分开。4、容器:管理应用中对象的生命周期和配置。5、mvc框架:是web的一个很好的替代品。6、事务管理:有一个持续的事务管理接口,可以扩展到上至本地事务,下至全局事务。
多线程&并发 线程安全是指在多线程环境下,一个对象或程序的状态不会被其他线程影响,并且可以保证对象或程序的正确执行。如果一个类是线程安全的,那么多个线程可以同时访问它,并且不会发生不一致的情况。线程安全的类通常通过同步机制来实现,比如说使用 synchronized 关键字,或者使用 java.util.concurrent 包中的线程安全类。Callable接口定义了一个有返回值的任务,它有一个泛型参数V,表示任务执行完成后的返回值类型。Callable接口中只有一个方法call(),用于执行任务并返回结果。
JVM相关知识点 JVM :Java virtual machine,是Java程序运行的基础,基于不同的操作系统,将字节码转换为机器码,进而管理并运行。1、方法区:存储已经被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等。2、栈:又称方法栈,被线程私有,线程执行都会建立一个栈用于存储局部变量表,操作站,动态链接,方法出口等。3、本地方法栈:执行native方法的栈,类似栈。4、堆:内存管理中最大的一块,被线程共享,几乎所有的对象都存在这。
Idea新建maven类型springboot项目 开始创建项目,进入到idea首页,点击create new project ,如图:选择需要创建的项目类型,我这里选择的是使用spring 初始化指引来进行创建。选择自己的jdk版本,next进入到下一步填写项目相关信息, 类型保持初始,用于创建maven项目结构;打包方式根据需要选择;版本信息最好保持,也可以根据需要修改;选择相关的依赖,此处选择的依赖就是项目中所用到的依赖,亦可以不做选择,创建完项目后去到pom文件中进行手动导入。定义项目名称,定位存储位置,finish即可..
spring框架的简化理解笔记 Spring框架spring框架怎么定义?它是一个轻量级的项目开源框架,是一个现成的项目架构,企业可以运用框架已有的功能进行搭建自己的项目。那么为什么要用它呢?优点ioc编程(控制反转IOC和依赖注入di)方便解耦,简化开发。怎么理解?解耦就是将项目的各个部分划分的更加的清晰,减少类与类之间的耦合度,将创建类的工作交给了spring来完成(IOC)。平时我们创建了都是通过new来进行的,在spring中不需要,如果一个类需要用到另一个类,可以通过注入的方式来进行调用。aop编程(面向切面编程)。
稀疏数组和队列 稀疏数组和队列问题描述:当一个数组的大部分的元素为0,或者是同一个值时,可以使用稀疏数组来保存处理方法:记录数组一共有几行几列把不同值的元素的行列及值记录在小规模的数组中,缩小程序的规模实例:处理下图的二维数组二维数组转稀疏数组第一步:遍历二维数组,找到有效值的个数sum(不为0)第二步:创建稀疏数组sparseArr in【sum+1】【3】第三步:将二维数组的有效数据存进稀疏数组稀疏数组转二维数组第一步:先读取稀疏数组的第一行,根据存储的行数列数创建原始二维数组第二步:读取
哈希表简要理解 哈希表哈希表是根据给出的值,调用哈希函数获取哈希地址,从而进行存储的一种数据结构。实例:哈希表长度14,哈希函数H(key)=key mod 7。存储数字15,15 mod 7=1,存储在地址1;存储数字61,61 mod 7 = 5,存储在地址5,以此类推。存储数字8,8 mod 7 = 1,地址重复,使用二次再探测排列,即是地址按照原地址+x,其中x是1²、-1²、2²、-2²、、、、(重复就选下一个);开放定址法Hi=(H(key)+di)mod m;m是表长,di为增量序列
Linux命令 关机重启shutdown:关机shutdown -h -now:立即关机shutdown -h 1:一分钟后关机shutdown -r now:立即重启halt:关机reboot:重启sync:将内存数据保存到磁盘用户管理useradd 用户名:添加用户useradd -d 目录 用户名:添加用户到指定组passwd 用户名:更改用户密码userdel 用户名:删除用户userdel -r 用户名:删除用户和对应家su 用户名:更改用户exit:退出当前用户文件编辑器
MYSQL数据库、java面试 基础三大范式:一)每个列都不可拆分 二)非主键完全依赖于主键 三)在二的基础上不依赖其他非主键数据类型整数类型:tinyint、smallint、mediumint、int、bigint小数类型:float、double、decimal日期类型:year、time、date、datetime、timestamp文本、二进制类:char、varchar、tinyblob、blob、mediumblob、longblob、text、mediumtext、longtext、varbinary、bina