Оригинальная публичная учетная запись 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 », с упором на набор в школу (знакомство/бицзин/лицом к лицу), алгоритм, поисковый робот, веб-сайт, разработка игр, анализ данных, обработка естественного языка, искусственный интеллект и т. д., с нетерпением жду к вашему вниманию, давайте расти и кодировать вместе!
Примечание об авторских правах: в этой статье запрещен плагиат и перепечатка, нарушение должно быть расследовано!