Talk show: Chia sẻ kinh nghiệm khởi nghiệp và kinh doanh – Hồ Hoàng Hải

Posted in Cuộc Sống, Kỹ năng mềm | Leave a comment

Tìm phần tử trùng lặp đầu tiên trong mảng

 Mô tả bài toán

Cho một mảng số nguyên, tìm phần tử đầu tiên bị trùng lặp (duplicate). Nếu không tìm thấy phần tử nào bị trùng lặp thì trả về -1.
Ví dụ: 
[2, 1, 3, 5, 3, 2]
firstDuplicate(a) = 3.
———
[2, 4, 3, 5, 1]
firstDuplicate(a) = -1.

Bài toán này có nhiều điểm tương đồng với một bài mà Hanhtrinhtuoitre đã từng đăng trước: http://hanhtrinhtuoitre.com/lap-trinh-kiem-tra-trong-day-so-ma-co-tong-2-so-bang-mot-so-cho-truoc/

Posted in Đố vui cùng lập trình | Leave a comment

[Vietsub] 73 Questions With Taylor Swift

Học tiếng Anh cùng người nổi tiếng Taylor Swift

Posted in Tài liệu tiếng Anh | Leave a comment

[OOP] Tính đóng gói trong OOP – Encapsulation

1. Đóng gói trong lập trình hướng đối tượng là gì?

Đóng gói tức là cách thức mà Class che giấu thông tin, hạn chế quyền try cập từ bên ngoài vào.
Chắc hẳn anh em đều biết đến 3 loại Access modifiers: Public – Protected – Private. Chúng giúp ta thể hiện tính chất đóng gói của OOP bằng cách nói cho Complier biết nên, có quyền try cập vào thuộc tính, phương thức nào.

2. Phân biệt Public – Protected – Private

Phân biệt giữa các Access modifiers là một trong những câu hỏi huyền thoại khi phỏng vấn  :10: 

private – Chỉ có Class hiện tại (không phải Class kế thừa, không phải Object) mới có thể truy cập được vào thuộc tính và phương thức có kiểu là private.

protected – Chỉ có Class hiện tại và Class kế thừa nó (subclasses) mới có quyền truy cập vào thuộc tính và phương thức có kiểu là protected.

public – Class hiện tại, Class kế thừa, Object khởi tạo từ Class đều có thể truy cập đến thuộc tính và phương thức với kiểu là public.

3. Ví dụ + tại sao lại có tính chất này?

// Vi du chi mang tinh vi du :D, hee

class Hanhtrinhtuoitre
{
    public $name;

    protected $urlAdminPage;

    private $passwordAdmin;
    
    public function register($id, $classId)
    {
        // dang ky tai khoan
    }

    protected function deletePost($id, $classId)
    {
        // xoa mot bai viet
    }

    private function deleteAccount($id, $classId)
    {
        // xoa mot tai khoan
    }
}

Có anh em từng nói với mình: gớm ông chỉ lắm trò, để hết là public cho nó dễ làm việc, có cái gì đâu mà phải đắn đo, suy nghĩ xem là private hay protected hay public.  :38: 

Nghe có vẻ không ổn, tưởng tượng mình xây một cái nhà, xây xong lại cứ để thằng nào thích vào thì vào, thích lấy gì thì lấy, thích thay đổi gì thì thay đổi, thế thì loạn.

Có một Class Nhà.
– Class Nhà có thuộc tính Public $name: giả định nhà mình có tên là hanhtrinhtuoitre, nhưng ông nào thích gọi thế thì gọi, không thì ông ấy có thể tự bịa cho Class Nhà này một cái tên mới ví như: DCM chẳng hạn  :29: 
– Class Nhà có một phương thức là Protected VaoThamNha(): tức là chỉ có hàng xóm, người thân thì vào được. Một thanh niên giời ơi đất hỡi đòi vào nhà là lỗi ngay.
– Class Nhà có một phương thức là Private MoKetSatLayTienChoiGai(): thôi xong, method này thì chỉ mỗi ông chủ nhà mở được thôi, chứ ai mà mém động vào thì chặt cụt tay.

Tạm thời anh em ta thống nhất hiểu chung chung, cơ bản là vậy.

Chắc chắn sau này khi số năm kinh nghiệm tăng lên thì chúng ta sẽ nghiệm và nhìn thấy nó rõ hơn trong từng dòng code.

:39:

Posted in 4 đặc tính của OOP (Object-oriented programming) | Leave a comment

Lập trình hướng đối tượng là gì? OOP là gì?

1. Mở đầu

Lập trình hướng đội tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một mô hình lập trình được tổ chức, xây dựng xung quanh đối tượng.
Người lập trình viên sẽ mô hình hóa các bài toán thực tế thành các thực thể (gọi là class). Thực thể này sẽ có các thuộc tính (gọi là biến – variable, thuộc tính – property) và các hành động (gọi là hàm – method – function). Cái mà thể hiện thực thể một cách cụ thể hóa thì được gọi là Object.

Ví dụ: Bài toán thực tế là lập trình một phần mềm để quản lý sinh viên. 
Từng bước giải quyết bài toán này nhé  :40: 

1. Tạo một thực thể – Class có tên là: Student.
2. Sinh viên thì có vài thuộc tính chính (variable): tên, tuổi, mã sinh viên…
3. Sinh viên có các hành động cơ bản: đăng ký lớp học

<?php

/**
 * Hanhtrinhtuoitre.com
 *
 * Class Student
 */
class Student
{
    /**
     * Ten sinh vien
     *
     * @var string
     */
    public $name;

    /**
     * Tuoi sinh vien
     *
     * @var number
     */
    public $age;

    /**
     * Ma sinh vien
     *
     * @var number
     */
    public $id;

    /**
     * @param $id
     * @param $classId
     */
    public function register($classId)
    {
        // dang ky sinh vien vao mot lop
    }
}

http://sandbox/5b4c2d833e79d6ba37501610214d90aa85f56653

Okey nhỉ? mình đã thấy có class rồi, variable rồi, method rồi…. Vậy còn Object trong bài toán thực tế này là gì?

Cái mà thể hiện thực thể một cách cụ thể hóa thì được gọi là Object.

Oh, vậy giả định có tất cả 2 sinh viên:
Sinh viên 1: có tên: hanhtrinhtuoitre.com, tuổi: 26, mã sinh viên: 123
Sinh viên 2: có tên: Dinh Cong Manh, tuổi: 55, mã sinh viên: 999

$sinhvien1 = new Student();
$sinhvien1->name = 'hanhtrinhtuoitre';
$sinhvien1->age = 26;
$sinhvien1->id = 123;

$sinhvien2 = new Student();
$sinhvien2->name = 'Dinh Cong Manh';
$sinhvien2->age = 55;
$sinhvien2->id = 999;

http://sandbox./5c85d993ce83bf1a872167a0771cbae507fd2616

Có lần mình phỏng vấn ứng viên phân biệt giữ Object và Class, đây là một câu hỏi cơ bản nhưng có bạn làm vài năm lập trình vẫn lúng túng khi trả lời câu hỏi này  :26: 

2. Các đặc tính của OOP.

Việc học và nắm vững các đặc tính của OOP là điều cần thiết để có thể đi xa hơn trong con đường lập trình. Cá nhân tác giả, đôi lúc cũng ngồi đọc và nghĩ lại, mỗi thời gian, cách nghĩ và hiểu sẽ khác nhau.
Đây sẽ làm nền móng để bạn có thể tiếp cận hơn với những điều thú vị sau này, ví thế đừng coi thường lý thuyết cơ bản này nhé.
Hanhtrinhtuoitre sẽ viết về các đặc tính của OOP trong các bài tiếp theo  :x1: 

Chờ đón nhé! :39: 

Posted in 4 đặc tính của OOP (Object-oriented programming) | Leave a comment

[Lập trình] Kiểm tra trong dãy số mà có tổng 2 số bằng một số cho trước

1. Mô tả bài toán

Cho một dãy số (một mảng), ví dụ: [1, 2, 5, 7, 8, 9, 11, 44, 2, 6, 43, 76, 21, 87, 33, 99, 12, 10]. Hãy kiểm tra trong dãy số này xem có tổng 2 số bằng 10 hay không? nếu có thì trả về TRUE ngược lại trả về FALSE.
Dễ dàng nhận thấy trong dãy trên có số 1 và số 9, tổng 2 số này bằng 10 => TRUE.  :9: 

2. Ý nghĩa 

Đây là một bài toán không khó về mảng, nếu chúng ta sử dụng 2 vòng foreach lồng nhau và đưa ra kết quả thì đó là cách bình thường. Tuy nhiên, cách này thường tốn tài nguyên, mất thời gian hơn.
Hãy thử nghĩ một cách nào đó mà chỉ sử dụng 1 vòng lặp.
Đây là bài toán khá thông dụng mà mình tin trong lập trình chắc gặp vấn tình huống như này trong thực tế.
Hanhtrinhtuoitre cũng định đưa lời giải lên cho mọi người tham khảo, nhưng có lẽ chỉ nên dừng lại ở đây là hợp lý… Các bạn ghé thăm có thể trả lời cách làm trong phần comment nhé!  :16: 

Hãy cùng thảo luận….  :35: 

Posted in Đố vui cùng lập trình | 1 Comment