该死,面试里怎么有那么多套路,我离字节跳动只有一步之遥

Posted 喜欢软测的小北葵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了该死,面试里怎么有那么多套路,我离字节跳动只有一步之遥相关的知识,希望对你有一定的参考价值。

1 .自我介绍

不要想着简历上都有为什么还要自我介绍,这里主要考查的是职者的表达能力和基本素质。重点体现自己的经历优势以及主动积极的态度。

  • 从业时间,教育背景,工作经验,擅长技能,你的性格。

 

  • 个人技能:关键词“会什么,做什么,怎么做,可以达到什么效果”

  • 项目经验:1、项目描述:讲企业关心的问题,如产品性质以及提供的服务或功能

                         2、岗位职责:STAR法则:情境(situation)、任务(task)、行动(action)、结果(result)重点体现自己的工作量和工作成果。

自我介绍不宜太长,也不要太简单,着重体现自己的优势和经验,控制在2分钟以内即可。

2 .Hr心理

Hr 到底在考察什么?

  • 求职者的动机与工作期望:双向选择:体现对职位兴趣很高

  • 求职者的仪表、性格、知识、能力、经验等特征

  • 考核笔试中难以获得的信息

  • 水分不真实区分真伪?

  • 软能力?

3 .面试原则

原则:真诚、不卑不亢、正能量、专业

4 .面试常规问题

离职原因

离职原因妥善处理,负面内容少表述,尽量要给人积极向上的感觉,让hr看到你会长期在这边工作的稳定感。

个人评价

可以罗列3-4点自身的性格优势,最好是与目标岗位信息相关的一些性格特点。如:“细心”,“耐心”,“抗压能力”“学习能力”,“沟通能力”等。

职场规划

考察职业素养,对自己的岗位和行业的认识,还有你跟他们公司岗位的匹配度。不建议做太长远的职场规划,不太现实的pass,可以说一下3-5年小目标。

你还有什么要问的吗?

考察求职者的主动思考能力,以及对公司职位的青睐性。

所以,这种问题一定要问,但是不要问太多,1-3个即可,体现自己对这份工作的热情和渴求度。

如:团队的现状,项目的现状,主要的业务等。

5 .高频技术问题

(1)项目和测试流程

——你是如何进行测试的?

——项目做了多久? 上家公司多少测试人员?多少开发?公司规模多大?

——具体分工?针对测试组成员

——项目业务? 敏捷开发模式?

——迭代版本? 每次迭代时间? 项目周期中你扮演的角色?你角色的重要性?

(2)公司测试工作怎么进行?

——bug生命周期

——bug记录里面包含哪些内容:

——提交bug开发不认,测试该怎么办?

——对于复现率不高的bug,

——前后端bug 定位问题

——影响深刻的bug

——计划?报告? 搞清楚内容! 关键/重点是什么?

(3)数据库linux相关

Linux需要准备的知识点:

最基本的基本的目标是熟悉常见的20个命令,比如find命令

熟悉vi,熟悉搭建测试环境。

问题:

——linux中jdk的环境变量修改在那个文件?

——部署tomcat环境,应用软件包放在那个目录下?

——查看日志的命令? 赋权?

数据库需要准备的知识点:增删查改、多表关联,子查询,左右连接

(4)测试工具相关

测试管理类工具(基本:权限管理系统,svn),功能测试

接口测试,性能测试工具,自动化测试工具。

最起码的要求是熟悉工具的使用、原理?

jmeter、selenium、appium是会简单的调用,还是可以应用到实际项目中去?

举例:

——你们的测试用例怎么进行管理的?(svn)

——你们公司用的什么缺陷管理工具?(禅道?)

关于自动化测试工具,性能测试工具,接口测试工具……

——你会编写脚本吗?

——性能测试工作的流程?

——关联有哪些方式?有什么区别?

——对于要获取的验证码是随机的,性能测试脚本怎么处理?

——你测试过程中又碰到什么性能问题吗? 怎么解决?

——你接口测试是怎么做的?

 互联网大厂面经DD

字节跳动高工面试:mysql查询重复数据sql

正文

作为后端开发,日常操作数据库最常用的是写操作和读操作。读操作我们下边会讲,这个分类里我们主要来看看写操作时为什么会导致 SQL 变慢。

刷脏页

脏页的定义是这样的:内存数据页和磁盘数据页不一致时,那么称这个内存数据页为脏页。

那为什么会出现脏页,刷脏页又怎么会导致 SQL 变慢呢?那就需要我们来看看写操作时的流程是什么样的。

对于一条写操作的 SQL 来说,执行的过程中涉及到写日志,内存及同步磁盘这几种情况。

这里要提到一个日志文件,那就是 redo log,位于存储引擎层,用来存储物理日志。在写操作的时候,存储引擎(这里讨论的是 Innodb)会将记录写入到 redo log 中,并更新缓存,这样更新操作就算完成了。后续操作存储引擎会在适当的时候把操作记录同步到磁盘里。

看到这里你可能会有个疑问,redo log 不是日志文件吗,日志文件就存储在磁盘上,那写的时候岂不很慢吗?

其实,写redo log 的过程是顺序写磁盘的,磁盘顺序写减少了寻道等时间,速度比随机写要快很多( 类似Kafka存储原理),因此写 redo log 速度是很快的。

好了,让我们回到开始时候的问题,为什么会出现脏页,并且脏页为什么会使 SQL 变慢。你想想,redo log 大小是一定的,且是循环写入的。在高并发场景下,redo log 很快被写满了,但是数据来不及同步到磁盘里,这时候就会产生脏页,并且还会阻塞后续的写入操作。SQL 执行自然会变慢。

写操作时 SQL 慢的另一种情况是可能遇到了锁,这个很容易理解。举个例子,你和别人合租了一间屋子,只有一个卫生间,你们俩同时都想去,但对方比你早了一丢丢。那么此时你只能等对方出来后才能进去。

对应到 Mysql 中,当某一条 SQL 所要更改的行刚好被加了锁,那么此时只有等锁释放了后才能进行后续操作。

但是还有一种极端情况,你的室友一直占用着卫生间,那么此时你该怎么整,总不能尿裤子吧,多丢人。对应到Mysql 里就是遇到了死锁或是锁等待的情况。这时候该如何处理呢?

Mysql 中提供了查看当前锁情况的方式:

通过在命令行执行图中的语句,可以查看当前运行的事务情况,这里介绍几个查询结果中重要的参数:

当前事务如果等待时间过长或出现死锁的情况,可以通过 「kill 线程ID」 的方式释放当前的锁。

这里的线程 ID 指表中 trx_mysql_thread_id 参数。

读操作

说完了写操作,读操作大家可能相对来说更熟悉一些。SQL 慢导致读操作变慢的问题在工作中是经常会被涉及到的。

慢查询

在讲读操作变慢的原因之前我们先来看看是如何定位慢 SQL 的。Mysql 中有一个叫作慢查询日志的东西,它是用来记录超过指定时间的 SQL 语句的。默认情况下是关闭的,通过手动配置才能开启慢查询日志进行定位。

具体的配置方式是这样的:

  • 查看当前慢查询日志的开启情况:

  • 开启慢查询日志(临时):

注意这里只是临时开启了慢查询日志,如果 mysql 重启后则会失效。可以 my.cnf 中进行配置使其永久生效。

存在原因

知道了如何查看执行慢的 SQL 了,那么我们接着看读操作时为什么会导致慢查询。

(1)未命中索引

SQL 查询慢的原因之一是可能未命中索引,关于使用索引为什么能使查询变快以及使用时的注意事项,网上已经很多了,这里就不多赘述了。

(2)脏页问题

另一种还是我们上边所提到的刷脏页情况,只不过和写操作不同的是,是在读时候进行刷脏页的。

是不是有点懵逼,别急,听我娓娓道来:

为了避免每次在读写数据时访问磁盘增加 IO 开销,Innodb 存储引擎通过把相应的数据页和索引页加载到内存的缓冲池(buffer pool)中来提高读写速度。然后按照最近最少使用原则来保留缓冲池中的缓存数据。

那么当要读入的数据页不在内存中时,就需要到缓冲池中申请一个数据页,但缓冲池中数据页是一定的,当数据页达到上限时此时就需要把最久不使用的数据页从内存中淘汰掉。但如果淘汰的是脏页呢,那么就需要把脏页刷到磁盘里才能进行复用。

你看,又回到了刷脏页的情况,读操作时变慢你也能理解了吧?

防患于未然

知道了原因,我们如何来避免或缓解这种情况呢?

首先来看未命中索引的情况:

不知道大家有没有使用 Mysql 中 explain 的习惯,反正我是每次都会用它来查看下当前 SQL 命中索引的情况。避免其带来一些未知的隐患。

这里简单介绍下其使用方式,通过在所执行的 SQL 前加上 explain 就可以来分析当前 SQL 的执行计划:

执行后的结果对应的字段概要描述如下图所示:

这里需要重点关注以下几个字段:

1、type

表示 MySQL 在表中找到所需行的方式。其中常用的类型有:ALL、index、range、 ref、eq_ref、const、system、NULL 这些类型从左到右,性能逐渐变好。

  • ALL:Mysql 遍历全表来找到匹配的行;

  • index:与 ALL 区别为 index 类型只遍历索引树;

  • range:只检索给定范围的行,使用一个索引来选择行;

  • ref:表示上述表的连接匹配条件,哪些列或常量被用于查找索引列上的值;

  • eq_ref:类似ref,区别在于使用的是否为唯一索引。对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用 primary key 或者 unique key作为关联条件;

  • const、system:当 Mysql 对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于 where 列表中,Mysql 就能将该查询转换为一个常量,system 是 const类型的特例,当查询的表只有一行的情况下,使用system;

  • NULL:Mysql 在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

2、possible_keys

查询时可能使用到的索引(但不一定会被使用,没有任何索引时显示为 NULL)。

3、key

实际使用到的索引。

4、rows

估算查找到对应的记录所需要的行数。

5、Extra

比较常见的是下面几种:

  • Useing index:表明使用了覆盖索引,无需进行回表;

  • Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤;

  • Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by,order by;

  • Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”。

对于刷脏页的情况,我们需要控制脏页的比例,不要让它经常接近 75%。同时还要控制 redo log 的写盘速度,并且通过设置 innodb_io_capacity 参数告诉 InnoDB 你的磁盘能力。

最后

提供一下免费的Java架构学习资料给大家,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

需要的朋友可以戳这里免费领取

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

以上是关于该死,面试里怎么有那么多套路,我离字节跳动只有一步之遥的主要内容,如果未能解决你的问题,请参考以下文章

字节跳动最爱考的前端面试题:CSS 基础

2019 字节跳动java面试笔试题 (含面试题解析)

去了字节跳动,回来聊一聊字节跳动的面试...

997页字节跳动Java面试真题解析火爆全网

四面字节跳动Java研发岗,最终拿下Offer,只有努力,方能成功

Java面试者的经历,吐血分享字节跳动的Java面试经验技巧