ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-11 09:02:57  阅读:149  来源: 互联网

标签:ps name 10 column 数据库 录取 索引 SELECT 百度


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

希望能帮到最近在找工作或者有跳槽想法的同学。全文共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】测试百度搜索框,举一些测试点的例子

可以参考下面

链接????:

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

一面部分到此结束

 

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

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

推荐阅读

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

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

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

 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有