0

Phần 2: Mã hóa mật khẩu như nào

Level 1. Thuật toán mã hóa: cứ BCRYPT, ARGON2I, PBKDF2 hoặc BLOWFISH. Chọn cái méo nào cũng được để băm. Thay cho md5 hoặc sha cổ lỗ. (tham khảo cho PHP: http://php.net/manual/en/function.password-hash.php).

Level 2: Băm mỗi mật khẩu của mỗi người dùng với 1 salt ngẫu nhiên >= 64bit. 

Ví dụ: trường hợp Trần văn Xoạc

Input password: 123456
saltkey: random string 64bit, ví dụ: dcm

string to encode: input password + saltkey

-> đem đi băm

riêng việt sắp đặt saltkey ở đâu cũng tùy biến được rồi, đầu, trộn, đuôi, abc, xyz

Level này sẽ giúp cho bài toàn 2 user sử dụng chung 1 pass nhưng output string khác nhau hoàn toàn.

Cái salt này ko cần giấu, cứ // với field lưu password lưu là đc rồi. Tham khảo DB của: joomla, drupal, wordpress, VBB...

Level 3: Băm toàn bộ mật khẩu người dùng với 1 pepper key, dài khuyến nghị 128bit trở lên. Key này cần đc lưu trữ bí mật, lưu ở 1 server khác với chỗ lưu mật khẩu.

pepper này là level cao hẳn, và việc setup quyền truy cập đến pepper này cũng cần phải private, hạn chế quyền truy cập, chỉ có 1 server production được cấp quyền với người quản trị được cấp quyền, có server giám sát để kết nối và valid password

Note: money lover, momo và 1 số ứng dụng tài chính đang băm kiểu vầy, sau vụ money lover và momo lộ tài khoản người dùng.

-----
Phản ứng phụ: Admin quên Password cũng chỉ có thể Reset qua thuật toán, ếu vào dB lấy lại đc =))
-----

Phần 3: Kiến trúc lưu pepper key

Nguồn: https://www.facebook.com/photo.php?fbid=1700993986623130&set=a.105369379518940.8266.100001376346062&type=3&theater
Xem chi tiết
0

Cố gắng 1 chút


Cái thời ngày xưa khi còn làm fresher bên 1 cty nào đó không tin bêu tên ở đây, có 1 bài học nhỏ, tôi vẫn thấy nó đúng cho đến thời điểm này.

Nếu như múc 1 xô nước khỏi đại dương, chắc hẳn mọi người vẫn thấy đại dương chẳng thay đổi điều gì. Nếu bỏ thêm 1 nắm cát vào sa mạc, chắc hẳn, sa mạc đó vẫn chẳng đổi thay.

Ví dụ, bạn đặt 1 món hàng ghi chữ giao hàng trong ngày, bạn kì vọng sẽ nhận được nó vào 10h sáng, có sớm hay muộn 1 tiếng, chắc với bạn cũng không có gì lớn lao, vì đều là giao hàng trong ngày cả.

Nếu có 2 chai nước, 1 chai là 340ml, 1 chai là 360ml, chắc hẳn, với bạn nó đều là dạng chai nước nhỏ kiểu c2, 350ml trong tâm trí bạn - cũng như khách hàng.

1 chiếc laptop, có độ bền khoảng 4 năm và 1 chiếc khác là 3 năm 11 tháng, chắc hẳn với phần đông mọi người, nó không có gì khác biệt cả.

Vấn đề ở đây là, liệu bạn sẽ cố gắng hơn 1 chút, hay lười biếng hơn 1 chút, khi mà 1 chút đó có vẻ không hề làm thay đổi kết quả cuối cùng?

Lựa chọn nằm ở bản thân mỗi người. Liệu sẽ thêm 1 chút, hay bớt đi 1 chút trong sự cố gắng của ta. Có điều, nên nhớ rằng, Ngu Công dời núi, mỗi ngày 1 hòn đá cuối cùng cũng thành công. Một khi những sự khác biệt nhỏ tích lũy đủ nhiều, chân tướng sẽ lộ diện thôi.

Cách tích lũy này, thích hợp với mình, 1 thằng không có base đủ tốt, không có những sức bật lớn, chỉ còn cách tích tiểu thành đai.

Vậy 1 lần nữa, bạn chọn cách nào: thêm 1 chút, hay bớt 1 tí?

P/s: tặng kèm phép toán đơn giản cho câu trả lời rằng: có nên phấn đấu thêm 1 chút nữa hay không.

Bớt 1 chút, là 0.99

Thêm 1 chút, là 1.01





Xem chi tiết
0

Phỏng vấn PHP


Thời gian gần đây tham gia phỏng vấn Dev cho team, tôi hay đặt ra 1 câu hỏi như sau:

Có 2 người là Trần văn Chịch và Lê thị Xoạc, 2 người cùng đăng ký sử dụng dịch vụ của bạn, cùng sử dụng 1 mật khẩu là 123456, vậy mật khẩu của người dùng được xử lý như thế nào.

1. Không mã hóa mật khẩu: Chúng ta chia tay nhau ở đây, hẹn khi nào em bớt dễ dãi thì mình gặp nhau lại em nhé.

2. Có mã hóa.

2a) Output mã hóa giống nhau trong DB
- Hơi buồn 1 tí. Chắc chắn là md5 hoặc sha1 rồi, tệ hơn nữa, em ếu biết, framework (thầy, cô, trên mạng) bảo thế và em làm theo.
- Em vẫn hơi dễ dãi, anh rất buồn. Anh đẹp trai nhưng khó tính.

2b) Output string trong DB khác nhau.

Cảm thấy hứng thú với những bạn ứng viên như vậy, tuy nhiên, qua quá trình đọc và PV, nhận thấy rất nhiều ứng viên rơi vào tình trạng như sau.

2b.1). Em sử dụng tính năng có sẵn của Framework
- Đối tượng này đa phần sử dụng các FW hiện đại như Laravel, Yii..., có class Auth có sẵn, chỉ extends và dùng. Tiện, nhanh nhưng ếu biết vì sao nó chạy, ếu biết nó mã hóa như nào luôn.

Mình nghĩ đối tượng này tương đối nhiều trong thời buổi hiện tại. Sử dụng FW theo cast và không hiểu bản chất của nó. Dẫn đến 1 thực tế là biết nhiều, nhiều kiến thức nhưng không nối được với nhau. Dẫn đến việc làm ra những sản phẩm không đủ an toàn và không đi sâu.

2b.2) Tự xây dựng thuật toán sử dụng hàm băm đủ mạnh như bcript, alowfish... kèm theo muối (saltkey).

Đặc biệt ấn tượng với đối tượng này. Thông thường, kèm theo đó mình hay hỏi về vụ lộ password của Zing vừa rồi để hỏi thử xem có quan tâm gì đến tình hình thế giới hay không.

Đến đây: Em ơi, mình sinh ra là dành cho nhau rồi. Hãy về với đội của anh em nhé <3

P/s: 1 trong những bài học mình luôn dạy cho những đứa em thân thiết là

- có 1 cái CMS, ếu có password, ếu có DB Password, không biết thuật toán mã hóa password nhưng có full code -> làm cách nào để login vào hệ thống?

Thực ra vấn đề không khó giải quyết, nhưng đáng tiếc, không nhiều người làm được. Những vấn đề này không phải quá khó, nhưng nó là 1 bài toán xử lý tình huống điển hình. Rơi vào khó khăn và tìm cách giải quyết. Người có thể vận dụng sự hiểu biết này để leo thang hệ thống. Không giỏi, nhưng chắc chắn có ích.
Xem chi tiết
0

Thuật toán tham lam

Phần 1: Thuật toán

Gọi là thuật toán tham lam nhưng thực chất tham lam không được gọi là thuật toán, mà nó là một kỹ thuật, một phương pháp để tiến hành giải một vấn đề trong lập trình.

Vậy thì thuật toán tham lam là gì?

Một thuật toán tham lam, như tên gọi cua nó, đó là luôn luôn làm một sự lựa chọn tốt nhất tại thời điểm hiện tại. Điều này có nghĩa rằng, sự lựa chọn tốt nhất ở mỗi bước sẽ dẫn tới lời giải tối ưu nhất

Vậy chọn lựa tối ưu hóa bằng cách nào?

Giả sử ông có một hàm cần tối ưu hóa (hoặc cực đại, hoặc cực tiểu hàm đó). Một thuật toán tham lam sẽ thực hiện các lựa chọn tham lam ở mỗi bước để đảm bảo rằng hàm đã cho là tối ưu. Thuật toán tham lam chỉ có một lần tính toán lời giải tối ưu với mục đích nó không bao giờ trở lại và đảo ngược quyết định.

Thuật toán tham lam có một vài sự thuận lợi và không thuận lợi:


  • Khá dễ để tiến hành một thuật toán tham lam cho một project
  • Phân tích thời gian chạy của thuật toán tham lam sẽ dễ dàng hơn kỹ thuật khác (như Chia để trị). Với kỹ thuật chia để trị, không rõ ràng liệu kỹ thuật này là nhanh hay chậm. Lý do là ở mỗi mức của đệ quy kích thước nhỏ hơn và số lượng của bài toán con lớn hơn.
  • Khó khăn của tham lam là rất vất vả để hiểu chính xác vấn đề. Thậm chí với giải thuật chính xác rồi, cũng rất khó khăn để chứng minh tại sao nó đúng. Chứng minh một giải thuật tham lam là đúng có cảm giác là cả một nghệ thuật hơn là một khoa học, vì nó đòi hỏi rất nhiều sự sáng tạo

Lưu ý: Hầu như các giải thuật tham lam đều không chính xác. Một ví dụ sẽ được mô tả trong bài báo sau đây.

Tạo ra một Giải thuật tham lam như thế nào?

Bài toán: Là một người bận rộn, ông có đúng T thời gian để làm một vài thứ thú vị và ông muốn làm nhiều thứ nhất có thể.

Cho một mảng A gồm các số có kiểu int, trong đó mỗi phần tử biểu thị thời gian hoàn thiện thứ đó. Hãy tính toán số thứ ông có thể làm với thời gian giới hạn

Đây là một bài toán tham lam đơn giản. Ở mỗi bước, ta phải chọn lựa tham lam bằng cách chọn các công việc có thời gian hoàn thành ít nhất. ở đây ta có hai biến là thời gian hiện tại (currentTime) và số lượng công việc (numberOfThings). Để hàm thành, ta phải:


  • Sắp xếp mảng A theo chiều không giảm
  • Chọn lựa mỗi công việc để làm
  • Cộng thời gian để hoàn thành vào biến currentTime
  • +1 một tới numberOfThings
  • Lặp lại điều này trong khi biến currentTime nhỏ hơn hoặc bằng T, vậy là xong.

Phần 2: Giải thuật

Cái thuật toán là phương pháp lấy tư tưởng từ cuộc sống. Khi gặp một tình huống quá phức tạp, hoặc một vấn đề mà chưa có lời giải hoàn chỉnh, thì thấy cái gì tốt nhất, mà khả thi ở thời điểm hiện tại thì làm. Cứ thực hiện đi đã rồi sẽ tiếp tục tối ưu sau.

Nghĩ nhiều quá, phức tạp quá, triển khai chậm có khi lại không thành công.

Hơn nữa mọi việc để hướng tới sự hoàn hảo đều tốn rất nhiều công sức, đặc biệt ở những phần trăm cuối. Nhưng để đạt được 80% thành công thì lại không quá khó. Nó tương tự như việc ông muốn trở thành người xuất sắc nhất lớp, hoặc đạt giải nhất cuộc thi thì phải nỗ lực rất lớn. Còn để học khá, vào top đầu thì lại tương đối đơn giản.

Trong các cuộc thi học sinh giỏi, trong khoảng thời gian rất ngắn chưa thể nghĩ được lời giải chính xác thì khuyên hãy áp dụng phương pháp tham lam, để ghi thêm ít điểm. Ví dụ thi trắc nghiệm mà không bị trừ điểm nếu chọn sai thì bất cứ câu nào không làm được thì cứ random chọn bừa đi. Biết đâu trúng Vietlott.


Xem chi tiết
0

Giang Hồ

Tàu đi qua phố tàu qua phố
Phố lạ mà quen ta giang hồ
Chẳng lẽ suốt ngày bên bếp vợ
Chẻ củi trèo thang với giặt đồ

Giang hồ đâu bận lo tiền túi
Ngày đi ta chỉ có tay không
Vợ con chẳng kịp chào xin lỗi
Mây trắng trời xa, trắng cả lòng

Giang hồ ta ghé nhờ cơm bạn
Đũa lệch, mâm suông, cũng gọi tình
Gối trang sách cũ, nằm nghĩ bụng
Cười xưa Dương Lễ với Lưu Bình

Giang hồ có buổi ta ngồi quán
Quán vắng mà ta chửa chịu về
Cô chủ giả đò nghiêng góc ghế
Đếm thấy thừa ra, một gốc si

Giang hồ mấy bận say như chết
Rượu sáng chưa lưa, đã rượu chiều
Chí cốt cầm ra chai rượu cốt
Ừ thôi trời đất cứ liêu xiêu

Giang hồ ta chẳng hay áo rách
Sá gì chải lược với soi gương
Sáng nay mới hiểu mình tóc bạc
Chợt tiếng trẻ thưa ở bên đường

Giang hồ ba bữa buồn một bữa
thấy núi thành sông, biển hoá rừng
Chân sẵn dép giầy, trời sẵn gió
Ngựa về ta đứng, bụi mù tung

Giang hồ tay nải cầm chưa chắc
Hình như ta mới khóc hôm qua
Giang hồ ta chỉ giang hồ vặt
Nghe tiếng cơm sôi cũng nhớ nhà
Xem chi tiết
0

Tiêu chuẩn của bản thân

Trước đây, thời chinh chiến freelancer bên ngoài với các đối tác đến từ khắp nơi trên thế giới, mình học được 1 điều là tiêu chuẩn của họ luôn rất cao so với mặt bằng chung ở mình (Việt Nam). Cái sự khắt khe ấy đôi khi đến từ 1 bạn sinh viên cần làm đồ án rất bình thường. Thậm chí giao diện có 1 lỗi chính tả, font to hay thấp là nhắc ngay. Còn ở mình, những lỗi nhỏ đó dễ được chấp nhận và bỏ qua.

Sau này, khi làm dự án với sếp mình, sếp cũng hay nhìn vào những điểm rất nhỏ. Ban đầu nghĩ đó là soi, để ý tiểu tiết, nhưng rồi học được nhiều điều hơn, sản phẩm làm ra tốt hơn, ít lỗi hơn.

Mình nghĩ, sở dĩ có sự khác biệt đó là bởi vì có 1 thứ gọi là “Tiêu chuẩn” (Standard). Tiêu chuẩn của 1 người là cách họ nhìn nhận xem “như thế nào thì là bình thường” đối với họ.

Mình làm việc với một bạn lập trình viên có tiêu chuẩn cao, khi bạn hoàn thành một công việc nào đó thì bạn sẽ khắt khe với chính mình hơn. Đôi lúc, có những việc rất nhỏ tưởng chừng như không hề liên quan trực tiếp đến nhiệm vụ của bạn, như một lỗi chính tả trong kịch bản, hay một vài đối tượng được mô tả chưa hợp lý, thì bạn sẽ chủ động phản hồi lại cho mình, hoặc cho người viết kịch bản để điều chỉnh lại cho hợp lý.

Khi bạn hiện thực một logic nào đó, bạn sẽ chủ động suy nghĩ đến những tình huống khác chưa được mô tả để làm rõ nó hơn. Trái lại, một bạn lập trình viện có tiêu chuẩn thấp hơn, bạn sẽ dễ hài lòng và thỏa hiệp với công việc của mình. Bạn nhận yêu cầu có vài điều chưa hợp lý trong đó, bạn sẽ vẫn cứ làm theo. Có lỗi thì sửa sau, lo gì? Với bạn, nhiệm vụ của bạn chỉ là code, yêu cầu được tạo ra là do người khác. Nên bạn chỉ cần hoàn thành nhiệm vụ của mình, vậy là được. Bất kể nó có không hợp lý thế nào đi nữa. (quay lại note trước: vụ ấn nhầm cái nút báo động).

Làm việc với một bạn designer có tiêu chuẩn cao, mình sẽ cảm thấy bạn chịu lắng nghe yêu cầu từ phía mình hơn. Khi thiết kế của bạn được duyệt, bạn sẽ không dừng lại ở đó mà còn tự suy xét lại quá trình mình làm trước đó đã ổn hay chưa. Rằng bạn có biết cách đặt câu hỏi và góp ý để bản thiết kế được tạo ra đúng với mục đích ngay từ đầu hay không? Rằng tại sao khách hàng lại yêu cầu thay đổi nhiều như vậy? Là do bạn chưa tìm cách hiểu đúng cũng như khơi gợi khách hàng nói ra những điều họ nghĩ và cảm nhận, hay chỉ đơn giản là họ thích đổi ý mà thôi? Trái lại, một bạn designer có tiêu chuẩn thấp sẽ tự hài lòng với mình ngay khi bản thiết kế của bạn được chấp nhận. Và bạn sẽ ngay lập tức nghĩ đến làm việc khác ngay, thay vì dừng lại và rút kinh nghiệm. Vì với bạn, vậy đã là được.

Nhìn chung, khi làm việc với những bạn có tiêu chuẩn cao, dù rằng bạn còn trẻ, mình vẫn sẽ có tự tin khi giao nhiệm vụ cho các bạn. Vì mình tin, bản thân bạn sẽ chủ động tìm tòi và đặt câu hỏi để bản thân hoàn thành công việc. Bạn vẫn có thể phạm sai lầm, nhưng sau khi phạm sai lầm đó, bạn sẽ chấp nhận và rút kinh nghiệm từ đó. Một bạn có tiêu chuẩn làm việc cao, thường khi được chỉ ra sai lầm, bạn sẽ nhanh chóng điều chỉnh để không phạm phải sai lầm đó. Còn bạn có tiêu chuẩn thấp, thì thường biểu hiện sẽ ngược lại, rằng "vậy đã là được rồi, cần gì làm tốt hơn" - hay “làm đến thế thôi, làm tốt có ai quan tâm đâu”, đôi khi còn phản ứng theo cách tiêu cực hơn nữa, bỏ cuộc hoặc phản kháng kiểu “ông biết cái đéo gì mà nói”.

Một team, gồm những người có tiêu chuẩn cao làm việc với nhau, sẽ mang đến chất lượng công việc cao hơn hẳn. Vì từng thành viên đều hướng đến việc không chỉ hoàn thành công việc của mình, mà còn hoàn thành nó một cách trọn vẹn nhất. Khi có lỗi xảy ra, mỗi thành viên sẽ tự xem lỗi ở khâu nào để cùng chỉnh sửa, thay vì đổ lỗi cho nhau. Chỉ có như vậy thì tất cả mọi người trong team mới ngày 1 hoàn thiện hơn, tiêu chuẩn ngày 1 cao hơn.

Bản thân mình tin rằng, tiêu chuẩn là một trong các nhân tố giới hạn năng lực bản thân nhiều nhất. Bạn có thể trẻ, có thể non kinh nghiệm, nhưng đừng để tiêu chuẩn của bạn thấp. Khi tiêu chuẩn của bạn cao trong công việc cũng như trong cuộc sống, bạn sẽ luôn không ngừng phấn đấu, không ngùng học hỏi, quan sát, không ngừng rút tỉa kinh nghiệm cho bản thân mình. Từ đó, bạn sẽ không ngừng tiến bộ. Trái lại, nếu tiêu chuẩn của bạn tự đề ra cho mình thấp, bạn sẽ dễ hài lòng với cuộc sống thực tại, dễ thỏa hiệp với bản thân, thấy khó là bỏ. Dần dần, bạn sẽ càng ngày càng tụt lại so với những người xung quanh. Bất kể trong công việc hay trong cuộc sống - Dừng lại, chính là đi lùi, mình tin vậy.

Một người sau 1 khoảng thời gian dài (3 tháng là 1 khoảng thời gian đủ để gọi là dài) nếu không có tiến bộ (nâng cao tiêu chuẩn), đây chính là đi lùi. Nếu khoảng thời gian đó dài hơn, chỉ có 2 khả năng:

  1. Bản thân họ không có nhu cầu. Với những người như vậy, thì rất khó để thay đổi, vì nâng cao tầm và nhận thức của bản thân là cái gì đó xa xôi và họ không cần - không muốn. Giống con cua chỉ muốn mãi độc bá cái khoảng trời trong miệng giếng. 
  2. Họ chưa tìm được cách. Đọc tiếp đoạn bên dưới 
Vậy thì làm sao để nâng cao tiêu chuẩn bản thân? Một vài cách mình thấy hiệu quả:

Tìm kiếm một môi trường có tiêu chuẩn cao để sinh hoạt và làm việc. Một môi trường có tiêu chuẩn cao, là nơi có những người khắt khe với sai lầm của bạn. Mọi lỗi lầm dù nhỏ đều được mang ra mổ xẻ để rút kinh nghiệm. (Đương nhiên: bạn phải có nhu cầu nâng cao tiêu chuẩn bản thân, nếu không sẽ là phản tác dụng.) Nếu không chỉ ra, sai lầm 1 lần mà lần sau vẫn tái phạm hoặc không được ai chỉ ra, đấy là 1 một môi trường có tiêu chuẩn thấp, dễ dàng bằng lòng với những thứ không đủ tốt. Mà bằng lòng với thứ không đủ tốt thì bản thân cũng sẽ không tốt lên được. Mình tin là như thế.

Quan sát những người giỏi trong lĩnh vực của mình làm việc. Khi càng ngày càng đi sâu vào một lĩnh vực nào đó, đằng sau mỗi hành động, mỗi câu chữ đều sẽ có ý nghĩa riêng của nó. Một người càng giỏi thì quá trình suy nghĩ dẫn đến hành động của họ sẽ càng nhiều, vì vậy mà họ sẽ hành động một cách thấu đáo hơn. Hãy luôn tự đặt câu hỏi "Tại sao họ làm vậy?". Đừng vội áp đặt cảm tính của mình vào để nhìn, hãy nhìn vào cả quá trình và kết quả.

Mỗi khi hoàn thành một công việc nào đó, luôn dừng lại để tự hỏi: mình làm vậy đã là tốt nhất chưa, có cách nào làm tốt hơn nữa hay không? Nếu lần sau gặp lại mình có làm nhanh hơn không? Cần xem lai những sai lầm đã gặp phải, ghi nhớ nó để lần sau tránh nó ra, hoặc, nghĩ ra giải pháp để khắc phục nó.

Đọc sách, báo, tài liệu liên quan: Việc không ngừng đọc và tìm hiểu về lĩnh vực của mình cũng sẽ khiến bạn mở rộng phạm vi hiểu biết của mình ra để từ đó nâng tiêu chuẩn của mình lên cao hơn.

Việc nâng cao tiêu chuẩn của bản thân, nó giống 1 câu nói của các cụ ngày xưa: “Tu thân, tề gia, trị quốc, bình thiên hạ”. Chỉ khi bản thân mình tốt lên, rồi thì mọi thứ xung quanh cũng sẽ tốt lên.
Xem chi tiết
0

Hạng Tịch, Hoài Âm hay Tử Phòng

Hán Sở tranh hùng, ngoài đồng chí Lưu (manh) Bang ra thì 3 anh này nổi tiếng nhất. 3 anh với 3 thái độ hoàn toàn khác nhau. Cái kết cũng khác nhau.

Hạng Tịch (Vũ): Tây Sở Bá Vương vũ dũng nghìn năm không có lấy 1. Anh hùng bản sắc, anh hùng triệt để. Đập nồi dìm thuyền, đem vài vạn binh đập cho Lưu Bang chạy tới tấp. Anh hùng khó qua ải mỹ nhân (Ngu Cơ) để rồi ôm hận khi không về bờ Đông. Khi chết không thành đế nhưng Thái Sử Công vẫn liệt vào hàng bản kỷ bên cạnh thiên cổ nhất đế Doanh Chính.

Hoài Âm hầu Hàn Tín: “chiến thần”, “vương tướng” nghìn năm không có lấy 1 (trước có  Vũ An quân  Bạch Khởi, sau có Nhạc Võ Mục). Đạo làm tướng 5 tài - 10 lỗi đủ cả. Xuất thân nghèo khó. Khó khăn lắm mới thành anh hùng. Vũ dũng thì gần như Hoài Âm hầu nắm, nghiêng về ai người đó thắng. Về nhẫn thì chịu nhục luồn trôn, ăn cơm nhờ bà giặt vải mà vẫn thành Hán Sơ tam kiệt. “ Nắm trong tay trăm vạn quân đã đánh là thắng, tiến công là nhất định lấy thì ta không bằng Hoài Âm Hầu.”. Cuối cùng phải chết dưới tay 1 mụ đàn bà. Xương thịt bị róc, vạn kiếp bất phục.

Trương Tử Phòng - Trương Lương: Mưu thánh, trong 10 đại quân sư chỉ xếp sau Khương Tử Nha và Tôn Tẫn, cỡ Gia Cát hoặc Lưu Cơ chỉ đáng xách dép. Xuất thân dân chủ tiểu tư sản điển hình. Bán cả nhà cửa đi hành thích Tần Thủy Hoàng. Sau nhờ chữ nhẫn mà được Hoàng Thạch Công trao cho bộ binh pháp, nổi tiếng đến mức trở thành thần tượng của anh Long (Long Vương - trong phim Tây Du Ký - Đoạn Ngộ Không bỏ thầy sau khi oánh cướp). Trở thành quân sư, thầy của hoàng đế - “ Bàn mưu kế ở trong màn trướng, quyết định sự thắng lợi ở ngoài ngàn dặm”. Công thành thân thoái thiên chi đạo. Xong việc rũ tay tu tiên, hưởng kiếp an nhàn của Xích Tùng Tử.

--------------

Tự hỏi, 3 người trên, sự nghiệp khác nhau nhưng đều là anh hùng thiên cổ nghìn năm không có lấy 1.

Xét về dũng: chẳng ai qua nổi Tây Sở Bá Vương.

Xét về trí: Trương Tử Phòng nhận thứ 2 thì không ai là số 1.

Hoài Âm hầu thì có cả 2. Minh tu sạn đạo - Ám độ Trần Thương, bình định Tam Tần, diệt Ngụy, lấy Triệu, thuận tay chiếm luôn nước Yên.

Nên chọn thái độ sống như thế nào?
Xem chi tiết
0

Thư tình chàng ca sĩ - Chu Tam

Trong 20 năm qua, tôi vẫn cứ ca hát,
hát cho người trong trái tim tôi nghe.
Nhưng người trong lòng tôi...
cũng không biết em đang chốn nào
mà tôi cứ mãi kiếm tìm em.





Xem chi tiết
0

Phím tắt trong PhpStorm



PhpStorm hiện tại đang là IDE tuyệt vời và đáng để trải nghiệm nhất cho các lập trình viên, tuy nhiên để chúng ta có thể tận dụng được tối đa những gì công cụ cung cấp và để tiết kiệm thời gian cho những thao tác bằng tay thì chúng ta nên tìm hiểu và sử dụng những tổ hợp phím để cho công việc của chúng ta thêm hiệu quả.

**Lưu ý: Ở đây mình cũng đã highlight những hot key thường xuyên được sử dụng.

Sau đây là Keymap mặc định của PhpStorm trên Windows:

1.Chỉnh sửa

1 Ctrl + Space Gợi ý hoàn thiện những hàm, biến đang được viết dở
2 Ctrl + Shift + Enter Hoàn thiện nốt dòng đang viết.
3 Ctrl + P Hiển thị thông tin các tham số cần điền trong hàm.
4 Ctrl + Q Tra cứu tài liệu nhanh chóng.
5 Ctrl + trỏ chuột lên phía trên của code Giới thiệu tóm tắt thông tin.
6 Ctrl + F1 Hiển thị mô tả về lỗi hoặc cảnh báo.
7 Alt + Insert Tạo mã … (Getters, Setters, Constructors).
8 Ctrl + O Override một method.
9 Ctrl + I Implement một method.
10 Ctrl + Alt + T Tạo ngoặc ngọn với … (if..else, try..catch, cho, vv).
11 Ctrl + / Comment / bỏ ghi chú với dòng bình luận.
12 Ctrl + Shift + / Comment / bỏ ghi chú với khối bình luận (nhiều dòng).
13 Ctrl + W Chọn liên tục (bôi đen) tăng khối mã (code).
14 Ctrl + Shift + W Giảm lựa chọn hiện tại trạng thái trước (13).
15 Alt + Q Thông tin Context.
16 Alt + Enter Hiển thị ý định hành động và sửa chữa tức thì.
17 Ctrl + Alt + L Định dạng lại code trong tab đang được hiển thị.
18 Ctrl + Alt + I Tự động xét con trỏ xuống dòng.
19 Tab / Shift + Tab Con trỏ xuống / lên chọn dòng.
20 Ctrl + X hoặc Shift + Delete Cắt dòng hiện hoặc khối đã chọn vào clipboard.
21 Ctrl + C hoặc Ctrl + Insert Sao chép dòng hiện tại hoặc khối đã chọn vào clipboard.
22 Ctrl + V hoặc Shift + Insert Dán từ clipboard.
23 Ctrl + Shift + V Dán từ bộ đệm gần đây …
24 Ctrl + D Duplicate dòng hiện hoặc khối đã chọn.
25 Ctrl + Y Xóa dòng, khối dòng đang được chọn.
26 Ctrl + Shift + J Đưa trỏ đến tham số kế tiếp.
27 Ctrl + Enter Đưa trỏ đến cuối dòng.
28 Shift + Enter Bắt đầu dòng mới.
29 Ctrl + Shift + U Bật tắt trường hợp cho chữ tại dấu nháy hoặc khối đã chọn.
30 Ctrl + Shift +] / [ Chọn cho đến khối mã kết thúc / bắt đầu.
31 Ctrl + Delete Xóa từ vị trí con trỏ đến cuối.
32 Ctrl + Backspace Xóa từ vị trí con trỏ đến đầu.
33 Ctrl + Numpad +/- Mở rộng / thu gọn khối mã.
34 Ctrl + Shift + Numpad + Mở rộng tất cả.
35 Ctrl + Shift + NumPad – Thu gọn tất cả.
36 Ctrl + F4 Đóng tab đang hoạt động biên tập.

2. Điều hướng

37 Ctrl + N Tới Class
38 Ctrl + Shift + N Đi tới file
39 Ctrl + Alt + Shift + N Đi tới biểu tượng
40 Alt + Left / Right Mở tab phía trước/sau
41 F12 Quay trở lại cửa sổ công cụ trước
42 Esc Quay trở lại màn hình edit code
43 Shift + Esc Đóng hoạt động hoặc qua cửa sổ đang mở
44 Ctrl + Shift + F4 Đóng, dừng hành động Run/ Message / Search/ …
45 Ctrl + G Di chuyển đến dòng số
46 Ctrl + E Mở danh sách những tập tin đc mở gần đây
47 Ctrl + Alt + Left / Right Chuyển tới file đc edit trước/sau
48 Ctrl + Shift + Backspace Chuyển đến file chỉnh sửa cuối cùng
49 Alt + F1 Chọn file hoặc biểu tượng bất kì với kí tự được nhập
50 Ctrl + B hoặc Ctrl + Click Chuyển tới nơi biến/hàm được khai báo
51 Ctrl + Alt + B Chuyển tới nơi hàm/class được triển khai (s)
52 Ctrl + Shift + I Mở tra cứu định nghĩa
53 Ctrl + Shift + B Chuyển tới nơi kiểu được định nghĩa
54 Ctrl + U Chuyển tới super-method/super-class được định nghĩa
55 Alt + Up / Down Chuyển tới method trước/sau
56 Ctrl +] / [ Di chuyển đến nơi khối mã kết thúc / bắt đầu
57 Ctrl + F12 Mở popup cấu trúc project
58 Ctrl + H Mở hệ thống phân cấp các kiểu dữ liệu
59 Ctrl + Shift + H Mở hệ thống phân cấp các method
60 Ctrl + Alt + H Mở hệ thống phân cấp
61 F2 / Shift + F2 Highlight lỗi trước/sau
62 F4 / Ctrl + Enter Sửa nguồn / Xem mã nguồn
63 Alt + Home Hiển thị thanh điều hướng
64 F11 Chuyển đổi bookmark
65 Ctrl + F11 Chuyển đổi bookmark với mnemonic
66 Ctrl + # [0-9] Tới bookmark đánh số
67 Shift + F11 Hiển thị bookmark

3. Tìm kiếm và thay thế

68 Ctrl + F Tìm
69 F3 Tới kết quả tiếp theo
70 Shift + F3 Tới kết quả trước đó
71 Ctrl + R Thay thế
72 Ctrl + Shift + F Tìm trong trong tất cả tập tin trong thư mục chỉ định
73 Ctrl + Shift + R Thay thế trong trong tất cả tập tin trong thư mục chỉ định

4. Tìm kiếm cách sử dụng

74 Alt + F7 / Ctrl + F7 Tìm những nơi được sử dụng/được sử dụng trong file
75 Ctrl + Shift + F7 Highlight những nơi được sử dụng
76 Ctrl + Alt + F7 Hiển thị cách dùng

5. Running

77 Alt + Shift + F10 Chọn cấu hình và chạy
78 Alt + Shift + F9 Chọn cấu hình và thực hiện debug
79 Shift + F10 Run
80 Shift + F9 Debug
81 Ctrl + Shift + F10 Run cấu hình context từ editor
82 Ctrl + Shift + X Mở command line

6. Debug

83 F8 Chạy qua
84 F7 Chạy vào
85 Shift + F7 Chạy vào thông minh
86 Shift + F8 Chạy ra khỏi context hiện tại
87 Alt + F9 Run từ nơi trỏ chuột
88 Alt + F8 Bảng đánh giá
89 F9 Resume chương trình
90 Ctrl + F8 Bật tắt breakpoint
91 Ctrl + Shift + F8 Xem breakpoint

7. Refactor

92 F5 Sao chép file
93 F6 Di chuyểnfile
94 Alt + Delete Xóa file an toàn
95 Shift + F6 Rename file
96 Ctrl + Alt + N Hiển thị thông tin biến của hàm
97 Ctrl + Alt + M Hiển thị thông tin chi tiết của hàm
98 Ctrl + Alt + V Hiển thị thông tin chi tiết của biến
99 Ctrl + Alt + F Hiển thị thông tin của line
100 Ctrl + Alt + C Hiển thị thông tin của Constant

8. Version controls (svn/git)

101 Alt + backquote () Mở nhanh popup version controls
102 Ctrl + K Commit code
103 Ctrl + T Update code
104 Alt + Shift + C Xem thay đổi gần đây

9. Chỉnh sửa chung

105 Ctrl + Shift + A Tìm kiếm action
106 Alt + # [0-9] Mở cửa sổ công cụ tương ứng
107 Ctrl + Shift + F12 Mở rộng tab đang được edit
108 Alt + Shift + F Thêm vào mục ưa thích
109 Alt + Shift + I Kiểm tra tập tin với cấu hình hiện tại
110 Ctrl + backquote (
)
Switch schema
111
Ctrl + Alt + S
Mở cửa sổ cài đặt nhanh
112
Ctrl + Tab
Chuyển đổi giữa các tab và cửa sổ công cụ

10. Tổng kết

Trên đây là toàn bộ những phím tắt bạn có thể sử dụng trong PhpStorm. Bạn cũng có thể đặt lại những phím này để cho phù hợp với bản thân bằng cách mở cửa sổ Setting (Ctrl + Alt + S) sau đó search từ khóa “Keymap” sẽ có danh sách các hotkey hiện tại. Chúc các bạn làm việc hiệu quả và nếu có thắc mắc hoặc chia sẻ thì hãy để lại comment nhé.

Sưu tầm trên Internet
Xem chi tiết