{"data":[{"id":93078,"title":"Bookmaker 2222BET","slug":"AoJe8zXr41j","url":"https:\/\/viblo.asia\/p\/bookmaker-2222bet-AoJe8zXr41j","user_id":186439,"moderation":"pending","transliterated":"bookmaker-2222bet","contents_short":"2222BET delivers a modern entertainment hub that blends system efficiency with diverse gaming content, allowing players to explore multiple betting opportunities within a secure and well-balanced platform.\nWebsite: https:\/\/2222bet.capital\/\nAdd: House 68, Road 8, Bashundhara R\/A, Dhaka 1229, Bangladesh\nPhone: (+) 880 1818 492 716\nEmail: contact@2222bet.capital\nHastags: #2222bet #2222betcapital #...","contents":"2222BET delivers a modern entertainment hub that blends system efficiency with diverse gaming content, allowing players to explore multiple betting opportunities within a secure and well-balanced platform.\nWebsite: https:\/\/2222bet.capital\/\nAdd: House 68, Road 8, Bashundhara R\/A, Dhaka 1229, Bangladesh\nPhone: (+) 880 1818 492 716\nEmail: contact@2222bet.capital\nHastags: #2222bet #2222betcapital #casino #2222bet_register #2222bet_login\nhttps:\/\/x.com\/2222betcapital\nhttps:\/\/www.youtube.com\/@2222betcapital\/about\nhttps:\/\/www.pinterest.com\/2222betcapital\/\nhttps:\/\/gravatar.com\/2222betcapital\nhttps:\/\/500px.com\/p\/2222betcapital\nhttps:\/\/www.twitch.tv\/2222betcapital1\/about\nhttps:\/\/about.me\/betcapital\nhttps:\/\/allmyfaves.com\/2222betcapital\nhttps:\/\/www.designspiration.com\/thanhlam3082002\/saves\/\nhttps:\/\/www.gta5-mods.com\/users\/2222betcapital","published_at":"2026-04-19T18:36:54.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T18:37:01.000000Z","edited_at":"2026-04-19T18:36:53.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":0,"points":0,"views_count":1,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/9870dcde-7cdb-4dab-88aa-31b41de4df22.png","user":{"data":{"id":186439,"url":"https:\/\/viblo.asia\/u\/2222betcapital","avatar":"dfefecf1-31a1-47be-b2cc-675f0f513d79.jpg","name":"Bookmaker BET","username":"2222betcapital","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"finance","name":"Finance"}]},"commentators":{"data":[]}},{"id":93077,"title":"Tu\u1ea7n 8: Khi vi\u1ec7c hi\u1ec3u th\u1ea5t b\u1ea1i tr\u01b0\u1edbc c\u1ea3 c\u00e2u tr\u1ea3 l\u1eddi","slug":"k74a9gKl4eO","url":"https:\/\/viblo.asia\/p\/tuan-8-khi-viec-hieu-that-bai-truoc-ca-cau-tra-loi-k74a9gKl4eO","user_id":185187,"moderation":null,"transliterated":"tuan-8-khi-viec-hieu-that-bai-truoc-ca-cau-tra-loi","contents_short":"Tu\u1ea7n n\u00e0y, tr\u1ecdng t\u00e2m kh\u00f4ng c\u00f2n l\u00e0 c\u00e2u tr\u1ea3 l\u1eddi.\n\nM\u00e0 l\u00e0 m\u1ed9t \u0111i\u1ec1u x\u1ea3y ra tr\u01b0\u1edbc \u0111\u00f3.\n\nQuan s\u00e1t\n\nNhi\u1ec1u ng\u01b0\u1eddi kh\u00f4ng g\u1eb7p kh\u00f3 \u1edf ph\u1ea7n \u0111\u00e1p \u00e1n.\n\nM\u00e0 g\u1eb7p kh\u00f3 khi:\n\nHi\u1ec3u sai c\u00e2u h\u1ecfi\n\nNh\u1ea7m \u00fd ngh\u0129a\n\nThi\u1ebfu b\u1ed1i c\u1ea3nh\n\nV\u1ea5n \u0111\u1ec1\n\nNgay c\u1ea3 khi l\u1eddi gi\u1ea3i r\u00f5 r\u00e0ng,vi\u1ec7c hi\u1ec3u v\u1eabn c\u00f3 th\u1ec3 th\u1ea5t b\u1ea1i.\n\n\u0110i\u1ec1u thay \u0111\u1ed5i\n\nThay v\u00ec ch\u1ec9 c\u1ea3i thi\u1ec7n c\u00e2u tr\u1ea3 l\u1eddi,ch\u00fang t\u00f4i b\u1eaft \u0111\u1ea7u:\n\nL\u00e0m r\u00f5 c\u00e2u h\u1ecfi\n\nGi\u1ea3m s\u1ef1 m\u01a1 h\u1ed3\n\nCung c\u1ea5p b\u1ed1i c\u1ea3nh tr\u01b0\u1edbc\n\n\u0110i\u1ec1u r...","contents":"Tu\u1ea7n n\u00e0y, tr\u1ecdng t\u00e2m kh\u00f4ng c\u00f2n l\u00e0 c\u00e2u tr\u1ea3 l\u1eddi.\n\nM\u00e0 l\u00e0 m\u1ed9t \u0111i\u1ec1u x\u1ea3y ra tr\u01b0\u1edbc \u0111\u00f3.\n\nQuan s\u00e1t\n\nNhi\u1ec1u ng\u01b0\u1eddi kh\u00f4ng g\u1eb7p kh\u00f3 \u1edf ph\u1ea7n \u0111\u00e1p \u00e1n.\n\nM\u00e0 g\u1eb7p kh\u00f3 khi:\n\nHi\u1ec3u sai c\u00e2u h\u1ecfi\n\nNh\u1ea7m \u00fd ngh\u0129a\n\nThi\u1ebfu b\u1ed1i c\u1ea3nh\n\nV\u1ea5n \u0111\u1ec1\n\nNgay c\u1ea3 khi l\u1eddi gi\u1ea3i r\u00f5 r\u00e0ng,vi\u1ec7c hi\u1ec3u v\u1eabn c\u00f3 th\u1ec3 th\u1ea5t b\u1ea1i.\n\n\u0110i\u1ec1u thay \u0111\u1ed5i\n\nThay v\u00ec ch\u1ec9 c\u1ea3i thi\u1ec7n c\u00e2u tr\u1ea3 l\u1eddi,ch\u00fang t\u00f4i b\u1eaft \u0111\u1ea7u:\n\nL\u00e0m r\u00f5 c\u00e2u h\u1ecfi\n\nGi\u1ea3m s\u1ef1 m\u01a1 h\u1ed3\n\nCung c\u1ea5p b\u1ed1i c\u1ea3nh tr\u01b0\u1edbc\n\n\u0110i\u1ec1u r\u00fat ra\n\nHi\u1ec3u kh\u00f4ng ch\u1ec9 l\u00e0 th\u00f4ng tin.\n\nM\u00e0 l\u00e0 c\u00e1ch th\u00f4ng tin \u0111\u01b0\u1ee3c ti\u1ebfp nh\u1eadn.\n\nK\u1ebft lu\u1eadn\n\n\u0110\u00f4i khi, v\u1ea5n \u0111\u1ec1 kh\u00f4ng n\u1eb1m \u1edf vi\u1ec7c gi\u1ea3i th\u00edch.\n\nM\u00e0 n\u1eb1m \u1edf vi\u1ec7c hi\u1ec3u \u0111\u00fang ngay t\u1eeb \u0111\u1ea7u.","published_at":"2026-04-19T18:19:11.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T18:20:02.000000Z","edited_at":"2026-04-19T18:13:33.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":0,"points":0,"views_count":1,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/997305d2-3dfb-42db-bc17-5c629d3b41fd.png","user":{"data":{"id":185187,"url":"https:\/\/viblo.asia\/u\/Baintcomputer","avatar":"ae20cdbf-1220-4e0a-9547-115436cb7034.png","name":"BaintComputer","username":"Baintcomputer","followers_count":1,"reputation":11,"posts_count":2,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"activedirectory","name":"#activedirectory"}]},"commentators":{"data":[]}},{"id":93076,"title":"RATUVIP dikenal sebagai link alternatif yang memudahkan akses ke situs slot gacor hari ini tanpa ribet","slug":"wlVmRwYm45Z","url":"https:\/\/viblo.asia\/p\/ratuvip-dikenal-sebagai-link-alternatif-yang-memudahkan-akses-ke-situs-slot-gacor-hari-ini-tanpa-ribet-wlVmRwYm45Z","user_id":186435,"moderation":"pending","transliterated":"ratuvip-dikenal-sebagai-link-alternatif-yang-memudahkan-akses-ke-situs-slot-gacor-hari-ini-tanpa-ribet","contents_short":"Di tengah derasnya arus dunia digital, para player sejati selalu mencari tempat terbaik untuk menguji insting dan peruntungan mereka. Tahun 2026 menghadirkan satu nama yang makin sering dibicarakan di kalangan pecinta slot online: RATUVIP. Bukan sekadar platform biasa, RATUVIP tampil sebagai gerbang utama menuju pengalaman bermain yang lebih praktis, cepat, dan tentunya menguntungkan.\n\nRATUVIP ...","contents":"Di tengah derasnya arus dunia digital, para player sejati selalu mencari tempat terbaik untuk menguji insting dan peruntungan mereka. Tahun 2026 menghadirkan satu nama yang makin sering dibicarakan di kalangan pecinta slot online: RATUVIP. Bukan sekadar platform biasa, RATUVIP tampil sebagai gerbang utama menuju pengalaman bermain yang lebih praktis, cepat, dan tentunya menguntungkan.\n\n[RATUVIP](https:\/\/hoteldelsolcancun.com\/) dikenal sebagai link alternatif yang memudahkan akses ke situs slot gacor hari ini tanpa ribet. Bagi player yang mengutamakan kecepatan dan stabilitas, ini jadi solusi ideal\u2014cukup satu klik, langsung masuk ke arena permainan tanpa hambatan. Tidak perlu lagi khawatir soal link terblokir atau akses yang lambat, karena RATUVIP selalu update dan siap digunakan kapan saja.\n\nYang membuat RATUVIP berbeda adalah konsistensinya dalam menghadirkan game-game dengan tingkat kemenangan tinggi. Istilah \u201cslot gacor\u201d bukan sekadar gimmick di sini\u2014banyak player merasakan sendiri sensasi kemenangan yang lebih sering datang. Ditambah lagi dengan tampilan yang user-friendly, bahkan pemula pun bisa langsung nyaman saat bermain.\n\nDari sisi keamanan, RATUVIP juga tidak main-main. Sistemnya dirancang untuk melindungi data dan transaksi para pengguna, sehingga player bisa fokus bermain tanpa rasa khawatir. Inilah yang menjadikan RATUVIP semakin dipercaya dan terus berkembang sebagai pilihan utama di tahun 2026.\n\nSingkatnya, jika kamu seorang player yang ingin pengalaman bermain slot yang lebih simpel, cepat, dan berpotensi cuan, RATUVIP adalah jawabannya. Dunia slot terus berubah, tapi satu hal yang pasti\u2014player cerdas selalu tahu ke mana harus melangkah.","published_at":"2026-04-19T17:01:45.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:02:02.000000Z","edited_at":"2026-04-19T17:01:06.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":1,"points":0,"views_count":1,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/3168b1b7-82fa-47cb-a734-0057d05e2280.png","user":{"data":{"id":186435,"url":"https:\/\/viblo.asia\/u\/ratuvip1","avatar":"d2921603-8856-4c3d-84ef-be76d3fcec4b.png","name":"Junior Emely","username":"ratuvip1","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"slot","name":"slot"},{"slug":"ratuvip","name":"ratuvip"},{"slug":"slotgacorhariini","name":"slotgacorhariini"},{"slug":"situsslotgacor","name":"situsslotgacor"},{"slug":"slotonline","name":"slotonline"}]},"commentators":{"data":[]}},{"id":93075,"title":"taptapvnlive","slug":"XRJ8R0ZqVGq","url":"https:\/\/viblo.asia\/p\/taptapvnlive-XRJ8R0ZqVGq","user_id":186433,"moderation":"pending","transliterated":"taptapvnlive","contents_short":"Taptap hi\u1ec7n \u0111ang l\u00e0 c\u00e1i t\u00ean thu h\u00fat s\u1ef1 ch\u00fa \u00fd m\u1ea1nh m\u1ebd t\u1eeb ph\u00eda nh\u1eefng ng\u01b0\u1eddi \u0111am m\u00ea c\u00e1 c\u01b0\u1ee3c. Th\u01b0\u01a1ng hi\u1ec7u v\u1eadn h\u00e0nh d\u1ef1a tr\u00ean c\u00e1c ti\u00eau chu\u1ea9n an to\u00e0n th\u00f4ng tin nghi\u00eam ng\u1eb7t nh\u1eb1m b\u1ea3o v\u1ec7 quy\u1ec1n l\u1ee3i c\u1ee7a h\u1ed9i vi\u00ean. B\u1ea1n nhanh ch\u00f3ng th\u1ef1c hi\u1ec7n vi\u1ec7c n\u1ea1p ti\u1ec1n v\u00e0o t\u00e0i kho\u1ea3n \u0111\u1ec3 b\u1eaft \u0111\u1ea7u tr\u1ea3i nghi\u1ec7m nh\u1eefng s\u1ea3nh ch\u01a1i th\u00fa v\u1ecb b\u1eadc nh\u1ea5t.\nWebsite: https:\/\/taptapvn.live\/\n\u0110i\u1ec7n tho\u1ea1i: 0887382923\nEmail: taptapvnlive@gmail.com\n\u0110\u1ecb...","contents":"Taptap hi\u1ec7n \u0111ang l\u00e0 c\u00e1i t\u00ean thu h\u00fat s\u1ef1 ch\u00fa \u00fd m\u1ea1nh m\u1ebd t\u1eeb ph\u00eda nh\u1eefng ng\u01b0\u1eddi \u0111am m\u00ea c\u00e1 c\u01b0\u1ee3c. Th\u01b0\u01a1ng hi\u1ec7u v\u1eadn h\u00e0nh d\u1ef1a tr\u00ean c\u00e1c ti\u00eau chu\u1ea9n an to\u00e0n th\u00f4ng tin nghi\u00eam ng\u1eb7t nh\u1eb1m b\u1ea3o v\u1ec7 quy\u1ec1n l\u1ee3i c\u1ee7a h\u1ed9i vi\u00ean. B\u1ea1n nhanh ch\u00f3ng th\u1ef1c hi\u1ec7n vi\u1ec7c n\u1ea1p ti\u1ec1n v\u00e0o t\u00e0i kho\u1ea3n \u0111\u1ec3 b\u1eaft \u0111\u1ea7u tr\u1ea3i nghi\u1ec7m nh\u1eefng s\u1ea3nh ch\u01a1i th\u00fa v\u1ecb b\u1eadc nh\u1ea5t.\nWebsite: https:\/\/taptapvn.live\/\n\u0110i\u1ec7n tho\u1ea1i: 0887382923\nEmail: taptapvnlive@gmail.com\n\u0110\u1ecba ch\u1ec9: 36\/114 L\u00ea Th\u1ecb H\u1ed3ng, TP. H\u1ed3 Ch\u00ed Minh\nhttps:\/\/taptapvn.live\/\nhttps:\/\/x.com\/taptapvnlive\nhttps:\/\/www.pinterest.com\/taptapvnlive\/\nhttps:\/\/www.tumblr.com\/taptapvnlive\nhttps:\/\/www.youtube.com\/taptapvnlive\nhttps:\/\/vi.gravatar.com\/taptapvnlive\nhttps:\/\/500px.com\/p\/taptapvnlive\nhttps:\/\/forum.m5stack.com\/user\/taptapvnlive\nhttps:\/\/activepages.com.au\/profile\/taptapvnlive\nhttps:\/\/boldomatic.com\/view\/writer\/taptapvnlive\nhttps:\/\/triumph.srivenkateshwaraa.edu.in\/profile\/taptapvnlive\nhttps:\/\/www.shippingexplorer.net\/en\/user\/taptapvnlive\/278581\nhttps:\/\/gitlab.haskell.org\/taptapvnlive\nhttps:\/\/3dtoday.ru\/blogs\/taptapvnlive\nhttps:\/\/www.babelcube.com\/user\/taptapvn-live\nhttps:\/\/www.collcard.com\/taptapvnlive\nhttps:\/\/www.zubersoft.com\/mobilesheets\/forum\/user-134555.html\nhttps:\/\/taittsuu.com\/users\/taptapvnlive\nhttps:\/\/pxhere.com\/en\/photographer\/4986616\nhttps:\/\/gesoten.com\/profile\/detail\/12746356\nhttps:\/\/connect.gt\/user\/taptapvnlive\nhttps:\/\/participa.aytojaen.es\/profiles\/taptapvnlive\/activity\nhttps:\/\/routinehub.co\/user\/taptapvnlive\nhttps:\/\/zimexapp.co.zw\/taptapvnlive\nhttps:\/\/pixelfed.uno\/taptapvnlive\nhttps:\/\/www.jointcorners.com\/taptapvnlive\nhttps:\/\/naijamatta.com\/taptapvnlive\nhttps:\/\/medibang.com\/author\/28164865\/\nhttps:\/\/forum.aigato.vn\/user\/taptapvnlive\nhttps:\/\/www.elephantjournal.com\/profile\/taptapvnlive\/\nhttps:\/\/malt-orden.info\/userinfo.php?uid=458051\nhttps:\/\/www.iglinks.io\/rna38634-jbl?preview=true\nbio.site\/taptapvnlive\nhttps:\/\/heylink.me\/taptapvnlive\/\nhttps:\/\/www.hostboard.com\/forums\/members\/taptapvnlive.html\nhttps:\/\/undrtone.com\/taptapvnlive\nhttps:\/\/disqus.com\/by\/taptapvnlive\/about\/\nhttps:\/\/www.fundable.com\/taptapvn-live\nhttps:\/\/bbs.mofang.com.tw\/home.php?mod=space&uid=2465195\nhttps:\/\/londonchinese.com\/home.php?mod=space&uid=620431&do=profile\nhttps:\/\/ekcochat.com\/taptapvnlive\nhttps:\/\/copynotes.be\/shift4me\/forum\/user-52075.html\nhttps:\/\/www.plotterusati.it\/user\/taptapvn-live\nhttps:\/\/findaspring.org\/members\/taptapvnlive\/\nhttps:\/\/formulamasa.com\/elearning\/members\/taptapvnlive\/?v=96b62e1dce57\nhttps:\/\/golosknig.com\/profile\/taptapvnlive\/\nhttps:\/\/www.minecraft-servers-list.org\/details\/taptapvnlive\/\nhttps:\/\/jobs.lajobsportal.org\/profiles\/8169782-taptapvn-live\nhttps:\/\/secondstreet.ru\/profile\/taptapvnlive\/\nhttps:\/\/nhattao.com\/members\/taptapvnlive.6954448\/\nhttps:\/\/community.m5stack.com\/user\/taptapvnlive\nhttps:\/\/jobs.windomnews.com\/profiles\/8169787-taptapvn-live","published_at":"2026-04-19T16:51:48.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T16:52:01.000000Z","edited_at":"2026-04-19T16:51:48.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":2,"points":0,"views_count":1,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/45b97fe5-8e76-443e-a0a4-a6fabb080471.png","user":{"data":{"id":186433,"url":"https:\/\/viblo.asia\/u\/taptapvnlive","avatar":"29a3a6aa-b0c1-4ddd-9903-b7de750e4852.jpeg","name":"taptapvn live","username":"taptapvnlive","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"abstract-class","name":"Abstract Class"},{"slug":"androidfragment","name":"AndroidFragment"},{"slug":"app-trac-nghiem","name":"app tr\u1eafc nghi\u1ec7m"},{"slug":"bsd","name":"BSD"},{"slug":"sharpfutureofgaming","name":"sharpFutureOfGaming"}]},"commentators":{"data":[]}},{"id":93072,"title":"[Series Git Th\u1ef1c Chi\u1ebfn] B\u00e0i 1: .gitignore - V\u1ec7 s\u0129 th\u1ea7m l\u1eb7ng b\u1ea3o v\u1ec7 d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n kh\u1ecfi \"r\u00e1c\" v\u00e0 \"ph\u1ed1t\"","slug":"37LdegQRVov","url":"https:\/\/viblo.asia\/p\/series-git-thuc-chien-bai-1-gitignore-ve-si-tham-lang-bao-ve-du-an-cua-ban-khoi-rac-va-phot-37LdegQRVov","user_id":182653,"moderation":null,"transliterated":"series-git-thuc-chien-bai-1-gitignore-ve-si-tham-lang-bao-ve-du-an-cua-ban-khoi-rac-va-phot","contents_short":"Xin ch\u00e0o anh em c\u1ed9ng \u0111\u1ed3ng Viblo!\n\nNh\u1edb l\u1ea1i ng\u00e0y \u0111\u1ea7u m\u1edbi ch\u1eadp ch\u1eefng b\u01b0\u1edbc v\u00e0o ngh\u1ec1, ch\u1eafc h\u1eb3n kh\u00f4ng \u00edt anh em \u1edf \u0111\u00e2y t\u1eebng ng\u00e2y th\u01a1 g\u00f5 git add . r\u1ed3i \u0111\u1ea9y nguy\u00ean c\u00e1i th\u01b0 m\u1ee5c node_modules hay th\u01b0 m\u1ee5c \/vendor n\u1eb7ng v\u00e0i tr\u0103m MB l\u00ean GitHub \u0111\u00fang kh\u00f4ng? Nh\u1eb9 th\u00ec ng\u1ed3i \u0111\u1ee3i push m\u1ecfi c\u1ed5, n\u1eb7ng th\u00ec b\u1ecb lead \"g\u00f5 \u0111\u1ea7u\" v\u00ec l\u00e0m ph\u00ecnh to repo.\n\nT\u1ec7 h\u01a1n n\u1eefa, \u0111\u00e3 c\u00f3 ai t\u1eebng v\u00f4 t\u00ecnh push c\u1ea3 file .env ch\u1ee9a m\u1eadt kh\u1ea9u Database hay ...","contents":"Xin ch\u00e0o anh em c\u1ed9ng \u0111\u1ed3ng Viblo!\n\nNh\u1edb l\u1ea1i ng\u00e0y \u0111\u1ea7u m\u1edbi ch\u1eadp ch\u1eefng b\u01b0\u1edbc v\u00e0o ngh\u1ec1, ch\u1eafc h\u1eb3n kh\u00f4ng \u00edt anh em \u1edf \u0111\u00e2y t\u1eebng ng\u00e2y th\u01a1 g\u00f5 `git add .` r\u1ed3i \u0111\u1ea9y nguy\u00ean c\u00e1i th\u01b0 m\u1ee5c `node_modules` hay th\u01b0 m\u1ee5c `\/vendor` n\u1eb7ng v\u00e0i tr\u0103m MB l\u00ean GitHub \u0111\u00fang kh\u00f4ng? Nh\u1eb9 th\u00ec ng\u1ed3i \u0111\u1ee3i push m\u1ecfi c\u1ed5, n\u1eb7ng th\u00ec b\u1ecb lead \"g\u00f5 \u0111\u1ea7u\" v\u00ec l\u00e0m ph\u00ecnh to repo.\n\nT\u1ec7 h\u01a1n n\u1eefa, \u0111\u00e3 c\u00f3 ai t\u1eebng v\u00f4 t\u00ecnh push c\u1ea3 file `.env` ch\u1ee9a m\u1eadt kh\u1ea9u Database hay Secret Key l\u00ean public repo ch\u01b0a? \u0110\u00eam \u0111\u00f3 ch\u1eafc ch\u1eafn l\u00e0 m\u1ed9t \u0111\u00eam m\u1ea5t ng\u1ee7 \u0111\u1ec3 \u0111\u1ed5i pass to\u00e0n b\u1ed9 h\u1ec7 th\u1ed1ng.\n\n\u0110\u1ec3 nh\u1eefng c\u00e2u chuy\u1ec7n \"t\u00e2m linh\" tr\u00ean kh\u00f4ng x\u1ea3y ra, b\u00e0i h\u1ecdc \u0111\u1ea7u ti\u00ean v\u00e0 quan tr\u1ecdng nh\u1ea5t tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u b\u1ea5t k\u1ef3 d\u1ef1 \u00e1n n\u00e0o kh\u00f4ng ph\u1ea3i l\u00e0 commit code ra sao, m\u00e0 l\u00e0 h\u1ecdc c\u00e1ch ng\u00f3 l\u01a1 nh\u1eefng th\u1ee9 kh\u00f4ng c\u1ea7n thi\u1ebft. \u0110\u00f3 ch\u00ednh l\u00e0 l\u00fac `.gitignore` t\u1ecfa s\u00e1ng.\n\n### 1. .gitignore l\u00e0 g\u00ec?\n\nN\u00f3i m\u1ed9t c\u00e1ch d\u00e2n d\u00e3, `.gitignore` l\u00e0 m\u1ed9t file text \u0111\u01a1n gi\u1ea3n n\u1eb1m \u1edf th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n. N\u00f3 \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t \"danh s\u00e1ch \u0111en\" (black-list). B\u1ea1n ghi t\u00ean file ho\u1eb7c th\u01b0 m\u1ee5c n\u00e0o v\u00e0o \u0111\u00e2y, Git s\u1ebd t\u1ef1 \u0111\u1ed9ng \"b\u1ecbt m\u1eaft l\u01a1 \u0111i\" v\u00e0 tuy\u1ec7t \u0111\u1ed1i kh\u00f4ng track s\u1ef1 thay \u0111\u1ed5i c\u1ee7a ch\u00fang.\n\nT\u1ea1i sao ch\u00fang ta c\u1ea7n n\u00f3?\n\n* B\u1ea3o m\u1eadt: Kh\u00f4ng bao gi\u1edd \u0111\u01b0a file c\u1ea5u h\u00ecnh ch\u1ee9a th\u00f4ng tin nh\u1ea1y c\u1ea3m (`.env`, `config.json`) l\u00ean repo.\n* T\u1ed1i \u01b0u dung l\u01b0\u1ee3ng: B\u1ecf qua c\u00e1c th\u01b0 m\u1ee5c ch\u1ee9a th\u01b0 vi\u1ec7n do package manager t\u1ea1o ra (nh\u01b0 `node_modules` c\u1ee7a Node.js hay `vendor` c\u1ee7a Laravel\/PHP) v\u00ec ng\u01b0\u1eddi kh\u00e1c clone v\u1ec1 ch\u1ec9 c\u1ea7n ch\u1ea1y l\u1ec7nh install l\u00e0 xong.\n* S\u1ea1ch s\u1ebd: Lo\u1ea1i b\u1ecf c\u00e1c file t\u1ea1m do H\u1ec7 \u0111i\u1ec1u h\u00e0nh ho\u1eb7c IDE sinh ra (`.DS_Store` c\u1ee7a macOS, `.idea`, `.vscode`).\n\n### 2. C\u00fa ph\u00e1p \"Th\u1ea7n ch\u00fa\" trong .gitignore\n\nVi\u1ebft .gitignore r\u1ea5t d\u1ec5, b\u1ea1n ch\u1ec9 c\u1ea7n nh\u1edb v\u00e0i quy t\u1eafc sau:\n\n* `*`: \u0110\u1ea1i di\u1ec7n cho chu\u1ed7i k\u00fd t\u1ef1 b\u1ea5t k\u1ef3 (vd: `*.log` s\u1ebd b\u1ecf qua t\u1ea5t c\u1ea3 c\u00e1c file c\u00f3 \u0111u\u00f4i log).\n* `\/`: D\u00f9ng \u0111\u1ec3 ch\u1ec9 \u0111\u1ecbnh th\u01b0 m\u1ee5c (vd: `node_modules\/`).\n* `!`: D\u00f9ng \u0111\u1ec3 lo\u1ea1i tr\u1eeb m\u1ed9t file kh\u1ecfi quy t\u1eafc ignore tr\u01b0\u1edbc \u0111\u00f3 (vd: ignore h\u1ebft file `.txt` nh\u01b0ng ch\u1eeba l\u1ea1i `readme.txt`).\n\n### 3. Demo: File .gitignore ti\u00eau chu\u1ea9n cho d\u00e2n Backend\n\nGi\u1ea3 s\u1eed ch\u00fang ta \u0111ang setup m\u1ed9t d\u1ef1 \u00e1n m\u1edbi. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t template `.gitignore` th\u1ef1c chi\u1ebfn m\u00e0 t\u00f4i lu\u00f4n d\u00f9ng:\n\n```\n# 1. B\u1ecf qua c\u00e1c th\u01b0 vi\u1ec7n c\u1ee7a b\u00ean th\u1ee9 3 (Tr\u00e1nh l\u00e0m n\u1eb7ng repo)\n\/node_modules\/\n\/vendor\/\n\n# 2. B\u1ecf qua c\u00e1c file m\u00f4i tr\u01b0\u1eddng (C\u1ef0C K\u1ef2 QUAN TR\u1eccNG - B\u1ea3o m\u1eadt)\n.env\n.env.backup\n*.local\n\n# 3. B\u1ecf qua c\u00e1c file log do h\u1ec7 th\u1ed1ng sinh ra\n\/storage\/logs\/\n*.log\nnpm-debug.log*\n\n# 4. B\u1ecf qua c\u00e1c file c\u1ea5u h\u00ecnh c\u1ee7a Editor\/OS\n.vscode\/\n.idea\/\n.DS_Store\n\n# 5. Ignore t\u1ea5t c\u1ea3 file .zip nh\u01b0ng ngo\u1ea1i tr\u1eeb file release.zip\n*.zip\n!release.zip\n```\n\n### 4. Kinh nghi\u1ec7m x\u01b0\u01a1ng m\u00e1u (Senior's Tip)\n\nC\u00f3 m\u1ed9t t\u00ecnh hu\u1ed1ng 99% anh em s\u1ebd g\u1eb7p: \"Anh \u01a1i, em l\u1ee1 commit file `.env` l\u00ean Git r\u1ed3i, gi\u1edd em th\u00eam n\u00f3 v\u00e0o `.gitignore` nh\u01b0ng sao Git v\u1eabn track n\u00f3 th\u1ebf n\u00e0y???\"\n\nL\u00fd do: `.gitignore` ch\u1ec9 c\u00f3 t\u00e1c d\u1ee5ng v\u1edbi nh\u1eefng file ch\u01b0a t\u1eebng \u0111\u01b0\u1ee3c track (untracked). M\u1ed9t khi file \u0111\u00e3 b\u1ecb commit, vi\u1ec7c b\u1ea1n th\u00eam t\u00ean n\u00f3 v\u00e0o `.gitignore` l\u00e0 v\u00f4 ngh\u0129a.\n\nC\u00e1ch gi\u1ea3i quy\u1ebft (B\u1ecf t\u00fai ngay c\u00e2u l\u1ec7nh n\u00e0y):\nB\u1ea1n c\u1ea7n x\u00f3a file \u0111\u00f3 kh\u1ecfi b\u1ed9 nh\u1edb cache c\u1ee7a Git tr\u01b0\u1edbc, sau \u0111\u00f3 m\u1edbi commit l\u1ea1i.\n\n```\n# G\u1ee1 track file .env kh\u1ecfi Git (nh\u01b0ng v\u1eabn gi\u1eef l\u1ea1i file th\u1eadt trong m\u00e1y)\ngit rm --cached .env\n\n# N\u1ebfu l\u1ee1 commit c\u1ea3 1 th\u01b0 m\u1ee5c nh\u01b0 node_modules, h\u00e3y d\u00f9ng th\u00eam c\u1edd -r (recursive)\ngit rm -r --cached node_modules\/\n\n# Sau \u0111\u00f3 commit l\u1ea1i \u0111\u1ec3 update l\u1ecbch s\u1eed\ngit add .\ngit commit -m \"chore: remove .env and node_modules from tracking\"\n```\n\n### T\u1ed5ng k\u1ebft\n\nT\u1ea1o file `.gitignore` l\u00e0 vi\u1ec7c m\u1ea5t ch\u01b0a t\u1edbi 1 ph\u00fat, nh\u01b0ng n\u00f3 c\u1ee9u b\u1ea1n kh\u1ecfi h\u00e0ng t\u00e1 gi\u1edd \u0111\u1ed3ng h\u1ed3 fix bug, d\u1ecdn d\u1eb9p repo v\u00e0 gi\u1ea3i tr\u00ecnh v\u1edbi kh\u00e1ch h\u00e0ng v\u1ec1 v\u1ea5n \u0111\u1ec1 b\u1ea3o m\u1eadt. H\u00e3y t\u1ea1o th\u00f3i quen: Kh\u1edfi t\u1ea1o repo -> Vi\u1ebft .gitignore -> Code g\u00ec th\u00ec code.\n\nT\u00f2 m\u00f2 ch\u00fat nh\u00e9... \ud83d\udc40\nGi\u1edd d\u1ef1 \u00e1n \u0111\u00e3 s\u1ea1ch s\u1ebd an to\u00e0n r\u1ed3i, b\u1ea1n b\u1eaft tay v\u00e0o l\u00e0m t\u00ednh n\u0103ng m\u1edbi (Feature A). \u0110ang code d\u1edf tay th\u00ec s\u1ebfp \u0111\u1eadp b\u00e0n: \"Fix g\u1ea5p cho anh c\u00e1i bug tr\u00ean Production, ngay v\u00e0 lu\u00f4n!\".\n\nB\u1ea1n to\u00e1t m\u1ed3 h\u00f4i: Code Feature A \u0111ang vi\u1ebft d\u1edf, l\u1ed7i t\u00f9m lum, ch\u01b0a th\u1ec3 commit. Nh\u01b0ng kh\u00f4ng commit th\u00ec l\u00e0m sao chuy\u1ec3n sang code b\u1ea3n Production \u0111\u1ec3 fix bug b\u00e2y gi\u1edd?\n\n\u0110\u1eebng lo, Git c\u00f3 m\u1ed9t th\u1ee9 g\u1ecdi l\u00e0 \"Ph\u00e2n th\u00e2n chi thu\u1eadt\". \u1ede b\u00e0i vi\u1ebft ti\u1ebfp theo, t\u00f4i s\u1ebd h\u01b0\u1edbng d\u1eabn anh em b\u00ed k\u00edp: B\u00e0i 2 - Branching: Ngh\u1ec7 thu\u1eadt r\u1ebd nh\u00e1nh \u0111\u1ec3 team kh\u00f4ng \"\u0111\u1ea5m\" nhau l\u00fac gh\u00e9p code!\n\nH\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf b\u00e0i sau nh\u00e9! Ch\u00fac anh em code kh\u00f4ng bug! \ud83d\ude80","published_at":"2026-04-19T16:36:02.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T18:26:02.000000Z","edited_at":"2026-04-19T16:35:37.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":0,"views_count":10,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/78b57221-a6e6-4085-badc-4c37b59c5702.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"cau-hoi-ve-git","name":"cau hoi ve git"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93048,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 16: Copy Constructor - Ngh\u1ec7 thu\u1eadt nh\u00e2n b\u1ea3n v\u00e0 c\u1ea1m b\u1eaby \"Double Free\"","slug":"bA468BeDLKv","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-16-copy-constructor-nghe-thuat-nhan-ban-va-cam-bay-double-free-bA468BeDLKv","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-16-copy-constructor-nghe-thuat-nhan-ban-va-cam-bay-double-free","contents_short":"Ch\u00e0o anh em! Trong C++, khi b\u1ea1n vi\u1ebft Object A = B;, tr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd t\u1ef1 \u0111\u1ed9ng th\u1ef1c hi\u1ec7n m\u1ed9t thao t\u00e1c g\u1ecdi l\u00e0 Shallow Copy (Sao ch\u00e9p n\u00f4ng). N\u00f3 s\u1ebd copy t\u1eebng byte d\u1eef li\u1ec7u t\u1eeb B sang A.\n\nM\u1ecdi th\u1ee9 v\u1eabn \u1ed5n cho \u0111\u1ebfn khi Class c\u1ee7a b\u1ea1n c\u00f3 s\u1eed d\u1ee5ng con tr\u1ecf ho\u1eb7c c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb \u0111\u1ed9ng (new). L\u00fac n\u00e0y, Shallow Copy s\u1ebd khi\u1ebfn c\u1ea3 A v\u00e0 B c\u00f9ng tr\u1ecf v\u00e0o m\u1ed9t v\u00f9ng nh\u1edb duy nh\u1ea5t. H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng A v\u00e0 B l\u00e0 hai ng\u01b0\u1eddi nh\u01b0ng l\u1ea1i...","contents":"Ch\u00e0o anh em! Trong C++, khi b\u1ea1n vi\u1ebft `Object A = B;`, tr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd t\u1ef1 \u0111\u1ed9ng th\u1ef1c hi\u1ec7n m\u1ed9t thao t\u00e1c g\u1ecdi l\u00e0 Shallow Copy (Sao ch\u00e9p n\u00f4ng). N\u00f3 s\u1ebd copy t\u1eebng byte d\u1eef li\u1ec7u t\u1eeb B sang A.\n\nM\u1ecdi th\u1ee9 v\u1eabn \u1ed5n cho \u0111\u1ebfn khi Class c\u1ee7a b\u1ea1n c\u00f3 s\u1eed d\u1ee5ng con tr\u1ecf ho\u1eb7c c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb \u0111\u1ed9ng (`new`). L\u00fac n\u00e0y, Shallow Copy s\u1ebd khi\u1ebfn c\u1ea3 A v\u00e0 B c\u00f9ng tr\u1ecf v\u00e0o m\u1ed9t v\u00f9ng nh\u1edb duy nh\u1ea5t. H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng A v\u00e0 B l\u00e0 hai ng\u01b0\u1eddi nh\u01b0ng l\u1ea1i d\u00f9ng chung m\u1ed9t chi\u1ebfc v\u00ed ti\u1ec1n. M\u1ed9t ng\u01b0\u1eddi ti\u00eau ti\u1ec1n, ng\u01b0\u1eddi kia c\u0169ng m\u1ea5t ti\u1ec1n. V\u00e0 khi m\u1ed9t ng\u01b0\u1eddi \"bi\u1ebfn m\u1ea5t\" v\u00e0 v\u1ee9t chi\u1ebfc v\u00ed \u0111i, ng\u01b0\u1eddi c\u00f2n l\u1ea1i s\u1ebd c\u1ea7m m\u1ed9t c\u00e1i v\u00ed r\u1ed7ng (v\u00f9ng nh\u1edb \u0111\u00e3 b\u1ecb gi\u1ea3i ph\u00f3ng) \u2013 \u0111\u00e2y ch\u00ednh l\u00e0 th\u1ea3m h\u1ecda!\n\n### 1. Copy Constructor l\u00e0 g\u00ec?\n\nCopy Constructor l\u00e0 m\u1ed9t h\u00e0m kh\u1edfi t\u1ea1o \u0111\u1eb7c bi\u1ec7t, d\u00f9ng \u0111\u1ec3 t\u1ea1o ra m\u1ed9t Object m\u1edbi d\u1ef1a tr\u00ean m\u1ed9t Object \u0111\u00e3 t\u1ed3n t\u1ea1i.\n\nC\u00fa ph\u00e1p chu\u1ea9n c\u1ee7a m\u1ed9t Senior C++:\n\n```\nT\u00eanClass(const T\u00eanClass& other);\n```\n\n* D\u00f9ng Tham chi\u1ebfu (`&`): \u0110\u1ec3 tr\u00e1nh vi\u1ec7c C++ l\u1ea1i ti\u1ebfp t\u1ee5c g\u1ecdi copy constructor m\u1ed9t c\u00e1ch v\u00f4 t\u1eadn (\u0111\u1ec7 quy).\n* D\u00f9ng `const`: \u0110\u1ec3 \u0111\u1ea3m b\u1ea3o b\u1ea1n kh\u00f4ng l\u1ee1 tay l\u00e0m thay \u0111\u1ed5i d\u1eef li\u1ec7u c\u1ee7a Object g\u1ed1c khi \u0111ang copy.\n\n### 2. Shallow Copy vs. Deep Copy (Sao ch\u00e9p n\u00f4ng v\u00e0 s\u00e2u)\n\n* Shallow Copy (M\u1eb7c \u0111\u1ecbnh): Ch\u1ec9 copy gi\u00e1 tr\u1ecb c\u1ee7a c\u00e1c bi\u1ebfn. N\u1ebfu l\u00e0 con tr\u1ecf, n\u00f3 ch\u1ec9 copy \u0111\u1ecba ch\u1ec9 v\u00f9ng nh\u1edb. K\u1ebft qu\u1ea3: 2 Object d\u00f9ng chung 1 v\u00f9ng nh\u1edb.\n* Deep Copy (Y\u00eau c\u1ea7u th\u1ef1c chi\u1ebfn): B\u1ea1n t\u1ef1 tay xin c\u1ea5p ph\u00e1t m\u1ed9t v\u00f9ng nh\u1edb m\u1edbi cho Object b\u1ea3n sao, sau \u0111\u00f3 copy to\u00e0n b\u1ed9 n\u1ed9i dung t\u1eeb v\u00f9ng nh\u1edb g\u1ed1c sang. K\u1ebft qu\u1ea3: 2 Object ho\u00e0n to\u00e0n \u0111\u1ed9c l\u1eadp.\n\n### 3. Code Demo: X\u00e2y d\u1ef1ng Class SmartBuffer an to\u00e0n\n\nH\u00e3y xem c\u00e1ch ch\u00fang ta tri\u1ec3n khai Deep Copy \u0111\u1ec3 b\u1ea3o v\u1ec7 d\u1eef li\u1ec7u h\u1ec7 th\u1ed1ng:\n\n```\n#include <iostream>\n#include <cstring>\n\nusing namespace std;\n\nclass SmartBuffer {\nprivate:\n    int* data;\n    int size;\n\npublic:\n    \/\/ Constructor th\u00f4ng th\u01b0\u1eddng\n    SmartBuffer(int s) : size(s) {\n        data = new int[size];\n        for (int i = 0; i < size; i++) data[i] = i * 10;\n        cout << \"[LOG] Da cap phat vung nho tai: \" << data << \"\\n\";\n    }\n\n    \/\/ COPY CONSTRUCTOR (Tri\u1ec3n khai DEEP COPY)\n    SmartBuffer(const SmartBuffer& other) {\n        this->size = other.size;\n        \n        \/\/ 1. Cap phat vung nho moi hoan toan\n        this->data = new int[this->size];\n        \n        \/\/ 2. Copy noi dung tu vung nho cua Object 'other' sang vung nho moi\n        for (int i = 0; i < size; i++) {\n            this->data[i] = other.data[i];\n        }\n        \n        cout << \"[LOG] DEEP COPY thanh cong vao vung nho moi: \" << this->data << \"\\n\";\n    }\n\n    void updateValue(int index, int newValue) {\n        if (index >= 0 && index < size) data[index] = newValue;\n    }\n\n    void print() const {\n        cout << \"Data: \";\n        for (int i = 0; i < size; i++) cout << data[i] << \" \";\n        cout << \" (Address: \" << data << \")\\n\";\n    }\n\n    \/\/ Luu y: Ham huy se duoc hoc o bai sau de giai phong 'data'\n};\n\nint main() {\n    cout << \"--- KHOI TAO BAN GOC ---\\n\";\n    SmartBuffer original(3);\n    original.print();\n\n    cout << \"\\n--- TAO BAN SAO (Dung Copy Constructor) ---\\n\";\n    SmartBuffer clone = original; \/\/ Hoac SmartBuffer clone(original);\n    clone.print();\n\n    cout << \"\\n--- THAY DOI BAN SAO ---\\n\";\n    clone.updateValue(0, 999);\n    \n    cout << \"Original: \"; original.print();\n    cout << \"Clone:    \"; clone.print();\n\n    return 0;\n}\n```\n\nNh\u1eadn x\u00e9t: Nh\u00ecn v\u00e0o \u0111\u1ecba ch\u1ec9 v\u00f9ng nh\u1edb (Address) in ra, b\u1ea1n s\u1ebd th\u1ea5y hai \u0111\u1ecba ch\u1ec9 kh\u00e1c nhau ho\u00e0n to\u00e0n. Khi b\u1ea1n s\u1eeda gi\u00e1 tr\u1ecb \u1edf `clone`, d\u1eef li\u1ec7u \u1edf `original` v\u1eabn \u0111\u01b0\u1ee3c gi\u1eef nguy\u00ean. \u0110\u00e2y ch\u00ednh l\u00e0 c\u00e1ch l\u00e0m c\u1ee7a m\u1ed9t chuy\u00ean gia!\n\n###  T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nCopy Constructor gi\u00fap ch\u00fang ta ki\u1ec3m so\u00e1t qu\u00e1 tr\u00ecnh nh\u00e2n b\u1ea3n \u0111\u1ed1i t\u01b0\u1ee3ng, \u0111\u1ea3m b\u1ea3o an to\u00e0n cho b\u1ed9 nh\u1edb \u0111\u1ed9ng. \u0110\u00e2y l\u00e0 k\u1ef9 n\u0103ng b\u1eaft bu\u1ed9c khi l\u00e0m c\u00e1c h\u1ec7 th\u1ed1ng Backend \u0111\u00f2i h\u1ecfi s\u1ef1 ch\u00ednh x\u00e1c cao.\n\nNh\u01b0ng c\u00f3 m\u1ed9t c\u00e2u h\u1ecfi l\u1edbn: Ch\u00fang ta d\u00f9ng `new` \u0111\u1ec3 xin c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb, v\u1eady khi Object kh\u00f4ng c\u00f2n d\u00f9ng n\u1eefa, ai s\u1ebd l\u00e0 ng\u01b0\u1eddi \u0111i d\u1ecdn d\u1eb9p \u0111\u1ed1ng r\u00e1c \u0111\u00f3? N\u1ebfu ch\u00fang ta qu\u00ean kh\u00f4ng tr\u1ea3 l\u1ea1i RAM cho h\u1ec7 \u0111i\u1ec1u h\u00e0nh, server s\u1ebd b\u1ecb l\u1ed7i Memory Leak v\u00e0 s\u1eadp ch\u1ec9 sau v\u00e0i gi\u1edd ho\u1ea1t \u0111\u1ed9ng.\n\nTrong C++, c\u00f3 m\u1ed9t \"ng\u01b0\u1eddi h\u00f9ng th\u1ea7m l\u1eb7ng\" s\u1ebd t\u1ef1 \u0111\u1ed9ng xu\u1ea5t hi\u1ec7n ngay tr\u01b0\u1edbc khi m\u1ed9t Object \"qua \u0111\u1eddi\" \u0111\u1ec3 l\u00e0m nhi\u1ec7m v\u1ee5 d\u1ecdn d\u1eb9p cu\u1ed1i c\u00f9ng.\n\nH\u1eb9n g\u1eb7p l\u1ea1i c\u00e1c b\u1ea1n \u1edf B\u00e0i 17: H\u00e0m ph\u00e1 h\u1ee7y (Destructor) - Ng\u01b0\u1eddi d\u1ecdn r\u00e1c t\u1eadn t\u1ee5y c\u1ee7a C++. \u0110\u1eebng qu\u00ean Upvote \u0111\u1ec3 \u1ee7ng h\u1ed9 m\u00ecnh nh\u00e9!","published_at":"2026-04-19T14:21:33.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T18:26:02.000000Z","edited_at":"2026-04-19T14:21:06.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":3,"points":0,"views_count":8,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/cca95c00-91ea-415f-bbf8-e1bd14c2d39d.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"bad-programming","name":"Bad Programming"},{"slug":"cpp","name":"C++"},{"slug":"backend","name":"Backend"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93045,"title":"T\u00e1c \u0111\u1ed9ng c\u1ee7a l\u1eadp tr\u00ecnh \u0111\u1ebfn n\u00e3o b\u1ed9 con ng\u01b0\u1eddi: Hi\u1ec3u \u0111\u00fang \u0111\u1ec3 h\u1ecdc hi\u1ec7u qu\u1ea3 h\u01a1n","slug":"pPLkN3BDJRZ","url":"https:\/\/viblo.asia\/p\/tac-dong-cua-lap-trinh-den-nao-bo-con-nguoi-hieu-dung-de-hoc-hieu-qua-hon-pPLkN3BDJRZ","user_id":186397,"moderation":null,"transliterated":"tac-dong-cua-lap-trinh-den-nao-bo-con-nguoi-hieu-dung-de-hoc-hieu-qua-hon","contents_short":"Ch\u00e0o anh em IT,\n\nL\u1eadp tr\u00ecnh th\u01b0\u1eddng \u0111\u01b0\u1ee3c xem l\u00e0 m\u1ed9t k\u1ef9 n\u0103ng k\u1ef9 thu\u1eadt. Nh\u01b0ng n\u1ebfu nh\u00ecn s\u00e2u h\u01a1n, \u0111\u00e2y th\u1ef1c ch\u1ea5t l\u00e0 m\u1ed9t ho\u1ea1t \u0111\u1ed9ng t\u00e1c \u0111\u1ed9ng m\u1ea1nh \u0111\u1ebfn c\u00e1ch n\u00e3o b\u1ed9 v\u1eadn h\u00e0nh.\n\nB\u00e0i vi\u1ebft n\u00e0y \u0111\u01b0\u1ee3c tham kh\u1ea3o v\u00e0 ph\u00e1t tri\u1ec3n t\u1eeb ngu\u1ed3n:\nhttps:\/\/itprep.com.vn\/tac-dong-lap-trinh-den-nao-bo-con-nguoi\/\n\nC\u00e2u h\u1ecfi \u0111\u1eb7t ra l\u00e0:\n- Khi ch\u00fang ta code, n\u00e3o \u0111ang l\u00e0m g\u00ec?\n- Vi\u1ec7c n\u00e0y mang l\u1ea1i l\u1ee3i \u00edch g\u00ec v\u1ec1 l\u00e2u d\u00e0i?\n- V\u00e0 c\u00f3 r\u1ee7i ro n\u00e0...","contents":"Ch\u00e0o anh em IT,\n\nL\u1eadp tr\u00ecnh th\u01b0\u1eddng \u0111\u01b0\u1ee3c xem l\u00e0 m\u1ed9t k\u1ef9 n\u0103ng k\u1ef9 thu\u1eadt. Nh\u01b0ng n\u1ebfu nh\u00ecn s\u00e2u h\u01a1n, \u0111\u00e2y th\u1ef1c ch\u1ea5t l\u00e0 m\u1ed9t ho\u1ea1t \u0111\u1ed9ng t\u00e1c \u0111\u1ed9ng m\u1ea1nh \u0111\u1ebfn c\u00e1ch n\u00e3o b\u1ed9 v\u1eadn h\u00e0nh.\n\nB\u00e0i vi\u1ebft n\u00e0y \u0111\u01b0\u1ee3c tham kh\u1ea3o v\u00e0 ph\u00e1t tri\u1ec3n t\u1eeb ngu\u1ed3n:\nhttps:\/\/itprep.com.vn\/tac-dong-lap-trinh-den-nao-bo-con-nguoi\/\n\nC\u00e2u h\u1ecfi \u0111\u1eb7t ra l\u00e0:\n- Khi ch\u00fang ta code, n\u00e3o \u0111ang l\u00e0m g\u00ec?\n- Vi\u1ec7c n\u00e0y mang l\u1ea1i l\u1ee3i \u00edch g\u00ec v\u1ec1 l\u00e2u d\u00e0i?\n- V\u00e0 c\u00f3 r\u1ee7i ro n\u00e0o c\u1ea7n l\u01b0u \u00fd?\n\n---\n\n## N\u00e3o b\u1ed9 ho\u1ea1t \u0111\u1ed9ng nh\u01b0 th\u1ebf n\u00e0o khi l\u1eadp tr\u00ecnh?\n\nL\u1eadp tr\u00ecnh kh\u00f4ng ch\u1ec9 l\u00e0 vi\u1ebft code, m\u00e0 l\u00e0 m\u1ed9t chu\u1ed7i c\u00e1c qu\u00e1 tr\u00ecnh nh\u1eadn th\u1ee9c.\n![](https:\/\/images.viblo.asia\/90ad13ac-95c3-4303-a7d2-ee7196ecddf0.jpg)\n\n\n### Ph\u00e2n t\u00edch v\u00e0 chia nh\u1ecf v\u1ea5n \u0111\u1ec1\nTr\u01b0\u1edbc khi vi\u1ebft code, ch\u00fang ta ph\u1ea3i:\n- Hi\u1ec3u y\u00eau c\u1ea7u  \n- T\u00e1ch b\u00e0i to\u00e1n th\u00e0nh c\u00e1c ph\u1ea7n nh\u1ecf  \n\n\u0110\u00e2y l\u00e0 b\u01b0\u1edbc n\u1ec1n c\u1ee7a t\u01b0 duy c\u00f3 h\u1ec7 th\u1ed1ng.\n\n---\n\n### X\u00e2y d\u1ef1ng logic v\u00e0 lu\u1ed3ng x\u1eed l\u00fd\nCode y\u00eau c\u1ea7u:\n- T\u01b0 duy nh\u00e2n \u2013 qu\u1ea3  \n- S\u1eafp x\u1ebfp th\u1ee9 t\u1ef1 th\u1ef1c thi  \n- \u0110\u1ea3m b\u1ea3o t\u00ednh \u0111\u00fang c\u1ee7a h\u1ec7 th\u1ed1ng  \n\n\u0110i\u1ec1u n\u00e0y gi\u00fap c\u1ea3i thi\u1ec7n r\u00f5 r\u1ec7t kh\u1ea3 n\u0103ng suy lu\u1eadn.\n\n---\n\n### S\u1eed d\u1ee5ng tr\u00ed nh\u1edb l\u00e0m vi\u1ec7c\nTrong l\u00fac code, b\u1ea1n ph\u1ea3i gi\u1eef c\u00f9ng l\u00fac:\n- Bi\u1ebfn  \n- H\u00e0m  \n- Tr\u1ea1ng th\u00e1i ch\u01b0\u01a1ng tr\u00ecnh  \n\nVi\u1ec7c n\u00e0y gi\u00fap t\u0103ng kh\u1ea3 n\u0103ng x\u1eed l\u00fd th\u00f4ng tin ng\u1eafn h\u1ea1n.\n\n---\n\n### Debugging \u2013 giai \u0111o\u1ea1n \u201cc\u0103ng n\u00e3o\u201d nh\u1ea5t\nKhi bug x\u1ea3y ra, b\u1ea1n ph\u1ea3i:\n- So s\u00e1nh k\u1ebft qu\u1ea3 th\u1ef1c t\u1ebf v\u00e0 k\u1ef3 v\u1ecdng  \n- L\u1ea7n ng\u01b0\u1ee3c l\u1ea1i logic  \n- \u0110i\u1ec1u ch\u1ec9nh code  \n\n\u0110\u00e2y l\u00e0 l\u00fac t\u01b0 duy ph\u1ea3n bi\u1ec7n \u0111\u01b0\u1ee3c r\u00e8n luy\u1ec7n m\u1ea1nh nh\u1ea5t.\n\n---\n\n## L\u1eadp tr\u00ecnh mang l\u1ea1i l\u1ee3i \u00edch g\u00ec cho n\u00e3o b\u1ed9?\n\n### T\u01b0 duy logic t\u1ed1t h\u01a1n\nB\u1ea1n quen v\u1edbi vi\u1ec7c:\n- Ph\u00e2n t\u00edch  \n- Chia nh\u1ecf  \n- Gi\u1ea3i quy\u1ebft t\u1eebng b\u01b0\u1edbc  \n\n---\n\n### Kh\u1ea3 n\u0103ng t\u1eadp trung \u0111\u01b0\u1ee3c c\u1ea3i thi\u1ec7n\nVi\u1ec7c code \u0111\u00f2i h\u1ecfi s\u1ef1 t\u1eadp trung li\u00ean t\u1ee5c, \u0111\u1eb7c bi\u1ec7t khi l\u00e0m vi\u1ec7c v\u1edbi h\u1ec7 th\u1ed1ng ph\u1ee9c t\u1ea1p.\n\n---\n\n### H\u1ecdc nhanh v\u00e0 th\u00edch nghi t\u1ed1t h\u01a1n\nC\u00f4ng ngh\u1ec7 thay \u0111\u1ed5i li\u00ean t\u1ee5c khi\u1ebfn b\u1ea1n ph\u1ea3i c\u1eadp nh\u1eadt ki\u1ebfn th\u1ee9c th\u01b0\u1eddng xuy\u00ean. \u0110\u00e2y c\u0169ng l\u00e0 l\u00fd do l\u1eadp tr\u00ecnh tr\u1edf th\u00e0nh m\u1ed9t k\u1ef9 n\u0103ng \u0111\u01b0\u1ee3c s\u0103n \u0111\u00f3n m\u1ea1nh m\u1ebd trong th\u1eddi \u0111\u1ea1i c\u00f4ng ngh\u1ec7 hi\u1ec7n nay :contentReference[oaicite:0]{index=0}  \n\n---\n\n### S\u00e1ng t\u1ea1o trong gi\u1ea3i ph\u00e1p\nD\u00f9 mang t\u00ednh logic, l\u1eadp tr\u00ecnh v\u1eabn c\u1ea7n:\n- Thi\u1ebft k\u1ebf h\u1ec7 th\u1ed1ng  \n- T\u1ed1i \u01b0u gi\u1ea3i ph\u00e1p  \n\nKh\u00f4ng ph\u1ea3i l\u00fac n\u00e0o c\u0169ng ch\u1ec9 c\u00f3 m\u1ed9t c\u00e1ch l\u00e0m.\n\n---\n\n## Nh\u1eefng m\u1eb7t h\u1ea1n ch\u1ebf c\u1ea7n l\u01b0u \u00fd\n\nKh\u00f4ng ph\u1ea3i c\u1ee9 code l\u00e0 t\u1ed1t cho n\u00e3o trong m\u1ecdi tr\u01b0\u1eddng h\u1ee3p.\n\nM\u1ed9t s\u1ed1 v\u1ea5n \u0111\u1ec1 th\u01b0\u1eddng g\u1eb7p:\n\n- Qu\u00e1 t\u1ea3i khi l\u00e0m vi\u1ec7c v\u1edbi h\u1ec7 th\u1ed1ng l\u1edbn  \n- T\u1eadp trung qu\u00e1 m\u1ee9c v\u00e0o m\u1ed9t l\u1ed7i nh\u1ecf  \n- C\u0103ng th\u1eb3ng do deadline ho\u1eb7c bug kh\u00f3  \n- Thi\u1ebfu v\u1eadn \u0111\u1ed9ng n\u1ebfu ng\u1ed3i l\u00e2u  \n\n---\n\n## L\u1eadp tr\u00ecnh kh\u00e1c g\u00ec so v\u1edbi c\u00e1c ho\u1ea1t \u0111\u1ed9ng kh\u00e1c?\n\n| Ho\u1ea1t \u0111\u1ed9ng | \u0110\u1eb7c \u0111i\u1ec3m ch\u00ednh | \u0110i\u1ec3m kh\u00e1c c\u1ee7a l\u1eadp tr\u00ecnh |\n|----------|--------------|------------------------|\n| C\u1edd vua | Chi\u1ebfn l\u01b0\u1ee3c | L\u1eadp tr\u00ecnh t\u1ea1o ra h\u1ec7 th\u1ed1ng |\n| Ngo\u1ea1i ng\u1eef | Giao ti\u1ebfp | L\u1eadp tr\u00ecnh thi\u00ean v\u1ec1 logic |\n| \u0110\u1ecdc s\u00e1ch | Ti\u1ebfp nh\u1eadn | L\u1eadp tr\u00ecnh t\u1ea1o v\u00e0 ki\u1ec3m ch\u1ee9ng |\n\n\u0110i\u1ec3m n\u1ed5i b\u1eadt c\u1ee7a l\u1eadp tr\u00ecnh l\u00e0 kh\u1ea3 n\u0103ng k\u1ebft h\u1ee3p:\n- Logic  \n- S\u00e1ng t\u1ea1o  \n- Th\u1ef1c thi  \n\n---\n\n## L\u00e0m sao \u0111\u1ec3 t\u1eadn d\u1ee5ng t\u1ed1t l\u1ee3i \u00edch t\u1eeb l\u1eadp tr\u00ecnh?\n\nM\u1ed9t s\u1ed1 g\u1ee3i \u00fd:\n\n- H\u1ecdc theo d\u1ef1 \u00e1n thay v\u00ec ch\u1ec9 h\u1ecdc l\u00fd thuy\u1ebft  \n- Ngh\u1ec9 ng\u01a1i khi c\u1ea3m th\u1ea5y qu\u00e1 t\u1ea3i  \n- K\u1ebft h\u1ee3p v\u1eadn \u0111\u1ed9ng \u0111\u1ec3 gi\u1eef c\u00e2n b\u1eb1ng  \n- \u0110\u1eb7t m\u1ee5c ti\u00eau r\u00f5 r\u00e0ng khi h\u1ecdc  \n\n---\n\n## T\u1ed5ng k\u1ebft\n\nL\u1eadp tr\u00ecnh kh\u00f4ng ch\u1ec9 l\u00e0 c\u00f4ng c\u1ee5 \u0111\u1ec3 x\u00e2y d\u1ef1ng ph\u1ea7n m\u1ec1m, m\u00e0 c\u00f2n l\u00e0 m\u1ed9t c\u00e1ch r\u00e8n luy\u1ec7n t\u01b0 duy hi\u1ec7u qu\u1ea3.\n\nN\u1ebfu ti\u1ebfp c\u1eadn \u0111\u00fang c\u00e1ch, n\u00f3 c\u00f3 th\u1ec3 gi\u00fap:\n- C\u1ea3i thi\u1ec7n kh\u1ea3 n\u0103ng gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1  \n- T\u0103ng c\u01b0\u1eddng t\u01b0 duy logic  \n- Gi\u1eef cho n\u00e3o lu\u00f4n ho\u1ea1t \u0111\u1ed9ng linh ho\u1ea1t  \n\n---\n\n## Th\u1ea3o lu\u1eadn\n\nAnh em th\u1ea5y vi\u1ec7c h\u1ecdc l\u1eadp tr\u00ecnh c\u00f3 l\u00e0m thay \u0111\u1ed5i c\u00e1ch suy ngh\u0129 c\u1ee7a m\u00ecnh kh\u00f4ng?\n\n- T\u01b0 duy logic h\u01a1n?\n- Gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 nhanh h\u01a1n?\n- Hay \u0111\u00f4i khi b\u1ecb \u201ck\u1eb9t bug\u201d qu\u00e1 l\u00e2u?\n\nC\u00f9ng chia s\u1ebb tr\u1ea3i nghi\u1ec7m b\u00ean d\u01b0\u1edbi nh\u00e9.\n\n---\n\nXem th\u00eam c\u00e1c b\u00e0i vi\u1ebft v\u1ec1 AI v\u00e0 l\u1eadp tr\u00ecnh t\u1ea1i:\nhttps:\/\/itprep.com.vn\/","published_at":"2026-04-19T09:49:44.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:49:02.000000Z","edited_at":"2026-04-19T09:49:30.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":0,"views_count":22,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/3d4fb6ad-1fb6-4fd2-b0b4-a372f6982f82.png","user":{"data":{"id":186397,"url":"https:\/\/viblo.asia\/u\/itprep","avatar":"cb1e7cf4-7703-4bf5-a80a-bd9964cc3eb1.png","name":"itprep","username":"itprep","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"programming","name":"Programming"},{"slug":"neuroscience","name":"neuroscience"},{"slug":"brain","name":"brain"},{"slug":"developer","name":"Developer"}]},"commentators":{"data":[]}},{"id":93044,"title":"AI Agent - T\u1eeb \"Bi\u1ebft n\u00f3i\" \u0111\u1ebfn \"Bi\u1ebft l\u00e0m\": Nh\u1eefng k\u1ef9 n\u0103ng c\u1ed1t l\u00f5i (Agent Skills) b\u1ea1n c\u1ea7n n\u1eafm v\u1eefng","slug":"Nj4vg8pqJ6r","url":"https:\/\/viblo.asia\/p\/ai-agent-tu-biet-noi-den-biet-lam-nhung-ky-nang-cot-loi-agent-skills-ban-can-nam-vung-Nj4vg8pqJ6r","user_id":186397,"moderation":null,"transliterated":"ai-agent-tu-biet-noi-den-biet-lam-nhung-ky-nang-cot-loi-agent-skills-ban-can-nam-vung","contents_short":"Ch\u00e0o anh em c\u1ed9ng \u0111\u1ed3ng Viblo,\n\nTrong n\u0103m 2025 - 2026, ch\u00fang ta \u0111\u00e3 ch\u1ee9ng ki\u1ebfn s\u1ef1 chuy\u1ec3n d\u1ecbch m\u1ea1nh m\u1ebd t\u1eeb c\u00e1c Chatbot \u0111\u01a1n thu\u1ea7n sang AI Agents. N\u1ebfu nh\u01b0 tr\u01b0\u1edbc \u0111\u00e2y ch\u00fang ta h\u00e0i l\u00f2ng v\u1edbi vi\u1ec7c AI tr\u1ea3 l\u1eddi c\u00e2u h\u1ecfi, th\u00ec nay k\u1ef3 v\u1ecdng \u0111\u00e3 chuy\u1ec3n sang vi\u1ec7c AI ph\u1ea3i th\u1ef1c hi\u1ec7n \u0111\u01b0\u1ee3c t\u00e1c v\u1ee5 (Task execution).\n\nTuy nhi\u00ean, \u0111\u1ec3 m\u1ed9t AI Agent th\u1ef1c s\u1ef1 ho\u1ea1t \u0111\u1ed9ng tin c\u1eady v\u00e0 hi\u1ec7u qu\u1ea3 trong m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf kh\u00f4ng ph\u1ea3i l\u00e0 chu...","contents":"Ch\u00e0o anh em c\u1ed9ng \u0111\u1ed3ng Viblo,\n\nTrong n\u0103m 2025 - 2026, ch\u00fang ta \u0111\u00e3 ch\u1ee9ng ki\u1ebfn s\u1ef1 chuy\u1ec3n d\u1ecbch m\u1ea1nh m\u1ebd t\u1eeb c\u00e1c Chatbot \u0111\u01a1n thu\u1ea7n sang AI Agents. N\u1ebfu nh\u01b0 tr\u01b0\u1edbc \u0111\u00e2y ch\u00fang ta h\u00e0i l\u00f2ng v\u1edbi vi\u1ec7c AI tr\u1ea3 l\u1eddi c\u00e2u h\u1ecfi, th\u00ec nay k\u1ef3 v\u1ecdng \u0111\u00e3 chuy\u1ec3n sang vi\u1ec7c AI ph\u1ea3i th\u1ef1c hi\u1ec7n \u0111\u01b0\u1ee3c t\u00e1c v\u1ee5 (Task execution).\n\nTuy nhi\u00ean, \u0111\u1ec3 m\u1ed9t AI Agent th\u1ef1c s\u1ef1 ho\u1ea1t \u0111\u1ed9ng tin c\u1eady v\u00e0 hi\u1ec7u qu\u1ea3 trong m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf kh\u00f4ng ph\u1ea3i l\u00e0 chuy\u1ec7n d\u1ec5. N\u00f3 \u0111\u00f2i h\u1ecfi m\u1ed9t b\u1ed9 k\u1ef9 n\u0103ng m\u00e0 ch\u00fang ta g\u1ecdi chung l\u00e0 Agent Skills.\n\n![agent-skills-cover.png](https:\/\/images.viblo.asia\/a34269f1-d888-43be-a10c-a2f0535df1e2.png)\n\n1. Kh\u1ea3 n\u0103ng l\u1eadp k\u1ebf ho\u1ea1ch (Planning)\n* M\u1ed9t AI Agent th\u00f4ng minh kh\u00f4ng lao v\u00e0o l\u00e0m ngay. N\u00f3 c\u1ea7n bi\u1ebft chia nh\u1ecf m\u1ed9t y\u00eau c\u1ea7u ph\u1ee9c t\u1ea1p th\u00e0nh c\u00e1c b\u01b0\u1edbc kh\u1ea3 thi.\n* Chain of Thought (CoT): K\u1ef9 thu\u1eadt gi\u00fap Agent t\u01b0 duy logic qua t\u1eebng b\u01b0\u1edbc.\n* Reflection\/Self-Criticism: Kh\u1ea3 n\u0103ng t\u1ef1 nh\u00ecn nh\u1eadn l\u1ea1i k\u1ebft qu\u1ea3 c\u1ee7a b\u01b0\u1edbc tr\u01b0\u1edbc \u0111\u1ec3 \u0111i\u1ec1u ch\u1ec9nh b\u01b0\u1edbc sau.\n\n2. S\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 (Tool Use\/Function Calling)\n\u0110\u00e2y l\u00e0 \u0111i\u1ec3m kh\u00e1c bi\u1ec7t l\u1edbn nh\u1ea5t gi\u1eefa m\u1ed9t m\u00f4 h\u00ecnh ng\u00f4n ng\u1eef \u0111\u00f3ng k\u00edn v\u00e0 m\u1ed9t Agent. Agent c\u1ea7n bi\u1ebft khi n\u00e0o n\u00ean g\u1ecdi API, khi n\u00e0o c\u1ea7n truy v\u1ea5n c\u01a1 s\u1edf d\u1eef li\u1ec7u, v\u00e0 khi n\u00e0o c\u1ea7n th\u1ef1c thi code Python \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1.\n\n3. Qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb (Memory Management)\n\u0110\u1ec3 l\u00e0m vi\u1ec7c hi\u1ec7u qu\u1ea3 l\u00e2u d\u00e0i, Agent c\u1ea7n c\u00f3:\n* Short-term memory: L\u01b0u tr\u1eef b\u1ed1i c\u1ea3nh cu\u1ed9c tr\u00f2 chuy\u1ec7n hi\u1ec7n t\u1ea1i.\n* Long-term memory: Th\u01b0\u1eddng th\u00f4ng qua Vector Database (RAG) \u0111\u1ec3 tra c\u1ee9u ki\u1ebfn th\u1ee9c chuy\u00ean bi\u1ec7t ho\u1eb7c kinh nghi\u1ec7m t\u1eeb c\u00e1c t\u00e1c v\u1ee5 tr\u01b0\u1edbc \u0111\u00f3.\n\nTham kh\u1ea3o chi ti\u1ebft: \u0110\u1ec3 x\u00e2y d\u1ef1ng \u0111\u01b0\u1ee3c m\u1ed9t Agent c\u00f3 \u0111\u1ed9 tin c\u1eady cao, vi\u1ec7c hi\u1ec3u s\u00e2u v\u1ec1 c\u00e1c t\u1ea7ng k\u1ef9 n\u0103ng n\u00e0y l\u00e0 b\u1eaft bu\u1ed9c. B\u1ea1n c\u00f3 th\u1ec3 xem ph\u00e2n t\u00edch k\u1ef9 thu\u1eadt chi ti\u1ebft v\u1ec1 c\u00e1c b\u1ed9 k\u1ef9 n\u0103ng n\u00e0y t\u1ea1i b\u00e0i vi\u1ebft: [K\u1ef9 n\u0103ng AI c\u1ea7n c\u00f3: Agent Skills tin c\u1eady v\u00e0 hi\u1ec7u qu\u1ea3.](https:\/\/itprep.com.vn\/ky-nang-ai-can-co-agent-skills-tin-cay-hieu-qua\/)\n\n4. \u0110\u1ed9 tin c\u1eady v\u00e0 T\u00ednh nh\u1ea5t qu\u00e1n (Reliability)\nTrong m\u00f4i tr\u01b0\u1eddng Production, 90% k\u1ebft qu\u1ea3 \u0111\u00fang v\u1eabn l\u00e0 ch\u01b0a \u0111\u1ee7. C\u00e1c k\u1ef9 s\u01b0 c\u1ea7n thi\u1ebft l\u1eadp c\u00e1c r\u00e0o ch\u1eafn (Guardrails) \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o Agent kh\u00f4ng \u0111i ch\u1ec7ch h\u01b0\u1edbng ho\u1eb7c g\u00e2y ra c\u00e1c l\u1ed7i h\u1ec7 th\u1ed1ng nghi\u00eam tr\u1ecdng.\n\nT\u1ed5ng k\u1ebft\nK\u1ef7 nguy\u00ean c\u1ee7a AI Agent \u0111ang m\u1edf ra r\u1ea5t nhi\u1ec1u c\u01a1 h\u1ed9i cho anh em Developer. Vi\u1ec7c l\u00e0m ch\u1ee7 Agent Skills kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n x\u00e2y d\u1ef1ng \u0111\u01b0\u1ee3c nh\u1eefng \u1ee9ng d\u1ee5ng \"x\u1ecbn\" h\u01a1n m\u00e0 c\u00f2n gi\u00fap t\u1ed1i \u01b0u h\u00f3a quy tr\u00ecnh v\u1eadn h\u00e0nh t\u1ef1 \u0111\u1ed9ng trong doanh nghi\u1ec7p.\n\nAnh em c\u00f3 kinh nghi\u1ec7m g\u00ec trong vi\u1ec7c x\u1eed l\u00fd l\u1ed7i khi Agent g\u1ecdi Function calling kh\u00f4ng? C\u00f9ng th\u1ea3o lu\u1eadn b\u00ean d\u01b0\u1edbi nh\u00e9! \nTruy c\u1eadp ngay: https:\/\/itprep.com.vn\/ \u0111\u1ec3 c\u1eadp nh\u1eadt nh\u1eefng ki\u1ebfn th\u1ee9c m\u1edbi nh\u1ea5t v\u1ec1 AI.\n\n#AI #AIAgent #AgentSkills #MachineLearning #SoftwareDevelopment","published_at":"2026-04-19T09:21:44.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:40:02.000000Z","edited_at":"2026-04-19T09:28:54.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":3,"points":0,"views_count":25,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/f9223431-2262-4045-ad95-bbf60a8d8c6b.png","user":{"data":{"id":186397,"url":"https:\/\/viblo.asia\/u\/itprep","avatar":"cb1e7cf4-7703-4bf5-a80a-bd9964cc3eb1.png","name":"itprep","username":"itprep","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"agenticai","name":"AgenticAi"},{"slug":"agent-skills","name":"Agent Skills"},{"slug":"ai","name":"AI"},{"slug":"machine-learning","name":"Machine Learning"}]},"commentators":{"data":[]}},{"id":93043,"title":"L\u1ed9 tr\u00ecnh th\u1ef1c chi\u1ebfn cho v\u1ecb tr\u00ed Intern AI Engineer (2026)","slug":"ymJXDQwaJkq","url":"https:\/\/viblo.asia\/p\/lo-trinh-thuc-chien-cho-vi-tri-intern-ai-engineer-2026-ymJXDQwaJkq","user_id":186378,"moderation":null,"transliterated":"lo-trinh-thuc-chien-cho-vi-tri-intern-ai-engineer-2026","contents_short":"\n\nL\u00e0n s\u00f3ng AI \u0111ang l\u00e0m thay \u0111\u1ed5i to\u00e0n b\u1ed9 cu\u1ed9c ch\u01a1i c\u1ee7a ng\u00e0nh ph\u1ea7n m\u1ec1m. K\u00e9o theo \u0111\u00f3, nhu c\u1ea7u tuy\u1ec3n d\u1ee5ng c\u00e1c v\u1ecb tr\u00ed k\u1ef9 s\u01b0 AI\/ML t\u0103ng v\u1ecdt. Tuy nhi\u00ean, gi\u1eefa m\u1ed9t bi\u1ec3n th\u00f4ng tin kh\u1ed5ng l\u1ed3 v\u00e0 c\u00e1c kh\u00f3a h\u1ecdc \"m\u00ec \u0103n li\u1ec1n\", r\u1ea5t nhi\u1ec1u anh em sinh vi\u00ean IT v\u1eabn hay hoang mang: Th\u1ef1c s\u1ef1 th\u00ec \u0111i l\u00e0m Intern AI Engineer c\u00f4ng ty c\u1ea7n g\u00ec \u1edf m\u00ecnh?\n\nS\u1ef1 th\u1eadt ph\u0169 ph\u00e0ng l\u00e0 c\u00e1c c\u00f4ng ty kh\u00f4ng t\u00ecm ki\u1ebfm nh\u1eefng \"th\u1ee3 g\u00f5 code\" ch\u1ec9 bi\u1ebft...","contents":"![Injtern AI Engineer c\u1ea7n g\u00ec?](https:\/\/images.viblo.asia\/b70ecbc5-dfc3-40b2-84df-1786c107f4b7.png)\n\nL\u00e0n s\u00f3ng AI \u0111ang l\u00e0m thay \u0111\u1ed5i to\u00e0n b\u1ed9 cu\u1ed9c ch\u01a1i c\u1ee7a ng\u00e0nh ph\u1ea7n m\u1ec1m. K\u00e9o theo \u0111\u00f3, nhu c\u1ea7u tuy\u1ec3n d\u1ee5ng c\u00e1c v\u1ecb tr\u00ed k\u1ef9 s\u01b0 AI\/ML t\u0103ng v\u1ecdt. Tuy nhi\u00ean, gi\u1eefa m\u1ed9t bi\u1ec3n th\u00f4ng tin kh\u1ed5ng l\u1ed3 v\u00e0 c\u00e1c kh\u00f3a h\u1ecdc \"m\u00ec \u0103n li\u1ec1n\", r\u1ea5t nhi\u1ec1u anh em sinh vi\u00ean IT v\u1eabn hay hoang mang: Th\u1ef1c s\u1ef1 th\u00ec \u0111i l\u00e0m Intern AI Engineer c\u00f4ng ty c\u1ea7n g\u00ec \u1edf m\u00ecnh?\n\nS\u1ef1 th\u1eadt ph\u0169 ph\u00e0ng l\u00e0 c\u00e1c c\u00f4ng ty kh\u00f4ng t\u00ecm ki\u1ebfm nh\u1eefng \"th\u1ee3 g\u00f5 code\" ch\u1ec9 bi\u1ebft g\u1ecdi API c\u00f3 s\u1eb5n. H\u1ecd t\u00ecm ki\u1ebfm nh\u1eefng c\u00e1 nh\u00e2n hi\u1ec3u b\u1ea3n ch\u1ea5t to\u00e1n h\u1ecdc, bi\u1ebft t\u1ed1i \u01b0u h\u00f3a b\u1ed9 nh\u1edb v\u00e0 c\u00f3 t\u01b0 duy b\u1ea3o m\u1eadt h\u1ec7 th\u1ed1ng.\n\nD\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng tr\u1ee5 c\u1ed9t k\u1ef9 n\u0103ng c\u1ed1t l\u00f5i gi\u00fap anh em l\u1ecdt top 1% trong m\u1eaft Tech Lead:\n\n1. N\u1ec1n t\u1ea3ng To\u00e1n h\u1ecdc v\u00e0 T\u01b0 duy thu\u1eadt to\u00e1n\nNhi\u1ec1u b\u1ea1n l\u1ea7m t\u01b0\u1edfng l\u00e0m AI ch\u1ec9 c\u1ea7n bi\u1ebft Python. Th\u1ef1c t\u1ebf, To\u00e1n h\u1ecdc m\u1edbi l\u00e0 \"linh h\u1ed3n\". B\u1ea1n kh\u00f4ng c\u1ea7n l\u00e0 gi\u00e1o s\u01b0 to\u00e1n, nh\u01b0ng b\u1eaft bu\u1ed9c ph\u1ea3i n\u1eafm:\n\n\u0110\u1ea1i s\u1ed1 tuy\u1ebfn t\u00ednh: Hi\u1ec3u v\u1ec1 Vector, Ma tr\u1eadn, Ph\u00e9p nh\u00e2n v\u00f4 h\u01b0\u1edbng \u0111\u1ec3 chuy\u1ec3n \u0111\u1ed5i d\u1eef li\u1ec7u th\u00e0nh Tensor.\n\nGi\u1ea3i t\u00edch: N\u1eafm v\u1eefng \u0110\u1ea1o h\u00e0m ri\u00eang v\u00e0 Quy t\u1eafc d\u00e2y chuy\u1ec1n \u0111\u1ec3 hi\u1ec3u c\u00e1ch m\u00f4 h\u00ecnh t\u1ed1i \u01b0u tr\u1ecdng s\u1ed1 qua Gradient Descent.\n\nX\u00e1c su\u1ea5t th\u1ed1ng k\u00ea: \u0110\u1ec3 l\u00e0m s\u1ea1ch d\u1eef li\u1ec7u v\u00e0 \u0111\u00e1nh gi\u00e1 \u0111\u1ed9 tin c\u1eady c\u1ee7a k\u1ebft qu\u1ea3 d\u1ef1 \u0111o\u00e1n.\n\n2. T\u01b0 duy T\u00edch h\u1ee3p H\u1ec7 th\u1ed1ng (Full-stack Integration)\nM\u1ed9t m\u00f4 h\u00ecnh AI n\u1eb1m tr\u00ean Jupyter Notebook kh\u00f4ng sinh ra ti\u1ec1n. Xu h\u01b0\u1edbng hi\u1ec7n nay l\u00e0 ph\u00e1t tri\u1ec3n Web App k\u1ebft h\u1ee3p AI. N\u1ebfu b\u1ea1n bi\u1ebft d\u00f9ng Spring Boot \u0111\u1ec3 vi\u1ebft API chu\u1ea9n RESTful, qu\u1ea3n l\u00fd lu\u1ed3ng d\u1eef li\u1ec7u b\u1ea3o m\u1eadt, sau \u0111\u00f3 k\u1ebft n\u1ed1i m\u00f4 h\u00ecnh AI v\u1edbi Frontend (nh\u01b0 React), b\u1ea1n s\u1ebd \u0111\u00e1nh b\u1ea1i 90% \u1ee9ng vi\u00ean thu\u1ea7n Data Science.\n\n3. L\u00e0m ch\u1ee7 Ki\u1ebfn tr\u00fac RAG & LLMs\nTr\u1ecdng t\u00e2m c\u1ee7a th\u1ecb tr\u01b0\u1eddng hi\u1ec7n t\u1ea1i l\u00e0 c\u00e1c M\u00f4 h\u00ecnh Ng\u00f4n ng\u1eef L\u1edbn (LLMs). Vi\u1ec7c hi\u1ec3u r\u00f5 c\u01a1 ch\u1ebf Chunking data, nh\u00fang (Embedding) v\u0103n b\u1ea3n, l\u01b0u tr\u1eef v\u00e0o Vector Database (nh\u01b0 ChromaDB) v\u00e0 s\u1eed d\u1ee5ng LangChain \u0111\u1ec3 k\u1ebft n\u1ed1i LLM tr\u1ea3 l\u1eddi c\u00e2u h\u1ecfi n\u1ed9i b\u1ed9 s\u1ebd khi\u1ebfn Tech Lead v\u00f4 c\u00f9ng \u1ea5n t\u01b0\u1ee3ng.\n\n4. B\u1ec7 ph\u00f3ng \"\u0110\u1ea1i d\u01b0\u01a1ng xanh\": AI Security\nR\u1ea5t \u00edt sinh vi\u00ean ch\u00fa \u00fd \u0111\u1ebfn m\u1ea3ng n\u00e0y. S\u1ef1 an to\u00e0n c\u1ee7a h\u1ec7 th\u1ed1ng AI \u0111ang l\u00e0 b\u00e0i to\u00e1n \u0111au \u0111\u1ea7u c\u1ee7a doanh nghi\u1ec7p. N\u1eafm \u0111\u01b0\u1ee3c c\u00e1c k\u1ef9 thu\u1eadt ph\u00f2ng th\u1ee7 Model Extraction (T\u1ea5n c\u00f4ng tr\u00edch xu\u1ea5t m\u00f4 h\u00ecnh) hay \u1ee9ng d\u1ee5ng AI v\u00e0o Malware Detection s\u1ebd l\u00e0 l\u1ee3i th\u1ebf c\u1ea1nh tranh \u0111\u1ed9c quy\u1ec1n c\u1ee7a b\u1ea1n.\n\nVi\u1ec7c chu\u1ea9n b\u1ecb cho v\u1ecb tr\u00ed Intern AI kh\u00f4ng ch\u1ec9 n\u1eb1m \u1edf vi\u1ec7c thu\u1ed9c l\u00f2ng c\u00e1c h\u00e0m c\u1ee7a th\u01b0 vi\u1ec7n, m\u00e0 n\u1eb1m \u1edf t\u01b0 duy gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 v\u00e0 kh\u1ea3 n\u0103ng \u0111\u01b0a AI v\u00e0o th\u1ef1c ti\u1ec5n (Deploy).\n\n(B\u00e0i chia s\u1ebb \u0111\u01b0\u1ee3c t\u00f3m t\u1eaft t\u1eeb ph\u00e2n t\u00edch chi ti\u1ebft c\u1ee7a m\u00ecnh v\u1ec1 c\u00e1c k\u1ef9 n\u0103ng th\u1ef1c chi\u1ebfn, c\u00e1ch chu\u1ea9n b\u1ecb CV\/Portfolio v\u00e0 b\u1ed9 c\u00e2u h\u1ecfi ph\u1ecfng v\u1ea5n AI. Anh em quan t\u00e2m \u0111\u1ebfn c\u1ea5u tr\u00fac Deep Learning hay quy tr\u00ecnh MLOps b\u1eb1ng Docker c\u00f3 th\u1ec3 tham kh\u1ea3o th\u00eam t\u1ea1i b\u00e0i vi\u1ebft g\u1ed1c: [Intern AI Engineer C\u1ea7n G\u00ec? L\u1ed9 Tr\u00ecnh K\u1ef9 N\u0103ng Th\u1ef1c Chi\u1ebfn](https:\/\/itprep.com.vn\/intern-ai-engineer-can-gi\/))","published_at":"2026-04-19T09:14:45.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:51:02.000000Z","edited_at":"2026-04-19T09:21:56.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":0,"views_count":21,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/3e2f4760-c10f-439e-a223-3d103aff3cd8.png","user":{"data":{"id":186378,"url":"https:\/\/viblo.asia\/u\/buianhkhoi1708","avatar":"40a0789b-5cab-4fe1-bf8b-0bb1e0556408.png","name":"Anh Kh\u00f4i B\u00f9i","username":"buianhkhoi1708","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"itprep","name":"ITPrep"},{"slug":"intern-ai-engineer","name":"Intern AI Engineer"}]},"commentators":{"data":[]}},{"id":93041,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 15: Tham chi\u1ebfu (Reference) l\u00e0 g\u00ec? - S\u1ee3i d\u00e2y li\u00ean k\u1ebft s\u1ed1ng c\u00f2n trong C++","slug":"AWVpXgw3V05","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-15-tham-chieu-reference-la-gi-soi-day-lien-ket-song-con-trong-c-AWVpXgw3V05","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-15-tham-chieu-reference-la-gi-soi-day-lien-ket-song-con-trong-c","contents_short":"Ch\u00e0o anh em! Trong [B\u00e0i 11], khi l\u00e0m t\u00ednh n\u0103ng t\u1ea5n c\u00f4ng (attack), m\u00ecnh \u0111\u00e3 nh\u1ea5n m\u1ea1nh vi\u1ec7c ph\u1ea3i th\u00eam d\u1ea5u & (Tham chi\u1ebfu) v\u00e0o tham s\u1ed1 truy\u1ec1n v\u00e0o: void attack(Character& target).\n\nN\u1ebfu thi\u1ebfu \u0111i d\u1ea5u & nh\u1ecf b\u00e9 \u0111\u00f3, thay v\u00ec tr\u1eeb m\u00e1u con Boss th\u1eadt, h\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra m\u1ed9t \"b\u1ea3n sao\" c\u1ee7a con Boss, tr\u1eeb m\u00e1u b\u1ea3n sao \u0111\u00f3, v\u00e0 con Boss th\u1eadt v\u1eabn nh\u0103n nh\u1edf c\u01b0\u1eddi.\n\nTrong gi\u1edbi C++, c\u00f3 m\u1ed9t c\u00e2u n\u00f3i: \"N\u1ebfu kh\u00f4ng hi\u1ec3u v...","contents":"Ch\u00e0o anh em! Trong [B\u00e0i 11], khi l\u00e0m t\u00ednh n\u0103ng t\u1ea5n c\u00f4ng (`attack`), m\u00ecnh \u0111\u00e3 nh\u1ea5n m\u1ea1nh vi\u1ec7c ph\u1ea3i th\u00eam d\u1ea5u `&` (Tham chi\u1ebfu) v\u00e0o tham s\u1ed1 truy\u1ec1n v\u00e0o: `void attack(Character& target)`.\n\nN\u1ebfu thi\u1ebfu \u0111i d\u1ea5u `&` nh\u1ecf b\u00e9 \u0111\u00f3, thay v\u00ec tr\u1eeb m\u00e1u con Boss th\u1eadt, h\u1ec7 th\u1ed1ng s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra m\u1ed9t \"b\u1ea3n sao\" c\u1ee7a con Boss, tr\u1eeb m\u00e1u b\u1ea3n sao \u0111\u00f3, v\u00e0 con Boss th\u1eadt v\u1eabn nh\u0103n nh\u1edf c\u01b0\u1eddi.\n\nTrong gi\u1edbi C++, c\u00f3 m\u1ed9t c\u00e2u n\u00f3i: \"N\u1ebfu kh\u00f4ng hi\u1ec3u v\u1ec1 Tham chi\u1ebfu, b\u1ea1n \u0111\u1eebng bao gi\u1edd nh\u1eadn m\u00ecnh bi\u1ebft code C++\". H\u00f4m nay, ch\u00fang ta s\u1ebd m\u1ed5 x\u1ebb b\u1ea3n ch\u1ea5t c\u1ee7a \"s\u1ee3i d\u00e2y\" ma thu\u1eadt n\u00e0y.\n\n### 1. B\u1ea3n ch\u1ea5t c\u1ee7a Tham chi\u1ebfu: \"B\u00ed danh\" (Alias)\n\nKh\u00e1i ni\u1ec7m Tham chi\u1ebfu c\u1ef1c k\u1ef3 \u0111\u01a1n gi\u1ea3n: N\u00f3 l\u00e0 m\u1ed9t c\u00e1i t\u00ean kh\u00e1c (b\u00ed danh) c\u1ee7a m\u1ed9t bi\u1ebfn \u0111\u00e3 t\u1ed3n t\u1ea1i. N\u00f3 KH\u00d4NG ph\u1ea3i l\u00e0 m\u1ed9t bi\u1ebfn m\u1edbi, n\u00f3 KH\u00d4NG t\u1ed1n th\u00eam RAM \u0111\u1ec3 l\u01b0u tr\u1eef.\n\nH\u00e3y l\u1ea5y m\u1ed9t v\u00ed d\u1ee5 \u0111\u1eddi th\u1ef1c: Gi\u1ea3 s\u1eed b\u1ea1n t\u00ean th\u1eadt l\u00e0 Hi\u1ebfu. Khi l\u00ean m\u1ea1ng x\u00e3 h\u1ed9i ho\u1eb7c v\u00e0o c\u00e1c group chat, anh em g\u1ecdi b\u1ea1n b\u1eb1ng b\u00ed danh l\u00e0 b\u1ed1 \u0111\u1eddi.\nD\u00f9 ng\u01b0\u1eddi ta g\u1ecdi \"Hi\u1ebfu\" hay g\u1ecdi \"b\u1ed1 \u0111\u1eddi\", th\u00ec c\u0169ng l\u00e0 \u0111ang g\u1ecdi ch\u00ednh b\u1ea1n. N\u1ebfu \"b\u1ed1 \u0111\u1eddi\" b\u1ecb tr\u1eeb 50k trong v\u00ed, th\u00ec v\u00ed c\u1ee7a \"Hi\u1ebfu\" c\u0169ng m\u1ea5t \u0111\u00fang 50k \u0111\u00f3.\n\nTrong C++, c\u00fa ph\u00e1p \u0111\u1ec3 t\u1ea1o b\u00ed danh l\u00e0 d\u00f9ng d\u1ea5u `&` ngay sau ki\u1ec3u d\u1eef li\u1ec7u:\n\n```\nint hieu_wallet = 500;\nint& bodo_wallet = hieu_wallet; \/\/ T\u1ea1o tham chi\u1ebfu (b\u00ed danh)\n\nbodo_wallet -= 50; \/\/ Tr\u1eeb ti\u1ec1n c\u1ee7a b\u00ed danh\n\/\/ L\u00fac n\u00e0y hieu_wallet c\u0169ng ch\u1ec9 c\u00f2n 450!\n```\n\n### 2. Tham chi\u1ebfu (Reference) kh\u00e1c g\u00ec Con tr\u1ecf (Pointer)?\n\nNhi\u1ec1u anh em h\u1ecdc C ng\u00e0y x\u01b0a s\u1ebd th\u1eafc m\u1eafc: \"Th\u1ebf th\u00ec n\u00f3 kh\u00e1c qu\u00e1i g\u00ec Con tr\u1ecf (`*`)?\".\nV\u1ec1 m\u1eb7t b\u1ea3n ch\u1ea5t b\u00ean d\u01b0\u1edbi m\u00e3 m\u00e1y, Tham chi\u1ebfu th\u1ef1c ch\u1ea5t l\u00e0 m\u1ed9t Con tr\u1ecf \u0111\u00e3 \u0111\u01b0\u1ee3c C++ \"l\u00e0m \u0111\u1eb9p\" l\u1ea1i cho an to\u00e0n h\u01a1n:\n\n1. Sinh ra l\u00e0 ph\u1ea3i c\u00f3 ch\u1ee7: B\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o con tr\u1ecf r\u1ed7ng (`int* ptr = nullptr;`), nh\u01b0ng b\u1ea1n KH\u00d4NG TH\u1ec2 t\u1ea1o tham chi\u1ebfu r\u1ed7ng (int& ref; -> L\u1ed7i ngay). Tham chi\u1ebfu khi khai b\u00e1o b\u1eaft bu\u1ed9c ph\u1ea3i \u0111\u01b0\u1ee3c g\u00e1n ngay cho m\u1ed9t bi\u1ebfn c\u1ee5 th\u1ec3.\n2. Chung th\u1ee7y tuy\u1ec7t \u0111\u1ed1i: Con tr\u1ecf h\u00f4m nay tr\u1ecf bi\u1ebfn A, ng\u00e0y mai c\u00f3 th\u1ec3 tr\u1ecf bi\u1ebfn B. Nh\u01b0ng Tham chi\u1ebfu m\u1ed9t khi \u0111\u00e3 nh\u1eadn \"Hi\u1ebfu\" l\u00e0m ch\u1ee7, n\u00f3 s\u1ebd l\u00e0 b\u00ed danh c\u1ee7a \"Hi\u1ebfu\" su\u1ed1t \u0111\u1eddi, kh\u00f4ng th\u1ec3 \u0111\u1ed5i sang ng\u01b0\u1eddi kh\u00e1c \u0111\u01b0\u1ee3c.\n3. C\u00fa ph\u00e1p s\u1ea1ch s\u1ebd: D\u00f9ng tham chi\u1ebfu thao t\u00e1c y h\u1ec7t nh\u01b0 bi\u1ebfn b\u00ecnh th\u01b0\u1eddng, kh\u00f4ng c\u1ea7n x\u00e0i d\u1ea5u sao (`*`) gi\u1ea3i tham chi\u1ebfu hay m\u0169i t\u00ean (`->`) l\u1eb1ng nh\u1eb1ng.\n\n### 3. \u1ee8ng d\u1ee5ng th\u1ef1c chi\u1ebfn: Tr\u00e1nh Copy d\u1eef li\u1ec7u l\u1edbn\n\n\u0110\u00e2y l\u00e0 l\u00fd do c\u00e1c Backend Engineer y\u00eau th\u00edch Tham chi\u1ebfu. H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n \u0111ang x\u1eed l\u00fd m\u1ed9t Object `Transaction` (Giao d\u1ecbch) ch\u1ee9a h\u00e0ng t\u00e1 th\u00f4ng tin ph\u1ee9c t\u1ea1p.\n\n```\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass Transaction {\nprivate:\n    string id;\n    string payload; \/\/ Ch\u1ee9a h\u00e0ng MB d\u1eef li\u1ec7u JSON\n    string status;\n\npublic:\n    Transaction(string id) : id(id), payload(\"{... Huge Data ...}\"), status(\"PENDING\") {}\n    \n    string getStatus() const { return status; }\n    \n    \/\/ Setter\n    void setStatus(string newStatus) { status = newStatus; }\n};\n\n\/\/ C\u00c1CH 1: PASS-BY-VALUE (Thi\u1ebfu kinh nghi\u1ec7m)\n\/\/ C++ s\u1ebd COPY to\u00e0n b\u1ed9 object Transaction (t\u1ed1n RAM, t\u1ed1n CPU)\n\/\/ T\u1ed3i t\u1ec7 h\u01a1n: N\u00f3 ch\u1ec9 update status tr\u00ean B\u1ea2N COPY, b\u1ea3n g\u1ed1c b\u00ean ngo\u00e0i kh\u00f4ng suy suy\u1ec3n!\nvoid processPaymentBad(Transaction tx) {\n    tx.setStatus(\"SUCCESS\"); \n}\n\n\/\/ C\u00c1CH 2: PASS-BY-REFERENCE (Chu\u1ea9n Senior)\n\/\/ tx b\u00e2y gi\u1edd ch\u1ec9 l\u00e0 B\u00cd DANH c\u1ee7a Object truy\u1ec1n v\u00e0o.\n\/\/ KH\u00d4NG COPY, t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd t\u1ee9c th\u00ec, v\u00e0 update th\u1eb3ng v\u00e0o b\u1ea3n g\u1ed1c!\nvoid processPaymentGood(Transaction& tx) {\n    tx.setStatus(\"SUCCESS\");\n}\n\nint main() {\n    Transaction myTx(\"TX_12345\");\n\n    cout << \"Status ban dau: \" << myTx.getStatus() << \"\\n\";\n\n    \/\/ Ch\u1ea1y th\u1eed h\u00e0m \"Bad\"\n    processPaymentBad(myTx);\n    cout << \"Sau khi chay ham Bad: \" << myTx.getStatus() << \" (Van chua thanh cong!)\\n\";\n\n    \/\/ Ch\u1ea1y th\u1eed h\u00e0m \"Good\"\n    processPaymentGood(myTx);\n    cout << \"Sau khi chay ham Good: \" << myTx.getStatus() << \" (Ngon lanh!)\\n\";\n\n    return 0;\n}\n```\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nXuy\u00ean su\u1ed1t c\u00e1c b\u00e0i g\u1ea7n \u0111\u00e2y, quy t\u1eafc s\u1ed1ng c\u00f2n m\u00e0 ch\u00fang ta r\u00fat ra l\u00e0: Lu\u00f4n lu\u00f4n d\u00f9ng Tham chi\u1ebfu (&) \u0111\u1ec3 truy\u1ec1n Object v\u00e0o h\u00e0m nh\u1eb1m tr\u00e1nh vi\u1ec7c C++ copy d\u1eef li\u1ec7u v\u00f4 t\u1ed9i v\u1ea1. (Nh\u1edb k\u00e8m theo const n\u1ebfu h\u00e0m \u0111\u00f3 ch\u1ec9 \u0111\u1ec3 \u0111\u1ecdc d\u1eef li\u1ec7u).\n\nNh\u01b0ng khoan \u0111\u00e3...\nTrong th\u1ef1c t\u1ebf, kh\u00f4ng ph\u1ea3i l\u00fac n\u00e0o ch\u00fang ta c\u0169ng \"s\u1ee3\" vi\u1ec7c copy. S\u1ebd c\u00f3 nh\u1eefng nghi\u1ec7p v\u1ee5 b\u1ea1n TH\u1ef0C S\u1ef0 MU\u1ed0N copy m\u1ed9t Object ra th\u00e0nh nhi\u1ec1u b\u1ea3n.\n\nV\u00ed d\u1ee5: Trong m\u1ed9t game b\u1eafn s\u00fang, khi n\u00f2ng s\u00fang nh\u1ea3 \u0111\u1ea1n, vi\u00ean \u0111\u1ea1n th\u1ee9 2 th\u1ef1c ch\u1ea5t l\u00e0 m\u1ed9t B\u1ea2N SAO y h\u1ec7t c\u1ee7a vi\u00ean \u0111\u1ea1n th\u1ee9 1. Ho\u1eb7c khi b\u1ea1n clone m\u1ed9t template b\u00e1o c\u00e1o.\n\nN\u1ebfu ch\u00fang ta kh\u00f4ng \u0111\u1ecbnh ngh\u0129a c\u00e1ch copy, C++ s\u1ebd t\u1ef1 \u0111\u1ed9ng copy \"t\u1eebng byte m\u1ed9t\" (Shallow Copy). \u0110i\u1ec1u n\u00e0y s\u1ebd d\u1eabn \u0111\u1ebfn nh\u1eefng l\u1ed7i s\u1eadp b\u1ed9 nh\u1edb c\u1ef1c k\u1ef3 th\u1ea3m kh\u1ed1c n\u1ebfu Object c\u1ee7a b\u1ea1n c\u00f3 s\u1eed d\u1ee5ng con tr\u1ecf ho\u1eb7c m\u1ea3ng \u0111\u1ed9ng.\n\nL\u00e0m sao \u0111\u1ec3 d\u1ea1y C++ c\u00e1ch nh\u00e2n b\u1ea3n m\u1ed9t Object an to\u00e0n? H\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf B\u00e0i 16: Ph\u01b0\u01a1ng th\u1ee9c kh\u1edfi t\u1ea1o sao ch\u00e9p (Copy Constructor) - Ngh\u1ec7 thu\u1eadt nh\u00e2n b\u1ea3n th\u1ef1c th\u1ec3!. \u0110\u1eebng qu\u00ean Upvote \u0111\u1ec3 ti\u1ebfp th\u00eam n\u0103ng l\u01b0\u1ee3ng cho series nh\u00e9!","published_at":"2026-04-19T07:46:35.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T07:43:12.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":0,"views_count":14,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/13d5978b-f8ce-4581-9929-6b85848434fe.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"bad-programming","name":"Bad Programming"},{"slug":"cpp","name":"C++"},{"slug":"pointers","name":"Pointers"},{"slug":"references","name":"References"},{"slug":"back-end","name":"Back-end"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93039,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 14: \"Constructor ch\u1ed3ng Constructor\" v\u00e0 B\u00ed thu\u1eadt ng\u0103n ch\u1eb7n \u00e9p ki\u1ec3u l\u1ed7i","slug":"XP4WE2wkL7G","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-14-constructor-chong-constructor-va-bi-thuat-ngan-chan-ep-kieu-loi-XP4WE2wkL7G","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-14-constructor-chong-constructor-va-bi-thuat-ngan-chan-ep-kieu-loi","contents_short":"Ch\u00e0o anh em! Ch\u00fang ta l\u1ea1i g\u1eb7p nhau \u1edf ph\u1ea7n 2 c\u1ee7a ch\u1ee7 \u0111\u1ec1 Parameterized Constructor.\n\nKhi thi\u1ebft k\u1ebf m\u1ed9t h\u1ec7 th\u1ed1ng l\u1edbn, m\u1ed9t Class th\u01b0\u1eddng c\u00f3 r\u1ea5t nhi\u1ec1u c\u00e1ch \u0111\u1ec3 kh\u1edfi t\u1ea1o. V\u00ed d\u1ee5, Class Product (S\u1ea3n ph\u1ea9m) c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u1ea1o ch\u1ec9 v\u1edbi T\u00ean, ho\u1eb7c T\u00ean + Gi\u00e1, ho\u1eb7c T\u00ean + Gi\u00e1 + Gi\u1ea3m gi\u00e1.\n\nN\u1ebfu m\u1ed7i Constructor b\u1ea1n \u0111\u1ec1u vi\u1ebft l\u1ea1i \u0111\u1ed1ng logic g\u00e1n gi\u00e1 tr\u1ecb, code s\u1ebd r\u1ea5t \"r\u00e1c\". C++11 \u0111\u00e3 mang \u0111\u1ebfn m\u1ed9t gi\u1ea3i ph\u00e1p c\u1ef1c k\u1ef3 thanh l\u1ecbch:...","contents":"Ch\u00e0o anh em! Ch\u00fang ta l\u1ea1i g\u1eb7p nhau \u1edf ph\u1ea7n 2 c\u1ee7a ch\u1ee7 \u0111\u1ec1 Parameterized Constructor.\n\nKhi thi\u1ebft k\u1ebf m\u1ed9t h\u1ec7 th\u1ed1ng l\u1edbn, m\u1ed9t Class th\u01b0\u1eddng c\u00f3 r\u1ea5t nhi\u1ec1u c\u00e1ch \u0111\u1ec3 kh\u1edfi t\u1ea1o. V\u00ed d\u1ee5, Class `Product` (S\u1ea3n ph\u1ea9m) c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u1ea1o ch\u1ec9 v\u1edbi T\u00ean, ho\u1eb7c T\u00ean + Gi\u00e1, ho\u1eb7c T\u00ean + Gi\u00e1 + Gi\u1ea3m gi\u00e1.\n\nN\u1ebfu m\u1ed7i Constructor b\u1ea1n \u0111\u1ec1u vi\u1ebft l\u1ea1i \u0111\u1ed1ng logic g\u00e1n gi\u00e1 tr\u1ecb, code s\u1ebd r\u1ea5t \"r\u00e1c\". C++11 \u0111\u00e3 mang \u0111\u1ebfn m\u1ed9t gi\u1ea3i ph\u00e1p c\u1ef1c k\u1ef3 thanh l\u1ecbch: Delegating Constructors (H\u00e0m kh\u1edfi t\u1ea1o \u1ee7y quy\u1ec1n). B\u00ean c\u1ea1nh \u0111\u00f3, ch\u00fang ta s\u1ebd h\u1ecdc c\u00e1ch d\u00f9ng t\u1eeb kh\u00f3a `explicit` \u0111\u1ec3 \"kh\u00f3a m\u00f5m\" nh\u1eefng pha \u00e9p ki\u1ec3u t\u1ef1 \u0111\u1ed9ng tai h\u1ea1i.\n\n### 1. Delegating Constructors - \u0110\u1eebng l\u1eb7p l\u1ea1i ch\u00ednh m\u00ecnh!\n\nThay v\u00ec vi\u1ebft 3-4 c\u00e1i Initializer List gi\u1ed1ng h\u1ec7t nhau, b\u1ea1n c\u00f3 th\u1ec3 cho ph\u00e9p m\u1ed9t Constructor \"g\u1ecdi\" m\u1ed9t Constructor kh\u00e1c trong c\u00f9ng m\u1ed9t Class.\n\nNguy\u00ean t\u1eafc: Constructor \u00edt tham s\u1ed1 s\u1ebd \u1ee7y quy\u1ec1n cho Constructor nhi\u1ec1u tham s\u1ed1 nh\u1ea5t x\u1eed l\u00fd. \u0110i\u1ec1u n\u00e0y gi\u00fap logic kh\u1edfi t\u1ea1o t\u1eadp trung v\u1ec1 m\u1ed9t m\u1ed1i, c\u1ef1c k\u1ef3 d\u1ec5 qu\u1ea3n l\u00fd.\n\n```\nclass Product {\nprivate:\n    string name;\n    double price;\n    int discount;\n\npublic:\n    \/\/ 1. Constructor \u0111\u1ea7y \u0111\u1ee7 nh\u1ea5t (L\u00e0m \"g\u1ed1c\")\n    Product(string n, double p, int d) : name(n), price(p), discount(d) {\n        cout << \"[LOG] Khoi tao day du: \" << name << \"\\n\";\n    }\n\n    \/\/ 2. Constructor chi co Ten v\u00e0 Gia -> Uy quyen cho thang (1)\n    \/\/ Truyen mac dinh discount = 0\n    Product(string n, double p) : Product(n, p, 0) {\n        cout << \"[LOG] Uy quyen tu Constructor 2 tham so\\n\";\n    }\n\n    \/\/ 3. Constructor chi co Ten -> Uy quyen cho thang (2)\n    Product(string n) : Product(n, 0.0) {}\n};\n```\n\n### 2. T\u1eeb kh\u00f3a explicit - Ng\u0103n ch\u1eb7n \"\u00e9p ki\u1ec3u ma qu\u00e1i\"\n\nTrong C++, n\u1ebfu m\u1ed9t Constructor ch\u1ec9 nh\u1eadn duy nh\u1ea5t 1 tham s\u1ed1, C++ s\u1ebd m\u1eb7c \u0111\u1ecbnh coi \u0111\u00f3 l\u00e0 m\u1ed9t ph\u00e9p chuy\u1ec3n \u0111\u1ed5i ki\u1ec3u d\u1eef li\u1ec7u (Implicit Conversion).\n\nGi\u1ea3 s\u1eed b\u1ea1n c\u00f3 class `Order` nh\u1eadn v\u00e0o `int orderID`. N\u1ebfu b\u1ea1n l\u1ee1 tay vi\u1ebft `Order myOrder = 100;,` C++ s\u1ebd t\u1ef1 hi\u1ec3u l\u00e0 b\u1ea1n mu\u1ed1n t\u1ea1o Object Order c\u00f3 ID l\u00e0 100. Nghe th\u00ec ti\u1ec7n, nh\u01b0ng trong c\u00e1c h\u1ec7 th\u1ed1ng Backend ph\u1ee9c t\u1ea1p, vi\u1ec7c t\u1ef1 \u00fd \"\u0111o\u00e1n \u00fd\" n\u00e0y c\u1ee7a C++ th\u01b0\u1eddng d\u1eabn \u0111\u1ebfn nh\u1eefng l\u1ed7i logic c\u1ef1c k\u1ef3 kh\u00f3 debug.\n\nGi\u1ea3i ph\u00e1p: Th\u00eam t\u1eeb kh\u00f3a `explicit` tr\u01b0\u1edbc Constructor. L\u00fac n\u00e0y, C++ s\u1ebd b\u1eaft b\u1ea1n ph\u1ea3i g\u1ecdi \u0111\u00fang t\u00ean Class th\u00ec m\u1edbi cho t\u1ea1o Object.\n\n```\nclass Order {\nprivate:\n    int id;\npublic:\n    \/\/ Th\u00eam explicit \u0111\u1ec3 ch\u1eb7n \u00e9p ki\u1ec3u t\u1ef1 \u0111\u1ed9ng\n    explicit Order(int id) : id(id) {}\n};\n\n\/\/ --- Trong h\u00e0m main ---\n\/\/ Order o1 = 100; \/\/ L\u1ed6I COMPILER! (Vi\u1ec7c n\u00e0y r\u1ea5t t\u1ed1t \u0111\u1ec3 tr\u00e1nh nh\u1ea7m l\u1eabn)\nOrder o2(100);     \/\/ OK! \u0110\u00fang c\u00fa ph\u00e1p r\u00f5 r\u00e0ng.\n```\n\n### 3. B\u00e0i t\u1eadp th\u1ef1c chi\u1ebfn (Homework)\n\n\u0110\u1ec3 n\u1eafm v\u1eefng 14 b\u00e0i h\u1ecdc v\u1eeba qua, m\u00ecnh c\u00f3 m\u1ed9t th\u1eed th\u00e1ch nh\u1ecf cho anh em:\n\nY\u00eau c\u1ea7u: Thi\u1ebft k\u1ebf Class Account cho m\u1ed9t h\u1ec7 th\u1ed1ng ng\u00e2n h\u00e0ng.\n\n1. Thu\u1ed9c t\u00ednh: `ownerName` (string), `balance` (double), `accountType` (string - v\u00ed d\u1ee5: \"Saving\", \"Credit\").\n2. Y\u00eau c\u1ea7u Constructor:\n\n* S\u1eed d\u1ee5ng Delegating Constructor \u0111\u1ec3 h\u1ed7 tr\u1ee3 3 c\u00e1ch t\u1ea1o:\n* Ch\u1ec9 truy\u1ec1n T\u00ean (m\u1eb7c \u0111\u1ecbnh balance=0, type=\"Normal\").\n* Truy\u1ec1n T\u00ean + S\u1ed1 d\u01b0 (m\u1eb7c \u0111\u1ecbnh type=\"Normal\").\n* Truy\u1ec1n \u0111\u1ee7 c\u1ea3 3 th\u00f4ng tin.\n* S\u1eed d\u1ee5ng Initializer List \u0111\u1ec3 kh\u1edfi t\u1ea1o c\u00e1c gi\u00e1 tr\u1ecb.\n* Th\u00eam m\u1ed9t Constructor nh\u1eadn 1 tham s\u1ed1 l\u00e0 balance v\u00e0 d\u00f9ng explicit \u0111\u1ec3 b\u1ea3o v\u1ec7.\n3. Ph\u01b0\u01a1ng th\u1ee9c: Vi\u1ebft h\u00e0m `display()` \u0111\u1ec3 in th\u00f4ng tin t\u00e0i kho\u1ea3n.\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nV\u1eady l\u00e0 ch\u00fang ta \u0111\u00e3 \"ph\u00e1 \u0111\u1ea3o\" th\u1ebf gi\u1edbi c\u1ee7a Constructor - c\u00e1nh c\u1ed5ng \u0111\u1ea7u ti\u00ean m\u00e0 m\u1ecdi Object \u0111\u1ec1u ph\u1ea3i b\u01b0\u1edbc qua. C\u00e1c b\u1ea1n \u0111\u00e3 bi\u1ebft c\u00e1ch \u0111\u00fac ra nh\u1eefng Object v\u1eeba t\u1ed1i \u01b0u hi\u1ec7u n\u0103ng, v\u1eeba an to\u00e0n, v\u1eeba d\u1ec5 b\u1ea3o tr\u00ec.\n\nNh\u01b0ng xuy\u00ean su\u1ed1t c\u00e1c b\u00e0i h\u1ecdc tr\u01b0\u1edbc, c\u00e1c b\u1ea1n th\u1ea5y m\u00ecnh li\u00ean t\u1ee5c nh\u1eafc \u0111\u1ebfn d\u1ea5u `&` (Tham chi\u1ebfu) khi truy\u1ec1n Object v\u00e0o h\u00e0m: `void attack(Character& target).`\n\nT\u1ea1i sao d\u1ea5u & nh\u1ecf x\u00edu \u0111\u00f3 l\u1ea1i c\u00f3 s\u1ee9c m\u1ea1nh gi\u00fap h\u1ec7 th\u1ed1ng kh\u00f4ng b\u1ecb tr\u00e0n RAM? T\u1ea1i sao Senior C++ l\u1ea1i n\u00f3i: \"N\u1ebfu kh\u00f4ng hi\u1ec3u v\u1ec1 Tham chi\u1ebfu, b\u1ea1n \u0111\u1eebng bao gi\u1edd nh\u1eadn m\u00ecnh bi\u1ebft code C++\"?\n\nH\u1eb9n g\u1eb7p l\u1ea1i c\u00e1c b\u1ea1n \u1edf B\u00e0i 15: Tham chi\u1ebfu (Reference) l\u00e0 g\u00ec? - S\u1ee3i d\u00e2y li\u00ean k\u1ebft s\u1ed1ng c\u00f2n trong C++. Nh\u1edb l\u00e0m b\u00e0i t\u1eadp v\u00e0 Upvote \u0111\u1ec3 m\u00ecnh c\u00f3 \u0111\u1ed9ng l\u1ef1c ch\u1ea5m b\u00e0i nh\u00e9!","published_at":"2026-04-19T07:31:11.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T07:31:00.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":0,"views_count":10,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/fd3c39ac-4c6a-4215-a563-9851e390259a.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"bad-programming","name":"Bad Programming"},{"slug":"constructor","name":"Constructor"},{"slug":"cpp","name":"C++"},{"slug":"back-end","name":"Back-end"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93038,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 13: Ph\u01b0\u01a1ng th\u1ee9c kh\u1edfi t\u1ea1o c\u00f3 tham s\u1ed1 (Ph\u1ea7n 1) - Ph\u00e2n bi\u1ec7t \"G\u00e1n\" v\u00e0 \"Kh\u1edfi t\u1ea1o\" th\u1ef1c s\u1ef1!","slug":"ym4007Bd491","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-13-phuong-thuc-khoi-tao-co-tham-so-phan-1-phan-biet-gan-va-khoi-tao-thuc-su-ym4007Bd491","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-13-phuong-thuc-khoi-tao-co-tham-so-phan-1-phan-biet-gan-va-khoi-tao-thuc-su","contents_short":"Ch\u00e0o anh em! \u1ede [B\u00e0i 12], ch\u00fang ta \u0111\u00e3 bi\u1ebft c\u00e1ch vi\u1ebft Parameterized Constructor (H\u00e0m kh\u1edfi t\u1ea1o c\u00f3 tham s\u1ed1) \u0111\u1ec3 \u0111\u1ebb ra m\u1ed9t Object mang s\u1eb5n s\u1ed1 li\u1ec7u:\n\nNh\u00ecn th\u00ec c\u00f3 v\u1ebb r\u1ea5t b\u00ecnh th\u01b0\u1eddng v\u00e0 code v\u1eabn ch\u1ea1y \u0111\u00fang. Nh\u01b0ng n\u1ebfu \u0111em \u0111o\u1ea1n code n\u00e0y cho m\u1ed9t Senior C++ review, h\u1ecd s\u1ebd nh\u0103n m\u1eb7t v\u00e0 n\u00f3i: \"Em \u0111ang l\u00e0m ch\u1eadm h\u1ec7 th\u1ed1ng \u0111\u1ea5y, \u0111\u00e2y l\u00e0 G\u00e1n (Assignment), kh\u00f4ng ph\u1ea3i Kh\u1edfi t\u1ea1o (Initialization)!\".\n\nT\u1ea1i sao l\u1ea1i nh\u01b0 v\u1eady? H\u00f4m...","contents":"Ch\u00e0o anh em! \u1ede [B\u00e0i 12], ch\u00fang ta \u0111\u00e3 bi\u1ebft c\u00e1ch vi\u1ebft Parameterized Constructor (H\u00e0m kh\u1edfi t\u1ea1o c\u00f3 tham s\u1ed1) \u0111\u1ec3 \u0111\u1ebb ra m\u1ed9t Object mang s\u1eb5n s\u1ed1 li\u1ec7u:\n\n```\nCharacter(string n, int h, int d) {\n    name = n; \n    hp = h;\n    damage = d;\n}\n```\n\nNh\u00ecn th\u00ec c\u00f3 v\u1ebb r\u1ea5t b\u00ecnh th\u01b0\u1eddng v\u00e0 code v\u1eabn ch\u1ea1y \u0111\u00fang. Nh\u01b0ng n\u1ebfu \u0111em \u0111o\u1ea1n code n\u00e0y cho m\u1ed9t Senior C++ review, h\u1ecd s\u1ebd nh\u0103n m\u1eb7t v\u00e0 n\u00f3i: \"Em \u0111ang l\u00e0m ch\u1eadm h\u1ec7 th\u1ed1ng \u0111\u1ea5y, \u0111\u00e2y l\u00e0 G\u00e1n (Assignment), kh\u00f4ng ph\u1ea3i Kh\u1edfi t\u1ea1o (Initialization)!\".\n\nT\u1ea1i sao l\u1ea1i nh\u01b0 v\u1eady? H\u00f4m nay ch\u00fang ta s\u1ebd b\u00f3c tr\u1ea7n qu\u00e1 tr\u00ecnh C++ \u0111\u00fac ra m\u1ed9t Object t\u1eeb trong b\u1ed9 nh\u1edb.\n\n### 1. S\u1ef1 th\u1eadt m\u1ea5t l\u00f2ng: B\u1ea1n \u0111\u00e3 t\u1ed1n g\u1ea5p \u0111\u00f4i c\u00f4ng s\u1ee9c!\n\nH\u00e3y nh\u00ecn v\u00e0o \u0111o\u1ea1n code tr\u00ean. Khi ch\u01b0\u01a1ng tr\u00ecnh ch\u1ea1y \u0111\u1ebfn d\u1ea5u ngo\u1eb7c nh\u1ecdn m\u1edf { c\u1ee7a Constructor, to\u00e0n b\u1ed9 v\u00f9ng nh\u1edb cho Object \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5p ph\u00e1t xong.\n\nL\u00fac n\u00e0y, C++ s\u1ebd t\u1ef1 \u0111\u1ed9ng g\u1ecdi Default Constructor cho t\u1ea5t c\u1ea3 c\u00e1c thu\u1ed9c t\u00ednh b\u00ean trong. \u0110\u1eb7c bi\u1ec7t v\u1edbi bi\u1ebfn `name` (ki\u1ec3u `std::string` - v\u1ed1n l\u00e0 m\u1ed9t Object ph\u1ee9c t\u1ea1p), C++ \u0111\u00e3 l\u00e9n t\u1ea1o ra m\u1ed9t chu\u1ed7i r\u1ed7ng `\"\"` cho n\u00f3.\n\nKhi b\u1ea1n b\u01b0\u1edbc v\u00e0o b\u00ean trong d\u1ea5u `{}` v\u00e0 vi\u1ebft `name = n;`, b\u1ea1n \u0111ang th\u1ef1c hi\u1ec7n thao t\u00e1c G\u00e1n (Assignment). T\u1ee9c l\u00e0 C++ ph\u1ea3i:\n\n1. \u0110\u1eadp b\u1ecf c\u00e1i chu\u1ed7i r\u1ed7ng v\u1eeba t\u1ea1o.\n2. Copy d\u1eef li\u1ec7u t\u1eeb bi\u1ebfn `n` \u0111\u00e8 v\u00e0o bi\u1ebfn `name`.\n\nK\u1ebft lu\u1eadn: B\u1ea1n m\u1ea5t 2 l\u1ea7n chi ph\u00ed (T\u1ea1o r\u1ed7ng -> G\u00e1n \u0111\u00e8). N\u1ebfu b\u1ea1n l\u00e0m m\u1ed9t h\u1ec7 th\u1ed1ng c\u00f3 h\u00e0ng tri\u1ec7u Object kh\u1edfi t\u1ea1o li\u00ean t\u1ee5c, server c\u1ee7a b\u1ea1n s\u1ebd l\u00e3ng ph\u00ed t\u00e0i nguy\u00ean CPU v\u00e0 RAM m\u1ed9t c\u00e1ch v\u00f4 \u00edch!\n\n\n### 2. V\u0169 kh\u00ed t\u1ed1i th\u01b0\u1ee3ng: Danh s\u00e1ch kh\u1edfi t\u1ea1o (Initializer List)\n\n\u0110\u1ec3 gi\u1ea3i quy\u1ebft b\u00e0i to\u00e1n tr\u00ean, C++ cung c\u1ea5p m\u1ed9t c\u00fa ph\u00e1p g\u1ecdi l\u00e0 Initializer List. N\u00f3 \u00e9p C++ l\u1ea5y th\u1eb3ng c\u00e1i gi\u00e1 tr\u1ecb b\u1ea1n truy\u1ec1n v\u00e0o \u0111\u1ec3 \u0111\u00fac th\u00e0nh Object ngay t\u1eeb ban \u0111\u1ea7u, b\u1ecf qua b\u01b0\u1edbc \"t\u1ea1o r\u1ed7ng\".\n\nC\u00fa ph\u00e1p: Th\u00eam d\u1ea5u hai ch\u1ea5m `:` sau ngo\u1eb7c tr\u00f2n, theo sau l\u00e0 t\u00ean thu\u1ed9c t\u00ednh v\u00e0 gi\u00e1 tr\u1ecb kh\u1edfi t\u1ea1o n\u1eb1m trong ngo\u1eb7c `()`.\n\n```\n\/\/ C\u00c1CH C\u1ee6A SENIOR: KH\u1edeI T\u1ea0O TH\u1ef0C S\u1ef0\nCharacter(string n, int h, int d) : name(n), hp(h), damage(d) {\n    \/\/ B\u00ean trong n\u00e0y kh\u00f4ng c\u1ea7n l\u00e0m g\u00ec n\u1eefa, ho\u1eb7c ch\u1ec9 vi\u1ebft logic log ra m\u00e0n h\u00ecnh\n    cout << \"Da khoi tao \" << name << \" sieu toc!\\n\";\n}\n```\n\nVi\u1ebft nh\u01b0 th\u1ebf n\u00e0y, `name` \u0111\u01b0\u1ee3c \u0111\u00fac th\u1eb3ng ra b\u1eb1ng `n`. Chi ph\u00ed ch\u1ec9 t\u1ed1n \u0110\u00daNG 1 L\u1ea6N. Nhanh g\u1ecdn v\u00e0 chu\u1ea9n x\u00e1c!\n\n### 3. Nh\u1eefng tr\u01b0\u1eddng h\u1ee3p B\u1eaeT BU\u1ed8C ph\u1ea3i d\u00f9ng Initializer List\n\nT\u1ed1i \u01b0u hi\u1ec7u n\u0103ng l\u00e0 m\u1ed9t chuy\u1ec7n, nh\u01b0ng c\u00f3 nh\u1eefng tr\u01b0\u1eddng h\u1ee3p C++ c\u1ea5m b\u1ea1n d\u00f9ng ph\u00e9p g\u00e1n `=` trong d\u1ea5u `{}`, m\u00e0 b\u1eaft bu\u1ed9c ph\u1ea3i d\u00f9ng Initializer List. \u0110\u00f3 l\u00e0 khi Class c\u1ee7a b\u1ea1n c\u00f3:\n\n1. Bi\u1ebfn h\u1eb1ng s\u1ed1 (`const`): H\u1eb1ng s\u1ed1 sinh ra l\u00e0 kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p thay \u0111\u1ed5i. B\u1ea1n ph\u1ea3i cung c\u1ea5p gi\u00e1 tr\u1ecb cho n\u00f3 ngay t\u1ea1i th\u1eddi \u0111i\u1ec3m n\u00f3 ch\u00e0o \u0111\u1eddi. N\u1ebfu \u0111\u1ec3 n\u00f3 chui v\u00e0o `{}` r\u1ed3i m\u1edbi g\u00e1n th\u00ec \u0111\u00e3 qu\u00e1 mu\u1ed9n!\n2. Bi\u1ebfn tham chi\u1ebfu (`&`): T\u01b0\u01a1ng t\u1ef1 h\u1eb1ng s\u1ed1, tham chi\u1ebfu khi sinh ra ph\u1ea3i tr\u1ecf ngay v\u00e0o m\u1ed9t v\u00f9ng nh\u1edb c\u1ee5 th\u1ec3.\n\n### 4. Code Demo: Thi\u1ebft l\u1eadp c\u1ea5u h\u00ecnh Server\n\n\u0110\u1ec3 th\u1ea5y r\u00f5 s\u1ee9c m\u1ea1nh c\u1ee7a Initializer List, ch\u00fang ta h\u00e3y vi\u1ebft m\u1ed9t Class `ServerConfig` ch\u1ee9a \u0111\u1ecba ch\u1ec9 Host (l\u00e0 h\u1eb1ng s\u1ed1 kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1ed5i) v\u00e0 s\u1ed1 l\u01b0\u1ee3ng Port.\n\n```\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass ServerConfig {\nprivate:\n    const string HOST_IP; \/\/ H\u1eb1ng s\u1ed1: Kh\u00f4ng bao gi\u1edd thay \u0111\u1ed5i sau khi t\u1ea1o\n    int port;\n\npublic:\n    \/\/ N\u1ebeU VI\u1ebeT TH\u1ebe N\u00c0Y S\u1ebc L\u1ed6I COMPILER NGAY:\n    \/*\n    ServerConfig(string ip, int p) {\n        HOST_IP = ip; \/\/ L\u1ed6I: Kh\u00f4ng th\u1ec3 g\u00e1n gi\u00e1 tr\u1ecb cho bi\u1ebfn const\n        port = p;\n    }\n    *\/\n\n    \/\/ PH\u1ea2I D\u00d9NG INITIALIZER LIST:\n    ServerConfig(string ip, int p) : HOST_IP(ip), port(p) {\n        cout << \"[SYSTEM] Server da khoi dong tai \" \n             << HOST_IP << \":\" << port << \"\\n\";\n    }\n\n    void showConfig() const {\n        cout << \"--- SERVER INFO ---\\n\"\n             << \"IP: \" << HOST_IP << \"\\n\"\n             << \"Port: \" << port << \"\\n\"\n             << \"-------------------\\n\";\n    }\n};\n\nint main() {\n    \/\/ Kh\u1edfi t\u1ea1o m\u1ed9t c\u1ea5u h\u00ecnh server\n    ServerConfig myDatabase(\"192.168.1.100\", 5432); \/\/ 5432 l\u00e0 port quen thu\u1ed9c c\u1ee7a PostgreSQL\n    \n    myDatabase.showConfig();\n\n    return 0;\n}\n```\n\nNh\u1eadn x\u00e9t: Vi\u1ec7c d\u00f9ng Initializer List kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t th\u1ee7 thu\u1eadt t\u1ed1i \u01b0u, m\u00e0 n\u00f3 th\u1ec3 hi\u1ec7n b\u1ea1n l\u00e0 m\u1ed9t ng\u01b0\u1eddi th\u1ef1c s\u1ef1 hi\u1ec3u v\u1ec1 v\u00f2ng \u0111\u1eddi (Lifecycle) c\u1ee7a m\u1ed9t bi\u1ebfn trong b\u1ed9 nh\u1edb.\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nTuy\u1ec7t v\u1eddi! T\u1eeb nay tr\u1edf \u0111i, h\u00e3y r\u00e8n luy\u1ec7n th\u00f3i quen s\u1eed d\u1ee5ng Initializer List cho m\u1ecdi Constructor m\u00e0 b\u1ea1n vi\u1ebft. Code c\u1ee7a b\u1ea1n s\u1ebd ch\u1ea1y m\u01b0\u1ee3t m\u00e0 v\u00e0 chu\u1ea9n m\u1ef1c h\u01a1n r\u1ea5t nhi\u1ec1u.\n\nNh\u01b0ng c\u00e2u chuy\u1ec7n v\u1ec1 Constructor ch\u01b0a d\u1eebng l\u1ea1i \u1edf \u0111\u00f3. N\u1ebfu m\u1ed9t Class c\u00f3 t\u1eadn 5-6 c\u00e1i Constructor kh\u00e1c nhau (overloading) \u0111\u1ec3 ph\u1ee5c v\u1ee5 cho nhi\u1ec1u t\u00ecnh hu\u1ed1ng, li\u1ec7u ch\u00fang ta c\u00f3 ph\u1ea3i vi\u1ebft \u0111i vi\u1ebft l\u1ea1i \u0111o\u1ea1n Initializer List d\u00e0i d\u1eb1ng d\u1eb7c kh\u00f4ng? V\u00e0 c\u00f3 c\u00e1ch n\u00e0o ng\u0103n ch\u1eb7n vi\u1ec7c C++ t\u1ef1 \u0111\u1ed9ng \u00e9p ki\u1ec3u b\u1eeba b\u00e3i khi ta l\u1ee1 truy\u1ec1n nh\u1ea7m tham s\u1ed1 v\u00e0o Constructor kh\u00f4ng?\n\n\u0110\u00e3 \u0111\u1ebfn l\u00fac gom t\u1ea5t c\u1ea3 c\u00e1c k\u1ef9 n\u0103ng t\u1eeb \u0111\u1ea7u series l\u1ea1i v\u00e0 th\u1ef1c h\u00e0nh. H\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf B\u00e0i 14: Ph\u01b0\u01a1ng th\u1ee9c kh\u1edfi t\u1ea1o c\u00f3 tham s\u1ed1 (Ph\u1ea7n 2) + B\u00e0i t\u1eadp th\u1ef1c chi\u1ebfn. H\u00e3y chu\u1ea9n b\u1ecb s\u1eb5n IDE \u0111\u1ec3 code nh\u00e9!","published_at":"2026-04-19T06:55:08.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T06:54:49.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":1,"views_count":12,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/591f9f14-84a1-434a-a0e3-1142908705ec.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"back-end","name":"Back-end"},{"slug":"bad-programming","name":"Bad Programming"},{"slug":"bestperformance","name":"BestPerformance"},{"slug":"constructor","name":"Constructor"},{"slug":"cpp","name":"C++"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93037,"title":"V\u1eeba b\u1ea5m Update, F5 l\u1ea1i ra d\u1eef li\u1ec7u c\u0169: L\u1ed7i t\u1ea1i code hay t\u1ea1i... nh\u00e2n ph\u1ea9m?","slug":"AY4qQdB54Pw","url":"https:\/\/viblo.asia\/p\/vua-bam-update-f5-lai-ra-du-lieu-cu-loi-tai-code-hay-tai-nhan-pham-AY4qQdB54Pw","user_id":182653,"moderation":null,"transliterated":"vua-bam-update-f5-lai-ra-du-lieu-cu-loi-tai-code-hay-tai-nhan-pham","contents_short":"Ch\u1eafc h\u1eb3n anh em dev n\u00e0o trong \u0111\u1eddi c\u0169ng t\u1eebng \u00edt nh\u1ea5t m\u1ed9t l\u1ea7n nh\u1eadn \u0111\u01b0\u1ee3c tin nh\u1eafn r\u1ee3n ng\u01b0\u1eddi t\u1eeb QA ho\u1eb7c kh\u00e1ch h\u00e0ng: \"Em \u01a1i, sao ch\u1ecb v\u1eeba \u0111\u1ed5i t\u00ean s\u1ea3n ph\u1ea9m, l\u01b0u th\u00e0nh c\u00f4ng r\u1ed3i m\u00e0 ra ngo\u00e0i trang ch\u1ee7 v\u1eabn th\u1ea5y t\u00ean c\u0169 th\u1ebf n\u00e0y?\"\n\nL\u00fac \u0111\u00f3, ph\u1ea3n x\u1ea1 t\u1ef1 nhi\u00ean c\u1ee7a ch\u00fang ta l\u00e0: b\u1eadt DevTools, check l\u1ea1i API response, ng\u00f3 v\u00e0o database... M\u1ecdi th\u1ee9 trong DB \u0111\u00e3 update m\u1edbi tinh, nh\u01b0ng API v\u1eabn tr\u1ea3 v\u1ec1 c\u00e1i d\u1eef li\u1ec7u t\u1eeb \u0111\u1eddi th...","contents":"Ch\u1eafc h\u1eb3n anh em dev n\u00e0o trong \u0111\u1eddi c\u0169ng t\u1eebng \u00edt nh\u1ea5t m\u1ed9t l\u1ea7n nh\u1eadn \u0111\u01b0\u1ee3c tin nh\u1eafn r\u1ee3n ng\u01b0\u1eddi t\u1eeb QA ho\u1eb7c kh\u00e1ch h\u00e0ng: \"Em \u01a1i, sao ch\u1ecb v\u1eeba \u0111\u1ed5i t\u00ean s\u1ea3n ph\u1ea9m, l\u01b0u th\u00e0nh c\u00f4ng r\u1ed3i m\u00e0 ra ngo\u00e0i trang ch\u1ee7 v\u1eabn th\u1ea5y t\u00ean c\u0169 th\u1ebf n\u00e0y?\"\n\nL\u00fac \u0111\u00f3, ph\u1ea3n x\u1ea1 t\u1ef1 nhi\u00ean c\u1ee7a ch\u00fang ta l\u00e0: b\u1eadt DevTools, check l\u1ea1i API response, ng\u00f3 v\u00e0o database... M\u1ecdi th\u1ee9 trong DB \u0111\u00e3 update m\u1edbi tinh, nh\u01b0ng API v\u1eabn tr\u1ea3 v\u1ec1 c\u00e1i d\u1eef li\u1ec7u t\u1eeb \u0111\u1eddi thu\u1edf n\u00e0o. B\u1ea1n v\u00f2 \u0111\u1ea7u b\u1ee9t tai, l\u1ea9m b\u1ea9m: \"Ma l\u00e0m \u00e0?\".\n\nKh\u00f4ng c\u00f3 ma qu\u1ef7 n\u00e0o \u1edf \u0111\u00e2y c\u1ea3 anh em \u1ea1. L\u1ed7i n\u00e0y l\u00e0 \"\u0111\u1eb7c s\u1ea3n\" c\u1ee7a vi\u1ec7c h\u1ec7 th\u1ed1ng b\u1eaft \u0111\u1ea7u ph\u00ecnh to ra. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng th\u1ee7 ph\u1ea1m ch\u00ednh m\u00e0 t\u00f4i \u0111\u00e3 \u0111\u00fac k\u1ebft \u0111\u01b0\u1ee3c sau bao \u0111\u00eam th\u1ee9c tr\u1eafng g\u1ee1 bug.\n\n### 1. K\u1ebb th\u1ee7 \u00e1c mang t\u00ean \"Cache\" (Th\u01b0\u1eddng g\u1eb7p nh\u1ea5t)\n\nTrong gi\u1edbi l\u1eadp tr\u00ecnh c\u00f3 c\u00e2u: \"C\u00f3 2 th\u1ee9 kh\u00f3 nh\u1ea5t trong khoa h\u1ecdc m\u00e1y t\u00ednh: \u0110\u1eb7t t\u00ean bi\u1ebfn v\u00e0 x\u00f3a cache\". Khi h\u1ec7 th\u1ed1ng b\u1eaft \u0111\u1ea7u c\u00f3 l\u01b0\u1ee3ng truy c\u1eadp l\u1edbn, b\u1ea1n kh\u00f4ng th\u1ec3 c\u1ee9 m\u1ed7i request l\u1ea1i \u0111\u00e8 \u0111\u1ea7u c\u01b0\u1ee1i c\u1ed5 database ra m\u00e0 query. Th\u1ebf l\u00e0 b\u1ea1n \u0111\u01b0a Redis (ho\u1eb7c Memcached) v\u00e0o l\u00e0m t\u1ea5m khi\u00ean ch\u1eafn. D\u1eef li\u1ec7u \u0111\u1ecdc ra s\u1ebd \u0111\u01b0\u1ee3c l\u01b0u t\u1ea1m v\u00e0o cache.\n\nV\u1ea5n \u0111\u1ec1 x\u1ea3y ra khi: B\u1ea1n update d\u1eef li\u1ec7u trong Database th\u00e0nh c\u00f4ng, nh\u01b0ng l\u1ea1i qu\u00ean... x\u00f3a (invalidate) ho\u1eb7c c\u1eadp nh\u1eadt l\u1ea1i c\u00e1i key t\u01b0\u01a1ng \u1ee9ng trong Redis. H\u1ec7 qu\u1ea3 l\u00e0 user F5, h\u1ec7 th\u1ed1ng th\u1ea5y trong cache v\u1eabn c\u00f2n d\u1eef li\u1ec7u n\u00ean b\u00ea nguy\u00ean xi c\u00e1i c\u0169 tr\u1ea3 v\u1ec1.\n\nC\u00e1ch x\u1eed l\u00fd th\u1ef1c t\u1ebf: * Lu\u00f4n nh\u1edb quy t\u1eafc \u0111\u1ed3ng b\u1ed9: `Write DB -> Update\/Delete Cache.`\n\n* C\u1ea9n th\u1eadn v\u1edbi c\u00e1c chi\u1ebfn l\u01b0\u1ee3c cache (Cache-Aside, Write-Through). Th\u00e0 x\u00f3a h\u1eb3n key cache \u0111i \u0111\u1ec3 request sau t\u1ef1 \u0111\u1ed9ng query DB v\u00e0 l\u01b0u cache m\u1edbi, c\u00f2n h\u01a1n l\u00e0 t\u1ef1 t\u00ednh to\u00e1n update l\u1ea1i value trong cache (r\u1ea5t d\u1ec5 sai s\u00f3t).\n\n### 2. \u0110\u1ed9 tr\u1ec5 \u0111\u1ed3ng b\u1ed9 Database (Database Replication Lag)\n\nGi\u1ea3 s\u1eed d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n d\u00f9ng PostgreSQL, database ph\u00ecnh to v\u00e0 b\u1ea1n b\u1eaft \u0111\u1ea7u chia ki\u1ebfn tr\u00fac theo ki\u1ec3u Master - Slave (Primary - Replica). Master ch\u1ecbu tr\u00e1ch nhi\u1ec7m Ghi (Write), c\u00f2n c\u00e1c con Slave ch\u1ecbu tr\u00e1ch nhi\u1ec7m \u0110\u1ecdc (Read) \u0111\u1ec3 gi\u1ea3m t\u1ea3i. Kh\u00e1ch h\u00e0ng v\u1eeba nh\u1ea5n n\u00fat Update (Ghi v\u00e0o Master), sau \u0111\u00f3 m\u00e0n h\u00ecnh t\u1ef1 \u0111\u1ed9ng redirect v\u1ec1 trang danh s\u00e1ch (\u0110\u1ecdc t\u1eeb Slave). V\u00ec Slave ch\u01b0a k\u1ecbp nh\u1eadn d\u1eef li\u1ec7u m\u1edbi t\u1eeb Master, n\u00f3 t\u1ef1 tin tr\u1ea3 v\u1ec1 d\u1eef li\u1ec7u c\u0169. Toang!\n\n**C\u00e1ch x\u1eed l\u00fd th\u1ef1c t\u1ebf:**\n\nN\u1ebfu l\u00e0 nh\u1eefng t\u00e1c v\u1ee5 ng\u01b0\u1eddi d\u00f9ng v\u1eeba c\u1eadp nh\u1eadt xong v\u00e0 c\u1ea7n xem ngay (ch\u00ednh b\u1ea3n th\u00e2n h\u1ecd s\u1eeda), h\u00e3y route c\u00e1i request Read ti\u1ebfp theo th\u1eb3ng v\u00e0o Master.\n\nHo\u1eb7c x\u00e0i m\u1eb9o \u1edf ph\u00eda frontend: T\u1ef1 \u0111\u1ed9ng update state hi\u1ec3n th\u1ecb \u1edf client ngay khi API update tr\u1ea3 v\u1ec1 success, kh\u00f4ng g\u1ecdi l\u1ea1i API Get ngay l\u1eadp t\u1ee9c.\n\n### 3. H\u1ec7 th\u1ed1ng ph\u00e2n t\u00e1n v\u00e0 T\u00ednh nh\u1ea5t qu\u00e1n cu\u1ed1i (Eventual Consistency)\n\nN\u1ebfu d\u1ef1 \u00e1n b\u1ea1n ch\u1ea1y Microservices, v\u1ea5n \u0111\u1ec1 n\u00e0y c\u00f2n \"khoai\" h\u01a1n. D\u1eef li\u1ec7u kh\u00f4ng n\u1eb1m chung m\u1ed9t ch\u1ed7 m\u00e0 r\u1ea3i r\u00e1c \u1edf nhi\u1ec1u service kh\u00e1c nhau.\n\nV\u00ed d\u1ee5: B\u1ea1n l\u01b0u th\u00f4ng tin \u0111\u01a1n h\u00e0ng \u1edf PostgreSQL (Service A), nh\u01b0ng \u0111\u1ec3 ph\u1ee5c v\u1ee5 vi\u1ec7c t\u00ecm ki\u1ebfm si\u00eau t\u1ed1c, b\u1ea1n l\u1ea1i sync d\u1eef li\u1ec7u \u0111\u00f3 sang Elasticsearch (Service B) th\u00f4ng qua Apache Kafka.\n\nV\u1ea5n \u0111\u1ec1 x\u1ea3y ra khi: Khi c\u1eadp nh\u1eadt \u1edf DB g\u1ed1c xong, Kafka b\u1eafn event b\u00e1o cho Elasticsearch update. Nh\u01b0ng h\u1ec7 th\u1ed1ng message queue ho\u1eb7c worker \u0111ang b\u1ecb ngh\u1ebdn, event ch\u1ea1y ch\u1eadm. User t\u00ecm ki\u1ebfm ngay l\u00fac \u0111\u00f3 s\u1ebd th\u1ea5y d\u1eef li\u1ec7u c\u0169 m\u00e8m do Elasticsearch ch\u01b0a k\u1ecbp crawl b\u1ea3n ghi m\u1edbi. \u0110\u00e2y ch\u00ednh l\u00e0 kh\u00e1i ni\u1ec7m Eventual Consistency (T\u00ednh nh\u1ea5t qu\u00e1n cu\u1ed1i) - d\u1eef li\u1ec7u KH\u00d4NG \u0111\u1ed3ng b\u1ed9 ngay l\u1eadp t\u1ee9c, m\u00e0 \"cu\u1ed1i c\u00f9ng r\u1ed3i n\u00f3 s\u1ebd \u0111\u1ed3ng b\u1ed9\".\n\nC\u00e1ch x\u1eed l\u00fd th\u1ef1c t\u1ebf:\n\n* \u1ede g\u00f3c \u0111\u1ed9 k\u1ef9 thu\u1eadt: T\u1ed1i \u01b0u l\u1ea1i consumer, theo d\u00f5i lag c\u1ee7a Kafka partition.\n* \u1ede g\u00f3c \u0111\u1ed9 s\u1ea3n ph\u1ea9m (Product): Ph\u1ea3i \u0111\u00e0m ph\u00e1n v\u1edbi kh\u00e1ch h\u00e0ng\/PO r\u1eb1ng h\u1ec7 th\u1ed1ng l\u1edbn ch\u1ea5p nh\u1eadn \u0111\u1ed9 tr\u1ec5 v\u00e0i gi\u00e2y \u0111\u1ec3 \u0111\u1ed5i l\u1ea5y performance. Hi\u1ec3n th\u1ecb th\u00f4ng b\u00e1o ki\u1ec3u: \"D\u1eef li\u1ec7u c\u1ee7a b\u1ea1n \u0111ang \u0111\u01b0\u1ee3c x\u1eed l\u00fd v\u00e0 s\u1ebd c\u1eadp nh\u1eadt trong \u00edt ph\u00fat\" thay v\u00ec \u0111\u1ec3 h\u1ecd hoang mang.\n\n### 4. B\u1ecf qu\u00ean Transaction Isolation Level\n\nC\u00e1i n\u00e0y s\u00e2u h\u01a1n v\u1ec1 DB m\u1ed9t ch\u00fat. \u0110\u00f4i khi b\u1ea1n x\u00e0i transaction \u0111\u1ec3 update nhi\u1ec1u b\u1ea3ng c\u00f9ng l\u00fac.\nData \u0111\u00e3 update \u1edf d\u00f2ng l\u1ec7nh 1, nh\u01b0ng v\u00ec transaction \u1edf d\u00f2ng l\u1ec7nh 3 b\u1ecb l\u1ed7i ho\u1eb7c ch\u01b0a k\u1ecbp `commit`, m\u00e0 m\u1ed9t request read kh\u00e1c l\u1ea1i bay v\u00e0o query. T\u00f9y thu\u1ed9c v\u00e0o Isolation Level (v\u00ed d\u1ee5 m\u1ee9c `Read Committed`), c\u00e1i request read kia s\u1ebd kh\u00f4ng nh\u00ecn th\u1ea5y d\u1eef li\u1ec7u b\u1ea1n v\u1eeba s\u1eeda (v\u00ec \u0111\u00e3 commit \u0111\u00e2u).\n\n### T\u1ed5ng k\u1ebft\n\nD\u1eef li\u1ec7u c\u0169 xu\u1ea5t hi\u1ec7n sau khi update \u0111a ph\u1ea7n kh\u00f4ng ph\u1ea3i do \"nh\u00e2n ph\u1ea9m\", m\u00e0 l\u00e0 h\u1ec7 qu\u1ea3 c\u1ee7a vi\u1ec7c ch\u00fang ta \u00e1p d\u1ee5ng c\u00e1c k\u1ef9 thu\u1eadt t\u0103ng c\u01b0\u1eddng hi\u1ec7u n\u0103ng (Caching, Replication, Message Broker) nh\u01b0ng ch\u01b0a ki\u1ec3m so\u00e1t h\u1ebft lu\u1ed3ng s\u1ed1ng c\u1ee7a d\u1eef li\u1ec7u.\n\nL\u1ea7n t\u1edbi n\u1ebfu b\u1ecb s\u1ebfp g\u00f5 \u0111\u1ea7u v\u00ec l\u1ed7i n\u00e0y, h\u00e3y b\u00ecnh t\u0129nh l\u00f4i nh\u1eefng ki\u1ebfn tr\u00fac tr\u00ean ra gi\u1ea3i th\u00edch nh\u00e9. Ch\u00fac anh em fix bug vui v\u1ebb v\u00e0 kh\u00f4ng b\u1ecb \u00e1m \u1ea3nh b\u1edfi F5!","published_at":"2026-04-19T06:33:18.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T06:32:55.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":6,"points":1,"views_count":18,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/4d92aba1-651a-4b9d-b2db-a29bf04c5ada.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"backend","name":"Backend"},{"slug":"caching","name":"caching"},{"slug":"microservices","name":"microservices"},{"slug":"redis","name":"Redis"},{"slug":"system-design","name":"System Design"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93034,"title":"ITPrep - N\u1ec1n t\u1ea3ng chia s\u1ebb c\u00e1c c\u1ea9m nang, cheatsheet ph\u1ecfng v\u1ea5n IT v\u00e0 c\u00e1c ki\u1ebfn th\u1ee9c chuy\u00ean ng\u00e0nh hot nh\u1ea5t hi\u1ec7n nay","slug":"AoJe8zKr41j","url":"https:\/\/viblo.asia\/p\/itprep-nen-tang-chia-se-cac-cam-nang-cheatsheet-phong-van-it-va-cac-kien-thuc-chuyen-nganh-hot-nhat-hien-nay-AoJe8zKr41j","user_id":186378,"moderation":null,"transliterated":"itprep-nen-tang-chia-se-cac-cam-nang-cheatsheet-phong-van-it-va-cac-kien-thuc-chuyen-nganh-hot-nhat-hien-nay","contents_short":"L\u00e0m IT, d\u00f9 b\u1ea1n l\u00e0 Fresher m\u1edbi nh\u00fa hay Senior d\u1ea1n d\u00e0y s\u01b0\u01a1ng gi\u00f3, th\u00ec vi\u1ec7c \"n\u00e3o c\u00e1 v\u00e0ng\" qu\u00ean m\u1ea5t m\u1ed9t c\u00fa ph\u00e1p CLI, m\u1ed9t h\u00e0m x\u1eed l\u00fd m\u1ea3ng hay c\u1ea5u tr\u00fac c\u1ee7a m\u1ed9t m\u1ea1ng n\u01a1-ron l\u00e0 chuy\u1ec7n... x\u1ea3y ra m\u1ed7i ng\u00e0y.\n\nCh\u00fang ta kh\u00f4ng c\u1ea7n (v\u00e0 kh\u00f4ng th\u1ec3) h\u1ecdc thu\u1ed9c l\u00f2ng m\u1ecdi th\u1ee9. K\u1ef9 n\u0103ng quan tr\u1ecdng nh\u1ea5t c\u1ee7a m\u1ed9t Software Engineer hi\u1ec7n \u0111\u1ea1i l\u00e0 bi\u1ebft t\u00ecm ki\u1ebfm \u1edf \u0111\u00e2u v\u00e0 t\u00ecm nh\u01b0 th\u1ebf n\u00e0o.\n\n\u0110\u00f3 l\u00e0 l\u00fd do m\u00ecnh t\u1ed5ng h\u1ee3p l\u1ea1i \"C\u1ea9m nang ...","contents":"L\u00e0m IT, d\u00f9 b\u1ea1n l\u00e0 Fresher m\u1edbi nh\u00fa hay Senior d\u1ea1n d\u00e0y s\u01b0\u01a1ng gi\u00f3, th\u00ec vi\u1ec7c \"n\u00e3o c\u00e1 v\u00e0ng\" qu\u00ean m\u1ea5t m\u1ed9t c\u00fa ph\u00e1p CLI, m\u1ed9t h\u00e0m x\u1eed l\u00fd m\u1ea3ng hay c\u1ea5u tr\u00fac c\u1ee7a m\u1ed9t m\u1ea1ng n\u01a1-ron l\u00e0 chuy\u1ec7n... x\u1ea3y ra m\u1ed7i ng\u00e0y. \n\nCh\u00fang ta kh\u00f4ng c\u1ea7n (v\u00e0 kh\u00f4ng th\u1ec3) h\u1ecdc thu\u1ed9c l\u00f2ng m\u1ecdi th\u1ee9. K\u1ef9 n\u0103ng quan tr\u1ecdng nh\u1ea5t c\u1ee7a m\u1ed9t Software Engineer hi\u1ec7n \u0111\u1ea1i l\u00e0 bi\u1ebft **t\u00ecm ki\u1ebfm \u1edf \u0111\u00e2u** v\u00e0 **t\u00ecm nh\u01b0 th\u1ebf n\u00e0o**. \n\n\u0110\u00f3 l\u00e0 l\u00fd do m\u00ecnh t\u1ed5ng h\u1ee3p l\u1ea1i \"C\u1ea9m nang Cheatsheet\" si\u00eau ch\u1ea5t l\u01b0\u1ee3ng n\u00e0y t\u1eeb kinh nghi\u1ec7m th\u1ef1c chi\u1ebfn v\u00e0 kho t\u00e0i li\u1ec7u tr\u00ean [ITPrep](https:\/\/itprep.com.vn\/) - chuy\u00ean trang ki\u1ebfn th\u1ee9c c\u00f4ng ngh\u1ec7 v\u00e0 AI. Bookmark ngay b\u00e0i vi\u1ebft l\u1ea1i \u0111\u1ec3 d\u00f9ng l\u00e0m \"phao c\u1ee9u sinh\" m\u1ed7i khi b\u00ed idea nh\u00e9!\n\n---\n\n## 1. Git & GitHub Cheatsheet (B\u1eaft bu\u1ed9c ph\u1ea3i c\u00f3)\n\nD\u00f9 b\u1ea1n l\u00e0m stack n\u00e0o, Git v\u1eabn l\u00e0 ch\u00e2n \u00e1i. \u0110\u1eebng \u0111\u1ec3 \u0111\u1ebfn l\u00fac conflict code lo\u1ea1n x\u00ec ng\u1ea7u m\u1edbi b\u1eaft \u0111\u1ea7u \u0111i Google c\u00e1ch `rebase` hay `cherry-pick`.\n\n* **C\u01a1 b\u1ea3n nh\u1ea5t:** `git status`, `git add .`, `git commit -m \"message\"`, `git push`\n* **C\u1ee9u h\u1ed9 kh\u1ea9n c\u1ea5p:** * L\u1ee1 commit nh\u1ea7m: `git reset --soft HEAD~1` (gi\u1eef l\u1ea1i code), `git reset --hard HEAD~1` (x\u00f3a s\u1ea1ch d\u1ea5u v\u1ebft).\n  * X\u00f3a nh\u00e1nh local: `git branch -d <branch_name>`\n* **\ud83d\udd17 Ngu\u1ed3n Cheatsheet b\u1ecf t\u00fai:** [Atlassian Git Cheatsheet](https:\/\/www.atlassian.com\/git\/tutorials\/atlassian-git-cheatsheet) (File PDF thi\u1ebft k\u1ebf c\u1ef1c \u0111\u1eb9p, n\u00ean in ra d\u00e1n c\u1ea1nh m\u00e0n h\u00ecnh).\n\n---\n\n## 2. Backend: Java Spring Boot & Python FastAPI\n\nVi\u1ebft API l\u00e0 c\u00f4ng vi\u1ec7c h\u00e0ng ng\u00e0y, nh\u01b0ng boilerplate code c\u1ee7a Java \u0111\u00f4i khi l\u00e0m ch\u00fang ta l\u00fa l\u1eabn. C\u00f9ng v\u1edbi \u0111\u00f3 l\u00e0 s\u1ef1 l\u00ean ng\u00f4i c\u1ee7a Python trong c\u00e1c h\u1ec7 th\u1ed1ng Microservices.\n\n### Java Spring Boot Annotations\nN\u1ebfu b\u1ea1n \u0111ang build h\u1ec7 th\u1ed1ng Enterprise, h\u00e3y nh\u1edb k\u1ef9 c\u00e1c Annotation th\u1ea7n th\u00e1nh n\u00e0y:\n* `@RestController` + `@RequestMapping(\"\/api\/v1\/...\")`: \u0110\u1ecbnh ngh\u0129a API endpoint.\n* `@Autowired` ho\u1eb7c d\u00f9ng `RequiredArgsConstructor` c\u1ee7a Lombok \u0111\u1ec3 DI (Dependency Injection).\n* `@Transactional`: B\u1eaft bu\u1ed9c khi thao t\u00e1c v\u1edbi Database \u0111\u1ec3 tr\u00e1nh rollback n\u1eeda v\u1eddi.\n* **\ud83d\udd17 Ngu\u1ed3n Cheatsheet:** [Spring Boot Annotations Cheatsheet](https:\/\/cheatography.com\/lokesh\/cheat-sheets\/spring-boot-annotations\/)\n\n### Python (FastAPI & Pandas)\nX\u1eed l\u00fd d\u1eef li\u1ec7u v\u00e0 d\u1ef1ng API nhanh th\u00ec Python v\u00f4 \u0111\u1ed1i:\n* **\ud83d\udd17 Pandas Data Wrangling:** [Pandas Official Cheatsheet](https:\/\/pandas.pydata.org\/Pandas_Cheat_Sheet.pdf) (Gi\u00fap b\u1ea1n thao t\u00e1c DataFrame, fill NA, merge data ch\u1ec9 b\u1eb1ng 1 d\u00f2ng code).\n* **\ud83d\udd17 FastAPI:** D\u1ef1ng API v\u1edbi Pydantic b\u1eaft l\u1ed7i c\u1ef1c g\u1eaft. Xem nhanh t\u1ea1i [FastAPI Cheatsheet](https:\/\/fastapi.tiangolo.com\/).\n\n---\n\n## 3. Frontend: Tr\u1ecb h\u1ec7 sinh th\u00e1i React\n\nL\u00e0m UI\/UX th\u1eddi nay v\u1edbi MERN stack th\u00ec kh\u00f4ng th\u1ec3 thi\u1ebfu React v\u00e0 qu\u1ea3n l\u00fd state. \n\n* **React Hooks:** `useState` (qu\u1ea3n l\u00fd state c\u1ee5c b\u1ed9), `useEffect` (g\u1ecdi API, nh\u1edb c\u00e1i dependency array `[]` n\u1ebfu kh\u00f4ng mu\u1ed1n infinite loop), `useMemo` & `useCallback` (t\u1ed1i \u01b0u hi\u1ec7u n\u0103ng).\n* **Zustand \/ Redux:** Cheatsheet qu\u1ea3n l\u00fd Global State.\n* **\ud83d\udd17 Ngu\u1ed3n Cheatsheet:** [React TypeScript Cheatsheets](https:\/\/react-typescript-cheatsheet.netlify.app\/) (C\u1ef1c k\u1ef3 c\u1ea7n thi\u1ebft v\u00ec code React th\u1eddi nay auto d\u00f9ng TypeScript).\n\n---\n\n## 4. AI \/ Machine Learning (Deep Dive)\n\n\u0110\u00e2y l\u00e0 m\u1ea3ng khoai nh\u1ea5t v\u00ec l\u01b0\u1ee3ng ki\u1ebfn th\u1ee9c to\u00e1n h\u1ecdc v\u00e0 ki\u1ebfn tr\u00fac h\u1ec7 th\u1ed1ng c\u1ef1c k\u1ef3 \u0111\u1ed3 s\u1ed9. Cheatsheet ch\u1ec9 gi\u00fap b\u1ea1n nh\u1edb code, nh\u01b0ng \u0111\u1ec3 hi\u1ec3u s\u00e2u (\u0111\u1eb7c bi\u1ec7t l\u00e0 \u0111i ph\u1ecfng v\u1ea5n), b\u1ea1n c\u1ea7n t\u00e0i li\u1ec7u x\u1ecbn h\u01a1n.\n\n* **Scikit-Learn:** [Machine Learning Map](https:\/\/scikit-learn.org\/stable\/tutorial\/machine_learning_map\/index.html) (Gi\u00fap b\u1ea1n ch\u1ecdn \u0111\u00fang thu\u1eadt to\u00e1n Regression, Classification hay Clustering t\u00f9y theo l\u01b0\u1ee3ng data).\n* **Deep Learning (PyTorch\/TensorFlow):** Nh\u1edb c\u00e1c h\u00e0m `Forward`, `Backpropagation`, `Optimizer (Adam, SGD)`.\n\n> **\ud83d\udca1 T\u00e0i li\u1ec7u \u0110\u1ecdc th\u00eam chuy\u00ean s\u00e2u (Highly Recommend):**\n> Cheatsheet ch\u1ec9 gi\u1ea3i quy\u1ebft ph\u1ea7n ng\u1ecdn (c\u00fa ph\u00e1p). N\u1ebfu c\u00e1c b\u1ea1n \u0111ang \u00f4n thi, chu\u1ea9n b\u1ecb apply v\u1ecb tr\u00ed AI\/ML Engineer, ho\u1eb7c \u0111\u01a1n gi\u1ea3n l\u00e0 mu\u1ed1n hi\u1ec3u r\u00f5 b\u1ea3n ch\u1ea5t t\u1ea1i sao ChatGPT l\u1ea1i th\u00f4ng minh \u0111\u1ebfn v\u1eady, m\u00ecnh c\u1ef1c k\u1ef3 khuy\u1ebfn ngh\u1ecb c\u00e1c b\u1ea1n \u0111\u1ecdc th\u00eam 2 t\u00e0i li\u1ec7u th\u1ef1c chi\u1ebfn n\u00e0y:\n> \n> 1. \ud83d\ude80 **[So s\u00e1nh chi ti\u1ebft CNN, RNN v\u00e0 Transformer](https:\/\/itprep.com.vn\/so-sanh-cnn-rnn-va-transformer\/)**: B\u00e0i vi\u1ebft m\u1ed5 x\u1ebb ki\u1ebfn tr\u00fac l\u00f5i c\u1ee7a AI, gi\u00fap b\u1ea1n hi\u1ec3u r\u00f5 \u01b0u nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a t\u1eebng m\u1ea1ng n\u01a1-ron thay v\u00ec ch\u1ec9 copy code.\n> 2. \ud83c\udfaf **[B\u1ed9 c\u00e2u h\u1ecfi Ph\u1ecfng v\u1ea5n Machine Learning](https:\/\/itprep.com.vn\/phong-van-machine-learning\/)**: Ng\u00e2n h\u00e0ng c\u00e2u h\u1ecfi t\u1eeb c\u01a1 b\u1ea3n \u0111\u1ebfn n\u00e2ng cao, bao tr\u1ecdn c\u00e1c technical stack m\u00e0 Tech Lead hay h\u1ecfi xo\u00e1y \u0111\u00e1p xoay. C\u1ef1c k\u1ef3 h\u1eefu \u00edch cho c\u00e1c b\u1ea1n fresher\/intern.\n\n---\n\n## 5. MLOps & Deployment (Docker)\n\nCode ch\u1ea1y ngon tr\u00ean m\u00e1y m\u00ecnh nh\u01b0ng t\u00e8o tr\u00ean server? Docker Cheatsheet l\u00e0 th\u1ee9 b\u1ea1n c\u1ea7n.\n* Build image: `docker build -t app-name .`\n* Ch\u1ea1y container: `docker run -p 8080:8080 app-name`\n* X\u00f3a to\u00e0n b\u1ed9 container \u0111ang d\u1eebng: `docker container prune`\n* **\ud83d\udd17 Ngu\u1ed3n Cheatsheet:** [Docker CLI Cheatsheet](https:\/\/docs.docker.com\/get-started\/docker_cheatsheet.pdf)\n\n---\n\n## L\u1eddi k\u1ebft\n\nVi\u1ec7c s\u1edf h\u1eefu m\u1ed9t kho Cheatsheet kh\u00f4ng l\u00e0m b\u1ea1n k\u00e9m \u0111i, ng\u01b0\u1ee3c l\u1ea1i, n\u00f3 ch\u1ee9ng t\u1ecf b\u1ea1n l\u00e0 m\u1ed9t l\u1eadp tr\u00ecnh vi\u00ean bi\u1ebft t\u1ed1i \u01b0u h\u00f3a n\u00e3o b\u1ed9 \u0111\u1ec3 d\u00e0nh kh\u00f4ng gian cho vi\u1ec7c **T\u01b0 duy Logic** v\u00e0 **Thi\u1ebft k\u1ebf H\u1ec7 th\u1ed1ng** (System Design). \n\nC\u00e1c b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 gh\u00e9 th\u0103m trang ch\u1ee7 **[ITPrep.com.vn](https:\/\/itprep.com.vn\/)** \u0111\u1ec3 \u0111\u00f3n \u0111\u1ecdc th\u00eam nhi\u1ec1u b\u00e0i vi\u1ebft chuy\u00ean s\u00e2u v\u1ec1 k\u1ef9 thu\u1eadt ph\u1ea7n m\u1ec1m v\u00e0 AI th\u1ef1c chi\u1ebfn nh\u00e9.\n\nHy v\u1ecdng c\u1ea9m nang n\u00e0y s\u1ebd c\u1ee9u nguy cho anh em trong nh\u1eefng deadline c\u1eadn k\u1ec1. N\u1ebfu th\u1ea5y b\u00e0i vi\u1ebft h\u1eefu \u00edch, \u0111\u1eebng qu\u00ean cho m\u00ecnh 1 **Upvote** v\u00e0 **Bookmark** l\u1ea1i \u0111\u1ec3 d\u00f9ng d\u1ea7n! \n\nAnh em th\u01b0\u1eddng hay d\u00f9ng Cheatsheet n\u00e0o nh\u1ea5t? Comment chia s\u1ebb b\u00ean d\u01b0\u1edbi nha \ud83d\udc47","published_at":"2026-04-19T04:23:33.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:18:02.000000Z","edited_at":"2026-04-19T05:24:42.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":0,"views_count":27,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/74dba266-e5f1-4d6e-9d90-5b50b91202ba.png","user":{"data":{"id":186378,"url":"https:\/\/viblo.asia\/u\/buianhkhoi1708","avatar":"40a0789b-5cab-4fe1-bf8b-0bb1e0556408.png","name":"Anh Kh\u00f4i B\u00f9i","username":"buianhkhoi1708","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"itprep","name":"ITPrep"},{"slug":"cheatsheet-phong-van","name":"Cheatsheet ph\u1ecfng v\u1ea5n"},{"slug":"cam-nang-it","name":"C\u1ea9m nang IT"}]},"commentators":{"data":[]}},{"id":93026,"title":"Hermes Agent - L\u00e0m quen","slug":"gjLN0M9W432","url":"https:\/\/viblo.asia\/p\/hermes-agent-lam-quen-gjLN0M9W432","user_id":51925,"moderation":null,"transliterated":"hermes-agent-lam-quen","contents_short":"Kh\u00e1i ni\u1ec7m\n\u201cHermes Agent\u201d l\u00e0 t\u00ean c\u1ee7a m\u1ed9t AI agent m\u00e3 ngu\u1ed3n m\u1edf do Nous Research ph\u00e1t tri\u1ec3n. N\u00f3 \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 l\u00e0 m\u1ed9t agent ch\u1ea1y b\u1ec1n v\u1eefng tr\u00ean m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n, c\u00f3 b\u1ed9 nh\u1edb d\u00e0i h\u1ea1n, c\u00f3 th\u1ec3 h\u1ecdc d\u1ea7n theo th\u1eddi gian, k\u1ebft n\u1ed1i v\u1edbi nhi\u1ec1u n\u1ec1n t\u1ea3ng nh\u1eafn tin\/c\u00f4ng c\u1ee5, v\u00e0 h\u1ed7 tr\u1ee3 t\u1ef1 \u0111\u1ed9ng h\u00f3a tr\u00ecnh duy\u1ec7t. D\u1ef1 \u00e1n \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh theo gi\u1ea5y ph\u00e9p MIT.\n\nTh\u01b0\u1eddng, AI agent n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c d\u00f9ng nh\u01b0 m\u1ed9t tr\u1ee3 l\u00fd th\u1ef1c th\u1ee5. Kh\u00f4ng ch\u1ec9 c\u00f3 ...","contents":"# Kh\u00e1i ni\u1ec7m\n\u201cHermes Agent\u201d l\u00e0 t\u00ean c\u1ee7a m\u1ed9t AI agent m\u00e3 ngu\u1ed3n m\u1edf do Nous Research ph\u00e1t tri\u1ec3n. N\u00f3 \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 l\u00e0 m\u1ed9t agent ch\u1ea1y b\u1ec1n v\u1eefng tr\u00ean m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n, c\u00f3 b\u1ed9 nh\u1edb d\u00e0i h\u1ea1n, c\u00f3 th\u1ec3 h\u1ecdc d\u1ea7n theo th\u1eddi gian, k\u1ebft n\u1ed1i v\u1edbi nhi\u1ec1u n\u1ec1n t\u1ea3ng nh\u1eafn tin\/c\u00f4ng c\u1ee5, v\u00e0 h\u1ed7 tr\u1ee3 t\u1ef1 \u0111\u1ed9ng h\u00f3a tr\u00ecnh duy\u1ec7t. D\u1ef1 \u00e1n \u0111\u01b0\u1ee3c ph\u00e1t h\u00e0nh theo gi\u1ea5y ph\u00e9p MIT.\n\nTh\u01b0\u1eddng, AI agent n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c d\u00f9ng nh\u01b0 m\u1ed9t tr\u1ee3 l\u00fd th\u1ef1c th\u1ee5. Kh\u00f4ng ch\u1ec9 c\u00f3 th\u1ec3 tr\u1ea3 l\u1eddi tin nh\u1eafn hay l\u00e0 k\u1ebft n\u1ed1i \u0111\u1ebfn b\u00ean th\u1ee9 ba \u0111\u1ec3 tr\u1ea3 l\u1eddi th\u00f4ng tin cho b\u1ea1n n\u1eefa. M\u00e0 n\u00f3 c\u00f3 th\u1ec3 qu\u1ea3n l\u00ed m\u00e1y b\u1ea1n, gi\u00fap b\u1ea1n deploy web app ch\u1eb3ng h\u1ea1n. Ngo\u00e0i ra, n\u00f3 c\u00f3 b\u1ed9 nh\u1edb d\u00e0i h\u1ea1n c\u00f3 th\u1ec3 ghi nh\u1edb l\u1ea1i nh\u1eefng th\u00f3i quen ho\u1eb7c l\u00e0 nh\u1eefng l\u01b0u \u00fd c\u1ee7a b\u1ea1n. Song song \u0111\u00f3 l\u00e0 kh\u1ea3 n\u0103ng t\u1ef1 h\u1ecdc h\u1ecfi. Khi m\u00e0 l\u00e0m m\u1ed9t task g\u00ec \u0111\u00f3 l\u1eb7p \u0111i l\u1eb7p l\u1ea1i, th\u00ec n\u00f3 s\u1ebd ch\u1ee7 \u0111\u1ed9ng t\u1ea1o th\u00e0nh skill \u0111\u1ec3 sau n\u00e0y c\u00f3 th\u1ec3 t\u00e1i s\u1eed d\u1ee5ng l\u1ea1i m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i suy ngh\u0129, x\u1eed l\u00ed qu\u00e1 nhi\u1ec1u. \u0110i\u1ec1u n\u00e0y gi\u00fap gi\u1ea3m chi ph\u00ed token \u0111\u00e1ng k\u1ebf cho nh\u1eefng c\u00f4ng vi\u1ec7c g\u1ea7n g\u1ea7n gi\u1ed1ng nhau. Cu\u1ed1i c\u00f9ng l\u00e0 h\u1ed7 tr\u1ee3 nhi\u1ec1u gateway \u0111\u1ebfn nh\u1eefng \u1ee9ng d\u1ee5ng nh\u1eafn tin c\u00f3 th\u1ec3 d\u00f9ng tr\u00ean \u0111i\u1ec7n tho\u1ea1i nh\u01b0 Telegram, Discord,... Gi\u00fap b\u1ea1n c\u00f3 th\u1ec3 qu\u1ea3n l\u00ed AI agent \u0111\u1ec3 thao t\u00e1c c\u00f4ng vi\u1ec7c, qu\u1ea3n l\u00ed m\u00e1y ngay tr\u00ean \u0111i\u1ec7n tho\u1ea1i c\u1ee7a m\u00ecnh.\n\n# C\u00e0i \u0110\u1eb7t\n\u0110\u1ec3 c\u00e0i \u0111\u1eb7t, c\u00e1c b\u1ea1n ch\u1ea1y c\u00e2u l\u1ec7nh:\n```\ncurl -fsSL https:\/\/raw.githubusercontent.com\/NousResearch\/hermes-agent\/main\/scripts\/install.sh | bash\n```\nSau \u0111\u00f3 l\u00e0m m\u1edbi l\u1ea1i terminal \u0111ang s\u1eed d\u1ee5ng:\n```\nsource ~\/.bashrc    # reload shell (or: source ~\/.zshrc)\n```\nH\u1ecd\u0103c c\u00f3 th\u1ec3 \u0111\u00f3ng terminal r\u1ed3i m\u1edf l\u1ea1i. Sau \u0111\u00f3, ch\u1ea1y th\u1eed l\u1ec7nh `hermes`. N\u1ebfu hi\u1ec7n ra nh\u01b0 th\u1ebf n\u00e0y th\u00ec b\u1ea1n \u0111\u00e3 th\u00e0nh c\u00f4ng c\u00e0i \u0111\u1eb7t hermes agent l\u00ean tr\u00ean m\u00e1y.\n\n![image.png](https:\/\/images.viblo.asia\/a5333ffe-ca42-4832-8f41-3a86dada1909.png)\n\nTh\u1eed h\u1ecfi xem n\u00f3 l\u00e0 ai.\n\n![image.png](https:\/\/images.viblo.asia\/f352b638-f25b-4d59-86a0-d5224cf0181b.png)\n\n# SOUL.md\nTh\u01b0\u1eddng th\u00ec khi d\u00f9ng AI, ch\u00fang ta s\u1ebd mu\u1ed1n c\u00e0i \u0111\u1eb7t system prompt \u0111\u1ec3 cho AI bi\u1ebft n\u00f3 l\u00e0 ai. N\u00f3 c\u1ea7n l\u00e0m g\u00ec. M\u1ee5c \u0111\u00edch l\u00e0 \u0111\u1ec3 AI c\u00f3 th\u1ec3 chuy\u00ean s\u00e2u h\u01a1n v\u00e0o trong c\u00f4ng vi\u1ec7c m\u00e0 n\u00f3 mu\u1ed1n l\u00e0m. L\u1ea5y v\u00ed d\u1ee5, m\u1ed9t con AI kh\u00f4ng c\u00f3 system prompt. Khi m\u00e0 b\u1ea1n k\u00eau n\u00f3 l\u00e0 vi\u1ebft cho t\u00f4i m\u1ed9t ch\u01b0\u01a1ng tr\u00ecnh Hello World. N\u00f3 s\u1ebd ch\u1ecdn ng\u00f4n ng\u1eef m\u00e0 n\u00f3 \u0111\u01b0\u1ee3c train nhi\u1ec1u ho\u1eb7c l\u00e0 n\u00f3 c\u1ea3m th\u1ea5y ok \u0111\u1ec3 vi\u1ebft. Nh\u01b0 v\u1eady, n\u1ebfu b\u1ea1n mu\u1ed1n n\u00f3 vi\u1ebft \u1edf m\u1ed9t ng\u00f4n ng\u1eef nh\u1ea5t \u0111\u1ecbnh. Th\u00ec s\u1ebd kh\u00f4ng \u0111\u01b0\u1ee3c. B\u1ea1n c\u00f3 th\u1ec3 th\u00eam c\u00e1i n\u00e0y trong prompt c\u1ee7a m\u00ecnh. Nh\u01b0ng khi m\u00e0 qua m\u1ed9t session m\u1edbi, th\u00ec AI s\u1ebd qu\u00ean ngay l\u00e0 b\u1ea1n \u0111ang mu\u1ed1n vi\u1ebft \u1edf ng\u00f4n ng\u1eef n\u00e0o. \u0110\u00f3 l\u00e0 l\u00ed do ch\u00fang ta c\u1ea7n system prompt. N\u00f3 s\u1ebd \u0111\u01b0\u1ee3c t\u00e1i s\u1eed d\u1ee5ng xuy\u00ean su\u1ed1t c\u00e1c session. N\u1ebfu b\u1ea1n mu\u1ed1n n\u00f3 l\u00e0 chuy\u00ean gia PHP, b\u1ea1n c\u00f3 th\u1ec3 th\u00eam v\u00e0o system prompt l\u00e0 \"You are an expert in PHP\". Th\u00ec b\u1ea5t k\u00ec prompt n\u00e0o c\u1ee7a b\u1ea1n, AI c\u0169ng s\u1ebd \u0111\u1ecdc system prompt tr\u01b0\u1edbc v\u00e0 hi\u1ec3u l\u00e0 n\u00f3 l\u00e0 chuy\u00ean gia PHP. V\u00e0 v\u1edbi nh\u1eefng prompt c\u1ee7a b\u1ea1n, n\u00f3 s\u1ebd c\u1ed1 g\u1eafng apply d\u00f9ng PHP v\u00e0 nh\u1eefng ki\u1ebfn th\u1ee9c li\u00ean quan \u0111\u1ebfn PHP.\n\n![image.png](https:\/\/images.viblo.asia\/40f62cc2-59b5-49aa-82f9-c2e042bd9582.png)\n\nTrong hermes agent, c\u00f3 SOUL.md t\u01b0\u01a1ng t\u1ef1 nh\u01b0 system prompt. \u0110\u1ec3 t\u1ed1i \u01b0u s\u1eed d\u1ee5ng, th\u00ec ch\u00fang ta n\u00ean setup SOUL.md c\u1ee7a con agent n\u00e0y. \u0110\u1ec3 setup SOUL.md, c\u00e1c b\u1ea1n v\u00e0o `~\/.hermes\/SOUL.md`.  \u0110\u00e2y l\u00e0 m\u1eb7c \u0111\u1ecbnh.\n\n![image.png](https:\/\/images.viblo.asia\/9bab9562-dfbf-4f77-bc82-c4c34ba177e1.png)\n\nM\u00ecnh \u0111\u1ed5i th\u00e0nh:\n\n![image.png](https:\/\/images.viblo.asia\/3d29c485-e491-4a02-a268-1eebcd7bd17b.png)\n\nK\u1ebft qu\u1ea3 khi h\u1ecfi th\u00ec agent \u0111\u00e3 bi\u1ebft n\u00f3 l\u00e0 expert PHP. \n\n![image.png](https:\/\/images.viblo.asia\/561354dd-936e-4973-842f-afe895b54be9.png)\n\n# Session\n\u0110\u1ebfn \u0111\u00e2y, m\u00ecnh t\u1ef1 h\u1ecfi. Sao ph\u1ee9c t\u1ea1p v\u1eady. \u0110\u1ec3 nguy\u00ean v\u1eady r\u1ed3i h\u1ecfi t\u1eeb \u0111\u1ea7u t\u1edbi cu\u1ed1i th\u00f4i. N\u00f3 t\u1ef1 nh\u1edb. C\u1ea7n g\u00ec system prompt cho phi\u1ec1n. Ai r\u1ea3nh \u0111\u00e2u t\u1ea1o session m\u1edbi.\n\n\u0110\u00fang r\u1ed3i, khi m\u1edbi l\u00e0m, ch\u00fang ta s\u1ebd c\u00f3 xu h\u01b0\u1edbng gi\u1eef session v\u00e0 c\u1ee9 th\u1ebf m\u00e0 h\u1ecfi. N\u00ean l\u00e0 trong c\u00e2u prompt th\u1ee9 1 b\u1ea1n b\u1ea3o n\u00f3 l\u00e0 expert PHP th\u00ec \u0111\u1ebfn c\u00e2u th\u1ee9 100, AI v\u1eabn s\u1ebd nh\u1edb n\u00f3 l\u00e0 expert PHP. Nh\u01b0ng c\u00f3 m\u1ed9t \u0111i\u1ec1u, c\u00e0ng v\u1ec1 l\u00e2u v\u1ec1 d\u00e0i, b\u1ea1n s\u1ebd th\u1ea5y n\u00f3 l\u00e0m vi\u1ec7c c\u00e0ng t\u1ec7. V\u00e0 \u0111\u00f4i khi n\u00f3 b\u1ecb r\u1ed1i n\u1ebfu m\u00e0 b\u1ea1n h\u1ecfi nhi\u1ec1u ch\u1ee7 \u0111\u1ec1 trong 1 c\u00e1i sessions. \n\nV\u00ed d\u1ee5 nh\u01b0 b\u1ea1n \u0111ang l\u00e0m vi\u1ec7c \u1edf th\u01b0 m\u1ee5c workspace1. B\u1ea1n k\u00eau n\u00f3 xong r\u1ed3i th\u00ec l\u01b0u v\u00e0o th\u01b0 m\u1ee5c k\u1ebft qu\u1ea3. Khi xong, n\u00f3 s\u1ebd l\u01b0u \u1edf workspace1\/result. Nh\u01b0ng n\u1ebfu gi\u1eefa ch\u1eebng b\u1ea1n \u0111\u1ed5i sang workspace2 \u0111\u1ec3 l\u00e0m chuy\u1ec7n kh\u00e1c. Xong r\u1ed3i b\u1ea1n l\u1ea1i mu\u1ed1n ti\u1ebfp t\u1ee5c c\u00f4ng vi\u1ec7c \u1edf workspace1 nh\u01b0ng m\u00e0 b\u1ea1n ch\u1ec9 k\u00eau l\u00e0 l\u01b0u v\u00e0o result th\u00ec n\u00f3 s\u1ebd d\u00f9ng workspace2\/result. T\u1ea1i v\u00ec n\u00f3 t\u01b0\u1edfng b\u1ea1n \u0111ang l\u00e0m vi\u1ec7c tr\u00ean workspace2. N\u1ebfu b\u1ea1n t\u00e1ch ra l\u00e0m 2 session ri\u00eang bi\u1ec7t. Session 1 cho workspace1 v\u00e0 session 2 cho workspace 2. Th\u00ec trong session 1, khi k\u00eau ghi v\u00e0o result, n\u00f3 s\u1ebd bi\u1ebft ghi v\u00e0o workspace1\/result. T\u01b0\u01a1ng t\u1ef1 cho session 2 n\u00f3 s\u1ebd bi\u1ebft ghi v\u00e0o workspace2\/result. \n\nTi\u1ebfp theo l\u00e0 l\u00e0m c\u00e0ng l\u00e2u th\u00ec n\u00f3 s\u1ebd c\u00e0ng t\u1ec7. V\u00ec m\u1ed7i m\u1ed9t model, n\u00f3 s\u1ebd c\u00f3 context window size. \n![image.png](https:\/\/images.viblo.asia\/2065fd21-d5de-4e2d-804d-52038e54a260.png)\n\n\u1ede thanh n\u00e0y n\u00f3 hi\u1ec3n th\u1ecb model m\u00ecnh d\u00f9ng l\u00e0 minimax 2.7 highspeed. Context window size l\u00e0 204.8k. M\u1ed7i l\u1ea7n b\u1ea1n prompt v\u00e0 AI tr\u1ea3 l\u1eddi th\u00ec n\u00f3 s\u1ebd ti\u00eau t\u1ed1n ch\u1ed7 c\u1ee7a c\u00e1i context window size n\u00e0y.  \u1ede thanh n\u00e0y n\u00f3 hi\u1ec3n th\u1ecb model m\u00ecnh d\u00f9ng l\u00e0 minimax 2.7 highspeed. Context window size l\u00e0 204.8k. M\u1ed7i l\u1ea7n b\u1ea1n prompt v\u00e0 AI tr\u1ea3 l\u1eddi th\u00ec n\u00f3 s\u1ebd ti\u00eau t\u1ed1n ch\u1ed7 c\u1ee7a c\u00e1i context window size n\u00e0y. Nh\u00ecn h\u00ecnh ta th\u1ea5y, m\u00ecnh h\u1ecfi m\u1ed9t c\u00e2u, xong AI tr\u1ea3 l\u1eddi l\u1ea1i th\u00ec t\u1ed1n 11.7k token. \u0110\u1ebfn khi m\u00e0 s\u1ed1 token n\u00e0y v\u01b0\u1ee3t qu\u00e1 204.8k th\u00ec model n\u00e0y kh\u00f4ng th\u1ec3 handle \u0111\u01b0\u1ee3c n\u1eefa. N\u00f3 s\u1ebd c\u1ed1 g\u1eafng n\u00e9n ng\u1eef c\u1ea3nh hi\u1ec7n t\u1ea1i l\u1ea1i b\u1eb1ng c\u00e1ch t\u00f3m t\u1eaft. V\u00ed d\u1ee5 nh\u01b0 b\u1ea1n \u0111ang d\u00f9ng 200k token, gi\u1edd n\u00f3 v\u01b0\u1ee3t m\u1ee9c pickleball r\u1ed3i, n\u00f3 s\u1ebd t\u00f3m t\u1eaft ng\u1eef c\u1ea3nh hi\u1ec7n t\u1ea1i l\u1ea1i v\u00e0 sau khi t\u00f3m t\u1eaft ch\u1ec9 t\u1ed1n t\u1ea7m 10k token th\u00f4i. Nh\u01b0 v\u1eady b\u1ea1n c\u00f3 th\u1ec3 ti\u1ebfp t\u1ee5c chat v\u1edbi model c\u00f9ng v\u1edbi t\u00f3m t\u1eaft c\u1ee7a ng\u1eef c\u1ea3nh tr\u01b0\u1edbc. Khi t\u00f3m t\u1eaft th\u00ec s\u1ebd b\u1ecb m\u1ea5t th\u00f4ng tin, n\u00ean \u0111\u00f4i khi nh\u1eefng c\u00e1i b\u1ea1n \u0111\u00e3 n\u00f3i, n\u00f3 kh\u00f4ng c\u00f3 trong t\u00f3m t\u1eaft th\u00ec n\u00f3 s\u1ebd qu\u00ean.\n\n![image.png](https:\/\/images.viblo.asia\/087b4762-385d-4f14-b6a8-90e7e9072686.png)\n\n\u0110\u00f3 l\u00e0 l\u00fd do, ch\u00fang ta n\u00ean d\u00f9ng system prompt. V\u00e0 khi l\u00e0m m\u1ed9t task kh\u00e1c th\u00ec n\u00ean m\u1edf m\u1ed9t session m\u1edbi \u0111\u1ec3 th\u1ef1c hi\u1ec7n m\u1ed9t task m\u1edbi \u0111\u00f3 thay v\u00ec d\u00f9ng chung v\u1edbi session c\u0169. \u0110\u1ec3 t\u1ea1o m\u1edbi session, ch\u00fang ta d\u00f9ng command `\/new`.\n\n![image.png](https:\/\/images.viblo.asia\/1c01f71e-46ff-4d95-9067-87c471cb38de.png)\n\n# Prompt\nKhi m\u1edf l\u00ean, thanh n\u00e0y s\u1ebd gi\u00fap cho b\u1ea1n c\u00f3 th\u1ec3 giao ti\u1ebfp v\u1edbi AI. G\u1ecdi l\u00e0 prompt. B\u1ea1n c\u00f3 th\u1ec3 k\u00eau AI l\u00e0m nh\u1eefng th\u1ee9 b\u1ea1n mu\u1ed1n.\n![image.png](https:\/\/images.viblo.asia\/54ba257b-b054-4672-9247-64f8b10e8c69.png)\n\n\u1ede \u0111\u00e2y m\u00ecnh s\u1ebd k\u00eau t\u00f3m t\u1eaft video youtube. Khi l\u00e0m vi\u1ec7c, hermes agent s\u1ebd show cho ch\u00fang ta th\u1ea5y t\u1eebng b\u01b0\u1edbc n\u00f3 th\u1ef1c hi\u1ec7n nh\u01b0 l\u00e0 s\u1eed d\u1ee5ng skill, truy c\u1eadp browser,...\n\n![image.png](https:\/\/images.viblo.asia\/09b9d365-48ac-4daf-8797-d120ad4768cd.png)\n\nV\u00e0 \u0111\u00e2y l\u00e0 k\u1ebft qu\u1ea3\n\n![image.png](https:\/\/images.viblo.asia\/ed44649d-ac65-4453-a734-57737bd491e6.png)\n\n# Gateway\nN\u1ebfu b\u1ea1n mu\u1ed1n d\u00f9ng AI agent c\u1ee7a m\u00ecnh th\u00f4ng qua nh\u1eefng \u1ee9ng d\u1ee5ng chat nh\u01b0 telegram, discord,... \u0111\u1ec3 team c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng ho\u1eb7c l\u00e0 \u0111\u01a1n gi\u1ea3n b\u1ea1n c\u00f3 th\u1ec3 chat v\u1edbi AI th\u00f4ng qua d\u00f9ng app chat th\u00ec s\u1ebd c\u1ea7n setup gateway.\n\n![image.png](https:\/\/images.viblo.asia\/ab5bde8d-79ea-4c25-836f-6b37a0a02d85.png)\n\nM\u00ecnh s\u1ebd d\u00f9ng telegram l\u00e0m v\u00ed d\u1ee5. Tr\u01b0\u1edbc h\u1ebft, c\u00e1c b\u1ea1n c\u1ea7n d\u00f9ng bot father trong telegram \u0111\u1ec3 t\u1ea1o bot. Sau khi t\u1ea1o, th\u00ec c\u00f3 tr\u01b0\u1eddng \u0111\u1ea7u ti\u00ean s\u1ebd l\u00e0 ch\u1ed7 \u0111\u1ec3 b\u1ea1n truy c\u1eadp v\u00e0o con bot c\u1ee7a m\u00ecnh. Tr\u01b0\u1eddng th\u1ee9 hai s\u1ebd l\u00e0 token \u0111\u1ec3 b\u1ea1n d\u00e1n v\u00e0o telegram token sau. \n\n![image.png](https:\/\/images.viblo.asia\/ab335e55-d7b5-4c64-8432-6f6a10b0c354.png)\n\n\u0110\u1ec3 setup, b\u1ea1n ch\u1ecdn l\u1ec7nh `hermes gateway setup`. Sau \u0111\u00f3 b\u1ea1n ch\u1ecdn gateway telegram Sau \u0111\u00f3, b\u1ea1n paste token khi n\u00e3y v\u00e0o ph\u1ea7n \u0111\u1ea7u ti\u00ean `bot token`. \u1ede field allow user id, b\u1ea1n truy c\u1eadp v\u00e0o @userinfobot  \u0111\u1ec3 l\u1ea5y user id, sau \u0111\u00f3 ch\u00e9p v\u00e0o \u0111\u00e2y.\n\n![image.png](https:\/\/images.viblo.asia\/ea9c2293-2d1b-4b0b-9d57-b7cf582356c4.png)\n\n![image.png](https:\/\/images.viblo.asia\/bbf4f134-5fa3-459f-9c51-aa4abb764bce.png)\n![image.png](https:\/\/images.viblo.asia\/05047015-820a-4ce2-8535-d55ef302e519.png)\n\n\u1ede \u0111\u00e2y b\u1ea1n ch\u1ecdn Enable open access n\u1ebfu cho ph\u00e9p ai c\u0169ng nh\u1eafn \u0111\u01b0\u1ee3c. C\u00f2n Use DM pairing l\u00e0 ch\u1ec9 cho ph\u00e9p nh\u1eafn khi m\u00e0 b\u1ea1n approve.\n\n![image.png](https:\/\/images.viblo.asia\/7bdb4c77-0576-4ef7-88bc-519a64665380.png)\n![image.png](https:\/\/images.viblo.asia\/61e46a1d-e968-4368-9a19-3a0190a9727c.png)\n\n V\u1edbi gateway, th\u00ec b\u1ea1n ch\u1ecdn option 1 n\u1ebfu mu\u1ed1n ch\u1ea1y manual. M\u1ed7i l\u1ea7n ch\u1ea1y b\u1ea1n s\u1ebd ph\u1ea3i ch\u1ea1y l\u1ec7nh `hermes gateway start`.  Ch\u1ecdn option 2 \u0111\u1ec3 n\u00f3 ch\u1ea1y t\u1ef1 \u0111\u1ed9ng nh\u01b0 service. B\u1ea1n kh\u00f4ng ph\u1ea3i ch\u1ea1y l\u1ec7nh `hermes gateway start`. M\u00e1y b\u1ea1n ch\u1ea1y l\u00e0 c\u00e1i gateway n\u00e0y s\u1ebd t\u1ef1 \u0111\u1ed9ng ch\u1ea1y.\n \n![image.png](https:\/\/images.viblo.asia\/43e814ef-e271-41e5-a73b-c481d68cef2c.png)\n\nTest. M\u00ecnh k\u00eau n\u00f3 l\u00e0m l\u1ea1i c\u00e1i task brief video m\u00e0 l\u1ea7n n\u00e0y tr\u00ean telegram.\n\n![image.png](https:\/\/images.viblo.asia\/57a06785-f7c9-4bae-98cc-015a6f565d67.png)\n\nK\u1ebft qu\u1ea3:\n\n![image.png](https:\/\/images.viblo.asia\/730cb190-7313-4e18-bef0-bba650d52831.png)\n\n# K\u1ebft\n\nOk, s\u01b0\u01a1ng s\u01b0\u01a1ng v\u1eady tr\u01b0\u1edbc. B\u00e0i ti\u1ebfp theo m\u00ecnh s\u1ebd h\u01b0\u1edbng d\u1eabn nhi\u1ec1u c\u00e1i h\u01a1n n\u1eefa. N\u1ebfu c\u00e1c b\u1ea1n c\u1ea7n h\u1ed7 tr\u1ee3 g\u00ec th\u00ec comment nh\u00e9.","published_at":"2026-04-19T03:52:03.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:16:03.000000Z","edited_at":"2026-04-19T03:49:55.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":9,"points":0,"views_count":43,"clips_count":0,"comments_count":0,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/5e24559c-e0b2-4d01-bf1e-ecd8cf73130c.png","user":{"data":{"id":51925,"url":"https:\/\/viblo.asia\/u\/lamkimphu258","avatar":"6bccea33-652d-4e87-9225-7b3e92d93c08.jpg","name":"L\u00e2m Kim Ph\u00fa","username":"lamkimphu258","followers_count":22,"reputation":865,"posts_count":41,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"ai","name":"AI"},{"slug":"ai-agent","name":"AI Agent"},{"slug":"hermes-agent","name":"hermes agent"}]},"commentators":{"data":[]}},{"id":93031,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 12: H\u00e0m kh\u1edfi t\u1ea1o m\u1eb7c \u0111\u1ecbnh (Default Constructor) - C\u00e1ch C++ \"ch\u00e0o \u0111\u1eddi\" m\u1ed9t Object!","slug":"XRJ8R0eqVGq","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-12-ham-khoi-tao-mac-dinh-default-constructor-cach-c-chao-doi-mot-object-XRJ8R0eqVGq","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-12-ham-khoi-tao-mac-dinh-default-constructor-cach-c-chao-doi-mot-object","contents_short":"Ch\u00e0o anh em! \u1ede cu\u1ed1i [B\u00e0i 11], ch\u00fang ta \u0111\u00e3 thi\u1ebft k\u1ebf Class Character v\u1edbi m\u1ed9t Constructor (H\u00e0m kh\u1edfi t\u1ea1o) y\u00eau c\u1ea7u truy\u1ec1n v\u00e0o 3 tham s\u1ed1: T\u00ean, M\u00e1u, S\u00e1t th\u01b0\u01a1ng.\n\nNh\u01b0ng n\u1ebfu b\u1ea1n mu\u1ed1n t\u1ea1o ra m\u1ed9t nh\u00e2n v\u1eadt r\u1ed7ng (qu\u00e1i v\u1eadt c\u00f9i b\u1eafp, ho\u1eb7c NPC \u0111\u1ee9ng \u0111\u01b0\u1eddng) m\u00e0 kh\u00f4ng mu\u1ed1n m\u1ea5t c\u00f4ng truy\u1ec1n tham s\u1ed1:\n\nT\u1ea1i sao l\u1ea1i c\u00f3 l\u1ed7i n\u00e0y? \u0110\u1ec3 hi\u1ec3u r\u00f5, ch\u00fang ta ph\u1ea3i \u0111i s\u00e2u v\u00e0o c\u01a1 ch\u1ebf Default Constructor (H\u00e0m kh\u1edfi t\u1ea1o m\u1eb7c \u0111\u1ecbnh) c\u1ee7a C+...","contents":"Ch\u00e0o anh em! \u1ede cu\u1ed1i [B\u00e0i 11], ch\u00fang ta \u0111\u00e3 thi\u1ebft k\u1ebf Class `Character` v\u1edbi m\u1ed9t Constructor (H\u00e0m kh\u1edfi t\u1ea1o) y\u00eau c\u1ea7u truy\u1ec1n v\u00e0o 3 tham s\u1ed1: T\u00ean, M\u00e1u, S\u00e1t th\u01b0\u01a1ng.\n\n```\nCharacter hero(\"B\u1ed1 \u0110\u1eddi\", 1000, 150); \/\/ Ch\u1ea1y ngon l\u00e0nh\n```\n\nNh\u01b0ng n\u1ebfu b\u1ea1n mu\u1ed1n t\u1ea1o ra m\u1ed9t nh\u00e2n v\u1eadt r\u1ed7ng (qu\u00e1i v\u1eadt c\u00f9i b\u1eafp, ho\u1eb7c NPC \u0111\u1ee9ng \u0111\u01b0\u1eddng) m\u00e0 kh\u00f4ng mu\u1ed1n m\u1ea5t c\u00f4ng truy\u1ec1n tham s\u1ed1:\n\n```\nCharacter npc; \/\/ B\u00d9M! L\u1ed6I COMPILER NGAY L\u1eacP T\u1ee8C!\n```\n\nT\u1ea1i sao l\u1ea1i c\u00f3 l\u1ed7i n\u00e0y? \u0110\u1ec3 hi\u1ec3u r\u00f5, ch\u00fang ta ph\u1ea3i \u0111i s\u00e2u v\u00e0o c\u01a1 ch\u1ebf Default Constructor (H\u00e0m kh\u1edfi t\u1ea1o m\u1eb7c \u0111\u1ecbnh) c\u1ee7a C++.\n\n### 1. B\u1eefa tr\u01b0a mi\u1ec5n ph\u00ed v\u00e0 \"Gi\u00e1 tr\u1ecb r\u00e1c\"\n\nH\u00e0m kh\u1edfi t\u1ea1o (Constructor) l\u00e0 m\u1ed9t h\u00e0m \u0111\u1eb7c bi\u1ec7t:\n\n1. T\u00ean h\u00e0m GI\u1ed0NG H\u1ec6T t\u00ean Class.\n2. KH\u00d4NG c\u00f3 ki\u1ec3u tr\u1ea3 v\u1ec1 (k\u1ec3 c\u1ea3 `void`).\n3. T\u1ef1 \u0111\u1ed9ng ch\u1ea1y \u0110\u00daNG 1 L\u1ea6N duy nh\u1ea5t khi Object \u0111\u01b0\u1ee3c c\u1ea5p ph\u00e1t memory.\n\nQuy t\u1eafc ng\u1ea7m th\u1ee9 1: N\u1ebfu b\u1ea1n l\u01b0\u1eddi bi\u1ebfng, kh\u00f4ng th\u00e8m vi\u1ebft b\u1ea5t k\u1ef3 Constructor n\u00e0o cho Class, C++ s\u1ebd t\u1eb7ng b\u1ea1n m\u1ed9t \"B\u1eefa tr\u01b0a mi\u1ec5n ph\u00ed\". N\u00f3 t\u1ef1 \u0111\u1ed9ng sinh ra m\u1ed9t Default Constructor v\u00f4 h\u00ecnh kh\u00f4ng nh\u1eadn tham s\u1ed1 n\u00e0o c\u1ea3.\nNh\u1edd v\u1eady, b\u1ea1n m\u1edbi c\u00f3 th\u1ec3 g\u00f5 `Character npc`; m\u00e0 kh\u00f4ng b\u1ecb l\u1ed7i.\n\nNh\u01b0ng \u0111\u1eddi kh\u00f4ng nh\u01b0 m\u01a1! C\u00e1i Default Constructor mi\u1ec5n ph\u00ed n\u00e0y l\u00e0m vi\u1ec7c r\u1ea5t \"v\u00f4 tr\u00e1ch nhi\u1ec7m\". N\u00f3 ch\u1ec9 xin RAM cho Object c\u1ee7a b\u1ea1n, ch\u1ee9 kh\u00f4ng d\u1ecdn d\u1eb9p RAM. K\u1ebft qu\u1ea3 l\u00e0 c\u00e1c thu\u1ed9c t\u00ednh ki\u1ec3u s\u1ed1 (`int`, `float`, con tr\u1ecf...) c\u1ee7a b\u1ea1n s\u1ebd mang gi\u00e1 tr\u1ecb r\u00e1c (Garbage Value) - nh\u1eefng con s\u1ed1 ng\u1eabu nhi\u00ean c\u00f2n s\u00f3t l\u1ea1i t\u1eeb ph\u1ea7n m\u1ec1m tr\u01b0\u1edbc \u0111\u00f3 d\u00f9ng v\u00f9ng RAM n\u00e0y.\n\nN\u1ebfu h\u1ec7 th\u1ed1ng Backend c\u1ee7a b\u1ea1n d\u00f9ng gi\u00e1 tr\u1ecb r\u00e1c n\u00e0y \u0111\u1ec3 t\u00ednh ti\u1ec1n, th\u00ec toang th\u1eadt s\u1ef1!\n\n### 2. S\u1ef1 t\u00e0n nh\u1eabn c\u1ee7a C++: \u0110\u00e3 cho th\u00ec \u0111\u01b0\u1ee3c quy\u1ec1n \u0111\u00f2i l\u1ea1i!\n\nQuay l\u1ea1i v\u1edbi l\u1ed7i \u1edf B\u00e0i 11. T\u1ea1i sao `Character npc;` l\u1ea1i v\u0103ng l\u1ed7i?\n\nQuy t\u1eafc ng\u1ea7m th\u1ee9 2: Ngay gi\u00e2y ph\u00fat b\u1ea1n t\u1ef1 tay \u0111\u1ecbnh ngh\u0129a M\u1ed8T Constructor b\u1ea5t k\u1ef3 (v\u00ed d\u1ee5 c\u00e1i Constructor nh\u1eadn 3 tham s\u1ed1 c\u1ee7a ch\u00fang ta), C++ s\u1ebd m\u1eb7c \u0111\u1ecbnh: \"\u00c0, th\u1eb1ng Dev n\u00e0y bi\u1ebft c\u00e1ch kh\u1edfi t\u1ea1o r\u1ed3i, m\u00ecnh r\u00fat l\u1ea1i c\u00e1i Default Constructor mi\u1ec5n ph\u00ed th\u00f4i!\".\n\nV\u00e0 th\u1ebf l\u00e0, Class `Character` c\u1ee7a b\u1ea1n kh\u00f4ng c\u00f2n h\u00e0m kh\u1edfi t\u1ea1o kh\u00f4ng-tham-s\u1ed1 n\u1eefa. L\u1ec7nh `Character npc;` th\u1ea5t b\u1ea1i v\u00ec C++ kh\u00f4ng t\u00ecm th\u1ea5y h\u00e0m n\u00e0o kh\u1edbp v\u1edbi vi\u1ec7c \"kh\u00f4ng truy\u1ec1n g\u00ec c\u1ea3\".\n\n### 3. Code Demo: Gi\u00e0nh l\u1ea1i quy\u1ec1n ki\u1ec3m so\u00e1t\n\n\u0110\u1ec3 h\u1ec7 th\u1ed1ng v\u1eeba linh ho\u1ea1t (cho ph\u00e9p t\u1ea1o NPC m\u1eb7c \u0111\u1ecbnh), v\u1eeba t\u00f9y bi\u1ebfn (cho ph\u00e9p t\u1ea1o Hero truy\u1ec1n s\u1ed1 li\u1ec7u), K\u1ef9 s\u01b0 C++ s\u1ebd s\u1eed d\u1ee5ng k\u1ef9 thu\u1eadt Overloading (N\u1ea1p ch\u1ed3ng h\u00e0m) - vi\u1ebft nhi\u1ec1u Constructor c\u00f9ng l\u00fac!\n\n\u0110\u1ed3ng th\u1eddi, ch\u00fang ta s\u1ebd t\u1ef1 tay kh\u1edfi t\u1ea1o gi\u00e1 tr\u1ecb an to\u00e0n (Default values) \u0111\u1ec3 d\u1eadp t\u1eaft hi\u1ec3m h\u1ecda \"gi\u00e1 tr\u1ecb r\u00e1c\".\n\n```\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass Character {\nprivate:\n    string name;\n    int hp;\n    int damage;\n\npublic:\n    \/\/ 1. DEFAULT CONSTRUCTOR (H\u00e0m kh\u1edfi t\u1ea1o m\u1eb7c \u0111\u1ecbnh do ta t\u1ef1 vi\u1ebft)\n    \/\/ \u0110\u01b0\u1ee3c g\u1ecdi khi d\u00f9ng c\u00fa ph\u00e1p: Character npc;\n    Character() {\n        name = \"Unknown NPC\";\n        hp = 100; \/\/ Kh\u1edfi t\u1ea1o an to\u00e0n, t\u1ea1m bi\u1ec7t gi\u00e1 tr\u1ecb r\u00e1c!\n        damage = 10;\n        cout << \"[LOG] Da tao ra mot NPC mac dinh.\\n\";\n    }\n\n    \/\/ 2. PARAMETERIZED CONSTRUCTOR (H\u00e0m kh\u1edfi t\u1ea1o c\u00f3 tham s\u1ed1)\n    \/\/ \u0110\u01b0\u1ee3c g\u1ecdi khi d\u00f9ng c\u00fa ph\u00e1p: Character hero(\"B\u1ed1 \u0110\u1eddi\", 1000, 150);\n    Character(string n, int h, int d) {\n        name = n;\n        hp = h;\n        damage = d;\n        cout << \"[LOG] Da tao ra Hero: \" << name << \"\\n\";\n    }\n\n    void showStats() const {\n        cout << \"- \" << name << \" | HP: \" << hp << \" | DMG: \" << damage << \"\\n\";\n    }\n};\n\nint main() {\n    cout << \"--- HE THONG KHOI TAO GAME ---\\n\";\n\n    \/\/ C++ s\u1ebd t\u1ef1 \u0111\u1ed9ng d\u00f2 t\u00ecm Constructor kh\u1edbp v\u1edbi s\u1ed1 l\u01b0\u1ee3ng tham s\u1ed1 truy\u1ec1n v\u00e0o!\n\n    \/\/ Tr\u01b0\u1eddng h\u1ee3p 1: Kh\u00f4ng truy\u1ec1n g\u00ec -> G\u1ecdi Default Constructor\n    Character npc1; \n    \n    \/\/ Tr\u01b0\u1eddng h\u1ee3p 2: Truy\u1ec1n 3 tham s\u1ed1 -> G\u1ecdi Parameterized Constructor\n    Character hero(\"B\u1ed1 \u0110\u1eddi\", 1000, 150); \n\n    cout << \"\\n--- CHI SO NHAN VAT ---\\n\";\n    npc1.showStats();\n    hero.showStats();\n\n    return 0;\n}\n```\n\nNh\u1eadn x\u00e9t: Trong m\u1ed9t Class chu\u1ea9n d\u1ef1 \u00e1n, K\u1ef9 s\u01b0 ph\u1ea7n m\u1ec1m th\u01b0\u1eddng s\u1ebd LU\u00d4N LU\u00d4N vi\u1ebft m\u1ed9t Default Constructor. D\u00f9 n\u00f3 ch\u1ec9 l\u00e0 m\u1ed9t h\u00e0m tr\u1ed1ng ho\u1eb7c g\u00e1n c\u00e1c gi\u00e1 tr\u1ecb b\u1eb1ng 0, n\u00f3 gi\u00fap h\u1ec7 th\u1ed1ng an to\u00e0n, kh\u00f4ng b\u1ecb crash khi khai b\u00e1o m\u1ea3ng Object (`Character arr[100];` b\u1eaft bu\u1ed9c ph\u1ea3i c\u00f3 Default Constructor m\u1edbi ch\u1ea1y \u0111\u01b0\u1ee3c).\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nTuy\u1ec7t v\u1eddi! B\u1ea1n \u0111\u00e3 l\u1eadt t\u1ea9y \u0111\u01b0\u1ee3c c\u00e1ch C++ c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb ban \u0111\u1ea7u v\u00e0 hi\u1ec3u \u0111\u01b0\u1ee3c t\u1ea7m quan tr\u1ecdng c\u1ee7a vi\u1ec7c t\u1ef1 \u0111\u1ecbnh ngh\u0129a Default Constructor \u0111\u1ec3 ch\u1ed1ng l\u1ea1i \"gi\u00e1 tr\u1ecb r\u00e1c\".\n\nTuy nhi\u00ean, h\u00e3y nh\u00ecn l\u1ea1i c\u00e1i Constructor c\u00f3 tham s\u1ed1 m\u00e0 ch\u00fang ta \u0111\u00e3 vi\u1ebft:\n\n```\nCharacter(string n, int h, int d) {\n    name = n; \/\/ \u0110\u00c2Y L\u00c0 G\u00c1N CH\u1ee8 KH\u00d4NG PH\u1ea2I KH\u1edeI T\u1ea0O!\n    hp = h;\n}\n```\n\nM\u1eb7c d\u00f9 code ch\u1ea1y \u0111\u00fang, nh\u01b0ng d\u01b0\u1edbi g\u00f3c \u0111\u1ed9 t\u1ed1i \u01b0u hi\u1ec7u n\u0103ng (Performance) c\u1ee7a m\u1ed9t K\u1ef9 s\u01b0 C++, c\u00e1ch vi\u1ebft n\u00e0y c\u1ef1c k\u1ef3 \"ch\u1eadm ch\u1ea1p\" v\u00e0 t\u1ed1n t\u00e0i nguy\u00ean. T\u1ea1i sao l\u1ea1i nh\u01b0 v\u1eady? L\u00e0m sao \u0111\u1ec3 vi\u1ebft m\u1ed9t Constructor \"chu\u1ea9n Senior\"?\n\nH\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf B\u00e0i 13: Ph\u01b0\u01a1ng th\u1ee9c kh\u1edfi t\u1ea1o c\u00f3 tham s\u1ed1 truy\u1ec1n v\u00e0o (Ph\u1ea7n 1) - Ph\u00e2n bi\u1ec7t gi\u1eefa \"G\u00e1n\" v\u00e0 \"Kh\u1edfi t\u1ea1o\" th\u1ef1c s\u1ef1! Nh\u1edb Upvote \u0111\u1ec3 \u1ee7ng h\u1ed9 m\u00ecnh l\u00ean b\u00e0i \u0111\u1ec1u \u0111\u1eb7n nh\u00e9!","published_at":"2026-04-19T03:07:25.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T03:07:53.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":1,"views_count":13,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/0f9d2944-22ec-4646-924f-3ab1237b61c4.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"bad-programming","name":"Bad Programming"},{"slug":"constructor","name":"Constructor"},{"slug":"cpp","name":"C++"},{"slug":"overloading","name":"overloading"},{"slug":"back-end","name":"Back-end"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93030,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 11: Ph\u01b0\u01a1ng th\u1ee9c nh\u1eadn Object l\u00e0m tham s\u1ed1 - Khi c\u00e1c th\u1ef1c th\u1ec3 \"va ch\u1ea1m\"","slug":"1XVOWMEGVMz","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-11-phuong-thuc-nhan-object-lam-tham-so-khi-cac-thuc-the-va-cham-1XVOWMEGVMz","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-11-phuong-thuc-nhan-object-lam-tham-so-khi-cac-thuc-the-va-cham","contents_short":"Ch\u00e0o anh em! Trong 10 b\u00e0i v\u1eeba qua, ch\u00fang ta \u0111\u00e3 thi\u1ebft k\u1ebf ra nh\u1eefng Object r\u1ea5t x\u1ecbn x\u00f2 nh\u01b0ng ch\u00fang l\u1ea1i s\u1ed1ng... kh\u00e1 c\u00f4 l\u1eadp.\n\nTh\u1ef1c t\u1ebf khi l\u00e0m d\u1ef1 \u00e1n, c\u00e1c Object hi\u1ebfm khi \u0111\u1ee9ng m\u1ed9t m\u00ecnh. V\u00ed d\u1ee5:\n\n* H\u1ec7 th\u1ed1ng Game: Nh\u00e2n v\u1eadt A (Object A) tung chi\u00eau l\u00e0m gi\u1ea3m m\u00e1u c\u1ee7a Qu\u00e1i v\u1eadt B (Object B).\n* H\u1ec7 th\u1ed1ng Ng\u00e2n h\u00e0ng: T\u00e0i kho\u1ea3n A (Object A) chuy\u1ec3n 500k sang T\u00e0i kho\u1ea3n B (Object B).\n\nL\u00e0m sao \u0111\u1ec3 code \u0111\u01b0\u1ee3c logic n\u00e0y? R\u1ea5...","contents":"Ch\u00e0o anh em! Trong 10 b\u00e0i v\u1eeba qua, ch\u00fang ta \u0111\u00e3 thi\u1ebft k\u1ebf ra nh\u1eefng Object r\u1ea5t x\u1ecbn x\u00f2 nh\u01b0ng ch\u00fang l\u1ea1i s\u1ed1ng... kh\u00e1 c\u00f4 l\u1eadp.\n\nTh\u1ef1c t\u1ebf khi l\u00e0m d\u1ef1 \u00e1n, c\u00e1c Object hi\u1ebfm khi \u0111\u1ee9ng m\u1ed9t m\u00ecnh. V\u00ed d\u1ee5:\n\n* H\u1ec7 th\u1ed1ng Game: Nh\u00e2n v\u1eadt A (Object A) tung chi\u00eau l\u00e0m gi\u1ea3m m\u00e1u c\u1ee7a Qu\u00e1i v\u1eadt B (Object B).\n* H\u1ec7 th\u1ed1ng Ng\u00e2n h\u00e0ng: T\u00e0i kho\u1ea3n A (Object A) chuy\u1ec3n 500k sang T\u00e0i kho\u1ea3n B (Object B).\n\nL\u00e0m sao \u0111\u1ec3 code \u0111\u01b0\u1ee3c logic n\u00e0y? R\u1ea5t \u0111\u01a1n gi\u1ea3n: Class th\u1ef1c ch\u1ea5t c\u0169ng ch\u1ec9 l\u00e0 m\u1ed9t ki\u1ec3u d\u1eef li\u1ec7u do ch\u00fang ta t\u1ef1 \u0111\u1ecbnh ngh\u0129a. Gi\u1ed1ng nh\u01b0 b\u1ea1n c\u00f3 th\u1ec3 truy\u1ec1n `int` hay `string` v\u00e0o h\u00e0m, b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 truy\u1ec1n m\u1ed9t Object v\u00e0o ph\u01b0\u01a1ng th\u1ee9c c\u1ee7a m\u1ed9t Object kh\u00e1c.\n\nTuy nhi\u00ean, truy\u1ec1n th\u1ebf n\u00e0o \u0111\u1ec3 kh\u00f4ng \"b\u00f3p\" hi\u1ec7u n\u0103ng server l\u1ea1i l\u00e0 c\u00e2u chuy\u1ec7n c\u1ee7a \u0111\u1eb3ng c\u1ea5p.\n\n### 1. Ba c\u1ea5p \u0111\u1ed9 truy\u1ec1n Object v\u00e0o H\u00e0m (C\u1ef1c k\u1ef3 quan tr\u1ecdng)\n\nGi\u1ea3 s\u1eed b\u1ea1n c\u00f3 class `Character` v\u00e0 b\u1ea1n vi\u1ebft m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c `attack` (t\u1ea5n c\u00f4ng) nh\u1eadn v\u00e0o m\u1ee5c ti\u00eau l\u00e0 m\u1ed9t Character kh\u00e1c. B\u1ea1n c\u00f3 3 c\u00e1ch \u0111\u1ec3 vi\u1ebft:\n\nC\u1ea5p \u0111\u1ed9 1: Truy\u1ec1n Tham Tr\u1ecb (Pass by Value) - K\u1ebb th\u00f9 c\u1ee7a hi\u1ec7u n\u0103ng\n\n```\nvoid attack(Character target) { ... }\n```\n\nSai l\u1ea7m: Khi b\u1ea1n truy\u1ec1n nh\u01b0 th\u1ebf n\u00e0y, C++ s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u1ea1o ra m\u1ed9t b\u1ea3n copy c\u1ee7a Object `target`. N\u1ebfu Object c\u1ee7a b\u1ea1n ch\u1ee9a h\u00e0ng MB d\u1eef li\u1ec7u (h\u00ecnh \u1ea3nh, m\u1ea3ng t\u00fai \u0111\u1ed3...), vi\u1ec7c copy n\u00e0y di\u1ec5n ra li\u00ean t\u1ee5c s\u1ebd l\u00e0m gi\u1eadt lag game ho\u1eb7c tr\u00e0n RAM server. H\u01a1n n\u1eefa, b\u1ea1n \u0111\u00e1nh v\u00e0o b\u1ea3n copy th\u00ec th\u1eb1ng `target` th\u1eadt s\u1ef1 \u1edf b\u00ean ngo\u00e0i... ch\u1eb3ng m\u1ea5t gi\u1ecdt m\u00e1u n\u00e0o!\n\nC\u1ea5p \u0111\u1ed9 2: Truy\u1ec1n Tham Chi\u1ebfu (Pass by Reference) - Gi\u1ea3i ph\u00e1p chu\u1ea9n m\u1ef1c\n\nC\u1ea5p \u0111\u1ed9 2: Truy\u1ec1n Tham Chi\u1ebfu (Pass by Reference) - Gi\u1ea3i ph\u00e1p chu\u1ea9n m\u1ef1c\n\n```\nvoid attack(Character& target) { ... }\n```\n\nChu\u1ea9n: Th\u00eam d\u1ea5u `&`. L\u00fac n\u00e0y, ch\u00fang ta truy\u1ec1n tr\u1ef1c ti\u1ebfp \"b\u1ea3n g\u1ed1c\" c\u1ee7a `target` v\u00e0o h\u00e0m. Kh\u00f4ng c\u00f3 thao t\u00e1c copy n\u00e0o di\u1ec5n ra (t\u1ed1c \u0111\u1ed9 b\u00e0n th\u1edd) v\u00e0 khi b\u1ea1n tr\u1eeb m\u00e1u trong h\u00e0m, Object b\u00ean ngo\u00e0i s\u1ebd th\u1ef1c s\u1ef1 m\u1ea5t m\u00e1u.\n\nC\u1ea5p \u0111\u1ed9 3: Truy\u1ec1n H\u1eb1ng Tham Chi\u1ebfu (Pass by Const Reference) - L\u00ednh g\u00e1c an to\u00e0n\n\n```\nvoid printStatsComparison(const Character& target) { ... }\n```\n\nB\u00e1 \u0111\u1ea1o: D\u00f9ng khi b\u1ea1n ch\u1ec9 mu\u1ed1n \"\u0111\u1ecdc\" d\u1eef li\u1ec7u c\u1ee7a Object kia \u0111\u1ec3 so s\u00e1nh, t\u00ednh to\u00e1n ch\u1ee9 kh\u00f4ng mu\u1ed1n l\u00e0m thay \u0111\u1ed5i n\u00f3. D\u1ea5u `&` gi\u00fap tr\u00e1nh copy (nhanh), c\u00f2n ch\u1eef `const` ch\u1eb7n \u0111\u1ee9ng m\u1ecdi h\u00e0nh vi s\u1eeda \u0111\u1ed5i d\u1eef li\u1ec7u t\u1eeb b\u00ean trong h\u00e0m (an to\u00e0n).\n\n### 2. Code Demo: Tr\u1eadn chi\u1ebfn RPG Kinh \u0111i\u1ec3n\n\nH\u00e3y xem c\u00e1ch ch\u00fang ta \u00e1p d\u1ee5ng t\u01b0 duy tr\u00ean v\u00e0o m\u1ed9t tr\u1eadn chi\u1ebfn gi\u1eefa Hero v\u00e0 Boss. Hero s\u1ebd t\u1ea5n c\u00f4ng Boss (l\u00e0m thay \u0111\u1ed5i m\u00e1u Boss), v\u00e0 c\u0169ng c\u00f3 t\u00ednh n\u0103ng \"Soi\" ch\u1ec9 s\u1ed1 Boss (ch\u1ec9 \u0111\u1ecdc, kh\u00f4ng l\u00e0m thay \u0111\u1ed5i m\u00e1u).\n\n```\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass Character {\nprivate:\n    string name;\n    int hp;\n    int damage;\n\npublic:\n    Character(string n, int h, int d) {\n        name = n;\n        hp = h;\n        damage = d;\n    }\n\n    string getName() const { return name; }\n    int getHp() const { return hp; }\n\n    \/\/ T\u00ednh n\u0103ng 1: T\u1ea4N C\u00d4NG\n    \/\/ B\u1eaft bu\u1ed9c d\u00f9ng Tham chi\u1ebfu (&) \u0111\u1ec3 thay \u0111\u1ed5i tr\u1ef1c ti\u1ebfp m\u00e1u c\u1ee7a m\u1ee5c ti\u00eau\n    void attack(Character& target) {\n        cout << \"[COMBAT] \" << this->name << \" tan cong \" << target.name \n             << \" gay \" << this->damage << \" sat thuong!\\n\";\n        \n        \/\/ Tr\u1eeb m\u00e1u c\u1ee7a Object m\u1ee5c ti\u00eau\n        target.hp -= this->damage; \n        \n        if(target.hp < 0) target.hp = 0;\n    }\n\n    \/\/ T\u00ednh n\u0103ng 2: SOI CH\u1ec8 S\u1ed0\n    \/\/ D\u00f9ng H\u1eb1ng Tham Chi\u1ebfu (const &) v\u00ec ch\u1ec9 xem, kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p hack m\u00e1u!\n    void inspect(const Character& target) const {\n        cout << \"[INSPECT] \" << this->name << \" dang soi chi so cua \" << target.name << \":\\n\"\n             << \" -> HP hien tai: \" << target.hp << \"\\n\\n\";\n    }\n};\n\nint main() {\n    \/\/ Kh\u1edfi t\u1ea1o 2 th\u1ef1c th\u1ec3\n    Character hero(\"B\u1ed1 \u0110\u1eddi\", 1000, 150);\n    Character boss(\"Dragon\", 5000, 300);\n\n    \/\/ Hero soi ch\u1ec9 s\u1ed1 c\u1ee7a Boss\n    hero.inspect(boss);\n\n    \/\/ V\u00f2ng l\u1eb7p chi\u1ebfn \u0111\u1ea5u kh\u1ed1c li\u1ec7t\n    for(int i = 1; i <= 3; i++) {\n        hero.attack(boss);\n    }\n\n    \/\/ Ki\u1ec3m tra l\u1ea1i k\u1ebft qu\u1ea3 sau tr\u1eadn \u0111\u00e1nh\n    cout << \"\\n--- KET QUA ---\\n\";\n    cout << \"Mau cua Boss con lai: \" << boss.getHp() << \"\\n\";\n\n    return 0;\n}\n```\n\nNh\u1eadn x\u00e9t: Trong h\u00e0m `attack()`, `this->name` \u0111\u1ea1i di\u1ec7n cho k\u1ebb ra \u0111\u00f2n (Hero g\u1ecdi h\u00e0m), c\u00f2n `target.name` \u0111\u1ea1i di\u1ec7n cho n\u1ea1n nh\u00e2n b\u1ecb \u0111\u00e1nh (Boss truy\u1ec1n v\u00e0o). Nh\u1edd c\u00f3 con tr\u1ecf `this` (\u0111\u00e3 h\u1ecdc \u1edf b\u00e0i tr\u01b0\u1edbc) v\u00e0 c\u00e1ch truy\u1ec1n tham chi\u1ebfu &, code c\u1ef1c k\u1ef3 t\u01b0\u1eddng minh v\u00e0 ch\u1ea1y s\u00e1t v\u1edbi th\u1ebf gi\u1edbi th\u1ef1c.\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nTuy\u1ec7t v\u1eddi! B\u1ea1n \u0111\u00e3 bi\u1ebft c\u00e1ch n\u1ed1i k\u1ebft c\u00e1c Object l\u1ea1i v\u1edbi nhau. Gi\u1edd \u0111\u00e2y, b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 \u0111\u1ee7 ki\u1ebfn th\u1ee9c \u0111\u1ec3 t\u1ef1 code m\u1ed9t con game text-based nh\u1ecf ho\u1eb7c m\u1ed9t h\u1ec7 th\u1ed1ng ng\u00e2n h\u00e0ng c\u01a1 b\u1ea3n.\n\nNh\u01b0ng h\u00e3y \u0111\u1ec3 \u00fd d\u00f2ng code kh\u1edfi t\u1ea1o nh\u00e2n v\u1eadt \u1edf h\u00e0m main:\n`Character hero(\"B\u1ed1 \u0110\u1eddi\", 1000, 150);`\n\nCh\u00fang ta b\u1eaft bu\u1ed9c ph\u1ea3i truy\u1ec1n t\u00ean, m\u00e1u, v\u00e0 s\u00e1t th\u01b0\u01a1ng th\u00ec nh\u00e2n v\u1eadt m\u1edbi \u0111\u01b0\u1ee3c t\u1ea1o ra (v\u00ec ta \u0111\u00e3 t\u1ef1 vi\u1ebft m\u1ed9t Constructor nh\u1eadn 3 tham s\u1ed1).\n\n\u0110i\u1ec1u g\u00ec s\u1ebd x\u1ea3y ra n\u1ebfu ng\u01b0\u1eddi ch\u01a1i ch\u1ec9 mu\u1ed1n t\u1ea1o m\u1ed9t nh\u00e2n v\u1eadt m\u1eb7c \u0111\u1ecbnh (Ch\u01b0a \u0111\u1eb7t t\u00ean, m\u00e1u = 100, damage = 10) b\u1eb1ng c\u00fa ph\u00e1p tr\u1ed1ng: `Character npc;`? Code c\u1ee7a b\u1ea1n s\u1ebd ngay l\u1eadp t\u1ee9c b\u00e1o l\u1ed7i \u0111\u1ecf ch\u00f3t t\u1eeb tr\u00ecnh bi\u00ean d\u1ecbch!\n\n\u0110\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 linh ho\u1ea1t trong vi\u1ec7c kh\u1edfi t\u1ea1o Object, ch\u00fang ta c\u1ea7n t\u00ecm hi\u1ec3u v\u1ec1 m\u1ed9t kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i. H\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf B\u00e0i 12: H\u00e0m kh\u1edfi t\u1ea1o m\u1eb7c \u0111\u1ecbnh (Default Constructor) - C\u00e1ch C++ \"ch\u00e0o \u0111\u1eddi\" m\u1ed9t Object! Nh\u1edb Follow v\u00e0 Upvote series nh\u00e9!","published_at":"2026-04-19T02:44:43.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T02:45:26.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":1,"views_count":14,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/26fed49c-b9d2-498e-b26e-ff0cb7b3d457.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"cpp","name":"C++"},{"slug":"array-methods","name":"Array methods"},{"slug":"back-end","name":"Back-end"},{"slug":"bad-programming","name":"Bad Programming"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93029,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 10: Con tr\u1ecf this - L\u1eadt t\u1ea9y \"th\u1ebf l\u1ef1c ng\u1ea7m\" \u0111\u1ecbnh v\u1ecb m\u1ecdi Object","slug":"R5JRQMEr4Gv","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-10-con-tro-this-lat-tay-the-luc-ngam-dinh-vi-moi-object-R5JRQMEr4Gv","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-10-con-tro-this-lat-tay-the-luc-ngam-dinh-vi-moi-object","contents_short":"Ch\u00e0o anh em! Trong su\u1ed1t 9 b\u00e0i v\u1eeba qua, ch\u00fang ta \u0111\u00e3 g\u1ecdi c\u00e1c ph\u01b0\u01a1ng th\u1ee9c nh\u01b0 user.getName(), wallet.deposit(100) m\u1ed9t c\u00e1ch r\u1ea5t v\u00f4 t\u01b0.\n\nNh\u01b0ng c\u00f3 m\u1ed9t s\u1ef1 th\u1eadt ph\u0169 ph\u00e0ng v\u1ec1 c\u00e1ch C++ qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb: D\u1eef li\u1ec7u (Thu\u1ed9c t\u00ednh) c\u1ee7a m\u1ed7i Object \u0111\u01b0\u1ee3c l\u01b0u ri\u00eang bi\u1ec7t, nh\u01b0ng Code (Ph\u01b0\u01a1ng th\u1ee9c) th\u00ec ch\u1ec9 \u0111\u01b0\u1ee3c l\u01b0u \u0111\u00fang M\u1ed8T B\u1ea2N DUY NH\u1ea4T trong RAM \u0111\u1ec3 ti\u1ebft ki\u1ec7m kh\u00f4ng gian.\n\nV\u1eady khi b\u1ea1n g\u1ecdi user1.getName() v\u00e0 user2.getName(...","contents":"Ch\u00e0o anh em! Trong su\u1ed1t 9 b\u00e0i v\u1eeba qua, ch\u00fang ta \u0111\u00e3 g\u1ecdi c\u00e1c ph\u01b0\u01a1ng th\u1ee9c nh\u01b0 `user.getName()`, `wallet.deposit(100)` m\u1ed9t c\u00e1ch r\u1ea5t v\u00f4 t\u01b0.\n\nNh\u01b0ng c\u00f3 m\u1ed9t s\u1ef1 th\u1eadt ph\u0169 ph\u00e0ng v\u1ec1 c\u00e1ch C++ qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb: D\u1eef li\u1ec7u (Thu\u1ed9c t\u00ednh) c\u1ee7a m\u1ed7i Object \u0111\u01b0\u1ee3c l\u01b0u ri\u00eang bi\u1ec7t, nh\u01b0ng Code (Ph\u01b0\u01a1ng th\u1ee9c) th\u00ec ch\u1ec9 \u0111\u01b0\u1ee3c l\u01b0u \u0111\u00fang M\u1ed8T B\u1ea2N DUY NH\u1ea4T trong RAM \u0111\u1ec3 ti\u1ebft ki\u1ec7m kh\u00f4ng gian.\n\nV\u1eady khi b\u1ea1n g\u1ecdi `user1.getName()` v\u00e0 `user2.getName()`, l\u00e0m sao c\u00e1i h\u00e0m `getName()` duy nh\u1ea5t \u0111\u00f3 bi\u1ebft \u0111\u01b0\u1ee3c l\u00fac n\u00e0o c\u1ea7n moi c\u00e1i t\u00ean c\u1ee7a `user1`, l\u00fac n\u00e0o c\u1ea7n moi t\u00ean c\u1ee7a `user2`? C\u00e2u tr\u1ea3 l\u1eddi n\u1eb1m \u1edf m\u1ed9t con tr\u1ecf v\u00f4 h\u00ecnh mang t\u00ean: `this`.\n\n### 1. B\u1ea3n ch\u1ea5t th\u1eadt s\u1ef1 c\u1ee7a OOP (C++ \u0111\u00e3 l\u1eeba ch\u00fang ta)\n\nTh\u1ef1c ch\u1ea5t, trong C++, kh\u00f4ng c\u00f3 kh\u00e1i ni\u1ec7m \"H\u00e0m n\u1eb1m b\u00ean trong Object\" khi compile xu\u1ed1ng m\u00e3 m\u00e1y. Tr\u00ecnh bi\u00ean d\u1ecbch C++ \u0111\u00e3 ng\u1ea5m ng\u1ea7m l\u00e0m m\u1ed9t tr\u00f2 \u1ea3o thu\u1eadt.\n\nKhi b\u1ea1n vi\u1ebft:\n\n```\nuser1.getName();\n```\n\nTr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd \u00e2m th\u1ea7m d\u1ecbch n\u00f3 th\u00e0nh m\u1ed9t h\u00e0m ki\u1ec3u C truy\u1ec1n th\u1ed1ng, v\u00e0 t\u1ef1 \u0111\u1ed9ng nh\u00e9t th\u00eam m\u1ed9t tham s\u1ed1 ng\u1ea7m \u0111\u1ecbnh (ch\u00ednh l\u00e0 \u0111\u1ecba ch\u1ec9 c\u1ee7a `user1`):\n\n```\n\/\/ H\u00e0m th\u1eadt s\u1ef1 m\u00e0 C++ ch\u1ea1y d\u01b0\u1edbi background\ngetName(&user1);\n```\n\nV\u00e0 b\u00ean trong \u0111\u1ecbnh ngh\u0129a c\u1ee7a class, C++ t\u1ef1 \u0111\u1ed9ng cung c\u1ea5p m\u1ed9t con tr\u1ecf \u0111\u1eb7c bi\u1ec7t t\u00ean l\u00e0 `this` \u0111\u1ec3 h\u1ee9ng c\u00e1i \u0111\u1ecba ch\u1ec9 \u0111\u00f3. `this` ch\u00ednh l\u00e0 con tr\u1ecf tr\u1ecf \u0111\u1ebfn c\u00e1i Object \u0111ang g\u1ecdi h\u00e0m.\n\n### 2. \u1ee8ng d\u1ee5ng th\u1ef1c chi\u1ebfn 1: Gi\u1ea3i quy\u1ebft xung \u0111\u1ed9t t\u00ean bi\u1ebfn (Shadowing)\n\nTrong th\u1ef1c t\u1ebf \u0111i l\u00e0m, vi\u1ec7c \u0111\u1eb7t t\u00ean bi\u1ebfn r\u1ea5t \u0111au \u0111\u1ea7u. \u0110\u1ec3 code t\u01b0\u1eddng minh, tham s\u1ed1 truy\u1ec1n v\u00e0o h\u00e0m th\u01b0\u1eddng \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean GI\u1ed0NG H\u1ec6T v\u1edbi t\u00ean thu\u1ed9c t\u00ednh c\u1ee7a Class.\n\nV\u00ed d\u1ee5, Class `User` c\u00f3 thu\u1ed9c t\u00ednh `age`. H\u00e0m `setAge` nh\u1eadn v\u00e0o tham s\u1ed1 c\u0169ng t\u00ean l\u00e0 `age`. N\u1ebfu b\u1ea1n vi\u1ebft `age = age;`, tr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd b\u1ed1i r\u1ed1i kh\u00f4ng bi\u1ebft ai l\u00e0 ai (th\u01b0\u1eddng n\u00f3 s\u1ebd \u01b0u ti\u00ean tham s\u1ed1 c\u1ee5c b\u1ed9, d\u1eabn \u0111\u1ebfn vi\u1ec7c g\u00e1n v\u00f4 ngh\u0129a).\n\n\u0110\u00e2y l\u00e0 l\u00fac `this` ra tay c\u1ee9u gi\u00e1:\n\n```\nclass User {\nprivate:\n    int age;\npublic:\n    void setAge(int age) {\n        \/\/ this->age: Thu\u1ed9c t\u00ednh c\u1ee7a Object\n        \/\/ age: Tham s\u1ed1 truy\u1ec1n v\u00e0o t\u1eeb b\u00ean ngo\u00e0i\n        this->age = age; \n    }\n};\n```\n\nC\u00fa ph\u00e1p `this->` nh\u01b0 m\u1ed9t l\u1eddi kh\u1eb3ng \u0111\u1ecbnh ch\u1eafc n\u1ecbch: \"H\u00e3y l\u1ea5y c\u00e1i bi\u1ebfn `age` c\u1ee7a ch\u00ednh Object \u0111ang ch\u1ea1y h\u00e0m n\u00e0y!\"\n\n### 3. \u1ee8ng d\u1ee5ng th\u1ef1c chi\u1ebfn 2: Tuy\u1ec7t chi\u00eau \"Method Chaining\"\n\n\u0110\u00e2y l\u00e0 k\u1ef9 thu\u1eadt \u0111\u1ecbnh h\u00ecnh \u0111\u1eb3ng c\u1ea5p c\u1ee7a b\u1ea1n. H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n c\u00f3 m\u1ed9t h\u1ec7 th\u1ed1ng t\u1ea1o Profile ng\u01b0\u1eddi d\u00f9ng. C\u00e1ch code th\u00f4ng th\u01b0\u1eddng (Junior):\n\n```\nUser u;\nu.setName(\"Hi\u1ebfu\");\nu.setAlias(\"b\u1ed1 \u0111\u1eddi\");\nu.setAge(25);\n```\n\nCode ch\u1ea1y \u0111\u01b0\u1ee3c, nh\u01b0ng l\u1eb7p l\u1ea1i ch\u1eef `u.` qu\u00e1 nhi\u1ec1u. N\u1ebfu ch\u00fang ta l\u00e0m cho c\u00e1c h\u00e0m `set` n\u00e0y tr\u1ea3 v\u1ec1 ch\u00ednh c\u00e1i Object v\u1eeba g\u1ecdi n\u00f3, ch\u00fang ta c\u00f3 th\u1ec3 n\u1ed1i ch\u00fang l\u1ea1i v\u1edbi nhau th\u00e0nh m\u1ed9t chu\u1ed7i (Chain) c\u1ef1c k\u1ef3 thanh l\u1ecbch.\n\n\u0110\u1ec3 tr\u1ea3 v\u1ec1 ch\u00ednh Object hi\u1ec7n t\u1ea1i, ta d\u00f9ng `*this` (Gi\u1ea3i tham chi\u1ebfu con tr\u1ecf `this`).\n\n### 4. Code Demo: Thi\u1ebft k\u1ebf Builder Pattern c\u01a1 b\u1ea3n v\u1edbi this\n\nH\u00e3y xem s\u1ef1 \"k\u1ef3 di\u1ec7u\" c\u1ee7a Method Chaining:\n\n```\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass UserProfile {\nprivate:\n    string name;\n    string alias;\n    int age;\n\npublic:\n    UserProfile() {\n        name = \"Unknown\";\n        alias = \"Unknown\";\n        age = 0;\n    }\n\n    \/\/ Ch\u00fa \u00fd ki\u1ec3u tr\u1ea3 v\u1ec1 l\u00e0 tham chi\u1ebfu c\u1ee7a ch\u00ednh Class: UserProfile&\n    UserProfile& setName(string name) {\n        this->name = name; \n        return *this; \/\/ Tr\u1ea3 v\u1ec1 CH\u00cdNH OBJECT n\u00e0y sau khi \u0111\u00e3 \u0111\u1ed5i t\u00ean\n    }\n\n    UserProfile& setAlias(string alias) {\n        this->alias = alias;\n        return *this; \/\/ Tr\u1ea3 v\u1ec1 CH\u00cdNH OBJECT n\u00e0y\n    }\n\n    UserProfile& setAge(int age) {\n        this->age = age;\n        return *this; \/\/ Tr\u1ea3 v\u1ec1 CH\u00cdNH OBJECT n\u00e0y\n    }\n\n    void printProfile() {\n        cout << \"--- HOSO ---\\n\"\n             << \"Ten: \" << name << \"\\n\"\n             << \"Biet danh: \" << alias << \"\\n\"\n             << \"Tuoi: \" << age << \"\\n\"\n             << \"------------\\n\";\n    }\n};\n\nint main() {\n    UserProfile myProfile;\n\n    \/\/ METHOD CHAINING: C\u00fa ph\u00e1p g\u1ecdi h\u00e0m li\u00ean ho\u00e0n si\u00eau ng\u1ea7u!\n    \/\/ V\u00ec setName() tr\u1ea3 v\u1ec1 ch\u00ednh myProfile, ta c\u00f3 th\u1ec3 ch\u1ea5m ti\u1ebfp setAlias(), v.v...\n    myProfile.setName(\"Hi\u1ebfu\")\n             .setAlias(\"b\u1ed1 \u0111\u1eddi\")\n             .setAge(25);\n\n    myProfile.printProfile();\n\n    return 0;\n}\n```\n\nNh\u1eadn x\u00e9t: C\u00fa ph\u00e1p n\u1ed1i \u0111u\u00f4i nhau n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 Fluent Interface (Giao di\u1ec7n tr\u00f4i ch\u1ea3y). C\u00e1c th\u01b0 vi\u1ec7n Backend l\u1edbn ho\u1eb7c c\u00e1c ORM (Object-Relational Mapping) thao t\u00e1c v\u1edbi Database \u0111\u1ec1u s\u1eed d\u1ee5ng tri\u1ec7t \u0111\u1ec3 k\u1ef9 thu\u1eadt `return *this;` \u0111\u1ec3 t\u1ea1o ra c\u00e1c c\u00e2u query c\u1ef1c k\u1ef3 d\u1ec5 \u0111\u1ecdc.\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\nTuy\u1ec7t v\u1eddi! Con tr\u1ecf `this` \u0111\u00e3 gi\u00fap ch\u00fang ta gi\u1ea3i quy\u1ebft g\u1ecdn g\u00e0ng b\u00e0i to\u00e1n \u0111\u1ecbnh v\u1ecb Object trong RAM v\u00e0 m\u1edf kh\u00f3a k\u1ef9 n\u0103ng Method Chaining x\u1ecbn x\u00f2. N\u00f3 gi\u00fap Object t\u1ef1 thao t\u00e1c v\u1edbi ch\u00ednh b\u1ea3n th\u00e2n n\u00f3 m\u1ed9t c\u00e1ch an to\u00e0n.\n\nNh\u01b0ng trong c\u00e1c nghi\u1ec7p v\u1ee5 th\u1ef1c t\u1ebf, m\u1ed9t Object hi\u1ebfm khi \u0111\u1ee9ng c\u00f4 l\u1eadp. Gi\u1ea3 s\u1eed b\u1ea1n l\u00e0m m\u1ed9t h\u1ec7 th\u1ed1ng Game, Nh\u00e2n v\u1eadt A c\u1ea7n \"t\u1ea5n c\u00f4ng\" Nh\u00e2n v\u1eadt B. Ho\u1eb7c trong h\u1ec7 th\u1ed1ng Ng\u00e2n h\u00e0ng, T\u00e0i kho\u1ea3n A c\u1ea7n \"chuy\u1ec3n ti\u1ec1n\" sang T\u00e0i kho\u1ea3n B.\n\nL\u00e0m sao \u0111\u1ec3 ph\u01b0\u01a1ng th\u1ee9c c\u1ee7a m\u1ed9t Object c\u00f3 th\u1ec3 t\u01b0\u01a1ng t\u00e1c tr\u1ef1c ti\u1ebfp, thay \u0111\u1ed5i d\u1eef li\u1ec7u c\u1ee7a m\u1ed9t Object kh\u00e1c c\u00f3 c\u00f9ng ki\u1ec3u Class?\n\n\u0110\u00e2y l\u00e0 m\u1ed9t b\u00e0i to\u00e1n r\u1ea5t th\u00fa v\u1ecb v\u1ec1 vi\u1ec7c truy\u1ec1n d\u1eef li\u1ec7u. H\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf B\u00e0i 11: Ph\u01b0\u01a1ng th\u1ee9c c\u00f3 \u0111\u1ed1i t\u01b0\u1ee3ng l\u00e0 tham s\u1ed1 truy\u1ec1n v\u00e0o - Ngh\u1ec7 thu\u1eadt t\u01b0\u01a1ng t\u00e1c gi\u1eefa c\u00e1c th\u1ef1c th\u1ec3! \u0110\u1eebng qu\u00ean th\u1ea3 Upvote \u0111\u1ec3 m\u00ecnh c\u00f3 \u0111\u1ed9ng l\u1ef1c g\u00f5 ph\u00edm ti\u1ebfp nh\u00e9!","published_at":"2026-04-19T02:37:56.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T02:37:31.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":1,"views_count":15,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/3301dae6-fe27-427e-829d-09f3263e6bc9.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"bad-programming","name":"Bad Programming"},{"slug":"cpp","name":"C++"},{"slug":"pointers","name":"Pointers"},{"slug":"back-end","name":"Back-end"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93027,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 9: \u0110\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c b\u1eb1ng c\u00e1ch chia file - Gi\u1ea3i m\u00e3 \"l\u1eddi nguy\u1ec1n\" Include ch\u00e9o","slug":"kY4gDY8RJAe","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-9-dinh-nghia-phuong-thuc-bang-cach-chia-file-giai-ma-loi-nguyen-include-cheo-kY4gDY8RJAe","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-9-dinh-nghia-phuong-thuc-bang-cach-chia-file-giai-ma-loi-nguyen-include-cheo","contents_short":"Ch\u00e0o anh em! Trong c\u00e1c b\u00e0i tr\u01b0\u1edbc, ch\u00fang ta \u0111\u00e3 th\u1ed1ng nh\u1ea5t quy t\u1eafc V\u00e0ng c\u1ee7a m\u1ed9t K\u1ef9 s\u01b0 C++: File Header (.h) l\u00e0 Menu (khai b\u00e1o), File Source (.cpp) l\u00e0 Nh\u00e0 b\u1ebfp (\u0111\u1ecbnh ngh\u0129a logic).\n\nVi\u1ec7c t\u00e1ch file gi\u00fap code d\u1ec5 \u0111\u1ecdc, d\u1ec5 l\u00e0m vi\u1ec7c nh\u00f3m (Git) v\u00e0 t\u0103ng t\u1ed1c \u0111\u1ed9 Compile. Nh\u01b0ng ngay khi v\u1eeba b\u1eaft tay v\u00e0o chia file cho d\u1ef1 \u00e1n th\u1ef1c t\u1ebf, anh em ch\u1eafc ch\u1eafn s\u1ebd \u0111\u1ee5ng ph\u1ea3i m\u1ed9t c\u00e1i b\u1eaby ch\u1ebft ng\u01b0\u1eddi: Include ch\u00e9o (Circular Dep...","contents":"Ch\u00e0o anh em! Trong c\u00e1c b\u00e0i tr\u01b0\u1edbc, ch\u00fang ta \u0111\u00e3 th\u1ed1ng nh\u1ea5t quy t\u1eafc V\u00e0ng c\u1ee7a m\u1ed9t K\u1ef9 s\u01b0 C++: File Header (.h) l\u00e0 Menu (khai b\u00e1o), File Source (.cpp) l\u00e0 Nh\u00e0 b\u1ebfp (\u0111\u1ecbnh ngh\u0129a logic).\n\nVi\u1ec7c t\u00e1ch file gi\u00fap code d\u1ec5 \u0111\u1ecdc, d\u1ec5 l\u00e0m vi\u1ec7c nh\u00f3m (Git) v\u00e0 t\u0103ng t\u1ed1c \u0111\u1ed9 Compile. Nh\u01b0ng ngay khi v\u1eeba b\u1eaft tay v\u00e0o chia file cho d\u1ef1 \u00e1n th\u1ef1c t\u1ebf, anh em ch\u1eafc ch\u1eafn s\u1ebd \u0111\u1ee5ng ph\u1ea3i m\u1ed9t c\u00e1i b\u1eaby ch\u1ebft ng\u01b0\u1eddi: Include ch\u00e9o (Circular Dependency).\n\nH\u00f4m nay ch\u00fang ta s\u1ebd xem x\u00e9t c\u00e1ch c\u00e1c h\u1ec7 th\u1ed1ng Backend b\u1eb1ng C++ gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y khi \u0111\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c qua nhi\u1ec1u file kh\u00e1c nhau.\n\n### 1. N\u1ed7i \u00e1m \u1ea3nh \"Include ch\u00e9o\" (Circular Dependency)\n\nH\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n \u0111ang thi\u1ebft k\u1ebf h\u1ec7 th\u1ed1ng Th\u01b0\u01a1ng m\u1ea1i \u0111i\u1ec7n t\u1eed v\u1edbi 2 Class: `User` (Kh\u00e1ch h\u00e0ng) v\u00e0 `Order` (\u0110\u01a1n h\u00e0ng).\n\n* M\u1ed9t `User` c\u1ea7n ch\u1ee9a m\u1ed9t danh s\u00e1ch c\u00e1c `Order`. (N\u00ean file `User.h` ph\u1ea3i `#include \"Order.h\"`).\n* M\u1ed9t `Order` l\u1ea1i c\u1ea7n tr\u1ecf ng\u01b0\u1ee3c v\u1ec1 `User` \u0111\u00e3 t\u1ea1o ra n\u00f3 \u0111\u1ec3 l\u1ea5y th\u00f4ng tin thanh to\u00e1n. (N\u00ean file Order.h l\u1ea1i ph\u1ea3i `#include \"User.h\"`).\n\nK\u1ebft qu\u1ea3? Tr\u00ecnh bi\u00ean d\u1ecbch C++ s\u1ebd ch\u1ea1y v\u00f2ng tr\u00f2n v\u00f4 t\u1eadn gi\u1eefa 2 file n\u00e0y cho \u0111\u1ebfn khi v\u0103ng l\u1ed7i: \"Unknown type name\". M\u1eb7c d\u00f9 b\u1ea1n \u0111\u00e3 d\u00f9ng `#pragma once` (Include Guard), C++ v\u1eabn kh\u00f4ng th\u1ec3 quy\u1ebft \u0111\u1ecbnh ph\u1ea3i compile file n\u00e0o tr\u01b0\u1edbc. H\u1ec7 th\u1ed1ng s\u1ee5p \u0111\u1ed5 tr\u01b0\u1edbc khi c\u1ea3 d\u00f2ng code \u0111\u1ea7u ti\u00ean \u0111\u01b0\u1ee3c ch\u1ea1y!\n\n2. B\u00ed thu\u1eadt \"Forward Declaration\" (Khai b\u00e1o ti\u1ec1n \u0111\u1ea1o)\n\u0110\u1ec3 \u0111\u1ecbnh ngh\u0129a c\u00e1c ph\u01b0\u01a1ng th\u1ee9c ph\u1ee9c t\u1ea1p v\u00e0 gi\u1ea3i quy\u1ebft c\u00e1i v\u00f2ng l\u1eb7p v\u00f4 t\u1eadn tr\u00ean, K\u1ef9 s\u01b0 C++ d\u00f9ng m\u1ed9t k\u1ef9 thu\u1eadt g\u1ecdi l\u00e0 Forward Declaration.\n\nNguy\u00ean t\u1eafc c\u1ef1c k\u1ef3 \u0111\u01a1n gi\u1ea3n: Trong file Header (`.h`), thay v\u00ec `#include` to\u00e0n b\u1ed9 m\u1ed9t Class kh\u00e1c, b\u1ea1n ch\u1ec9 c\u1ea7n \"b\u00e1o m\u1ed9ng\" cho C++ bi\u1ebft r\u1eb1ng Class \u0111\u00f3 T\u1ed2N T\u1ea0I. B\u1ea1n ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p #include th\u1eadt s\u1ef1 khi \u0111\u1ecbnh ngh\u0129a logic b\u00ean trong file `.cpp`.\n\nH\u00e3y xem c\u00e1ch ch\u00fang ta chia file chu\u1ea9n Enterprise \u0111\u1ec3 x\u1eed l\u00fd b\u00e0i to\u00e1n User v\u00e0 Order.\n\n### 3. Code Demo: T\u00e1ch file v\u00e0 x\u1eed l\u00fd Include ch\u00e9o\n\nCh\u00fang ta s\u1ebd c\u00f3 4 file. H\u00e3y ch\u00fa \u00fd k\u1ef9 n\u01a1i n\u00e0o d\u00f9ng `class T\u00ean`; v\u00e0 n\u01a1i n\u00e0o d\u00f9ng `#include`.\n\nFile 1: `Order.h` (Ch\u1ec9 khai b\u00e1o)\n\n```\n#pragma once\n#include <string>\n\n\/\/ B\u00c1O M\u1ed8NG: \"\u00ca C++, c\u00f3 m\u1ed9t class t\u00ean l\u00e0 User nh\u00e9, tin tao \u0111i!\"\n\/\/ KH\u00d4NG D\u00d9NG: #include \"User.h\" \u1edf \u0111\u00e2y!\nclass User; \n\nclass Order {\nprivate:\n    int orderId;\n    User* owner; \/\/ Ch\u1ec9 d\u00f9ng con tr\u1ecf (Pointer) th\u00ec Forward Declaration m\u1edbi c\u00f3 t\u00e1c d\u1ee5ng\n\npublic:\n    Order(int id, User* u);\n    void printOrderInfo(); \n};\n```\n\nFile 2: `User.h` (Ch\u1ec9 khai b\u00e1o)\n\n```\n#pragma once\n#include <string>\n#include <vector>\n\n\/\/ B\u00c1O M\u1ed8NG v\u1ec1 class Order\nclass Order;\n\nclass User {\nprivate:\n    std::string name;\n    std::vector<Order*> orderList; \/\/ L\u01b0u danh s\u00e1ch con tr\u1ecf Order\n\npublic:\n    User(std::string n);\n    std::string getName() const;\n    void addOrder(Order* o);\n};\n```\n\nFile 3: `Order.cpp` (\u0110\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c - Nh\u00e0 b\u1ebfp)\n\n```\n#include <iostream>\n#include \"Order.h\"\n\/\/ B\u00c2Y GI\u1edc M\u1edaI INCLUDE TH\u1eacT S\u1ef0 \u0111\u1ec3 l\u1ea5y d\u1eef li\u1ec7u chi ti\u1ebft c\u1ee7a User\n#include \"User.h\" \n\nOrder::Order(int id, User* u) {\n    orderId = id;\n    owner = u;\n}\n\nvoid Order::printOrderInfo() {\n    \/\/ V\u00ec \u0111\u00e3 include User.h, ta c\u00f3 th\u1ec3 g\u1ecdi h\u00e0m getName() tho\u1ea3i m\u00e1i\n    std::cout << \"Order ID: \" << orderId \n              << \" | Thuoc ve khach hang: \" << owner->getName() << \"\\n\";\n}\n```\n\nFile 4: `User.cpp` (\u0110\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c - Nh\u00e0 b\u1ebfp)\n\n```\nFile 4: User.cpp (\u0110\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c - Nh\u00e0 b\u1ebfp)\n```\n\nNh\u1eadn x\u00e9t: B\u1eb1ng c\u00e1ch t\u00e1ch bi\u1ec7t ph\u1ea7n \"Nh\u1eafc t\u00ean\" (Forward Declaration \u1edf file `.h`) v\u00e0 ph\u1ea7n \"S\u1eed d\u1ee5ng th\u1eadt\" (`#include `\u1edf file `.cpp`), d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n gi\u1edd \u0111\u00e2y c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng l\u00ean h\u00e0ng tr\u0103m Class \u0111an ch\u00e9o nhau m\u00e0 tr\u00ecnh bi\u00ean d\u1ecbch C++ v\u1eabn x\u1eed l\u00fd nh\u1eb9 nh\u00e0ng, t\u1ed1c \u0111\u1ed9 Build c\u1ef1c k\u1ef3 nhanh\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\n\u0110\u1ebfn \u0111\u00e2y, b\u1ea1n \u0111\u00e3 ho\u00e0n thi\u1ec7n b\u1ed9 k\u1ef9 n\u0103ng thi\u1ebft k\u1ebf v\u00e0 t\u1ed5 ch\u1ee9c m\u00e3 ngu\u1ed3n OOP trong C++. B\u1ea1n bi\u1ebft c\u00e1ch gom d\u1eef li\u1ec7u (Encapsulation), gi\u1ea5u ph\u1ee9c t\u1ea1p (Abstraction), t\u00e1i s\u1eed d\u1ee5ng (Inheritance), linh ho\u1ea1t (Polymorphism) v\u00e0 gi\u1edd l\u00e0 t\u1ed5 ch\u1ee9c file chu\u1ea9n quy m\u00f4 l\u1edbn.\n\nNh\u01b0ng h\u00e3y ch\u1eadm l\u1ea1i m\u1ed9t nh\u1ecbp v\u00e0 nh\u00ecn v\u00e0o m\u1ed9t d\u00f2ng code r\u1ea5t c\u01a1 b\u1ea3n m\u00e0 ch\u00fang ta \u0111\u00e3 vi\u1ebft h\u00e0ng ch\u1ee5c l\u1ea7n t\u1eeb \u0111\u1ea7u series:\n`name = n;` (G\u00e1n gi\u00e1 tr\u1ecb v\u00e0o thu\u1ed9c t\u00ednh c\u1ee7a Object).\n\nKhi h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n \u0111\u00fac ra 100 c\u00e1i Object `User` t\u1eeb c\u00f9ng 1 Class, v\u00e0 b\u1ea1n g\u1ecdi h\u00e0m `user1.getName()`. H\u00e0m `getName()` l\u00e0 m\u1ed9t \u0111o\u1ea1n code d\u00f9ng chung trong RAM. L\u00e0m sao c\u00e1i \u0111o\u1ea1n code d\u00f9ng chung \u0111\u00f3 l\u1ea1i \"bi\u1ebft\" \u0111\u01b0\u1ee3c n\u00f3 ph\u1ea3i l\u1ea5y c\u00e1i `name` c\u1ee7a `user1` ch\u1ee9 kh\u00f4ng ph\u1ea3i name c\u1ee7a `user2`?\n\nC\u00f3 m\u1ed9t \"th\u1ebf l\u1ef1c ng\u1ea7m\" lu\u00f4n \u00e2m th\u1ea7m \u0111i theo m\u1ecdi ph\u01b0\u01a1ng th\u1ee9c b\u1ea1n g\u1ecdi. M\u1ed9t th\u1ee9 gi\u00fap Object \u0111\u1ecbnh v\u1ecb \u0111\u01b0\u1ee3c ch\u00ednh b\u1ea3n th\u00e2n n\u00f3.\n\nH\u1eb9n g\u1eb7p l\u1ea1i c\u00e1c b\u1ea1n \u1edf B\u00e0i 10: Con tr\u1ecf this l\u00e0 g\u00ec? - L\u1eadt t\u1ea9y th\u1ebf l\u1ef1c ng\u1ea7m b\u00ean trong m\u1ecdi Object! \u0110\u1eebng qu\u00ean Upvote \u0111\u1ec3 ti\u1ebfp l\u1eeda cho series nh\u00e9!","published_at":"2026-04-19T02:31:52.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T02:31:24.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":4,"points":1,"views_count":8,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/1baa401d-aa3f-4c96-87c0-c242288ddb9f.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"android-architecture","name":"Android Architecture"},{"slug":"bad-programming","name":"Bad Programming"},{"slug":"cpp","name":"C++"},{"slug":"back-end","name":"Back-end"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}},{"id":93025,"title":"[C++ OOP Th\u1ef1c Chi\u1ebfn] B\u00e0i 8: \u0110\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c c\u1ee7a Class - Khai ph\u00e1 s\u1ee9c m\u1ea1nh c\u1ee7a inline, const v\u00e0 static","slug":"ZoJjeGwA4Y7","url":"https:\/\/viblo.asia\/p\/c-oop-thuc-chien-bai-8-dinh-nghia-phuong-thuc-cua-class-khai-pha-suc-manh-cua-inline-const-va-static-ZoJjeGwA4Y7","user_id":182653,"moderation":null,"transliterated":"c-oop-thuc-chien-bai-8-dinh-nghia-phuong-thuc-cua-class-khai-pha-suc-manh-cua-inline-const-va-static","contents_short":"Ch\u00e0o anh em! Trong c\u00e1c b\u00e0i tr\u01b0\u1edbc, ch\u00fang ta \u0111\u00e3 bi\u1ebft Class g\u1ed3m c\u00f3 Thu\u1ed9c t\u00ednh (Data) v\u00e0 Ph\u01b0\u01a1ng th\u1ee9c (H\u00e0m). Vi\u1ec7c khai b\u00e1o t\u00ean h\u00e0m th\u00ec r\u1ea5t d\u1ec5, nh\u01b0ng vi\u1ec7c \"vi\u1ebft ru\u1ed9t\" (\u0110\u1ecbnh ngh\u0129a - Define) cho c\u00e1c h\u00e0m \u0111\u00f3 l\u1ea1i c\u00f3 nhi\u1ec1u c\u1ea5p \u0111\u1ed9.\n\nM\u1ed9t Junior ch\u1ec9 vi\u1ebft h\u00e0m cho code ch\u1ea1y. Nh\u01b0ng m\u1ed9t K\u1ef9 s\u01b0 C++ s\u1ebd bi\u1ebft d\u00f9ng c\u00e1c t\u1eeb kh\u00f3a nh\u01b0 const hay static \u0111\u1ec3 bi\u1ebfn c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u00f3 th\u00e0nh m\u1ed9t h\u1ec7 th\u1ed1ng ch\u1eb7t ch\u1ebd, t\u1ed1i \u01b0u hi\u1ec7u n\u0103ng...","contents":"Ch\u00e0o anh em! Trong c\u00e1c b\u00e0i tr\u01b0\u1edbc, ch\u00fang ta \u0111\u00e3 bi\u1ebft Class g\u1ed3m c\u00f3 Thu\u1ed9c t\u00ednh (Data) v\u00e0 Ph\u01b0\u01a1ng th\u1ee9c (H\u00e0m). Vi\u1ec7c khai b\u00e1o t\u00ean h\u00e0m th\u00ec r\u1ea5t d\u1ec5, nh\u01b0ng vi\u1ec7c \"vi\u1ebft ru\u1ed9t\" (\u0110\u1ecbnh ngh\u0129a - Define) cho c\u00e1c h\u00e0m \u0111\u00f3 l\u1ea1i c\u00f3 nhi\u1ec1u c\u1ea5p \u0111\u1ed9.\n\nM\u1ed9t Junior ch\u1ec9 vi\u1ebft h\u00e0m cho code ch\u1ea1y. Nh\u01b0ng m\u1ed9t K\u1ef9 s\u01b0 C++ s\u1ebd bi\u1ebft d\u00f9ng c\u00e1c t\u1eeb kh\u00f3a nh\u01b0 `const` hay `static` \u0111\u1ec3 bi\u1ebfn c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u00f3 th\u00e0nh m\u1ed9t h\u1ec7 th\u1ed1ng ch\u1eb7t ch\u1ebd, t\u1ed1i \u01b0u hi\u1ec7u n\u0103ng v\u00e0 ng\u0103n ch\u1eb7n \u0111\u1ed3ng nghi\u1ec7p... code ngu l\u00e0m s\u1eadp h\u1ec7 th\u1ed1ng.\n\nH\u00f4m nay ch\u00fang ta s\u1ebd t\u00ecm hi\u1ec3u 2 c\u00e1ch \u0111\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c v\u00e0 2 t\u1eeb kh\u00f3a quy\u1ec1n l\u1ef1c nh\u1ea5t \u0111i k\u00e8m v\u1edbi n\u00f3.\n\n### 1. Hai v\u1ecb tr\u00ed \u0111\u1ec3 \u0111\u1ecbnh ngh\u0129a Ph\u01b0\u01a1ng th\u1ee9c\n\nKhi vi\u1ebft n\u1ed9i dung cho m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c, b\u1ea1n c\u00f3 2 l\u1ef1a ch\u1ecdn:\n\n**C\u00e1ch 1: \u0110\u1ecbnh ngh\u0129a ngay b\u00ean trong Class (Inline Method)**\n\n\u0110\u00e2y l\u00e0 c\u00e1ch nhanh nh\u1ea5t v\u00e0 hay \u0111\u01b0\u1ee3c d\u00f9ng cho c\u00e1c h\u00e0m c\u1ef1c k\u1ef3 ng\u1eafn (nh\u01b0 Getter\/Setter).\n\n* \u01afu \u0111i\u1ec3m: C++ s\u1ebd ng\u1ea7m hi\u1ec3u \u0111\u00e2y l\u00e0 h\u00e0m `inline`. Khi code \u0111\u01b0\u1ee3c bi\u00ean d\u1ecbch, thay v\u00ec \"nh\u1ea3y\" \u0111\u1ebfn v\u00f9ng nh\u1edb ch\u1ee9a h\u00e0m (g\u00e2y t\u1ed1n th\u1eddi gian), C++ s\u1ebd \"copy-paste\" th\u1eb3ng ru\u1ed9t h\u00e0m v\u00e0o n\u01a1i g\u1ecdi n\u00f3. Hi\u1ec7u n\u0103ng c\u1ef1c cao!\n* Nh\u01b0\u1ee3c \u0111i\u1ec3m: N\u1ebfu h\u00e0m qu\u00e1 d\u00e0i (ch\u1ee9a v\u00f2ng l\u1eb7p, logic ph\u1ee9c t\u1ea1p) m\u00e0 \u0111\u1ec3 b\u00ean trong Class th\u00ec file c\u1ee7a b\u1ea1n s\u1ebd r\u1ea5t kh\u00f3 \u0111\u1ecdc.\n\n**C\u00e1ch 2: \u0110\u1ecbnh ngh\u0129a b\u00ean ngo\u00e0i Class (S\u1eed d\u1ee5ng to\u00e1n t\u1eed `::`)**\n\nV\u1edbi c\u00e1c h\u00e0m logic nghi\u1ec7p v\u1ee5 ph\u1ee9c t\u1ea1p, ch\u00fang ta ch\u1ec9 Khai b\u00e1o t\u00ean h\u00e0m trong Class, v\u00e0 mang ph\u1ea7n \"ru\u1ed9t\" ra b\u00ean ngo\u00e0i \u0111\u1ec3 \u0111\u1ecbnh ngh\u0129a, s\u1eed d\u1ee5ng to\u00e1n t\u1eed ph\u00e2n gi\u1ea3i ph\u1ea1m vi `T\u00eanClass::T\u00eanH\u00e0m`.\n\n### 2. V\u0169 kh\u00ed ph\u00f2ng th\u1ee7: Ph\u01b0\u01a1ng th\u1ee9c const\n\nTrong th\u1ef1c t\u1ebf, b\u1ea1n s\u1ebd th\u01b0\u1eddng xuy\u00ean truy\u1ec1n Object v\u00e0o m\u1ed9t h\u00e0m kh\u00e1c d\u01b0\u1edbi d\u1ea1ng Tham chi\u1ebfu (`&`) \u0111\u1ec3 ti\u1ebft ki\u1ec7m b\u1ed9 nh\u1edb (kh\u00f4ng b\u1ecb copy). Nh\u01b0ng l\u1ee1 c\u00e1i h\u00e0m \u0111\u00f3 v\u00f4 t\u00ecnh s\u1eeda m\u1ea5t d\u1eef li\u1ec7u c\u1ee7a Object th\u00ec sao?\n\n\u0110\u00f3 l\u00e0 l\u00fac ph\u01b0\u01a1ng th\u1ee9c const xu\u1ea5t hi\u1ec7n. Khi b\u1ea1n \u0111\u1eb7t ch\u1eef const \u1edf cu\u1ed1i m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c, b\u1ea1n \u0111ang l\u1eadp m\u1ed9t \"L\u1eddi th\u1ec1 danh d\u1ef1\" v\u1edbi C++: \"H\u00e0m n\u00e0y ch\u1ec9 \u0110\u1eccC d\u1eef li\u1ec7u, tuy\u1ec7t \u0111\u1ed1i kh\u00f4ng thay \u0111\u1ed5i b\u1ea5t k\u1ef3 thu\u1ed9c t\u00ednh n\u00e0o c\u1ee7a Class!\".\n\n### 3. V\u0169 kh\u00ed d\u00f9ng chung: Ph\u01b0\u01a1ng th\u1ee9c static\n\nB\u00ecnh th\u01b0\u1eddng, \u0111\u1ec3 g\u1ecdi m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c, b\u1ea1n PH\u1ea2I t\u1ea1o ra m\u1ed9t Object (v\u00ed d\u1ee5: `myTicket.book()`).\nNh\u01b0ng n\u1ebfu b\u1ea1n mu\u1ed1n vi\u1ebft m\u1ed9t h\u00e0m ti\u1ec7n \u00edch chung (nh\u01b0 h\u00e0m \u0111\u1ebfm xem c\u00f3 t\u1ed5ng c\u1ed9ng bao nhi\u00eau v\u00e9 \u0111\u00e3 \u0111\u01b0\u1ee3c b\u00e1n ra tr\u00ean to\u00e0n h\u1ec7 th\u1ed1ng), b\u1ea1n kh\u00f4ng th\u1ec3 nh\u00e9t n\u00f3 v\u00e0o m\u1ed9t v\u00e9 c\u1ee5 th\u1ec3 n\u00e0o \u0111\u01b0\u1ee3c.\n\nT\u1eeb kh\u00f3a `static` bi\u1ebfn m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c th\u00e0nh T\u00e0i s\u1ea3n chung c\u1ee7a to\u00e0n b\u1ed9 Class. B\u1ea1n c\u00f3 th\u1ec3 g\u1ecdi n\u00f3 tr\u1ef1c ti\u1ebfp b\u1eb1ng t\u00ean Class m\u00e0 kh\u00f4ng c\u1ea7n t\u1ea1o Object (v\u00ed d\u1ee5: `Ticket::getTotalSold()`).\n\n### 4. Code Demo: H\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd User Session\n\nH\u00e3y xem c\u00e1ch c\u00e1c kh\u00e1i ni\u1ec7m tr\u00ean k\u1ebft h\u1ee3p l\u1ea1i trong m\u1ed9t b\u00e0i to\u00e1n Backend th\u1ef1c t\u1ebf:\n\n```\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nclass UserSession {\nprivate:\n    string username;\n    bool isLoggedIn;\n    \n    \/\/ Thu\u1ed9c t\u00ednh static: D\u00f9ng chung cho T\u1ea4T C\u1ea2 c\u00e1c Object UserSession\n    static int activeUsers; \n\npublic:\n    \/\/ C\u00c1CH 1: \u0110\u1ecbnh ngh\u0129a ngay b\u00ean trong Class (T\u1ed1t cho h\u00e0m ng\u1eafn)\n    UserSession(string user) {\n        username = user;\n        isLoggedIn = false;\n    }\n\n    \/\/ Ph\u01b0\u01a1ng th\u1ee9c CONST: L\u1eddi th\u1ec1 KH\u00d4NG l\u00e0m thay \u0111\u1ed5i d\u1eef li\u1ec7u Class\n    string getUsername() const {\n        \/\/ isLoggedIn = true; \/\/ L\u1ed6I COMPILER NGAY: V\u00ec \u0111\u00e2y l\u00e0 h\u00e0m const!\n        return username;\n    }\n\n    \/\/ Ph\u01b0\u01a1ng th\u1ee9c STATIC: C\u00f3 th\u1ec3 g\u1ecdi m\u00e0 kh\u00f4ng c\u1ea7n t\u1ea1o Object\n    static int getActiveUsers() {\n        return activeUsers; \/\/ Ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e9p thao t\u00e1c v\u1edbi bi\u1ebfn static\n    }\n\n    \/\/ C\u00c1CH 2: Ch\u1ec9 Khai b\u00e1o \u1edf \u0111\u00e2y, \u0111em ra ngo\u00e0i \u0111\u1ecbnh ngh\u0129a\n    void login();  \n    void logout(); \n};\n\n\/\/ --- Kh\u1edfi t\u1ea1o bi\u1ebfn static \u1edf ngo\u00e0i Class (B\u1eaft bu\u1ed9c trong C++) ---\nint UserSession::activeUsers = 0;\n\n\/\/ --- \u0110\u1ecaNH NGH\u0128A PH\u01af\u01a0NG TH\u1ee8C B\u00caN NGO\u00c0I B\u1eb0NG TO\u00c1N T\u1eec :: ---\n\nvoid UserSession::login() {\n    if (!isLoggedIn) {\n        isLoggedIn = true;\n        activeUsers++; \/\/ T\u0103ng bi\u1ebfn d\u00f9ng chung\n        cout << \"[INFO] \" << username << \" da dang nhap.\\n\";\n    }\n}\n\nvoid UserSession::logout() {\n    if (isLoggedIn) {\n        isLoggedIn = false;\n        activeUsers--; \/\/ Gi\u1ea3m bi\u1ebfn d\u00f9ng chung\n        cout << \"[INFO] \" << username << \" da dang xuat.\\n\";\n    }\n}\n\n\/\/ --------------------------------------------------------\n\nint main() {\n    \/\/ G\u1ecdi h\u00e0m static TR\u01af\u1edaC KHI t\u1ea1o b\u1ea5t k\u1ef3 Object n\u00e0o\n    cout << \"So user online ban dau: \" << UserSession::getActiveUsers() << \"\\n\\n\";\n\n    UserSession user1(\"john_doe\");\n    UserSession user2(\"alice_99\");\n\n    user1.login();\n    user2.login();\n\n    \/\/ G\u1ecdi l\u1ea1i h\u00e0m static \u0111\u1ec3 th\u1ea5y s\u1ef1 thay \u0111\u1ed5i to\u00e0n c\u1ee5c\n    cout << \"\\nSo user online hien tai: \" << UserSession::getActiveUsers() << \"\\n\\n\";\n\n    user1.logout();\n\n    return 0;\n}\n```\n\nNh\u1eadn x\u00e9t code:\n\n1. H\u00e0m getUsername() c\u1ef1c k\u1ef3 an to\u00e0n v\u00ec c\u00f3 const, kh\u00f4ng ai c\u00f3 th\u1ec3 d\u00f9ng n\u00f3 \u0111\u1ec3 hack tr\u1ea1ng th\u00e1i login.\n2. H\u00e0m getActiveUsers() c\u00f3 th\u1ec3 g\u1ecdi b\u1ea5t c\u1ee9 l\u00fac n\u00e0o th\u00f4ng qua UserSession::, \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t b\u1ea3ng th\u1ed1ng k\u00ea to\u00e0n h\u1ec7 th\u1ed1ng.\n3. C\u00e1c h\u00e0m login v\u00e0 logout ph\u1ee9c t\u1ea1p \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a t\u00e1ch bi\u1ec7t b\u00ean ngo\u00e0i, gi\u00fap ph\u1ea7n khai b\u00e1o Class \u1edf tr\u00ean tr\u00f4ng r\u1ea5t g\u1ecdn g\u00e0ng.\n\n\n### T\u1ea1m k\u1ebft & G\u1ee3i m\u1edf\n\n\u0110\u1ebfn \u0111\u00e2y, c\u00e1c b\u1ea1n \u0111\u00e3 n\u1eafm trong tay c\u00e1ch vi\u1ebft ru\u1ed9t (implement) cho c\u00e1c ph\u01b0\u01a1ng th\u1ee9c m\u1ed9t c\u00e1ch chuy\u00ean nghi\u1ec7p nh\u1ea5t, bi\u1ebft b\u1ea3o v\u1ec7 d\u1eef li\u1ec7u v\u1edbi `const` v\u00e0 qu\u1ea3n l\u00fd tr\u1ea1ng th\u00e1i chung v\u1edbi `static`.\n\nNh\u01b0ng nh\u00ecn l\u1ea1i code \u1edf ph\u1ea7n 4, c\u00e1c b\u1ea1n s\u1ebd th\u1ea5y: D\u00f9 ch\u00fang ta \u0111\u00e3 \u0111\u1ea9y c\u00e1c h\u00e0m `login()`, `logout()` ra b\u00ean ngo\u00e0i Class b\u1eb1ng to\u00e1n t\u1eed `::`, th\u00ec t\u1ea5t c\u1ea3 ch\u00fang v\u1eabn \u0111ang... chen ch\u00fac trong c\u00f9ng m\u1ed9t file `main.cpp`! N\u1ebfu d\u1ef1 \u00e1n c\u00f3 50 Class, c\u00e1i file n\u00e0y s\u1ebd ph\u00ecnh to \u0111\u1ebfn h\u00e0ng ng\u00e0n d\u00f2ng code, kh\u00f4ng ai c\u00f3 th\u1ec3 \u0111\u1ecdc v\u00e0 b\u1ea3o tr\u00ec n\u1ed5i.\n\n\u0110\u00e3 \u0111\u1ebfn l\u00fac ch\u00fang ta ph\u1ea3i \"ph\u1eabu thu\u1eadt\" t\u00e1ch ch\u00fang ra th\u00e0nh nh\u1eefng m\u1ea3nh gh\u00e9p \u0111\u1ed9c l\u1eadp. H\u1eb9n g\u1eb7p l\u1ea1i anh em \u1edf B\u00e0i 9: \u0110\u1ecbnh ngh\u0129a ph\u01b0\u01a1ng th\u1ee9c b\u1eb1ng c\u00e1ch chia file - Ngh\u1ec7 thu\u1eadt qu\u1ea3n l\u00fd Source Code chu\u1ea9n Enterprise! Nh\u1edb Upvote \u0111\u1ec3 m\u00ecnh s\u1edbm ra b\u00e0i ti\u1ebfp theo nh\u00e9!","published_at":"2026-04-19T02:25:48.000000Z","scheduled_publish_at":null,"is_published":true,"is_shared":false,"updated_at":"2026-04-19T17:00:29.000000Z","edited_at":"2026-04-19T02:25:25.000000Z","translation_source":null,"trend_at":null,"promoted_at":null,"reading_time":5,"points":1,"views_count":12,"clips_count":0,"comments_count":1,"rated_value":null,"promoted":false,"trending":false,"is_draft":false,"is_public":true,"locale_code":"vi","is_video":false,"thumbnail_url":"https:\/\/images.viblo.asia\/88cb61c8-9f42-4be9-90ea-a9c6c8ebabdb.png","user":{"data":{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":60,"reputation":3754,"posts_count":297,"banned_at":null,"level_partner":null,"following":false}},"tags":{"data":[{"slug":"bad-programming","name":"Bad Programming"},{"slug":"class-method","name":"class method"},{"slug":"const","name":"const"},{"slug":"cpp","name":"C++"},{"slug":"static","name":"Static"}]},"commentators":{"data":[{"id":182653,"url":"https:\/\/viblo.asia\/u\/hhoang","avatar":"90700a59-6e71-4d6c-bff6-0223a4e007c4.jpg","name":"Nguy\u1ec5n Huy Ho\u00e0ng","username":"hhoang","followers_count":0,"reputation":0,"posts_count":0,"banned_at":null,"level_partner":null}]}}],"meta":{"pagination":{"total":44241,"count":20,"per_page":20,"current_page":1,"total_pages":2213,"links":{"next":"http:\/\/viblo.asia\/posts?page=2"}}}}