Índice analítico[Ocultar][Mostrar]
- 1. Que entendes por deseño do sistema?
- 2. Cales son as características máis importantes dun deseñador de sistemas?
- 3. Que é exactamente o teorema CAP?
- 4. Que entendes por balance de carga?
- 5. Cal é a diferenza entre a programación asíncrona e a programación paralela?
- 6. Cal é a diferenza entre a escala horizontal e a vertical?
- 7. Que quere dicir exactamente con latencia, rendemento e dispoñibilidade do sistema?
- 8. Que son as propiedades do ACIDO?
- 9. Que é exactamente o fragmento?
- 10. Que é CDN?
- 11. Por que usar CDN?
- 12. Cal é a diferenza entre sharding e partitioning?
- 13. Que é exactamente a caché?
- 14. Que son os servidores Edge CDN?
- 15. Cales son os diferentes patróns de coherencia para o deseño do sistema?
- 16. Que queres dicir con bloqueo optimista?
- 17. Que quere dicir exactamente con "elección de líder"?
- 18. Cal é o teu enfoque para deseñar un servizo de acurtamento de URL tipo TinyURL?
- 19. Cal é o teu enfoque para deseñar twitter?
- 20. Crea o sistema de fontes de noticias para Facebook
- 21. Cal é a propiedade BASE dun sistema?
- 22. Que é o equilibrio de carga coa técnica de afinidade de enderezos IP?
- 23. Que son exactamente os algoritmos de substitución da caché (ou política de desaloxo)?
- 24. Que entendes exactamente por transacción distribuída?
- 25. Que é exactamente a fame?
- Conclusión
Antes de comezar, recomendamos ler o noso guía introdutoria ao deseño de sistemas para actualizar os seus coñecementos fundamentais.
Ao realizar unha entrevista para un posto que require coñecementos de deseño de sistemas, tes a oportunidade de falar sobre os teus antecedentes e demostrar a túa capacidade para desenvolver sistemas complicados.
Ao falar cun posible empregador, a forma en que expresas a túa experiencia pode axudarche a demostrar que es un candidato competente para o posto.
Podes prepararte para a túa entrevista de traballo aprendendo conceptos básicos de deseño e pensando en como responderás ás preguntas sobre eles. Imos repasar algunhas preguntas e respostas típicas da entrevista de deseño de sistemas nesta publicación para axudarche a preparar a túa próxima entrevista.
1. Que entendes por deseño do sistema?
O proceso de establecer as características do sistema, incluíndo módulos, arquitectura, compoñentes e as súas interfaces e datos baseados en criterios predeterminados coñécese como deseño do sistema.
É o proceso de definición, creación e deseño de sistemas para cumprir coas metas e obxectivos específicos dunha empresa ou organización. O deseño do sistema ten máis que ver coa análise do sistema, os patróns arquitectónicos, as API, os patróns de deseño e pegalo todo que sobre a codificación.
2. Cales son as características máis importantes dun deseñador de sistemas?
- Interacción do usuario
- Chamada API externa
- Procesos fóra de liña
3. Que é exactamente o teorema CAP?
Segundo o teorema CAP (Consistency-Availability-Partition Tolerance), un sistema distribuído non pode garantir C, A e P todos ao mesmo tempo. Só pode ofrecer dúas das tres garantías como máximo. Usemos un sistema de base de datos distribuída para axudarnos a comprender isto.
- Consistencia: especifica que os datos deben manterse consistentes unha vez que se complete unha transacción de base de datos. Por exemplo, todas as consultas deberían devolver a mesma resposta despois dunha actualización da base de datos.
- Dispoñibilidade: as bases de datos deben estar dispoñibles e responder en todo momento.
- Tolerancia á partición: aínda que a comunicación se faga problemática, o sistema de base de datos debería seguir funcionando.
4. Que entendes por balance de carga?
Equilibrado de carga é o proceso de dispersión eficiente do tráfico entrante entre un conxunto de servidores backend. Estes denomínanse grupos de servidores. Os sitios web modernos están construídos para xestionar millóns de consultas dos clientes e responder a elas de forma rápida e fiable. Serán necesarios máis servidores para xestionar estas demandas.
Neste caso, é fundamental dividir o tráfico de solicitudes de forma eficiente entre cada servidor para evitar sobrecargalos. O equilibrador de carga funciona como un policía de tráfico, interceptando as solicitudes e dirixindoas entre os servidores dispoñibles para que ningún servidor estea sobrecargado, o que pode degradar o rendemento das aplicacións.
5. Cal é a diferenza entre a programación asíncrona e a programación paralela?
Cando executas calquera cousa de forma asíncrona, isto implica que non tes que esperar a que remate antes de poder pasar a outra cousa. O paralelismo refírese á execución simultánea de moitas tarefas.
Cando pode dividir os traballos en diferentes partes de traballo, o paralelismo funciona de forma eficaz. Async e Callbacks son un medio (ferramenta ou mecanismo) para representar concorrencia, é dicir, un grupo de entidades que poderían comunicarse e compartir recursos.
6. Cal é a diferenza entre a escala horizontal e a vertical?
A adición de novos equipos informáticos a unha rede que estende a demanda de procesamento e memoria nunha rede dispersa de dispositivos denomínase escalado horizontal. Simplemente, engádense novas instancias de servidor ao grupo actual e a carga de tráfico distribúese de forma eficiente entre estes dispositivos.
O escalado vertical refírese á noción de ampliar a capacidade de recursos dun único ordenador engadindo RAM, CPU eficientes ou migrando a unha nova máquina con maior capacidade. A funcionalidade do servidor pódese aumentar sen necesidade de ningún cambio de programación.
7. Que quere dicir exactamente con latencia, rendemento e dispoñibilidade do sistema?
O rendemento é un aspecto esencial do deseño do sistema xa que contribúe á velocidade e fiabilidade dos nosos servizos. As tres medidas de rendemento máis importantes son as seguintes:
- O tempo que leva entregar unha única mensaxe en milisegundos chámase latencia.
- A cantidade de datos transferidos con éxito a través dun sistema nun período de tempo determinado denomínase rendemento. Para medilo úsanse bits por segundo.
- A cantidade de tempo que un sistema está dispoñible para reaccionar ás consultas defínese pola súa dispoñibilidade. System Uptime / (System Uptime+Downtime) é a fórmula para calculalo.
8. Que son as propiedades do ACIDO?
- Atomicidade: Asegura que as alteracións da base de datos son todas ou ningunha.
- Coherencia: os valores dos datos da base de datos son consistentes.
- Illamento: Refírese á separación de dúas transaccións.
- Durabilidade: os datos consérvanse aínda que o servidor falle.
9. Que é exactamente o fragmento?
A fragmentación é a técnica de dividir un conxunto de datos lóxico enorme en moitas bases de datos. Tamén se refire á división horizontal de datos porque os datos almacenaranse en varios ordenadores. Como resultado, unha base de datos compartida pode xestionar máis consultas que unha única computadora enorme.
10. Que é CDN?
Unha rede de entrega de contido é unha rede mundial de ordenadores que colaboran para proporcionar información de Internet rapidamente. Permite a entrega rápida de elementos como páxinas HTML, ficheiros JavaScript, follas de estilo, imaxes e vídeos que son necesarios para cargar contido de Internet.
11. Por que usar CDN?
- Tendo en conta que os recursos estáticos representan ao redor do 80% dun sitio web, adoptar un CDN reduce significativamente a tensión do servidor de orixe.
- Como hai menos distancia para percorrer, a información proporcionarase máis rápido aos propietarios de sitios web que teñan visitantes de moitas áreas xeográficas.
- Os usuarios de CDN tamén se benefician da capacidade de subir e baixar rapidamente en resposta aos aumentos de tráfico.
12. Cal é a diferenza entre sharding e partitioning?
Partición de bases de datos: a partición de bases de datos é un método de particionar un único conxunto de datos en numerosas bases de datos para que se poida almacenar en diferentes estacións de traballo. Os conxuntos de datos máis grandes pódense dividir en anacos máis pequenos e almacenarse en varios nodos de datos, o que aumenta a capacidade de almacenamento total do sistema.
Ao espallar os datos en moitas máquinas, unha base de datos compartida pode xestionar máis consultas que un único sistema.
A partición de bases de datos é o proceso de dividir os obxectos de bases de datos almacenados (táboas, índices e vistas) en pezas separadas. Para aumentar a controlabilidade, o rendemento e a dispoñibilidade, particionan obxectos de base de datos grandes.
Nalgúns casos, a partición pode mellorar a velocidade ao acceder aos datos particionados. A partición pode reducir o tamaño do índice e aumentar a posibilidade de localizar os índices máis necesarios na memoria actuando como columna principal nos índices.
13. Que é exactamente a caché?
A caché é a técnica de manter as copias dos ficheiros nunha área de almacenamento temporal coñecida como caché, que acelera o acceso aos datos e reduce a latencia do sitio. Só se pode almacenar unha determinada cantidade de datos na caché.
Como resultado, é fundamental determinar as técnicas de actualización da caché que sexan máis adecuadas para os obxectivos empresariais.
14. Que son os servidores Edge CDN?
Os servidores CDN que almacenan en caché o material adquirido do servidor de orixe ou do clúster de almacenamento coñécense como servidores de borde. O punto de presenza é un termo que se usa con frecuencia para describir servidores de borde (POP).
Os servidores perimetrais sitúanse fisicamente nun POP. Nese POP, a información podería ser almacenada na caché por moitos servidores de borde.
A capacidade de proporcionar seccións dun sitio web desde varios lugares reduce a distancia entre o visitante e o servidor web, o que resulta nunha menor latencia. Os servidores Edge CDN logran este preciso obxectivo.
15. Cales son os diferentes patróns de coherencia para o deseño do sistema?
Cada solicitude de lectura debería recuperar os datos escritos máis recentes, segundo o teorema CAP. Cando hai moitas copias de datos accesibles, sincronizalas para que os clientes reciban datos novos de forma continua convértese nunha dificultade. Os seguintes son os posibles patróns de consistencia:
- Coherencia débil: despois dunha escritura de datos, a solicitude de lectura pode ou non poder obter os datos actualizados. Este nivel de estabilidade é ideal para aplicacións en tempo real como VoIP, chat de vídeo e xogos multixogador.
- Coherencia eventual: as lecturas acabarán por ver os datos máis recentes en milisegundos despois de escribir os datos. Neste caso, os datos duplícanse de forma asíncrona. DNS e sistemas de correo electrónico son exemplos diso. Isto funciona eficazmente en sistemas con alta dispoñibilidade.
- Forte coherencia: despois dunha escritura de datos, os futuros lectores verán os datos máis recentes. Neste caso, os datos cópianse de forma sincronizada. Isto pódese observar en RDBMS e sistemas de ficheiros, que son apropiados para transferencias de datos.
16. Que queres dicir con bloqueo optimista?
O bloqueo optimista é un mecanismo no que le un rexistro, anota un número de versión (as formas alternativas inclúen datas, marcas de tempo ou sumas de comprobación/hash) e despois verifica que a versión non cambiou antes de escribila de novo.
Cando volves escribir o rexistro, utilizas a versión para filtrar a actualización para asegurarte de que é atómica. (é dicir, non se cambiou entre cando comproba a versión e cando escribe o rexistro no disco) e actualízao todo á vez.
17. Que quere dicir exactamente con "elección de líder"?
Nun sistema distribuído con numerosos servidores que contribúen á dispoñibilidade da aplicación, pode haber momentos nos que só un servidor sexa responsable da actualización das API de terceiros, xa que varios servidores poden causar problemas ao utilizar as API.
Este servidor coñécese como o servidor principal e o procedemento para seleccionalo coñécese como elección de líder. Cando o servidor líder falla nun sistema distribuído, os servidores deben notar o fallo e escoller un novo líder. Usando unha técnica de consenso, este enfoque é o máis adecuado para aplicacións de alta dispoñibilidade e consistencia forte.
18. Cal é o teu enfoque para deseñar un servizo de acurtamento de URL tipo TinyURL?
TinyURL transforma un URL longo nun único URL curto. Estas tecnoloxías tamén poden aceptar un URL curto e devolver o URL completo.
Cales son algunhas das calidades cruciais?
- Fai un URL que sexa máis curto que o orixinal.
- Mantén o URL máis longo e substitúeo por outro máis curto.
- Permitir a redirección en URL curtos.
- Admítense URL curtos con nomes personalizados.
- Xestionar varias consultas á vez.
Cales son os problemas máis frecuentes?
- Como fai un seguimento do almacenamento da base de datos?
- Que pasa se a carga do usuario supera as expectativas?
- E se dúas persoas usan o mesmo URL personalizado?
Considere as seguintes suxestións:
- O hash é unha noción que se pode usar para conectar URL antigos e novos.
- API REST pódese usar para xestionar a comunicación front-end e equilibrar a carga pesada.
- O multithreading é unha noción que che permite xestionar varias solicitudes á vez.
- Os URL orixinais almacénanse en bases de datos NoSQL.
19. Cal é o teu enfoque para deseñar twitter?
Requisitos dados:
- Enviando tweets
- Seguindo a outros usuarios
- Feed de chíos/newsfeed
- O sistema é escalable
- Cárgase rapidamente
- O sistema é fiable
Podes comezar a pensar no deseño da túa API de Twitter cando teñas establecido os criterios. Así aparecería:
Para comezar, esbozaremos os puntos finais clave da API. Aquí tes algúns exemplos:
- enviar chío (mensaxe)
- followUser(ID de usuario)
- unfollowUser(ID de usuario)
- getFeed(páxina)
Despois pódese esbozar a arquitectura que permitirá estas características. Podemos comezar polo usuario que envía unha solicitude do servidor. Podemos instalar servidores de API adicionais detrás dun equilibrador de carga para axudar a enrutar niveis de tráfico maiores para satisfacer a necesidade de escalabilidade. Teremos que engadir unha base de datos para almacenar os nosos chíos agora.
É importante lembrar que a API que proporcionamos debe ser escalable. Para que este servizo sexa escalable, podemos facer que un dos nosos servidores de API lea desde unha caché separada para a nosa fonte de noticias. Mentres o facemos, tamén debemos utilizar un provedor de fontes para manter actualizada a nosa caché de fontes.
20. Crea o sistema de fontes de noticias para Facebook
A fonte de noticias en Facebook permite aos usuarios ver o que está a suceder nos círculos dos seus amigos, nas páxinas favoritas e nas organizacións que seguiron.
Cales son algunhas das características esenciais?
- Crea unha fonte de noticias baseada en publicacións doutras entidades do sistema que segue o usuario.
- Pódense usar texto, imaxes, audio e vídeo nas publicacións de Newsfeed.
- En tempo real, engade contido novo á fonte de noticias do usuario.
Cales son algúns dos problemas máis comúns?
- E se a nova publicación tarda moito en aparecer na fonte de noticias?
- Pode o algoritmo xestionar un aumento na actividade dos usuarios?
- Que publicacións deberían mostrarse primeiro na fonte de noticias?
Considere as seguintes suxestións:
- Examina o mecanismo de fanout para distribuír publicacións aos seguidores.
- Examine como se pode usar a fragmentación para xestionar de forma eficiente as altas cargas de usuarios.
- Os datos do feed dun usuario non deben duplicarse en numerosos servidores. A partición pódese facer en función dos ID de usuario.
21. Cal é a propiedade BASE dun sistema?
As características BASE son omnipresentes nas bases de datos NoSQL que xurdiron recentemente. Un sistema BASE non proporciona coherencia, segundo o teorema CAP. Este é un acrónimo feito que corresponde á seguinte propiedade dun sistema do teorema CAP:
- O termo "basicamente dispoñible" significa que o sistema estará dispoñible en todo momento.
- Un estado suave significa que o estado do sistema pode variar ao longo do tempo, aínda que non se proporcione ningunha entrada. Isto débese principalmente á eventual consistencia do modelo.
- Dado que o sistema non recibe entradas durante ese período, a coherencia eventual significa que o sistema será consistente co paso do tempo.
22. Que é o equilibrio de carga coa técnica de afinidade de enderezos IP?
Outro método destacado de equilibrio de carga é a afinidade de enderezos IP. O enderezo IP do cliente está conectado cun nodo de servidor neste método. Un nodo do servidor xestiona todas as solicitudes dun enderezo IP do cliente.
Este método é sinxelo de implementar xa que o enderezo IP sempre está accesible na cabeceira da solicitude HTTP e non se precisan máis configuracións. Se é probable que os teus clientes teñan as cookies desactivadas, esta forma de equilibrio de carga pode ser vantaxosa.
23. Que son exactamente os algoritmos de substitución da caché (ou política de desaloxo)?
Os algoritmos de caché (tamén coñecidos como algoritmos de substitución de caché, políticas de substitución de caché ou políticas de expulsión de caché) son instrucións de optimización ou algoritmos que un programa informático ou unha estrutura mantida por hardware pode utilizar para xestionar unha caché de datos almacenados no ordenador.
O almacenamento en caché aumenta a velocidade ao almacenar os datos usados recentemente ou aos que se accede con frecuencia en rexións de memoria ás que o acceso é máis rápido ou máis barato que o almacenamento de memoria tradicional. Cando a caché está chea, o algoritmo debe decidir que elementos eliminar para facer un lugar para outros novos.
24. Que entendes exactamente por transacción distribuída?
Unha transacción distribuída é calquera circunstancia na que un único evento provoca a alteración de dúas ou máis fontes de datos distintas que non se poden comprometer atomicamente.
Vólvese moito máis complicado no mundo dos microservizos xa que cada servizo é unha unidade de traballo, e a maioría das veces numerosos servizos deben colaborar para que un negocio teña éxito.
25. Que é exactamente a fame?
Cando un fío non pode adquirir acceso regular aos recursos compartidos, dise que está morrendo de fame. Isto ocorre cando os fíos "cobizosos" ou con "prioridade" máis alta fan que os recursos compartidos sexan inaccesibles durante longos períodos de tempo.
Considere un obxecto que proporciona un método sincronizado que con frecuencia volve tarde. Se un fío chama repetidamente a este método, outros fíos que requiren acceso sincronizado frecuente ao mesmo obxecto bloquearanse a miúdo.
Conclusión
Unha sesión de brainstorming é todo o que supón a entrevista de deseño do sistema. Abordamos as preguntas máis comúns das entrevistas de Deseño de sistemas nesta publicación.
Unha comprensión completa do método que está a tomar ao crear un sistema específico é fundamental para aprobar unha entrevista de Deseño do sistema.
Deixe unha resposta