一、MySQL调优
1.避免使用select * ,最好使用列名。实测,速度快很多
2.加索引
1.主键索引
alter table 表名 add primary key(列名);
2.唯一索引
alter table 表名 add unique(列名);
3.普通索引
alter table 表名 add index 索引名(index_name) (列名);
4.全文索引
alter table 表名 add fulltext (列名);
5.联合索引
alter table 表名 add index 索引名(index_name) (列名1,列名2.......);
需遵守最左前缀法则
3.查询一条数据时,加limit 1
4.查询时,between and比in效率要高
5.where条件后加表达式
6.在 where 条件后使用 or 来连接条件,如果or连接的条件有一方没有索引,则导致索引失效而进行全表扫描
二、数据库引擎
InnoDB 引擎:InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁(默认)、表级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。
MyIASM 引擎:MySQL 的默认引擎,但不提供事务的支持,只支持表级锁。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count(*) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。
区别:
InnoDB:支持表级锁和行级锁,开销大、加锁慢、会出现死锁、锁粒度小、锁冲突低、并发度高
MyIASM:支持表级锁,开销小、加锁快,不会出现死锁,锁粒度大、锁冲突高、并发度低
三、前后端项目打包
前端:npm run build 生成dist文件
后端:java -jar jar包名称
Linux查看jar包进程命令:ps aux |grep xxx.jar
四、怎样让依赖不生效
加入<exclusion></exclusion>
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase</artifactId> <version>0.94.17</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
五、怎样让接口不被第三方随意访问
可以使用AOP切面编程,在访问接口之前,进行token或其它判断
六、判断一个字符串中每个字符出现的次数
String a = "asfas98asdasdn@%^&(sdfs123123";
Map<Character, Integer> map = new HashMap<>();
char[] chars = a.toCharArray();
for (int i = 0; i < chars.length; i++) {
boolean b = map.containsKey(chars[i]);
if (!b) {
map.put(chars[i], 1);
} else {
Integer integer = map.get(chars[i]);
integer = integer + 1;
map.put(chars[i], integer);
}
}
System.out.println(map);
String str="123asdaer1w四四@#$#!123was";
int[] count=new int[str.length()];//每个字符出现的次数
String b=new String();//存储去除重复之后的字符串
for(int i=0;i<str.length();i++){
if(!b.contains(String.valueOf(str.charAt(i)))){
b+=String.valueOf(str.charAt(i));
}
else{
for(int j=0;j<b.length();j++){
if(str.charAt(i)==b.charAt(j)){
count[j]++;
}
}
}
}
System.out.println("原字符串str:");
System.out.println(str);
//System.out.println(b);
for(int i=0;i<b.length();i++){
System.out.println(b.charAt(i)+":出现的次数:"+(count[i]+1));
}