<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-15699680</id><updated>2021-07-11T16:02:06.786+07:00</updated><title type='text'>Học Java thật là đơn giản </title><subtitle type='html'>Java Core - Java Web và những công nghệ liên quan</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>648</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15699680.post-2942284584513190058</id><published>2021-06-23T22:54:00.002+07:00</published><updated>2021-06-23T22:54:41.879+07:00</updated><title type='text'>Bạch sen</title><content type='html'>&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;Lặng lẽ mọc từ lớp bùn đen đúa&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Trắng tinh khôi em rực rỡ giữa đời&lt;/span&gt;&amp;nbsp;&lt;div&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Rồi sớm kia tàn cánh rụng, nhụy rơi&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;font-size: 16px;&quot;&gt;Kiếp vô thường, em về nơi đất mẹ&lt;/span&gt;   &lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Duyên đã đến và đi từ vạn lẽ&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Cõi nhân sinh vốn đẹp đẽ làm sao&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Dẫu một lần ngẩng mặt ngắm trời cao&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Em cũng thấy tự thân mình may mắn&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Rồi chuyển kiếp thành đài sen xanh ngắt&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Tụ yêu thương trong những hạt trắng ngần&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Góp cho đời là một chút hóa thân&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Em rực rỡ đã muôn phần không uổng&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Chỉ một sớm là cánh buông khỏi nhụy&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Thả trôi mình trên mặt nước trong xanh&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Em rong chơi hưởng trọn sự mát lành&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Trên dòng nước long lanh phơi nắng sớm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Lẽ cuộc đời sinh ra rồi được nhớn&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Tuổi thanh xuân căng sức trẻ dạt dào&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Lúc thân tàn cũng vui vẻ làm sao&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Để khi diệt không vướng vào sầu lụy&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/2942284584513190058/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2021/06/bach-sen.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/2942284584513190058'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/2942284584513190058'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2021/06/bach-sen.html' title='Bạch sen'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7108604896643051469</id><published>2021-06-19T23:09:00.002+07:00</published><updated>2021-06-19T23:09:18.436+07:00</updated><title type='text'>Bình yên một chốn an nhiên</title><content type='html'>&lt;p&gt;&lt;span face=&quot;&amp;quot;Segoe UI&amp;quot;, system-ui, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, sans-serif&quot; style=&quot;font-size: 14px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;span face=&quot;&amp;quot;Segoe UI&amp;quot;, system-ui, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, sans-serif&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Con chẳng đến, cũng chẳng đi&lt;br /&gt;Trời xanh mây trắng, còn gì ở đây?&lt;br /&gt;Thảnh thơi những bước chân gầy&lt;br /&gt;Lặng im thiền định chốn này lắng tâm&lt;/span&gt;&lt;br /&gt;  &lt;span style=&quot;font-family: &amp;quot;Segoe UI&amp;quot;, system-ui, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, sans-serif; font-size: 14px;&quot;&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;span face=&quot;&amp;quot;Segoe UI&amp;quot;, system-ui, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, sans-serif&quot; style=&quot;font-size: 14px;&quot;&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Bình yên cây cối lặng câm&lt;br /&gt;Ru mình câu hát thì thầm trong tim&lt;br /&gt;Con về đây để kiếm tìm&lt;br /&gt;Một làng quê cũ lãng quên lâu rồi&lt;br /&gt;Bữa cơm chay cứ bồi hồi&lt;br /&gt;Bước chân an lạc thảnh thơi xứ người&lt;br /&gt;&lt;br /&gt;Câu kinh bình lặng cuộc đời&lt;br /&gt;Những bài pháp thoại, những lời thầy răn&lt;br /&gt;Lòng buông lúc ngủ lúc ăn&lt;br /&gt;An nhiên một cõi lắng tâm đáy lòng.&lt;br /&gt;&lt;br /&gt;Rồi mai về với xứ Đông&lt;br /&gt;Hồn luôn hướng tới sư Ông, sư Thầy&lt;br /&gt;Và mong lại có một ngày&lt;br /&gt;Gót chân nhẹ bước chốn này bình yên.&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Làng Mai Thái Lan 2019&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7108604896643051469/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2021/06/binh-yen-mot-chon-nhien.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7108604896643051469'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7108604896643051469'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2021/06/binh-yen-mot-chon-nhien.html' title='Bình yên một chốn an nhiên'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-3305130586974087461</id><published>2021-06-19T23:01:00.007+07:00</published><updated>2021-06-19T23:03:10.652+07:00</updated><title type='text'>Dị mộng 2</title><content type='html'>&lt;p&gt;Ta thõng đời nhìn xuống đáy đêm thâu&lt;/p&gt;&lt;p&gt;Nghe nỉ non tiếng giãi giầu than vãn&lt;/p&gt;&lt;p&gt;Lũ ngoa ngôn rỉ tai lời bầu bạn&lt;/p&gt;&lt;p&gt;Vạn cung sầu hờn oán trách đằng lưng&lt;/p&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Rồi một chốc ta bỗng hóa dửng dưng&lt;/p&gt;&lt;p&gt;Khắp xung quanh phủ lạnh lùng ham muốn&lt;/p&gt;&lt;p&gt;Nơi mệt nhoài nở nụ cười gắng gượng&lt;/p&gt;&lt;p&gt;Ta lịm nằm thườn thượt tiễn màu đêm&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ta lịm nằm giữa bề bộn lãng quên&lt;/p&gt;&lt;p&gt;Sau triệu năm lắng dìm màu bụi cát&lt;/p&gt;&lt;p&gt;Gió đẩy hồn lánh xa đời ngột ngạt&lt;/p&gt;&lt;p&gt;Ta bỏ thời lầm lạc sống bình an&lt;/p&gt;&lt;span&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Cuộc sinh tồn là tạm bợ thế gian&lt;/p&gt;&lt;p&gt;Sao khoắng tâm bởi lòng tham vọng động?&lt;/p&gt;&lt;p&gt;Chấm hơi men ta tìm yên lẽ sống&lt;/p&gt;&lt;p&gt;Lối vô vi gieo mầm mống đạo đời&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Lỡ u mê từ muôn vạn kiếp người&lt;/p&gt;&lt;p&gt;Ta dửng dưng dõi miếng mồi lợi lộc&lt;/p&gt;&lt;p&gt;Níu thinh không buông màu đêm lăn lóc&lt;/p&gt;&lt;p&gt;Lắng tâm điên nơi hằn học gặm mòn&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ta cố nghe trong đất lũ cô hồn&lt;/p&gt;&lt;p&gt;Cứ ỉ ôi kể nỗi buồn vào gió&lt;/p&gt;&lt;p&gt;Vạn cỏ cây mọc trên từng mục rữa&lt;/p&gt;&lt;p&gt;Mởn sức xanh qua muôn thủa sinh tồn&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Cõi nhân gian, sinh diệt cứ dập dồn&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/3305130586974087461/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2021/06/di-mong-2.html#comment-form' title='3 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/3305130586974087461'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/3305130586974087461'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2021/06/di-mong-2.html' title='Dị mộng 2'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7933744316133782995</id><published>2018-02-09T09:19:00.002+07:00</published><updated>2018-02-09T09:20:16.947+07:00</updated><title type='text'>Những hình ảnh đầu tiên về VietSpider 4</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/--CnG-lgTTlE/Wn0E5zR7_rI/AAAAAAAAEiE/rpK3uBqkkRgB2meDzzmA4ER8SEUgIWaPgCEwYBhgL/s1600/vietspider-4.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;853&quot; data-original-width=&quot;1600&quot; height=&quot;170&quot; src=&quot;https://1.bp.blogspot.com/--CnG-lgTTlE/Wn0E5zR7_rI/AAAAAAAAEiE/rpK3uBqkkRgB2meDzzmA4ER8SEUgIWaPgCEwYBhgL/s320/vietspider-4.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;Sau tròn 10 năm - hệ thống khai thác dữ liệu đã thay đổi cơ bản về chất phiên bản thế hệ số 4.&lt;br /&gt;&lt;br /&gt;VietSpider 4 xin hé lộ những hình ảnh mới nhất.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-VF6jCzGWqG8/Wn0E0wdh-TI/AAAAAAAAEhU/kWNRZPKcGBYObjvDrJDIbyRBe1MtEQAhQCLcBGAs/s1600/vietspider-4-crawling.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;845&quot; data-original-width=&quot;1600&quot; height=&quot;169&quot; src=&quot;https://4.bp.blogspot.com/-VF6jCzGWqG8/Wn0E0wdh-TI/AAAAAAAAEhU/kWNRZPKcGBYObjvDrJDIbyRBe1MtEQAhQCLcBGAs/s320/vietspider-4-crawling.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-LKP8QbGPsd8/Wn0E1CdmyrI/AAAAAAAAEhY/Zaktrot-QvM1Lo7ThsyfUJ60_ljGvKcBwCLcBGAs/s1600/vietspider-4-create-channel.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;850&quot; data-original-width=&quot;1600&quot; height=&quot;169&quot; src=&quot;https://1.bp.blogspot.com/-LKP8QbGPsd8/Wn0E1CdmyrI/AAAAAAAAEhY/Zaktrot-QvM1Lo7ThsyfUJ60_ljGvKcBwCLcBGAs/s320/vietspider-4-create-channel.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-Sn9OyNFb_bs/Wn0E1A5Q0gI/AAAAAAAAEhc/NQn9wg3gpPgJ-vJPZF3jA7-5FdiQ27KsACLcBGAs/s1600/vietspider-4-data.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;847&quot; data-original-width=&quot;1600&quot; height=&quot;169&quot; src=&quot;https://4.bp.blogspot.com/-Sn9OyNFb_bs/Wn0E1A5Q0gI/AAAAAAAAEhc/NQn9wg3gpPgJ-vJPZF3jA7-5FdiQ27KsACLcBGAs/s320/vietspider-4-data.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-pAY5ZonvPyQ/Wn0E2b8nKSI/AAAAAAAAEhg/0SCkVowpzh8LBqkHW8nKcEURt1_VV96lwCLcBGAs/s1600/vietspider-4-monitor.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;850&quot; data-original-width=&quot;1600&quot; height=&quot;169&quot; src=&quot;https://2.bp.blogspot.com/-pAY5ZonvPyQ/Wn0E2b8nKSI/AAAAAAAAEhg/0SCkVowpzh8LBqkHW8nKcEURt1_VV96lwCLcBGAs/s320/vietspider-4-monitor.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-fFevvqIw4uc/Wn0E2p33hiI/AAAAAAAAEhk/DPq0YNrbo_s8RR4_C9PTrxvk73YdaYc0gCLcBGAs/s1600/vietspider-4-proxy-store.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;852&quot; data-original-width=&quot;1600&quot; height=&quot;170&quot; src=&quot;https://3.bp.blogspot.com/-fFevvqIw4uc/Wn0E2p33hiI/AAAAAAAAEhk/DPq0YNrbo_s8RR4_C9PTrxvk73YdaYc0gCLcBGAs/s320/vietspider-4-proxy-store.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-s0lqplqNFUE/Wn0E2_SprNI/AAAAAAAAEho/IxrPiJb69A81DQ74CWfqtJqQnNDTZHlegCLcBGAs/s1600/vietspider-4-report-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;710&quot; data-original-width=&quot;1384&quot; height=&quot;164&quot; src=&quot;https://4.bp.blogspot.com/-s0lqplqNFUE/Wn0E2_SprNI/AAAAAAAAEho/IxrPiJb69A81DQ74CWfqtJqQnNDTZHlegCLcBGAs/s320/vietspider-4-report-2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-qQ18dommwIo/Wn0E3F08dTI/AAAAAAAAEhs/k28A7wtj0UUeNI4Q3wMFHCTRae2dQgULQCLcBGAs/s1600/vietspider-4-report.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1159&quot; data-original-width=&quot;1600&quot; height=&quot;231&quot; src=&quot;https://1.bp.blogspot.com/-qQ18dommwIo/Wn0E3F08dTI/AAAAAAAAEhs/k28A7wtj0UUeNI4Q3wMFHCTRae2dQgULQCLcBGAs/s320/vietspider-4-report.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-wzuXVMZ2EX8/Wn0E3wse43I/AAAAAAAAEhw/eXamlZQKpsc-wmjCrCcVOSdftBGZzzvvgCLcBGAs/s1600/vietspider-4-user.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;854&quot; data-original-width=&quot;1600&quot; height=&quot;170&quot; src=&quot;https://1.bp.blogspot.com/-wzuXVMZ2EX8/Wn0E3wse43I/AAAAAAAAEhw/eXamlZQKpsc-wmjCrCcVOSdftBGZzzvvgCLcBGAs/s320/vietspider-4-user.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-ethepW1He4w/Wn0E4aD-YtI/AAAAAAAAEh4/Z_xKCmV44qID-z8strO9dwC_FJstGY72ACLcBGAs/s1600/vietspider-4-web2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;780&quot; data-original-width=&quot;1600&quot; height=&quot;156&quot; src=&quot;https://2.bp.blogspot.com/-ethepW1He4w/Wn0E4aD-YtI/AAAAAAAAEh4/Z_xKCmV44qID-z8strO9dwC_FJstGY72ACLcBGAs/s320/vietspider-4-web2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-HmOPQMw1MZQ/Wn0E4oydr8I/AAAAAAAAEh8/Ii1kSd95fhEAVN5wC6SaWaxHe21KhVaggCLcBGAs/s1600/vietspider-4-web3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1055&quot; data-original-width=&quot;1600&quot; height=&quot;211&quot; src=&quot;https://2.bp.blogspot.com/-HmOPQMw1MZQ/Wn0E4oydr8I/AAAAAAAAEh8/Ii1kSd95fhEAVN5wC6SaWaxHe21KhVaggCLcBGAs/s320/vietspider-4-web3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-hfJyXAkjxd8/Wn0E4NJ4HgI/AAAAAAAAEh0/gp2W28cYwz4E6_xnvktVde6zvfn5wXH-wCLcBGAs/s1600/vietspider-4-web.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1054&quot; data-original-width=&quot;1600&quot; height=&quot;210&quot; src=&quot;https://4.bp.blogspot.com/-hfJyXAkjxd8/Wn0E4NJ4HgI/AAAAAAAAEh0/gp2W28cYwz4E6_xnvktVde6zvfn5wXH-wCLcBGAs/s320/vietspider-4-web.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-E-CV4lDrEdg/Wn0E5JYlYPI/AAAAAAAAEiA/mkIugFSaLLkfh_agJrsV5QtrI-nahcb4QCLcBGAs/s1600/vietspider-4-website.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;852&quot; data-original-width=&quot;1600&quot; height=&quot;170&quot; src=&quot;https://3.bp.blogspot.com/-E-CV4lDrEdg/Wn0E5JYlYPI/AAAAAAAAEiA/mkIugFSaLLkfh_agJrsV5QtrI-nahcb4QCLcBGAs/s320/vietspider-4-website.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7933744316133782995/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2018/02/nhung-hinh-anh-au-tien-ve-vietspider-4.html#comment-form' title='12 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7933744316133782995'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7933744316133782995'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2018/02/nhung-hinh-anh-au-tien-ve-vietspider-4.html' title='Những hình ảnh đầu tiên về VietSpider 4'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/--CnG-lgTTlE/Wn0E5zR7_rI/AAAAAAAAEiE/rpK3uBqkkRgB2meDzzmA4ER8SEUgIWaPgCEwYBhgL/s72-c/vietspider-4.png" height="72" width="72"/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-8534414458416816515</id><published>2017-12-28T10:36:00.000+07:00</published><updated>2017-12-28T10:36:26.353+07:00</updated><title type='text'>Upgrade OpenSSH lên 7.6 gặp sự cố Permissiona Denied trên Centos 7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;span class=&quot;&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span title=&quot;Могу лишь сообщить, что при установке пакет удаляет /etc/pam.d/sshd и записывает на его место новый, со следующим содержимым:  &quot;&gt;I can only tell you that upon installation, the package removes  /etc/pam.d/sshd and writes a new one in its place, with the following  contents:&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;#%PAM-1.0 &quot;&gt;#% PAM-1.0&lt;/span&gt;&lt;span title=&quot;auth       required     pam_stack.so service=system-auth &quot;&gt;auth required pam_stack.so service = system-auth&lt;/span&gt;&lt;span title=&quot;account    required     pam_nologin.so &quot;&gt;account required pam_nologin.so&lt;/span&gt;&lt;span title=&quot;account    required     pam_stack.so service=system-auth &quot;&gt;account required pam_stack.so service = system-auth&lt;/span&gt;&lt;span title=&quot;password   required     pam_stack.so service=system-auth &quot;&gt;password required pam_stack.so service = system-auth&lt;/span&gt;&lt;span title=&quot;session    required     pam_stack.so service=system-auth  &quot;&gt;session required pam_stack.so service = system-auth&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;И вот тут начинаются проблемы, потому что в Centos7 нет pam_stack.so, полагаю он исключен как устаревший.&quot;&gt;And here the problems begin, because in Centos7 there is no pam_stack.so, I think it is excluded as obsolete. &lt;/span&gt;&lt;span title=&quot;Если с такой конфигурацией мы поставим в sshd опцию «UsePAM yes», то все просто перестанет работать, при попытке авторизации сервер сбрасывает соединения, а в лог secure валятся ошибки:  &quot;&gt;If with this configuration we put the option &quot;UsePAM yes&quot; in sshd,  then everything will simply stop working, when an authorization attempt  is made, the server resets the connections, and errors are logged in the  secure log:&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;localhost sshd[2111]: PAM adding faulty module: /usr/lib64/security/pam_stack.so &quot;&gt;localhost sshd [2111]: PAM adding faulty module: /usr/lib64/security/pam_stack.so&lt;/span&gt;&lt;span title=&quot;localhost sshd[2115]: PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared object file: No such file or directory  &quot;&gt;localhost sshd [2115]: PAM unable to dlopen  (/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so:  can not open shared object file: No such file or directory&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;Гугл знает все, и решение нашлось, оно очень простое.&quot;&gt;Google knows everything, and the solution was found, it is very simple. &lt;/span&gt;&lt;span title=&quot;Везде, где в /etc/pam.d/sshd было: &quot;&gt;Everywhere where in /etc/pam.d/sshd was:&lt;/span&gt;&lt;span title=&quot;required     pam_stack.so service=system-auth &quot;&gt;required pam_stack.so service = system-auth&lt;/span&gt;&lt;span title=&quot;должно быть: &quot;&gt;should be:&lt;/span&gt;&lt;span title=&quot;include      system-auth  &quot;&gt;include system-auth&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;И все начинает работать!&quot;&gt;And everything starts working! &lt;/span&gt;&lt;span title=&quot;Для полной ясности, /etc/pam.d/sshd должен выглядеть так:  &quot;&gt;For complete clarity, /etc/pam.d/sshd should look like this:&lt;br /&gt;&lt;/span&gt;&lt;span title=&quot;#%PAM-1.0 &quot;&gt;#% PAM-1.0&lt;/span&gt;&lt;span title=&quot;auth       include      system-auth &quot;&gt;auth include system-auth&lt;/span&gt;&lt;span title=&quot;account    required     pam_nologin.so &quot;&gt;account required pam_nologin.so&lt;/span&gt;&lt;span title=&quot;account    include      system-auth &quot;&gt;account include system-auth&lt;/span&gt;&lt;span title=&quot;password   include      system-auth &quot;&gt;password include system-auth&lt;/span&gt;&lt;span title=&quot;session    include      system-auth&quot;&gt;session include system-auth&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/8534414458416816515/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/12/upgrade-openssh-len-76-gap-su-co.html#comment-form' title='1 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/8534414458416816515'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/8534414458416816515'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/12/upgrade-openssh-len-76-gap-su-co.html' title='Upgrade OpenSSH lên 7.6 gặp sự cố Permissiona Denied trên Centos 7'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-745681812989851314</id><published>2017-12-19T23:02:00.003+07:00</published><updated>2017-12-19T23:02:50.187+07:00</updated><title type='text'>Java 8 - Check Numberic </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;h3 class=&quot;post-title entry-title&quot;&gt;&lt;/h3&gt;&lt;div class=&quot;post-share-buttons post-share-buttons-top&quot;&gt;&lt;div class=&quot;byline post-share-buttons goog-inline-block&quot;&gt;&lt;div class=&quot;sharing&quot; data-title=&quot;Java 8 - Check Numberic&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;post-share-buttons post-share-buttons-top&quot;&gt;&lt;div class=&quot;byline post-share-buttons goog-inline-block&quot;&gt;&lt;div class=&quot;sharing&quot; data-title=&quot;Java 8 - Check Numberic&quot;&gt;&lt;div class=&quot;share-buttons-container&quot;&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;post-body entry-content float-container&quot; id=&quot;post-body-9177890038825005461&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;&lt;div dir=&quot;ltr&quot; id=&quot;docs-internal-guid-8b0524ca-6f80-f51c-6178-c9403fcd2d29&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt; String someString = &quot;123123&quot;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt; boolean isNumeric = someString.chars().allMatch(Character::isDigit);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;String&lt;/span&gt; someString = &quot;123123.2&quot;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #666666; font-family: &amp;quot;Proxima Nova&amp;quot;; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt; boolean&amp;nbsp;&amp;nbsp; isNumeric = someString.chars().allMatch(c -&amp;gt; Character.isDigit(c) || &amp;nbsp;c == &#39;.&#39; || &amp;nbsp;c == &#39;,&#39; );&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/745681812989851314/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/12/java-8-check-numberic.html#comment-form' title='1 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/745681812989851314'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/745681812989851314'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/12/java-8-check-numberic.html' title='Java 8 - Check Numberic '/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-3327625457162442466</id><published>2017-12-04T10:45:00.001+07:00</published><updated>2017-12-11T11:04:04.658+07:00</updated><title type='text'>Tuyển sinh khóa tuyển dụng đào tạo học việc Java/Spring 02 </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-lNgy1Fd7GPA/WiTEqrRkriI/AAAAAAAAEYc/zToPSpqSS94hCHJ6cgndX5ByaGdnspZjgCEwYBhgL/s1600/IMG_1505827480481%2B%25281%2529.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1280&quot; height=&quot;180&quot; src=&quot;https://3.bp.blogspot.com/-lNgy1Fd7GPA/WiTEqrRkriI/AAAAAAAAEYc/zToPSpqSS94hCHJ6cgndX5ByaGdnspZjgCEwYBhgL/s320/IMG_1505827480481%2B%25281%2529.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Sau khi kết thúc khóa 01, chúng tôi tiếp tục tuyển sinh khóa 02 - Java/JEE/Spring bắt đầu từ giữa&amp;nbsp; tháng&amp;nbsp; 12 này.&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Về nội dung đào tạo, bao gồm cả chương trình cho người mới bắt đầu học  lập trình, người đã biết lập trình sang học Java và cả người đã học hết  chương trình Java Core. Chương trình chính gồm khoảng gần 50 bài giảng  cả lý thuyết lẫn thực hành trải dài suốt quá trình học. Mỗi bài học sẽ  nặng cả phần lab và bài giảng. Với 1 chương trình bao hàm cả lý thuyết  căn bản phần mềm (lồng ghép trong phần Java Core) cộng với công nghệ,  thiết kế ở phần JEE, khóa học đòi hỏi sự nỗ lực hết mức của &amp;nbsp;mỗi học  viên để hoàn thành.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Mời xem nội dung đào tạo&lt;a href=&quot;http://www.hocjava.online/2017/09/tuyen-sinh-kiem-tuyen-dung-khoa-ao-tao.html&quot;&gt; tại đây&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Nội dung chương trình có thể sẽ được thay đổi, cập nhật trong suốt quá  trình học như giới thiệu về Java 9, Spring &amp;nbsp;phiên bản mới, JEE 8,...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Khóa học kéo dài 3 tháng. Sau 3 tháng, những ai hoàn thành sẽ ký hợp  đồng học việc có lương với công ty, sau 3 tháng học việc có thể &amp;nbsp;ký hợp  đồng chính thức. Do đó, chúng tôi mong muốn tuyển dụng được những người  nghiêm túc muốn theo đuổi lập trình Java.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Về giảng viên/trợ giảng: &amp;nbsp;Ngoài tôi trực tiếp giảng dạy chính thức, sẽ  có 2-3 trợ giảng giúp đứng lớp các bạn hoàn thành các bài lab. Các trợ  giảng đều là trưởng nhóm dự án/sản phẩm có ít nhất 5 năm kinh nghiệm.  Ngoài ra, tôi sẽ mời các chuyên gia tham gia giảng dạy thêm về thiết kế,  quy trình phát triển phần mềm (scrum, lean, software architecture,  test,...).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Về học phí sẽ là 4 triệu: đây là chi phí sẽ được chi trả trực tiếp cho  giảng viên/trợ giảng/chuyên gia. Hoàn tòan công ty không thu lợi được  bất cứ &amp;nbsp;đồng nào từ học phí của các bạn. Với khoảng 25 buổi + gần 50  bài, chi phí thực tế chưa đến 200 nghìn/buổi/3 tiếng.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Về địa điểm học: số 19 Trúc Khê - Văn phòng làm việc của công ty.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Về thời gian dự tính:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;- Thứ 3 + Thứ 5 hàng tuần.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;- Bắt đầu từ 18h - 21h.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;- Khai giảng ngày 18/12  (thứ 6)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Ngoài thời gian học chính thức, các bạn có thể lên công ty để làm bài lab và nhận sự hỗ trợ của những người đã vào nghề.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Lớp dự kiến khoảng 15 người. Dưới đây là vài hình ảnh lớp 01.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-Xte1zQg7c78/WiTEow38PPI/AAAAAAAAEX0/wQFailXVrkoPdr58wGB84PSS6x5VEJJAQCLcBGAs/s1600/20170912_181202%2B%25281%2529.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://4.bp.blogspot.com/-Xte1zQg7c78/WiTEow38PPI/AAAAAAAAEX0/wQFailXVrkoPdr58wGB84PSS6x5VEJJAQCLcBGAs/s320/20170912_181202%2B%25281%2529.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-Fuh4fNnaUWs/WiTEomm5TXI/AAAAAAAAEXw/TWqL53ctM_EWXkJjqynPOTnl6K2RgyH6gCLcBGAs/s1600/20170912_182859%2B%25281%2529.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://1.bp.blogspot.com/-Fuh4fNnaUWs/WiTEomm5TXI/AAAAAAAAEXw/TWqL53ctM_EWXkJjqynPOTnl6K2RgyH6gCLcBGAs/s320/20170912_182859%2B%25281%2529.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-V7Y5i5mOQ4g/WiTEpEuyXGI/AAAAAAAAEX4/mfymyJeN8BwhCvfnJHIfDF1qoHaxp5iVgCLcBGAs/s1600/20170919_201854.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://3.bp.blogspot.com/-V7Y5i5mOQ4g/WiTEpEuyXGI/AAAAAAAAEX4/mfymyJeN8BwhCvfnJHIfDF1qoHaxp5iVgCLcBGAs/s320/20170919_201854.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-krfO2cT-uRc/WiTEqvF4i-I/AAAAAAAAEYA/8GclhLpMRRsR8QbgLCoatU7CxifBZ2nxQCLcBGAs/s1600/20171024_183544%2B%25281%2529.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://4.bp.blogspot.com/-krfO2cT-uRc/WiTEqvF4i-I/AAAAAAAAEYA/8GclhLpMRRsR8QbgLCoatU7CxifBZ2nxQCLcBGAs/s320/20171024_183544%2B%25281%2529.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-qGtHiZ6jVlo/WiTE4vdtfdI/AAAAAAAAEYI/Zjl7msEHXR4mGfP07ciiYkcsfKGq71YywCLcBGAs/s1600/20171024_183530%2B%25281%2529.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; height=&quot;180&quot; src=&quot;https://4.bp.blogspot.com/-qGtHiZ6jVlo/WiTE4vdtfdI/AAAAAAAAEYI/Zjl7msEHXR4mGfP07ciiYkcsfKGq71YywCLcBGAs/s320/20171024_183530%2B%25281%2529.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/3327625457162442466/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/12/tuyen-sinh-khoa-ao-tao-java-02.html#comment-form' title='3 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/3327625457162442466'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/3327625457162442466'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/12/tuyen-sinh-khoa-ao-tao-java-02.html' title='Tuyển sinh khóa tuyển dụng đào tạo học việc Java/Spring 02 '/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-lNgy1Fd7GPA/WiTEqrRkriI/AAAAAAAAEYc/zToPSpqSS94hCHJ6cgndX5ByaGdnspZjgCEwYBhgL/s72-c/IMG_1505827480481%2B%25281%2529.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-755141563556992450</id><published>2017-10-02T21:08:00.003+07:00</published><updated>2017-10-03T08:54:50.984+07:00</updated><title type='text'>Sự tiến hóa của phát triển phần mềm </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-lE-OraapCTE/WdJEgTY9vCI/AAAAAAAAD2c/ElpPE8Uw7_wWmRA60CssOBm0wKjuypCuwCEwYBhgL/s1600/software-gravity.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;560&quot; data-original-width=&quot;700&quot; height=&quot;256&quot; src=&quot;https://1.bp.blogspot.com/-lE-OraapCTE/WdJEgTY9vCI/AAAAAAAAD2c/ElpPE8Uw7_wWmRA60CssOBm0wKjuypCuwCEwYBhgL/s320/software-gravity.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Bài gốc &lt;a href=&quot;http://engineering.procore.com/evolution-of-software-applications/&quot;&gt;Evolution of Software Applications&lt;/a&gt; của tác giả Brian Knapp.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nếu bạn làm phần mềm đủ lâu, bạn sẽ chú ý đến các mẫu thiết kế phần mềm. Tuy nhiên, một pattern chưa bao giờ đủ để đảm bảo sự nâng cấp của hệ thống trong suốt giai đoạn phát triển phần mềm.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mô hình phát triển phần mềm tập trung vào tính năng gói gọn theo tuần khiến chúng ta bị mất quan điểm. Hầu hết những thứ &quot;là sáng chế&quot; hôm nay đều tạo ra từ cách đây hàng thập kỷ. Vấn đề chúng ta phải đối mặt đều đã được giải quyết bởi ai đó.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Software developers không đủ hiểu biết sâu sắc về lịch sử phát triển của nghành.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trên tinh thần đó, tôi muốn đề cập xu hướng mà phần mềm tiến hóa và giải thích lý do tại sao?&lt;/span&gt;&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-weight: 500;&quot;&gt;Khóa đào tạo Java Core/Spring/Java Web/Java Back End/JEE với khối lượng kiến thức lớn, mời &lt;a href=&quot;http://www.hocjava.online/2017/09/tuyen-sinh-kiem-tuyen-dung-khoa-ao-tao.html&quot;&gt;xem chi tiết&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tổng quan&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trước khi bắt đầu, tôi cần định nghĩa một thuật ngữ - &amp;nbsp;&lt;b&gt;Software Gravity&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Software Gravity - yêu cầu bổ sung, thêm mới các tính năng của ứng &amp;nbsp;dụng sẽ thúc đẩy sự phức tạp và tài nguyên cần tới của hệ thống phần mềm trong suốt chu trình phát triển.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-mIsW2bs_fEw/WdJEoX4hmbI/AAAAAAAAD2c/HQhYDRvM7KQIKuZ9fgJLxP5bXGGSOU4ygCEwYBhgL/s1600/software-gravity2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;560&quot; data-original-width=&quot;700&quot; height=&quot;320&quot; src=&quot;https://3.bp.blogspot.com/-mIsW2bs_fEw/WdJEoX4hmbI/AAAAAAAAD2c/HQhYDRvM7KQIKuZ9fgJLxP5bXGGSOU4ygCEwYBhgL/s400/software-gravity2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tôi tin software gravity là động lực tiến hóa của phát triển phần mềm.  &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Xu hướng của phần mềm là ngày càng phức tạp. Những &amp;nbsp;yêu cầu chức năng và mong muốn của người dùng tạo sức nặng xung quanh phần mềm. Gravity kéo độ phức tạp của phần mềm theo thời gian, sự phức tạp này lại đòi hỏi thêm về mặt tài nguyên.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Katamari Damacy Effect - Hiệu ứng Katamari Damacy&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tôi gọi &amp;nbsp;phần này là hiệu ứng &lt;b&gt;Katamari Damacy&lt;/b&gt;. Giống như video game, chức năng xoay quanh độ &amp;nbsp;gia tăng của vòng tròn phức tạp.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Chúng ta bắt đầu với nhỏ và đơn giản, chắc chắn sự lớn mạnh sẽ cuốn theo vòng xoáy khó khăn tăng dần. Cuối cùng, vòng tròn tính năng (hoặc lỗi phần mềm) sẽ là mistaken for a moon.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-9XliIvh_g7U/WdJEwE4JL6I/AAAAAAAAD2c/uY4SQZJu2aYPthT9U2CKbh0DvXX_0-m9wCEwYBhgL/s1600/katamari-damacy-effect.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;560&quot; data-original-width=&quot;700&quot; height=&quot;320&quot; src=&quot;https://3.bp.blogspot.com/-9XliIvh_g7U/WdJEwE4JL6I/AAAAAAAAD2c/uY4SQZJu2aYPthT9U2CKbh0DvXX_0-m9wCEwYBhgL/s400/katamari-damacy-effect.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Theo &amp;nbsp;định kỳ, khi quả bóng quá phức tạp để tiếp tục phát triển, chúng ta cần cấu trúc lại &amp;nbsp;cho hợp với năng lực hiện có.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Vì thế, phần mềm sẽ có xu hướng tiến hóa theo khả năng có thể dự đoán.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Các giai đoạn phát triển phần mềm.&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 0: Con người, giấy và các bảng tính&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 1: Simple Script.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 2: Pile Of Files - chia nhỏ tập tin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 3: The Framework&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 4: Vượt qua Framework&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 5: Modularization &amp;nbsp;- mô đun hóa&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 6: Network System - hệ thống kết nối&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tất cả phần mềm đều ở một giai đoạn nào đó như đề cập ở trên. Tiến triển tự nhiên giữa các giai đoạn đi tới thỏa thuận the Katamari Damacy Effect. Hệ thống lớn đi kèm với phức tạp, sự khác nhau giữa các mô hình cần có để giải quyết vấn đề.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tính phức tạp xác định hệ thống đang tiến triển trong giai đoạn nào. Mỗi giai đoạn của tiến hóa sẽ minh chứng code của bạn và của team trông ra sao. Nó không phải là con đường vòng vo.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nguyên lý cố hữu để giải quyết - chia và trị. Sự phức tạp tăng lên, mô hình hiệu quả nhất là chia để trị, vấn đề sẽ được tách thành các phần nhỏ hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Thường tôi thấy lập trình viên hay tranh cãi tìm ra một công cụ tốt nhất giải quyết tất cả các vấn đề. Nhà phát triển phần mềm thường dựa vào kinh nghiệm mình để giải quyết &amp;nbsp;chứ không căn cứ trên độ khó của bài toán.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Không có bất cứ ngôn ngữ, công cụ, database, framework hoàn hảo cho mọi hệ thống. Khi requiments (yêu cầu cho ứng dụng) thay đổi thì mô hình của bạn cũng phải thay đổi. &amp;nbsp;Nếu không, bạn tốn tiền bạc và thời gian.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Stage 0: Humans, Paper, and Spreadsheets - Người, giấy và bảng tính&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Phần mềm không bắt đầu bằng phần mềm. Hầu hết phần mềm là để giải quyết tự động công việc có sẵn hay một cách truyền tải thông tin hiệu quả hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Phần mềm bắt đầu với con người đã giải quyết vấn đề của giấy, bút, tập tin excel &amp;nbsp;hay những phương tiện truyền thông khác. Đó là giai đoạn đầu tiên của hệ thống.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ví dụ, các nghiệp vụ đối soát đối ứng bắt đầu với giấy, bút. Kế toán viên đối soát các bản ghi giữa hai cột, đối chiếu chúng để loại trừ sai sót. Đó là nghiệp vụ đối soát đối ứng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Phần mềm sẽ căn cứ nghiệp vụ, chuyển nó vào bảng tính, database và tiến trình xử lý dịch vụ trực tuyến. Cơ bản, nó làm điều tương tự. Hệ thống kế toán số sẽ nhanh hơn, rẻ hơn nhưng vẫn đảm bảo cho ra kết quả tương tự.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Không có gì phức tạp, bạn giải quyết cùng một bài toán căn bản.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trong nhiều trường hợp, giai đoạn 0, hệ thống có thể mong muốn phát triển phức tạp hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ví dụ, có hàng triệu danh sách việc phải làm ngoài kia. Như tôi, không gì thay thế là một pocket notebook đơn giản và một cái bút cho mục tiêu hàng ngày.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Phần mềm thường đưa ra tương tác hiệu quả hay tự động là điểm lợi hơn so với một giải pháp truyền thống đơn thuần chứ không phải lý do nó tồn tại. Nói cách khác, có thể chúng ta không cần đến phần mềm.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một cách khôn ngoan, chúng ta nên nhớ rằng, business được cải tiến về mặt tương tác và tự động. Chúng ta không vẽ nghiệp vụ bằng việc viết mã lệnh.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 1: Một Simple Script&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một hệ thống vật lý tồn tại sẵn ở giai đoạn 0 thường sẽ được chuyển thành phần mềm. &amp;nbsp;Nó bắt đầu với một kịch bản đơn giản.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một simple script chính xác như những gì nó thể &amp;nbsp;hiện. Bắt đầu đơn giản với tập tin được viết bằng một scripting language. &amp;nbsp;Nó có thể là PHP, Ruby, Python, Perl hay Bash.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nó không quan trọng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Những gì định nghĩa bằng kịch bản là một tập tin, có một mục đích và chức năng nhỏ gọn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nó không phải là một sản phẩm đã hoàn thiện.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nhưng nó đã giải quyết những vấn đề thay cho tay chân.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Simple script được tạo và bảo trì bởi một lập trình viên độc lập. Cách code thể hiện kinh nghiệm và kỹ năng cá nhân của nhà phát triển. Mỗi script là khác nhau nhưng nó rất dễ dàng để hiểu.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một demo nhanh hay chứng minh ý tưởng ứng dụng sẽ ở giai đoạn này.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 1, bạn cần giữ toàn bộ chương trình ở trong đầu, nó rất dễ để hiểu và debug (tìm lỗi).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Thường script sẽ lấy thông tin người dùng và chức năng. Vì thế, bắt đầu với the Katamari Damacy Effect. Chu trình phát triển sản phẩm sẽ quay vòng để đạt được nhiều chức năng hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Chức năng phức tạp là phân loại phức tạp đầu tiên tạo bởi software gravity - &lt;b&gt;feature complexity&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi simple script trở nên rối rắm, bạn cần phân nhỏ từng files. Chúng ta bắt đầu chuyển qua giai đoạn 2 - The &amp;nbsp;Pile of Files.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;The ball of software keeps growing - Vòng đời phát triển phần mềm lớn dần.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 2: A Pile Of Files&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở giai đoạn 1, phần mềm tập trung vào một mục đích. Theo thời gian, phần mềm bắt đầu tăng thêm các chức năng khác.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi chức năng tăng lên, simple script không thể bỏ nó. Nó cần phân nhỏ thành các tập tin khác nhau. Đó chính là giai &amp;nbsp;đoạn 2.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Chúng ta cần tách mã vào các tập tin khác nhau sao cho chúng dễ hiểu nhất. Hầu hết mọi người đều không thể nhớ đủ 5000 dòng mã nhưng họ có thể hiểu 10 files với 500 dòng mỗi file.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Chia để trị.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một lập trình viên có thể xử lý toàn bộ các tập tin. Nếu phần mềm hữu dụng, các chức năng sẽ phức tạp dần vượt qua khả năng xử lý của một nhà phát triển.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở điểm này, hệ thống cần có một team. Phần mềm bắt đầu với &quot;full stack&quot; developers nhưng khi đã có một team, sự chuyên môn hóa sẽ xảy ra.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở giai đoạn khởi nguồn, tất cả vai trò đều thực hiện bởi một nhà phát triển. Mỗi vai trò có tính đặc thù cao với các chức danh khác nhau như designer, backend developer, frontend developer, project manager, tester, BA,...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Team trở nên phức tạp chính là vấn đề thứ 2 của software gravity. Bắt đầu giai đoạn 2, chức năng phần mềm nhiều lên nó sẽ tạo một team phức tạp - &lt;b&gt;team complexity&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một team đông sẽ nảy sinh vấn đề tương tác, trao đổi, thảo luận. &amp;nbsp;Agile Software&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Development sinh ra để giải quyết vấn đề tương tác giữa các thành viên của team gồm tương tác nội team và tương tác với stake holders (các bên liên quan). &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở giai đoạn này, phần mềm thiết kế theo mô hình hướng công cụ - tooling. Mỗi hệ thống sẽ có đặc thù riêng nhưng là sự kết hợp khác nhau giữa các thư viện.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Theo thời gian, các pattern cơ bản sẽ xuất hiện. Hệ thống sẽ có database objects, system flow controll và một hệ thống UI view/layout.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Bạn kết thúc với một giải pháp tự phát nội bộ, đại khái giống như một framework. Hầu hết sẽ như vậy và nó rõ ràng hơn khi phần mềm lớn dần.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi các chức năng phức tạp thêm, nhà phát triển ít quan tâm phát minh lại bánh xe và tập trung hơn vào giải quyết các vấn đề đặc thù của phần mềm.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một team to sẽ đồng nghĩa bất đồng nảy sinh khi tìm tiếng nói chung về công nghệ, công cụ giải quyết vấn đề.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi các chức năng phức tạp và team đông, quan trọng hơn việc xử lý nghiệp vụ với một đống các files là hệ thống sẽ phải chuyển dần sang giai đoạn kế tiếp - tương thích với một framework.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;The ball of software keeps growing - quả bóng phần mềm lớn dần.&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;Giai đoạn 3: The Framework&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Frameworks tồn tại để giải quyết các vấn đề chung và tạo sự tương tác dễ dàng hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một framework sẽ đặt ra các tiêu chuẩn, thư viện để làm việc cùng nhau giải quyết các vấn đề chung. Nó đơn giản, không có gì đặt biệt cả.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nó là một công cụ để giảm nhẹ sự phức tạp của chức năng và team. Giải quyết vấn đề với các mẫu chung (common patterns), và bạn sẽ di chuyển nhanh hơn với một team.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Frameworks tạo sự thuê mướn dễ dàng. Giai đoạn 3 của dựa án được thuê mướn xoay quanh framework và tập các kỹ năng. Hầu hết các dự &amp;nbsp;án phát triển phần mềm chuyên nghiệp đều ở giai đoạn 3.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một dự án được xây dựng trên một framework không có nghĩa là đang ở giai đoạn 3 của hệ thống. Ở giai đoạn 1 và 2 của dự án, framework cũng có thể được sử dụng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một developer chuyên nghiệp được trả nhiều hơn ở giai đoạn 3+ của hệ thống. Hầu hết đã thành thạo với một &amp;nbsp;framework cụ thể. Do đó, họ có thể sử dụng một framework trong khi thực sự không cần đến. Tôi thường gọi vấn đề này là lạm dụng framework.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mọi người có xu hướng tiếp cận với những gì quen thuộc, quen gì làm nấy.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Như mọi khi, team và chức năng phức tạp sẽ đẩy phần mềm vào một hệ thống lớn hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Sau giai đoạn 3, bạn sẽ bước vào loại phức tạp kế tiếp - &amp;nbsp;sự phức tạp của dữ liệu - &lt;b&gt;data complexity&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Dữ liệu phức tạp là loại phức tạp tiếp theo của software gravity. Chức năng phức tạp sẽ tạo ra &amp;nbsp;dữ liệu phức tạp.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Sự phức tạp của dữ liệu thể hiện ở cấu trúc, số lượng và sử dụng dữ liệu trong phần mềm.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Chức năng phức tạp ngụ ý bằng cấu trúc dữ liệu phức tạp dựa trên framework được thiết kế cho nó. Bạn có thể nhận biết một mô hình dữ liệu phức tạp qua sự rối rắm, chậm chạp của &amp;nbsp;lệnh truy vấn đến data.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Số lượng lớn của dữ liệu cũng là vấn đề tương tự. Mỗi một bit của dữ liệu được lưu trữ &amp;nbsp;sẽ làm hệ thống chậm hơn và khó quản lý hơn. Và do đó, nó sẽ dẫn bạn đến vấn đề được gọi là &quot;big data&quot;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Sử dụng dữ liệu cũng là vấn đề phức tạp thứ 3 của phức tạp dữ liệu. Nhiều truy vấn và các báo cáo rối rắm sẽ nảy sinh caching (lưu tạm) hoặc hạ tầng báo cáo (reporting infrastructure). Nhiều framework đã bỏ qua những thứ này.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Sự phức tạp của hệ thống tăng lên, bạn bắt đầu chống lại những giới hạn của framework.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi nó xảy đến, một dự án sẽ chuyển sang giai đoạn kế tiếp - giai đoạn 4: Vượt qua framework. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;The ball of software keeps growing - phần mềm tiếp tục phình to.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 4: Beyond The Framework&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mọi framework đều có giới hạn. Không có framework nào đủ mạnh để giải quyết tất cả các vấn đề.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở vài điểm, chức năng, team, dữ liệu phức tạp sẽ đẩy bạn vượt qua năng lực của framework.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Bạn không nên thay frameworks ở giai đoạn 4.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nó thôi thúc bạn xem xét việc thay đổi frameworks. Nhưng thay đổi framework này lại đối mặt với vấn đề của một framework khác.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 4 là &amp;nbsp;bi kịch. Thật khó để thấy ta chuyển sang giai đoạn 4. Dưới đây là một vài dấu hiện &amp;nbsp;của giai đoạn này.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Team bắt đầu &quot;sáng chế&quot; hoặc khám phá ra vài patterns mới dùng song song nhưng không trở &amp;nbsp;thành một phần của framework. Đó đơn thuần là sự tiến hóa tự nhiên ở cả front-end và back-end của hệ thống.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi &amp;nbsp;UI - User Interface đủ phức tạp, sẽ xuất hiện sự phân tách ở front end framework hay vài ứng dụng client. Các mẫu (patterns) frameworks của bạn không bao gồm những thiết kế như Presenters hay MVVM được tìm ra ở giai đoạn này.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trên back-end, sự &amp;nbsp;phức tạp sẽ đẩy team thẳng tiến tới một internal service object pattern, data model decorators (bao phủ) hay nhiều hệ thống dữ liệu (multiple data systems).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một cách nói khác, ở giai đoạn 4, các senior developer bắt đầu lo lắng về kiến trúc hay cần đọc cuốn Patterns of Enterprise Architecture của Martin Fowler.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trong nhiều cách, giai đoạn 2 và 4 là tương tự. Có vài quy chuẩn hơn ở giai đoạn 3. Một dự án có thể mắc kẹt ở giai đoạn 4 rất lâu.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 4, bạn sẽ trải nghiệm loại phức tạp khác gọi là sự phức tạp của hoạt động thi hành - &lt;b&gt;operation complexity&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Sự phức tạp của hoạt động là loại phức tạp thứ tư trong software gravity. Khi sự phức tạp của tổng thể lớn dần, nó tạo sự phức tạp của thi hành.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Sự phức tạp của thi hành sẽ trở thành mẫu chung của phức tạp hạ tầng và hỗ trợ. &amp;nbsp;Trước đây &amp;nbsp;dùng một máy chủ thì giờ có đến cả tá. Quản lý nhiều hệ thống dữ liệu, backups, bảo mật, cập nhật, v.v mà project sẽ phải đối mặt ở giai đoạn này.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Đây là nơi bắt nguồn của DevOps.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 4 đạt ngưỡng &amp;nbsp;giới hạn quá tải phức tạp cho bất cứ cá nhân độc lập nào có khả năng ảnh hưởng tới hệ thống. Lúc này, giá để thêm chức năng mới, sửa lỗi bởi mỗi nhà phát triển độc lập cao hơn giá trị thực của việc thêm mới chức năng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nhiều người ngụ ý những hệ thống này là “A Big Ball Of Mud” - bóng lớn trong &amp;nbsp;bùn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một team nhận ra vũng lầy mà họ đang ở trong đó, họ quyết định giải quyết vấn đề bằng một trong hai cách. Một là đập đi viết lại, hai là tách nhỏ tính năng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Viết lại toàn bộ - &amp;nbsp;the Big Rewrite là một sai lầm lớn. Nó thất bại rất nhiều. Đừng làm nó.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tách nhỏ hệ thống là giải pháp tốt hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Đây là mô hình của giai đoạn thứ 5 - Modularization.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;The ball of software keeps growing - Quả bóng phần mềm tiếp tục phình to.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 5: Modularization&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi hệ thống đủ to, nó không thể gói gọn vào trong một cái bảng trắng, nó sẽ được phân chia thành các mảnh nhỏ hơn. Thuật ngữ ưa thích trong trường hợp này là modularization - mô đun hóa, &amp;nbsp;nhưng không có gì đặc biệt ở đây cả.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nó chính là chia để trị.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Những luồng chảy tự nhiên trong phần mềm sẽ được phân chia ranh rới. Có hai cách để phân chia hệ thống, bạn sẽ thấy các team sử dụng cả hai.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Đầu tiên, ta có thể cắt theo chức năng. Phần mềm có thể chia thành hệ thống báo cáo, hệ thống tương tác, hệ thống tài liệu, vân vân.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi một dự án đạt ngưỡng ở giai đoạn 5, nó có cả tá các chức năng riêng biệt cần phân tách thành các module trong hệ thống.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Cách thứ hai, chia theo hạ tầng. Ta có thể tách thành user authentication, lưu trữ file, xử lý ảnh, gửi mail, queueing, vân vân. Nếu bạn nhìn những nền tảng như AWS, bạn sẽ thấy một hệ thống lớn được phân tách thành các hạ tầng chia sẻ hữu dụng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trong giai đoạn 5, bạn sẽ thấy team từ 5-10 người làm việc cùng nhau chia tách modules.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Bạn có thể có public api team, độc lập lập với module team, mobile app team, vân vân. Phần mềm lớn lên bằng việc thêm team, hệ thống được phân chia vào các nhóm từ 5-10 người.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ranh giới cho phép các nhóm làm việc độc lập và tương tác với phần khác thông qua communication protocols (giao thức trao đổi) đã được thỏa ước.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Bắt đầu giao đoạn này, một hệ thống được module hóa đơn giản bằng việc tách code vào tổ chức thư mục có định nghĩa ranh giới phân chia. Cuối cùng, một ranh &amp;nbsp;giới rạch ròi giữa các module &amp;nbsp;sẽ cần thiết phải được thiết lập.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tiến hóa tự nhiên của phân chia ranh giới module sẽ là phân tách vật lý của hệ thống. Nó là biểu hiện thực tế của luật Conway.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mô đun hóa vào hệ thống phân lập, bạn sẽ dịch chuyển sang giai đoạn 6 - &amp;nbsp;một network system.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;The ball of software keeps growing - quả bóng phần mềm tiếp tục phình to.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giai đoạn 6: Network System&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một network system là tập các hệ thống nhỏ tương tác với nhau trên giao thức mạng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mạng các hệ thống nhỏ gắn kết với nhau để tạo thành một thực thể lớn hơn. Khi chúng đủ phức tạp, &amp;nbsp;tất cả các hệ thống lại trở thành một tập hệ thống nhỏ hơn cộng tác với nhau thành một thực thể lớn hơn nữa.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở giai đoạn 6, chúng ta cần hiểu nguyên tắc căn bản để tạo nên một network systems.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một &amp;nbsp;network system tốt được định nghĩa bằng chuẩn chung, tài liệu tốt và dễ dàng để sử dụng. Nếu bạn đã từng làm việc với public API, bạn sẽ hiểu những thứ quan trọng &amp;nbsp;như thế nào.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Ở giai đoạn 6, mỗi hệ thống được đối xử như một public API.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Khi mức độ &amp;nbsp;phức tạp trung bình tăng lên, network systems sẽ trở lên thông dụng. Chúng ta có thể gọi là Service Oriented Architecture ở nghĩa rộng hay Microservices ở nghĩa hẹp.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nó là hai mô hình để giải quyết một vấn đề. Cả hai đều tạo một dãy các hệ thống nhỏ hơn và chúng sẽ nói chuyện với nhau thông qua network.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Một thiết kế network system thành công và một kiến trúc ít hơn về mô hình dữ liệu và nhiều hơn về thiết kế giao thức tương tác &amp;nbsp;giữa các thành &amp;nbsp;phần.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mỗi ngôn ngữ và nền tảng (platform) vốn dĩ là khác biệt nhưng ở giai đoạn 6, không quan trọng hệ thống được phát triển trên nền tảng hay ngôn ngữ nào, chúng vẫn có thể vận hành tốt.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Giao thức tương tác giữa các hệ thống là quan trọng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Cách tốt nhất để tưởng tượng một network system là một &amp;nbsp;dãy các hệ thống ở giai đoạn 1-5 được làm việc cùng nhau trên một đường mạng. Hệ thống ở giai đoạn 6 sẽ giống như một tá các hệ thống phát triển ở giai đoạn 2-3 làm việc cùng nhau hài hòa. Nếu bạn nhìn vào các hệ thống như của Google, Facebook, &amp;nbsp;Microsoft,... bạn sẽ thấy một thiết kế tương tự.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;The ball of software keeps growing - quả bóng phần mềm tiếp tục phình to.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Vậy giai đoạn 7 là gì?&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tôi không thể tưởng tượng sự tiến hóa kế tiếp sau network systems. Mô hình căn bản này đủ lớn lao để cộng tác các hệ thống nhỏ hơn trong một network.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Và viễn cảnh rộng lớn, bạn đã có internet. Nó chính là một network system.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Trong viễn cảnh nhỏ hơn, bạn có hệ điều hành bao gồm một dãy các dịch vụ hay ngay cả phần cứng cũng là các tiến trình xử lý nhỏ cộng tác với nhau thông qua một message bus.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Nếu chúng ta có gì đó trên network, tôi đoán ở mức độ cao cấp hơn nó cho phép trở thành một phần của hệ thống rộng hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Mạng ngày nay giống như &amp;nbsp;assembly language hay machine code, giai đoạn 7 giống như một ngôn ngữ cấp cao hơn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tôi không nghĩ chúng ta sẽ thấy giai đoạn 7 phát triển cho tới khi hệ thống phức &amp;nbsp;tạp hơn những gì ở giai đoạn 6 và chúng ta buộc phải quản lý một hệ thống mạng cực kỳ phức tạp.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Kết luận&lt;/span&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tôi tin mô hình này đủ hữu dụng để hiểu về phần mềm và hành vi của chúng ta. &amp;nbsp;Rất nhiều các quyết định được tạo ra với &amp;nbsp;thiếu sót để hiểu về công cụ, con người và sự phức tạp.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Hiểu được những ý tưởng căn bản của software gravity và the Katamari Damacy Effect, chúng ta có thể quyết định tốt hơn khi phát triển software.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Có những khía cạnh khác mà bản thân bài viết này không thể đề cập hết, giống như sự cải tiến của một hệ thống đang tồn tại ảnh hưởng đến hệ thống mới và cách &amp;nbsp;phần mềm tiến hóa từng khía cạnh trong thị trường.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Vì thế, tôi không đi vào chi tiết lớn về sự phức tạp của phần mềm tăng trong toàn ngành và những tác động của xu hướng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Tôi sẽ viết một bài viết đầy đủ và chi tiết ở tương lai.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;&quot;&gt;Dịch bởi Nhữ Đình Thuận&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/755141563556992450/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/10/su-tien-hoa-cua-phat-trien-phan-mem.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/755141563556992450'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/755141563556992450'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/10/su-tien-hoa-cua-phat-trien-phan-mem.html' title='Sự tiến hóa của phát triển phần mềm '/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-lE-OraapCTE/WdJEgTY9vCI/AAAAAAAAD2c/ElpPE8Uw7_wWmRA60CssOBm0wKjuypCuwCEwYBhgL/s72-c/software-gravity.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-1074598394322605850</id><published>2017-09-22T08:44:00.003+07:00</published><updated>2017-09-22T08:44:40.133+07:00</updated><title type='text'>Java 9 Released</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #222222; font-family: &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Neue Helvetica&amp;quot;, Arial, sans-serif; font-size: 14px; line-height: 1.4; margin-bottom: 1.25rem; max-width: 90em; padding: 0px; text-rendering: optimizeLegibility;&quot;&gt;Java Platform, Standard Edition 9 is a major feature release. The following summarizes features and enhancements in Java SE 9 and in JDK 9, Oracle&#39;s implementation of Java SE 9.&lt;/div&gt;&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #222222; font-family: &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Neue Helvetica&amp;quot;, Arial, sans-serif; font-size: 14px; line-height: 1.4; margin-bottom: 1.25rem; max-width: 90em; padding: 0px; text-rendering: optimizeLegibility;&quot;&gt;A JDK Enhancement Proposal (JEP) is a proposal to design and implement a nontrivial change to the JDK. See&amp;nbsp;&lt;a href=&quot;http://openjdk.java.net/jeps/1&quot; style=&quot;box-sizing: border-box; color: #145c93; line-height: inherit; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;JEP 1: JDK Enhancement-Proposal &amp;amp; Roadmap Process&lt;/a&gt;. A Java Specification Request (JSR) describes proposed and final specifications for the Java platform. See&amp;nbsp;&lt;a href=&quot;https://www.jcp.org/en/jsr/overview&quot; style=&quot;box-sizing: border-box; color: #145c93; line-height: inherit; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;JSR Overview&lt;/a&gt;.&lt;/div&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot;&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/1074598394322605850/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/java-9-released.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/1074598394322605850'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/1074598394322605850'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/java-9-released.html' title='Java 9 Released'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-2374678755715922019</id><published>2017-09-20T08:44:00.003+07:00</published><updated>2017-09-20T08:44:15.391+07:00</updated><title type='text'>Vài hình ảnh về khóa đào tạo Java Homedirect 01</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-YULlbgM_ukc/WcHHGW0HBBI/AAAAAAAAD1o/9rejMdnjk6gYdMbwk8_LOsrjnEHdRxEZgCLcBGAs/s1600/hoc%2Bjava.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;540&quot; data-original-width=&quot;960&quot; height=&quot;180&quot; src=&quot;https://3.bp.blogspot.com/-YULlbgM_ukc/WcHHGW0HBBI/AAAAAAAAD1o/9rejMdnjk6gYdMbwk8_LOsrjnEHdRxEZgCLcBGAs/s320/hoc%2Bjava.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Khóa đào tạo Java Homedirect đã có được những buổi học đầu tiên.&lt;br /&gt;&lt;br /&gt;Dưới đây là vài hình ảnh của khóa học. &lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-03UpAq4ITpw/WcHHRrx2V9I/AAAAAAAAD1s/OZ3iRrI1oKUbO-9a1_TV6AGBv6FRk9HbACLcBGAs/s1600/dao%2Btao%2Bjava.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;540&quot; data-original-width=&quot;960&quot; height=&quot;180&quot; src=&quot;https://1.bp.blogspot.com/-03UpAq4ITpw/WcHHRrx2V9I/AAAAAAAAD1s/OZ3iRrI1oKUbO-9a1_TV6AGBv6FRk9HbACLcBGAs/s320/dao%2Btao%2Bjava.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;Dự kiến 1 năm sẽ mở tới 3 lớp đào tạo trong vòng 3 tháng 1 lớp&amp;nbsp;+ 3 tháng thực tập.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-6VvLwil-niw/WcHHTHFjdEI/AAAAAAAAD1w/hRwjgdxsxfUiPSaULuWcYYsDHQ6zg9YbwCLcBGAs/s1600/khoa%2Bhoc%2Bjava.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;810&quot; data-original-width=&quot;1440&quot; height=&quot;180&quot; src=&quot;https://1.bp.blogspot.com/-6VvLwil-niw/WcHHTHFjdEI/AAAAAAAAD1w/hRwjgdxsxfUiPSaULuWcYYsDHQ6zg9YbwCLcBGAs/s320/khoa%2Bhoc%2Bjava.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;Phần đông là sinh viên sắp hoặc đã tốt nghiệp các trường như Bách Khoa, Bưu Chính, Thăng Long, Công Nghệ - Quốc Gia.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Khóa đào tạo chuyên nghiệp cực kỳ nặng và đầy đủ nhất về lập trình JEE và Spring đủ để tham gia hầu hết các dự án lớn, chuyên nghiệp phát triển trên Java Platform.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/2374678755715922019/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/vai-hinh-anh-ve-khoa-ao-tao-java.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/2374678755715922019'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/2374678755715922019'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/vai-hinh-anh-ve-khoa-ao-tao-java.html' title='Vài hình ảnh về khóa đào tạo Java Homedirect 01'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-YULlbgM_ukc/WcHHGW0HBBI/AAAAAAAAD1o/9rejMdnjk6gYdMbwk8_LOsrjnEHdRxEZgCLcBGAs/s72-c/hoc%2Bjava.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7849731497426387385</id><published>2017-09-13T10:02:00.002+07:00</published><updated>2017-09-13T10:02:22.685+07:00</updated><title type='text'>Top 10 vấn đề về Java Performances</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;1 trong những vấn đề ám ảnh nhất với lập trình viên: PHẦN MỀM CHẠY QUÁ CHẬM.&lt;br /&gt;&lt;br /&gt;Vâng, nhanh chậm phản ánh chất lượng phần mềm từ đó thể hiện được trình độ của mỗi lập trình viên. Ngoài code sạch, &amp;nbsp;phẩm chất 1 phần mềm tốt còn thể hiện ở hiệu năng xử lý, lượng tài nguyên chiếm dụng. Tham &amp;nbsp;khảo tôi vừa có được sáng nay đề cập về &amp;nbsp;Top 10 những vấn đề về Java Performance mà bạn có thể &amp;nbsp;gặp phải.&lt;br /&gt;&lt;br /&gt;Những vấn đề về truy vấn cơ sở &amp;nbsp;dữ liệu, caching, &amp;nbsp;database connection pooling, memory leaks hay concurrency sẽ được đề cập &amp;nbsp;trong cuốn ebook với cách trình bày &amp;nbsp;mạch lạc về &amp;nbsp;dấu hiệu, phướng án &amp;nbsp;xử lý khi &amp;nbsp;bạn gặp phải vấn đề này.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://kapost-files-prod.s3.amazonaws.com/published/54dd2011ceed6c26fe000b4b/ebook-top-10-java-performance-problems.pdf&quot;&gt;Xem&lt;/a&gt; hoặc&amp;nbsp;&lt;a href=&quot;https://www.appdynamics.com/lp/ebook-top-10-java-performance-problems/?utm_source=dzone&amp;amp;utm_medium=sponsorship&amp;amp;utm_campaign=java%20zone&amp;amp;utm_content=ebook-top-10-java-performance-problems&amp;amp;utm_term=dzone-content-syn&amp;amp;utm_budget=digital&quot;&gt;Download&lt;/a&gt;.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7849731497426387385/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/top-10-van-e-ve-java-performances.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7849731497426387385'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7849731497426387385'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/top-10-van-e-ve-java-performances.html' title='Top 10 vấn đề về Java Performances'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-3703246942686873817</id><published>2017-09-12T15:48:00.005+07:00</published><updated>2017-09-12T15:48:58.673+07:00</updated><title type='text'>Sau Java 9 - Cập nhật sẽ diễn ra vào 2 lần mỗi năm</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Quá tuyệt, khi Oracle cũng sẽ dịch chuyển theo hướng tinh gọn, thay vì đợi dài cổ 3 năm 1 lần cho 1 phiên bản Java, chúng ta sẽ có 1 năm 2 phiên bản.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Scrum? Lean? Java sẽ cải tiến nhanh hơn khi chu kỳ nâng cấp còn 6 tháng/1 lần. Và ngày ấn định phát hành Java 9 sẽ là 21/09 này. &amp;nbsp;Sau bao nhiêu năm chờ đợi, cuối cùng Java 9 cũng được tách nhỏ thành các modules giúp giảm bớt sự cồng kềnh, linh hoạt trong phát triển.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;JDK 9’s Java Platform Module System&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/3703246942686873817/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/sau-java-9-cap-nhat-se-dien-ra-vao-2.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/3703246942686873817'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/3703246942686873817'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/sau-java-9-cap-nhat-se-dien-ra-vao-2.html' title='Sau Java 9 - Cập nhật sẽ diễn ra vào 2 lần mỗi năm'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-274791615342949913</id><published>2017-09-06T13:49:00.004+07:00</published><updated>2017-09-08T10:05:23.828+07:00</updated><title type='text'>Thư mời tham dự khóa 1 đào tạo Java Web/Spring</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Chào các bạn,&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Do không tuyển dụng được người, tôi quyết định mở lại chương trình đào tạo Java Web/Spring &amp;nbsp;luôn và ngay tại công ty. Đây là chương trình đào tạo với mong muốn học viên sau khi hoàn thành sẽ tham gia được ngay các dự án thật trên công nghệ Java.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Về nội dung đào tạo, bao gồm cả chương trình cho người mới bắt đầu học lập trình, người đã biết lập trình sang học Java và cả người đã học hết chương trình Java Core. Chương trình chính gồm khoảng gần 50 bài giảng cả lý thuyết lẫn thực hành trải dài suốt quá trình học. Mỗi bài học sẽ nặng cả phần lab và bài giảng. Với 1 chương trình bao hàm cả lý thuyết căn bản phần mềm (lồng ghép trong phần Java Core) cộng với công nghệ, thiết kế ở phần JEE, khóa học đòi hỏi sự nỗ lực hết mức của &amp;nbsp;mỗi học viên để hoàn thành.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Nội dung chương trình có thể sẽ được thay đổi, cập nhật trong suốt quá trình học như giới thiệu về Java 9, Spring &amp;nbsp;phiên bản mới, JEE 8,...&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Khóa học kéo dài 3 tháng. Sau 3 tháng, những ai hoàn thành sẽ ký hợp đồng học việc có lương với công ty, sau 3 tháng học việc có thể &amp;nbsp;ký hợp đồng chính thức. Do đó, chúng tôi mong muốn tuyển dụng được những người nghiêm túc muốn theo đuổi lập trình Java.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Về giảng viên/trợ giảng: &amp;nbsp;Ngoài tôi trực tiếp giảng dạy chính thức, sẽ có 2-3 trợ giảng giúp đứng lớp các bạn hoàn thành các bài lab. Các trợ giảng đều là trưởng nhóm dự án/sản phẩm có ít nhất 5 năm kinh nghiệm. Ngoài ra, tôi sẽ mời các chuyên gia tham gia giảng dạy thêm về thiết kế, quy trình phát triển phần mềm (scrum, lean, software architecture, test,...).&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Về học phí sẽ là 4 triệu: đây là chi phí sẽ được chi trả trực tiếp cho giảng viên/trợ giảng/chuyên gia. Hoàn tòan công ty không thu lợi được bất cứ &amp;nbsp;đồng nào từ học phí của các bạn. Với khoảng 25 buổi + gần 50 bài, chi phí thực tế chưa đến 200 nghìn/buổi/3 tiếng.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Về địa điểm học: số 19 Trúc Khê - Văn phòng làm việc của công ty.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Về thời gian dự tính:&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;- Thứ 3 + Thứ 5 hàng tuần.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;- Bắt đầu từ 18h - 21h.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;- Khai giảng ngày 10/09 (thứ 3 tuần sau)&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Ngoài thời gian học chính thức, các bạn có thể lên công ty để làm bài lab và nhận sự hỗ trợ của những người đã vào nghề.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Lớp dự kiến khoảng 5-10 người, tuy nhiên sau 24h con số đăng ký đã lên đến 16 người. Vì vậy nhưng ai không sắp xếp được thời gian và công việc có thể phản hồi lại email.&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Mời các bạn cho ý kiến về chương trình và thời gian học.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Cám ơn,&lt;/div&gt;&lt;div style=&quot;background-color: white; font-family: Calibri, Helvetica, sans-serif, serif, EmojiFont; font-size: 16px;&quot;&gt;Nhữ Đình Thuận&amp;nbsp;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/274791615342949913/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/thu-moi-tham-du-khoa-1-ao-tao-java.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/274791615342949913'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/274791615342949913'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/thu-moi-tham-du-khoa-1-ao-tao-java.html' title='Thư mời tham dự khóa 1 đào tạo Java Web/Spring'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7438530495021912018</id><published>2017-09-06T08:58:00.002+07:00</published><updated>2017-09-06T08:58:40.013+07:00</updated><title type='text'>Lý do chúng tôi tuyển sinh kiêm tuyển dụng lập trình viên Java/Web/Spring?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;6 tháng đăng tuyển (mất phí) trên các trang tuyển dụng,... chúng tôi nhận CV và gửi thư mời nhưng không một ai đến interview, mặc dù:&lt;br /&gt;&lt;br /&gt;- Có những vị trí tuyển dụng mức lương cực hấp dẫn so với thị trường.&lt;br /&gt;&lt;br /&gt;- Nhiều CV không đáp ứng được yêu cầu nhưng vẫn gửi thư mời phỏng vấn.&lt;br /&gt;&lt;br /&gt;Cô bạn làm cùng ở eXo cũ mở thêm business đào tạo tester giờ đã chật cứng với 70 học viên cho 3 lớp - website testertop.com.&lt;br /&gt;&lt;br /&gt;Ping đến vài trung tâm đào tạo đều nhận được câu trả lời: không có người.&lt;br /&gt;&lt;br /&gt;Thị trường outsource đang lên, những công ty lớn hút nhân lực kinh khủng trong khi công ty cũng có người ra đi.&lt;br /&gt;&lt;br /&gt;Một ngân hàng lớn chuẩn bị bắt đầu một dự án lớn với 300 triệu $ - khoảng gần 7000 tỷ Việt Nam. Thời của thanh toán điện tử, các ngân hàng đua nhau &amp;nbsp;ebanking, ví điện tử, cổng thanh toán,... và nâng cấp core banking.&lt;br /&gt;&lt;br /&gt;Các công ty startup mọc ra như nấm (tất nhiên là 90% &amp;nbsp;sẽ chết) hút bớt phần nào nhân lực.&lt;br /&gt;&lt;br /&gt;Không tuyển được người, chúng tôi quyết định tự mở lớp đào tạo, sau đó tuyển dụng luôn. &amp;nbsp;Một khóa đào tạo Java Full Stack cực kỳ khủng mà không có bất cứ chương trình đào tạo nào hiện hành có được.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7438530495021912018/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/ly-do-chung-toi-tuyen-sinh-kiem-tuyen.html#comment-form' title='1 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7438530495021912018'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7438530495021912018'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/ly-do-chung-toi-tuyen-sinh-kiem-tuyen.html' title='Lý do chúng tôi tuyển sinh kiêm tuyển dụng lập trình viên Java/Web/Spring?'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-2394325131684383502</id><published>2017-09-05T11:34:00.005+07:00</published><updated>2017-09-05T12:05:05.864+07:00</updated><title type='text'>Tuyển sinh kiêm tuyển dụng khóa đào tạo Java Developer</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Do nhu cầu tuyển dụng cao trong khi trình độ nhân lực yếu, công ty mình cần tuyển sinh khóa đào tạo 3 tháng sau đó tuyển dụng vào làm việc luôn tại công ty.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Cam kết tuyển dụng nếu học đầy đủ và nghiêm túc.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Mình hiện dạy Java được 10 năm (từ 2007) đến nay và có 15 năm làm việc liên tục với Java (chỉ Java). Các khóa đào tạo Java cũng được nâng cấp nhiều phiên bản qua từng giai đoạn.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Sinh viên đào tạo đã nhiều người thành công, kiếm được công việc với mức lương rất tốt.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Mọi chi tiết xin liên hệ: 098 9 654 990.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Email: thuan.nhu@homedirect.com.vn&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Dự kiến về lớp sắp mở:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;- Diễn ra khoảng 3 tháng - 12 tuần - tuần học 2-3 buổi -&amp;gt; dự kiến khoảng 25 - 40 buổi, 1 buổi 3 tiếng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;- Nội dung: đi từ Java Core (version 8+) đến Java Spring/JEE&amp;nbsp;+ Scrum&amp;nbsp;+ Lean Programming&amp;nbsp;+ Software Design,... Chi tiết nội dung xin xem phía dưới. Nội dung về Scrum sẽ mời chuyên gia, chi tiết cập nhật sau.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;- Số lượng tuyển sinh: dự trù từ 5-10 bạn, nếu đủ 4 bạn bắt đầu mở. Cũng không nhận quá nhiều học viên vì ưu tiên chất lượng.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;- Học phí dự trù khoảng 4 triệu để trang trải thù lao cho người dạy, nếu đông học viên sẽ tính toán lại để giảm chi phí.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;- Học viên học xong (hoặc gần xong) khóa đào tạo &amp;nbsp;sẽ tuyển dụng dưới dạng hợp đồng thực tập, học việc (lương từ 4-5 triệu/tháng), hết hợp đồng thực tập học việc sẽ review và ký hợp đồng chính thức.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nội dung học của khóa Java (Nội dung có thể được cập nhật và sửa đổi trong suốt quá trình học).&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Core Java&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;1. Java Basic 1&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;1.Basic Java Syntax&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Array&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Parameter&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.String&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Flow Control&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;2. Java Basic 2&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;1.Java Lang, Java Text package&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.String, StringBuffer, StringBuilder&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Wrapper class&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Try - Catch Exception&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;3. Java Collection 1&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;Vector + ArrayList + LinkedList&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;Set + Map&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;Introduction to Collection FrameWork&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;4. AWT&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.The Abstract Window Toolkit (AWT) is Java&#39;s original platform-independent windowing, graphics, and user-interface widget toolkit.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Button, Text, List,…&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;5. Thread&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Thread&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Multithread&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Join Thread&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Deamon Thread&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Synchronized&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.Thread Pool&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;7.Callable&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;8.Future&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;9.Lock&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;10.Dead Lock&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;6. Input - Output&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Encoding, Decoding.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.File&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Input/Output&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.RandomAccessFile&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Reader/Writer&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.Serializable&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;7.NIO Example&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;8.Lock File&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;7. NIO 2&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Path&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Reading and Writing&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Random Access File&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.File Visitor&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Copy, Move, Link File&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.Watching a Directory&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;8. Networking&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.URL&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.URL Connection, HTTP Connection&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Socket&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Datagram Socket&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Http Server&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.RMI Example&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;9. Lambda Quick Start&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Runnable, Listener, Comparator&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Stream&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Java Util Function&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;10. Java Collection 2&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Generic&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Stack Model&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Concurrency&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Synchronized&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Tree Model&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;11. Advanced Java&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Regex&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Reflection&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Dynamic Invocation&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Annotation&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;12. JDBC&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Statement&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.PrepareStatement&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.MetaData&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Transaction&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.RowSet&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.Paging&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;7.Data Filter&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;13. Servlet 1&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Setup Maven&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Create Spring project&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Build the project&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Import project to Eclipse&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Getting Started Sample&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.Html output sample&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;7.Redirect Servlet sample&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;8.Hitcounter with global variable&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;9.Form with GET and Post method&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;10.Upload Sample&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;14. Servlet 2&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.ServletContextListener&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Filter&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Async&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Login&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;15. JSP 1&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Expression&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Scriptlet&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.Import Java Class&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Include - Forward&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.Implicit Objects&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;6.Expression Language&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;7.Connect to RDBMs&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;16. Java API for XML Processing – JAXP - 1&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.SAX parser&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.XML Filter&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.DOM Parser&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;17. Java API for XML Processing – JAXP - 2 &amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;1.Iterator, TreeWalker, Range, Event&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;2.Transformer&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;3.XPath&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;4.Schame&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;5.JAXB&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Các bài lý thuyết bổ trợ gồm:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;i&gt;&amp;nbsp;- Làm thế nào để trở thành một lập trình viên giỏi?&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&amp;nbsp;- Cleaning code: Viết mã đẹp&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&amp;nbsp;- Tips for Writing Better Code: Viết mã nhanh hơn, tốt hơn, nhẹ hơn&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&amp;nbsp;- OOP lập trình hướng đối tượng&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&amp;nbsp;- Lamda Expressions - How To Change Your Code?&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&amp;nbsp;- Lean Programming&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&amp;nbsp;- Lập trình Web lý thuyết căn bản.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Spring/JEE&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class=&quot;p1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;i&gt;1. Spring Core&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Setup Maven&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring project&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Build the project&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Import&amp;nbsp; project to Eclipse&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Getting Started Sample&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Bean Definition&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Java Based Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Bean Life Cycle&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Bean Post Processors&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Bean Definition Inheritance&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Dependency Injection&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Beans AutoWiring&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Annotation Based Configuration&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Event Handling&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;1. Spring Lecture - Bài giảng đi kèm Spring Lab&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Term&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Benefits of using Spring&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Architecture&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Bean Definition&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;2.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring JDBC&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Setup DataSource&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Insert data by JDBC Template&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Using StatementCallback&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Mapping Record&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Batch Processing&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Implement Write Operation&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Java Based Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;3.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Web MVC 1&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Setup Maven&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring Web project&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Build the project&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Import project to Eclipse&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Getting Started Sample&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Form Handling&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Form Validation&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;4.&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Spring Web MVC 2&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Context Loader Listener&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Programing Web MVC with JDBC&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;AJAX Sample&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Tiles&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Multipart&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;View Image&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Exception Resolver&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;5.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Web MVC 3&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;JSon View&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XML View&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XSLT View&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XXXViewResolver&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Excel View&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;PDF View&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Jasper Report&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;6.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Boot&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring Boot project&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Build and deploy application&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XML Configuration and Annotation Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Apache Tiles&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Logging application (log4j)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Security with Annotation Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;7.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Security + Hibernate 1&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Security with XML Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Apache Tiles XML Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernation Configuration&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernate First Program&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;8.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Hibernate 2&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;List, Load, Search&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Update, Insert, Delete&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernate Annotation Mapping&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernate XML Mapping&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;9.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Hibernate 3&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Many-to-One Mapping&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;One-to-Many Mapping&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Collections&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Query Language&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Criteria&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Native SQL&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Batch Processing&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Security - Authentication with Hibernate&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Social - Login with Facebook&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;10.&amp;nbsp;&lt;/i&gt;&lt;i&gt;WebService – Restful&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Develop Microservice with Spring Boot&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Write Restful Client Test&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;11.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Security for Spring Microservice&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Authentication&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Authorization with request context&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Pre-Post Conditions&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Permission Evaluator&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Authentication with Database&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Unit Test with Security&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;12.&amp;nbsp;&lt;/i&gt;&lt;i&gt;JAX-WS&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;Create Sample Program&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integrating with Spring and Hibernate&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Develop Client Application&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;13 .&lt;/i&gt;&lt;i&gt;WebSocket&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Sample Program&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integration with Spring Security&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integration with Hibernate&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Develop Application with WebSocket&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;14.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration 1&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring Integration with Spring Boot Application&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Message&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Adapter&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integration with Hibernate&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;JDBC Support&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;QueueChannel&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;ExecutorChannel&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;PublishSubscribeChannel&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;15.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration 2&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Gateway&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Gateway with method&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Gateway with Asynchronous&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Transformer&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Filter&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Splitter&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Aggregator&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;16.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration&amp;nbsp;&lt;/i&gt;with JMS and ActiveMQ&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Step by step example&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Working with POJO&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Inbound Channel Adapter&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Outbound Channel Adapter&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Inbound Gateway&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Outbound Gateway&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;17.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration&amp;nbsp;&lt;/i&gt;with JMS and ActiveMQ 2&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Aggregation&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Asynchronous&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;JPA Support&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;18.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Data - JPA&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot; style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Insert, Update, Delete, Query&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Native Query&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Sort&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Paging&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Async&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Query Creation&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Join Data&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Các bài lý thuyết bổ trợ gồm:&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;1.&amp;nbsp;Java 8 -&amp;nbsp;How To Change Your Code?&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Anonymous Method&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Stream&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Consumer&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - BiConsumer&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Predicate&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Function&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Supplier&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Collector&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Statistics&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Optional&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - BinaryOperator&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - UnaryOperator&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/i&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lambda expressions - Scope&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;div&gt;Lambda expressions - Method References&lt;/div&gt;&lt;div&gt;Lambda Utils – Join String&lt;/div&gt;&lt;div&gt;Lambda Utils - Anonymous Class + Anonymous Method&lt;/div&gt;&lt;div&gt;Lambda Utils – Sorting&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils - System Output Print&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils – Read File&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils – File Walk Tree&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils – Stream with Pattern&lt;/div&gt;&lt;div&gt;Lambda Utils - Finding a maximum&lt;/div&gt;&lt;div&gt;Lambda Utils - Calculating an average&lt;/div&gt;&lt;div&gt;Lambda Utils - Loop with Integer&lt;/div&gt;&lt;div&gt;Lambda Utils – Grouping&lt;/div&gt;&lt;div&gt;Lambda Utils – Partitioning&lt;/div&gt;&lt;div&gt;Interface – Default Method&lt;/div&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;2.&amp;nbsp;&lt;/i&gt;Design Pattern&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;Creational Patterns&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style=&quot;line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;&quot;&gt;&lt;li class=&quot;li1&quot; style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;span class=&quot;s2&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Factory Pattern&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot; style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Abstract Factory Pattern&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot; style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Builder Pattern&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot; style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Prototype Pattern&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot; style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Singleton Pattern&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;p1&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Structural Patterns&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;ul style=&quot;line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;&quot;&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Adapter Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Bridge Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Composite Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Decorator Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Facade Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Flyweight Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The Proxy Pattern&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Behavioral Patterns&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;ul style=&quot;line-height: 1.4; list-style-image: initial; list-style-position: initial; margin: 0.5em 0px; padding: 0px 2.5em;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Chain of Responsibility Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Command Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Interpreter Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Iterator Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Mediator Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Memento Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Observer Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The State Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Strategy Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Template Method Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li style=&quot;border: none; margin: 0px 0px 0.25em; padding: 0.25em 0px;&quot;&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Visitor Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;/span&gt;&lt;/i&gt;&lt;/ul&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;3.&amp;nbsp;&lt;/i&gt;SOLID - Object Oriented Design&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li1&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Bad Design: Symptoms&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;OOD: Basic Principles with SOLID&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot; style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span class=&quot;s2&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Software Architecture Style&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;4. Review Code + Cleaning Code&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #414141; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Khoá đào tạo Spring 2 vẫn tiếp tục cập nhật bài lab và các chuyên đề lý thuyết bổ sung.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/2394325131684383502/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/tuyen-sinh-kiem-tuyen-dung-khoa-ao-tao.html#comment-form' title='27 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/2394325131684383502'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/2394325131684383502'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/09/tuyen-sinh-kiem-tuyen-dung-khoa-ao-tao.html' title='Tuyển sinh kiêm tuyển dụng khóa đào tạo Java Developer'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-1342958850784863203</id><published>2017-06-16T12:45:00.001+07:00</published><updated>2017-06-16T12:45:50.632+07:00</updated><title type='text'>Solr: SolrDocument to SolrInputDocument</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;static&lt;/span&gt; SolrInputDocument toSolrInputDocument(SolrDocument &lt;span class=&quot;s2&quot;&gt;solrDocument&lt;/span&gt;) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; SolrInputDocument &lt;span class=&quot;s2&quot;&gt;solrInputDocument&lt;/span&gt; = &lt;span class=&quot;s1&quot;&gt;new&lt;/span&gt; SolrInputDocument();&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;for&lt;/span&gt; (String &lt;span class=&quot;s2&quot;&gt;name&lt;/span&gt; : &lt;span class=&quot;s2&quot;&gt;solrDocument&lt;/span&gt;.getFieldNames()) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;solrInputDocument&lt;/span&gt;.addField(&lt;span class=&quot;s2&quot;&gt;name&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;solrDocument&lt;/span&gt;.getFieldValue(&lt;span class=&quot;s2&quot;&gt;name&lt;/span&gt;));&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;s2&quot;&gt;solrDocument&lt;/span&gt;.getChildDocuments() != &lt;span class=&quot;s1&quot;&gt;null&lt;/span&gt;) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;for&lt;/span&gt;(SolrDocument &lt;span class=&quot;s2&quot;&gt;childDocument&lt;/span&gt; : &lt;span class=&quot;s2&quot;&gt;solrDocument&lt;/span&gt;.getChildDocuments()) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;solrInputDocument&lt;/span&gt;.addChildDocument(toSolrInputDocument(&lt;span class=&quot;s2&quot;&gt;childDocument&lt;/span&gt;));&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p3&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;solrInputDocument&lt;span class=&quot;s3&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;style type=&quot;text/css&quot;&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #7e504f} span.s1 {color: #931a68} span.s2 {color: #7e504f} span.s3 {color: #000000} &lt;/style&gt;               &lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;}&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/1342958850784863203/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2017/06/solr-solrdocument-to-solrinputdocument.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/1342958850784863203'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/1342958850784863203'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2017/06/solr-solrdocument-to-solrinputdocument.html' title='Solr: SolrDocument to SolrInputDocument'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7787129831591120613</id><published>2016-12-13T15:48:00.000+07:00</published><updated>2016-12-13T15:48:31.276+07:00</updated><title type='text'>Spring Integration JMS với inbound gateway</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;p1&quot;&gt;Kiểm tra 2 thông số trong trường hợp jms inbound-gateway không làm việc&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;max-concurrent-consumers&lt;span class=&quot;s1&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1000&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot;&gt; &lt;/span&gt;&lt;/span&gt;concurrent-consumers&lt;span class=&quot;s1&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;1000&quot;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Lý do phải tăng concurrent-consumers.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7787129831591120613/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/12/spring-integration-jms-voi-inbound.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7787129831591120613'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7787129831591120613'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/12/spring-integration-jms-voi-inbound.html' title='Spring Integration JMS với inbound gateway'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-5903558153284894065</id><published>2016-11-22T10:07:00.000+07:00</published><updated>2016-11-22T10:07:08.638+07:00</updated><title type='text'>Unable to establish loopback connection</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Lỗi khi chạy http nio &amp;nbsp;của apache, sử dụng&amp;nbsp;-Djava.net.preferIPv4Stack=true khi start trên Windows&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/5903558153284894065/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/11/unable-to-establish-loopback-connection.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/5903558153284894065'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/5903558153284894065'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/11/unable-to-establish-loopback-connection.html' title='Unable to establish loopback connection'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7060502175639781376</id><published>2016-09-12T10:26:00.001+07:00</published><updated>2016-09-13T16:11:15.105+07:00</updated><title type='text'>Chương trìng khoá đào tạo Java Spring 2</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Nâng cấp từ phiên bản đào tạo Spring 1.0 được biên soạn năm 2012, chương trình cho khoá đào tạo Spring 2.0 được phát triển trong suốt 6 tháng năm 2016 là một nâng cấp toàn diện, phức tạp. Khắc phục những yếu điểm về bài lab khó làm với sinh viên cùng lượng kiến thức trải rộng hơn, cao cấp hơn, chương trình học Spring 2.0 là một thách thức không hề dễ dàng với bất cứ sinh viên giỏi muốn trở thành một JEE Backend Developer hoặc Web Developer. Dưới đây là nội dung các bài lab.&lt;br /&gt;&lt;br /&gt;Miễn phí &amp;nbsp;bài labs khoá Spring 1. Tải theo link dưới:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://dl.dropboxusercontent.com/u/60516717/Spring-1.Nhu-Dinh-Thuan.labs.zip&quot;&gt;https://dl.dropboxusercontent.com/u/60516717/Spring-1.Nhu-Dinh-Thuan.labs.zip&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://dl.dropboxusercontent.com/u/60516717/Spring-1.Nhu-Dinh-Thuan.Resources.zip&quot;&gt;https://dl.dropboxusercontent.com/u/60516717/Spring-1.Nhu-Dinh-Thuan.Resources.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;&lt;i&gt;1. Spring Core&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Setup Maven&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring project&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Build the project&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Import&amp;nbsp; project to Eclipse&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Getting Started Sample&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Bean Definition&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Java Based Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Bean Life Cycle&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Bean Post Processors&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Bean Definition Inheritance&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Dependency Injection&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Beans AutoWiring&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Annotation Based Configuration&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;Event Handling&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;1. Spring Lecture - Bài giảng đi kèm Spring Lab&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Term&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Benefits of using Spring&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Architecture&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Bean Definition&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;2.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring JDBC&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Setup DataSource&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Insert data by JDBC Template&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Using StatementCallback&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Mapping Record&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Batch Processing&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Implement Write Operation&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Java Based Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;3.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Web MVC 1&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Setup Maven&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring Web project&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Build the project&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Import project to Eclipse&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Getting Started Sample&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Form Handling&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Form Validation&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;4.&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Spring Web MVC 2&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Context Loader Listener&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Programing Web MVC with JDBC&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;AJAX Sample&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Tiles&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Multipart&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;View Image&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Exception Resolver&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;5.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Web MVC 3&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;JSon View&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XML View&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XSLT View&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XXXViewResolver&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Excel View&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;PDF View&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Jasper Report&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;6.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Boot&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring Boot project&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Build and deploy application&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;XML Configuration and Annotation Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Apache Tiles&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Logging application (log4j)&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Security with Annotation Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;7.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Security + Hibernate 1&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Security with XML Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Apache Tiles XML Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernation Configuration&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernate First Program&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;8.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Hibernate 2&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;List, Load, Search&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Update, Insert, Delete&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernate Annotation Mapping&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Hibernate XML Mapping&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;9.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Hibernate 3&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Many-to-One Mapping&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;One-to-Many Mapping&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Collections&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Query Language&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Criteria&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Native SQL&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Batch Processing&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Security - Authentication with Hibernate&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Spring Social - Login with Facebook&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;10.&amp;nbsp;&lt;/i&gt;&lt;i&gt;WebService – Restful&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Develop Microservice with Spring Boot&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Write Restful Client Test&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;11.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Security for Spring Microservice&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Authentication&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Authorization with request context&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Pre-Post Conditions&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Permission Evaluator&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Authentication with Database&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Unit Test with Security&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;12.&amp;nbsp;&lt;/i&gt;&lt;i&gt;JAX-WS&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;i&gt;Create Sample Program&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt; Integrating with Spring and Hibernate&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt; Develop Client Application&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;13 .&lt;/i&gt;&lt;i&gt;WebSocket&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Sample Program&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integration with Spring Security&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integration with Hibernate&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Develop Application with WebSocket&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;14.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration 1&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Create Spring Integration with Spring Boot Application&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Message&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Adapter&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Integration with Hibernate&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;JDBC Support&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;QueueChannel&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;ExecutorChannel&lt;/i&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;i&gt;PublishSubscribeChannel&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;15.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration 2&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Gateway&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Gateway with method&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Gateway with Asynchronous&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Transformer&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Filter&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Splitter&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Aggregator&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;16.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration &lt;/i&gt;with JMS and ActiveMQ&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Step by step example&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Working with POJO&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Inbound Channel Adapter&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Outbound Channel Adapter&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Inbound Gateway&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Outbound Gateway&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;17.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Integration &lt;/i&gt;with JMS and ActiveMQ 2&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt; Aggregation&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt; Asynchronous&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li3&quot;&gt;&lt;span class=&quot;s2&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;JPA Support&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;18.&amp;nbsp;&lt;/i&gt;&lt;i&gt;Spring Data - JPA&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Insert, Update, Delete, Query&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Native Query&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Sort&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Paging&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Async&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Query Creation&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Join Data&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;i&gt;Các bài lý thuyết bổ trợ gồm:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;1.&amp;nbsp;Java 8 -&amp;nbsp;How To Change Your Code?&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;Lambda expressions - Anonymous Method&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;Lambda expressions - Stream&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;Lambda expressions - Consumer&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;Lambda expressions - BiConsumer&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;/i&gt;&lt;div&gt;&lt;i&gt;Lambda expressions - Predicate&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;div&gt;Lambda expressions - Function&lt;/div&gt;&lt;div&gt;Lambda expressions - Supplier&lt;/div&gt;&lt;div&gt;Lambda expressions - Collector&lt;/div&gt;&lt;div&gt;Lambda expressions - Statistics&lt;/div&gt;&lt;div&gt;Lambda expressions - Optional&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda expressions - BinaryOperator&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda expressions - UnaryOperator&lt;/div&gt;&lt;div&gt;Lambda expressions - Scope&lt;/div&gt;&lt;div&gt;Lambda expressions - Method References&lt;/div&gt;&lt;div&gt;Lambda Utils – Join String&lt;/div&gt;&lt;div&gt;Lambda Utils - Anonymous Class + Anonymous Method&lt;/div&gt;&lt;div&gt;Lambda Utils – Sorting&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils - System Output Print&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils – Read File&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils – File Walk Tree&amp;nbsp;&lt;/div&gt;&lt;div&gt;Lambda Utils – Stream with Pattern&lt;/div&gt;&lt;div&gt;Lambda Utils - Finding a maximum&lt;/div&gt;&lt;div&gt;Lambda Utils - Calculating an average&lt;/div&gt;&lt;div&gt;Lambda Utils - Loop with Integer&lt;/div&gt;&lt;div&gt;Lambda Utils – Grouping&lt;/div&gt;&lt;div&gt;Lambda Utils – Partitioning&lt;/div&gt;&lt;div&gt;Interface – Default Method&lt;/div&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;2.&amp;nbsp;&lt;/i&gt;Design Pattern&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;Creational Patterns&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;       &lt;/span&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s2&quot;&gt;The Factory Pattern&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Abstract Factory Pattern&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Builder Pattern&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Prototype Pattern&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;The Singleton Pattern&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;p1&quot;&gt;&lt;i&gt;Structural Patterns&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;i&gt;The Adapter Pattern&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Bridge Pattern&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Composite Pattern&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Decorator Pattern&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Facade Pattern&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Flyweight Pattern&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;The Proxy Pattern&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;i&gt;Behavioral Patterns&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;i&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Chain of Responsibility Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Command Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Interpreter Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Iterator Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Mediator Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Memento Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Observer Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The State Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Strategy Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Template Method Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;div style=&quot;display: inline !important;&quot;&gt;The Visitor Pattern&lt;/div&gt;&lt;/i&gt;&lt;/li&gt;&lt;/i&gt;&lt;/ul&gt;&lt;/div&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;3.&amp;nbsp;&lt;/i&gt;SOLID - Object Oriented Design&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol class=&quot;ol1&quot;&gt;&lt;li class=&quot;li1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Bad Design: Symptoms&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;li2&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;OOD: Basic Principles with SOLID&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;4. Review Code + Cleaning Code&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Khoá đào tạo Spring 2 vẫn tiếp tục cập nhật bài lab và các chuyên đề lý thuyết bổ sung.&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7060502175639781376/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/09/lab-khoa-ao-tao-java-spring.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7060502175639781376'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7060502175639781376'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/09/lab-khoa-ao-tao-java-spring.html' title='Chương trìng khoá đào tạo Java Spring 2'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-4431862898258111164</id><published>2016-04-10T16:25:00.004+07:00</published><updated>2016-04-10T16:26:34.189+07:00</updated><title type='text'>4 ways to copy file in Java - 4 cách copy file trong Java</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;lato&amp;quot; , &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 16px; line-height: 28.8px;&quot;&gt;These examples illustrate how to copy contents from one file to another file. We have 4 ways in Java.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: &amp;quot;lato&amp;quot; , &amp;quot;helvetica neue&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 16px; line-height: 28.8px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. &amp;nbsp;Using Java Stream&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &amp;nbsp;Author : Nhu Dinh Thuan&lt;br /&gt;&amp;nbsp;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Email:nhudinhthuan@yahoo.com&lt;br /&gt;&amp;nbsp;* Apr 10, 2016&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class CopyFileByStream {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void copy(File source, File dest) throws IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(!dest.exists()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(!dest.getParentFile().exists()) dest.getParentFile().mkdirs();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dest.createNewFile();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; try (InputStream input = new FileInputStream(source);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OutputStream output =new FileOutputStream(dest)){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; copy(input, output);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void copy(InputStream input, OutputStream output) throws IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; byte[] buffer = new byte[16*1024];&lt;br /&gt;&amp;nbsp; &amp;nbsp; int read = -1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; while ((read = input.read(buffer)) != -1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; output.write(buffer, 0, read);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; File sourceFile = new File(&quot;../Temp/a.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; File destFile = new File(&quot;../Temp/a1.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; copy(sourceFile, destFile);&lt;br /&gt;&amp;nbsp; &amp;nbsp; } catch(Exception exp) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; exp.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Using FileChannel&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.nio.channels.FileChannel;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &amp;nbsp;Author : Nhu Dinh Thuan&lt;br /&gt;&amp;nbsp;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Email:nhudinhthuan@yahoo.com&lt;br /&gt;&amp;nbsp;* Apr 10, 2016&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class CopyFileByChannel {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void copy(File source, File dest) throws IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(!dest.exists()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(!dest.getParentFile().exists()) dest.getParentFile().mkdirs();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dest.createNewFile();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; try (FileInputStream input = new FileInputStream(source);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FileOutputStream output = new FileOutputStream(dest)) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; FileChannel srcChannel = input.getChannel();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; FileChannel desChannel = output.getChannel();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srcChannel.transferTo(0, srcChannel.size(), desChannel);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; File sourceFile = new File(&quot;../Temp/a.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; File destFile = new File(&quot;../Temp/a2.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; copy(sourceFile, destFile);&lt;br /&gt;&amp;nbsp; &amp;nbsp; } catch(Exception exp) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; exp.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Using Files - NIO 2&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.nio.file.Files;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &amp;nbsp;Author : Nhu Dinh Thuan&lt;br /&gt;&amp;nbsp;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Email:nhudinhthuan@yahoo.com&lt;br /&gt;&amp;nbsp;* Apr 10, 2016&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class CopyFileByNIO2 {&lt;br /&gt;&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; File sourceFile = new File(&quot;../Temp/a.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; File destFile = new File(&quot;../Temp/a3.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Files.copy(sourceFile.toPath(), destFile.toPath());&lt;br /&gt;&amp;nbsp; &amp;nbsp; } catch(Exception exp) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; exp.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Using ByteBuffer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.nio.ByteBuffer;&lt;br /&gt;import java.nio.channels.Channels;&lt;br /&gt;import java.nio.channels.ReadableByteChannel;&lt;br /&gt;import java.nio.channels.WritableByteChannel;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &amp;nbsp;Author : Nhu Dinh Thuan&lt;br /&gt;&amp;nbsp;* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Email:nhudinhthuan@yahoo.com&lt;br /&gt;&amp;nbsp;* Apr 10, 2016&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class CopyFileByByteBuffer {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void copy(File source, File dest) throws IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(!dest.exists()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if(!dest.getParentFile().exists()) dest.getParentFile().mkdirs();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dest.createNewFile();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; try (FileInputStream input = new FileInputStream(source);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FileOutputStream output = new FileOutputStream(dest)) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; final ReadableByteChannel inputChannel = Channels.newChannel(input);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; final WritableByteChannel outputChannel = Channels.newChannel(output);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; copy(inputChannel, outputChannel);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void copy(ReadableByteChannel src, WritableByteChannel dest) throws IOException {&lt;br /&gt;&amp;nbsp; &amp;nbsp; final ByteBuffer buffer = ByteBuffer.allocateDirect(16 * 1024);&lt;br /&gt;&amp;nbsp; &amp;nbsp; while (src.read(buffer) != -1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; buffer.flip();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dest.write(buffer);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; buffer.compact();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; buffer.flip();&lt;br /&gt;&amp;nbsp; &amp;nbsp; while (buffer.hasRemaining()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dest.write(buffer);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; File sourceFile = new File(&quot;../Temp/a.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; File destFile = new File(&quot;../Temp/a4.html&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; copy(sourceFile, destFile);&lt;br /&gt;&amp;nbsp; &amp;nbsp; } catch(Exception exp) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; exp.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test Performance Code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;import&lt;/span&gt; java.io.File;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;import&lt;/span&gt; java.nio.file.Files;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;import&lt;/span&gt; java.nio.file.StandardCopyOption;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p3&quot;&gt;/**&lt;/div&gt;&lt;div class=&quot;p3&quot;&gt;&amp;nbsp;*&amp;nbsp; Author : Nhu Dinh Thuan&lt;/div&gt;&lt;div class=&quot;p3&quot;&gt;&amp;nbsp;*&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Email:nhudinhthuan@yahoo.com&lt;/div&gt;&lt;div class=&quot;p3&quot;&gt;&amp;nbsp;* Apr 10, 2016&lt;/div&gt;&lt;div class=&quot;p3&quot;&gt;&amp;nbsp;*/&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;class&lt;/span&gt; TestPerformance {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &lt;span class=&quot;s1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;void&lt;/span&gt; main(String[] &lt;span class=&quot;s2&quot;&gt;args&lt;/span&gt;) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;try&lt;/span&gt; {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Thread.sleep(10*1000);&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; File &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;sourceFile&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; File(&lt;/span&gt;&quot;../Temp/a.html&quot;&lt;span class=&quot;s3&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; File &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;destFile&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; File(&lt;/span&gt;&quot;../Temp/new_a.html&quot;&lt;span class=&quot;s3&quot;&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;time&lt;/span&gt; = 100*1000;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;s1&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; = 0; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; &amp;lt; &lt;span class=&quot;s2&quot;&gt;time&lt;/span&gt;; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt;++) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CopyFileByStream.copy(&lt;span class=&quot;s2&quot;&gt;sourceFile&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;destFile&lt;/span&gt;);&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.&lt;span class=&quot;s4&quot;&gt;out&lt;/span&gt;.println(&lt;span class=&quot;s5&quot;&gt;&quot;Time taken by stream copy = &quot;&lt;/span&gt; + (&lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; - &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt;));&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;s1&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; = 0; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; &amp;lt; &lt;span class=&quot;s2&quot;&gt;time&lt;/span&gt;; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt;++) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CopyFileByChannel.copy(&lt;span class=&quot;s2&quot;&gt;sourceFile&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;destFile&lt;/span&gt;);&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.&lt;span class=&quot;s4&quot;&gt;out&lt;/span&gt;.println(&lt;span class=&quot;s5&quot;&gt;&quot;Time taken by channel copy = &quot;&lt;/span&gt; + (&lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; - &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt;));&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;s1&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; = 0; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; &amp;lt; &lt;span class=&quot;s2&quot;&gt;time&lt;/span&gt;; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt;++) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Files.copy(&lt;span class=&quot;s2&quot;&gt;sourceFile&lt;/span&gt;.toPath(), &lt;span class=&quot;s2&quot;&gt;destFile&lt;/span&gt;.toPath(), StandardCopyOption.&lt;span class=&quot;s4&quot;&gt;REPLACE_EXISTING&lt;/span&gt;);&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.&lt;span class=&quot;s4&quot;&gt;out&lt;/span&gt;.println(&lt;span class=&quot;s5&quot;&gt;&quot;Time taken by nio 2 copy = &quot;&lt;/span&gt; + (&lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; - &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt;));&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s1&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;s1&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; = 0; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt; &amp;lt; &lt;span class=&quot;s2&quot;&gt;time&lt;/span&gt;; &lt;span class=&quot;s2&quot;&gt;i&lt;/span&gt;++) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CopyFileByByteBuffer.copy(&lt;span class=&quot;s2&quot;&gt;sourceFile&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;destFile&lt;/span&gt;);&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt; = System.currentTimeMillis();&lt;/div&gt;&lt;div class=&quot;p4&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;.println(&lt;/span&gt;&quot;Time taken by byte buffer copy = &quot;&lt;span class=&quot;s3&quot;&gt; + (&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; - &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;));&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; } &lt;span class=&quot;s1&quot;&gt;catch&lt;/span&gt; (Exception &lt;span class=&quot;s2&quot;&gt;exp&lt;/span&gt;) {&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;s2&quot;&gt;exp&lt;/span&gt;.printStackTrace();&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&amp;nbsp; }&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;}&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;b&gt;Output:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Time taken by stream copy = 23536&lt;br /&gt;Time taken by channel copy = 22055&lt;br /&gt;Time taken by nio 2 copy = 25625&lt;br /&gt;Time taken by byte buffer copy = 23771&lt;br /&gt;&lt;br /&gt;Test performance with time &amp;nbsp;= 100*1000, output:&lt;br /&gt;&lt;br /&gt;Time taken by stream copy = 45707&lt;br /&gt;Time taken by channel copy = 43815&lt;br /&gt;Time taken by nio 2 copy = 50095&lt;br /&gt;Time taken by byte buffer copy = 44644&lt;br /&gt;&lt;br /&gt;Now we can see FileChannels is the best way to copy files.&lt;br /&gt;&lt;br /&gt;This was an example that demonstrates four different ways you can copy a File in Java. Aside from, you can use Apache Commons IO library with FileUtils.&lt;br /&gt;&lt;br /&gt;FileUtils.copyFile(sourceFile, destFile);&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/4431862898258111164/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/4-ways-to-copy-file-in-java-4-cach-copy.html#comment-form' title='1 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/4431862898258111164'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/4431862898258111164'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/4-ways-to-copy-file-in-java-4-cach-copy.html' title='4 ways to copy file in Java - 4 cách copy file trong Java'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-5068164858338834821</id><published>2016-04-09T23:40:00.000+07:00</published><updated>2016-04-09T23:41:06.135+07:00</updated><title type='text'></title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;h3 class=&quot;post-title entry-title&quot; itemprop=&quot;name&quot; style=&quot;background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 22px; font-stretch: normal; margin: 0px; position: relative;&quot;&gt;Khám phá 6 vai trò của interface trong thế giới Java - Phần cuối&lt;/h3&gt;&lt;div class=&quot;post-header&quot; style=&quot;background-color: white; color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 1.6; margin: 0px 0px 1em;&quot;&gt;&lt;div class=&quot;post-header-line-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;post-body entry-content&quot; id=&quot;post-body-5343842658291781830&quot; itemprop=&quot;description articleBody&quot; style=&quot;background-color: white; position: relative; width: 670px;&quot;&gt;&lt;div dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Bài gốc tại&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://www.javaworld.com/article/3044050/learn-java/discover-the-six-roles-that-interfaces-play-in-the-java-language.html&quot; style=&quot;color: #5e9a45; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px; text-decoration: none;&quot;&gt;Java World&lt;/a&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Dành cho những ai mới học Java. Phần kế tiếp đưa thêm những thông tin rất thú vị về interface.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px; text-align: right;&quot;&gt;Tác giả:&amp;nbsp;Jeff Friesen&lt;/div&gt;&lt;div style=&quot;color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px; text-align: right;&quot;&gt;Dịch giả: Minh Hiếu&lt;/div&gt;&lt;div style=&quot;color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px; text-align: right;&quot;&gt;Hiệu chỉnh: Lộc Hồ&lt;/div&gt;&lt;div style=&quot;color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px; text-align: right;&quot;&gt;Đính chính: Nhữ Đình Thuận&lt;/div&gt;&lt;div style=&quot;color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px; text-align: right;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;Vai trò 3: Tạo thuận lợi cho sự phát triển thư viện&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;font-size: 14px; line-height: 19.6px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Java 8 giới thiệu tính năng đặc biệt hữu dụng là Lamda và Streams API đặt trọng tâm vào đối tượng cần được áp dụng xử lý hơn là phương thức xử lý chúng. Lambdas và Streams tạo sự thuận tiện cho nhà phát triển triển khai xử lý song song (parallelism) trong ứng dụng của họ. Một điều không may, việc nâng cấp những tính năng này cho Java Collection Framework đòi hỏi phải viết lại code một cách mở rộng hơn.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Để nhanh chóng cải tiến collection cho việc sử dụng stream nguồn và đích, Java đưa vào khái niệm cài đặt mặc định hàm (default method) cho interface, chúng là non-static method với phần đầu method có thêm từ khoá default và mã lệnh xử lý ở phần thân - đây là điểm rất mới của Java. &amp;nbsp;Như vậy interface có code cài đặt mặc định, chúng có thể không cần được viết lại (hoặc có - overriden - ghi đè) bởi class cài đặt interface đó. Code cài đặt mặc định method của interface có thể được triệu gọi thông qua objects references &amp;nbsp;- tham chiếu tới đối tượng.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Method mặc định trở thành một phần của ngôn ngữ, theo đó chúng được thêm vào java.util.Collection interface cung cấp cầu nối giữa collections và streams: &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;default Stream&lt;e&gt; parallelStream(): Trả về một parallel java.util.stream.Stream object từ collection nguồn.&lt;/e&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;default Stream&lt;e&gt; stream(): Trả về một Stream object tuần tự từ collection nguồn.&lt;/e&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Giả sử bạn khai báo biến thuộc lớp java.util.List với giá trị được gán như sau:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;List&lt;string&gt; innerPlanets = Arrays.asList(&quot;Mercury&quot;, &quot;Venus&quot;, &quot;Earth&quot;, &quot;Mars&quot;);&lt;/string&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Cách viết thông thường - vòng lặp cho collection như dưới đây để in ra tên các thành viên trong innerPlanets:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;for (String innerPlanet: innerPlanets) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;System.out.println(innerPlanet);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Với Java 8, bạn có thể thay thế bằng một external iteration, tập trung vào cách thực thi nghiệp vụ dựa trên Stream internal iteration, nó tập trung vào việc nghiệp vụ sẽ xử lý ra sao, ví dụ:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;innerPlanets.stream().forEach(System.out::println);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;hoặc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;innerPlanets.parallelStream().forEach(System.out::println);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Ở đây, innerPlanets.stream() và innerPlanets.parallelStream() trả về đối tượng Stream tuần tự và song song từ List nguồn trước đó. Hàm forEach triệu gọi trên tham chiếu của Stream trả về, sẽ duyệt (lặp) các phần tử (element) và gọi hàm System.out.println() để in ra chúng.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Phương thức mặc định có thể &amp;nbsp;khiến code trở nên dễ đọc hơn. Ví dụ, lớp java.util.Collections cài đặt một static method:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;static &lt;t&gt; void sort(List&lt;t&gt; list, Comparator c)&lt;/t&gt;&lt;/t&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp;cho việc sắp xếp thứ tự các phần tử của list thông qua một comparator chỉ định. Tuy nhiên, &amp;nbsp;Java 8 đã thêm vào default method&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; void sort(Comparator c)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; cho List interface, do đó chúng ta cũng có thể sắp xếp trực tiếp trên đối tượng của List bằng cách gọi như &amp;nbsp;myList.sort(comparator) thay vì phải sử dụng phương thức của Collections util class.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Hàm mặc định (default method) đã tạo ra kỷ nguyên mới cho Java Collections Framework. Bạn có thể xem vai trò này được tạo ra từ di sản của các thư viện thiết kế trên interface.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;i&gt;Ghi chú từ Nhữ Đình Thuận: Như vậy, thiết kế một thư viện/framework hay đơn thuần một mã lệnh dựa trên trừu tượng, interface, design đã được tăng cường sức mạnh thông qua default method. Tác giả bài viết ở phần này muốn nêu bật vai trò cài đặt mặc định của hàm trên interface là cầu nối giữa collection và stream, biến cách duyệt tập thành cách duyệt giống như luồng. Ngoài ra, default method cũng tạo giao diện sáng sửa hơn cho collection bằng cách gọi trực tiếp trên object thay vì phải dùng đến util class - lớp tiện ích/phụ trợ.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;Vai trò 4: Phục vụ như kho constant&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Phiên bản Java 5 trước đó đã đưa ra static imports vào ngôn ngữ và enums, interfaces được sử dụng rộng rãi hơn như một constant repositories (kho resources tĩnh gồm thuộc tính và hàm tĩnh). Nhờ đó, những lập trình viên lười biếng có thể sử dụng interface thay cho class trong việc &amp;nbsp;sử dụng enumerated type (kiểu dữ liệu liệt kê), tránh việc phải thêm tên lớp làm tiền tố khi sử dụng giá trị constant trong class cài đặt interface. Code dưới đây như một ví dụ minh hoạ constant trong interface.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;public interface Directions {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;int NORTH = 0;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;int SOUTH = 1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;int EAST = 2;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;int WEST = 3;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;font-size: 14px; line-height: 19.6px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;public class Compass implements Directions {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;private int curDirection;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;// ... other code&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;public void printDirection() &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; switch (curDirection) &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case NORTH: System.out.println(&quot;North&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case SOUTH: System.out.println(&quot;South&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case EAST : System.out.println(&quot;East&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case WEST : System.out.println(&quot;West&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;default &amp;nbsp; : System.out.println(&quot;Unknown&quot;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Constant interface có thể là nguyên nhân đau đầu khi maintenance - bảo trì. Để đảm bảo tương thích nhị phân, class phải luôn cài đặt interface, ngay cả khi class không cần đến những giá trị constants. Giá trị constant có thể gây bối rối cho người sử dụng class - có lẽ chúng không cần gọi từ bên ngoài class nhưng chúng vẫn được nhìn thấy bởi vì biến trong interface thực chất là các biến được khai báo dạng public + static + final.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Khắc phục vấn đề này, chúng ta chuyển interface sang class, khai báo các biến constant là public + static + final&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;public class Directions {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public final static int NORTH = 0;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public final static int SOUTH = 1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public final static int EAST = 2;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public final static int WEST = 3;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;và sử dụng static import như dưới đây :&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;import static Directions.*;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;khi đó, gọi đến các biến constant trong lớp Compass không cần phải thêm tiền tố Directions vào nữa.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Trường hợp này, enum là một lựa chọn tốt hơn&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;public enum Directions { NORTH, SOUTH, EAST, WEST }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;và mã lệnh lớp Compass&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;public class Compass {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;private Directions curDirection;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;// ... other code&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;public void printDirection()s {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; switch (curDirection) &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case NORTH: System.out.println(&quot;North&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case SOUTH: System.out.println(&quot;South&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case EAST : System.out.println(&quot;East&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;case WEST : System.out.println(&quot;West&quot;); break;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;default &amp;nbsp; : System.out.println(&quot;Unknown&quot;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Không nên và không bao giờ sử dụng constant interface.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;Vai trò 5: Nơi chứa cho các phương thức tiện ích - utility methods&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Cùng với phương thức mặc định, static method cũng là một điểm mới mà Java 8 tăng cường hỗ trợ cho interface. Khả năng mở ra tất cả những gì có thể như ví dụ dưới đây.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;public interface Fillable {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;public void fill(int color);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;public static int rgb(int r, int g, int b) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return r &amp;lt;&amp;lt; 16 | g &amp;lt;&amp;lt; 8 | b;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Fillable là interface có thể sử dụng cho graphical object - đối tượng đồ hoạ như hình tròn, hình vuông, nó có khả năng tự thân phủ màu bằng phương thức fill(). Để tiện hơn, rgb() - hàm tĩnh khai báo trong Fillable là một tiện ích giúp chuyển giá trị của mã màu red/green/blue tới số 32-bit value cho việc truyền vào khi gọi hàm fill(). Ví dụ:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;int rgb = Fillable.rgb(200, 108, 29);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;Vai trò 6: Nhận diện class với những tính năng đặc biệt&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Vai trò cuối của interface là giúp nhận diện những tính năng đặc biệt của lớp cài đặt interface. Ví dụ, một class implement java.lang.Cloneable interface đồng nghĩa với việc phương thức Object.clone() có thể tạo ra bản sao của object với đầy đủ các thuộc tính có giá trị tương tự. Hoặc một class implements java.io.Serializable interface là dấu hiệu cho thấy các đối tượng của lớp đó có thể được phép serialized và deserialized - chuyển sang bytes hoặc ngược lại.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Cloneable and Serializable là empty interfaces - rỗng - không khai báo bất cứ hàm nào. Chúng tồn tại với mục đích duy nhất để xác định đối tượng tạo ra từ lớp cài đặt có thể clone (tạo bản sao) hay chuyển đổi thành bytes (serialized).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;b&gt;Kết luận&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;Người mới học java thường bối rối với interface bởi rất nhiều vai trò mà nó đảm nhận. Mặc dù tôi nghĩ mình đã đề cập đến tất cả các vai trò của nó nhưng cũng rất hân hạnh được các bạn quan tâm góp ý nếu còn thấy những vai trò khác của interface mà tôi chưa liệt kê.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #414141; font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , &amp;quot;freemono&amp;quot; , monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #414141; font-family: &#39;Courier New&#39;, Courier, FreeMono, monospace; font-size: 14px; line-height: 19.6px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/5068164858338834821/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/kham-pha-6-vai-tro-cua-interface-trong_9.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/5068164858338834821'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/5068164858338834821'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/kham-pha-6-vai-tro-cua-interface-trong_9.html' title=''/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-5343842658291781830</id><published>2016-04-06T22:09:00.002+07:00</published><updated>2016-04-06T22:20:42.459+07:00</updated><title type='text'>Khám phá 6 vai trò của interface trong thế giới Java</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Bài gốc tại &lt;a href=&quot;http://www.javaworld.com/article/3044050/learn-java/discover-the-six-roles-that-interfaces-play-in-the-java-language.html&quot;&gt;Java World&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Dành cho những ai mới học Java.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Tác giả:&amp;nbsp;Jeff Friesen&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Dịch giả: Minh Hiếu&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Hiệu chỉnh: Lộc Hồ&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Đính chính: Nhữ Đình Thuận&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;Những người mới làm quen ngôn ngữ Java thường hay gặp một số nhầm lẫn nhất định. Họ gặp bối rối bởi những tính năng lạ hoắc của ngôn ngữ, chẳng hạn như Generics, Lambdas trong Java. Song trên thực tế, ngay cả những thứ đơn giản như interface cũng rất có thể gây rối rắm khi muốn hiểu kỹ bản chất của chúng.&lt;br /&gt;&lt;br /&gt;Gần đây, tôi đối mặt với một câu hỏi về lý do tại sao Java hỗ trợ interface (bởi từ khoá interface và implements). Khi tôi bắt đầu học Java trong những năm 1990, câu hỏi này thường được trả lời bằng giải thích rằng trong Java, interface được tạo ra thay thế vai trò của đa thừa kế - đặc điểm mà Java không hỗ trợ. Tuy nhiên, vai trò của interfaces phục vụ nhiều hơn một cỗ máy được lắp ráp cẩu thả chỉ mỗi mục đích đề cập trên. Trong bài này, tôi xin được trình bày sáu vai trò mà interfaces đảm nhiệm trong Java.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Định nghĩa “đa kế thừa”&lt;/b&gt;: &lt;i&gt;Đa kế thừa thường được sử dụng để chỉ một lớp con kế thừa những hành vi và thuộc tính cho phép từ nhiều lớp cha. Trong Java, thuật ngữ cài đặt đa kế thừa cũng có nghĩa tương tự. Java hỗ trợ đa thừa kế với interface, trong đó một lớp interface con có thể kế thừa nhiều phương thức từ nhiều interface cha. Để tìm hiểu thêm về đa kế thừa (bao gồm cả các vấn đề nổi tiếng), hãy xem bài viết “Multiple inheritance” trên Wikipedia.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Vai trò 1: Khai báo kiểu dữ liệu annotation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Từ khóa interface sử dụng trong khai báo kiểu dữ liệu annotation. Ví dụ sau minh hoạ cho việc tạo một annotation có tên Stub:&lt;br /&gt;&lt;br /&gt;import java.lang.annotation.Retention;&lt;br /&gt;import java.lang.annotation.RetentionPolicy;&lt;br /&gt;&lt;br /&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br /&gt;public @interface Stub {&lt;br /&gt;&amp;nbsp; int id(); // dấu chấm phẩy kết thúc lệnh.&lt;br /&gt;&amp;nbsp; String dueDate();&lt;br /&gt;&amp;nbsp; String developer() default &quot;unassigned&quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Stub mô tả một loại annotation (annotation type instances) với cách viết gồm kiểu dữ liệu và hàm (method) không cài đặt. Bắt đầu khai báo với phần tiền tố @ theo sau là từ khoá interface rồi đến tên của annotation. Các thuộc tính của annotation được viết tương tự như phần đầu của method, annotation gồm 3 trường:&lt;br /&gt;&lt;br /&gt;id() - tên thuộc tính định danh cho annotation với kiểu số, bắt buộc khai báo giá trị.&lt;br /&gt;dueDate() thuộc tính tên dueDate, kiểu string, bắt buộc khai báo giá trị.&lt;br /&gt;developer() tên thuộc tính developer, kiểu string và có giá trị mặc định là &amp;nbsp;“unassigned” (có thể không cần gán value cho trường này).&lt;br /&gt;&lt;br /&gt;Ví dụ 2 minh hoạ cách sử dụng Stub cho việc chú thích một lớp và hàm của nó.&lt;br /&gt;&lt;br /&gt;@Stub(&lt;br /&gt;&amp;nbsp; &amp;nbsp; id = 1,&lt;br /&gt;&amp;nbsp; &amp;nbsp; dueDate = &quot;12/31/2016&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;br /&gt;public class ContactMgr {&lt;br /&gt;&amp;nbsp; @Stub(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; id = 2,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dueDate = &quot;06/31/2016&quot;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; developer = &quot;Marty&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;br /&gt;&amp;nbsp; public void addContact(String contactID){&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Annotation có thể dụng cho class, field và method. Stub được dùng cho cả 3 vì không chỉ định dùng cho loại nào. &amp;nbsp;Khi sử dụng annotation cho việc chú thích code, ta sử dụng tiền tố @ + tên và gán giá trị cho các trường của nó, ví dụ id = 1.&lt;br /&gt;&lt;br /&gt;Annotation ở đây được dùng cả trong runtime - khi chạy. Một số annotation chỉ dùng trong compile, nghĩa là sau giai đoạn biên dịch, Compiler có thể loại bỏ chúng.&lt;br /&gt;&lt;br /&gt;Ví dụ 3 minh hoạ việc đọc ra annotation từ code và dùng vào xử lý nghiệp vụ.&lt;br /&gt;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;&lt;br /&gt;public class StubFinder {&lt;br /&gt;&amp;nbsp; public static void main(String[] args) throws Exception &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (args.length != 1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.err.println(&quot;usage: java StubFinder classfile&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Class clazz = Class.forName(args[0]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (clazz.isAnnotationPresent(Stub.class)) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Stub stub = clazz.getAnnotation(Stub.class);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Stub ID = &quot; + stub.id());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Stub Date = &quot; + stub.dueDate());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Stub Developer = &quot; + stub.developer());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Method[] methods = clazz.getMethods();&lt;br /&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; methods.length; i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (methods[i].isAnnotationPresent(Stub.class)) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Stub stub = methods[i].getAnnotation(Stub.class);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Stub ID = &quot; + stub.id());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Stub Date = &quot; + stub.dueDate());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(&quot;Stub Developer = &quot; + stub.developer());&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Khi chạy hàm main, Java Reflection (một thư viện trong Java) có nhiệm vụ tìm kiếm class với tên truyền vào, hàm getAnnotation với parameter là Sub.class giúp tìm kiếm xem lớp có được đánh dấu bằng Stub. Sau đó in giá trị các trường của Stub nếu có ra Console. Logic code tiếp theo sẽ tìm kiếm các method được đánh dấu bằng Stub và in ra giá trị các trường nếu có.&lt;br /&gt;&lt;br /&gt;Khi dịch và chạy bạn nhận được output sau:&lt;br /&gt;&lt;br /&gt;Stub ID = 1&lt;br /&gt;Stub Date = 12/31/2016&lt;br /&gt;Stub Developer = unassigned&lt;br /&gt;&lt;br /&gt;Stub ID = 2&lt;br /&gt;Stub Date = 06/31/2016&lt;br /&gt;Stub Developer = Marty&lt;br /&gt;&lt;br /&gt;Bạn có thể tranh cãi rằng kiểu annotation và Stub annotation trên không liên quan gì đến interfaces. Thêm nữa, lớp khai báo và từ khóa implement lại không có mặt. Tuy nhiên tôi sẽ có ý kiến như sau.&lt;br /&gt;&lt;br /&gt;@interfaces giống class trong việc ra một type - kiểu dữ liệu. Các trường bên trong nó như các phương thức có kiểu dữ liệu trả về. Chúng ta cũng có dữ liệu mặc định trả về khi các trường đó không được gán giá trị khi dùng annotation, có vẻ tương tự như objects. Non-Default-Element bắt buộc phải khai báo giá trị. Theo đó, một chú thích từ annotation này có đặc điểm như một cài đặt của class từ một interface nào đó. Inteface có mặc định và có bắt buộc cài đặt các method.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Ghi chú từ Nhữ Đình Thuận: Thực sự thì interface không phải được thiết kế cho đa thừa kế, trong Java, khái niệm đa thừa kế không tồn tại mà chỉ bị gán ghép một cách thô bỉ từ một số người hay một số cuốn sách. Vai trò của interface là nhằm tăng cường sự đa diện cho đối tượng trong OOP cũng như OOD. Để diễn giải kỹ hơn về vấn đề này, tôi sẽ sớm viết lại một bài rành mạch về bản chất interface trong lập trình hướng đối tượng.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;i&gt;Cách hiểu của tác giả về interface với annotation đang bị nhầm lẫn về mặt từ khoá, còn bản chất đây là 2 thứ hoàn toàn khác nhau, không liên quan. Đây là cách diễn giải của người mới học Java hoặc không hiểu cặn kẽ về Java.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Vai trò 2: Mô tả khả năng cài đặt chung&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Một số lớp khác nhau có những khả năng, đặc tính chung. Ví dụ, các lớp java.nio.CharBuffer, javax.swing.text.Segment, java.lang.String, java.lang.StringBuffer,&lt;br /&gt;và java.lang.StringBuilder cùng có khả năng đọc tuần tự character - ký tự.&lt;br /&gt;&lt;br /&gt;Khi các lớp cùng chung một khả năng thực thi, một interface đóng vai trò thể hiện khả năng này cho việc tái sử dụng. Ví dụ, ta sử dụng một interface dùng chung là java.lang.CharSequence cho các class trên, nó định nghĩa hành vi đọc tuần tự ký tự. CharSequence cung cấp hình mẫu, chuẩn chung cho việc đọc tuần tự character với nhiều hình thái Tập Ký Tự (String, StringBuffer, Segment,...).&lt;br /&gt;&lt;br /&gt;CharSequence cung cấp khuôn mẫu, và sự truy cập cận ở mức độ chỉ đọc(read-only) tới nhiều kiểu dãy chars khác nhau.&lt;br /&gt;Giả dụ bạn muốn viết một chương trình nhỏ đếm các ký tự thường trong CharBuffer, String hay StringBuilder. Sau một hồi suy nghĩ, bạn có thể cài đặt như Ví dụ 4.&lt;br /&gt;&lt;br /&gt;import java.nio.CharBuffer;&lt;br /&gt;&lt;br /&gt;public class Freq {&lt;br /&gt;&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (args.length != 1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.err.println(&quot;usage: java Freq text&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; analyzeS(args[0]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; analyzeSB(new StringBuffer(args[0]));&lt;br /&gt;&amp;nbsp; &amp;nbsp; analyzeCB(CharBuffer.wrap(args[0]));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; static void analyzeCB(CharBuffer cb) &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; int counts[] = new int[26];&lt;br /&gt;&amp;nbsp; &amp;nbsp; while (cb.hasRemaining()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; char ch = cb.get();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (ch &amp;gt;= &#39;a&#39; &amp;amp;&amp;amp; ch &amp;lt;= &#39;z&#39;) &amp;nbsp;counts[ch - &#39;a&#39;]++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; counts.length; i++)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.printf(&quot;Count of %c is %d%n&quot;, (i + &#39;a&#39;), counts[i]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; System.out.println();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; static void analyzeS(String s) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; int counts[] = new int[26];&lt;br /&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; s.length(); i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; char ch = s.charAt(i);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (ch &amp;gt;= &#39;a&#39; &amp;amp;&amp;amp; ch &amp;lt;= &#39;z&#39;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; counts[ch - &#39;a&#39;]++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; counts.length; i++)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.printf(&quot;Count of %c is %d%n&quot;, (i + &#39;a&#39;), counts[i]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; System.out.println();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; static void analyzeSB(StringBuffer sb) &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; int counts[] = new int[26];&lt;br /&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; sb.length(); i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; char ch = sb.charAt(i);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (ch &amp;gt;= &#39;a&#39; &amp;amp;&amp;amp; ch &amp;lt;= &#39;z&#39;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; counts[ch - &#39;a&#39;]++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; counts.length; i++)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.printf(&quot;Count of %c is %d%n&quot;, (i + &#39;a&#39;), counts[i]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; System.out.println();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Ví dụ trên sử dụng tới 3 method cùng một nhiệm vụ đếm ký tự thường cho 3 kiểu dữ liệu khác nhau. Mặc dù String và StringBuffer được cài đặt khá giống nhau về cấu trúc dữ liệu nhưng CharBuffer lại khác nhiều.&lt;br /&gt;&lt;br /&gt;Code cài đặt trên bộc lộ vấn đề trùng lặp mã dẫn đến một class viết quá dài và không cần thiết. Nếu cài đặt phụ thuộc vào một interface có hàm chung là CharSequence thì ví dụ 5 là một phiên bản khác chạy tương tự.&lt;br /&gt;&lt;br /&gt;import java.nio.CharBuffer;&lt;br /&gt;&lt;br /&gt;public class Freq {&lt;br /&gt;&amp;nbsp; &amp;nbsp;public static void main(String[] args) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (args.length != 1) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.err.println(&quot;usage: java Freq text&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; analyze(args[0]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; analyze(new StringBuffer(args[0]));&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; analyze(CharBuffer.wrap(args[0]));&lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;static void analyze(CharSequence cs) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int counts[] = new int[26];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; cs.length(); i++) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;char ch = cs.charAt(i);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ch &amp;gt;= &#39;a&#39; &amp;amp;&amp;amp; ch &amp;lt;= &#39;z&#39;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; counts[ch - &#39;a&#39;]++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; counts.length; i++)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.printf(&quot;Count of %c is %d%n&quot;, (i + &#39;a&#39;), counts[i]);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println();&lt;br /&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Như bạn thấy, chương trình trên rõ ràng đơn giản và sạch hơn bằng việc sử dụng interface chung mà cả 3 lớp String, StringBuffer, và CharBuffer đều có thể làm đầu vào.&lt;br /&gt;&lt;br /&gt;Tóm lại, interface đóng vai trò mô tả những đặc điểm cài đặt chung nhất. Việc viết mã nên sử dụng interface để thể hiện được sử linh hoạt trong gọi hàm, tránh mã thừa, code ngắn gọn hơn. Ở ví dụ trên, bạn có thể tiết kiệm được 50% mã.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Ghi chú từ Nhữ Đình Thuận: Nguyên lý của thiết kế mã lệnh là phụ thuộc vào trừu tượng, thiết kế, vào lớp chung chứ không phụ thuộc vào cài đặt, cụ thể. Đây là nguyên lý Dependency Inversion trong SOLID và cách diễn giải của tác giả đang thể hiện ở mức &quot;mới học code&quot;. Design code theo interface chỉ là 1 thực nghiệm của nguyên lý thiết kế mã này.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Còn nữa&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/5343842658291781830/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/kham-pha-6-vai-tro-cua-interface-trong.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/5343842658291781830'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/5343842658291781830'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/kham-pha-6-vai-tro-cua-interface-trong.html' title='Khám phá 6 vai trò của interface trong thế giới Java'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7625471260793326826</id><published>2016-04-04T09:19:00.001+07:00</published><updated>2016-04-04T09:19:18.980+07:00</updated><title type='text'>Slide về Java 8 - How to  change your code?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Slide trình bày về những ảnh hưởng tới tư duy viết code với Java 8 có sự so sánh với Java 7. Toàn bộ slide là các code mẫu minh hoạ.&lt;br /&gt;&lt;br /&gt;Tải slide &lt;a href=&quot;https://www.dropbox.com/s/ny3wv38xjxqxub1/Java%208.pdf?dl=0&quot;&gt;tại đây&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7625471260793326826/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/slide-ve-java-8-how-to-change-your-code.html#comment-form' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7625471260793326826'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7625471260793326826'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/04/slide-ve-java-8-how-to-change-your-code.html' title='Slide về Java 8 - How to  change your code?'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-7378693808461802527</id><published>2016-03-31T11:14:00.002+07:00</published><updated>2016-03-31T11:37:18.941+07:00</updated><title type='text'>Java 8 Optional - tiếng súng từ bên kia chiến tuyến</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-wUQ0dHEIqLA/VvymqEh6-tI/AAAAAAAACKc/0vDRLxnC5vEDcI-dsszsBI0kBcxvkwBCw/s1600/Java%2B8-Optional-chon%2Bhay%2Bkhong.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;119&quot; src=&quot;https://3.bp.blogspot.com/-wUQ0dHEIqLA/VvymqEh6-tI/AAAAAAAACKc/0vDRLxnC5vEDcI-dsszsBI0kBcxvkwBCw/s200/Java%2B8-Optional-chon%2Bhay%2Bkhong.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Java 8 đã chính thức ra mắt từ 2 năm trước, có rất nhiều bài viết đề cập về những cải tiến cũng như vận dụng thực tế liên quan đã được viết trong suốt thời gian qua. Thật ngạc nhiên, trong vô số đặc điểm mới, một chủ đề gây tranh cãi nhiều nhất chính là lớp Optional.&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Tác giả: Daniel Olszewski &amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Dịch giả: Trương Thanh Tùng&lt;/div&gt;&lt;div style=&quot;text-align: right;&quot;&gt;Hiệu chỉnh: Lộc Hồ&lt;br /&gt;Xin không copy dưới mọi hình thức&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/7378693808461802527/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/03/java-8-optional-tieng-sung-tu-ben-kia.html#comment-form' title='5 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7378693808461802527'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/7378693808461802527'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/03/java-8-optional-tieng-sung-tu-ben-kia.html' title='Java 8 Optional - tiếng súng từ bên kia chiến tuyến'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-wUQ0dHEIqLA/VvymqEh6-tI/AAAAAAAACKc/0vDRLxnC5vEDcI-dsszsBI0kBcxvkwBCw/s72-c/Java%2B8-Optional-chon%2Bhay%2Bkhong.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15699680.post-9077111239460408569</id><published>2016-03-29T21:35:00.002+07:00</published><updated>2016-03-31T11:38:00.990+07:00</updated><title type='text'>Xây dựng Web Application bằng công nghệ JSP với Spring Boot</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Bài viết như một ví dụ thực tế nâng cấp từ triển khai truyền thống sử dụng Tomcat lên blue/green deployment (triển khai song song) sử dụng Spring Boot và Pivotal Web Services.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Nguồn bài gốc tại &lt;a href=&quot;https://dzone.com/articles/spring-boot-with-jsps-in-executable-jars-1&quot;&gt;DZONE&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Tác giả: Gunnar Hillert&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;           &lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;div style=&quot;text-align: right;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Dịch bởi: Phạm Trung Đức&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;s1&quot;&gt;Xin không copy dưới mọi hình thức&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://nhuthuan.blogspot.com/feeds/9077111239460408569/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='https://nhuthuan.blogspot.com/2016/03/xay-dung-web-application-bang-cong-nghe.html#comment-form' title='2 Nhận xét'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/9077111239460408569'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/15699680/posts/default/9077111239460408569'/><link rel='alternate' type='text/html' href='https://nhuthuan.blogspot.com/2016/03/xay-dung-web-application-bang-cong-nghe.html' title='Xây dựng Web Application bằng công nghệ JSP với Spring Boot'/><author><name>Nhữ Đình Thuận</name><uri>http://www.blogger.com/profile/16226896714966333754</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>