Cuenta pública original de WeChat: [ Tecnología Xiaohong Xingkong ]
Declaración de derechos de autor : la originalidad no es fácil, este artículo prohíbe el plagio, la reimpresión y la infracción debe investigarse.
Tabla de contenido
1. Python (backend/servidor/algoritmo/desarrollo de prueba)
Preguntas subjetivas:
- Auto presentación
- Introducción del proyecto, hará preguntas sobre los detalles.
- ¿Dónde están tus puntos fuertes?
- ¿Cuáles son tus debilidades?
- ¿Cuáles son tus aficiones?
- ¿Qué problemas encontraste en el proyecto y cómo los resolviste?
- ¿Tienes ofertas de otras empresas?
- Pon un ejemplo de tu saldo
- ¿Qué libro estás leyendo últimamente?
- ¿tiempo de graduacion?
- ¿Por qué invertir en nuestra empresa?
- describete
- planificación de la carrera
- Preguntas
base de datos:
- ¿Diferencia entre base de datos relacional y base de datos no relacional?
- ¿Cuál es la diferencia entre la combinación izquierda, la combinación derecha, la combinación interna y la combinación externa?
- ¿Cómo implementar restricciones en la base de datos?
- Sentencias SQL de consultas complejas y consultas de tablas cruzadas
- ¿La diferencia entre agrupar por y ordenar por?
- ¿Cuándo se indexa?
- ¿La diferencia entre MySQL y Redis?
- ¿Cuántos bytes ocupa cada tipo de datos en SQL?
- ¿Cómo implementa Redis la distribución y el almacenamiento en caché?
- ¿Cuáles son las conexiones y diferencias entre los cuatro paradigmas?
- ¿Cuáles son las soluciones de copia de seguridad ante desastres para la capacidad de la base de datos?
linux:
- ¿Cuáles son los comandos de Linux más utilizados?
- ¿Cómo encontrar el pid del proceso y matarlo en una línea?
- ¿Cómo ver los registros?
- ¿Cómo ver los recursos del sistema?
- ¿Cómo encontrar el archivo especificado?
- ¿Cómo encontrar el archivo especificado?
- ¿Cómo comprobar la dirección IP?
Red de computadoras
- ¿Cuál es la diferencia entre el principio de http y https?
- ¿Cuál es la diferencia entre una solicitud de obtención y una solicitud de publicación?
- ¿Cuál es la diferencia entre sesión y cookies?
- TCP y UDP y la diferencia entre ellos
- ¿Qué sucede cuando escribes una URL y presionas enter?
- ¿Cuál es la diferencia entre los modelos OSI y TCP/IP y qué protocolos hay en cada capa?
- ¿El protocolo de enlace de tres vías y el protocolo de enlace de cuatro vías de TCP y UDP? ¿Qué sucede si solo hay un apretón de manos bidireccional? ¿Solo tres olas?
- ¿Cómo realiza https una transmisión cifrada segura y confiable?
- ¿Qué códigos de estado conoces? ¿Qué significa devolver 202, 300, 304, 500, 502, 504?
estructura de datos:
- ¿Diferencia entre matrices y listas en Python?
- ¿Cuál es la diferencia entre listas y tuplas, cadenas, conjuntos y diccionarios en Python?
- ¿La diferencia entre la copia superficial de Python y la copia profunda?
- Python iterador + generador + decorador?
- ¿Diferencia entre **args y **kwargs en Python?
- ¿Cuál es la diferencia entre un árbol binario completo y un árbol binario completo?
- ¿Diferencia entre matriz y lista enlazada?
- ¿Cómo implementa Python tablas hash/tablas hash/mapas?
Desarrollo de la prueba:
- Su propia comprensión de la prueba/¿por qué la prueba?
- ¿Cómo probar una página web?
- Casos de prueba: prueba de inicio de sesión de cuenta de usuario y contraseña, envío de imágenes entre amigos de WeChat, cupones de plataforma de comercio electrónico
- ¿Qué herramientas de prueba de captura de paquetes ha utilizado? ¿Cómo prueba el código que escribe?
- ¿Proceso de prueba de software?
- ¿Cuáles son los métodos de prueba de caja negra y caja blanca? ¿Cuál es la diferencia?
Sistema operativo y otros problemas:
- ¿Cuáles son las características de la orientación a objetos?
- ¿Cuál es la diferencia entre proceso e hilo?
- ¿Ventajas y desventajas del multiprocesamiento y multihilo?
- ¿Qué bibliotecas de Python de terceros ha utilizado? ¿En qué escenario se utiliza?
- ¿Cuáles son las características de los negocios?
- ¿Cómo se produce el interbloqueo y cómo solucionarlo?
- ¿Cómo gestiona Python la memoria?
- GIL / ¿Cómo evitar ser afectado por GIL?
- Proyecto de graduación
- Comando Git/Svn
- ¿Cuáles son las formas de lograr multihilo?
- ¿Qué marcos has utilizado? ¿En qué situaciones se ha utilizado?
- ¿Cómo se implementa el ataque dos?
- ¿Cuánto sabes sobre grupos de subprocesos?
Pregunta de algoritmo:
1. Muestra la longitud de la subcadena continua más larga que no se repite en una cadena (por ejemplo: el parámetro de entrada es la cadena s = 'abca', y la salida es el número entero 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. Combinar dos matrices ordenadas (por ejemplo: arr1 = [1,2,3], arr2 = [7,8,9] y volver a [1,2,3,7,8,9] después de la combinación)
#双指针
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. Combinar dos listas enlazadas ordenadas (es decir, lo mismo que arriba)
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. La suma de los subconjuntos continuos más grandes de un conjunto (por ejemplo: arr = [3,4,-2,-8,0,2], el resultado es 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. Inversión de enteros (por ejemplo: el parámetro de entrada es num = 123, el parámetro de salida es num = 321, 120 se convierte en 21, -123 se convierte en -321, preste atención a la situación fuera de los límites)
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. Fila rápida y burbujeo
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. El número de nodos en un árbol binario completo
class Solution:
def countNodes(self, root):
return 0 is root is None else self.countNodes(root.left) + self.countNodes(root.right) + 1
8. Matriz espiral
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. Lista de enlaces inversos
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. Recorrido previo al pedido y recorrido posterior al pedido del árbol N-ario
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. La longitud de paréntesis válida más larga
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. Muestra el número de ocurrencias de cada carácter en la cadena
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. Los valores máximo y mínimo en la matriz se intercambian y las posiciones de otros elementos permanecen sin cambios (por ejemplo, arr = [1,89,56,45,23], la salida es [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. Dos pilas implementan una cola
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. La longitud de submatriz incremental más larga (por ejemplo: arr = [2,-1,5,8,-3,9], la salida es 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. Cambio de cadena (por ejemplo, si el parámetro de entrada es la cadena s = 'abcd', k = 2, entonces el parámetro de salida es la cadena '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 (backend/servidor/algoritmo/desarrollo de prueba)
Preguntas subjetivas:
- ídem
base de datos:
- ¿Cómo garantiza Java la atomicidad en la base de datos?
- otro ídem
Red de computadoras:
- ídem
estructura de datos:
- ¿Cuál es la diferencia entre StringBuilder y StringBuffer?
- ¿El principio de implementación subyacente de HashMap?
- ¿Diferencia entre i ++ y ++ i en Java?
- ¿Cuál es la diferencia entre esperar y dormir en Java?
- ¿Implementación del principio JVM?
- ¿Cómo se implementa el índice de números B+?
- ¿La diferencia entre entero e int?
- ¿Qué hereda o implementa ArrayList?
- ¿Mecanismo de recolección de basura en Java?
Sistema operativo y otros problemas:
- Cómo iniciar múltiples subprocesos en Java
- ¿Cómo realiza Java el bloqueo? ¿Cuáles son las diferencias?
- ¿Qué módulos de implementación tiene Spring?
- ¿Cómo implementa Java la reflexión y el principio?
- ¿E/S de bloqueo y E/S de no bloqueo?
- ¿Cuál es el principio de realización de Ajax?
- ¿Cuáles son las diferencias entre los principios de compilación de Java y JS?
- ¿Qué patrones de diseño conoces?
- ¿Qué son los descansos y las trampas?
- ¿Conceptos Ioc y Aop en primavera?
- ¿Cuál es la diferencia entre fábrica simple y fábrica abstracta?
- ¿Escritura a mano del patrón singleton?
- ¿Cerraduras optimistas y cerraduras pesimistas?
- ¿Cuál es la diferencia entre sobrecargar y reescribir en Java?
- ¿Principio de implementación de la función virtual?
- ¿Cuál es la diferencia entre punteros y referencias?
Pregunta de algoritmo:
- ídem
3. Enlace al texto original
4. Información del autor
Autor: Xiaohong's Fishing Daily, Objetivo: ¡Hacer la programación más interesante!
Cuenta pública original de WeChat: " Tecnología Xiaohong Xingkong ", centrada en el reclutamiento escolar (introducción/bijing/cara a cara), algoritmo, rastreador, sitio web, desarrollo de juegos, análisis de datos, procesamiento de lenguaje natural, IA, etc., esperando a su atención, ¡crezcamos y codifiquemos juntos!
Nota de derechos de autor: ¡Este artículo prohíbe el plagio y la reimpresión, y la infracción debe investigarse!