2023.4.27彩智科技一面
java中常用的集合有哪些?
集合有两个接口 Collection map
collection 的下面包含list和set list是有序集合 set是无序集合
map存储的是key-value
arraylist 是list的主要实现类 底层有Object数组存储
Vector 是list的古老实现类 底层用Object数组存储 线程安全
arraylist和LinkedList的区别
ArrayList的扩容机制
- List:有序集合,元素可以重复。常见的实现类有 ArrayList、LinkedList 和 Vector。
- Set:无序集合,元素不可重复。常见的实现类有 HashSet、TreeSet 和 LinkedHashSet。
- Map:键值对映射集合,键不可重复,值可以重复。常见的实现类有 HashMap、TreeMap 和 LinkedHashMap。
线程安全的集合?
Fail-fast fail-safe
Vector HashTable CopyOnWriteArrayList
- ConcurrentHashMap:线程安全的哈希表,支持高并发访问和修改操作。
- CopyOnWriteArrayList:线程安全的列表,支持并发读取和写入,写入时会对整个数组进行复制,因此写入操作性能较低。
- CopyOnWriteArraySet:线程安全的集合,基于 CopyOnWriteArrayList 实现,支持并发读取和写入,写入时会对整个数组进行复制。
为每个方法添加了synchronized关键字,来实现的线程安全,锁住了整个对象。
sql优化
1.避免使用select*
2.分页优化
3.避免使用多表join
根据阿里巴巴开发者手册的规定,join表的数量不应该超过3个。
解决办法:
1.单表查询后在内存中自己做关联(拆分后的单表查询代码可复用性高,单表查询更有利于后续的维护)
2.数据冗余
4.建议不要使用外键与级联(对分库分表不友好)
5.选择合适的字段
a.将IP地址转换为整型数据
b.对于非负型的数据(如直增ID,整型IP,年龄)来说,优先使用无符号整型来存储
c.小数值类型(比如年龄、状态表示如0/1)优先使用TINYINT类型
d.对于日期类型来说,DateTime类型耗费空间更大且没有时区信息,建议使用Timestamp.
e.金额字段用decimal,避免精度丢失
f.尽量使用自增id作为主键
6.尽量用UNION ALL代替UNION
7.批量操作
8.Show Profile分析SQL执行性能
9.优化慢SQL
9.正确使用索引
a.选择合适的字段创建索引
1.不为NULL的字段
2.被频繁查询的字段
3.被作为条件查询的字段
4.频繁需要排序的字段
5.被经常频繁用于连接的字段
b.被频繁更新的字段应该慎重建立索引
c.尽可能的考虑建立联合索引而不是单例索引
d.注意避免冗余索引
e.考虑在字符串类型的字段上使用前缀索引代替普通索引
f.避免索引失效
g.删除长期未使用的索引
Sql执行顺序
基础Sql优化
查询SQL尽量不要使用select *,而是具体字段
避免在where子句中使用or来连接条件
使用varchar代替char
尽量使用数值替代字符串类型
查询尽量避免返回大量数据
使用explain分析你SQL执行计划
是否使用了索引及其扫描类型
创建name字段的索引
优化like语句:
字符串怪现象
索引不宜太多,一般5个以内
索引不适合建在有大量重复数据的字段上
where限定查询的数据
避免在索引列上使用内置函数
避免在where中对字段进行表达式操作
避免在where子句中使用!=或<>操作符
去重distinct过滤字段要少
where中使用默认值代替null
高级SQL优化
批量插入性能提升
批量删除优化
伪删除设计
提高group by语句的效率
复合索引最左特性
排序字段创建索引
删除冗余和重复的索引
不要有超过5个以上的表连接
inner join 、left join、right join,优先使用inner join
in子查询的优化
尽量使用union all替代union
————————————————
版权声明:本文为CSDN博主「笨笨杨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53601359/article/details/115553449
sql搭建集群
MySQL主从复制
springmvc
springboot
spring常见的注解
项目做了什么?
答的很差,后面说我水分太大