百度一面只问了这10个问题,我被录取了!

Posted 程序员二黑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度一面只问了这10个问题,我被录取了!相关的知识,希望对你有一定的参考价值。

最近看到网上的一份百度面经,里边的题目都很经典。虽然是测开实习面试题,但是很多都和和社招是一样的,甚至和百度、美团、阿里的面试题重合度也都很高。

希望能帮到最近在找工作或者有跳槽想法的同学。全文共8000字,一次性没时间看完的话,强烈建议收藏起来!

好了话不多说,开始正题。

面试题截图:

百度4.26一面(电话面试)答案

【题目1】自我介绍

【题目2】了解数据库吗,怎么登录数据库 ?

终端命令行访问数据库:

  • Windows下的终端工具有:cmd、powershell 等;

  • Linux(没有安装图形界面的系统)本身就是命令行交互界面,可直接敲击命令;

  • MacOS下的终端工具有:终端、iTerm2 等;

终端下连接数据库的命令:

mysql -h {数据库主机ip地址} -P {数据库端口号} -u{用户名} -p{密码}
  • -h:数据库主机ip地址

  • -P:数据库端口号

  • -u:用户名

  • -p 密码

示例:

数据库管理工具访问数据库

常用的数据库管理工具有:Navicate、sqlyog、workbench、phpMyAdmin 等等。


利用代码访问数据库

Java:jdbc连接;

Python:pymysql、MySQLdb等;

【题目3】怎么查询数据库的前五条数据、更新数据表中的一条数据、删除一个数据库 ?

1、查询数据库的前五条数据:

// 语法:SELECT * FROM {table_name} LIMIT {n};

示例:获取a_table表中前5条数据

mysql> SELECT * FROM test_db.a_table LIMIT 5;
+------+----------+--------+
| a_id | a_name   | a_desc |
+------+----------+--------+
|    1 | ZhangSan | 111111 |
|    2 | LiSi     | 222222 |
|    3 | WangWu   | 333333 |
|    4 | ZhaoLiu  | 444444 |
|    5 | SunZi    | 555555 |
+------+----------+--------+
5 rows in set (0.00 sec)

2、更新数据表中的一条数据:

// 语法:
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

示例:将 a_table 表中 LiSi 改名成:LiSiGou

# 更新语句
mysql> UPDATE test_db.a_table SET a_name='LiSiGou' WHERE a_id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 查询已经更改
mysql> SELECT * FROM test_db.a_table;
+------+----------+--------+
| a_id | a_name   | a_desc |
+------+----------+--------+
|    1 | ZhangSan | 111111 |
|    2 | LiSiGou  | 222222 |
|    3 | WangWu   | 333333 |
|    4 | ZhaoLiu  | 444444 |
|    5 | SunZi    | 555555 |
|    6 | GuoBa    | 888888 |
|    7 | SongJiu  | 999999 |
+------+----------+--------+
7 rows in set (0.00 sec)

3、删除一个数据库:

SQL DROP DATABASE 语句用于删除现存的数据库。

# 语法
DROP DATABASE DatabaseName;

无论任何时候,RDBMS 中数据库的名字都应该是唯一的。

示例:

如果你想要删除数据库 ,那么 DROP DATABASE 语句应该这么写:

SQL> DROP DATABASE testDB;

注意:执行数据库删除操作应当十分谨慎,因为数据库一旦删除,存储的所有数据都会丢失。

删除任何数据库之前,请确保你有管理员权限。数据库删除之后,你可以在数据库列表中看到变化:

SQL> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | AMROOD             |
    | TUTORIALSPOINT     |
    | mysql              |
    | orig               |
    | test               |
    +--------------------+
    6 rows in set (0.00 sec)

【题目4】两个表之间的查询有哪些方式,说一下外连接 。

1、两个表之间的查询有哪些方式:

连接查询主要分为三种

内连接:join,inner join

外连接:left join,left outer join,right join,right outer join,union

交叉连接:cross join

2、外连接:

LEFT JOIN 语法:

LEFT JOIN 等价于 LEFT OUTER JOIN

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

在这里插入图片描述
RIGHT JOIN 语法:

RIGHT JOIN 等价于 RIGHT OUTER JOIN

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

或:

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

UNION 语法:

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。

列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

UNION:结果显示不重复

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION ALL:结果显示允许重复

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

【题目5】说一下你对数据库索引的了解(回答了五种索引、B+树实现索引的优点、聚集索引与非聚集索引);又问了索引的作用、应用场景,在什么情况下需要给一个字段添加索引 。

1、对数据库索引的了解:

索引是帮助MySQL高效获取数据的数据结构。就好比看一本书,我们想查找某一页的内容,最快的方式就是通过目录去查找,索引也是如此,可以提高数据库的查询效率。

MySQL数据库的索引类型大致可以分为以下几种:

  • 普通索引:仅加速查询

  • 唯一索引:加速查询 + 列值唯一(可以有null)

-主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

  • 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

  • 全文索引:对文本的内容进行分词,进行搜索

而索引方法有以下几种:

1. FULLTEXT

即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。

全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。

2. HASH

由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。

HASH索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效,对于范围查询、排序及组合索引仍然效率不高。

3. BTREE BTREE索引

就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。

4. RTREE RTREE

在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。

相对于BTREE,RTREE的优势在于范围查找。

2、索引的作用:

索引是一种数据结构,作用就是发挥这种数据结构的作用,加快查询的效率。例如:InnoDB存储引擎中使用的是就是B+树这种数据结构来组织索引。

3、索引的应用场景:

适合创建索引的场景:

  • 在经常需要搜索的列上,可以加快搜索的速度。

  • 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。

  • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度。

  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。

  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。

  • 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

不适合创建索引的场景:

  • 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

  • 对于那些只有很少数据值(唯一性差)的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

  • 对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。

  • 当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

4、在什么情况下需要给一个字段添加索引:

数据库建立索引常用的规则如下:

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引;

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

7、复合索引的建立需要进行仔细分析,尽量考虑用单字段索引代替:

【题目6】Linux命令,怎么监听一个文件的变化(没答上来) 。

可采用watch和tail命令:

tail:

tail本身的功能是显示文件的后多少行。

# 显示filename后几行(默认是10行)
tail filename

# 显示filename后n行
tail -n filename

# 动态显示文件末尾
tail -f filename

watch:

而且watch的原理就是重复的执行后面的命令,默认的时间间隔是2秒.

如:

watch -d -n 10 cat /etc/syslog.conf

每10秒打印一下/etc/syslog.conf文件, -d 表示高亮变化的部分。

这两个命令在监控日志文件的时候相当有用。

【题目7】怎么查看一个端口是否启动(netstat)?怎么查一个进程是否存在(ps)?怎么查看一个文件里的内容(回答了cat、more、less、head、tail) ?

1、查看一个端口是否启动(netstat):

linux查看端口状况的命令:netstat

netstat --tunlp
 
netstat -aon

但是Mac系统这个命令不能用,
可以使用lsof

lsof -nP -i:8000
 
lsof -i tcp:8000

2、查一个进程是否存在(ps):

ps   命令查找与进程相关的PID号:
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定”A”参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。

# 常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。
ps aux | grep program_filter_word,ps -ef |grep tomcat

# 显示出所有的java进程,去处掉当前的grep进程。
ps -ef|grep java|grep -v grep

linux下查看文件内容有多种方法,常用的命令有 cat、more、less、vi(vim)、head 和 tail。

  • cat:打印文件内容。
  • more:可以分页显示文件内容。
  • less:也可以分页显示文件内容,但功能比more要更丰富。
  • vi(vim):文本编辑工具,可以修改文件内容,也可以创建并编辑文件。
  • head:查看文件开头内容。
  • tail:查看文件结尾内容。

总结:

  • 若要编辑文件,当然是用vim了;不要用vim打开大文件,那样会特别慢;
  • 若只是查看文件内容,more和less是不错的选择。特别对于大文件,打开速度非常快。less命令的好处是能够提供查找高亮;
  • 如果用于从文件中提取内容,首选cat。使用重定向,按照某种固定的规则将文件内容输出到指定文件中。如果文件特别大,也可考虑head和tail,只输出最早或者最近的几行。特别值得一提的是tail -f [文件名],可以实时监控文件的内容。

【题目8】用linux去连接另一台机器,怎么测试两台机器是否连通(回答了ping)

一般常用五种方式:
ping:最常用的网络探测命令,通过发送网络心跳包,来简单验证服务器之间是否网络互通,但是假如说服务器禁ping,则无法通过ping来验证网络是否互通。

# 用法:
ping {host或ip}

telnet:telnet为用户提供了在本地计算机上完成远程主机工作的能力,因此可以通过telnet来测试端口的连通性。

# 用法:
telnet ip port

wget:wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。

# 用法:
wget ip:port

ssh:SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,在linux上可以通过ssh命令来测试端口的连通性。同时这个命令也常常作为本地终端访问远端服务器的连接命令。

# 用法
ssh -v -p port username@ip

curl:curl是利用URL语法在命令行方式下工作的开源文件传输工具。也可以用来测试端口的连通性。

curl ip:port

【题目9】了解git吗,说一下它是干嘛的,怎么将代码从远程拉到本地,以及将本地代码提交上去?

git是一个开源的分布式版本控制系统,可以有效、高速地处理项目版本管理,常常用于企业代码托管。

1、git将代码从远程拉到本地:

git clone 代码仓库地址

2、提交代码

# 提交到本地暂存区
git add .

# 提交到本地仓库,并创建commit信息
git commit -m "提交修改"

# 提交到远程仓库
git push


【题目10】浏览器从输入url到返回页面经过了什么过程?怎么看返回页面的参数、接口?(开发者工具)

  • DNS 解析:将域名解析成 IP 地址

-TCP 连接:TCP 三次握手

  • 发送 HTTP 请求

  • 服务器处理请求并返回 HTTP 报文

  • 浏览器解析渲染页面

  • 断开连接:TCP 四次挥手


【题目11】http请求的方法有哪些?(只回答了get和post。。)说一下get和post的区别。

http常用请求方法:

GET和POST的区别:

  1. GET请求的含义是请求从服务器获取资源(可以是静态的文本、页面、图片视频等),POST请求的含义是向服务器提交数据,表示向服务器申请创建新的资源或对已有的资源进行修改。
  2. GET请求将请求参数拼接到URL上进行参数传递,而POST则是将请求参包装到HTTP报文的请求体(body)中。
  3. 从请求的大小看,GET请求的长度受限于浏览器和服务器对URL长度的限制,
  4. 按照REST规范,GET请求是幂等的,即读取同一个资源,总是得到相同的数据,而POST请求不是幂等的,因为每次请求对资源的改变并不是相同的;进一步讲,GET请求一般不会改变服务器上的资源,而POST请求会对服务器资源进行改变。
  5. GET请求因为是读取资源,是幂等的,就可以对GET请求的数据做缓存。而POST请求是向服务器申请创建新的资源或对已有的资源进行修改,不是幂等的,因此也就不能做缓存。以下订单场景为例,如果POST请求可被浏览器缓存,那么当下单这个操作就可以不向服务器发请求,而直接返回本地缓存的“下单成功界面”,却又没有真的在服务器进行下单,这是不合逻辑的。

【题目12】算法题:单链表查找倒数第N个节点

可以参考下面

链接🔗:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/solution/mian-shi-ti-22-lian-biao-zhong-dao-shu-di-kge-j-11/

【题目13】说一下测试方法有哪些

测试方法主要可分为黑盒测试和白盒测试。

黑盒测试的测试方法主要包括:

等价划分类、边界值法、因果图法、判定表法、场景法、正交实验设计法、错误推断法、功能图分析法等。

白盒测试的测试方法主要包括:

语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖等。

【题目14】如果一个项目明天要上线了,但是你今天没测试完,你会怎么做。

(一开始我回答我会加班处理,面试官又问如果加班也是解决不完的呢,我回答我会申请能不能推迟一下上线时间,为我的工作尽可能争取时间,面试官又追问,然后呢,那如果还是完不成呢,我弱弱的回答,我可能会向项目组其他同事寻求帮助,来商量对策,面试官终于停止了追问。。)

【题目15】测试百度搜索框,举一些测试点的例子

可以参考下面

链接🔗:https://blog.csdn.net/qq_40955824/article/details/89715166

【题目16】最后你有什么问题要问我吗?

一面部分到此结束

下面分享一下学习资料

这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

关注我的微信公众号【程序员二黑】就可以免费获取了!

总之,学习如逆水行舟,不进则退。想要多高的薪资,就要付出多大的努力。

也祝大家可以顺利找到心仪的工作!

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救

大学毕业开始销售…不甘于现状,转行测试的自救之路

从工地实习月薪3K到一线企业年薪30W,我追上了那个曾经被赋予厚望的自己

以上是关于百度一面只问了这10个问题,我被录取了!的主要内容,如果未能解决你的问题,请参考以下文章

欢聚时代一面

面试Java遇上985学历,没想到我被录用了

直击程序员面试现场:百度面试官都问了我些啥?

百度面试——算法岗

太现实了!springbatch读取大文件

阿里神马搜索—算法一面