Làm web (js04) - JS: Functions

Bài trước: Làm web (js03) - JS: Arrays, Logic and Loops
----------

4         Functions


A function is a chunk of code that can be referenced by a name, and is almost like a small, self-contained mini program. Functions can help reduce repetition and make code easier to follow.

In this chapter, we’ll be covering these topics:

– Defining functions―function declarations, function expressions, Function() constructors and the new arrow syntax

– Invoking a function

– Return values

– Parameters and arguments

– Hoisting―variables and functions

– Callbacks―functions as a parameter

– Project ― we’ll be using functions to make the Quiz Ninja code easier to follow

4.1       Defining a Function (p133)


Function declarations (p133)

function hello(){
console.log('Hello World!');
}

hello();

Lab 8. Write a program using function declaration. Program allows user input a number, then output the sum from 0 to that number.

Function Expression (p134) (anonymous function)

const goodbye = function(){
console.log('Goodbye World!');
};

or,

const goodbye = function bye(){
console.log('Goodbye World!');
};
goodbye();
bye() //error

Lab 9. Write a program using function expression. Program allows user input fullname, then output the fullname as uppercase.

Every function has a name (p135)

Using when debug to know which functions are causing a problem.

console.log(goodbye.name);

Function constructor (p135)

It is not recommended to use this way to declare a function.

4.2       Invoking a function (p136)

4.3       Return Values (p137)

4.4       Parameters and arguments (p138)


Variable numbers of arguments (p140)

Lab 10. Use rest parameter to write the function that allow to get the mean of any set of number.

A sample code:

function mean(...rest){
    let total = 0;
    for(item of rest){
        total += item;
    }
    return total/rest.length;
}
console.log(mean(1,2,1,2,3,4));

Arrow function (p145)

Function hoisting (p147)

Variable hosting (p148)

Variable hoisting can cause quite a bit of confusion and also relies on using var to declare variables. An error will be thrown if you attempt to refer to a variable before it has been declared using const and let. It’s better practice to use const and let to declare any variables at the beginning of a block so hoisting is unnecessary.

4.5       Callbacks (p149)


Remember at the start of this chapter when we said that functions in JavaScript are first-class objects, so they behave in just the same way as every other object? This means that functions can also be given as a parameter to another function. A function that is passed as an argument to another is known as a callback.

Consider a function:

function sing(song) {
console.log(`I'm singing along to ${song}`);
}
sing('Let It Go')
<< 'I'm singing along to Let It Go'

We can make the sing() function more flexible by adding a callback parameter:

function sing(song,callback) {
console.log(`I'm singing along to ${song}.`);
callback();
}

The callback is provided as a parameter, then invoked inside the body of the function.
But what if the function isn’t provided as an argument?

There is nothing to actually define a parameter as a callback, so if a function isn’t provided as an argument, then this code won’t work. It is possible to check if an argument is a function using the following code:

if(typeof(callback) === 'function '){
callback();
}

This will only attempt to invoke the callback if it is a function.

Now we can create another function called dance() that can be used as the callback:

function dance(){
console.log(‘I am moving my body to the groove.’);
}

Now we can call our sing function, but we can also dance as well as sing:

sing(‘Let it go’, dance);

Lab 11. Applying callback function.

As you known, arrays have sort() method to sort all items in array. Try with this array [1,3,12,5,23,18,7].sort();

The result is [1, 12, 18, 23, 3, 5, 7], what is happened? JavaScript has converted numerical array into strings, then placed in alphabetical order.

So, write a function to sort an array based on numerical values:

function numerically(a,b){
    return (a-b)
}

This function can now be used as a callback in the sort() method to sort the array of numbers correctly.

console.log(arr.sort(numerically));
// [1, 3, 5, 7, 12, 18, 23]

Code sample:

const arr = [1,3,12,5,23,18,7];
// console.log(arr.sort());
function numerically(a,b){
    return (a-b)
}
console.log(arr.sort(numerically));

4.6       Array Iterators (p153)


Arrays have a number of methods that utilize callbacks to make them more flexible.

– forEach()

In the last chapter, you can use a for loop to loop through each value in an array like so:

const colors = ['Red', 'Green', 'Blue'];
for(let i = 0; i < colors.length; i++){
    console.log(`Color at position ${i} is ${colors[i]}`);
}

An alternative is to use the forEach() method. This will loop through the array and invoke a callback function using each value as an argument. The callback function takes three parameters, the first represents the value in the array, the second represents the current index and the third represent the array tha the callback is being called on. The example above could be written as:

colors.forEach( (color, index) =>  { console.log(`Color at position ${index} is ${color}`);});

or,

colors.forEach( (color, index) =>  {
    console.log(`Color at position ${index} is ${color}`);
});

or,

colors.forEach( (color, index) =>  console.log(`Color at position ${index} is ${color}`));

– map() (p154)

For example,

console.log([1,2,3].map( square ));
function square (x) {
    return x*x;
}
//> [1, 4, 9]

An anonymous function can also be used as a callback. This example will double all the number in the array:

console.log([1,2,3].map( x => x * 2 ));
//>[2, 4, 6]

or,

console.log([1,2,3].map( (x) => x * 2 ));

or,

console.log([1,2,3].map( (x) => {
    return x * 2;
 }));

The next example takes each item in the array and places them in uppercase inside paragraph HTML tags:

const result = ['red', 'green', 'blue'].map( color => `<p>${color.toUpperCase()}</p>` );
document.write(result);

Notice in this and the previous example, the anonymous function take a parameter, color, which refers to the item in the array. This callback can also take two more parameters–the second parameter refers to the index number in the array and the third refers to the array itself. It’s quite common for callbacks to only used the first, index, parameter, but the next example shows all three parameters being used:

console.log(['red', 'green', 'blue'].map( (color, index, array) => `Element ${index} is ${color}. There are ${array.length} items in total.` ));
//> "Element 0 is red. There are 3 items in total.", "Element 1 is green. There are 3 items in total.", "Element 2 is blue. There are 3 items in total."

Lab 12. Give an array with numerical values, for example [1,2,3,4]. Write a chunk of code to write browser a list as following:

1. Item 1
2. Item 2
3. Item 3
4. Item 4

[Sample]

const so = [1,2,3,4];

document.write("<ol>");
so.map( (x) => document.write(`<li> Mục ${x} </li>`) );
document.write("</ol>");

Lab 13. Given an array with lower characters (for example [le, van, teo]),  Write a chunk of code convert lower characters into upper characters (for example [LE, VAN, TEO]).

[Sample]

const name = ['le','van','teo'];
const result = name.map( (char) => char.toUpperCase());

console.log(result);

– reduce() (p155)

The reduce() method is another method that iterates over each value in the array, but this time it cumulatively combines each result to return just a single value. The callback function is used to describe how to combine each value of the array with the running total. This is often used  to calculate statistics such as averages from data stored in an array. It usually takes two parameters. The first parameter represents the accumulated value of all the calculations so far, and the second parameter represents the current value in the array. The following example shows how to sum an array of numbers:

console.log([1,2,3,4,5].reduce( (acc,val) => acc + val ));
//> 15

The reduce() method also takes a second parameter after the callback, which is the initial value of the accumulator, acc. For example, we could total the numbers in an array, but starting at 10, insteal of zero:

console.log([1,2,3,4,5].reduce( (acc,val) => acc + val, 10 ));
//> 25

Lab 14. Calculating the average word length in a sentence that inputted by user (using prompt to input sentence).

Another example could be to calculate the average word length in a sentence:

const sentence = 'The quick brown for jumped over the lazy dog';

The sentence can be converted into an array using split() method:

const words = sentence.split(' '); // ["The", "quick", "brown", "for", "jumped", "over", "the", "lazy", "dog"]

Now we can use the reduce() function to calculate the total number of letters in the sentence, by starting the count at 0 and adding on the length of each word in each step:

const totalChars = words.reduce( (total, word) => total + word.length,0 );
//>36

And a simple division sum tells us the average word length:

const average = totalChars/words.length;

– filter()

The filter() method returns a new array that only contains items from the original array that return true when passed to the callback.

For example, we can filter an array of numbers to just the even numbers using the following code:

const numbers = [2, 7, 6, 5, 11, 23, 12];
const evens = numbers.filter( x => x % 2 === 0 );
console.log(evens);
// [2, 6, 12]

The filter() method provides a useful way to finding all the truthy values from an array:

const array = [0, 1, '0', false, true, 'hello'];
const result = array.filter(Boolean);
console.log(result);
//> [1, "0", true, "hello"]

To find all the falsy values, the following filter can be used:

const array = [0, 1, '0', false, true, 'hello'];
const result = array.filter( x => !x);
console.log(result);

This uses the not operator, ! to return the complement of a value’s boolean representation. This means that any falsy values will return true and be returned by the filter.

Chaining iterators together (p158)

For example, we can calculate the sum of square numbers using the map() method to square each number in the array and then chain the reduce() method on the end to add the results together:
const result = [1,2,3].map( x => x * x ).reduce( (acc, x) => acc + x );
console.log(result);
//> 14

Improving the mean() function (p159)

Lab 15. Improving the mean() function using a callback. Then:

– Applying to double all the numbers before calculating the mean.

– Applying to square all the numbers before calculating the mean.


Lab 16. Quiz Ninja Project (p161)
-----
Cập nhật: 28/10/2019
-----

Làm web (js03) - JS: Arrays, Logic and Loops

Bài trước: Làm web (js02) - JS: Programming Basics
----------


3         Arrays, Logic, and Loops


In this chapter, we’ll look at some of the data structures used in JavaScript to store lists of values. These are called arrays, sets, and maps. We’ll also look at logical statements that allow us to control the flow of a program, as well as loops that allow us to repeat blocks of code over and over again.

This chapter will cover the following topics:

– Array literals

– Adding and removing values from arrays

– Array methods

– Sets

– Maps

– if and else statements

– switch statements

– while loops

– do … while loops

– for loops

– Iterating over a collection

– Project ― we’ll use arrays, loops and logic to ask multiple questions in our quiz


3.1       Arrays (p89)


3.2       Sets (p103)


Lab 5. Using the prompt to input fullname. Then output characters that used to make the fullname. For example, input: nguyen teo; output: n, g, u, y, e, t, o.

Lab 6. Remove duplicated items in array. For example, inputArray = [1, 2, 4, 5, 1, 3, 5, 6, 7, 3, 5, 4, 7], outputArray = [1, 2, 4, 5, 3, 6, 7]


3.3       Convert Sets to Arrays (p108)


3.4       Maps (p111)


3.5       Convert Maps to Arrays (p115)


3.6       Logic (p115)


3.7       Loops (p119)


3.8       Labs:


Lab 7. Quiz Ninja Project (p128)


-----
Cập nhật: 23/10/2019
-----

Nhập môn lập trình


1         Mở đầu


Sau khi học xong môn Nhập Môn Công Nghệ Thông Tin, bạn đã có cái nhìn tổng quan về thông tin, biểu diễn và xử lý thông tin; đã có những kiến thức căn bản để có thể sử dụng máy tính, Internet một cách an toàn, hiệu quả; đã có thể sử dụng các phần mềm, email trong việc học, làm báo cáo và trình bày.

Môn học Nhập Môn Công Nghệ Thông Tin cũng đã giúp bạn có cái nhìn tổng quan về một số chuyên ngành, nghề nghiệp và vị trí công việc liên quan đến Công Nghệ Thông Tin. Bạn chưa nhất thiết phải chọn chuyên ngành cho mình mà hãy tập trung học tốt các môn thuộc phần Kiến Thức Đại Cương và Kiến Thức Cơ Sở Ngành. Lâu lâu ngó lại các chuyên ngành để chiêm nghiệm xem mình hợp với chuyên ngành nào hơn, điểm mạnh của mình là gì, chuyên ngành nào đang cần nhiều người làm, từ đó sẽ tự định hướng cho mình. Nếu lỡ chọn chưa đúng thì cứ chọn lại không sao hết, học cái gì cũng có lợi.

Nhập Môn Lập Trình là một học tiếp theo bạn cần học. Môn học này giúp bạn có những khái niệm, kiến thức cơ bản liên quan đến lập trình như: thuật toán, lưu đồ, mã giả, ngôn ngữ lập trình, chương trình, trình dịch; cung cấp cho bạn các kĩ năng lập trình căn bản để giải quyết các bài toán đơn giản; làm quen với các thuật ngữ tiếng Anh chuyên ngành.

Mục tiêu môn học:

– Hiểu các khái niệm: thuật toán, lưu đồ, mã giả, ngôn ngữ lập trình, chương trình, trình dịch

– Biết, hiểu và sử dụng được các kiểu dữ liệu, các cấu trúc điều khiển trong một ngôn ngữ lập trình

– Biết, hiểu và sử dụng được kiểu lập trình cấu trúc; tạo các hàm, thủ tục con để giải quyết các bài toán đơn giản

– Cài đặt được các chương trình bằng một ngôn ngữ lập trình cụ thể

– Nắm được các thuật ngữ chuyên ngành bằng tiếng Anh

Bạn nào còn yếu tiếng Anh thì theo dõi các bài giảng của các thầy, và đọc các tài liệu tiếng Việt. Bạn nào khá tiếng Anh hoặc có quyết tâm cao thì nên đọc, hiểu và làm theo cuốn sách tiếng Anh, đây là mục tiêu cao nhất của môn học.

Chúc các bạn kiên trì.
-------------------------
Cho các bạn khá tiếng Anh
 (Download ebook)
(Bản dịch tiếng Việt để đối chiếu, giúp học tiếng Anh chuyên ngành: Lập trình với C++ )

2         Introduction to C++ programming, input/output and Operators (p38)


In this chapter you’ll learn:

– To write simple computer programs in C++

– To write simple input and output statements

– To use fundamental types

– Basic computer memory concepts

– To use arithmetic operators

– The precedence of arithmetic operators

– To write simple decision making statements

2.1       Introduction (p39)

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

Cho các bạn tự học & chưa khá tiếng Anh
(Đọc ngược từ dưới lên)

Căn bản

Loạt bài giảng của thầy: Nguyễn Trần Thi Văn – Khoa CNTT – Đại học Sư phạm kĩ thuật – TP.HCM.

Clip 09: (Buổi 03_1) Tạo và chạy chương trình C++ đầu tiên với MS Visual Studio

Clip 08: Hướng dẫn nộp bài

Clip 07: Cách sửa lỗi biên dịch C++ cơ bản trong VS 2015
– Nên tạo mới project cho mỗi bài tập. Cách làm: vào menu File/New/Project, đặt tên mới cho project, trong mục Solution nhớ chọn là Add to solution.

– Để lựa chọn dự án sẽ được ưu tiên biên dịch: chuột phải vào dự án, chọn Set as Startup Project.

Clip 06: Cách tạo project mới để lập trình C++ trong VS 2015

Clip 05: Sử dụng Flowgorithm để vẽ lưu đồ thuật giải (tiếp)
Một cách làm tham khảo (flowchart để kiểm tra số nguyên tố):



Clip 04: Sử dụng Flowgorithm để vẽ lưu đồ thuật giải (tiếp)

Clip 03: Sử dụng Flowgorithm để vẽ lưu đồ thuật giải

Tải phần mềm Flowgorithm tại đây: http://www.flowgorithm.org/download/

Clip 02: Cách vẽ lưu đồ thuật giải


Clip 01: Giới thiệu môn học
Quan trọng nhất là nắm được ý tưởng của lập trình, việc lựa chọn ngôn ngữ C hay C++ là như nhau.

Với mỗi ngôn ngữ lập trình, khi nào cũng đặt ra câu hỏi: dùng chương trình gì để viết mã (Text Editor hay IDE) và dùng phần mềm nào để biên dịch (compile)/thông dịch (interpret) mã nguồn thành chương trình thực thi.
------

Cập nhật: 17/11/2019

Làm web (js02) - JS: Programming Basics

Bài trước: Làm web (js01) - JS: Hello, JavaScript
----------

2         Programming Basics


In the last chapter, we introduced JavaScript, then set up a programming environment. We even got our hands dirty with a few JavaScript programs. In this chapter, we’ll delve further and learn how JavaScript works, as well as write some more programs.

This chapter will cover the following topics:

– The importance of well-commented code

– JavaScript grammar ― expressions, statements, semicolons and whitespace

– Primitive data types

– Strings ― string literals, string properties and methods

– Declaring and assigning constants and variables

– Numbers ― decimal, hexadecimal, octal, binary and exponent form, Infinity,
and NaN

– Arithmetic operations such as +, -, *, /, and %

– Undefined and null

– Booleans ― truthy and falsy values

– Logical operators ― AND, OR, and NOT

– Our project ― we’ll set some question-and-answer variables and use alert boxes to display them


2.1       Comments (p32)

2.2       JavaScript Grammar (p33)

2.3       Reserved Word (p34)

2.4       Primitive data type (p35)


JavaScript has seven different data types. Six of them are primitive data types and are listed below:

– String

– Symbol

– Number

– Boolean

– Undefined

– Null

Any value that isn’t one of the primitive data types listed above is an object. These include arrays, functions and object literals.

JavaScript has a special operator called typeof for finding out the type of a value.

Here are some examples of the different value types:

typeof 'hello'
<< 'string'

typeof 10
<< 'number'

typeof true
<< 'boolean'

typeof { ninja: 'turtle' }
<< 'object'

typeof [ 1, 2, 3 ]
<< 'object'

2.5       Variables (p38)


Variables are used in programming languages to refer to a value stored in memory.

Variables have to be declared before they can be used. From ES6 onwards, JavaScript uses the keywords const and let to declare variables. The keyword const is used when the variable will not be reassigned to another value, whereas let is used if the variable might be reassigned later in the program.

What happened to var?

In versions of JavaScript previous to ES6, variables were declared using the keyword var. The following code shows how a variable called number would be declared and assigned the value of 2:
var number = 2;

This worked in much the same way as using let. The main difference was that variables declared using let and const have block scope, which is discussed in more detail below. They also prevent you from overwriting any built-in methods by assignment, which is generally frowned upon, whereas using var doesn’t.

So why was the new word let introduced into ES6? Why not just change the behavior of var?
Remember that a core tenet of the JavaScript language is that it has to remain backwardly compatible. This means that the behavior of var had to remain consistent, so couldn’t just be changed in ES6. For that reason, the new keyword let was introduced.

You should be aware of var though, as you will see it used frequently in older code examples around the web to declare variables.

2.6       Scope (p40)

2.7       Naming Constants & Variables (p43)

2.8       Direct Assignment and Assignment By Reference (p44)

2.9       String (p45)

2.10  Template Literals (p52)

2.11  Symbol (p53)

2.12  Numbers (p55)

2.13  Number Methods (p57)

2.14  Changing The Value of Variables (p60)

2.15  Type Coercion (p64)

2.16  Converting Between Strings and Numbers (p65)

2.17  Undefined and NULL (p69)

2.18  Booleans (p70)

2.19  Logical Operators (p71)

2.20  Bitwise Operators (p74)

2.21  Comparison (p78)

2.22  Labs:



Lab 4. Quiz Ninja Project (p84)

-----
Cập nhật: 17/10/2019
-----

Hệ điều hành (4) - Liên lạc và đồng bộ hóa giữa các tiến trình

Bài trước: Hệ điều hành (3) - Quản lý tiến trình
-----

5         Liên lạc và đồng bộ hóa giữa các tiến trình

5.1       Liên lạc giữa các tiến trình




Tiến trình độc lập và tiến trình hợp tác?

Một tiến trình không bị ảnh hưởng bởi một tiến trình khác gọi là tiến trình độc lập, ngược lại gọi là tiến trình hợp tác (cooperation process).

Các tiến trình cần phải hợp tác và liên lạc với nhau là để chia sẻ thông tin, như dùng chung tập tin, bộ nhớ, hoặc hợp tác hoàn thành công việc.

Cơ chế liên lạc giữa các tiến trình

Tuy nhiên, do mỗi tiến trình có một không gian địa chỉ riêng biệt nên chúng không thể dễ dàng trực tiếp liên hệ với nhau, vì vậy, hệ điều hành sẽ cung cấp các cơ chế để các tiền trình có thể liên lạc được với nhau. Khi đó, hệ điều hành cần phải giải quyết các vấn đề chính sau:

– Liên kết tường minh hay tiềm ẩn

– Liên lạc theo chế độ đồng bộ hay không đồng bộ

– Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ thống phân tán

Ví dụ một số cơ chế để liên lạc giữa các tiến trình,

– Liên lạc bằng tín hiệu (signal)

– Liên lạc bằng đường ống (pipe)

– Liên lạc qua vùng nhớ chia sẻ (shared memory)

– Liên lạc bằng thông điệp (message)

– Liên lạc qua socket

5.1.1       Liên lạc bằng tín hiệu


Mỗi tiến trình sở hữu một bảng tín hiệu, mỗi tín hiệu được sử dụng để thông báo cho tiến trình về một sự kiện nào đó xảy ra. Với mỗi tín hiệu sẽ có một hàm xử lý tín hiệu (signal handler) do phần cứng hoặc hệ điều hành cung cấp.

5.1.2       Liên lạc bằng đường ống


Là một kênh liên lạc trực tiếp giữa hai tiến trình, dữ liệu xuất của tiến trình này được chuyển thành dữ liệu nhập của tiến trình kia dưới dạng một dòng các byte (theo một chiều duy nhất).


5.1.3       Liên lạc qua vùng nhớ chia sẻ


Có một vùng nhớ vật lý mà các tiến trình cần liên lạc nhau đều truy cập được.

5.1.4       Liên lạc bằng thông điệp


Các tiến trình không chia sẻ tài nguyên chung và liên lạc với nhau bằng cách gửi/nhận các thông điệp.

5.1.5       Liên lạc qua socket


Là thiết bị truyền thông hai chiều tương tự như tập tin, có thể đọc/ghi lên đó, các thao tác đọc/ghi chính là sự trao đổi dữ liệu (có thể trao đổi giữa các máy khác nhau).


5.2       Đồng bộ hóa giữa các tiến trình


Đồng bộ các tiến trình là gì ?

Đồng bộ các tiến trình là bảo đảm các tiến trình xử lý song song không tác động sai lệch đến nhau.

Tại sao phải đồng bộ giữa các tiến trình ?

– Yêu cầu độc quyền truy xuất (mutual exclusion) : tại một thời điểm, chỉ có một tiến trình được quyền truy xuất một tài nguyên không thể chia sẻ.

– Yêu cầu phối hợp (synchronization) :  các tiến trình cần hợp tác với nhau để hoàn thành công việc. Ví dụ chương trình in sẽ xuất kí tự vào buffer, chương trình điều khiển máy in (printer driver) sẽ lấy kí tự trong buffer ra để in. Hai tiến trình này phải phối hợp với nhau để làm sao chương trình in không được xuất kí tự vào buffer khi buffer đầy mà phải chờ printer driver lấy bớt dữ liệu trong buffer ra.

Từ hai yêu cầu trên, chúng ta có hai "bài toán đồng bộ" cần giải quyết là bài toán "độc quyền truy xuất" (bài toán miền găng) và bài toán "phối hợp thực hiện".


5.2.1       Miền găng


Miền găng (critical section) là một đoạn mã của tiến trình có khả năng xảy ra lỗi khi truy xuất tài nguyên dùng chung (ví dụ biến, tập tin).


Bốn điều kiện của bài toán miền găng :

(1) Tại một thời điểm không có hai tiến trình cùng ở trong miền găng

(2) Không có giả thiết về tốc độ của các tiến trình, cũng như về số lượng bộ xử lý

(3) Một tiến trình bên ngoài miền găng không được ngăn cản các tiến trình khác vào miền găng

(4) Không có tiến trình nào phải chơ vô hạn để được vào miền găng


5.2.2       Các giải pháp đồng bộ


Có năm nhóm giải pháp để giải quyết bài toán đồng bộ là :

– Busy waiting

– Sleep and wakeup

– Semaphore

Monitor

– Message


5.2.3       Nhóm giải pháp Busy waiting (bận thì đợi)



Giải pháp này chia thành hai loại:

– Sử dụng phần mềm

– Sử dụng phần cứng

Giải pháp phần mềm :

– Thuật toán 1 :

– Thuật toán 2 :

– Thuật toán Peterson :

Giải pháp phần cứng (đọc thêm)

– Cấm ngắt :

– Sử dụng lệnh TSL (test and set lock) :

5.2.4       Nhóm giải pháp Sleep and wakeup (ngủ và đánh thức)



– Sử dụng lệnh Sleep và Wakeup :

– Sử dụng cấu trúc Semaphore :

5.2.5       Sử dụng cấu trúc monitor



Bài toán "năm nhà hiền triết ăn tối".

5.3       Tình trạng tắc nghẽn (deadlock)


Đọc thêm.

5.4       Thực hành


Lab 11. Lập trình bài toán Người sản xuất – Người tiêu thụ. Tham khảo: https://drive.google.com/open?id=0B4FOelgeetqJX1VuN1dBNkJQaHM


Lab 12. Lập trình bài toán “Dining philosophers”. Tham khảo (trang 94, 95): https://drive.google.com/file/d/1P_zsBstk_qvbf531CAV_-rV9GxSE7WwV/view

5.5       Câu hỏi ôn tập


1.      Có năm nhóm giải pháp để giải quyết bài toán đồng bộ là :

A. Busy waiting, Peterson, Semaphore, Monitor, Message

B. Semaphore, Busy waiting, Sleep and wakeup, Monitor, Message

C. Monitor, Busy waiting, Sleep and wakeup, TSL, Message

D. Sleep and wakeup, Busy waiting, Semaphore, Deadlock, Message

2.      Ví dụ một số cơ chế để liên lạc giữa các tiến trình :

A. Signal, pipe, Shared memory, Message, Socket

B. Pipe, Shared memory, Signal, Monitor, Socket

C. Shared memory, Signal, Pipe, Sleep and wakeup, Message,

D. Pipe, Signal, Message, Port, Shared memory


--------
Cập nhật: [09/10/2019]
-------
Bài tiếp theo: Hệ điều hành (5) - Quản lý bộ nhớ & bộ nhớ ảo
Danh sách các bài học

Facebook marketing (01) - Tổng quan


1         Tiềm năng của Facebook


– Facebook được thành lập 2004

– Công ty Facebook có 39.651 nhân viên (06/2019)[1]

– Sứ mệnh của Facebook: xây dựng cộng đồng, mang thế giới đến gần hơn với mọi người; mọi người sử dụng Facebook để kết nối với bạn bè và gia đình, để khám phá những gì đang diễn ra trên thế giới, chia sẻ và bày tỏ những gì quan trọng đối với họ.

Trên thế giới,

– Số người có đăng nhập Facebook hàng tháng (monthly active users): trên 2.41 tỉ (2019)

– Số người có đăng nhập Facebook hàng ngày: 1.59 tỉ

– 29.7% người dùng ở độ tuổi 25 > 34

Tại Việt Nam,

– Số người sử dụng Internet là 64 triệu, chiếm 67% dân số (2018)

– Vào mạng nhiều nhất vào lúc 18:00 > 22:00

– Số người dùng Facebook là hơn 60 triệu, thời gian sử dụng 3,55 giờ/ngày[2]; cao hơn so với số người dùng Youtube là 50 triệu, thời gian sử dụng 2,65 giờ/ngày; và số người dùng Zalo là 47 triệu, thời gian sử dụng 2,12 giờ/ngày

– Độ tuổi sử dụng:

(1) 18 – 24: 18 triệu người

(2) 25 – 34: 21 triệu người

(3) 35 – 44: 9 triệu người

(4) 45 – 60+: hơn 6 triệu người


2         Tổng quan về Facebook marketing


Facebook marketing là gì?

Facebook marketing là việc bạn có sản phẩm, dịch vụ; bạn tìm ra nhu cầu của người dùng, khách hàng đối với sản phẩm, dịch vụ của bạn là gì, họ thực sự cần điều gì hoặc có thể nhận được gì từ sản phẩm dịch vụ đó; và đáp ứng nhu cầu của họ; nhằm tăng lợi nhuận hoặc tăng lợi ích; thông qua mạng xã hội Facebook.

Facebook marketing chia người dùng facebook thành hai đối tượng:

– Một là facebook marketer, là những người có nhu cầu làm marketing

– Hai là facebook user, là nhóm người dùng

Công việc mà một người làm facebook marketing cần thực hiện là biến những người dùng facebook xa lạ, vãng lai trở thành người like fanpage của mình, thành người follow mình, thành member trong cộng đồng của mình, tham gia vào sự kiện hay cuộc thi của mình.

Làm sao làm được việc trên:

– Dùng ứng dụng (Application, Apps): tạo ra các ứng dụng chạy trên nền facebook để thu hút mọi người

– Sử dụng dịch vụ quảng cáo của facebook

– Tạo ra nội dung (content): cập nhật sản phẩm/dịch vụ, nội dung ưu đãi, câu hỏi để người dùng có hành động trả lời, cuộc thi, sự kiện, thông tin về thương hiệu, …


Đọc thêm về cách dùng Apps: https://icreate.vn/tu-van/facebook-apps-la-gi.d144/


3         Quy trình tìm kiếm và tiếp cận khách hàng


– Ai là khách hàng?

– Làm sao để bạn tìm được khách hàng?

– Khách hàng là ai?

– Làm sao để khách hàng tìm được bạn?

– Khách hàng sử dụng sản phẩm/dịch vụ của bạn

4         Profile, Group và Fanpage

4.1        Profile


Để có thể sử dụng Facebook, bạn cần phải đăng kí một tài khoản (account), bằng cách cung cấp cho Facebook số điện thoại hoặc email riêng của bạn, đặt mật khẩu cho tài khoản. Bạn cần nhớ số điện thoại (hoặc email) đã đăng ký và mật khẩu để thực hiện việc đăng nhập sử dụng sau này.

Facebook profile là gì?

Sau khi đăng kí một tài khoản trên Facebook, bạn sẽ được Facebook tạo cho mỗi cá nhân một Facebook profile, hiểu nôm na là một trang riêng, hay một hồ sơ cá nhân.

Khi đã có tài khoản (cũng là có profile), bạn có thể thực hiện đăng (post) các thông tin, hình ảnh, video, kết bạn, tham gia/tạo nhóm, theo dõi/tạo trang (fanpage), gửi tin nhắn, và cập nhật các thông tin cá nhân.

Các thông tin cá nhân bạn có thể cập nhật trong profile gồm: nơi làm việc (workplace), trường đã/đang học, nghề nghiệp, nơi đã/đang ở, các thông tin về ngày tháng năm sinh, giới tính, số điện thoại, thông tin về người thân, gia đình, sở thích, và các thông tin khác. Bạn có thể cập nhật các thông tin này bằng cách đăng nhập vào tài khoản và chỉnh sửa ở các mục sau:

– Work and Education

– Places You've Lived

– Contact and Basic Info

– Family and Relationships

– Details About You

– Life Events


Một profile có thể kết bạn (add friend) được với 5000 người, và không giới hạn số người theo dõi (follow).

4.1        Group


Facebook group hay gọi tắt là group là một tính năng do Facebook cung cấp, nó cho phép tạo ra các nhóm của những người dùng facebook, nhằm cùng nhau thảo luận, thông báo hoặc đánh giá về một chủ đề/câu chuyện cùng quan tâm.

Một người dùng đã có tài khoản (account/profile) là họ có thể tạo ra các nhóm hoặc tham gia vào các nhóm có sẵn trên Facebook.

Trên Facebook có hai loại nhóm[1]:

– Công khai (public): mọi người đều có thể biết các thành viên của nhóm và những nội dung đã đăng (post)/thảo luận.

– Riêng tư (private): chỉ có thành viên trong nhóm mới biết được các thành viên trong nhóm và những nội dung đã đăng/thảo luận.

Người dùng sẽ lựa chọn kiểu của nhóm (public hay private) khi tạo ra nhóm, và có thể thay đổi về sau. Việc thay đổi kiểu của nhóm chỉ được thực hiện sau 28 ngày kể từ lần đổi gần đây nhất, ví dụ bữa nay thực hiện thay đổi từ public sang private thì phải sau 28 ngày nữa mới có thể đổi ngược lại. Với nhóm kiểu private, khi thành viên của nhóm vượt quá 5000, Facebook sẽ không cho chuyển nhóm từ private sang public. Với các nhóm có số thành viên nhỏ hơn 5000 thì có thể chuyển đổi qua lại giữa public và private.

Mọi thành viên trong nhóm đều nhận được nội dung do một thành viên trong nhóm đăng lên.

Để tạo nhóm:

– Đăng nhập vào trang Facebook

– Bấm vào mục Create (ở thanh menu, phía trên, bên phải), chọn mục Group

– Đặt tên cho group (Name your group), mời ai đó tham gia group (Add some people), chọn kiểu group (Select privacy), chọn chế độ công khai hoặc bí mật (Hide group)

– Bấm nút Create để hoàn thành việc tạo nhóm

Để tham gia các nhóm có sẵn:

– Đăng nhập vào trang Facebook

– Nhập tên nhóm vào ô tìm kiếm (Search) (ở thanh menu, phía trên, bên trái), gõ phím Enter

– Nếu nhóm có tồn tại, nó sẽ xuất hiện trên màn hình, bấm vào nút Join bên cạch tên nhóm để tham gia


– Cũng có thể bấm vào mục Explore\Groups tại menu dọc, bên trái màn hình để quản lý, khám phá, tham gia các nhóm



[2] Nguồn: didongvietnam.net
-----
Cập nhật: 22/10/2019
-----