首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java面试——数据库知识点

数据库还可能防止添加将在表中创建重复键值的新数据。 主键索引 :数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。...所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。...对于更新操作 一般来说,执行更新操作时,我们会有两种选择: 先操作数据库,再操作缓存 先操作缓存,再操作数据库 如果原子性被破坏了,可能会有以下的情况: 操作数据库成功了,操作缓存失败了。...发布/订阅 先操作数据库,成功; 再删除缓存,也成功; 如果原子性被破坏了: 第一步成功(操作数据库),第二步失败(删除缓存),会导致数据库里是新数据,而缓存里是旧数据。...如果在高并发的场景下,出现数据库与缓存数据不一致的概率特别低,也不是没有: 缓存刚好失效 线程A查询数据库,得一个旧值 线程B将新值写入数据库 线程B删除缓存 线程A将查到的旧值写入缓存 要达成上述情况

57220

突击并发编程JUC系列-原子更新AtomicLong

(--i) long addAndGet(int delta) 以原子方式将输入的数值与实例中的值(AtomicLong里的value)相加,并返回结果 long getAndSet(int newValue...) 以原子方式设置为newValue的值,并返回旧值 long get() 获取 AtomicLong 中的值`(value)` boolean compareAndSet(int expect,int...+ count.addAndGet(10)); // 以原子方式设置为`newValue`的值,并返回旧值 System.out.println("getAndSet="...compareAndSet(current, next): 通过 compareAndSet方法来进行原子更新操作,将当前的值跟内存中的值进行比较,相等,则内存中没有被修改,直接写入新的值到主内存中,并...在 Jdk1.8 中,AtomicLong 的关键代码如下: /** * 原子更新导致值 * * @return 返回旧值 */ public final

43040
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何有效管理XDPeBPF以获得更好的DDoS保护

    访问特定实体从根开始,按顺序(逐级“解除引用”)进行,直到所需的实体。例如,要从集合中的“选项”结构中检索布尔标志,你需要导航到集合,找到结构,然后检索标志。...更新现有安全策略也是安全的,因为单独更新它们通常不会出现问题。虽然原子更新是可取的,但它没有提供显著的优势。 更新分类层映射以引用新的安全策略并删除对过时策略的引用是安全的。...单独更新映射可能会导致不一致或无效的状态,既不反映旧配置也不反映预期的新配置。 为了解决这个问题,原子更新应该在更高的级别发生。...对于希望最大限度地提高灵活性和避免约束的开发人员来说,目标应该是仅在重新加载之间保留重要信息——无法从非易失性存储中获取的数据。这样,你可以使用 eBPF 映射进行动态配置调整。...将处理从旧程序过渡到新程序并通知所有 eBPF 映射用户有关更改的信息可能会有点麻烦。

    19810

    JUC 包中的 Atomic 原子类总结

    在编程中,Atomic 指的是一个操作具有原子性,即该操作不可分割、不可中断。即使在多个线程同时执行时,该操作要么全部执行完成,要么不执行,不会被其他线程看到部分完成的状态。...原子类简单来说就是具有原子性操作特征的类。 java.util.concurrent.atomic 包中的 Atomic 原子类提供了一种线程安全的方式来操作单个变量。...JUC原子类概览 根据操作的数据类型,可以将 JUC 包中的原子类分为 4 类: 1、基本类型 使用原子的方式更新基本类型 AtomicInteger:整型原子类 AtomicLong:长整型原子类...,并设置新的值 public final int getAndIncrement()//获取当前的值,并自增 public final int getAndDecrement() //获取当前的值,并自减...index=i 位置元素的值,并让该位置的元素自增 public final int getAndDecrement(int i) //获取 index=i 位置元素的值,并让该位置的元素自减 public

    8810

    详解volatile关键字和原子引用

    可以看到,用原子类AtomicInteger类是可以获取期望值的,也就是保证了原子性。 接下来看一下原子类底层是怎么样的。 ?...介绍一个compareAndSwap方法,简称CAS(比较并交换),其有三个值,内存值V,旧的预估值A,更新值B。只有当V和A相等的时候,才会将变量的的值修改为B,否则什么都不干。...可以看到,上述的getAndAddInt方法是个自旋锁的实现,一直调用getIntVolatile(也是本地方法)方法获取对象的最新值,获取之后就会调用CAS方法。...CAS:原称为Compare-And-Swap,比较并交换,是一条cpu的并发原语,它的功能是判断内存某个位置的值是否为预期值,如果是则更改为预期值,这个过程是原子的。...说完原子类的底层,进行拓展一下:上述可以看到,原子类java只提供了基本类型的封装,例如AtomicInteger,AtomicLong等,但是工作中需要很多其他自定义的实体,也要保证原子性,该怎么办呢

    37810

    数据库基础笔记

    (执行单个逻辑功能的一组指令或操作称为事务) 详解 1. 原子性 原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。...、格式的限制(如:年龄、性别等)   4、默认约束 (Default Counstraint)该数据的默认值   5、外键约束 (Foreign Key Counstraint)需要建立两表间的关系并引用主表的列...实质:E-R图向关系模型的转换是要解决如何将实体和实体间的联系转换为关系,并确定这些关系的属性和码。 转化规则: 一个实体转换为一个关系,实体的属性就是关系的属性,实体的码就是关系的码。...如关系数据库中的一些对象为表、视图、字段、数据类型、长度、主键、外键、索引、约束、是否可为空、默认值。 5....三范式 一范式保证每列的原子性 数据库表中的所有字段值都是不可分解的原子值 第二范式:保证一张表只描述一件事情 消除非主属性之间的依赖 第三范式----保证每列都和主键直接相关 消除传递依赖

    40110

    《逆袭进大厂》第十二弹之MySQL重点篇27问27答

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。...; 索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高。...7)索引不会包含有NULL值的列 只要列中包含有 NULL 值都将不会被包含在索引中,复合索引中只要有一列含有 NULL值,那么这一列对于此复合索引就是无效的。...普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有null) 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并...例如 当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据 当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作 当年insert

    65450

    java并发编程JUC第十二篇:AtomicInteger原子整型

    进行数值比较,如果给定值与当前值相等,进行数值的更新操作,并实现操作的非阻塞算法。 2.1....addAndGet()- 将给定的值加到当前值上,并在加法后返回新值,并保证操作的原子性。 getAndAdd()- 将给定的值加到当前值上,并返回旧值,并保证操作的原子性。...incrementAndGet()- 将当前值增加1,并在增加后返回新值。它相当于++i操作,并保证操作的原子性。 getAndIncrement()- 将当前值增加1并返回旧值。...相当于++i操作,并保证操作的原子性。 decrementAndGet()- 将当前值减去1,并在减去后返回新值,相当于i--操作,并保证操作的原子性。...getAndDecrement()- 将当前值减去1,并返回旧值。它相当于 --i操作,并保证操作的原子性。

    79330

    从 Atomicinteger来学习 Java的原子类

    Java原子类实现了线程安全的操作,比如AtomicInteger实现了对int值的安全的加减等. 所以我们学习主要分为两部分,首先学习为什么可以实现线程安全?...实现原子操作的机制是:CAS. CAS:compare and swap,比较交换,当且仅当目标值等于给定值的时候才进行写入操作.具体原理可以google一下....可以看到在上面的getAndAddInt方法中,显示获取了当前内存地址的值,然后进行比较交换,如果相同则成功,不相同则轮询....getAndDecrement: 获取当前值之后自减. get: 获取当前值. set: 设置一个值. getAndSet: 设置新值,返回旧值....API出来了get和set外: updateAndGet: 更新值并获取新值. getAndUpdate: 获取旧值之后更新值. 注意传入的参数是声明的V.

    54530

    详谈Java中的CAS操作

    简单粗暴的说就是对对象的操作只有一次,拿+1这种场景来说,直接对原值+1就是原子操作,如果是先获取原来数值的值然后再+1就不是原子操作。 ?...图中红色框中的部分就是对value值的操作,可以看到它的步骤是:①获取value的值;②然后入栈;③+1操作;④写入value值。...那么现在就可以解释为什么实际运行结果是小于理论值1000000的,在很多的线程中,某一时刻存在两个或多个线程同时获取到value的值,也就是说此时每个线程value值都是一样的,都进行加一之后再写入value...AtomicInteger介绍 AtomicInteger是concurrent包下的atomic包的一个类,在该包中还提供了很多其他的原子操作类,比如AtomicInteger、AtomicLong、...设置当前值 public final void set(int newValue) // 设置新值并返回旧值 public final int getAndSet(int newValue) //

    1.1K20

    数据库acid的含义

    ACID是指在 数据库管理系统(DBMS)中事物所具有的四个特性:原子性、一致性、隔离性、持久性 事物:在数据库系统中,一个事务是指由一系列连续的数据库操作组成的一个完整的逻辑过程。...ACID中的一致性包含实体完整性约束不被破坏,完整性包含实体完整性(主属性不为空)、参照完整性(外键必须存在原表中)、用户自定义的完整性。...比如列值非空(not null)、列值唯一(unique)、列值是否满足一个bool表达式(check语句,如性别只能有两个值、岁数是一定范围内的整数等),例如age smallint CHECK (age...>=0 AND age 值在[0, 120]的范围,如果不在这个范文,那么更新操作失败,事务也会失败。...持久性需要考虑到事物在执行过程中可能出现的各种异常,并对异常做出相应的处理。

    64230

    (70) 原子变量和CAS 计算机程序的思维逻辑

    ,是因为其包含一些以原子方式实现组合操作的方法,比如: //以原子方式获取旧值并设置新值 public final int getAndSet(int newValue) //以原子方式获取旧值并给当前值加...1 public final int getAndIncrement() //以原子方式获取旧值并给当前值减1 public final int getAndDecrement() //以原子方式获取旧值并给当前值加...delta public final int getAndAdd(int delta) //以原子方式给当前值加1并获取新值 public final int incrementAndGet() //以原子方式给当前值减...1并获取新值 public final int decrementAndGet() //以原子方式给当前值加delta并获取新值 public final int addAndGet(int delta...current,计算期望的值next,然后调用CAS方法进行更新,如果当前值没有变,则更新并返回新值,否则继续循环直到更新成功为止。

    76790

    【死磕Java并发】常用并发原子类详解

    值 int getAndIncrement() 先取得旧值,然后加1,最后返回旧值 int getAndDecrement() 先取得旧值,然后减1,最后返回旧值 int incrementAndGet...2.2、对象引用类型 上文提到的基本类型的原子类,只能更新一个变量,如果需要原子性更新多个变量,这个时候可以采用对象引用类型的原子操作类,将多个变量封装到一个对象中,JDK为开发者提供了三个对象引用类型的原子类...().toString()); 输出结果: 更新后的对象:User{name='李四', age=21} 2.3、对象属性类型 在某项场景下,可能你只想原子性更新对象中的某个属性值,此时可以采用对象属性类型的原子操作类...: 更新后的属性值:21 2.4、数组类型 数组类型的原子操作类,并不是指对数组本身的原子操作,而是对数组中的元素进行原子性操作,这一点需要特别注意,如果要针对整个数组进行更新,可以采用对象引入类型的原子操作类进行处理...四、ABA问题 从上文的分析中,我们知道 CAS 在操作的时候会检查预期原值是否发生变化,当预期原值没有发生变化才会更新值。

    27310

    当数据库遇到分布式

    需要注意的是,如果数据库允许where字句从旧快照中读取,则此语句可能无法防止丢失更新,因为即使发生了另一个并发写入,where条件也可能是真的。...有些数据库,如Cassandra,采取了折中的策略,使用多个列组成的复合主键来声明。键中只有第一列会作为散列的依据,而其他列则被用作Cassandra的SSTables中排序数据的连接索引。...尽管查询无法在复合主键的第一列中按扫描扫表,但如果第一列已经指定了固定值,则可以对该键的其他列执行有效的范围扫描。组合索引的方法为一对多关系提供了一个优雅的数据模型。...以客户端为中心的一致性包含了四种模型: 单调读一致性(Monotonic-read Consistency): 如果一个进程读取数据项 x 的值,那么该进程对于 x 后续的所有读操作要么读取到第一次读取的值要么读取到更新的值...即保证客户端不会读取到旧值。 单调写一致性(Monotonic-write Consistency): 一个进程对数据项 x 的写操作必须在该进程对 x 执行任何后续写操作之前完成。

    64340

    AtomicInteger详解

    ,分表是V(内存中的值),A(旧的原值),B(要修改的新值),只有内存中的值等于旧的原值即V=A时,B才能对内存中的值进行更新。...(2)CAS只能保证2个变量旧值和新值的原子性操作,如果值超过2个的话,就不能使用CAS。 (3)CAS最大的问题 - 无法解决ABA问题(请看下一篇)。...//CAS修改值 expect为预期值即内存中的原值-A update为要修改的新值-B //A等于内存值 才可以更新内存值为B,否则CAS自旋,重复更新操作 public final boolean...); } //获取原值,并使用CAS将旧值-1 public final int getAndDecrement() { return unsafe.getAndAddInt(this, valueOffset..., -1); } //获取原值,并使用CAS将旧值+指定值 public final int getAndAdd(int delta) { return unsafe.getAndAddInt(

    1K10

    当数据库遇到分布式两者会擦出怎样的火花!

    需要注意的是,如果数据库允许where字句从旧快照中读取,则此语句可能无法防止丢失更新,因为即使发生了另一个并发写入,where条件也可能是真的。...有些数据库,如Cassandra,采取了折中的策略,使用多个列组成的复合主键来声明。键中只有第一列会作为散列的依据,而其他列则被用作Cassandra的SSTables中排序数据的连接索引。...尽管查询无法在复合主键的第一列中按扫描扫表,但如果第一列已经指定了固定值,则可以对该键的其他列执行有效的范围扫描。组合索引的方法为一对多关系提供了一个优雅的数据模型。...以客户端为中心的一致性包含了四种模型: 单调读一致性(Monotonic-read Consistency):如果一个进程读取数据项 x 的值,那么该进程对于 x 后续的所有读操作要么读取到第一次读取的值要么读取到更新的值...即保证客户端不会读取到旧值。 单调写一致性(Monotonic-write Consistency):一个进程对数据项 x 的写操作必须在该进程对 x 执行任何后续写操作之前完成。

    79620

    SQL命令 UPDATE(三)

    在UPDATE操作期间,对于每个具有更新字段值的外键引用,都会在被引用表中的旧(更新前)引用行和新(更新后)引用行上获得共享锁。 这些行在执行引用完整性检查和更新行时被锁定。...这确保了引用的行不会在引用完整性检查和更新操作完成之间发生更改。 锁定旧行可以确保在可能的UPDATE回滚之前不会更改所引用的行。...原子性 默认情况下,UPDATE、INSERT、DELETE和TRUNCATE TABLE是原子操作。 UPDATE要么成功完成,要么回滚整个操作。...当更新一行中的所有字段时,请注意,列级特权覆盖GRANT命令中命名的所有表列; 表级权限涵盖所有表列,包括分配权限后添加的列。...尝试更新具有列级ReadOnly (SELECT或REFERENCES)权限的字段的值(即使是NULL值)将导致SQLCODE -138错误:无法为只读字段插入/更新值。

    1.6K20
    领券