蚂蚁面试题详细总结集锦

  1. jdk1.7jdk1.8 Map发生了什么变化(底层)?

1.8之后hashMap的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+链表+红黑树。也就是说在JVM存

  1. jdk1.7jdk1.8 Map发生了什么变化(底层)?

1.8之后hashMap的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+链表+红黑树。也就是说在JVM存储hashMap的K-V时仅仅通过key来决定每一个entry的存储槽位(Node[]中的index)。并且Value以链表的形式挂在到对应槽位上(1.8以后如果value长度大于8则转为红黑树)。

但是hashmap1.7跟1.8 中都没有任何同步操作,容易出现并发问题,甚至出现死循环导致系统不可用。解决方案是jdk的ConcurrentHashMap,位于java.util.concurrent下,专门解决并发问题。

  1. ConcurrentHashMap

思路与hashMap差不多,但是支持并发操作,要复杂很多

  1. 并行跟并发有什么区别?

并发:指应用交替执行不同的任务,多线程原理

并行:指应用同时执行不用的任务

区别:一个是交替执行,一个是同时执行。

  1. jdk1.7jdk1.8 java虚拟机发生了什么变化?

JVM中内存份为堆、栈内存,及方法区。

栈内存主要用途:执行线程方法,存放本地临时变量与线程方法执行是需要的引用对象的地址。

堆内存主要用途:JVM中所有对象信息都存放在堆内存中,相比栈内存,堆内存大很多所以JVM一直通过对堆内存划分不同功能区块实现对堆内存中对象管理。

堆内存不够常见错误:OutOfMemoryError

栈内存溢出常见错误:StackOverFlowError

在JDK7以及其前期的JDK版本中,堆内存通常被分为三块区域Nursery内存(young generation)、长时内存(old generation)、永久内存(Permanent Generation for VM Matedata),显示如下图:

在最上面一层是Nursery内存,一个对象被创建以后首先被房到Nuersery中的Eden内存中,如果存活周期超过两个Survivor(生存周期)之后会被转移到Old Generation中。

永久内存中存放对象的方法、变量等元数据信息。永久内存不够就会出现 以下错误:java.lang.OutOfMemoryError:PermGen

但是在JDK1.8中一般都不会得到这个错误,原因在于:1.8中把存放元数据的永久内存从堆内存中已到了本地内存(native Memory)中,1.8中JVM内存结构变成了如下图:

这样永久内存就不占用堆内存,可以通过自增长来避免永久内存错误。

-XX:MaxMetaspaceSize=128m 这只最大的远内存空间128兆

JDK1.8移除PermGen,取而代之的是MetaSpace源空间

MetaSpace 垃圾回收:对僵死的类及类加载器的垃圾回收机制昂在元数据使用达到“MaxMetaSpaceSize”参数的设定值时运行。

MetaSpace 监控:元空间的使用情况可以在HotSpot1.8的详细GC日志输出中得到。

更新JDK1.8的原因:

1.字符串存在永久代当中,容易出现性能问题和内存溢出

2.类及方法的信息比较难确定其大小,因此对永久代的大小制定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

3.永久代会为GC带来不必要的复杂度,并且回收效率偏低

4.Oracle可能会想HotSpot 与 JRockit 合并。

  1. 如果叫你自己设计一个中间件,你会如何设计?

我会从以下几点方面考虑开发:

  1. 远程过程调用
  2. 面向消息:利用搞笑的消息传递机制进行平台无关的数据交流,并给予数据通信来进行分布式系统的集成,有一下三个特点:
                  1. 通讯程序可以在不同的时间运行
                  2. 通讯晨旭之家可以一对一、一对多、多对一甚至是上述多种方式的混合
                  3. 程序将消息放入消息队列会从小吸毒列中取出消息来进行通讯
  3. 对象请求代理:提供不同形式的通讯服务包括同步、排队、订阅发布、广播等。可构筑各种框架如:事物处理监控器、分布数据访问、对象事务管理器OTM等。
  4. 事物处理监控有一下功能:
      1. 进程管理,包括启动server进程、分配任务、监控其执行并对负载进行平衡
      2. 事务管理,保证在其监控下的事务处理的原子性、一致性、独立性和持久性
      3. 通讯管理,为client和server之间提供多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等
  1. 什么是中间件?

中间件是处于操作系统和应用程序之间软件,使用时旺旺是一组中间件集成在一起,构成一个平台(开发平台+运行平台),在这组中间件中必须要有一个通信中间件,即中间件=平台+通信。该定义也限定了只有勇于分布式系统中才能称为中间件

主要分类:远程过程调用、面向消息的中间件、对象请求代理、事物处理监控。

  1. ThreadLock用过没有,说说它的作用?

ThreadLock为本地线程,为每一个线程提供一个局部变量,也就是说只有当前线层可以访问,是线程安全的。原理:为每一个线程分配一个对象来工作,并不是由ThreadLock来完成的,而是需要在应用层面保证的,ThreadLock只是起到了一个容器的作用。原理为ThreadLock的set()跟get()方法。

实现原理:

public void set(T value) {

        Thread t = Thread.currentThread();

        ThreadLocalMap map = getMap(t);

        if (map != null)

            map.set(this, value);

        else

            createMap(t, value);

    }

public T get() {

        Thread t = Thread.currentThread();

        ThreadLocalMap map = getMap(t);

        if (map != null) {

            ThreadLocalMap.Entry e = map.getEntry(this);

            if (e != null)

                return (T)e.value;

        }

        return setInitialValue();

    }

  1. dubboxspring cloud区别?
  2. dubbox的源码看过没,dubbox有哪些组件,介绍下?
  3. Hashcode()和equals()和==区别?
    1. hashcode()方法跟equals()在java中都是判断两个对象是否相等
    2. 两个对象相同,则hashcode至一定要相同,即对象相同 ---->成员变量相同 ---->hashcode值一定相同
    3. 两个对象的hashcode值相同,对象不一定相等。总结:equals相等则hashcode一定相等,hashcode相等,equals不一定相等。
    4. ==比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间)
  4. mysql数据库中,什么情况下设置了索引但无法使用?
    1. 索引的作用:在数据库表中对字段建立索引可以大大提高查询速度。
    2. Mysql索引类型:
            1. 普通索引
            2. 唯一索引:唯一索引列的值必须唯一允许有空值,如果是组合索引,则列值的组合必须唯一:

CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL,    username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length))   );

            1. 主键索引:一种特殊的唯一索引,不允许有空值,一般在创建表的时候创建主键索引:

CREATE TABLE mytable(   ID INT NOT NULL,    username   VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );

            1. 组合索引:CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   city VARCHAR(50) NOT NULL,   age INT NOT NULL  );

为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是    将 name, city, age建到一个索引里:代码如下:

ALTER TABLE mytable ADD INDEX name_city_age              (name(10),city,age);

    1. 什么情况下有索引,但用不上?
            1. 如果条件中有OR,即使其中有部分条件带索引也不会使用。注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。
            2. 对于多了索引,不是使用的第一部分,则不会使用索引。
            3. Like查询以%开头,不使用索引
            4. 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
            5. Where 子句里对索引列上有数学运算,用不上索引
            6. Where 子句中对索引列使用函数,用不上索引
            7. Mysql估计使用全表扫描要比用索引快,不使用索引
    2. 什么情况下不推荐使用索引?
            1. 数据唯一性差的字段不要使用索引
            2. 频繁更新的字段不要使用索引
            3. 字段不在where语句中出现时不要添加索引,如果where后含IS NULL/IS NOT NULL/LIKE ‘%输入符%’等条件,不要使用索引
            4. Where子句里对索引使用不等于(<>),不建议使用索引,效果一般
  1. mysql优化会不会,mycat分库,垂直分库,水平分库?
    1. 为查询缓存优化你的查询
    2. EXPLAIN select查询:explain 的查询结果会告诉你索引主键是如何被利用的
    3. 只需要一行数据时使用limit1
    4. 为搜索字段添加索引
    5. 在关联表的时候使用相当类型的例,并将其索引
    6. 千万不要ORDER BY RAND()
    7. 避免select*
    8. 永远为每张表设置一个ID
    9. 使用ENUM而不是VARCHAR
    10. 从PROCEDURE ANALYS()提取建议
    11. 尽可能的使用NOT NULL
    12. Java中使用Prepared Statements
    13. 无缓冲的查询
    14. 把IP地址存成UNSIGNED INT
    15. 固定表的长度
    16. 垂直分库:“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
    17. 水平分库:“水平分割”是一种把数据库中的表按行变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
    18. 越小的列会越快
    19. 选择正确的存储引擎
    20. 使用一个对象关系映射器
    21. 小心永久链接
    22. 拆分大的DELETE活INSERT语句
  2. 分布式事务解决方案?
    1. 什么是分布式事务?
          1. 什么情况下需要用到分布式事务?
            1. 当本地数据库断电、机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠TCP、存储数据丢失、其他异常等需要用到分布式事务。
            2. 例如:当本地事务数据库断电的这种秦光,如何保证数据一致性?数据库由连个文件组成的,一个数据库文件和一个日志文件,数据库任何写入操作都要先写日志,在操作前会吧日志文件写入磁盘,那么断电的时候及时才做没有完成,在重启数据库的时候,数据库会根据当前数据情况进行undo回滚活redo前滚,保证了数据的强一致性。
            3. 分布式理论:当单个数据库性能产生瓶颈的时候,可能会对数据库进行分区(物理分区),分区之后不同的数据库不同的服务器上     ,此时单个数据库的ACID不适应这种清苦啊,在此集群环境下很难达到集群的ACID,甚至效率性能大幅度下降,重要的是再很难扩展新的分区了。此时就需要引用一个新的理论来使用这种集群情况:CAP定理
            4. CAP定理:由加州肚饿伯克利分销Eric Brewer教授提出,指出WEB服务无法同时满足3个属性
                  1. 一致性:客户端知道一系列的操作都会同时发生(生效)
                  2. 可用性:每个操作都必须以可预期的响应结束
                  3. 分区容错性:及时出现单组件无法可用,操作依然可以完成。

具体的将在分布式系统中,在任何数据库设计中,一个WEB应

至多只能同时支持上面两个属性。设计人员必须在一致性和可用

性之间做出选择。

            1. BASE理论:分布式系统中追求的是可用性,比一致性更加重要,BASE理论来实现高可用性。核心思想是:我们无法做到羟乙酯,单每个应用都可以根据自身的业务特点,采用适当的方式使系统达到最终一致性。
            2. 数据库事务特性:ACID
              1. 原子性
              2. 一致性
              3. 独立性或隔离性
              4. 持久性
    1. 分布式系统中,实现分布式事务的解决方案:
          1. 两阶段提交2PC
          2. 补偿事务TCC
          3. 本地消息表(异步确保)
          4. MQ事务消息
          5. Sagas事务模型

  1. sql语句优化会不会,说出你知道的?
    1. 避免在列上做运算,可能会导致索引失败
    2. 使用join时应该小结果集驱动大结果集,同时把复杂的join查询拆分成多个query,不然join越多表,会导致越多的锁定和堵塞。
    3. 注意like模糊查询的使用,避免使用%%
    4. 不要使用select * 节省内存
    5. 使用批量插入语句,节省交互
    6. Limit基数比较大时,使用between  and
    7. 不要使用rand函数随机获取记录
    8. 避免使用null,建表时,尽量设置not nul,提高查询性能
    9. 不要使用count(id),应该使用count(*)
    10. 不要做无谓的排序,尽可能在索引中完成排序
    11. From语句中一定不要使用子查询
    12. 使用更多的where加以限制,缩小查找范围
    13. 合理运用索引
    14. 使用explain查看sql性能
  2. mysql的存储引擎了解过没有?
    1. MySQL存储引擎种类:

    1. 史上最简单MySQL教程详解(进阶篇)之事务处理_Newtol的博客-CSDN博客
    2. https://blog.csdn.net/m0_37888031/article/details/80664138
    3. 事务处理:在整个流程中出现任何问题,都能让数据回滚到最开始的状态,这种处理方式称之为事务处理。也就是说事务处理要么都成功,要么的失败。
  1. 红黑树原理?
    1. 红黑树的性质:红黑树是一个二叉搜索树。在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK,通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:
              1. 每个节点颜色不是黑色就是红色
              2. 根节点的颜色是黑色的
              3. 如果一个节点是红色,那么他的两个子节点就是黑色的,没有持续的红节点
              4. 对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点。

储hashMap的K-V时仅仅通过key来决定每一个entry的存储槽位(Node[]中的index)。并且Value以链表的形式挂在到对应槽位上(1.8以后如果value长度大于8则转为红黑树)。

但是hashmap1.7跟1.8 中都没有任何同步操作,容易出现并发问题,甚至出现死循环导致系统不可用。解决方案是jdk的ConcurrentHashMap,位于java.util.concurrent下,专门解决并发问题。

  1. ConcurrentHashMap

思路与hashMap差不多,但是支持并发操作,要复杂很多

  1. 并行跟并发有什么区别?

并发:指应用交替执行不同的任务,多线程原理

并行:指应用同时执行不用的任务

区别:一个是交替执行,一个是同时执行。

  1. jdk1.7jdk1.8 java虚拟机发生了什么变化?

JVM中内存份为堆、栈内存,及方法区。

栈内存主要用途:执行线程方法,存放本地临时变量与线程方法执行是需要的引用对象的地址。

堆内存主要用途:JVM中所有对象信息都存放在堆内存中,相比栈内存,堆内存大很多所以JVM一直通过对堆内存划分不同功能区块实现对堆内存中对象管理。

堆内存不够常见错误:OutOfMemoryError

栈内存溢出常见错误:StackOverFlowError

在JDK7以及其前期的JDK版本中,堆内存通常被分为三块区域Nursery内存(young generation)、长时内存(old generation)、永久内存(Permanent Generation for VM Matedata),显示如下图:

在最上面一层是Nursery内存,一个对象被创建以后首先被房到Nuersery中的Eden内存中,如果存活周期超过两个Survivor(生存周期)之后会被转移到Old Generation中。

永久内存中存放对象的方法、变量等元数据信息。永久内存不够就会出现 以下错误:java.lang.OutOfMemoryError:PermGen

但是在JDK1.8中一般都不会得到这个错误,原因在于:1.8中把存放元数据的永久内存从堆内存中已到了本地内存(native Memory)中,1.8中JVM内存结构变成了如下图:

这样永久内存就不占用堆内存,可以通过自增长来避免永久内存错误。

-XX:MaxMetaspaceSize=128m 这只最大的远内存空间128兆

JDK1.8移除PermGen,取而代之的是MetaSpace源空间

MetaSpace 垃圾回收:对僵死的类及类加载器的垃圾回收机制昂在元数据使用达到“MaxMetaSpaceSize”参数的设定值时运行。

MetaSpace 监控:元空间的使用情况可以在HotSpot1.8的详细GC日志输出中得到。

更新JDK1.8的原因:

1.字符串存在永久代当中,容易出现性能问题和内存溢出

2.类及方法的信息比较难确定其大小,因此对永久代的大小制定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

3.永久代会为GC带来不必要的复杂度,并且回收效率偏低

4.Oracle可能会想HotSpot 与 JRockit 合并。

  1. 如果叫你自己设计一个中间件,你会如何设计?

我会从以下几点方面考虑开发:

  1. 远程过程调用
  2. 面向消息:利用搞笑的消息传递机制进行平台无关的数据交流,并给予数据通信来进行分布式系统的集成有一下三个特点:
  3. 通讯程序可以在不同的时间运行
    1. 程序将消息放入消息队列会从小吸毒列中取出消息来进行通讯
    2. 通讯晨旭之家可以一对一、一对多、多对一甚至是上述多种方式的混合
  4. 对象请求代理:提供不同形式的通讯服务包括同步、排队、订阅发布、广播等。可构筑各种框架如:事物处理监控器、分布数据访问、对象事务管理器OTM等。
  5. 事物处理监控有一下功能:
      1. 进程管理,包括启动server进程、分配任务、监控其执行并对负载进行平衡
      2. 事务管理,保证在其监控下的事务处理的原子性、一致性、独立性和持久性
      3. 通讯管理,为client和server之间提供多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等
  1. 什么是中间件?

中间件是处于操作系统和应用程序之间软件,使用时旺旺是一组中间件集成在一起,构成一个平台(开发平台+运行平台),在这组中间件中必须要有一个通信中间件,即中间件=平台+通信。该定义也限定了只有勇于分布式系统中才能称为中间件

主要分类:远程过程调用、面向消息的中间件、对象请求代理、事物处理监控。

  1. ThreadLock用过没有,说说它的作用?

ThreadLock为本地线程,为每一个线程提供一个局部变量,也就是说只有当前线层可以访问,是线程安全的。原理:为每一个线程分配一个对象来工作,并不是由ThreadLock来完成的,而是需要在应用层面保证的,ThreadLock只是起到了一个容器的作用。原理为ThreadLock的set()跟get()方法。

实现原理:

public void set(T value) {

        Thread t = Thread.currentThread();

        ThreadLocalMap map = getMap(t);

        if (map != null)

            map.set(this, value);

        else

            createMap(t, value);

    }

public T get() {

        Thread t = Thread.currentThread();

        ThreadLocalMap map = getMap(t);

        if (map != null) {

            ThreadLocalMap.Entry e = map.getEntry(this);

            if (e != null)

                return (T)e.value;

        }

        return setInitialValue();

    }

  1. dubboxspring cloud区别?
  2. dubbox的源码看过没,dubbox有哪些组件,介绍下?
  3. Hashcode()和equals()和==区别?
    1. hashcode()方法跟equals()在java中都是判断两个对象是否相等
    2. 两个对象相同,则hashcode至一定要相同,即对象相同 ---->成员变量相同 ---->hashcode值一定相同
    3. 两个对象的hashcode值相同,对象不一定相等。总结:equals相等则hashcode一定相等,hashcode相等,equals不一定相等。
    4. ==比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间)
  4. mysql数据库中,什么情况下设置了索引但无法使用?
    1. 索引的作用:在数据库表中对字段建立索引可以大大提高查询速度。
    2. Mysql索引类型:
    3. 普通索引
      1. 唯一索引:唯一索引列的值必须唯一允许有空值,如果是组合索引,则列值的组合必须唯一:

CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL,    username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length))   );

            1. 主键索引:一种特殊的唯一索引,不允许有空值,一般在创建表的时候创建主键索引:

CREATE TABLE mytable(   ID INT NOT NULL,    username   VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );

            1. 组合索引:CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   city VARCHAR(50) NOT NULL,   age INT NOT NULL  );

为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是    将 name, city, age建到一个索引里:代码如下:

ALTER TABLE mytable ADD INDEX name_city_age              (name(10),city,age);

    1. 什么情况下有索引,但用不上?
            1. 如果条件中有OR,即使其中有部分条件带索引也不会使用。注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。
            2. 对于多了索引,不是使用的第一部分,则不会使用索引。
            3. Like查询以%开头,不使用索引
            4. 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
            5. Where 子句里对索引列上有数学运算,用不上索引
            6. Where 子句中对索引列使用函数,用不上索引
            7. Mysql估计使用全表扫描要比用索引快,不使用索引
    2. 什么情况下不推荐使用索引?
            1. 数据唯一性差的字段不要使用索引
            2. 频繁更新的字段不要使用索引
            3. 字段不在where语句中出现时不要添加索引,如果where后含IS NULL/IS NOT NULL/LIKE ‘%输入符%’等条件,不要使用索引
            4. Where子句里对索引使用不等于(<>),不建议使用索引,效果一般
  1. mysql优化会不会,mycat分库,垂直分库,水平分库?
    1. 为查询缓存优化你的查询
    2. EXPLAIN select查询:explain 的查询结果会告诉你索引主键是如何被利用的
    3. 只需要一行数据时使用limit1
    4. 为搜索字段添加索引
    5. 在关联表的时候使用相当类型的例,并将其索引
    6. 千万不要ORDER BY RAND()
    7. 避免select*
    8. 永远为每张表设置一个ID
    9. 使用ENUM而不是VARCHAR
    10. 从PROCEDURE ANALYS()提取建议
    11. 尽可能的使用NOT NULL
    12. Java中使用Prepared Statements
    13. 无缓冲的查询
    14. 把IP地址存成UNSIGNED INT
    15. 固定表的长度
    16. 垂直分库:“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
    17. 水平分库:“水平分割”是一种把数据库中的表按行变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
    18. 越小的列会越快
    19. 选择正确的存储引擎
    20. 使用一个对象关系映射器
    21. 小心永久链接
    22. 拆分大的DELETE活INSERT语句
  2. 分布式事务解决方案?
    1. 什么是分布式事务?
          1. 什么情况下需要用到分布式事务?
            1. 当本地数据库断电、机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠TCP、存储数据丢失、其他异常等需要用到分布式事务。
            2. 例如:当本地事务数据库断电的这种秦光,如何保证数据一致性?数据库由连个文件组成的,一个数据库文件和一个日志文件,数据库任何写入操作都要先写日志,在操作前会吧日志文件写入磁盘,那么断电的时候及时才做没有完成,在重启数据库的时候,数据库会根据当前数据情况进行undo回滚活redo前滚,保证了数据的强一致性。
            3. 分布式理论:当单个数据库性能产生瓶颈的时候,可能会对数据库进行分区(物理分区),分区之后不同的数据库不同的服务器上     ,此时单个数据库的ACID不适应这种清苦啊,在此集群环境下很难达到集群的ACID,甚至效率性能大幅度下降,重要的是再很难扩展新的分区了。此时就需要引用一个新的理论来使用这种集群情况:CAP定理
            4. CAP定理:由加州肚饿伯克利分销Eric Brewer教授提出,指出WEB服务无法同时满足3个属性
                  1. 一致性:客户端知道一系列的操作都会同时发生(生效)
                  2. 可用性:每个操作都必须以可预期的响应结束
                  3. 分区容错性:及时出现单组件无法可用,操作依然可以完成。

具体的将在分布式系统中,在任何数据库设计中,一个WEB应

至多只能同时支持上面两个属性。设计人员必须在一致性和可用

性之间做出选择。

            1. BASE理论:分布式系统中追求的是可用性,比一致性更加重要,BASE理论来实现高可用性。核心思想是:我们无法做到羟乙酯,单每个应用都可以根据自身的业务特点,采用适当的方式使系统达到最终一致性。
            2. 数据库事务特性:ACID
              1. 原子性
              2. 一致性
              3. 独立性或隔离性
              4. 持久性
    1. 分布式系统中,实现分布式事务的解决方案:
          1. 两阶段提交2PC
          2. 补偿事务TCC
          3. 本地消息表(异步确保)
          4. MQ事务消息
          5. Sagas事务模型

  1. sql语句优化会不会,说出你知道的?
    1. 避免在列上做运算,可能会导致索引失败
    2. 使用join时应该小结果集驱动大结果集,同时把复杂的join查询拆分成多个query,不然join越多表,会导致越多的锁定和堵塞。
    3. 注意like模糊查询的使用,避免使用%%
    4. 不要使用select * 节省内存
    5. 使用批量插入语句,节省交互
    6. Limit基数比较大时,使用between  and
    7. 不要使用rand函数随机获取记录
    8. 避免使用null,建表时,尽量设置not nul,提高查询性能
    9. 不要使用count(id),应该使用count(*)
    10. 不要做无谓的排序,尽可能在索引中完成排序
    11. From语句中一定不要使用子查询
    12. 使用更多的where加以限制,缩小查找范围
    13. 合理运用索引
    14. 使用explain查看sql性能
  2. mysql的存储引擎了解过没有?
    1. MySQL存储引擎种类:

    1. 史上最简单MySQL教程详解(进阶篇)之事务处理_Newtol的博客-CSDN博客
    2. https://blog.csdn.net/m0_37888031/article/details/80664138
    3. 事务处理:在整个流程中出现任何问题,都能让数据回滚到最开始的状态,这种处理方式称之为事务处理。也就是说事务处理要么都成功,要么的失败。
  1. 红黑树原理?
    1. 红黑树的性质:红黑树是一个二叉搜索树。在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK,通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:
              1. 每个节点颜色不是黑色就是红色
              2. 根节点的颜色是黑色的
              3. 如果一个节点是红色,那么他的两个子节点就是黑色的,没有持续的红节点
              4. 对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis分布式锁、Redisson原理

文章目录简单的分布式锁实现流程Lua脚本介绍Redisson实现分布式锁原理基本使用原理首先是lock加锁逻辑锁续命逻辑自旋重试逻辑释放锁唤醒其他阻塞线程逻辑RedLock红锁介绍与基本使用问题分布式锁性能提升简单的分布式锁实现流程 最初的版本&#xff0c;使用setnx命令加锁&…

python+appium+pytest自动化测试-参数化设置

来自APP Android端自动化测试初学者的笔记&#xff0c;写的不对的地方大家多多指教哦。&#xff08;所有内容均以微博V10.11.2版本作为例子&#xff09;在自动化测试用例执行过程中&#xff0c;经常出现执行相同的用例&#xff0c;但传入不同的参数&#xff0c;导致我们需要重复…

腾讯后端开发实习一面(24届)

毫无准备的腾讯一面&#xff0c;最近都在忙比赛去了&#xff0c;突然收到腾讯一面的邮件&#xff0c;直接没准备。。。 总结&#xff0c;除了Vue其他的都挺好&#xff0c;但是腾讯hr为啥Vue面我四个问题&#xff0c;不是面的后端开发吗&#xff0c;好难呀&#xff0c;都只能随…

java基础知识——12.小练习

这篇文章就是主要做一些算法小练习用的 1.求机票价格 题目如下&#xff1a; 需求&#xff1a;机票价格按照淡旺季&#xff0c;头等舱经济舱来收费。输入机票原价&#xff0c;淡旺季&#xff0c;头等舱或经济舱来获取机票价格 规则如下&#xff1a;旺季&#xff08;5-10&…

【 Bean 作⽤域和⽣命周期 】

文章目录引用一、认识 Bean的作用域二、作⽤域定义三、Bean 的 6 种作⽤域四、Bean 原理分析4.1 Bean 执行流程4.2 Bean ⽣命周期引用 从前⾯的课程我们可以看出 Spring 是⽤来读取和存储 Bean&#xff0c;因此在 Spring 中 Bean 是最核⼼的操作资源&#xff0c;所以接下来我们…

你真的会写 git commit message 吗?

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

用GPT-4写代码不用翻墙了?Cursor告诉你:可以~~

目录 一、介绍 二、使用方法 三、其他实例 1.正则表达式 2.自动化测试脚本 3.聊聊技术 一、介绍 Cursor主要功能是根据用户的描述写代码或者进行对话&#xff0c;对话的范围仅限技术方面。优点是不用翻墙、不需要账号。Cursor基于GPT模型&#xff0c;具体什么版本不祥&#…

Powershell脚本自动化登录网站的简单实例,命令行方式实现Http(s)的GET、POST请求

自动化登录网站的流程比较简单&#xff0c;如果不懂 Python、JavaScript、C 等编程语言&#xff0c;又没有安装这些编程语言环境软件&#xff0c;我们还要新的点子&#xff1a;用Windows系统自带的 Powershell 运行自编的脚本来实现。 PowerShell 是一种功能强大的自动化工具&…

大型软件外包项目的开发流程

与中小型软件项目相比&#xff0c;大型软件项目的管理和开发难度更大&#xff0c;需要在开发过程中严格执行软件的项目管理流程&#xff0c;不能有比较明显的问题&#xff0c;有问题也要及时解决。软件项目的开发过程环环相扣&#xff0c;如果在前流程中有明显问题&#xff0c;…

【fluent UDF】保留UDM变量Reserving UDM Variables Using Reserve_User_Memory_Vars-测试分析篇

一、问题背景 因为对Reserve_User_Memory_Vars这个函数比较陌生&#xff0c;在学习官方文档过程中发现难以理解&#xff0c;于是只好亲手在fluent 2022上测试一番。 直接上结论&#xff1a; 此保留函数运行一次后&#xff08;设置GUI界面中的UDM数目第一次加载共享库成功&…

【从零开始学习 UVM】3.8、UVM TestBench架构 —— UVM Agent [uvm_agent]

文章目录 什么是 UVM Agent?所有的Agent Type是什么?如何确定UVM Agent是主动还是被动的?创建UVM代理的步骤一个UVM代理做什么?如何将UVM代理配置为主动或被动?一个UVM Agent例子推荐做法什么是 UVM Agent? 一个 Agent 将Sequencer、Driver和Monitor封装成一个单一实体,…

图像分类的划分数据,dataset和dataloader的实现

目录 1. 介绍 2. 主函数代码 2. utils 模块代码 2.1 划分数据集 2.2 可视化数据集 3. dataset 数据处理 4. collate_fn 5. other 1. 介绍 图像分类一般来说不需要自定义的dataSet&#xff0c;因为pytorch自定义好的ImageFolder可以解决大部分的需求&#xff0c;更多的…

springBoot --- mybatisPlus自动生成代码

mybatisPlus自动生成代码mybatisPlus自动生成代码pom.xmlapplication.yml自动生成代码测试主启动类生成目录结果使用插件 --- 版本要求&#xff1a;3.4.0 版本以上pom.xml更新mybatisplus插件版本mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.…

Linux系统中使任务后台挂起不停止的命令

在使用远程SSH连接工具时&#xff0c;退出工具时任务也停止&#xff0c;相当于远程连接工具在系统开启了一个Terminal终端&#xff0c;服务也会随着终端的中断而停止。Linux系统也提供了服务基于后台运行的命令&#xff0c;是独立于终端的进程。 nohup Linux nohup Linux no…

【Python】仅7行代码实现自动化天气报时

文章目录前言一、实现步骤二、请求天气接口1.引入库2.读入数据3.钉钉通知天气预报总结前言 早上出门上班前&#xff0c;我总是忘记查看天气预报&#xff0c;以至于通勤路上下雨来了个措手不及。 回想起来&#xff0c;大部分人早上出门前的行为模式是固定的&#xff0c;那么有…

一个基于stream的EPICS IOC应用程序

本文将介绍如何开发一个基于stream的EPICS IOC应用程序&#xff0c;其将作为一个简单的基于消息的设备&#xff08;用于EPICS stream练习的设备模拟程序_yuyuyuliang00的博客-CSDN博客中最后一个python程序模拟的设备)的IOC控制程序。 1&#xff09; 按如下步骤建立这个IOC程序…

vb+access大气污染模型系统

数据模型就是按专业的要求&#xff0c;用数字方式描述自然界的事物或现象以及他们的关系。 我们通过对地区的具体数值和情况的观察&#xff0c;对大气质量状况做出分析&#xff0c;建立一个符合当地情况的大气污染模型&#xff0c;用来测量大气污染浓度&#xff0c;并根据污染…

在公司兢兢业业5年,被新来的自动化测试倒挂了薪资…

去年年中朋友左思右想从工作了 5 年的企业离职&#xff0c;离职原因很简单&#xff0c;待疲了&#xff0c;薪资也没咋涨过&#xff0c;新来的自动化测试钱比 Ta 高一倍。但离职 Ta 还是很忐忑的&#xff0c;在这个公司待得久了&#xff0c;自己会的东西一直是那些&#xff0c;业…

Python3爬虫图片抓取

在上一章中&#xff0c;我们已经学会了如何使用Python3爬虫抓取文字&#xff0c;那么在本章教程中&#xff0c;将通过实例来教大家如何使用Python3爬虫批量抓取图片。注&#xff1a;该网站目前已经更换了图片的请求方式&#xff0c;以下爬虫方法只能作为思路参考&#xff0c;已…

【Linux】进程理解与学习-程序替换

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅 相关文章推荐&#xff1a; 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学…