Tuesday, November 23, 2021

DevOps inverviews

TEKO

Interviewer là bạn Phương Programming Manager trông còn khá trẻ (chắc chưa đến 30), bạn này đang làm ở Sing vì là nhân viên xuất sắc được sang Sing ngồi cùng sếp.

Câu hỏi pv bắt đầu như mọi cuộc pv khác, đó là giới thiệu bản thân, các công việc đã làm. Sau đó là hỏi về những khó khăn đã gặp phải trước đây, cách để giải quyết như thế nào.  

Những bài toán bạn đã từng gặp phải trước đây?

- Bài toán chia gói hàng (packages) thành các giỏ hàng (buckets)

Làm sao để tiết kiệm thời gian cho shipper? Quy trình sẽ là: từ address dùng google map api để convert ra toạ độ x, y sau đó dùng thuật toán LMS để gom các điểm gần nhau. Cần tinh chỉnh các hệ số để tối ưu nhất có thể

- Check Gitlab pipeline mongodb đã import chưa?

thường thì import data từ QA sau khi tạo mongodb, vì vậy có thể check là nếu mongodb đã create thì lưu vào 1 biến trạng thái trong một file variables.json của gitlab artifact, sau đó get biến này để check có import không

- flexible platform: làm sao các component mềm dẻo, độc lập?

tạo ra một số quy tắc về dữ liệu và styling. về dữ liệu thì dùng input/output cho từng component. quy định không dùng css position absolute, fixed

 - angular: build dynamic components, frontend dựa vào schema từ backend

xử lý với các form dynamic, dung ngx-formly để generate form từ json schema

- Issue Grafana không get dc metric từ Prometheus

Liên quan đến DB của prometheus bị đầy, solution có thể là giảm retension time đến một giá trị phù hợp.

- Cách structure project/pipeline để đáp ứng được deployment cho nhiều service, tenant khác nhau

Chia ra các project khác nhau, tổ chức call từ project chứa config đến project chứa template

Bài Coding

Sau đó là 20 phút làm 1 bài coding đơn giản. Bài toán là parsing data từ dạng csv sang mảng 2 chiều. Trường hợp đơn giản nhất là chỉ có dấu phẩy để tách cột

Nguyễn Văn A, Đinh Tiên Hoàng, Đà Lạt, Việt Nam

Sau đó nâng cao hơn là dùng dấu nháy kép (") để gộp địa chỉ

Nguyễn Văn A, "Đinh Tiên Hoàng, Đà Lạt", Việt Nam

Expect là lời giải phải đáp ứng được cả 2 trường hợp này.

Vì thời gian khá ngắn nên mình đã không giải được trọn vẹn đề bài mà mới chỉ giải quyết từng case. Với bài toán này, để đáp ứng được cả 2 trường hợp thì việc split string đơn thuần không giải quyết được, cần thêm 1 bước xử lý nữa là check dấu nháy kép. Một solution có thể là split dấu phẩy sau đó check dấu nháy kép để cộng string.

VMO

- Cần xây dựng những gì cơ bản nhất để deploy một service lên AWS

- Nếu có khoảng 10 service thì cần chia subnet như nào (dải mạng/subnet mask)

- Làm thế nào để các service trong các subnet connect được với nhau

- Monitoring như thế nào, chẳng hạn Kafka MSK

- Các metric được get như thế nào, lưu ở đâu (prometheus db)

- Nếu Kafka consumer không get message kịp với tốc độ producer thì làm sao


Cyptopie

- k8s có những loại network nào (clusterIP, NodePort, với 1 loại k nhớ)

- có những loại health check nào, phân biệt liveness, readiness, startup health check

- nếu 1 trang gặp sự cố thì xử lý như nào

- chọn EC2 instance type như thế nào, loại M với C thì khác gì nhau

- nếu file image quá lớn thì làm sao 

- nếu Kafka leader down thì xảy ra điều gì

OCG

45'


Bạn đã tự build MySQL có nhiều replica chưa

Nếu RDS MySQL load nhiều thì xử lý như nào?

Scale pod, node trong k8s như thế nào?

Làm sao scale dựa vào kafka metric

Làm sao scale được gitlab runner

Bạn có dựng DB ở nơi khác ngoài AWS để tiết kiệm chi phí chẳng hạn

Cấu trúc k8s

Các tool devops hay dùng

Làm sao deploy app lên các node nhất định

IP của pod được xác định như nào

Làm sao giới hạn access đến DB trên k8s

Bạn có vận hành EKS không

Làm sao monitor hệ thống EKS

Vận hành alert như nào