Резюме часто задаваемых вопросов для интервью с крупными заводами, набирающими персонал весной 2022 г.

Оригинальная публичная учетная запись WeChat: [ Xiaohong Xingkong Technology ]

Заявление об авторских правах : Оригинальность не так проста, эта статья запрещает плагиат, перепечатку и нарушение прав, которые необходимо расследовать!

1. Python (бэкэнд/сервер/алгоритм/разработка тестов)

Субъективные вопросы:

  • Самостоятельное введение
  • Введение в проект, будут задавать вопросы о деталях
  • Где ваши сильные стороны?
  • В чем Ваша слабость?
  • Какие у тебя хобби?
  • С какими проблемами вы столкнулись в проекте и как вы их решили?
  • Есть ли у вас предложения от других компаний?
  • Приведите пример вашего баланса
  • Какую книгу ты читаешь в последнее время?
  • время выпускного?
  • Зачем инвестировать в нашу компанию?
  • Опиши себя
  • планирование карьеры
  • Вопросы

база данных:

  • Разница между реляционной базой данных и нереляционной базой данных?
  • В чем разница между левым соединением, правым соединением, внутренним соединением и внешним соединением?
  • Как реализовать ограничения в базе данных?
  • Операторы сложных запросов SQL и запросы между таблицами
  • Разница между group by и order by?
  • Когда индексируется?
  • Разница между MySQL и Redis?
  • Сколько байтов занимает каждый тип данных в SQL?
  • Как Redis реализует распределение и кэширование?
  • Каковы связи и различия между четырьмя парадигмами?
  • Какие есть решения аварийного резервного копирования для емкости базы данных?

Линукс:

  • Какие команды Linux вы обычно используете?
  • Как найти pid процесса и убить его одной строкой?
  • Как просмотреть логи?
  • Как посмотреть системные ресурсы?
  • Как найти указанный файл?
  • Как найти указанный файл?
  • Как проверить IP-адрес?

компьютерная сеть

  • В чем разница между принципом http и https?
  • В чем разница между запросом Get и запросом Post?
  • В чем разница между сеансом и файлами cookie?
  • TCP и UDP и разница между ними
  • Что происходит, когда вы вводите URL-адрес и нажимаете Enter?
  • В чем разница между моделями OSI и TCP/IP и какие протоколы существуют на каждом уровне?
  • Трехстороннее рукопожатие и четырехстороннее рукопожатие TCP и UDP? Что произойдет, если будет только двустороннее рукопожатие? Всего три волны?
  • Как https реализует безопасную и надежную зашифрованную передачу?
  • Какие коды состояния вы знаете? Что значит вернуть 202, 300, 304, 500, 502, 504?

структура данных:

  • Разница между массивами и списками в Python?
  • В чем разница между списками и кортежами, строками, наборами и словарями в Python?
  • Разница между мелкой копией Python и глубокой копией?
  • Итератор Python + генератор + декоратор?
  • Разница между **args и **kwargs в Python?
  • В чем разница между полным бинарным деревом и полным бинарным деревом?
  • Разница между массивом и связанным списком?
  • Как Python реализует хеш-таблицы/хеш-таблицы/карты?

Разработка теста:

  • Ваше собственное понимание теста/почему тест?
  • Как протестировать веб-страницу?
  • Тестовые примеры: тестовая учетная запись пользователя и пароль для входа, отправка изображений друзьям в WeChat, купоны платформы электронной коммерции.
  • Какие инструменты тестирования перехвата пакетов вы использовали? Как вы тестируете код, который пишете?
  • Процесс тестирования программного обеспечения?
  • Каковы методы тестирования черного ящика и белого ящика? В чем разница?

ОС и другие вопросы:

  • Каковы характеристики объектно-ориентированного подхода?
  • В чем разница между процессом и потоком?
  • Преимущества и недостатки многопроцессорности и многопоточности?
  • Какие сторонние библиотеки Python вы использовали? В каком сценарии он используется?
  • Каковы характеристики бизнеса?
  • Как возникает взаимоблокировка и как ее решить?
  • Как Python управляет памятью?
  • GIL / Как избежать влияния GIL?
  • Дипломная работа
  • Команда Git/Svn
  • Каковы способы достижения многопоточности?
  • Какие фреймворки вы использовали? В каких ситуациях он использовался?
  • Как реализована dos-атака?
  • Что вы знаете о пулах потоков?

Вопрос по алгоритму:

1. Вывести длину самой длинной непрерывной подстроки, которая не повторяется в строке (например: входной параметр — строка s = 'abca', а выход — целое число 3)

#滑动窗口+哈希表
class Solution:
    def maxLenSub(self, astring: str) -> int:
        Dict, left, max_len = {
    
    }, 0, 0
        for i, s in enumerate(astring):
            if s in Dict:
                left = max(left, Dict[s] + 1)
            Dict[s] = i
            max_len = max(max_len, i - left + 1)
        return max_len

2. Объединить два упорядоченных массива (например: arr1 = [1,2,3], arr2 = [7,8,9] и вернуться к [1,2,3,7,8,9] после объединения)
#双指针
class Solution:
    def mergeSortedArr2(self, arr1: List[int], arr2: List[int]) -> List[int]:
        temp_list, i, j = [], 0, 0
        while arr1 and arr2:
            if arr1[i] < arr2[j]:
                temp_list.append(arr1.pop(i))
            else:
                temp_list.append(arr2.pop(j))
        return temp_list + arr1 + arr2

3. Объедините два упорядоченных связанных списка (то же самое, что и выше)
class ListNode:
	def __init__(self,val=0, next=None):
		self.val = val
		self.next = next

class Solution:
    def mergeSortedL2(self, L1: ListNode, L2: ListNode) -> ListNode:
        if L1 is None:
            reurn L2
        elif L2 is None:
            return L1
        elif L1.val < L2.val:
            L1.next = self.mergeSortedL2(L1.next, L2)
            return L1
        else:
            L2.next = self.mergeSortedL2(L1, L2.next)
            return L2

4. Сумма самых больших непрерывных подмассивов в массиве (например: arr = [3,4,-2,-8,0,2], выход 7)
class Solution:
    def maxSumSub(self, arr: List[int]) -> int:
        max_sum = arr[0]
        pre_sum = 0
        for i in arr:
            if pre_sum < 0:
                pre_sum = i
            else:
                pre_sum += i
            if pre_sum > max_sum:
                max_sum = pre_sum
        return max_sum

5. Целочисленное обращение (например: входной параметр num = 123, выходной параметр num = 321, 120 становится 21, -123 становится -321, обратите внимание на ситуацию выхода за пределы)
def reverseInt(num):
	# 整数反转
	INT_MIN, INT_MAX = -2**31, 2**31 - 1
	total, negative_num = 0, False
	if num < 0:
		num = abs(num)
		negative_num = True
	while num != 0:
		if total < INT_MIN // 10 + 1 or total > INT_MAX // 10:
			return 0
		mod = num % 10
		num = num // 10
		total = total*10 + mod
	if negative_num is True:
		total = int('-' + str(total))
	return total

6. Быстрая гребля и бульканье
class Solution:
    def quickSort(self, arr: List[int]) -> List[int]:
        if len(arr) < 2:
            return arr
        else:
            pivot = arr[0]
            less = [i for i in arr[1:] if i <= pivot]
            greater = [i for i in arr[1:] if i > pivot]
            return self.quickSort(less) + [pivot] + self.quickSort(greater)

    def maopaoSort(self, arr: List[int]) -> List[int]:
        # while+for循环
        times = len(arr) - 1
        while times > 0:
            for i in range(times):
                if arr[i] > arr[i+1]:
                    arr[i], arr[i+1] = arr[i+1], arr[i]
            times -= 1
        return arr

        # 两个for循环
        # for i in range(1, len(arr)):
        #   for j in range(len(arr) - i):
        #       if arr[j] > arr[j+1]:
        #           arr[j], arr[j+1] = arr[j+1], arr[j]
        # return arr

7. Количество узлов в полном бинарном дереве.
class Solution:
    def countNodes(self, root):
        return 0 is root is None else self.countNodes(root.left) + self.countNodes(root.right) + 1

8. Спиральная матрица
class Solution(object):
    """
    螺旋矩阵
    """
    def spiralOrder(self, matrix):
        """
        :params matrix: 二维数组
        """
        if matrix is None or len(matrix) == 0:
            return matrix
        else:
            m, n = len(matrix), len(matrix[0])
            return self.get_spiralOrder(matrix, 0, m - 1, 0, n - 1)

    def get_spiralOrder(self, matrix, r_start, r_end, c_start, c_end):
        if r_start > r_end or c_start > c_end:
            return []
        elif r_start == r_end:
            return matrix[r_start][c_start:c_end + 1]
        elif c_start == c_end:
            return [matrix[i][c_end] for i in range(r_start, r_end + 1)]
        else:
            curr = matrix[r_start][c_start:c_end + 1] + [matrix[i][c_end] for i in range(r_start + 1, r_end)] + \
            matrix[r_end][c_start:c_end + 1][::-1] + [matrix[i][c_start] for i in reversed(range(r_start + 1, r_end))]
            res = curr + self.get_spiralOrder(matrix, r_start + 1, r_end - 1, c_start + 1, c_end - 1)
            return res

9. Обратно связанный список
class Solution:
    def reverse(self, head: ListNode):
        pre = None
        curr = head
        while curr is not None:
            curr.next = pre
            pre = curr
            curr = curr.next
        return pre

10. Обход в прямом и обратном порядке N-арного дерева.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children

    # N叉树的前序遍历
    def preOrder(self, root: Node):
        ans = []
        def dfs(node: Node):
            if node is None:
                return node
            ans.append(node.val)
            for ch in node.children:
                dfs(ch)
        dfs(root)
        return ans

    # N叉树的后序遍历
    def postOrder(self, root: Node):
        ans = []
        def dfs(node: Node):
            if node is Node:
                return node
            for ch in node.children:
                dfs(ch)
            ans.append(node.val)
        dfs(root)
        return ans

11. Самая длинная допустимая длина круглых скобок
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        if not s:
            return 0
        res = []
        stack = []
        for i in range(len(s)):
            if stack and s[i] == ")":
                res.append(stack.pop())
                res.append(i)
            if s[i] == "(":
                stack.append(i)
        res.sort()
        #print(res)
        i = 0
        ans = 0
        n = len(res)
        while i < n:
            j = i
            while j < n - 1 and res[j + 1] == res[j] + 1:
                j += 1
            ans = max(ans, j - i + 1)
            i = j + 1
        return ans

12. Выведите количество вхождений каждого символа в строку
class Solution:
    def stringCount1(self, astring: str) -> dict:
        return {
    
    i:astring.count(i) for i in astring}

    def stringCount2(self, astring: str) -> dict:
        Dict = {
    
    }
        for s in astring:
            Dict[s] = Dict[s] + 1 if s in Dict else 1
        return Dict

13. Максимальное и минимальное значения в массиве меняются местами, а позиции остальных элементов остаются неизменными (например, arr=[1,89,56,45,23], вывод [89,1,56 ,45,23])
class Solution:
    def swapOfArr(self, arr):
        def Biggest(arr):
            biggest = arr[0]
            biggest_index = 0
            for i in range(len(arr)):
                if arr[i] > biggest:
                    biggest = arr[i]
                    biggest_index = i
            return biggest_index

        def Smallest(arr):
            smallest = arr[0]
            smallest_index = 0
            for i in range(len(arr)):
                if arr[i] < smallest:
                    smallest = arr[i]
                    smallest_index = i
            return smallest_index
        biggest_index = Biggest(arr)
        smallest_index = Smallest(arr)
        arr[biggest_index], arr[smallest_index] = arr[smallest_index], arr[biggest_index]
        return arr

14. Два стека реализуют очередь
class Queue:
    # 两个栈实现一个队列
    def __init__(self):
        self.A, self.B = [], []

    def appendTail(self, value: int) -> None:
        self.A.append(value)

    def deleteHead(self) -> int:
        if self.B: return self.B.pop()
        if not self.A: return -1
        while self.A:
            self.B.append(self.A.pop())
        return self.B.pop()

15. Наибольшая длина инкрементного подмассива (например: arr = [2,-1,5,8,-3,9], выход 4)
class Solution:
    # 最长递增子数组长度
    def lengthOfLIS(self, nums: list) -> int:
        if not nums:
            return 0
        dp = []
        for i in range(len(nums)):
            dp.append(1)
            for j in range(i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j] + 1)
        return max(dp)

16. Переворот строки (например, если входным параметром является строка s = 'abcd', k = 2, то выходным параметром является строка 'bacd')
class Solution:
	def reverseStr1(self, s: str, k: int) -> str:
		str_arr = [i for i in s]
		for i in range(0, len(str_arr), 2*k):
			str_arr[i:i+k] = str_arr[i:i+k][::-1]
		return ''.join(str_arr)
		
	def reverseStr2(self, s: str, k: int) -> str:
		i, newStr = 0, ''
		while i < len(s):
			newStr += s[i:i+k][::-1] + s[i+k:i+2*k]
			i += 2*k
		return newStr



2. Java (бэкэнд/сервер/алгоритм/разработка тестов)

Субъективные вопросы:

  • то же самое

база данных:

  • Как Java гарантирует атомарность в базе данных?
  • другое то же самое

компьютерная сеть:

  • то же самое

структура данных:

  • В чем разница между StringBuilder и StringBuffer?
  • Основной принцип реализации HashMap?
  • Разница между i++ и ++i в Java?
  • В чем разница между ожиданием и сном в Java?
  • Реализация принципа JVM?
  • Как реализован номерной индекс B+?
  • Разница между целым числом и целым числом?
  • Что наследует или реализует ArrayList?
  • Механизм сбора мусора в Java?

ОС и другие вопросы:

  • Как запустить несколько потоков в Java
  • Как Java выполняет блокировку? Каковы различия?
  • Какие модули реализации есть в Spring?
  • Как Java реализует отражение и принцип?
  • Блокирующий ввод-вывод и неблокирующий ввод-вывод?
  • Каков принцип реализации Ajax?
  • В чем разница между принципами компиляции Java и JS?
  • Какие шаблоны проектирования вы знаете?
  • Что такое разрывы и ловушки?
  • Концепции Ioc и Aop весной?
  • В чем разница между простой фабрикой и абстрактной фабрикой?
  • Почерк одноэлементного шаблона?
  • Оптимистичные замки и пессимистичные замки?
  • В чем разница между перегрузкой и переписыванием на Java?
  • Принцип реализации виртуальной функции?
  • В чем разница между указателями и ссылками?

Вопрос по алгоритму:

  • то же самое

3. Ссылка на исходный текст

прочитать исходный текст

4. Информация об авторе

Автор: Рыболовная газета Сяохуна. Цель: сделать программирование более интересным!

Исходный публичный аккаунт WeChat: « Xiaohong Xingkong Technology », с упором на набор в школу (знакомство/бицзин/лицом к лицу), алгоритм, поисковый робот, веб-сайт, разработка игр, анализ данных, обработка естественного языка, искусственный интеллект и т. д., с нетерпением жду к вашему вниманию, давайте расти и кодировать вместе!

Примечание об авторских правах: в этой статье запрещен плагиат и перепечатка, нарушение должно быть расследовано!

рекомендация

отblog.csdn.net/qq_44000141/article/details/123799215