其他分享
首页 > 其他分享> > 百度一面只问了这10个问题,我被录取了!

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

作者:互联网

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

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

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

面试题截图:

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

【题目1】自我介绍

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

终端命令行访问数据库:

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

mysql -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)+ 表中只有一个

而索引方法有以下几种:

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、索引的应用场景:

适合创建索引的场景:

不适合创建索引的场景:

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。

总结:

【题目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到返回页面经过了什么过程?怎么看返回页面的参数、接口?(开发者工具)

-TCP 连接: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】测试百度搜索框,举一些测试点的例子

可以参考下面

链接????:

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

一面部分到此结束

 

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

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

推荐阅读

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

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

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

 

标签:ps,name,10,column,数据库,录取,索引,SELECT,百度
来源: https://blog.51cto.com/u_15090928/3035310