分享

百度内核数据研发一面凉经

本帖最后由 nettman 于 2024-3-11 09:04 编辑

1、上一份实习了4个月之后为什么不继续实习了?
2、我看你上一份实习主要是做机器学习是吧?你机器学习使用的是什么模型?
(1)具体调用哪些算法你有研究过吗?
(2)你的这个项目主要是做什么工作?
(3)是不是大概就是从数据库拿数据,然后对数据进行清洗,然后在进行自动化调度、自动化训练对吧?
(4)你数据库拿数据是使用sql拿吗,还是使用Python拿?
(5)mysql和heidisql的区别是什么?
(6)你实习当中最多的是使用python对吧
3、你这个大语言模型是调研还是在公司里面准备使用?
(1)那就是这个大语言模型已经使用上了对吧?
对,有嵌入系统

(2)你们这个大语言模型的问答主要是做什么问答?
代码提示、文档查询方面的

(3)面试官点评:这个相当于是大语言模型的使用
(4)你有使用过文心一言吗?你觉得文心一言和你们部署的大模型有什么差别?你有没有做过一些对比?
(5)写过shell脚本吗?linux使用过一些对吧?
4、SQL用的多吗?Python用的多?
5、有没有写过一些面向对象的Python脚本库?
6、数据库你用过哪些?
7、大数据你用过哪些?
8、你spark用过多长时间?
9、接下来是4道sql的题目
(1)100*(b-a)/a
(2)我想把查询出来最近7天的日期,返回值是一列,并且将最近的倒数第三天的日期返回在第一行,我要返回七行数据,并且第一行是第三天的日期。
  1. SELECT DATE_FORMAT(date_column, '%Y-%m-%d') AS recent_dates
  2. FROM your_table
  3. WHERE date_column >= CURDATE() - INTERVAL 7 DAY
  4. ORDER BY date_column DESC
  5. LIMIT 7;
复制代码




10、开始问一些关于SQL的问题
(1)你知道SQL的执行顺序是什么吗?
书写顺序:

SELECT -> DISTINCT ->  FROM -> JOIN -> ON ->  WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT

执行顺序:

FROM -> JOIN -> ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

执行顺序解释:

1.from 要做数据分析,得先有个表

2.join 一个表可能还不够,两个表甚至多个表都可以,关联条件啥也先不用,可以都来个笛卡儿积先

3.on 在诸多表左右连接后,设定两个表之间的关联键,把不符合条件的全部筛掉

4.where 上三步整合各表,形成一个统一大表;在此大表上,设置筛选条件

5.group by 把指定字段相同的行组合在一起,其余没有加入group by的字段,可以用聚合函数如max/min等合并

6.having 在group by了之后,再度指定筛选条件;注意where和having是不同的,主要在于中间多了group by

7.select 在行层面的处理暂告一段落,在列层面再来一波

8.distinct 指定字段去重

9.order by 指定字段排序,升降序

10.limit 指定哪些行

(2)窗口函数主要做什么?
窗口函数是OLAP函数,是对数据库数据进行实时分析处理。每条记录都要在此窗口内执行函数。

(3)你主要用过哪些窗口函数?
聚合、跨行取值、排名函数

(4)rank、row_number、dense_rank三者的区别?

jpg.png

(5)count(*)和count(列名)和count(1)的区别?
执行效果上:

count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略为NULL的值。
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略为NULL的值。
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
执行效率上:

列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优。
(6)你有使用过mysql索引吗?
(7)mysql如何查看索引?
查看表的索引:

show index from table_name(表名)
(8)写了一个sql,如何查看是否有命中索引?
MySQL提供了EXPLAIN语句来查看查询的执行计划,通过执行计划我们可以判断索引是否被命中。EXPLAIN语句可以使用以下方式执行:

explain select * from table_name where column_name='value';
执行上述语句后,MySQL会返回一张表,其中包含执行计划的相关信息。我们可以通过查看表中的一些字段来判断索引是否被命中。

根据返回的执行计划,我们可以采用以下几种方法来判断索引是否命中:

检查type字段:如果type字段的值是index或range,表示索引被命中;如果type字段的值是ALL,则表示索引未被命中。
检查possible_keys字段和key字段:如果possible_keys字段和key字段都不为空,且其值相同,表示索引被命中;如果possible_keys字段和key字段都为空,表示索引未被命中。
检查Explain Extra字段:如果Extra字段中包含Using index或Using where,表示索引被命中;如果Extra字段中包含Using temporary或Using filesort,表示索引未被命中。
(9)联合索引你知道吗?联合索引的匹配原则是什么?
联合索引(Compound Index)是一个包含多个列的索引。联合索引可以在多个列上同时进行查询优化,有助于提高多列查询的性能。在创建联合索引时,需要考虑列的顺序,因为索引的使用受到最左前缀原则的限制。

对于索引中的字段,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

11、问一些Python的问题
(1)Python的局部变量和全局变量?
全局变量:所有函数之外定义的变量
局部变量:函数内部定义的变量 或者代码块里的变量
1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。

(即声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,那么局部变量名字会覆盖全局变量名字。
  1. #[demo1]
  2. num = 100  
  3. def func():  
  4.     newValue = 123   #一个全新的局部变量newValue
  5.     print(newValue)  
  6. func()  #输出局部变量newValue 即新的局部变量
  7. #[demo2]
  8. num = 100  
  9. def func():  
  10.     num= 123  #声明一个全新的局部变量num,虽然名字和外界的全部变量相同 但是是新的一个变量且是局部有效的。屏蔽了外面的同名的全部变量
  11.     print(num)  
  12. func()  #输出局部变量num=123 即新的局部变量。
复制代码



(2)并发和并行的区别?(spark或者Python基本都会涉及这两个概念)
并发是指一个处理器同时处理多个任务。

并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。

并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。

来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。

(3)Python里面迭代器和生成器的理解?
生成器是一种特殊类型的迭代器,但它的定义更为简单,可以直接使用函数语法。

(4)Python当中yield关键词解释一下?(是和迭代器有关的)
(5)Python正则表达式当中match和search的区别是什么?
re.match(pattern, string):

这个方法从字符串的开头开始匹配模式。
只在字符串的开头位置进行匹配,如果字符串开头没有匹配的模式,则返回None。
适合用于检查字符串是否以特定模式开头。

  1. import re
  2. pattern = re.compile(r'\d+')
  3. result = pattern.match('123abc')
  4. if result:
  5.     print("Match found:", result.group())
  6. else:
  7.     print("No match at the beginning of the string.")
复制代码




这个方法在整个字符串中搜索匹配的模式。
可以在字符串的任意位置找到匹配,而不仅仅是在开头。
返回第一个匹配的对象,如果没有找到匹配的模式,则返回None。
  1. import re
  2. pattern = re.compile(r'\d+')
  3. result = pattern.search('abc123xyz')
  4. if result:
  5.     print("Match found:", result.group())
  6. else:
  7.     print("No match in the entire string.")
复制代码



(6)正则表达式当中的贪婪匹配和非贪婪匹配的区别?
贪婪匹配:

在贪婪匹配模式下,量词会尽可能多地匹配字符。例如,* 将匹配尽可能多的字符,+ 也会尽可能多地匹配,而 ? 会尽可能匹配。

  1. import re
  2. text = "abc123def456"
  3. pattern = re.compile(r'\d+')
  4. match = pattern.search(text)
  5. print(match.group())  # 输出: 123
复制代码


在上面的例子中,\d+ 是贪婪匹配,它尽可能多地匹配数字字符,因此匹配到了整个数字序列 “123”。

非贪婪匹配:

在非贪婪匹配模式下,量词会尽可能少地匹配字符。在量词后加上 ? 可以使其变成非贪婪匹配。

  1. import re
  2. text = "abc123def456"
  3. pattern = re.compile(r'\d+?')
  4. match = pattern.search(text)
  5. print(match.group())  # 输出: 1
复制代码



在上面的例子中,\d+? 是非贪婪匹配,它会尽可能少地匹配数字字符,因此只匹配到了第一个数字 “1”。
总体来说,贪婪匹配尽可能多地匹配字符,而非贪婪匹配尽可能少地匹配字符。这在处理模糊匹配时,特别是需要匹配最短或最长字符串时非常有用。

(7)类和面向对象的区别?
类(Class):

类是一种抽象的数据类型,是对相似对象的共同特征和行为的抽象描述。它定义了对象的属性(数据成员)和方法(成员函数)。
类可以看作是创建对象的模板或蓝图,它定义了对象应该具有的属性和行为。
类本身并不占用内存空间,而是通过类创建的对象占用内存空间。
示例代码:
  1. class Car:
  2.     def __init__(self, brand, model):
  3.         self.brand = brand
  4.         self.model = model
  5.     def drive(self):
  6.         print(f"{self.brand} {self.model} is driving.")
  7. # 创建一个Car类的对象
  8. my_car = Car("Toyota", "Camry")
  9. # 调用对象的方法
  10. my_car.drive()
复制代码




对象是类的实例,是类的具体实体。它是根据类的定义创建的,拥有类定义的属性和行为。
对象是具体的、实际存在的,占用内存空间。
一个类可以创建多个对象,每个对象都是独立的,拥有自己的属性值。
示例代码:
  1. class Person:
  2.     def __init__(self, name, age):
  3.         self.name = name
  4.         self.age = age
  5.     def speak(self):
  6.         print(f"{self.name} is speaking.")
  7. # 创建两个Person类的对象
  8. person1 = Person("Alice", 25)
  9. person2 = Person("Bob", 30)
  10. # 调用对象的方法
  11. person1.speak()
  12. person2.speak()
复制代码



总体而言,类是一种抽象的概念,描述了对象的属性和行为;而对象是类的实例,是具体存在的实体,拥有类定义的属性和行为。类和对象的使用使得代码更加模块化、可维护,同时提高了代码的重用性。

(8)Python当中在写class的时候,有一个self,这个你见过吗?
(9)dataframe当中如果要查看所有的数据要怎么写?
在使用 pandas 库中的 DataFrame 时,要查看所有的数据,可以使用 print() 函数或直接输入 DataFrame 的名称。如果 DataFrame 中的数据量较大,为了方便查看,可以使用以下方法:

使用 print() 函数:

  1. import pandas as pd
  2. # 假设 df 是你的 DataFrame
  3. df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
  4. # 使用 print() 函数查看所有的数据
  5. print(df)
复制代码



# 使用 print() 函数查看所有的数据
print(df)
(10)Python当中的异常,try,catch
(11)python当中异常,如果想定位到具体的哪一行报错了,我需要怎么办?
查看异常信息:
当程序发生异常时,Python会打印出异常信息,包括异常的类型、描述以及发生异常的行号。例如:

  1. try:
  2.     # 你的代码
  3. except Exception as e:
  4.     print(f"An error occurred: {e}")
复制代码


在异常信息中,会有类似于 File "your_file.py", line 10 的信息,其中 your_file.py 是发生异常的文件名,而 line 10 是异常发生的行号。通过这些信息,你可以迅速定位到具体报错的位置。

使用调试器:你可以使用Python的调试器(如pdb)来逐行执行代码并查看每一步的执行情况。在发生异常的地方设置断点,然后逐步执行,直到发现报错的行。以下是一个简单的例子:

  1. import pdb
  2. try:
  3.     # 你的代码
  4. except Exception as e:
  5.     pdb.post_mortem()
复制代码


当异常发生时,程序会停在异常发生的地方,然后你可以使用调试器命令(如 n 表示下一步,c 表示继续执行,等等)来逐步查看代码的执行过程。

使用日志记录:在程序中添加适当的日志记录语句,以便在运行时查看程序执行的详细信息。通过查看日志,你可以了解程序执行到哪一步时发生了异常。例如:

  1. import logging
  2. logging.basicConfig(level=logging.DEBUG)
  3. try:
  4.     # 你的代码
  5. except Exception as e:
  6.     logging.exception("An error occurred")
复制代码




运行后,你可以查看日志输出,找到异常发生的位置。

注:面试官想要招一个写Python脚本和pyspark的人,周五中午HR突然打电话问了一下基本情况,下午就一面,比较突然,没啥准备,也是自己基础不行。

最新经典文章,欢迎关注公众号

福利
我录制了8套面试视频,其中一套是大家常见的问题该如何回答,回答标杆和思路是什么,有30节课,视频时常10-30分钟之间。看了此套视频可以让我们少走几个月的弯路。视频里面总结了几年的接触面试者的经验。

这套视频收费499元,很多学员因为这套视频,拿到了offer。相信在我们的求职路上能有很多帮助,可以让我们学到面试的捷径和方法。

这是第一次公开我们内部的视频,想快速拿到offer,找到面试方法论,加微信w3aboutyun或者扫描上述二维码领取此套视频。


面试常问30个问题回答标杆和思路【一套视频】

1.自我介绍如何让自己更有竞争力

2.如何根据不同的岗位,挖掘自己的特质来回答优缺点

3.最能概括自己的三个标签,该如何如何回答

4.平时都喜欢什么,该如何带有价值,让面试官出乎预料

5.该如何寻找合理理由,回答为什么选择贵公司

6.谈薪资内幕和技巧

8.大学成绩不好,该如何找补

9.缺乏经验,该如何说服企业相信你可以胜任工作

10选择你的原因是什么?有哪些和岗位匹配的独特之处

11.回答好职业规划,需要解决哪三个问题

12.不认可领导的想法,怎么处理,我来告诉你回答标杆

13.面对工作和生活的冲突,该如何处理周全

14.还应聘了哪些公司,该如何回答周全,忌回答多个不同领域

15.问题陷阱,你希望和什么样的领导共事

16.普通学校学历弱势,该如何回答拿到offer

17.人生受挫的事情是什么,回答中该如何带有价值

18.面对同事孤立、矛盾,我们该如何处理

19.面试关注过程、成长,比关注结果更容易拿到offer

20.为什么你现在还没有找到工作,该如何高价值回答

21.如何辩证+价值的方式去回答对跳槽的看法

22.谈谈父母的影响,如何根据自己的情况来回答出和工作关联度强的亮点

23问题陷阱:你想过创业吗? 该如何回答实现合理避坑

24.如何弥补工作失误造成的损失,该如何回答更合理

25离职原因,回答的标准思路以及相对理由切忌冲突

26.朋友对你的评价,回答的原则是什么

27.天坑问题,被录用了,发现不适合这个职位,你怎么办

28.谈过去成功项目、案例,需注意谈收获

29.如何打太极合理回答如果应聘的大公司和我们公司同时发offer,你会如何选择

30.你对我们有什么问题,处理的原则和可以提问哪些问题举例

31面试中不要带着学生思维进入社会,不要老想着回答问题,而是响应问题

领取微信


作者:糖醋_诗酒


作者:susie_wen




加微信w3aboutyun,可拉入技术爱好者群

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条