知识点汇总(七)

我简历上的

1、mysql的sql执行计划:explain

explain select * from table where table.id = 1 运行上面的sql语句后你会看到,下面的表头信息:table | type | possible_keys | key | key_len | ref | rows | Extra

type这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL

const :表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。

ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免。

key实际使用的索引。

2、mysql优化:

1、读写分离(主、从分离)

2、数据量极大-----分库、分表、分区

1、选取最适用的字段属性(char)

MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

2、使用连接(JOIN)来代替子查询(Sub-Queries)

3、使用联合(UNION)来代替手动创建的临时表

4、开启事务保证数据安全,但是并发低。

5、锁定表(数据完整) 包含有WRITE关键字的LOCKTABLE语句可以保证在UNLOCKTABLES命令被执行之前,不会有其它的访问

6、使用外键(数据关联)锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。

7、使用索引(将用于JOIN,WHERE判断和ORDERBY排序的字段上,少重复)索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。FULLTEXT,HASH,BTREE,RTREE。

8、语句优化。例如like就会逐条比较。1.保证不查询多余的列与行。2、慎用distinct关键字去重

3.redis

Redis多种类型的value,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。jedis.hset("myhash","age","13"); jedis.hmset("myhash",map);


jedis.lpush("key1", "value1-0");

jedis.lpush("key1", "value1-1");

jedis.lpush("key1", "value1-2");  lrange key1 0 -1

jedis.sadd("key1", "value0");

jedis.sadd("key1", "value1");   smembers key1  set自带去重
redis的端口 6379-MERZ-意大利歌女

jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。

Jedis jedis =newJedis ("localhost",6379);

字符串值value关联到key。 jedis.set("key1", "value1");  jedis.del("key1");

1.Collection与Collections

1.1、java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

2、Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。Sort\Shuffling\Reverse\Copy

2. I/O多路复用  系统内核缓冲I/O数据

select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。

本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。

I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

3.处理异常,定义一个自定义异常类(继承运行时异常),重写构造方法,统一处理

4.如何设计接口:swagger,通过注解设置参数名,是否非必须Swagger

后端:

1、在pom.xml文件中添加第三方swagger依赖()swagger-spring-boot-starter

2、在Spring Boot项目的启动类上添加@EnableSwagger2Doc注解


@ApiOperation("创建用户") @ApiModelProperty("姓名") @NotNull @ApiParam("每页多少条")

前端:http://localhost:8080/v2/api-docs

5.多线程保证线程安全                        多线程

synchronized关键字,锁对象。悲观锁

Lock,手动的获取锁和释放锁。释放锁操作放在finally中,因为finally中的代码无论如何都是会执行的。

CAS,保证原子性。在这里采用了CAS操作,每次从内存中读取数据然后将此数据和+1后的结果进行CAS操作,如果成功就返回结果,否则重试直到成功为止。而compareAndSet利用JNI来完成CPU指令的操作。乐观锁

volatile     volatile关键字的作用就是保证了可见性和有序性(不保证原子性),如果一个共享变量被volatile关键字修饰,那么如果一个线程修改了这个共享变量后,其他线程是立马可知的。如果该共享变量被volatile修饰了,那么本次修改结果会强制立刻刷新到主存中,

6、分布式文件系统FastDFS详解

是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

  Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

  Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

7、Spring的7种事务传播行为类型(原子、一致、隔离、持久)

      事物配置中有哪些属性可以配置

(1)、事务的传播性:@Transactional(propagation=Propagation.REQUIRED) 

      如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)

(2)、事务的超时性:@Transactional(timeout=30) //默认是30秒 

      注意这里说的是事务的超时性而不是Connection的超时性,这两个是有区别的

(3)、事务的隔离级别:@Transactional(isolation = Isolation.READ_UNCOMMITTED)

      读取未提交数据(会出现脏读, 不可重复读) 基本不使用

(4)、回滚:

指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)

指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})

该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。

(5)、只读:@Transactional(readOnly=true)

该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。


1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘

3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。

5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

二. 隔离级别

 1. ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。     

2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它允许令外一个事务可以看到这个事务未提交的数据。

3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。

 4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

 5. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读

你可能感兴趣的:(知识点汇总(七))