Lập Trình
Tổng hợp các thông tin, kinh nghiệm hữu ích và mới nhất về lập trình cần học gì, phỏng vấn, mức lương trong ngành IT như thế nào, tìm hiểu ngay!
398 bài viết

Destroy Specific Session ID via PHP
Bài viết được sự cho phép của BBT Kinh nghiệm lập trình Chào các bạn, hôm nay mình xin chia sẻ 1 mẹo nhỏ trong PHP: Destroy session_id của user khác từ server. Tại sao cần làm việc này? Bài toán đặt ra: Tại một thời điểm, chỉ cho phép người dùng có duy nhất 1 phiên đăng nhập trên hệ thống. Mô tả chi tiết: Thực tế hiện tay rất nhiều hệ thống web ứng dụng bán license theo số lượng tài khoản sử dụng. Do vậy, nếu không có biện pháp ngăn chặn việc người dùng sử dụng chung tài khoản để làm việc trên hệ thống thì việc thất thoát doanh thu là khó tránh khỏi. Chính vì thế, hệ thống cần có phương án để ngăn chặn việc này, tại một thời điểm, chỉ cho phép người dùng có 1 phiên đăng nhập trên 1 thiết bị và thao tác trên hệ thống. Cách thực hiện trên với PHP? Mình sẽ nói tóm tắt các bước thực hiện, logic này có thể áp dụng tương tự với ngôn ngữ khác. Mục đích là sử dụng tài khoản hiện tại, để destroy session id khác trên server. Bước 1:Commit session ID nếu nó đã tồn tại Bước 2: Store current session id Bước 3: Destroy session specified Bước 4: Restore current session id Ứng tuyển ngay các vị trí PHP tuyển dụng mới nhất trên Station D Code demo! <?php $session_id_to_destroy = ‘nill2if998vhplq9f3pj08vjb1’ ; // 1. commit session if it’s started. if ( session_id ()) { session_commit (); } // 2. store current session id session_start (); $current_session_id = session_id (); session_commit (); // 3. hijack then destroy session specified. session_id ( $session_id_to_destroy ); session_start (); session_destroy (); session_commit (); // 4. restore current session id. If...

Hàm Python tích hợp sẵn
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức Python có hai loại hàm cơ bản, một là hàm tích hợp sẵn, hai là hàm do người dùng tự định nghĩa. Hôm nay, chúng ta sẽ tìm hiểu về danh sách các hàm được tích hợp sẵn trên Python. Trình thông dịch của Python có sẵn một số hàm để sử dụng. Các hàm này được gọi là hàm tích hợp. Ví dụ, print() là hàm in các giá trị được cung cấp cho hàm ra màn hình, hàm list() tạo một list trong Python. Trong phiên bản Python 3.6 có 68 hàm Python được tích hợp sẵn. Dưới đây là danh sách các hàm đó, cùng với mô tả ngắn gọn về chúng. Bạn có thể bookmark lại để tra nhanh khi cần nhé Tìm việc làm lập trình python mới nhất trên Station D Nhấn Ctrl+F trên trình duyệt và nhập tên hàm cần tìm, nếu bạn muốn tìm nhanh nhé. Hàm Mô tả abs() Trả về giá trị tuyệt đối của một số all() Trả về True khi tất cả các phần tử trong iterable là đúng any() Kiểm tra bất kỳ phần tử nào của iterable là True ascii() Tả về string chứa đại diện (representation) có thể in bin() Chuyển đổi số nguyên sang chuỗi nhị phân bool() Chuyển một giá trị sang Boolean bytearray() Trả về mảng kích thước byte được cấp bytes() Trả về đối tượng byte không đổi callable() Kiểm tra xem đối tượng có thể gọi hay không chr() Trả về một ký tự (một chuỗi) từ Integer classmethod() Trả về một class method cho hàm compile() Trả về đối tượng code Python complex() Tạo một số phức delattr() Xóa thuộc tính khỏi đối tượng dict() Tạo Dictionary...

Module trong Python
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức Module được sử dụng để phân loại code thành các phần nhỏ hơn liên quan với nhau. Hay nói cách khác, Module giúp bạn tổ chức Python code một cách logic để giúp bạn dễ dàng hiểu và sử dụng code đó hơn. Trong Python, Module là một đối tượng với các thuộc tính mà bạn có thể đặt tên tùy ý và bạn có thể gắn kết và tham chiếu. Việc làm python hấp dẫn cho bạn Về cơ bản, một Module là một file, trong đó các lớp, hàm và biến được định nghĩa. Tất nhiên, một Module cũng có thể bao gồm code có thể chạy. Bạn theo dõi qua ví dụ sau: Nếu nội dung của một quyển sách không được lập chỉ mục hoặc phân loại thành các chương riêng, thì quyển sách này có thể trở nên nhàm chán và gây khó khăn cho độc giả khi đọc và hiểu nó. Tương tự, Module trong Python là các file mà có các code tương tự nhau, hay có liên quan với nhau. Chúng có lợi thế sau: Khả năng tái sử dụng: Module có thể được sử dụng ở trong phần Python code khác, do đó làm tăng tính tái sử dụng code. Khả năng phân loại: Các kiểu thuộc tính tương tự nhau có thể được đặt trong một Module. Để import một Module, bạn có thể sử dụng một trong ba cách dưới đây: Sử dụng lệnh import trong Python Bạn có thể sử dụng bất cứ source file nào dưới dạng như một Module bằng việc thực thi một lệnh import trong source file khác. Cú pháp của lệnh import là: import module1[, module2[,... moduleN] Giả sử mình có...

Functors trong JavaScript là gì?
Functors là gì? Đôi khi, logic chính xác sẽ là bất khả thi bởi sự phức tạp của data trong thế giới lập trình. Do đó, data trừu tượng (data abstraction) là một tool rất hữu ích giúp ta tạo một đại diện đơn giản cho data. Để có thể đạt được điều này, chúng ta tạo ra ‘ Containers ’, những container này sẽ chỉ chứa data và không làm gì khác. Ta cũng không cung cấp cho chúng những properties hoặc methods như trong lập trình hướng đối tượng OOP. Khi cho một giá trị vào container thì nó sẽ giúp giữ giá trị đó được an toàn, trong khi được pass qua functional logic. Và ta chỉ lấy nó khi rất cần thiết. Như vậy, container có 2 task chính: Chứa giá trị bên trong chính nó Trả giá trị lại khi chúng ta cần Và nó cũng không làm biến đổi giá trị. Thật ra, những container này cũng không có gì mới, chúng ta đã sử dụng chúng kể từ khi bắt đầu JavaScripting. Khi làm về functional programming, những containers này cực kì quyền năng, bởi chúng góp phần vào nền tảng cho cấu trúc của functional, và giúp chúng ta với những kĩ thuật như Pure Functional Error Handling và Asynchronous Actions (cùng nhiều cái khác nữa). >>> Xem thêm về tính trừu tượng đuợc nhắc đến trong Bí thuật đơn giản hóa code của bạn Trước khi đi sâu vào những container này thì mình sẽ nói về một loại container đặc biệt là Functors. Functors là gì? Functors chính là container có thể được dùng với ‘map’ function. Trước khi chúng ta tạo ra container cho riêng mình, hãy nhìn lại những loại container mà ta thường dùng trước đây: Các...

Ruby vs Python: Đâu mới là ngôn ngữ tốt hơn cho lập trình ứng dụng
Bài viết được sự cho phép của tác giả AnonyViet Ruby và Python là hai trong số các ngôn ngữ lập trình được sử dụng phổ biến nhất để lập trình ứng dụng. Theo khảo sát hàng năm của Stack Overflow , được đánh giá bởi hơn 90.000 lập trình viên trên toàn thế giới. Ruby và Python nằm trong Top 15 ngôn ngữ lập trình có nhu cầu cao nhất trong năm 2019. Cho bạn nào chưa biết thì trên thế giới có khoảng 700 ngôn ngữ lập trình nhé. Ruby và Python có rất nhiều điểm chung. Chúng đều là các ngôn ngữ hướng đối tượng bậc cao, tập trung vào sự đơn giản và rõ ràng. Tuy nhiên, như trên tiêu đề của bài viết, hôm nay chúng ta sẽ so sánh hai ngôn ngữ này để tìm ra ngôn ngữ nào tốt hơn cho các dự án lập trình ứng dụng web của bạn. Trước tiên, chúng ta hãy bắt đầu tìm hiểu những thông tin cơ bản về Ruby và Python trước khi tiến hành so sánh. Ruby Ruby được phát hành vào năm 1995. Yukihiro Matsumoto, người sáng lập Ruby, cho biết: Mục đích của Ruby là làm cho các lập trình viên cảm thấy hài lòng. Ruby được thiết kế như một ngôn ngữ thân thiện với các lập trình viên. Nó cũng là một ngôn ngữ rất linh hoạt cho phép các lập trình viên dễ dàng thay đổi các yếu tố của nó và kết hợp các cách tiếp cận khác nhau theo nhiều cách mạnh mẽ. Ngôn ngữ này tập trung vào nhu cầu của con người, chứ không phải là máy tính. Bất kỳ loại phần mềm nào cũng có thể được tạo ra với sự trợ giúp của...

Cấu trúc dữ liệu List trong Python và các thao tác cơ bản
Cấu trúc dữ liệu được sử dụng trong các chương trình để dễ dàng hơn trong việc định vị thông tin và lấy thông tin. Cấu trúc dữ liệu là cách các ngôn ngữ lập trình thể hiện các giá trị cơ bản, chúng chứa các kiểu dữ liệu cơ bản như số, chuỗi, boolean…, nó đưa ra cách thức lưu trữ nhiều giá trị trong một biến số. Cấu trúc dữ liệu cũng được sử dụng để phân nhóm và tổ chức cho các cấu trúc khác. Để làm rõ hơn sự cần thiết các cấu trúc dữ liệu cơ bản, chúng ta có một ví dụ như sau: friend1 = "Rolf" friend2 = "Bob" friend3 = "Anne" print ( friend1 ) print ( friend2 ) print ( friend3 ) Một chương trình rất đơn giản với 3 biến chứa tên 3 người bạn, chúng ta in ra tên 3 người này. Tưởng tượng khi số lượng bạn gia tăng, bạn phải thêm vào hàng trăm biến và hàng trăm câu lệnh in ra màn hình. Quả là một thảm họa! List (danh sách) là một kiểu dữ liệu cơ bản trong Python, cho phép bạn lưu trữ và quản lý một tập hợp các phần tử trong một thứ tự nhất định. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết về cấu trúc dữ liệu List trong Python , cách nó hoạt động, và cách sử dụng nó một cách hiệu quả. Cấu trúc dữ liệu List trong Python là gì? List trong Python là một cấu trúc dữ liệu dùng để lưu trữ và quản lý một tập hợp các phần tử theo một thứ tự nhất định. List có thể chứa nhiều giá trị khác nhau, bao gồm cả số nguyên, chuỗi,...

Hướng dẫn từng bước lập trình web với Python
Lập trình website nói chung và lập trình web site với Python hay bất cứ ngôn ngữ nào khác chưa bao giờ hết hot. Thời đại chuyển đổi số và số hóa toàn diện khắp mọi nơi như hiện nay, lập trình website nói riêng và lập trình nói chung trở thành kỹ năng không thể thiếu để tham gia vào quá trình chuyển đổi này. Bài viết này sẽ hướng dẫn từng bước cho anh em lập trình web với Python . 1. Lập trình web với Python liệu có khó? Câu trả lời là không khó, bài viết này sẽ cung cấp đầy đủ thông tin cho anh em khi lựa chọn bắt đầu với Python . Với các nội dung dưới đây, anh em sẽ có cái nhìn đầy đủ kèm các bước để lập trình web với Python. Tại sao lại lựa chọn Python? Các framework nào có thể cân nhắc? Khi đã lựa chọn framework, hành trình bắt đầu như thế nào? Ngôn ngữ nào cũng vậy, trước khi bắt đầu ta luôn đánh giá và so sánh giữa các ngôn ngữ. Một số yếu tố có thể xem xét bao gồm: Ngôn ngữ học có khó không? Framework có hỗ trợ tốt không? Khả năng mở rộng như thế nào? Lựa chọn luôn cần lý do Python là gì? Tổng hợp kiến thức cho người mới bắt đầu 2. Tại sao lại là Python? Như anh em đã biết, lựa chọn đi theo con đường phát triển web, anh em có vô vàn lựa chọn. Lập trình web với Html , Css, JS thuần, anh nào làm giỏi cũng rất là ghê nha. Không bao giờ khinh thường html, css :d. Với một số frontend framework thì anh em có thể go với Nuxt,...

Selenium WebDriver trên Python
Bài viết được sự cho phép của vntesters.com Như các bạn thấy ở phần trước , Selenium WebDriver hỗ trợ chúng ta tuỳ biến và nâng cấp kịch bản kiểm thử ở một mức độ cao hơn Selenium IDE rất nhiều. Phần này, mình sẽ giới thiệu với các bạn cách để cấu hình và làm một kịch bản kiểm thử với Selenium WebDriver trên ngôn ngữ Python . Xem thêm các việc làm Python lương cao trên Station D Cài đặt thư viện Selenium Để cài đặt Python, các bạn có thể tham khảo ở bài “ Python – Ngôn Ngữ Lập Trình ”. Để sử dụng được Selenium WebDriver sau khi cài đặt Python, chúng ta cần phải cài bộ thư viện của Selenium WebDriver vào thư mục cài đặt Python. Để làm được việc này, chúng ta có nhiều cách như: Windows Install Standalone, pip install hay easy-install. Theo cá nhân mình thấy thì đi theo easy-install là dễ nhất nên dưới đây mình sẽ hướng dẫn các bạn cách này. Thiết lập easy-install B1. Đầu tiên, chúng ta cần có file “ ez_setup.py ” để có thể sử dụng được easy-install B2. Chạy file “ez_setup.py” và đợi Lập trình Python trên IntelliJ IDEA (code Python trên IntelliJ) Cài đặt Selenium WebDriver Sau khi thiết lập được easy-install thông qua file “ez_setup.py”, trong thư mục PythonScripts sẽ có một file “easy_install.exe” được tạo ra. Chúng ta sẽ sử dụng file này để cài đặt Selenium WebDriver cho Python. Như tên gọi, easy-install thì hiển nhiên cách cài đặt phải là đơn giản. Chúng ta chỉ cần một bước một để hoàn thành việc cài đặt này: Chạy câu lệnh “easy_install selenium” và đợi. Vậy là chúng ta đã có thể sử dụng Selenium WebDriver với Python. Chạy...

Kết nối DB ORACLE từ PHP trên CENTOS 7, 8
Bài viết được sự cho phép của tác giả Nguyễn Văn Minh Để kết nối được đến cơ sở dữ liệu Oracle từ CentOS 7, 8, bạn cần cài đặt Oracle InstantClient. Và bạn cũng cần phần mở rộng OCI8 để gọi từ PHP. Cài đặt Oracle InstantClient Với el8 / CentOS 8 / stream / Rocky / Almalinux Trước hết, cần tải các gói cần thiết. $ cd /usr/local/src $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-basic-21.5.0.0.0-1.el8.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-sqlplus-21.5.0.0.0-1.el8.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-devel-21.5.0.0.0-1.el8.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-jdbc-21.5.0.0.0-1.el8.x86_64.rpm Sau đó, cài đặt bằng lệnh sau. $ cd /usr/local/src $ dnf localinstall oracle* --nogpgcheck Với el7 / CentOS 7 Bạn cũng cần tải các gói cần thiết trước. $ cd /usr/local/src $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-basic-21.5.0.0.0-1.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-devel-21.5.0.0.0-1.x86_64.rpm $ wget https://download.oracle.com/otn_software/linux/instantclient/215000/oracle-instantclient-jdbc-21.5.0.0.0-1.x86_64.rpm Rồi cài đặt bằng lệnh sau. $ cd /usr/local/src $ yum localinstall oracle* --nogpgcheck Cài đặt OCI8 qua lệnh PECL Sau khi cài đặt Oracle InstantClient, bạn cần cài đặt phần mở rộng OCI8 để kết nối đến cơ sở dữ liệu Oracle từ PHP. Việc cài đặt phiên bản nào của OCI8 sẽ phụ thuộc vào phiên bản PHP bạn đang sử dụng. Bạn có hai cách để cài là dùng lệnh PECL hoặc tải package về và tự build bằng phpize và make. Trước hết, hãy tìm hiểu cách thứ nhất. Bạn gõ như sau. $ pecl install oci8 Nếu dùng PHP 7.x, thay vì oci8 , bạn dùng oci8-2.2.0 . Tức là câu lệnh bên trên sẽ trở thành như sau. $ pecl install oci8-2.2.0 Có một lưu ý, trong trường hợp bạn dùng tường lửa, bạn cần thiết lập proxy PEAR trước khi chạy lệnh PECL trên. $ pear config-set http_proxy http://my-proxy.example.com:80/ Xem ngay tin tuyển dụng PHP lương cao trên Station D Cài đặt OCI8 dùng phpize và make...

Lệnh if, elif, if else trong Python là gì?
Lệnh if có thể bạn đã gặp qua rất nhiều như trong C#, C++ hay đơn giản là trong excel để thực hiện một câu lệnh có điều kiện. Trong bài viết hôm nay, chúng ta sẽ cùng tìm hiểu về các lệnh if trong Python như if, elif hay if…else… . Đừng bỏ lỡ bài viết thú vị hôm nay của đội ngũ Station D. Câu lệnh điều kiện cho phép chương trình thực hiện các hành động khác nhau dựa trên các điều kiện nhất định. Dưới đây là các loại câu lệnh điều kiện phổ biến trong các ngôn ngữ lập trình. Lệnh if trong Python Lệnh if trong Python giống như trong ngôn ngữ C. Lệnh if được dùng để kiểm tra điều kiện, nếu thỏa mãn điều kiện if if-block (khối code) sẽ chạy, nếu không thì sẽ được bỏ qua. Lệnh if trong Python Cú pháp của lệnh if là: if dieu_kien if-block Ở đây, nếu input thỏa mãn dieu_kien thì các lệnh trong if-block sẽ được thực hiện. Nếu dieu_kien trả về kết quả false thì lệnh sẽ không được thực hiện. Lưu ý: trong Python, khối lệnh của lệnh if (if-block) được viết thụt lề vào trong so với dòng điều kiện if nếu sai cú pháp, dòng lệnh không thụt đầu dòng tiếp theo sẽ được hiểu là nằm ngoài khối lệnh. Ví dụ của lệnh if trong Python: var1 = 100 if var1 > 0 print "1 - Nhan mot gia tri true" var2 = 0 if var2 > 0 print "2 - Nhan mot gia tri true" print "Good bye!" Khi code trên được thực thi sẽ cho kết quả: 1 - Nhan mot gia tri true Good bye! Trong ví dụ trên, var1 = 100 thỏa mãn điều...
![[Python cơ bản thường dùng trong công việc] Phần 8 : Xử lý file XML](https://img-cdn.stationd.blog/w800-h600/featured/class-trong-python-218x150_20250424021700_2020c2b1.png)
[Python cơ bản thường dùng trong công việc] Phần 8 : Xử lý file XML
Trong phần này, chúng ta sẽ parsing nội dung XML thành dữ liệu để xử lý. Để xử lý XML, ta sẽ sử dụng thư viện Beautifulsoup 4. Đây là một thư viện giúp việc triển khai việc parsing html, xml được nhanh chóng và tiện lợi. Tuyển dụng lập trình python lương cao 8.1. Cài đặt Beautifulsoup Bạn có thể tham khảo hướng dẫn cách cài đặt tại website http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-beautiful-soup c . Trên MacOS, có thể cài bằng pip như sau: $ sudo pip install beautifulsoup4 8.2. Cài đặt lxml parser Để parsing xml từ beautifulsoup, tao sử dụng bộ parser xml có tên là lxml . Xem hướng dẫn cài đặt tại https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser Trên MacOS, có thể cài bằng pip như sau: sudo pip install lxml 8.3. Ví dụ về parsing XML Cho ví dụ sau: from bs4 import BeautifulSoup as Soup note = ''' <?xml version="1.0" encoding="UTF-8"?> <breakfast_menu> <food> <name>Belgian Waffles</name> <price>$5.95</price> <description>Two of our famous Belgian Waff les with plenty of real maple syrup</description> <calories>650</calories> </food> <food> <name>Strawberry Belgian Waffles</name> <price>$7.95</price> <description>Light Belgian waffles covered with strawberries and whipped cream</description> <calories>900</calories> </food> </breakfast_menu> ''' soup = Soup(note, 'xml') foods = soup.findAll('food') for x in foods: print x.find('name').string, ': ', x.price.string Khi chạy thì sẽ hiển thị ra màn hình như sau: Belgian Waffles : $5.95 Strawberry Belgian Waffles : $7.95 Đối tượng thuộc class Soup (BeautifulSoup) sẽ giúp truy xuất các thành phần của file xml nhanh chóng và tiện lợi. Trong ví dụ có một số cách truy xuất đến các phần tử như: findAll() : trả về mảng các thẻ có tên cần tìm find() : trả về phần tử đầu tiên có tên cần tìm Truy xuất trực tiếp thông qua tên thẻ như x.price.string 8.4. Parsing HTML Tương tự như xml ,...

Hướng dẫn Java Design Pattern – Builder
Các hàm xây dựng ( constructor ) trong Java được sử dụng để tạo đối tượng và có thể lấy các tham số cần thiết để tạo đối tượng. Vấn đề khi một đối tượng có thể được tạo ra với nhiều tham số ( param ), một số có thể là bắt buộc và một số khác có thể là tùy chọn tuỳ theo từng yêu cầu của người dùng, tuỳ vào hoàn cảnh của ứng dụng. Chúng ta, có thể tạo ra nhiều constructor theo từng nhu cầu hoặc gán giá trị null cho các param không cần thiết. Tuy nhiên, code rất khó đọc, khó bảo trì, người sử dụng có thể gán nhầm giá trị nếu một loạt các tham số có cùng kiểu. Chúng ta cũng có thể sử dụng một giải pháp khác là sử dụng setter() để thay thế cho constructor. Tuy nhiên, nếu muốn đối tượng này là immutable thì không thể. Do vậy, người ta mong muốn giao công việc này cho một đối tượng chịu trách nhiêm khởi tạo và chia việc khởi tạo đối tượng riêng lẽ, từng bước, để có thể tiến hành khởi tạo riêng biệt ở các hoàn cảnh khác nhau. Và giải pháp được đưa ra là sử dụng Builder Pattern như một người xây dựng. Builder Pattern là gì? Builder is a creational design pattern that separate the construction of a complex object from its representation so that the same construction process can create different representations. Builder pattern là một trong những Creational pattern . Builder pattern là mẫu thiết kế đối tượng được tạo ra để xây dựng một đối tượng phức tạp bằng cách sử dụng các đối tượng đơn giản và sử dụng tiếp cận từng bước, việc xây dựng các...