Bạn tình cờ lướt trang tuyển dụng và thấy vị trí SAP ABAP Developer? Có vẻ đây là một ngôn ngữ khá lạ đối với một số lập trình viên. ABAP chính là ngôn ngữ lập trình bậc cao được tạo ra bởi SAP. Bạn muốn tìm hiểu sâu và rõ hơn ABAP là gì? Hãy cùng TopDev khám phá khái niệm, đặc điểm cũng như cơ hội việc làm của ABAP trong bài viết dưới đây. ABAP là gì? ABAP viết tắt của Advanced Business Application Programming là một ngôn ngữ lập trình bậc cao được phát triển bởi SAP, một công ty phần mềm hàng đầu thế giới trong lĩnh vực giải pháp quản trị doanh nghiệp. ABAP được sử dụng chủ yếu để phát triển các ứng dụng trên nền tảng SAP và tối ưu hóa các quy trình kinh doanh phức tạp của các tổ chức lớn. Nhờ tính mạnh mẽ và khả năng tùy biến cao, ABAP đã trở thà [...]
Read more →Tim Sort là một giải thuật sắp xếp kết hợp từ Merge sort và Insertion sort, nó được thiết kế để hoạt động tốt trong nhiều trường hợp dữ liệu cần sắp xếp trong thực tế. Tim Sort được sử dụng làm giải thuật mặc định trong Python với hàm sorted() và list.sort(). Bài viết hôm nay chúng ta cùng nhau tìm hiểu về giải thuật này nhé. Giải thuật TimSort Tim Sort được Tim Peters triển khai lần đầu tiên vào năm 2002 để sử dụng trong ngôn ngữ lập trình Python. Theo Tim Peters, lý do ông cho ra đời giải thuật này là vì ông nghĩ rằng hầu hết các thuật toán sắp xếp hiện có đều ra đời trên lý thuyết, trong các lớp học lập trình mà không được thiết kế để sử dụng thực tế trên dữ liệu từ thế giới thực. Trong tất cả các giải thuật sắp xếp cơ bản, thao tác chính được lặp đi lặp lại trong quá [...]
Read more →Bài viết được sự cho phép của tác giả Lê Tuấn Anh Bạn đã biết CV bao gồm những phần nào, cần phải viết gì trong đó rồi đúng không? Tuy nhiên mỗi người lại có một background khác nhau, mỗi người lại ứng tuyển cho một công việc khác nhau nên cách sắp xếp các đề mục trong CV cũng phải khác nhau. Việc bạn sắp xếp các đề mục đúng chuẩn sẽ giúp nhà tuyển dụng đọc CV của bạn hiệu quả hơn và giúp bạn có nhiều cơ hội hơn được gọi đi phỏng vấn đấy. 1. Cách sắp xếp của số đông Mục tiêu nghề nghiệp (có thể viết hoặc không) Kinh nghiệm làm việc Hoạt động ngoại khoá Học vấn Kĩ năng và thành tích Đây là cách mà mình thấy những người mới bắt đầu thường việc. Nếu bạn có nhiều kinh nghiệm khác nhau ở những lĩnh vực khác [...]
Read more →Bài viết được sự cho phép bởi tác giả Sơn Dương Làm việc với Array – Mảng là một trong những công việc thường xuyên nhất. Mình cũng có nhiều bài viết chuyên sâu hoặc thủ thuật để làm việc với mảng được hiệu quả hơn. Bài hôm nay, mình sẽ chia sẻ cách sắp xếp các phần tử trong mảng tăng dần hoặc giảm dần. Nếu để ý kỹ, bạn sẽ nhận ra một vấn đề ở đây. Sắp xếp tăng dần hoặc giảm dần là theo tiêu chí gì? Nếu mảng chỉ gồm các phần tử là số, hoặc string thì đơn giản quá. Nhưng nếu mảng chứa các phần tử là object thì sao? Chúng ta sẽ cùng nhau tìm hiểu nhé. Sắp xếp mảng có phần tử là số, String Chúng ta vào bài toán đơn giản trước nhé. Giả sử, chúng ta có một mảng sau: const numArray = [9, 5, 3, 2, 8, 6, 1] Để sắp xếp mảng này, chúng ta có thể [...]
Read more →Bài viết được sự cho phép của blogchiasekienthuc.com Đa nhiệm là một trong những khả năng rất tuyệt vời có trên hệ điều hành Windows 10 nói riêng và tất cả các hệ điều hành (như, iOS, Android, Ubuntu, macOS…) nói chung. Bạn có thể làm việc cùng lúc với nhiều chương trình, nhiều cửa sổ khác nhau nếu màn hình đủ rộng và cấu hình máy tính đủ mạnh, giúp nâng cao hiệu quả công việc và giảm đáng kể thời gian làm việc so với trước đây. Chính vì có thể mở rất nhiều của sổ cùng lúc nên việc sắp xếp ngăn nắp các cửa sổ làm việc là điều cần thiết, trong quá trình kéo qua kéo lại các cửa sổ để sắp xếp thì không ít lần một trong số các cửa sổ làm việc của mình bị “lạc trôi” và thế là phải mở lại chương trình từ đầu :(( Thế nên [...]
Read more →Bài viết được sự cho phép của tác giả Phạm Công Sơn Sắp xếp chèn (insertion sort) là một thuật toán sắp xếp bắt chước cách sắp xếp quân bài của những người chơi bài. Muốn sắp một bộ bài theo trật tự người chơi bài rút lần lượt từ quân thứ 2, so với các quân đứng trước nó để chèn vào vị trí thích hợp. [irp posts="32460" name="Thuật toán Heap Sort"] [irp posts="36740" name="Sắp xếp (sort) string Tiếng Việt"] Sau đây là mô phỏng thuật toán Insertion Sort Tạo dãy số ngẫu nhiên để mô phỏng sắp xếp Tổng sốTạo dãy số 20 25 54 95 66 10 90 30 67 65 ? ? ? Tốc độ Thực hiện sắp xếp Mã nguồn được thực hiện trên javascript var InsertionSort = function () { $.extend(this, new SortX()); this.onCreateScripts = function (array, scripts) { var $this = this; var addScript = function (a1, a2, action) { scripts.push($this.createScript0(a1, a2)); // Script lấy ra 2 số cần so sánh scripts.push($this.createScript1(a1, a2)); // Script để thực hiện so sánh giữa 2 số return action(); } var j, [...]
Read more →Bài viết được sự cho phép của tác giả Phạm Công Sơn Chọn phần tử nhỏ nhất trong n phần tử ban đầu, đưa phần tử này về vị trí đúng là đầu tiên của dãy hiện hành. Sau đó không quan tâm đến nó nữa, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt đầu từ vị trí thứ 2. Lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn một phần tử. Dãy ban đầu có n phần tử, vậy tóm tắt ý tưởng thuật toán là thực hiện n-1 lượt việc đưa phần tử nhỏ nhất trong dãy hiện hành về vị trí đúng ở đầu dãy. [irp posts="35791" name="Một vài “trick” khi sử dụng Xpath và CSS selector trong Selenium"] [irp posts="37316" name="Download, Export file tự động với Selenium Webdriver"] Các bước thực hiện thuật toán 1. Chọn phần tử đầu tiên i = 0 2. Tìm phần tử a[min] nhỏ nhất trong mảng từ a[i] tới a[n]. Vớ [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng Một vấn đề không hề mới, xưa như năm 1991, và có vẻ đâu đó đã được giải quyết 😒 [irp posts="23846" name="Convert giá trị String qua Number trong Javascript"] [irp posts="33583" name="Tìm hiểu về đối tượng String trong Java"] Vậy nhưng nếu thử hỏi một lập trình viên sử dụng ngôn ngữ lập trình bất kỳ hãy viết một đoạn code sắp xếp những cái tên sau theo thứ tự của tiếng Việt: In [14]: provinces = ['Hải Dương', ...: 'Hưng Yên', ...: 'Hà Nội', ...: 'Hải Phòng', ...: 'Hậu Giang', ...: 'Hòa Bình', ...: 'Hà Nam', ...: 'Hà Giang', ...: 'Hà Tĩnh'] Kết quả thu được sẽ khá bất ngờ: In [15]: sorted(provinces) Out[15]: ['Hà Giang', 'Hà Nam', 'Hà Nội', 'Hà Tĩnh', 'Hòa Bình', 'Hưng Yên', 'Hải Dương', 'Hải Phòng', 'Hậu Giang'] Lẽ ra, thứ mà chúng ta muốn nhìn thấy phải là "Hưng Yên" đứng cuối list, khi mà chữ "ư" đứng sau tất cả các phụ âm khác. Vậy function sorted có bug? Hãy thử [...]
Read more →Bài viết được sự cho phép của tác giả Khiêm Lê Thuật toán sắp xếp là lời giải của bài toán sắp xếp. Mục đích của việc sắp xếp chính là giúp ta có cái nhìn tổng quan hơn về những dữ liệu là cơ sở cho các giải thuật nâng cao với hiệu suất cao hơn. Ví dụ như khi thực hiện tìm kiếm, thuật toán tìm kiếm nhị phân có độ phức tạp thời gian là O(log(n)) và ổn định, nhưng thuật toán này chỉ áp dụng được với dãy đã được sắp xếp. Vậy khi này, bạn có thể thực hiện sắp xếp trước sau đó áp dụng thuật toán tìm kiếm nhị phân. Trong bài viết này, TopDev sẽ giới thiệu đến các bạn một số thuật toán sắp xếp trong C++ phổ biến nhất mà lập trình viên nào cũng nên biết. Hãy cùng bắt đầu thôi! Tham [...]
Read more →Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm Phỏng vấn Có nhiều lần đi phỏng vấn tui bị hỏi câu này. Giả sử service tự dưng lăn đùng ra chết không còn gửi được request nữa, bạn sẽ làm gì? Lần nào được hỏi tui cũng nghĩ một câu chuyện khoa học viễn tưởng rồi phang bừa. Cá nhân tui nghĩ đây là một câu hỏi nhằm đánh giá khả năng tiếp cận & giải quyết vấn đề của bạn, chứ không hẳn là có câu trả lời cụ thể. Tuy nhiên đi làm thì cũng có lúc … server lăn ra chết thật. Vậy thì bạn sẽ làm gì? Thực tế Sau đây là một câu chuyện có thật của các nhân vật hư cấu. Có một hôm trúng ngay lượt Quần Cam on-call, app của công ty tự nhiên load dữ liệu mới rất chậm, tài khoản Twitter của app được tag liên tụ [...]
Read more →Bài viết được sự cho phép của tác giả Lưu Bình An Chúng ta sẽ hiện thực các thuật toán này bằng JavaScript,. Hàm helper để swap giá trị function swap(arr, a, b) { let temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } Hàm để so sánh giá trị const Compare = { LESS_THAN: -1, BIGGER_THAN: 1 }; function defaultCompare(a, b) { if (a === b) { return 0; } return a < b ? Compare.LESS_THAN : Compare.BIGGER_THAN; } Bubble Sort Tình huống tốt nhất: độ phức tạp = O(N) (đi qua đúng n phần tử) Tình huống xấu nhất: độ phức tạp = O(N^2) (đi qua n mũ 2 phần tử) Cái này rất ít xài trong thực tế, chỉ để dạy và học, vì nó chậm nhất so với các thuật toán khác. Ý tưởng là sẽ so sánh 2 phần tử liền kề, hoán đổi vị trí cho phù hợp function bubbleSort(arr, compare = defaultCompare) { const { length } = arr; for (let i = 0; i < length; i++) { for (let j = 0; j < length - 1 - i; j++) { // refer to note below if (compare(arr[j], arr[j + 1]) === Compare.BIGGER_THAN) { swap(arr, j, j + 1); } } } return arr; } Để hình dung thuật toán này, bạn có [...]
Read more →Bài viết được sự cho phép của BBT Tạp chí Lập trình [irp posts="14447" name="Cấu trúc dữ liệu và giải thuật - Thuật toán tìm kiếm"] [irp posts="7791" name="Kỹ Thuật Phân Tích Giải Thuật"] 1. Sắp xếp kiểu lựa chọn (Selection Sort) Một trong những phương pháp đơn giản nhất để thực hiện sắp xếp một bảng khóa là dựa trên phép lựa chọn. Nguyên tắc cơ bản của phương pháp sắp xếp này là “ở lượt thứ i(i=1,2,…,n) ta sẽ chọn trong dãy khoá Ki, Ki+1,…,Kn khoá nhỏ nhất và đổi chỗ nó với Ki ”. Như vậy thì rõ ràng là sau j lượt, j khoá nhỏ hơn đã lần lượt ở các vị trí thứ nhất, thứ hai,…, thứ j theo đúng thứ tự sắp xếp. Ví dụ: Sắp xếp dãy số sau theo thứ tự tăng dần: “42, 23, 74, 11, 65, 58, 94, 36, 99, 87”. Sau đây là giải thuật: Cho dãy khóa K gồm n phần tử. Giải thuật này thực hiện sắp xếp các phần [...]
Read more →Bạn vẫn còn thắc mắc về định nghĩa của modern software architecture? Bạn đang tìm kiếm software architecture tốt nhất để áp dụng cho dự án của mình? Hy vọng bài viết này sẽ giúp bạn tìm thấy câu trả lời. Introduction Trong định nghĩa về software development thì architecture của dự án đóng vai trò rất quan trọng nhằm đảm bảo quá trình maintenance & reusability. Software architecture đảm bảo rằng phần mềm mà bạn xây dựng có bộ khung cơ bản. Từ đây, chúng ta có thể build bất cứ thứ gì chúng ta muốn. Câu hỏi luôn đặt ra trong đầu tôi những ngày này làm cách nào để chúng ta kết hợp Clean Architecture & Modular pattern? Tôi đã code vài thử nghiệm và cuối cùng quyết định tổng hợp lại trong bài viết này. Bài viết sẽ dựa trên kinh nghiệm có được trong quá trình phát triển phần mềm và cách để phương pháp modular có thể áp dụng concept Clean Architecture vào quá [...]
Read more →Khi tôi, ở vị trí senior, ứng tuyển vào MIT cho vị trí full-time đầu tiên, phần khiến tôi lo sợ nhất không phải là thiết kế thuật toán hay phân tích phức tạp gì, mà chính là khoảnh khắc vào cuối buổi phỏng vấn - khi được hỏi: "Bạn có câu hỏi gì với công ty không?" Tôi thực sự rất lo, không biết liệu nếu mình đặt ra câu hỏi khó có khiến họ có cái nhìn thiếu thiện cảm với mình và làm giảm khả năng nhận được offer hay không. Tôi càng không muốn thể hiện mình là 1 người khó làm việc cùng. Trên tất cả, tôi không chắc mình nên hỏi cái gì để thực sự hiểu rõ về công ty đó. 2 năm rưỡi sau, tôi giờ đây đã là software engineer full-time tại Quora và đã trải qua hơn 150 giờ phỏng vấn các ứng viên. Cuối mỗi buổi phỏng vấn, tôi luôn dành ra 5 [...]
Read more →