Resumen de preguntas de entrevistas de alta frecuencia para las principales fábricas que reclutan en la primavera de 2022

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.

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

leer el 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!

Supongo que te gusta

Origin blog.csdn.net/qq_44000141/article/details/123799215
Recomendado
Clasificación