Wednesday, June 22, 2022

Dự án chớp nhoáng - 3T Logistics

 Mình vào Pentalog từ đầu tháng 3 sau quá trình phỏng vấn và chờ đợi ...3 tháng, dự án đầu tiên làm với khách hàng 3T logistics là một công ty IT ở UK chuyên cung cấp giải pháp logistics giúp kết nối người gửi và người vận chuyển hàng. Công ty này ở Leicester City, nếu bạn nào theo dõi bóng đá Ngoại hạng Anh thì sẽ thân thuộc với cái tên này.

Sản phẩm

Bọn này xây dựng một nền tảng logistics tên là EVENT, trong đó nó có 1 product là ROUTE là cái mà mình trực tiếp làm việc. https://www.3t-event.com/how-does-route-work. Bản thân 3T không có 1 cái xe tải hay tàu thuyền bến cảng nào, mà nó chỉ cung cấp giải pháp và nền tảng cho các bên giao vận.

Product của 3T mà mình làm khá là cồng kềnh, nhiều thứ hầm bà lằng, có thể kể ra như:

  • Azure services: CosmosDB, SQL DB, Fabric Cluster, API Management, App insights, LogicApp...
  • Dotnet core
  • Angular 8, 13
trụ sở 3T khiêm tốn thế này thôi


Quy trình làm việc

Ấn tượng ban đầu với 3T là quy trình làm việc khá mù mờ vì nó ...quá thoáng :D, lúc đầu không thể hiểu nó theo mô hình nào Agile Scrum? Kanban? và buồn cười là làm suốt 4 tháng nhưng chỉ có 1 retro meeting duy nhất, cũng là lần duy nhất cả dự án meeting với nhau =)). Có điều nó cũng hay vì có nhiều thời gian code hơn là meeting ;) ngoài daily meeting hàng ngày lúc 3h chiều thì hầu như mình không phải dự cái meeting nào nữa <3. Project chia làm 3 team trong đó mình và 2 anh khác trong team C, báo cáo trực tiếp cho SM là Damon (ông này tính khá vui vẻ dễ tính, đã có bạn gái, 1 thằng ku 2 tuổi và đi xe ford fiesta)

Có 1 thuận lợi là có 1 bác tên Lượng học PhD bên UK từng làm cho 3T trong 3 năm trước khi về định cư ở VN, nên việc trao đổi phần nào thuận tiện hơn. Bác này tính khá hay, rất lịch sự và thoải mái, quê Thái Nguyên và có 2 ku nhóc sinh đôi. Tuy chưa gặp mặt trực tiếp nhưng nói chuyện cũng khá dễ gần <3

Cú sốc đến bất ngờ

Mình và ông anh cùng team mới bắt đầu quen với dự án thì vào một ngày đẹp trời nọ, nhận được meeting invitation của ông sếp khách hàng



Ủa, meeting gì kì vậy, k có thông tin gì cả? Lúc họp ông khách hàng mới từ từ vòng qua vấn đề chính: cắt giảm ngân sách => cắt giảm nhân sự :(( Xong! chỉ mới hơn 2 tháng bắt đầu làm thì phải nghỉ, quá là đột ngột hix hix.

Nhưng đó có lẽ là điều tất yếu, khi tình hình kinh tế khó khăn, chiến tranh U cà, lạm phát, xăng dầu... dẫn đến bao hệ lụy. Nhìn chung thì đây là thời điểm downtrend của Chứng, Coin, và IT. Sau đợt dịch bùng nổ thì mọi thứ lại trở nên khó khăn. Dù vậy cơ hội mới không thiếu, chỉ cần chúng ta sẵn sàng.

Những ngày cuối

Còn vài ngày nữa là chính thức nghỉ dự án này, mình vẫn làm việc bình thường, không có áp lực gì cả, ông khách hàng còn bảo mày cần thời gian đi pv thì cứ nói, nên mọi thứ khá thoải mái. Khoe với mọi người task cuối mình đang làm liên quan đến Tomtom map.






Wednesday, December 15, 2021

Angular interviews

 

1. Pentalog

TS quizzes

  1. how to write empty decorator
  2. oldest version of JS that TS can transpile to
  3. default target of tsconfig.json
  4. how to write TreeNode data type
  5. any type is for...
  6. outFile is for...
  7. type annotation is transpiled to JS as ...
  8. JS is compatible with TS
  9. array vs tuple
  10. supported types of TS
  11. access modifier of properties in class
  12. read-only type in class
  13. enum is for...

enum Direction {
Up,
Down,
Left,
Right,
}

14. what's value of Down

Angular quizzes

  1. role of interceptor
  2. syntax to lazy-load a module
  3. type of valuechanges in formcontrol
  4. selector used to style a component based on a condition outside of the view
  5. when impure pipe run
  6. Which syntax completes the following code so that it dis plays 'Hello Angular!', given that isTrue = false; ? <span>Hello <span …›world</span></span><ng-template #hi>Angular</ng-template>
  7. How can you have a separate instance of service "MyMockService" in every in stance of a component?
  8. How many times will console.log be called in the following example? import {of} from 'rxjs'; of([2,3,41).subscribe({next: n => console.log(n)})
  9. Which code sets the colspan attribute on the td element?
  10. At what lifecycle hook will ViewChild query be accessible? @ViewChild(foo', (static: false}) foo: ElementRef
  11. What is the syntax for a template reference variable?
  12. What is differential loading?
  13. What is the default value of 'ViewEncapsulation'?
  14. How can you specify an alternative class provider?

Interview questions with tech lead

  1. các rxjs operation hay dùng
  2. rxjs map vs. switchMap
  3. viewEncapsulation
  4. control value accessor
  5. tại sao data trong 1 service không bị mất khi chuyển trang
  6. directive
  7. làm thế nào để ng-content select đúng template
  8. nodejs nhiều version khác nhau thì quản lý như nào
  9. dùng gì để provide data cho một page trc khi chuyển đến
  10. dùng Promise ở browser thì có cần import thư viện gì k

1.1 QIMA

Interview questions with customer

  1. life cycle hook
  2. change detection
  3. Promise vs. Observable
  4. testing framework
  5. omit types
Pair programming
- create a simple app using mock data with interfaces

<failed>

1.2 3T Logistics

Interview questions with customer

  1. kể về project hiện tại, vai trò của bạn
  2. cách giao tiếp giữa 2 component
  3. trình bày về subject, observable
  4. bạn dùng primeNg, material chưa, version nào
  5. bạn đã dùng state management lib nào chưa
  6. dùng gì để manipulate dom
  7. bạn có câu hỏi gì cho chúng tôi


2. Produgie

Test

  1. pipe: date, currency, percent
  2. template attribute (div color)
  3. component input

1st interview (Tech member)

  1. Làm sao giải toả căng thẳng trong công việc

...

2st interview (CTO)

  1. Mô tả team đã làm trước đây: process, testing như thế nào?
  2. Code coverage có nên đạt 100%
  3. Nói thế nào với PO về TDD?
  4. So sánh multi-tenancy product (B2B) với end-user product (B2C) ở khía cạnh UI/UX
  5. Process để deploy hotfix lên production giả sử có 3 môi trường (dev, UAT, prod)
  6. Khái niệm micro-ui
  7. So sánh Angular với React? Chọn lựa cái nào?


3. FPT Da Nang

  1. Lifecycle hooks
  2. Promise vs. Observable
  3. Rxjs switchMap vs. mergeMap
  4. State management, dùng gì để qly state
  5. Performance profiling, thông số nào quan trọng
  6. Bạn đã làm ứng dụng real-time chưa?
  7. Thư viện để vẽ đồ thị (plotly)


4. Xebia

  1. Angular directive, ngIf vs ngShow
  2. Html5 vs html4
  3. JS hoisting
  4. JS prototype
  5. Describe your project architecture
  6. How a component get data from main app
<no response>


5. Nashtech

  1. mô tả task bạn khiến tự hào
  2. css architecture
  3. xử lý search input (debounceTime, switchMap)
  4. nếu gặp task khó thì xử lý như nào
  5. refresh token khi bị expire (interceptor)
  6. cắt html trang vnexpress hết bao lâu
  7. thiết kế app frontend như nào để dễ scale
  8. thiết kế lại 1 trang như cragslist để responsive mà k dùng frontend framework (e.g bootstrap)
  9. git - flow để fix 1 bug trên production
  10. Ngoài Angular thì bạn có biết React, Vue? chấm điểm mức thành thạo



6. Contemi

  1. component lớn nhất bạn đã làm
  2. angular change detection, so sánh onPush và Default
  3. làm sao angular phát hiện change của giá trị binding
  4. hàm async trong js, tại sao nói js là single thread nhưng xử lý được bất đồng bộ
  5. bạn đã làm chart, form chưa
  6. real-time app cơ chế như nào
  7. cơ chế của authentication (OAuth2, OIDC, SSO, 3-step handshake???)
  8. các issue hay gặp phải khi code angular
  9. bạn có dùng lazyload
  10. unit test dùng framework gì, code coverage bao nhiêu, có thấy hữu ích không

7. TDT Asia

  1. Tại sao JS single thread mà xử lý dc nhiều tác vụ cùng lúc
  2. nếu setTimeout = 4 rồi setTimeout = 3, thì cái nào chạy trước; với setTimeout = 0 thì sao?
  3. các form trong angular
  4. muốn gửi data theo format multi-path thì cần config như nào
  5. phân biệt Array map, filter, reduce
  6. làm sao query được item trong html theo 1 phần của id (e.g id="item-123")
  7. review code theo các tiêu chí nào
  8. phân biệt localstorage, sessionstorage, cookie
  9. pipe dùng để làm gì, có limit số pipe cho 1 variable k?
  10. làm sao để set global variable trong angular

8. Techcombank

  1. Phân biệt Array push và concat
  2. Các loại pipe, phân biệt pure và impure pipe
  3. Closure, ví dụ về trường hợp bạn đã dùng trong Angular
  4. Validator của ReactiveForm được viết như nào
  5. Các CSS position, dùng position absolute thì phải lưu ý gì?
  6. Grid của bootstrap 4 dùng kỹ thuật gì, nếu không dùng flex thì làm sao để tạo layout
  7. Responsive theo từng màn hình device như thế nào
  8. mobile first responsive
  9. phân biệt switchMap và exhaustMap, nếu có error thì có chạy tiếp k
  10. forkJoin vs. combineLatest

9. Tokenize

  1. tối ưu performance ở project bạn đã làm
  2. nếu 1 trang gallery có nhiều ảnh với các kích thước khác nhau muốn hiển thị theo chiều dọc hoặc ngang thì dùng layout như nào
  3. lazy load khi cuộn trang như nào
  4. phân biệt localstorage, session storage, cookie
  5. nếu muốn làm seo cho search engine thì cần thêm thẻ gì, ở client side thì config seo như nào
  6. toán tử ??, ||
  7. const obj = { a: "one", b: "two", a: "three" }; console.log(obj)
  8. tính chất của Observable, so sánh với mô hình pub/sub
  9. thiết kế component search call từ API với các button search, clear (mô tả rõ html, css, js)
  10. viết hàm async tính giai thừa của n (n >= 0)
  11. bộ nhớ heap và stack của browser
  12. arrow function khác gì function thường, con trỏ this dùng ở đó như nào
  13. cho biết kết quả của đoạn code sau
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

const lydia = new Person("Lydia", "Hallie");
const sarah = Person("Sarah", "Smith");

console.log(lydia);
console.log(sarah);


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