• Thế Giới Giải Mã

    Bí ẩn nhân loại Leonardo Da Vinci

  • Thế Giới Giải Mã

    Anh hùng thầm lặng Nikola Tesla

  • Thế Giới Giải Mã

    Thần đèn Thomas Edison

  • Thế Giới Giải Mã

    Người thôi miên Adolf Hitler

07 July 2024

Marquise de Brinvilliers Castle

 Marquise de Brinvilliers Castle

In the heart of a village in Lorraine lies an abandoned castle completely overgrown with wild vegetation. After entering through a rusty gate, we advance with difficulty through the brambles, the estate has been abandoned since the 1970s, a real jungle. There is not much left of the castle, the interest lies on its rear facade on which there are still four caryatids, magnificent statues still supporting the remains of the castle. A real hidden treasure, a real emotion to discover this. Victim of a violent fire in 1969, the history of this place is as violent as the flames that condemned it. A tragedy. Until this event, the castle was inhabited by notables, rich industrialists who made their fortune in the steel industry. A couple who had everything to live a fairy tale, a castle, a considerable fortune but the evil was elsewhere. Esther was a distraught woman, condemned to never be a mother, her husband Théodore was sterile. The solution of adoption was never an option, Esther absolutely wanted the baby to come out of her body, she did not want to take that of another. Victim of her sterility, the man was continually belittled by his handicap, she always blamed him for the fact that she could never be a mother. She considered him a sub-human, finally their couple remained linked by their common wealth, there was no more feeling or sexual relationship, a heavy and oppressive climate.


Theodore wasted his time on treatments to combat sterility with various therapies and experimental drugs, until he became seriously ill with disastrous side effects. Finally the final solution came while leafing through a local newspaper, Theodore noticed an advertisement for the opening of a swingers club a few kilometers from the castle, a sudden idea took shape, a Machiavellian stratagem. The hardest part would be to convince his wife, she who was such a prudish woman that the act of fellatio surpasses all transgressions. And what Theodore feared happened, totally hysterical upon learning of his plan, Esther hit him several times and broke a significant number of plates. The affront too much, the insurmountable humiliation. In her car, to evacuate her hatred, she drove without direction, without goal, just to get away from this climate that had become too unbreathable. How this pious woman could agree to mix sexually with other men to harvest their sperm in order to get pregnant was something that was totally inconsiderable. Her faith could never face that. All night, Esther traveled hundreds of kilometers to arrive in Aussois, a village in Savoie. She stopped there for days, locked in her room in this picturesque hotel. She took the time to think, to take stock of her life, her family situation and her destiny. At almost 55 years old, Esther was reaching a point in her life where she could no longer hesitate and had to make difficult choices to finally give life. Against all expectations, her husband's morbid proposal made perfect sense and she decided to face this ordeal. Back at the castle, she apologized to her husband for having had such a reaction and agreed to go to Private88 to illicitly harvest sperm.


This night of March 18, 1968, no excitement in front of the club door, the couple is on a mission, dressed in suspenders and leather jackets, Esther comes here to have the chance to finally be a mother. They cross a long corridor with fluorescent neon lights, eyes are on them, they are not comfortable and it shows, they walk quickly without looking at anyone, totally disordered in such an environment. A few glasses of vodka to forget themselves and give themselves the strength to go towards the others, the parents. The first words are exchanged, the first hands slip into Esther's crotch under the hopeful gaze of Théodore. Naked, lying on a bed, a dozen men penetrate her one after the other, her eyes closed, she imagines herself in the middle of a medical procedure, hiding any sexual dimension. She is motionless, she lets herself be moved, touched, caressed like a doll that is being manipulated, her husband strokes her hair to encourage her in this difficult ordeal. Each ejaculation is one more chance to procreate and that night, given the large number of men who came to penetrate Esther, the chances are numerous. A soiled body, a tortured pride, Esther was never the same after this ordeal. Already having little libido, she was now totally disgusted with sex. The days passed and the wait was long, waiting to know if she would have to return to this devil's house to try her luck again. A month later and a positive pregnancy test, Theodore's plan had miraculously worked. The end of an ordeal. The gynecologist remained cautious about the rest of the pregnancy, at her age the risk that the newborn would have Down's syndrome is quite high which was not a problem for this future mother, whatever the handicap or not of her child, she was finally going to become a mother.


The first ultrasounds create a new harmony in the couple, a love that is reborn in the happiness of finally building something and having an heir. Theodore has no complexes about the fact that he will not share any DNA with his child, his wife's joy was his greatest reward. Unfortunately, in the 19th week of pregnancy, Esther has horrible stomach pains, she bleeds profusely every time she goes to the toilet, she is having a miscarriage. On the blood-covered floor, the fetus falls under Esther's helpless cries. She screams in despair, her husband is helpless and faced with a situation he had not foreseen. In one night, all their hope has flown away. In her hands, she holds him tight, she clings to her child and does not want to let go, she kisses him and asks him for forgiveness. Theodore is dialing the number of the emergency services so that they come and take care of his wife and the fetus but she categorically refuses and makes him hang up. She explains to him that they are going to take her baby and that she wants to keep him. Her husband did not dare contradict her, her madness scared him and he submitted to this unbelievable idea. As the days went by, she considered her fetus as her living child, he had a name and a room just for him. To preserve his body, every evening, the fetus was placed in the freezer. Helpless, Theodore saw his wife spend her days talking and laughing with her fetus, madness took over, she had become mentally ill. During the days, she walked him in a stroller in the village public garden and spent crazy amounts of money on toys and clothes that he would never wear.


The husband had a hard time adapting to this morbid family life, so as not to tarnish his reputation he could not even ask for outside help, he was gradually sinking with his wife. Despite the fact that the fetus was put back in the freezer every day, its condition was deteriorating and its stench was becoming unbearable. A real chaos. To put an end to this, he committed a horrible act in the middle of the night. While his wife was sleeping, he took advantage of the fireplace to burn the fetus. Esther, awakened by this abnormal smell, discovered her husband in the living room in front of the fireplace. He went towards her telling her that now everything was over, that she would have to mourn. Immediately she went to the freezer in a panic and discovered that the fetus was no longer there. He told her that it had burned in the fireplace so that she would stop being sick. Burning her hands in the flames, in tears, she desperately tried to recover her fetus, there was already nothing left. Truly possessed by her grief, she ran to the kitchen to retrieve a knife to stab her husband several times and then dragged his body towards the fireplace, head first. In tears and trembling, she created several fires in the castle and violently stabbed herself in the throat, she fell to the ground, died and burned still alive with her castle. It was a real blaze and the firefighters took several hours to extinguish it and discover the carnage. Since that horrible night, the castle remained in ruins, in memory of this tragedy.


HERITAGE EMERGENCY: To continue to keep our French heritage alive, it is important to join forces with associations and structures that can give a second life to these forgotten places: urbexsession.com/agir-pour-le-patrimoine. To prevent these places from one day ending up as dust as is unfortunately the case, it is necessary to get involved in different ways. For our part, we make an artistic imprint through our photographs to immortalize these places. On this page: urbexsession.com/les-lieux-rehabilites you can discover examples of rehabilitated places and on this one: urbexsession.com/les-lieux-disparus places that unfortunately have not stood the test of time.


































Source: https://urbexsession.com/chateau-marquise-de-brinvilliers/

12 September 2023

Luồng phê duyệt đơn

1. Người tạo đơn: Tạo đơn phê duyệt mới và cung cấp thông tin chi tiết về đơn như tiêu đề, mô tả và người được phê duyệt.

2. Người phê duyệt: Nhận thông báo về đơn phê duyệt và xem thông tin chi tiết. Có thể chọn phê duyệt hoặc từ chối đơn. 3. Approver: Nếu người phê duyệt chấp nhận đơn, quá trình phê duyệt được hoàn thành và đơn được chuyển đến bước tiếp theo. 4. Reject: Nếu người phê duyệt từ chối đơn, quá trình phê duyệt kết thúc và đơn bị từ chối. 5. Return: Nếu người phê duyệt muốn yêu cầu chỉnh sửa hoặc bổ sung thông tin, họ có thể chọn trả lại đơn để yêu cầu người tạo đơn thực hiện các thay đổi. 6. Người tạo đơn: Nhận thông báo về việc đơn bị từ chối hoặc yêu cầu chỉnh sửa. Có thể chỉnh sửa đơn và gửi lại để tiếp tục quá trình phê duyệt.  

Quy trình trên có thể được tùy chỉnh và điều chỉnh theo nhu cầu và quy trình công việc của tổ chức. 

Mô tả luồng qua lại giữa người tạo đơn và người phê duyệt. Người tạo đơn gửi đơn đến người phê duyệt. Người phê duyệt có thể phê duyệt, từ chối hoặc yêu cầu chỉnh sửa đơn. Nếu đơn bị từ chối, quá trình kết thúc. Nếu người phê duyệt yêu cầu chỉnh sửa, người tạo đơn sẽ chỉnh sửa và gửi lại đơn để tiếp tục quá trình phê duyệt.






Đề nghị thanh toán

Đề xuất mua hàng


Luồng phê duyệt gửi tiền có takeback

Quy trình công việc phê duyệt

Người gửi và người phê duyệt có các hành động riêng để thay đổi trạng thái của số tiền, cho biết số tiền đã gửi nằm ở đâu trong quy trình phê duyệt. Mỗi trạng thái có thể được lọc trong Tab Hoạt động (trước đây là Tab Ngân sách) trong Allocadia hoặc trong Thông tin chi tiết  (trước đây là Analytics). Một ví dụ về quy trình làm việc tổng thể như sau:


  1. Người gửi nhập giá trị vào Kế hoạch hoặc Dự báo tương ứng. Theo mặc định, tất cả các giá trị mới được nhập đều có trạng thái lập kế hoạch.
  2. Người nộp gửi số tiền Kế hoạch hoặc Dự báo để phê duyệt. Khi điều này xảy ra, giá trị ô sẽ chuyển sang trạng thái chỉ đọc và chuyển sang trạng thái chờ xử lý.
  3. Một số tùy chọn có sẵn khi số tiền đang chờ xử lý:
    • 3a. Người nộp có thể lấy lại số tiền trước khi người phê duyệt đưa ra quyết định hoặc nếu số tiền được yêu cầu đã bị người phê duyệt từ chối. Trong trường hợp này, trạng thái của số tiền sẽ trở lại trạng thái lập kế hoạch.
    • 3b. Người phê duyệt có thể gửi lại yêu cầu đang chờ xử lý kèm theo các nhận xét để sửa đổi. Trạng thái sau đó sẽ trở lại quy hoạch.
    • 3c. Người phê duyệt có thể chấp nhận yêu cầu và trạng thái sẽ trở thành được phê duyệt. Ô sẽ vẫn ở chế độ chỉ đọc.
    • 3d. Người phê duyệt có thể từ chối số tiền được yêu cầu và trạng thái của trường sẽ bị từ chối. Ô vẫn ở chế độ chỉ đọc.
  4. Đối với số tiền được phê duyệt, người gửi có thể gửi yêu cầu thay đổi. Allocadia sẽ tiếp tục hiển thị số tiền đã được phê duyệt với trạng thái thay đổi đang chờ xử lý. Giá trị hiển thị sẽ chỉ cập nhật nếu yêu cầu thay đổi được chấp thuận.

21 July 2023

Mô phỏng luồng stack và heap javascript?

 


Trong Javascript, có hai loại bộ nhớ chính: stack và heap. Chúng hoạt động khác nhau trong việc lưu trữ và quản lý dữ liệu. 

 

1. Stack: 

- Stack được sử dụng để lưu trữ các biến cục bộ, tham số và các giá trị trung gian khi hàm được gọi. 

- Mỗi khi một hàm được gọi, một khung dữ liệu mới được tạo trên stack để lưu trữ các biến cục bộ và thông tin về hàm. 

- Khi hàm kết thúc, khung dữ liệu đó sẽ được xóa khỏi stack, giải phóng không gian bộ nhớ. 

 

2. Heap: 

- Heap được sử dụng để lưu trữ các đối tượng động và dữ liệu có kích thước không xác định trước. 

- Đối tượng trên heap tồn tại cho đến khi không còn bất kỳ tham chiếu nào đến chúng. 

- Trong Javascript, việc quản lý heap được thực hiện tự động thông qua thu thập rác (garbage collection), nghĩa là các đối tượng không còn được sử dụng sẽ được tự động thu hồi bộ nhớ. 

 Ví dụ mô phỏng luồng stack và heap trong Javascript:

function foo() {
    let a = 1; // Biến a được lưu trữ trên stack
    let b = { value: 2 }; // Đối tượng b được lưu trữ trên heap, và tham chiếu đến nó được lưu trữ trên stack
    bar(a, b);
}
function bar(x, y) {
    let c = x + y.value; // Biến c được lưu trữ trên stack
    console.log(c);
}
foo();

Trong ví dụ trên, khi hàm  foo  được gọi, một khung dữ liệu mới được tạo trên stack để lưu trữ biến  a  và tham chiếu đến đối tượng  b . Sau đó, khi hàm  bar  được gọi, một khung dữ liệu mới khác được tạo trên stack để lưu trữ biến  x  và  y , trong đó  y  là một tham chiếu đến đối tượng  b  trên heap. Cuối cùng, giá trị của  x  và  y.value  được tính toán trên stack và kết quả được in ra màn hình. Khi hàm  bar  kết thúc, khung dữ liệu của nó được xóa khỏi stack, giải phóng không gian bộ nhớ.

12 July 2023

Session và Cookie ?



Session và Cookie là hai khái niệm quan trọng trong lập trình web để lưu trữ thông tin và duy trì trạng thái của người dùng trên trang web. 

 

Session (Phiên làm việc) là một cơ chế lưu trữ thông tin trên máy chủ. Khi một người dùng truy cập vào trang web, máy chủ sẽ tạo ra một phiên làm việc duy nhất và gán một ID phiên cho người dùng đó. Thông tin của người dùng, như tên, địa chỉ, giỏ hàng, sẽ được lưu trữ trong phiên làm việc này. Phiên làm việc thường được lưu trữ trên máy chủ và chỉ có thể truy cập thông qua ID phiên. Khi người dùng đăng xuất hoặc đóng trình duyệt, phiên làm việc sẽ bị hủy và thông tin của người dùng sẽ bị xóa. 

 

Cookie (Bánh quy) là một tệp nhỏ chứa thông tin được lưu trữ trên máy tính của người dùng. Khi người dùng truy cập vào một trang web, máy chủ có thể gửi một hoặc nhiều cookie đến trình duyệt của người dùng. Cookie chứa thông tin như tên người dùng, tuổi, sở thích, v.v. Trình duyệt sẽ lưu trữ cookie này và gửi nó lại cho máy chủ mỗi khi người dùng truy cập vào trang web đó. Cookie thường được sử dụng để duy trì trạng thái đăng nhập, theo dõi hoạt động của người dùng và cung cấp trải nghiệm cá nhân hóa trên trang web. 

 

Tóm lại, Session được lưu trữ trên máy chủ và Cookie được lưu trữ trên máy tính của người dùng. Cả hai đều giúp duy trì trạng thái và lưu trữ thông tin của người dùng trên trang web.

Sự khác nhau giữa function declaration và expression trong Javascript


Trong JavaScript, có hai cách khai báo hàm là function declaration (khai báo hàm) và function expression (biểu thức hàm). Dưới đây là sự khác nhau giữa hai cách này: 

 

1. Function Declaration (Khai báo hàm): 

   - Cú pháp: function functionName() { } 

   - Được khai báo trên cùng của phạm vi (hoisting), tức là bạn có thể gọi hàm trước khi khai báo nó trong mã. 

   - Có thể gọi hàm từ bất kỳ đâu trong phạm vi hiện tại. 

   - Thường được sử dụng cho các hàm lớn, phức tạp. 

 

Ví dụ:

function myFunction() {
  console.log('Hello!');
};
myFunction(); // Output: Hello!


2. Function Expression (Biểu thức hàm): 

   - Cú pháp: var functionName = function() { } 

   - Khai báo hàm bằng gán giá trị cho một biến. 

   - Không được hoisting, nghĩa là bạn chỉ có thể gọi hàm sau khi nó được khai báo trong mã. 

   - Phạm vi của hàm được giới hạn bởi phạm vi của biến mà nó được gán vào. 

   - Thường được sử dụng cho các hàm nhỏ, đơn giản hoặc trong các biểu thức khác. 

 

Ví dụ:

var myFunction = function() {
  console.log('Hello!');
};
myFunction(); // Output: Hello!

Tóm lại, function declaration và function expression đều cho phép bạn khai báo và sử dụng hàm trong JavaScript. Việc sử dụng loại nào phụ thuộc vào ngữ cảnh và yêu cầu của mã của bạn.

JS runtime cách xử lý bất đồng bộ và đồng bộ

 


JS runtime (thời gian chạy của JavaScript) xử lý bất đồng bộ (asynchronous) và đồng bộ (synchronous) theo cách khác nhau.


Khi JavaScript chạy trên trình duyệt, runtime sử dụng mô hình sự kiện (event-driven) để xử lý các sự kiện và tương tác người dùng. Khi có một sự kiện xảy ra, runtime sẽ đưa sự kiện đó vào hàng đợi sự kiện (event queue) và tiếp tục thực hiện các công việc khác. Khi runtime hoàn thành các công việc hiện tại, nó sẽ lấy sự kiện đầu tiên từ hàng đợi sự kiện và xử lý nó.


Đối với các tác vụ bất đồng bộ như gọi API, tải tệp tin, hoặc thực hiện các tác vụ mạng, JavaScript sử dụng các hàm bất đồng bộ như setTimeout, setInterval, fetch, XMLHttpRequest, hoặc Promise

. Khi gọi các hàm bất đồng bộ này, runtime sẽ không chờ đợi kết quả trả về mà tiếp tục thực hiện các công việc khác. Khi kết quả trả về, runtime sẽ đưa nó vào hàng đợi sự kiện và xử lý sau.


Đối với các tác vụ đồng bộ, JavaScript sử dụng cơ chế gọi lại (callback) hoặc 

async/await

 để xử lý. Khi gọi một hàm đồng bộ, runtime sẽ chờ đợi hàm đó hoàn thành trước khi tiếp tục thực hiện các công việc khác. Điều này có thể gây trì hoãn (blocking) trong quá trình thực thi.


Tuy nhiên, để tránh trì hoãn quá lâu và đảm bảo ứng dụng vẫn phản hồi, JavaScript runtime sử dụng mô hình bất đồng bộ và sự kiện để xử lý các tác vụ dài hạn. Bằng cách này, runtime có thể tiếp tục thực hiện các công việc khác trong khi đợi kết quả trả về từ các tác vụ bất đồng bộ.

11 July 2023

viewProvider vs provider khác nhau như thế nào Angular?


Trong Angular, "viewProvider" và "provider" là hai thuộc tính khác nhau được sử dụng để cung cấp dữ liệu và các đối tượng trong ứng dụng.


ViewProvider: Đây là một thuộc tính được sử dụng để cung cấp dữ liệu hoặc đối tượng cho một view cụ thể trong Angular. ViewProvider được khai báo trong phạm vi của một thành phần (component) và chỉ có hiệu lực trong view của thành phần đó. Nó được sử dụng để cung cấp dữ liệu hoặc đối tượng cho các thành phần con hoặc các directive trong view của thành phần chứa nó.
ViewProvider không hoạt động với ng-content (cần chú ý)


Provider: Đây là một thuộc tính được sử dụng để cung cấp dữ liệu hoặc đối tượng cho toàn bộ ứng dụng Angular. Provider được khai báo trong phạm vi của một module và có thể được sử dụng trong toàn bộ ứng dụng. Nó được sử dụng để cung cấp dữ liệu hoặc đối tượng cho các thành phần, directive, hoặc service trong ứng dụng.


Tóm lại, viewProvider được sử dụng để cung cấp dữ liệu hoặc đối tượng cho một view cụ thể trong Angular, trong khi provider được sử dụng để cung cấp dữ liệu hoặc đối tượng cho toàn bộ ứng dụng.

10 July 2023

Các cách tăng performance cho ứng dụng angular?

 


Có nhiều cách để tăng hiệu suất cho ứng dụng Angular. Dưới đây là một số gợi ý:


Sử dụng AOT (Ahead-of-Time) Compilation: AOT Compilation giúp giảm thời gian tải ứng dụng và tăng tốc độ khởi chạy bằng cách biên dịch mã nguồn Angular thành mã máy trước khi chạy ứng dụng.


Lazy Loading: Sử dụng Lazy Loading để tải các module và component chỉ khi cần thiết, giúp giảm thời gian tải trang và tăng tốc độ chuyển đổi giữa các trang.


Sử dụng ChangeDetectionStrategy.OnPush: Đặt ChangeDetectionStrategy.OnPush cho các component để chỉ chạy kiểm tra thay đổi khi có sự thay đổi đầu vào từ phía component cha hoặc khi sự thay đổi được kích hoạt bằng cách sử dụng @Input hoặc async pipe. Điều này giúp giảm số lần kiểm tra thay đổi và tăng hiệu suất.


Sử dụng TrackBy trong vòng lặp *ngFor: Khi sử dụng vòng lặp *ngFor để hiển thị danh sách, hãy sử dụng trackBy để chỉ định một hàm xác định duy nhất cho mỗi mục trong danh sách. Điều này giúp Angular xác định các mục đã thay đổi và chỉ cập nhật các mục thay đổi thực sự, giúp tăng hiệu suất.


Sử dụng OnPush và Immutable Data: Sử dụng cơ chế OnPush và sử dụng dữ liệu bất biến (immutable data) để giảm số lần kiểm tra thay đổi và tăng hiệu suất.


Tối ưu hóa CSS: Loại bỏ CSS không sử dụng, sử dụng CSS minification và sử dụng các kỹ thuật như CSS Sprites để tối ưu hóa tải trang.


Sử dụng Web Workers: Sử dụng Web Workers để chạy các tác vụ nặng như tính toán phức tạp hoặc xử lý dữ liệu lớn trong một luồng riêng biệt, giúp tránh làm đóng băng giao diện người dùng.


Sử dụng Lazy Loading Images: Sử dụng kỹ thuật lazy loading để tải ảnh chỉ khi cần thiết, giúp giảm thời gian tải trang ban đầu.


Tối ưu hóa HTTP Requests: Sử dụng HTTP Interceptors để tối ưu hóa các yêu cầu HTTP bằng cách thêm caching, nén dữ liệu hoặc sử dụng HTTP/2.


Sử dụng Production Build: Sử dụng production build để tạo ra phiên bản tối ưu hóa của ứng dụng Angular, bao gồm việc loại bỏ mã không sử dụng và tối ưu hóa kích thước tệp tin.


Nhớ rằng, việc tăng hiệu suất không chỉ dừng lại ở việc áp dụng các kỹ thuật tối ưu hóa, mà còn phụ thuộc vào cấu trúc và thiết kế của ứng dụng.

06 July 2023

Có bao nhiêu Scopes trong Javascript

Scope Levels

1 - Global Scope
2 - Module Scope
3 - Block Scope
4 - Function Scope




Global Scope

<script src="script.js"></script>

<script>
  // script.js
  const a = 1
  console.log(a)
  // Prints: 1
</script>

<script src="script-1.js"></script>
<script src="script-2.js"></script>

<script>
  // script-1.js

  const a = 1
  // script-2.js

  console.log(a)
  // Prints: 1
</script>

Module Scope

<script src="script-1.js" type="module"></script>
<script src="script-2.js" type="module"></script>

<script>
  // script-1.js

  const a = 1
  console.log(a)
  // Prints: 1

  // script-2.js

  console.log(a)
  // Throws Uncaught Reference Error: a is not defined
</script>

Block Scope

function test() {
  const funcVar = "Func"

  if (true) {
    const ifVar = "If"
    console.log(funcVar, ifVar)
    // Prints: "Func", "If"
  }

  console.log(funVar, ifVar)
  // Throws Uncaught Reference Error: ifVar is not defined
}

{
  const a = 10
}

console.log(a)
// Throws Uncaught Reference Error: a is not defined

Function Scope

function test() {
  var funcVar = "Func"

  if (true) {
    var ifVar = "If"
    console.log(funcVar, ifVar)
    // Prints: "Func", "If"
  }

  console.log(funVar, ifVar)
  // Prints: "Func", "If"
}

23 June 2023

Non-blocking và Blocking

Non-blockingblocking là hai khái niệm quan trọng trong lập trình hướng đồng bộ.


Non-blocking là một thuật ngữ được sử dụng để chỉ việc thực hiện một tác vụ mà không cần chờ đợi kết quả từ tác vụ đó. Trong một non-blocking hàm, chương trình sẽ tiếp tục thực hiện các tác vụ khác mà không bị gián đoạn, cho phép chương trình tiếp tục thực hiện các tác vụ khác mà không cần chờ đợi kết quả từ tác vụ đó. Khi tác vụ đã hoàn thành, chương trình sẽ thông báo cho chương trình gọi nó về.


Ví dụ, trong một hệ thống đặt hàng, khi khách hàng đặt hàng, hệ thống sẽ gửi yêu cầu đặt hàng đến cửa hàng để xác nhận. Trong trường hợp này, hệ thống sẽ chạy một non-blocking hàm để gửi yêu cầu đặt hàng đến cửa hàng và tiếp tục thực hiện các tác vụ khác mà không bị gián đoạn. Khi yêu cầu đặt hàng được xác nhận, hệ thống sẽ thông báo cho khách hàng về kết quả của yêu cầu đặt hàng.


Blocking là một thuật ngữ được sử dụng để chỉ việc thực hiện một tác vụ mà cần chờ đợi kết quả từ tác vụ đó. Trong một blocking hàm, chương trình sẽ chờ đợi kết quả từ tác vụ đó trước khi tiếp tục thực hiện các tác vụ khác. Khi tác vụ đã hoàn thành, chương trình sẽ tiếp tục thực hiện các tác vụ khác.


Ví dụ, trong một hệ thống đăng nhập, khi người dùng nhập tên đăng nhập và mật khẩu, hệ thống sẽ gửi yêu cầu đăng nhập đến cơ sở dữ liệu để xác nhận. Trong trường hợp này, hệ thống sẽ chạy một blocking hàm để gửi yêu cầu đăng nhập đến cơ sở dữ liệu và chờ đợi kết quả của yêu cầu đăng nhập trước khi tiếp tục thực hiện các tác vụ khác. Khi yêu cầu đăng nhập được xác nhận, hệ thống sẽ cho phép người dùng truy cập vào hệ thống.




22 June 2023

clientY vs pageY

 Đưa ra một điểm trong trang clientY và pageY là khoảng cách tính bằng pixel từ điểm đến đầu chế độ xem và trang.

Ở đây, trang là toàn bộ trang được hiển thị có thể có thanh cuộn, trong khi chế độ xem là phần hiển thị của trang.

┌─────────────────────────────┬─┐◀︎─── Web page      ▲
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | pageY
| | | |
=============================┼─┤ ▲ |
| | | | | |
| | | | | |
| Scroll bar──────────▶︎ | | | | clientY
| | | Browser | |
| | | window | |
| ● Point | | | ▼ ▼
| | | |
| | | |
=============================┼─┤ ▼
| | |
| | |
| | |
└─────────────────────────────┴─┘

 

BACK TO TOP

Xuống cuối trang