Bootstrap

华为od(技术一面总结)

        我面的是od的python开发岗,有需要的同学可以参考一下。

首先是自我介绍,主要是让面试官对你有个整体的了解,讲一下会哪些技能,做过哪些项目等等。

下面就开始问一些八股文了

1、python中有哪些数据类型

整型、浮点型、布尔型、字符串、列表、元组、字典、集合

2、列表和元组有哪些差别

列表是一种可变的数据类型,可以使用 [] 进行创建, 元组是一种不可变类型,可以使用 () 进行创建,列表用于需要修改元素的场景,元组用于不需要对修改元素的场景。

3、python中的异常处理机制

python中主要是通过try-except语句来处理异常。

try-except语句

  • try:包含可能引发异常的代码。如果在try块中的任何地方抛出了异常,Python将立即跳转到匹配的except块,而try块内剩余的代码将不会执行。

  • except:用于捕获和处理特定类型的异常。可以指定捕获的异常类型,如果未指定则捕获所有异常。异常对象通常存储在变量 e 中,可以在 except 块中使用它来获取异常信息。

  • else(可选):在try块中没有引发异常时执行的代码。它通常用于处理没有异常时的额外逻辑。

  • finally(可选):无论是否发生异常,最终都会执行的代码块。通常用于清理工作,例如释放资源或确保某些操作的完成。

try:
    # 可能会引发异常的代码块
    # 如果异常发生,后续代码将不会执行
    pass  # 这里可以是任何可能引发异常的代码
except ExceptionType as e:
    # 异常处理代码块
    # 当try块中引发了指定类型的异常时执行
    # e为异常对象,包含异常信息
    pass  # 这里处理异常的逻辑
else:
    # 可选的else块
    # 当try块中没有引发异常时执行
    pass
finally:
    # 可选的finally块
    # 无论是否发生异常,最终都会执行
    pass

        使用raise语句可以引发一个指定的异常。它允许程序员在程序运行时主动生成异常,从而可以在特定情况下中断程序的正常执行流,并进入异常处理流程。

def validate_age(age):
    if age < 0:
        raise ValueError("Age cannot be negative")
    if age < 18:
        raise PermissionError("You must be at least 18 years old")
    return True

try:
    validate_age(-1)
except ValueError as e:
    print(f"ValueError: {e}")
except PermissionError as e:
    print(f"PermissionError: {e}")

4 、python中with语句的了解?

  with语句在Python中用于简化资源管理,确保资源在使用后被正确释放,例如文件、网络连接和锁。with语句的基本结构如下:

with context_manager as var:
    # 使用var进行一些操作
    pass

在这个结构中,context_manager是一个实现了上下文管理协议的对象。上下文管理协议包括两个方法:

  1. __enter__(self): 在进入with块时被调用。
  2. __exit__(self, exc_type, exc_val, exc_tb): 在退出with块时被调用,无论是否发生异常。

with语句用法

with语句最常见的用法之一是处理文件操作。使用with语句可以确保文件在使用完后被正确关闭。

# 写文件
with open('example.txt', 'w') as file:
    file.write('First line.\n')
    file.write('Second line.')

# 读文件
with open('example.txt', 'r') as file:
    content = file.read()
    print("File content after writing:")
    print(content)

# 追加文件
with open('example.txt', 'a') as file:
    file.write('\nAppended line.')

# 读文件
with open('example.txt', 'r') as file:
    content = file.read()
    print("File content after appending:")
    print(content)

可以通过实现__enter____exit__方法来创建自定义的上下文管理器。例如,下面是一个简单的计时器上下文管理器:

import time

class Timer:
    def __enter__(self):
        self.start = time.time()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.end = time.time()
        self.interval = self.end - self.start
        print(f'Elapsed time: {self.interval:.2f} seconds')

# 使用自定义上下文管理器
with Timer() as t:
    # 执行一些操作
    time.sleep(2)
# Elapsed time: 2.00 seconds

with语句通过简化资源管理和确保资源在使用后被正确释放,提高了代码的可读性和可靠性。

5、python中的多线程用法?

        在Python中,多线程可以通过threading模块来实现。多线程允许程序同时执行多个操作,提高程序的效率和响应速度。

import threading

# 定义线程要执行的函数
def print_numbers():
    for i in range(10):
        print(i)

# 创建线程对象
thread = threading.Thread(target=print_numbers)

# 启动线程
thread.start()

# 等待线程完成
thread.join()

        在多线程环境中,多个线程可能会同时访问共享资源,导致竞争条件和数据不一致问题。可以使用线程同步机制来解决这些问题,例如Lock

import threading

# 定义全局变量
counter = 0
lock = threading.Lock()

# 定义线程要执行的函数
def increment_counter():
    global counter
    for _ in range(1000000):
        with lock:  # 获取锁,使用with语句确保锁在使用后可以被释放
            counter += 1  # 访问共享资源

# 创建多个线程
threads = []
for i in range(2):
    thread = threading.Thread(target=increment_counter)
    threads.append(thread)
    thread.start()

# 等待所有线程完成
for thread in threads:
    thread.join()

print(f'Final counter value: {counter}')

下面就是手撕代码环节了

手撕代码是在力扣上做题,给我面试的面试官人还挺好,选了几道题,都是一步步开始加大难度。

刷了四道题,最后一道时间来不及,给了出题思路

35、205、347、494

参考连接

https://xxetb.xetslk.com/s/2fs2Vb

;