easy excel 框架的常用功能。这是阿里推出的技术框架,可用来作为表单的导入、导出等功能。第一个就是基础的读表单功能。然后还可以对日期数字进行格式转换。第二个功能就是写表单功能。有特色的功能点包括,复杂头的写入,比如表单的头有多行。还有就是数字日期格式的转换。还有就是图片导出功能,就是让表格中包含图片的功能。还有动态头,可以在实时生成表格头字符串。第三个功能就是数据的填充。可以完成简单的填充
es 的应用场景第一个,就是日志实时分析。由于分布式系统中,服务众多,加上定时任务、消息等组件。造成日志文件非常多,且容量都很大,所以人工去查看日志就非常困难。es可以进行日志实时分析,简化了日志查看功能。第二个,就是搜索功能。比如电商商品数量众多,且商品规格参数文本众多,所以利用es的全文本搜索功能,可以提高搜索的速度,减少搜索时间,提高用户的体验。第三个,就是时序数据分析。比如云服务的监控,物
jdk17新特性文本块。3个双引号,可方便写jsonswitch 关键字有返回值,及其它变化record 关键字。方便了构造数据密封类。控制类的扩展性instanceof 关键字。helpful nullpointexception。空指针异常,显示精确行号日期格式化打印。数字精简格式化打印。简化 Stream.toList() 写法。
目前最流行的 activity 版本是5.22框架的核心是工作流引擎,框架同时包含bpmn组件activity 自带的数据库表结构,包含下面5种类型。通用数据表、组织结构表、规则表、运行时数据表、历史数据表通过bpmn组件的组合,可以绘制出流程图。而修改bpmn组件的属性,可以添加一些流程信息,例如审批人信息等代码实现包含,流程定义的部署、查看、删除、查询图片资料等一些常用api:流程定义的部署、
首先要开启慢查询日志。然后要分析慢查询日志,一般采用的关键字是explain。对于一些经常发生的关联查询,可以建立中间表,将查询结果集放到这个中间表中。这样就将关联查询转化为中间表的查询,提高了查询速度。一些高性能应用,往往对于关联查询进行拆分。就是将关联查询转化为单表查询。然后在程序内存中组合、计算结果集。对于偏移量很大的分页操作,使用LIMIT关键字,如LIMIT 10000, 20,会导致效
innodb的行级锁分为2种,分别是共享锁S、排它锁X。行级锁的算法有3种,分别是记录锁record-lock,范围锁gap-lock,记录和范围的融合锁next-key lock。死锁就是多个事务之间,对于同一个资源的争夺造成的。解决这个问题,可以用2种方案:第一个就是事务超时时间设置,一旦时间超时,事务将进行回滚。第二个就是等待图。innodb一般回滚undo量比较小的事务。锁的升级,就是行级
数据库读操作的3种问题对于事务A,读到了事务B未提交的数据。这种现象就是脏读。对于事务A,某一条数据读了2次数,结果两次读的结果不一致。这种现场就是不可重复读。对于事务A,执行某一条sql,结果两次数量不一致。这种现象就是幻读。mysql 默认的隔离级别是可重复读,避免了脏读、不可重复读。同时,使用next-key lock锁算法、间隙锁。避免了幻读。这样就达到了标准sql序列化的隔离级别。
一致性的原理:个人理解,一致性就是事务执行前后,数据在逻辑上都符合正常情况。想要保持一致性,一般有下面3种手段:第一,就是前面提到的原子性、持久性和隔离性。第二,就是数据自身带的一些参数校验,比如数据长度校验、数据类型校验。第三,就是从应用层面保持一致了。比如在银行账目系统中,保持账户的钱款平衡,那就是保持一致性了。
隔离性的原理:1.0隔离性是通过锁机制实现的。当一个事务修改数据时,需要先获取锁。其它事务要修改数据,必须等待之前的事务提交或者回滚,然后释放锁操作之后。myisam只支持表锁,innodb支持表锁和行锁。因为表锁比较影响性能,所以通常情况下,使用行锁就可以了。2.0隔离性的另外一个方面,就是一个事务修改数据,影响另外一个事务读取数据。这是通过 mvvc 模型实现的。mvvc模型,就是每行数据有个
原子性的原理:当事务执行失败,或者执行了rollback关键字。底层将读取undo log,将数据库回退到事务执行前的状态。undo log,保存的是sql执行时的相关信息。执行undo log相当于sql的反向操作。持久性的原理:由于缓存的存在,当数据库宕机时,带来了一致性的问题。所以有了redo log的存在。当数据库进行修改操作时,会先写入redo log,然后再写入缓存。事务提交时。数据库
事务必须遵循ACID这4个特性。分别代表原子性、一致性、隔离性、持久性。原子性就代表,事务的执行和回退是一个整体,事务中包含的sql要么全部执行,要么全部回退。一致性就是,事务执行前后,数据库都是处于一致性状态中。隔离性就是,事务在提交之前,对于其它事务都是不可见的。直到提交时。持久性就是,事务一旦发生提交,其提交结果就不会发生改变。即使发生数据库宕机,也不会改变。
为了防止用户异常调用接口,需要进行一些限流操作。常见的接口限流操作有如下方案。方案分为2种大的方面,分别是技术方面的和业务方面的。技术方案1,就是判断是不是重复的接口,然后限制这个接口调用的频率。例如京东的评价接口,同一个用户调用的最短时间定的是3秒钟。技术方案2,就是在应用的服务的前面,例如nginx服务器上进行频率配置。业务方案1,就是加入排队的场景,让用户进行等待。业务方案2,就是加入一些交
jwt 全拼是json web token。就是服务端给客户端一个加密的字符串。这个字符串中包含了一些信息,比如用户信息等。浏览器每次访问服务端时候,会携带这个字符串。然后服务的获取这个字符串后,通过解密,就可以获取携带的信息,比如用户信息等。这个加密的字符串,包含3部分内容,就是头部+负载+签名。下面分别介绍下这3部分的功能。头部部分,包含token类型和签名加密方式。负载部分,包含携带的信息。
在数据有序性方面。b+树索引,因为底层是有序排列的,所以支持范围查询、数据排序。hash索引,因为底层不是有序的,所有不支持范围查询、数据排序。在查询可预测方面。由于hash函数不可预测,hash不支持模糊查询及多列索引的最左匹配原则。在效率稳定性方面。b+树比较稳定。hash由于可能出现,大量相同key的hash冲突现象,导致效率降低很大。同时hash的等值查询会很快。所以hash的稳定性不佳。
b+树的一大优点就是高扇出性质,在数据库中,b+树的高度一般就是2到4,所以只需要2到4次io操作就可以查询到索引。因为现在一般的磁盘每秒至少可以做100次IO操作,2~4次的IO操作意味着查询时间只需0.02~0.04秒。在b+树中,所有数据记录节点都是按键值的大小顺序存放在同一层的叶子节点,各叶子节点通过指针进行链接。
mysql 存在两种储存引擎,分别是innodb和myisam。引擎的不同,导致了实现索引的方式的不同。myisam的索引结构也是采用b+树结构,叶子节点储存的是数据记录地址。其主索引和辅助索引的结构基本一致,区别就是主索引的key不能重复。数据搜索过程是,按照b+树的搜索算法,如果找到key,就找到data域中的地址,然后读取数据记录。innodb的索引结构也是采用b+树结构,叶子节点储存的是数
第一种就是,数据量较小的表,不需要建立索引。第二种就是,数据频繁更新的列,不建议建立索引。第三种就是,参与列计算的列,不建议建立索引。第四种就是,数据区分度不大的列,不建议建立索引。第五种就是,where条件语句种没有的列,不建议建立索引。
组合索引:未按照最左匹配原则。单列索引:索引列上进行了计算、函数、类型转换等。查询字段没有覆盖索引字段。增加了回表操作。像select * 可能导致此问题。查询字段使用了,通配符开头的LIKE,不等于<> !=,这些操作。查询条件使用OR关键字连接。
频繁进行查询条件的字段,可以创建索引。但是索引不可创建过多,会影响表数据更新速度。对于业务上有唯一要求的数据列,可以指定唯一索引。同时也可以提高查询速度。频繁进行分组或排序的字段,可以建立索引,加快分组或排序的速度。如果有多个字段,可以建立联合索引。一些注意点:数据量小的表不需要创建索引。因为可能会出现一种现象,就是查询数据的时间比遍历索引的时间还要短。不同值较多的列可以创建索引。但是不同值较少的
普通索引允许值重复,允许空值。唯一索引不允许值重复。对于特殊的唯一索引,主键索引是不允许空值的。索引按照字段数量,分为单列索引和组合索引。查询字段中满足最左匹配原则时,才会触发组合索引。其它的一些类型包括全文索引,以及空间索引。
索引是储存在磁盘上的数据结构。所有的列类型都可以加索引,索引的最主要目的是为了增加查询速度。常用的innodb储存引擎只支持btree索引。别的引擎例如heap会支持hash索引。索引的好处主要有4点。第一是增加查询速度。第二是唯一索引可以确保数据唯一性。第三是加快分组和排序的速度。第四是加快连表查询的速度。索引的坏处主要有3点。第一是索引会占用一些储存空间,甚至其空间会超过数据文件。第二是索引的
首先是类加载检查。然后是分配内存空间。然后将内存空间初始化为0。对象信息相关设置。然后调用init方法。
包含堆、方法区、程序计数器、本地方法栈、虚拟机栈。这就是运行数据区的几个部分。其中堆和方法区是线程共有的,其它数据区域是线程私有的。堆中存储对象数据。方法区中储存类信息、常量及静态变量等信息。方法栈中的栈帧和线程的寿命是一致的,储存方法执行时的相关常量,比如局部变量、方法出口这些。本地方法栈是本地方法相关,例如c++编写的内部方法。而虚拟机栈则是java方法相关。程序计数器保存下一条需要执行的字节
从是否具有连接上说,tcp是有的,udp是无的。从传输可靠性上说,tcp是可靠的,udp是最大努力可靠。从面向内容上说,tcp是面向字节流,udp是面向报文。从对应关系上说,tcp是一对一,而udp支持多对多及各种变化形式。从首部开销上说,tcp比较大为20,而udp比较小为8。
其是compare and swap的缩写,中文意思就是比较和交换。个人理解就是数据更新之前,需要进行一步比较操作。有3个值,ABV,分别表示预估的旧值、要更新的新值、值储存的位置。只有当A符合预期时,才会用B对V进行更新。产生的问题有ABA问题。可采用的优化方式是乐观锁。数据添加一个版本号,更新时版本号符合预期则更新成功。否则更新失败。
jdk1.7时,hashmap的实现原理是数组+链表,而且元素采用头插法。jdk1.8时,hashmap的实现原理转换为数组+链表/红黑树,当链表长度>8,且数组长度>64时,链表将转化为红黑树。而且元素的新增采用尾插法。之所以转为红黑树,是为了提高搜索效率。jdk1.7时,并发hashmap的原理是分段锁,不同的线程会锁一部分数据也就是segment,这样就减少了不同线程之间的竞争。
cms垃圾回收器的工作流程是,初始标记、并发标记、重新标记、并发清除。这4个流程中,初始标记和重新标记需要暂停工作线程。cms垃圾回收器的缺点是,对于服务器cpu比较敏感。然后是不能清理浮动垃圾。再然后由于其基于标记-清理算法,所以会产生大量的空间碎片。g1垃圾回收器在理念上抛弃了分代的概念,将内存空间分为大小相等的若干个区域。然后维护一个有限列表。根据系统配置的最大允许回收时间,优先回收垃圾最多
线程一般有6种状态,它们分别是新建、运行、阻塞、无限期等待、有限期等待、以及结束。新建,就是线程刚刚被创建,但是还没有调用start方法。运行,其实有两种状态,分别是就绪和运行中。阻塞,表示线程阻塞与锁。无限期等待,表示线程进入等待状态,需要其它线程做出通知或者动作,才能跳出该状态。有限期等待,超时等待状态,表示这个线程可以定时跳出该状态。结束,表示当前线程已经执行完毕。
相同点:(1)都是可重入锁(2)都保证了可见性和互斥性(3)都可以用于控制多线程对共享对象的访问不同点:(1)ReentrantLock等待可中断(2)synchronized中的锁是非公平的,ReentrantLock默认也是非公平的,但是可以通过修改参数来实现公平锁。(3)ReentrantLock绑定多个条件(4)synchronized是Java中的关键字是JVM级别的锁,而Reentra
使用 setnx 命令获取锁,然后使用expire命令,保证有个过期时间,让锁能够及时释放。setnx 的含义是,当要设置的key不存在时,那么这个字符串设置成功。否则,就会设置失败。它避免了重复执行命令,导致前值被覆盖的问题。
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号