Docker - Full ổ cứng vì /data/mysql/binlog.*
binlog
hay Binary Log là file lưu lại mọi action có tác động đến sự thay đổi của dữ liệu, tức về cơ bản là mọi thao tác insert
, update
hay delete
của bạn đều được lưu lại tại đây. Thế nên nếu hệ thống của bạn được sử dụng nhiều, và có nhiều thao tác với database thì phần log này có thể phình lên khá nhanh.
Binary Log được sinh ra với 2 mục đích chính:
- Đồng bộ dữ liệu trong mô hình replication, giữa
master
vàslave
. Tức thao tác thay đổi dữ liệu trongmaster
sẽ được đồng bộ sangslave
theo cách là những event trong Binary Log củamaster
sẽ được gửi sangslave
, và được chạy lại ở bênslave
, từ đó tái hiện lại được dữ liệu giống với bênmaster
. - Khôi phục dữ liệu (data recovery). Bạn có thể chạy backup dữ liệu thường xuyên, 1, 2 lần một ngày. Tuy nhiên khi hệ thống có sự cố, mà cần khôi phục lại dữ liệu thì nếu chỉ dùng bản backup đó thôi cũng sẽ không đủ giúp bạn có lại được dữ liệu một cách toàn vẹn như ở thời điểm trước khi sự cố xảy ra. Khi đó bạn có thể sử dụng Binary Log để chạy lại những câu lệnh từ sau khi bản backup được tạo ra, từ đó có thể tiếp tục khôi phục dữ liệu từ sau thời điểm của bản backup.
Còn quay trở lại với vấn đề của bạn, thì cũng không rõ tại sao chức năng binary log lại đang được bật lên như vậy. Bạn có thể cân nhắc các cách xử lý như dưới đây:
- Tắt hẳn chức năng này đi. Ở trong thư mục laradock có file
mysql/my.cnf
, bạn thêm optiondisable-log-bin
(hoặcdisable_log_bin
gì đó) vào đó rồi restart lại mysql service - Thay đổi option expire log cho ngắn đi. Theo mình check trên document của mysql thì đó là option binlog_expire_logs_seconds với giá trị default là 2592000 giây (30 ngày), bạn có thể đổi lại thành 1, 2 ngày thôi. Để dùng option này thì bạn cũng edit vào trực tiếp file
mysql/my.cnf
À ngoài ra để xóa hết các file binlog hiện tại, bạn có thể dùng lệnh PURGE BINARY LOGS
như hướng dẫn ở đây https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html
Hỏi về: cách xem thông tin config để gửi mail trong Laravel
Mình thấy trang web https://muumuu-domain.com/ chỉ là trang cho phép bạn mua domain thôi, chứ để gửi được mail thì bạn cần phải dựng lấy một Mail Server, hoặc sử dụng một Email Delivery service nào đó, mà cho phép gửi mail thông qua việc gọi API của họ, như Sendgrid, Mailgun, Mailchimp, Amazon SES ...
Dùng các dịch vụ này thì sẽ giúp bạn gửi mail với số lượng lớn được dễ dàng hơn, đỡ bị đưa vào spam hơn.
Xin ý kiến về ngành học công nghệ thông tin
Thực ra cũng có một cách nữa là giờ chuyển sang ôn thi khối A để thi vào trường có khóa CNTT bằng bài thi cho khối A. Trước hồi cấp 3 anh cũng học chuyên ngoại ngữ, nhưng sau đó anh lại chuyển sang thi khối A chứ không thi khối D, cũng chỉ vì muốn học CNTT
Quay lại với câu hỏi chính của em thì
nên em rất băn khoăn về chất lượng, cũng như là với bằng cntt từ một trường kinh tế thì tương lai có khó tìm việc không ạ?
Tìm việc có khó hay không thì xuất phát từ việc em có thực sự giỏi hay không, có thể thể hiện được nhiều trong công việc hay không, chứ cũng không hẳn là phụ thuộc hoàn toàn vào em học trường nào ra. Đúng là chất lượng giảng dạy, danh tiếng trường Đại Học thì cũng quan trọng, cầm một bằng giỏi về IT của Bách Khoa thì cũng sẽ tự tin hơn, được nhà tuyển dụng đánh giá cao hơn ... Tuy nhiên đó cũng không phải là tất cả. Học IT thì kiến thức rất rộng, và sẽ phải tự tìm hiểu, học hỏi nhiều, nên quan trọng là em có niềm đam mê, là có thể sẽ gắn bó và theo đuổi được nó thôi.
Nhiều người không học chuyên ngành IT họ còn tự học để làm IT được, nhiều người học chuyên ngành kinh tế còn tự tìm hiểu để trở thành kỹ sư AI giỏi được, nói gì đến mình được học chuyên ngành ngay từ đại học
Thực tế xung quanh anh, hay những người anh đã, và đang làm việc cùng, cũng có rất nhiều bạn vốn không phải học chuyên ngành IT.
Ngoài ra thì anh thấy trường Kinh Tế Quốc Dân mặc dù vốn không phải là chuyên về kỹ thuật, nhưng họ cũng là một trường rất có danh tiếng trên cả nước, nên chắc khoa CNTT của trường cũng không phải là quá yếu đâu (so với mặt bằng chung, chứ so với Bách Khoa, Đại Học Công Nghệ, Học Viện Bưu Chính Viễn Thông ... những trường chuyên rồi thì không nói làm gì).
Và quan trọng nhất vẫn là nỗ lực của em sau khi vào trường, chứ cũng đừng kỳ vọng quá nhiều vào nhà trường.
Hiện em đang nhìn quá nhiều vào cái mục tiêu "sau khi ra trường tìm được việc", tuy nhiên nếu nhìn thoáng hơn ra, rằng cuộc đời mình còn rất dài, và việc tìm được việc không phải là cái đích đến của mình, nó chỉ là sự khởi đầu (cho con đường sự nghiệp của mình sau này) mà thôi. Chỉ cần mình cố gắng đủ lâu và đủ nhiều, thì sớm muộn mình cũng sẽ gặt hái được thành công.
Hỏi về hàm create của laravel
Laravel Model có một chức năng gọi là Mass Assignment
, hiểu đơn giản là chỉ những property nào được khai báo trong biến $fillable
trong Model, thì mới có thể được lưu vào trong Database thông qua hàm create()
.
Như model User
mặc định của Laravel thì biến $fillable
được khai báo tại đây https://github.com/laravel/laravel/blob/8.x/app/Models/User.php#L19
protected $fillable = [
'name',
'email',
'password',
];
Tức chỉ có các trường name
, email
, password
là có thể được lưu lại khi sử dụng hàm create
của model.
Điều đó đồng nghĩa với việc:
- Trong bảng
users
có các trườngid
,created_at
,updated_at
... tuy nhiên dù có truyền những thông tin đó vào hàmcreate()
thì chúng cũng sẽ bị bỏ qua - Bạn có truyền các thông tin khác, vốn là các cột không tồn tại trong bảng
users
, thì tất nhiên, chúng cũng sẽ bị bỏ qua.
Bạn có thể đọc thêm về chức năng Mass Assignment này trên document của Laravel tại đây
Làm thế nào để chuyển đổi http sang https trong dự án laravel
Nếu bạn đang chạy dịch vụ ở môi trường staging hay production, và đã có domain trỏ đến đó rồi, thì bạn có thể sử dụng Letsencrypt để generate ra một ssl certificate miễn phí để sử dụng. Bạn có thể dùng công cụ Certbot để thao tác được dễ dàng hơn. Bạn có thể tham khảo tại
- https://viblo.asia/p/cai-dat-https-mien-phi-cho-website-63vKjJ0bK2R
- https://viblo.asia/p/cai-dat-sslhttps-free-certbot-tren-aws-ec2-RQqKL9pOZ7z
Còn nếu bạn đang ở môi trường localhost, thì có thể tự generate ra một cái ssl để dùng ở local, với bất kỳ domain nào bạn thích Bạn có thể tham khảo tại:
Hỏi về anh Tran Duc Thang @thangtd90
Cám ơn bạn đã để ý đến những câu trả lời của mình, hy vọng chúng có thể giúp ích được ít nhiều cho bạn
Mình từng tham gia vào phát triển hệ thống Viblo những ngày đầu tiên, rồi sau đó trải qua một vài vị trí như Team Leader hay Project Manager của dự án thôi, còn giờ đây cũng không phải là can thiệp quá sâu vào công việc của Viblo Team nữa, chủ yếu là đưa ra góp ý về định hướng phát triển cho Viblo Platform mà thôi. Hy vọng bạn yêu thích và ủng hộ các sản phẩm của Viblo Team
Token là gì? Nó hoạt động như thế nào?
Có lẽ câu hỏi của bạn không được rõ ràng cho lắm nhỉ Hình như bạn đang hỏi về CSRF Token, chứ không phải khái niệm token chung chung.
Token thì bạn có thể hiểu đơn giản là một đoạn string dùng để chứng minh bạn có quyền thực hiện một công việc nào đó. Chẳng hạn như chúng ta có access token dùng để kiểm tra bạn có quyền truy cập vào dữ liệu/có quyền gọi API ...
CSRF Token là một đoạn string có thể được sử dụng để bảo vệ người dùng khỏi các cuộc tấn công Cross-Site Request Forgery (CSRF), hay nói cách khác là để chứng minh request được gửi lên server là hợp lệ. Cơ chế của nó đơn giản là ở phía server khi render ra view, thì sẽ sinh ra một đoạn string random, và lưu vào trong session của người dùng rồi trả ra cho client. Phía trình duyệt muốn gửi request lên server thì sẽ cần phải gửi đúng đoạn string đó lên, nếu không server sẽ từ chối response. Đoạn string đó được gọi là CSRF Token.
Việc bạn code Vuejs, Reactjs gọi API bằng axios mà không thấy set token như trước thì là do đơn giản công việc đó đã được làm ở chỗ khác, do người khác config cho rồi thôi Những ứng dụng dạng Single Web App thì do server chỉ thực hiện trả về html/css/js ở request đầu tiên, và các request sau chỉ gọi API lấy dữ liệu json rồi render ra view, thế nên việc setup default csrf token cũng chỉ cần thực hiện một lần duy nhất.
Còn việc app của bạn kết nối bị lỗi "CSRF token mismatch"
thì là do API app đang gọi vốn dành cho web, và nó có xử lý validate csrf token từ client gửi lên (trong middleware chẳng hạn), thế nên app gọi trực tiếp API sẽ bị lỗi. Thường thì các app sẽ có cơ chế authenticate qua access token riêng rồi, nên API dành cho app sẽ được remove phần validate csrf token đi.
Bạn có thể đọc thêm một vài bài viết trên Viblo về tấn công CSRF, lúc đó bạn có thể sẽ hiểu rõ hơn về CSRF Token
- https://viblo.asia/p/csrf-la-cai-quai-gi-hoat-dong-nhu-the-nao-bWrZngnOlxw
- https://viblo.asia/p/laravel-tim-hieu-ve-csrf-protection-RnB5pNX6ZPG
- https://viblo.asia/p/ky-thuat-tan-cong-csrf-va-cach-phong-chong-amoG84bOGz8P
- https://viblo.asia/p/tim-hieu-csrf-la-gi-cach-phong-chong-tan-cong-gia-mao-RQqKLAyOZ7z
- https://viblo.asia/p/tan-cong-csrf-va-cach-phong-chong-m68Z0mnAlkG
[Viblo] Cách lề văn bản như nút tab
Cú pháp Markdown không hỗ trợ việc đó bạn ạ. Để có được hiệu quả căn lề gần giống như trong hình, bạn có thể dùng 2 cách:
- Dùng Lists. Ví dụ như
* List 1
* Nested List 1
* Nested List 2
* Nested Nested List 1
* Nested List 3
* List 2
Lúc đó sẽ được kết quả như sau:
- List 1
- Nested List 1
- Nested List 2
- Nested Nested List 1
- Nested List 3
- List 2
- Hoặc không thì đưa vào thẻ code ```, giống như cách viết ở trên
[Viblo] Tự động căn giữa image
Nội dung trong []
thì sẽ được render thành alt
attribute trong thẻ image
Ví dụ như ![this is a cat](https://examples.com/cat.jpg)
thì sẽ được render ra thành <img src="https://examples.com/cat.jpg" alt="this is a cat">
.
Còn attribute alt
thì có nghĩa là alternate text for image, tức là nội dung sẽ được hiển thị khi image bị lỗi, hay nội dung sẽ được sử dụng khi bạn copy paste ảnh vào một text editor bình thường.
Các bác cho e hỏi có cách nào tự động làm cho ảnh nằm giữa như margin:center trong css ko ạ?
Ảnh upload trên Viblo sẽ được tự động căn giữa, nếu nó nằm trên 1 dòng riêng biệt bạn ạ
Do đó bạn cứ thêm 1 dòng trắng phía trước và sau ảnh là được, ví dụ:
// Ảnh nằm trên cùng 1 dòng với text
this is a long text
![](image.jpg)
//Ảnh nằm trên 1 dòng riêng và được căn giữa
this is a long text
![](image.jpg)
Cách kiểm tra chuỗi có từ bắt đầu bằng dấu @ trong PHP
Theo mình hiểu thì bạn muốn match @nickname
chỉ khi trước @
không phải là một ký tự nào đó (mà phải là whitespace) đúng không nhỉ
Bạn thử cách này xem sao nhé, mình cũng chỉ sửa lại một chút từ cách làm trong comment của bạn thôi
function replaceMention($string) {
// Replace nếu string bắt đầu bằng @
$string = preg_replace("/^@([A-Za-z0-9\/\.]*)/", "<a target=\"_new\" href=\"http://website.com/user/$1\">@$1</a>", $string);
// Replace trong các trường hợp @ nằm bên trong văn bản, và phía trước nó phải là ký tự thuộc kiểu whitespace
$string = preg_replace("/(\s)@([A-Za-z0-9\/\.]*)/", "$1<a target=\"_new\" href=\"http://website.com/user/$2\">@$2</a>", $string);
return $string;
}
$string1 = "Hello, I am @Tom. I'm a cat. This is @Jerry.";
$string2 = "Hello, this is <a href='https://website.com/user/Tom>@Tom</a>";
$string3 = "Hello, my email is tomcat@jerry.com";
$string4 = "@Tom: hello, are you @Jerry?";
echo replaceMention($string1) . "\n";
echo replaceMention($string2) . "\n";
echo replaceMention($string3) . "\n";
echo replaceMention($string4) . "\n";
Output
Hello, I am <a target="_new" href="http://website.com/user/Tom.">@Tom.</a> I'm a cat. This is <a target="_new" href="http://website.com/user/Jerry.">@Jerry.</a>
Hello, this is <a href='https://website.com/user/Tom>@Tom</a>
Hello, my email is tomcat@jerry.com
<a target="_new" href="http://website.com/user/Tom">@Tom</a>: hello, are you <a target="_new" href="http://website.com/user/Jerry">@Jerry</a>?
Bạn thử lại xem có ổn không
Xử lý dữ liệu javascript
Bạn thử xem xử lý như dưới đây có được không
Cũng phải mất 2 vòng lặp lồng nhau (^^;)
// Khởi tạo dữ liệu để test
let rooms = [];
rooms.push({id: "phong1", "staffs": "1,2,3,4,5", "capacity": "6"});
rooms.push({id: "phong2", "staffs": "1,2,4", "capacity": "6"});
rooms.push({id: "phong3", "staffs": "1,2,3", "capacity": "6"});
rooms.push({id: "phong4", "staffs": "2,3,4", "capacity": "5"});
rooms.push({id: "phong5", "staffs": "3,4", "capacity": "4"});
// Xử lý qua mảng các phòng họp.
// Chuyển list nhân viên từ string sang array, và thêm vào trường để lưu số lượng thực tế
let staffs = [];
for (let room of rooms) {
room.staffsArray = room.staffs.split(',');
// Tạo biến staffs để lưu danh sách mã số nhân viên, không bị trùng lặp
staffs = staffs.concat(room.staffsArray.filter((item) => item && staffs.indexOf(item) < 0));
room.realCapacity = parseInt(room.capacity);
}
// Lặp qua từng nhân viên một
// Với mỗi nhân viên thì lặp qua từng phòng, phòng nào có nhân viên đó thì trừ đi một
// Đồng thời lưu lại thông tin xem phòng nào có số lượng ít nhất
// Sau đó, tăng lại một cho phòng có số lượng ít nhất này
for (let staff of staffs) {
let minRoomIndex;
let minNum;
for (index in rooms) {
let room = rooms[index];
if (room.staffsArray.includes(staff)) {
if (minRoomIndex === undefined || room.realCapacity < minNum) {
minNum = room.realCapacity;
minRoomIndex = index;
}
room.realCapacity--;
}
}
rooms[minRoomIndex].realCapacity += 1;
}
Mình tính ra thì với dữ liệu ở trên sẽ ra kết quả
phòng 1: 3
phòng 2: 4
phòng 3: 4
phòng 4: 3
phòng 5: 2
Có vẻ trùng với kết quả mong muốn của bạn ở phần comment rồi Không rõ có đúng là đề bài yêu cầu thế không nhỉ
React native trên xcode
Mọi người cho e hỏi lập trình RN có cần nhất thiết phải liên tục update xcode ko ạ
Điều đó còn tùy vào việc em muốn dùng React Native để build ra ứng dụng cho hệ điều hành nào nữa Nếu em chỉ cần build app cho Android thôi thì không cần đến xcode, còn nếu em muốn build app cho iOS thì lúc đó sẽ cần. Cần có XCode thì em mới có thể build app, chạy nó trên simulator, sign app và upload app lên store.
ko biết dùng bản củ thì có ảnh hưởng gì đến phiên bản hiện tại của RN ko ạ
Nếu em cần làm app cho iOS thì chắc là sẽ có ảnh hưởng đấy, do có thể nó không hỗ trợ các hệ điều hành mới, và sẽ không chạy được trên các hệ điều hành mới.
[PHP cơ bản] Giải bài toán ATM trả về số lượng tờ tiền cụ thể
Chỗ sai của bạn là khi tính ra số tờ 500K, bạn đang không có logic để check xem số tờ cần rút có vượt quá số tờ còn lại trong máy ATM hay không.
Thế nên nếu máy chỉ có 2 tờ 500K mà bạn cần rút 3, 4, 5 tờ thì kiểu gì nó cũng chạy vào hàm else
ở cuối cùng, rồi vào trong hàm if
và in ra là 3, 4, 5 tờ.
Thực ra bài toán này bạn có thể giải quyết một cách đơn giản là rút ra số tờ có mệnh giá lớn nhất trong ATM mà không vượt quá số tiền cần rút hoặc rút ra toàn bộ số tờ có mệnh giá lớn nhất còn lại trong ATM, và cứ lặp lại thế cho đến khi rút được hết tiền thì thôi.
Tức sẽ gồm các bước:
- Check xem ATM có đủ tiền để rút không, không đủ thì báo lỗi
- Check xem số tiền cần rút có phải là bội số của 50,000 không, không phải thì báo lỗi
- Rút ra
n
tờ tiền có mệnh giá lớn nhất chưa được tính đến trong ATM, vớin = min(Số tiền cần rút / Mệnh giá tờ tiền lớn nhất, Số tờ có mệnh giá lớn nhất)
. Bạn có thể tưởng tượng thế này. Giả sử cần rút 1,500,000 và tờ mệnh giá lớn nhất hiện tại là 500,000, thì số tờ expect là 3. Nếu số tờ còn lại là 2 thì ta chỉ rút 2 thôi (min(3,2)), còn nếu số tờ còn lại là 4 thì ta rút 3 (min(3,4)). - Sau khi thực hiện xong bước ở trên thì tính toán lại số tiền còn lại sẽ là
Số tiền cần rút (mới) = Số tiền cần rút (cũ) - n * Mệnh giá của n tờ vừa rút
. Nếu số tiền cần rút mà về0
thì kết thúc quá trình rút tiền, còn không thì tiếp tục lặp lại bước rút tiền ở trên với việc mệnh giá "lớn nhất" mới được chuyển xuống mệnh giá tiếp theo.
Bạn có thể tham khảo đoạn code sau:
$moneyArray = [500000, 200000, 100000, 50000];
$numberOfNotes = [2, 2, 2, 2];
$getMoney = 1500000;
$sum = 0;
for ($i = 0; $i < count($moneyArray); $i++) {
$sum += $moneyArray[$i] * $numberOfNotes[$i];
}
if ($getMoney > $sum) {
echo "ATM không đủ tiền";
} elseif ($getMoney % 50000 != 0) {
echo "Số tiền nhập vào không phải là bội số của 50,000";
} else {
for ($i = 0; $i < count($moneyArray); $i++) {
$numberOfReceivedNote = min($getMoney / $moneyArray[$i], $numberOfNotes[$i]);
$getMoney = $getMoney - $numberOfReceivedNote * $moneyArray[$i];
echo ("Số tờ tiền {$moneyArray[$i]}: $numberOfReceivedNote \n");
if ($getMoney == 0) {
break;
}
}
}
$php ruttien.php
Số tờ tiền 500000: 2
Số tờ tiền 200000: 2
Số tờ tiền 100000: 1
Tránh bị lằm tưởng đang Ddos
Cái này thì mình cũng có gặp mấy lần với mạng ở công ty. Vào search Google còn bị bắt nhập captcha
Việc chặn truy cập đó là cách thức mà website kia hoạt động rồi, chắc bạn chỉ có cách liên hệ với họ để được hỗ trợ thôi.
Còn ngoài ra một số cách khác mà bạn có thể đề xuất để công ty cải thiện hơn, như thuê thêm địa chỉ IP tĩnh từ nhà mạng, hoặc thuê thêm đường truyền với IP khác từ nhà mạng (thay vì dùng 1 đường truyền thật mạnh thì dùng 2, 3 đường truyền ở mức trung bình chẳng hạn). Mục đích là để kết nối đi ra ngoài internet của các máy tính trong công ty sẽ từ nhiều IP khác nhau, chứ không phải duy nhất 1 IP cố định nữa.
Còn không thì có cách tiêu cực hơn là dùng proxy, dùng VPN nhưng đây chắc là cách không một công ty nào khuyến khích rồi
Kỹ năng gì là khó nhất trong Front end, và điều gì để phân biệt giữa 1 senior và 1 tech lead về front end
Để có thể theo đuổi con đường trở thành Frontend Developer, thì em sẽ cần rất nhiều kỹ năng, từ kiến thức về lập trình cơ bản, cách thức mà một ứng dụng web được vận hành, các kiến thức về source code management (git, github), cho đến các kiến thức chuyên môn như HTML, CSS, Javascript. HTML thì cần nắm được cả những chức năng mới của HTML5, CSS thì cần biết cách vận dụng các điểm mới của CSS3, còn Javascript thì giờ là thời đại của Single Page Application, của Isomorphic Application, thế nên một nền tảng kiến thức vững chắc về Javascript là cực kỳ cần thiết. Em cần phải học thật sâu về Javascript, nắm vững các framework/library như ReactJS hay VueJS ...
Nhìn chung là có rất nhiều cái khó, nói về cái nào khó nhất thì cũng tùy từng người, ví dụ như với bạn A thì cái khó nhất là ngồi code responsive design, cho nhiều loại trình duyệt, với nhiều kích cỡ màn hình khác nhau, nhưng vẫn phải đảm bảo UI/UX thật tốt. Còn với bạn B thì cái khó nhất là cách tổ chức và vận hành các components của React, Vue ...
Nhìn chung em cứ cố gắng trải nghiệm thật nhiều, thì sẽ dần dần nhận ra được những cái hay, cái khó, hay những điểm mạnh, yếu của mình
Còn về câu hỏi thứ 2 thì thật sự mấy khái niệm này cũng không được rõ ràng, và định nghĩa của nó còn tùy thuộc vào từng công ty, từng môi trường khác nhau. Có bạn được đánh giá là Senior Developer ở công ty này nhưng khi sang công ty khác thì chỉ được ghi nhận là Middle Developer. Có bạn là technical leader ở thời điểm này nhưng lại không phải ở thời điểm khác.
Nếu trong một công ty có định nghĩa sự tồn tại độc lập của cả 2 vị trí, thì thông thường, Senior Developer thì giống như cái tên của nó, dùng để chỉ những lập trình viên lâu năm, có nhiều kinh nghiệm về một lĩnh vực nào đó. Còn Technical Leader là chỉ người chịu trách nhiệm, về kỹ thuật, của một bộ phận, hay một dự án nào đó. Tức một cái là để chỉ năng lực của lập trình viên, còn một cái là để chỉ vai trò của lập trình viên trong dự án, hay trong tổ chức. Technical Leader thường là người sẽ cần phải đưa ra những quyết định cuối cùng về các giải pháp về vấn đề kỹ thuật cho team/dự án, thế nên đương nhiên cũng sẽ yêu cầu năng lực kỹ thuật cao, cũng như hiểu biết rộng (có thể về cả những vấn đề không phải là chuyên môn chính của mình), và do đó họ cũng là (hoặc được đánh giá cao hơn là) senior developer. Ví dụ như một dự án có thể có nhiều senior developer nhưng sẽ chỉ có một hoặc vài Technical Leader.
Nhờ mọi người giúp - Lỗi cài đặt package với composer
Bạn check xem file composer.lock
đã được commit vào trong source code chưa, và trên production thì trong source code của bạn, trước khi chạy lệnh composer install
thì có file composer.lock
không vậy?
Công nghệ được sử dụng trong Viblo là gì các bác!
Mình hay dùng BuiltWith hơn Có vẻ check ra được nhiều thứ hơn một chút so với Wappalyzer này Nhưng phần lớn cũng là giống nhau.
https://builtwith.com/viblo.asia
Tuy nhiên thực tế thì những công nghệ mà BuiltWith hay Wappalyzer detect ra được cũng chỉ là một phần nhỏ thôi, vẫn còn rất nhiều thứ đằng sau cả hệ thống nữa
Khác biệt giữa C/C++/C# là gì vậy ạ ?
Để mà phân tích sâu về sự khác biệt thì có lẽ là dài lắm, bởi chúng vốn là 3 ngôn ngữ lập trình khác nhau. Thế nên anh điểm qua một vài điểm chính, để em có thể hình dung được dễ dàng nhé:
C
- Là ngôn ngữ lập trình bậc thấp
- Performance cực kỳ tốt
- Được tạo ra những năm 1970, gắn liền với sự ra đời của hệ điều hành Unix
- Được sử dụng để phát triển hầu hết các thành phần của hệ điều hành Unix thời kỳ đầu. Cũng được sử dụng để viết nhân Linux nữa.
- Được sử dụng để viết nên compiler của rất nhiều ngôn ngữ lập trình bậc cao khác, như Ruby, PHP, Python ...
- Rất nhiều ngôn ngữ lập trình bậc cao khác kế thừa nhiều tư tưởng, cú pháp của C. Em có thể xem danh sách ở đây https://en.wikipedia.org/wiki/List_of_C-family_programming_languages
C++
- Một phiên bản mở rộng từ
C
, phát đưa vào concept vềClass
cũng như bổ sung thêm một vài concept về lập trình hướng đối tượng khác C++
được thiết kế để có nhiều tính năng backward compatible vớiC
. Tức nhiều chương trìnhC
có thể chạy với chương trình biên dịch củaC++
. Đương nhiên điều ngược lại là không thể.C++
nằm đâu đó giữa ngôn ngữ lập trình bậc thấp nhưC
với ngôn ngữ lập trình bậc cao nhưC#
(hay Java, Ruby, Python ...)- Nhìn chung thì
C++
cân đối được giữa tốc độ (chậm hơn chút xíu so vớiC
nhưng nhanh hơn rất những ngôn ngữ lập trình bậc cao khác) và tính hướng đối tượng, dễ sử dụng (dễ dùng hơn C, nhưng có phần kém hơn các ngôn ngữ lập trình bậc cao khác). C++
cũng được sử dụng khá rộng rãi để built các ứng dụng hệ thống, hay compiler cho các ngôn ngữ lập trình khác, hay phát triển các hệ thống nhúng. Nhìn chung là những thứ đòi hỏi performance phải thật tốt. Ví dụ nhưnodejs
được build từ C++, hay các ứng dụng như Firefox, Chrome, Mysql, Postgres ... và rất rất nhiều sản phẩm khác.
C#
- Được Microsoft phát triển vào những năm 2000, như là một phần của
.NET
framework. Do đóC#
vốn rất phổ biến khi phát triển các ứng dụng cho nền tảng Windows, hay phát triển ứng dụng web trên Windows, và kém phổ biến hơn trên các hệ điều hành khác. C#
là một ngôn ngữ lập trình bậc cao, hướng đối tượng. Mặc dù cũng mang chữ C trong mình, nhưngC#
khác biệt rất lớn so vớiC
vàC++
. Những điểm nó khác với 2 ngôn ngữ trên nhiều hơn rất nhiều so với những điểm giống Chứ không nhưC
vàC++
khá gần gũi với nhau.
Hỏi về source code của những ông lớn công nghệ.
Bạn có thể lên Github để follow những organization của các ông lớn đó, đồng thời tham khảo các repo Open Source của họ xem sao:
Ví dụ:
- Facebook: https://github.com/facebook
- Facebook Research: https://github.com/facebookresearch
- Google: https://github.com/google
- Google Research: https://github.com/google-research
- Microsoft: https://github.com/microsoft
- Amazone: https://github.com/amzn
- Amazone Web Service: https://github.com/aws/
- ...
Nhưng mình nghĩ ở level Fresher PHP thì bạn cũng chưa cần phải tìm tòi sâu như vậy làm gì đâu. Trước mắt tập trung vào code một framework PHP nào đó là được, ví dụ như Laravel chẳng hạn https://github.com/laravel/framework
Tại sao từ Eloquent có thể call được function định nghĩa cho query builder?
Trước đây cũng có một bài viết rất hay về việc sử dụng Magic Methods trong Laravel trên Viblo, trong đó có một phần nhắc đến mối quan hệ giữa Eloquent và Query Builder, bạn có thể xem thêm tại đây để hiểu được rõ bản chất của vấn đề:
https://viblo.asia/p/laravel-and-php-magic-methods-157G5o7ORAje#_eloquent-model-and-query-builder-5
Hiểu đơn giản là Laravel đã sử dụng Magic Methods để có thể giúp gọi các hàm của Query Builder bên trong Eloquent, hay Query Builder thực tế được sử dụng như một tầng ở bên dưới Eloquent, giúp cho Eloquent có thể thao tác đến cơ sở dữ liệu.