最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
BAT面试经验
实战系列:Spring全家桶+Redis等
其他相关的电子书:源码+调优
面试真题:
后来换种思路,考虑在执行数据插入之前先做数据表删除操作,然后再执行写入操作。因为自己臆想的是“数据插入的效率应该优于更新效率。”因此,决定对于该问题进行实际考察。
下面总结一下网络上针对该问题大家给出的观点。
- “不考虑主键变动,索引变动,触发器联动的情况下,
update
比Insert
效率高。” - 这个很难说,相关因素太多了:存储引擎类型、是否加索引(索引结构如B+树索引或者哈希索引、索引更新、聚集索引还是非聚集索引)、约束(如唯一性约束、外键约束等)…
还有提下三种插入语句(也有可能影响插入速度,从而难以判断插入快还是更新快):
MySQL中常用的三种插入数据的语句:
insert into
表示插入数据,数据库会检查主键,如果出现重复会报错;replace into
表示插入替换数据,需要表中有Primary Key
,或者唯一索引,如果表中已经存在数据,则用新数据替换,如果没有数据效果则和insert into
一样;- insert ignore表示,如果表中如果已经存在相同的记录,则忽略当前新数据。
SQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:
连接:(3)
发送查询给服务器:(2)
分析查询:(2)
插入记录:(1x记录大小)
插入索引:(1x索引)
关闭:(1)
如果我们每插入一条都执行一个SQL语句,那么我们需要执行除了连接和关闭之外的所有步骤N次,这样是非常耗时的,优化的方式有以下几种:
- 在每个
insert
语句中写入多行,批量插入;- 将所有查询语句写入事务中;
- 利用
Load Data
导入数据;
每种方式执行的性能如下。
InnoDB
给 MySQL
提供了具有事务(commit
)、回滚(rollback
)和崩溃修复能力(crash recovery capabilities
)的事务安全(transaction-safe
(ACID compliant)
)型表。InnoDB
提供了行锁(locking on row level
)以及外键约束(FOREIGN KEY constraints
)。
InnoDB
的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB
是一套放在 MySQL
后台的完整数据库系统,InnoDB
在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
最后
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,