对,有嵌入系统
代码提示、文档查询方面的
SELECT DATE_FORMAT(date_column, '%Y-%m-%d') AS recent_dates FROM your_table WHERE date_column >= CURDATE() - INTERVAL 7 DAY ORDER BY date_column DESC LIMIT 7;
书写顺序:
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 指定哪些行
窗口函数是OLAP函数,是对数据库数据进行实时分析处理。每条记录都要在此窗口内执行函数。
聚合、跨行取值、排名函数
执行效果上:
执行效率上:
查看表的索引:
show index from table_name(表名)
MySQL提供了EXPLAIN语句来查看查询的执行计划,通过执行计划我们可以判断索引是否被命中。EXPLAIN语句可以使用以下方式执行:
explain select * from table_name where column_name='value';
执行上述语句后,MySQL会返回一张表,其中包含执行计划的相关信息。我们可以通过查看表中的一些字段来判断索引是否被命中。
根据返回的执行计划,我们可以采用以下几种方法来判断索引是否命中:
联合索引(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的顺序可以任意调整。
1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义了一个局部变量,不管全局域中有没有该变量名,函数中使用的将是局部变量。
(即声明了一个新的局部变量。如果这个变量名字和全部变量名字相同,那么局部变量名字会覆盖全局变量名字。
#[demo1] num = 100 def func(): newValue = 123 #一个全新的局部变量newValue print(newValue) func() #输出局部变量newValue 即新的局部变量 #[demo2] num = 100 def func(): num= 123 #声明一个全新的局部变量num,虽然名字和外界的全部变量相同 但是是新的一个变量且是局部有效的。屏蔽了外面的同名的全部变量 print(num) func() #输出局部变量num=123 即新的局部变量。
并发是指一个处理器同时处理多个任务。
并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。
来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。
生成器是一种特殊类型的迭代器,但它的定义更为简单,可以直接使用函数语法。
re.match(pattern, string)
:
import re pattern = re.compile(r'\d+') result = pattern.match('123abc') if result: print("Match found:", result.group()) else: print("No match at the beginning of the string.")
re.search(pattern, string)
:
import re pattern = re.compile(r'\d+') result = pattern.search('abc123xyz') if result: print("Match found:", result.group()) else: print("No match in the entire string.")
贪婪匹配:
import re text = "abc123def456" pattern = re.compile(r'\d+') match = pattern.search(text) print(match.group()) # 输出: 123
在上面的例子中,\d+
是贪婪匹配,它尽可能多地匹配数字字符,因此匹配到了整个数字序列 “123”。
非贪婪匹配:
import re text = "abc123def456" pattern = re.compile(r'\d+?') match = pattern.search(text) print(match.group()) # 输出: 1
总体来说,贪婪匹配尽可能多地匹配字符,而非贪婪匹配尽可能少地匹配字符。这在处理模糊匹配时,特别是需要匹配最短或最长字符串时非常有用。
类(Class):
示例代码:
class Car: def __init__(self, brand, model): self.brand = brand self.model = model def drive(self): print(f"{self.brand} {self.model} is driving.") # 创建一个Car类的对象 my_car = Car("Toyota", "Camry") # 调用对象的方法 my_car.drive()
对象(Object):
示例代码:
class Person: def __init__(self, name, age): self.name = name self.age = age def speak(self): print(f"{self.name} is speaking.") # 创建两个Person类的对象 person1 = Person("Alice", 25) person2 = Person("Bob", 30) # 调用对象的方法 person1.speak() person2.speak()
总体而言,类是一种抽象的概念,描述了对象的属性和行为;而对象是类的实例,是具体存在的实体,拥有类定义的属性和行为。类和对象的使用使得代码更加模块化、可维护,同时提高了代码的重用性。
在使用 pandas 库中的 DataFrame 时,要查看所有的数据,可以使用 print()
函数或直接输入 DataFrame 的名称。如果 DataFrame 中的数据量较大,为了方便查看,可以使用以下方法:
使用 print()
函数:
import pandas as pd # 假设 df 是你的 DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 使用 print() 函数查看所有的数据 print(df)
当程序发生异常时,Python会打印出异常信息,包括异常的类型、描述以及发生异常的行号。例如:
try: # 你的代码 except Exception as e: print(f"An error occurred: {e}")
在异常信息中,会有类似于 File "your_file.py", line 10
的信息,其中 your_file.py
是发生异常的文件名,而 line 10
是异常发生的行号。通过这些信息,你可以迅速定位到具体报错的位置。
import pdb try: # 你的代码 except Exception as e: pdb.post_mortem()
当异常发生时,程序会停在异常发生的地方,然后你可以使用调试器命令(如 n
表示下一步,c
表示继续执行,等等)来逐步查看代码的执行过程。
import logging logging.basicConfig(level=logging.DEBUG) try: # 你的代码 except Exception as e: logging.exception("An error occurred")
运行后,你可以查看日志输出,找到异常发生的位置。
注:面试官想要招一个写Python脚本和pyspark的人,周五中午HR突然打电话问了一下基本情况,下午就一面,比较突然,没啥准备,也是自己基础不行。
#面经#