Nội dung bài viết
Video học lập trình mỗi ngày
Câu nói hay và thấm vào mỗi chúng ta...
Sau này tôi mới hiểu. Trong quá trình sa thải, dường như bạn là ai hay làm gì không còn quan trọng nữa, và trong hầu hết các trường hợp, quyết định sa thải được đưa ra bởi những người không biết bạn.
Giới thiệu về "Nắm vững công nghệ cốt lõi của JAVA"
Đầu tiên TRÁNH MẤT THỜI GIAN CỦA CÁC ANH CHỊ thì đây không phải là một series JAVA dành cho những DEVs có kinh nghiệm từ hai năm trở lên với vị trí phát triển hệ thống như:
Thiết kế kiến trúc hệ thống
, Xây dựng kiến trúc và phát triển hệ thống phân tán
hay Phát triển dự án cấp DDD - Project
mà chúng ta đang triền khai trong Series: Dự án DDD - Project High Concurrency nếu như bạn muốn khám phá năng lực của mình thì nên tham khảo những cách phát triển hệ thống kiến trúc trong đó.
Ở đây thì lại khác, không phải phân chia mà là... Vì sao tôi lại viết những bài viết này. Không phải vì tôi có nhiều thời gian, cũng không phải tôi là người mới nhập môn phái võ công JAVA. Mà tấn suất tôi nhận câu hỏi từ nhiều member rắng:
"Anh ơi, sao em vào list này nhưng nhiều link chưa đọc được...?", "Anh ơi! Em thấy sau khi học java hight concurrency thì em thấy theo chưa kịp vì có nhiều kiến thức em bị mất gốc, vậy nên học đâu à Anh?"...
Đại loại như vậy nói chung tần suất câu hỏi này lặp lại khá cao. Vì vậy tôi sẽ dành thời gian một tuần một bài viết (phải thật sự chất lượng) về JAVA nhập môn cho người mới bắt đầu.
Series võ công sư tử hống dành cho ai
Tôi sẽ xác định mục tiêu của series sẽ là:
- Dành cho sinh viên mới ra trường để chuân bị cho việc phỏng vấn xin vào các vị trí thấp như Fresher (Với thời gian nhanh chóng)
- Các DEV có kinh nghiệm dưới 1 năm và muốn học hỏi thêm và phát triển trong công việc của mình.
- Các DEV có kinh nghiệm với các võ công như go, rust, nodejs và có mong muốn học thêm một môn phái JAVA thì đây cũng có thể là một series thích hợp
Tôi sẽ cố gắng nhìn lại quá trình đi lên của mình từ đó nó sẽ thực tế hơn nhiều, chính vì vậy đôi khi nó lại không đúng văn phong của những người chuyên viết về SÁCH. Vì vậy tôi muốn con đường chúng ta đi sẽ là.
Đầu tiền sẽ là những nguyên tắc cơ bản cấn nắm khi làm việc với các hệ thống khác nhau.
Ví dụ ở một tác vụ cần tính nhất quán dữ liệu thì cần biết về khái niệm "Khoá phân tán" thì cần biết ReentrantLock
hơn nữa là synchronized
, trường hợp thứ hai ví dụ muốn xử lý một data trong một Array()
thì bạn cần phải nắm hai khái niệm chính đó là xử lý for
với cấp độ bình thường, nhưng khi xử lý một Array()
lớn thì for
thôi là chưa đủ, mà thêm khái niệm Stream()
.
Ví dụ như sau rất đơn giản:
Cho một String, chỉ lấy các từ có length() > 4 trở lên, sau đó sắp xếp theo length() của các từ đó theo giảm dần, sau đó chỉ lấy 3 words đầu tiên.
Ví dụ: Input
String sentence = "Hello world this is a Java example";
List<String> result = getTop3Words(sentence);
System.out.println(result);
Output:
["example"]
Rất đơn giản để giải quyết với tất cả các lập trình viên mới học or quen thuộc JAVA thì chỉ cần các thao tác như sau:
public List<String> extractTopThreeLongWords(@NotNull String text) {
// Split the text into words
String[] words = text.split(" ");
// List to store words that meet the length requirement
List<String> longWords = new ArrayList<>();
// Filter words longer than 4 characters
for (String word : words) {
if (word.length() > 4) {
longWords.add(word);
}
}
// Sort words by length in descending order
longWords.sort((w1, w2) -> w2.length() - w1.length());
// Return the top 3 longest words if available
return longWords.size() > 3 ? longWords.subList(0, 3) : longWords;
}
OK nó đã chạy nhưng nếu như chúng ta cần xử lý dữ liệu lớn thì rất kém đúng không, ta thấy rất rõ rằng cách hiện tại duyệt toàn bộ mảng (O(n))
và sắp xếp toàn bộ danh sách (O(n log n))
trước khi lấy 3 phần tử đầu, ngoài ra những dev có kinh nghiệm họ thấy ngay rằng:
List<String> longWords = new ArrayList<>();
dù thực tế chỉ cần giữ lại tối đa 3 phần tử nhưng sự khai báo này chiếm bộ nhớ không cần thiết có đúng vậy không?
Vậy DEV khác sẽ làm theo cách nào? Nếu bạn đang rơi vào trường hợp này thì có lẽ bạn nên dành thời gian cho Series này...
Xuất phát điểm rất giống nhau, nhưng tốc độ lại khác nhau.
Câu nói rất hay và thực tế rằng khi các bạn tung bông tung hoa, tung mũ tốt nghiệp trong ngày lấy bằng cấp là chính là ngày bạn kết thúc sự lạc quan vui vẻ và chuân bị bước vào một giai đoạn mới. Ngày đó là ngày xuất phát, nhưng 1 năm sau tuỳ theo tốc độ của mỗi bạn thì kết quả cũng sẽ khác vì vậy, tối sẽ định hướng rằng...
Xuất phát là các nguyên tắc kỹ thuật cơ bản của vấn đề
, vượt chướng ngại vật là Tích hợp kiến thức và thực hành để nâng cao toàn diện về kiến thực cũng như kỹ thuật
.
Ở giai đoạn tăng tốc Áp dụng những gì đã học vào thực hành, các giải pháp kỹ thuật có tính ứng dụng cao như dự án
DDD - Project: High-Level và cuối cùng lúc này bạn tự tin bước vào Giải quyết tất cả các kịch bản dự án của các công ty lớn or các công ty mình muốn tham gia
..
Các bạn đã từng nghe các câu hỏi như thế này chưa:
- Bạn đã thực hiện những tối ưu hóa hiệu suất nào trong các dự án của mình?
- Làm thế nào để cải thiện khả năng triển khai code trong các dự án của bạn?
- Trong dự án của bạn, bạn phân chia cơ sở dữ liệu và bảng như thế nào?
- Dự án của bạn là kiến trúc đơn khối(monolithic) hay kiến trúc vi dịch vụ (Microserive)?
- Nếu QPS trong dự án của bạn tăng gấp mười hoặc gấp trăm lần, bạn sẽ phản ứng thế nào?
- ...
Tôi tin rằng những bạn có có duyên với blog này tipsjavascript và channels này tipsbackend thì những câu hỏi trên dạng No Propblem..
Chúng ta sẽ đi cùng nhau chứ...
Hết... Chúng ta sẽ đi cùng nhau chứ. Chắc rồi, tôi sẽ đi mỗi tuần một bài... Bài sau sẽ là gì?