一,什么是附加導航?
當你瀏覽百度百科,或者bootstrap時,如果當頁的內容很多,當頁面下滑到一定程度時,就會在頁面的最右側出現附加導航,如下面的截圖:
左側截圖是百度百科的附加導航,右側是bootstrap的affix插件。
這就是附加導航,本篇博客給大家介紹這兩種的使用。
二,bootstrap的affix插件。
1,在你的代碼中引入相應插件。
<script src="/static/jquery-3.1.1.js"></script> <link rel="stylesheet" href="/static/css/bootstrap.css">
<script src="/static/js/bootstrap.js"></script>
你可以下載到本地,也可以直接引入從官網引入(affix是依賴bootstrap.css,和bootstrap.js的)。
2,編寫html部分,和css部分。
css部分:

ul.nav-tabs{ width: 140px; margin-top: 20px; border-radius: 4px; border: 1px solid #ddd; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.067); } ul.nav-tabs li{ margin: 0; border-top: 1px solid #ddd; } ul.nav-tabs li:first-child{ border-top: none; } ul.nav-tabs li a{ margin: 0; padding: 8px 16px; border-radius: 0; } ul.nav-tabs li.active a, ul.nav-tabs li.active a:hover{ color: #fff; background: #0088cc; border: 1px solid #0088cc; } ul.nav-tabs li:first-child a{ border-radius: 4px 4px 0 0; } ul.nav-tabs li:last-child a{ border-radius: 0 0 4px 4px; } ul.nav-tabs.affix{ top: 30px; /* Set the top position of pinned element */ }
html部分:

<body data-spy="scroll" data-target="#myScrollspy"> <div class="container"> <div class="jumbotron"> <h1>Bootstrap Affix</h1> </div> <div class="row"> <div class="col-xs-3" id="myScrollspy"> <ul class="nav nav-tabs nav-stacked" id="myNav"> <li class="active"><a href="#section-1">第一部分</a></li> <li><a href="#section-2">第二部分</a></li> <li><a href="#section-3">第三部分</a></li> <li><a href="#section-4">第四部分</a></li> <li><a href="#section-5">第五部分</a></li> </ul> </div> <div class="col-xs-9"> <h2 id="section-1">第一部分</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu sem tempor, varius quam at, luctus dui. Mauris magna metus, dapibus nec turpis vel, semper malesuada ante. Vestibulum id metus ac nisl bibendum scelerisque non non purus. Suspendisse varius nibh non aliquet sagittis. In tincidunt orci sit amet elementum vestibulum. Vivamus fermentum in arcu in aliquam. Quisque aliquam porta odio in fringilla. Vivamus nisl leo, blandit at bibendum eu, tristique eget risus. Integer aliquet quam ut elit suscipit, id interdum neque porttitor. Integer faucibus ligula.</p> <p>Vestibulum quis quam ut magna consequat faucibus. Pellentesque eget nisi a mi suscipit tincidunt. Ut tempus dictum risus. Pellentesque viverra sagittis quam at mattis. Suspendisse potenti. Aliquam sit amet gravida nibh, facilisis gravida odio. Phasellus auctor velit at lacus blandit, commodo iaculis justo viverra. Etiam vitae est arcu. Mauris vel congue dolor. Aliquam eget mi mi. Fusce quam tortor, commodo ac dui quis, bibendum viverra erat. Maecenas mattis lectus enim, quis tincidunt dui molestie euismod. Curabitur et diam tristique, accumsan nunc eu, hendrerit tellus.</p> <hr> <h2 id="section-2">第二部分</h2> <p>Nullam hendrerit justo non leo aliquet imperdiet. Etiam in sagittis lectus. Suspendisse ultrices placerat accumsan. Mauris quis dapibus orci. In dapibus velit blandit pharetra tincidunt. Quisque non sapien nec lacus condimentum facilisis ut iaculis enim. Sed viverra interdum bibendum. Donec ac sollicitudin dolor. Sed fringilla vitae lacus at rutrum. Phasellus congue vestibulum ligula sed consequat.</p> <p>Vestibulum consectetur scelerisque lacus, ac fermentum lorem convallis sed. Nam odio tortor, dictum quis malesuada at, pellentesque vitae orci. Vivamus elementum, felis eu auctor lobortis, diam velit egestas lacus, quis fermentum metus ante quis urna. Sed at facilisis libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum bibendum blandit dolor. Nunc orci dolor, molestie nec nibh in, hendrerit tincidunt ante. Vivamus sem augue, hendrerit non sapien in, mollis ornare augue.</p> <hr> <h2 id="section-3">第三部分</h2> <p>Integer pulvinar leo id risus pellentesque vestibulum. Sed diam libero, sodales eget sapien vel, porttitor bibendum enim. Donec sed nibh vitae lorem porttitor blandit in nec ante. Pellentesque vitae metus ipsum. Phasellus sed nunc ac sem malesuada condimentum. Etiam in aliquam lectus. Nam vel sapien diam. Donec pharetra id arcu eget blandit. Proin imperdiet mattis augue in porttitor. Quisque tempus enim id lobortis feugiat. Suspendisse tincidunt risus quis dolor fringilla blandit. Ut sed sapien at purus lacinia porttitor. Nullam iaculis, felis a pretium ornare, dolor nisl semper tortor, vel sagittis lacus est consequat eros. Sed id pretium nisl. Curabitur dolor nisl, laoreet vitae aliquam id, tincidunt sit amet mauris.</p> <p>Phasellus vitae suscipit justo. Mauris pharetra feugiat ante id lacinia. Etiam faucibus mauris id tempor egestas. Duis luctus turpis at accumsan tincidunt. Phasellus risus risus, volutpat vel tellus ac, tincidunt fringilla massa. Etiam hendrerit dolor eget ante rutrum adipiscing. Cras interdum ipsum mattis, tempus mauris vel, semper ipsum. Duis sed dolor ut enim lobortis pellentesque ultricies ac ligula. Pellentesque convallis elit nisi, id vulputate ipsum ullamcorper ut. Cras ac pulvinar purus, ac viverra est. Suspendisse potenti. Integer pellentesque neque et elementum tempus. Curabitur bibendum in ligula ut rhoncus.</p> <p>Quisque pharetra velit id velit iaculis pretium. Nullam a justo sed ligula porta semper eu quis enim. Pellentesque pellentesque, metus at facilisis hendrerit, lectus velit facilisis leo, quis volutpat turpis arcu quis enim. Nulla viverra lorem elementum interdum ultricies. Suspendisse accumsan quam nec ante mollis tempus. Morbi vel accumsan diam, eget convallis tellus. Suspendisse potenti.</p> <hr> <h2 id="section-4">第四部分</h2> <p>Suspendisse a orci facilisis, dignissim tortor vitae, ultrices mi. Vestibulum a iaculis lacus. Phasellus vitae convallis ligula, nec volutpat tellus. Vivamus scelerisque mollis nisl, nec vehicula elit egestas a. Sed luctus metus id mi gravida, faucibus convallis neque pretium. Maecenas quis sapien ut leo fringilla tempor vitae sit amet leo. Donec imperdiet tempus placerat. Pellentesque pulvinar ultrices nunc sed ultrices. Morbi vel mi pretium, fermentum lacus et, viverra tellus. Phasellus sodales libero nec dui convallis, sit amet fermentum sapien auctor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eu elementum nibh, quis varius libero.</p> <p>Vestibulum quis quam ut magna consequat faucibus. Pellentesque eget nisi a mi suscipit tincidunt. Ut tempus dictum risus. Pellentesque viverra sagittis quam at mattis. Suspendisse potenti. Aliquam sit amet gravida nibh, facilisis gravida odio. Phasellus auctor velit at lacus blandit, commodo iaculis justo viverra. Etiam vitae est arcu. Mauris vel congue dolor. Aliquam eget mi mi. Fusce quam tortor, commodo ac dui quis, bibendum viverra erat. Maecenas mattis lectus enim, quis tincidunt dui molestie euismod. Curabitur et diam tristique, accumsan nunc eu, hendrerit tellus.</p> <p>Phasellus fermentum, neque sit amet sodales tempor, enim ante interdum eros, eget luctus ipsum eros ut ligula. Nunc ornare erat quis faucibus molestie. Proin malesuada consequat commodo. Mauris iaculis, eros ut dapibus luctus, massa enim elementum purus, sit amet tristique purus purus nec felis. Morbi vestibulum sapien eget porta pulvinar. Nam at quam diam. Proin rhoncus, felis elementum accumsan dictum, felis nisi vestibulum tellus, et ultrices risus felis in orci. Quisque vestibulum sem nisl, vel congue leo dictum nec. Cras eget est at velit sagittis ullamcorper vel et lectus. In hac habitasse platea dictumst. Etiam interdum iaculis velit, vel sollicitudin lorem feugiat sit amet. Etiam luctus, quam sed sodales aliquam, lorem libero hendrerit urna, faucibus rhoncus massa nibh at felis. Curabitur ac tempus nulla, ut semper erat. Vivamus porta ullamcorper sem, ornare egestas mauris facilisis id.</p> <p>Ut ut risus nisl. Fusce porttitor eros at magna luctus, non congue nulla eleifend. Aenean porttitor feugiat dolor sit amet facilisis. Pellentesque venenatis magna et risus commodo, a commodo turpis gravida. Nam mollis massa dapibus urna aliquet, quis iaculis elit sodales. Sed eget ornare orci, eu malesuada justo. Nunc lacus augue, dictum quis dui id, lacinia congue quam. Nulla sem sem, aliquam nec dolor ac, tempus convallis nunc. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla suscipit convallis iaculis. Quisque eget commodo ligula. Praesent leo dui, facilisis quis eleifend in, aliquet vitae nunc. Suspendisse fermentum odio ac massa ultricies pellentesque. Fusce eu suscipit massa.</p> <hr> <h2 id="section-5">第五部分</h2> <p>Nam eget purus nec est consectetur vehicula. Nullam ultrices nisl risus, in viverra libero egestas sit amet. Etiam porttitor dolor non eros pulvinar malesuada. Vestibulum sit amet est mollis nulla tempus aliquet. Praesent luctus hendrerit arcu non laoreet. Morbi consequat placerat magna, ac ornare odio sagittis sed. Donec vitae ullamcorper purus. Vivamus non metus ac justo porta volutpat.</p> <p>Vivamus mattis accumsan erat, vel convallis risus pretium nec. Integer nunc nulla, viverra ut sem non, scelerisque vehicula arcu. Fusce bibendum convallis augue sit amet lobortis. Cras porta urna turpis, sodales lobortis purus adipiscing id. Maecenas ullamcorper, turpis suscipit pellentesque fringilla, massa lacus pulvinar mi, nec dignissim velit arcu eget purus. Nam at dapibus tellus, eget euismod nisl. Ut eget venenatis sapien. Vivamus vulputate varius mauris, vel varius nisl facilisis ac. Nulla aliquet justo a nibh ornare, eu congue neque rutrum.</p> <p>Suspendisse a orci facilisis, dignissim tortor vitae, ultrices mi. Vestibulum a iaculis lacus. Phasellus vitae convallis ligula, nec volutpat tellus. Vivamus scelerisque mollis nisl, nec vehicula elit egestas a. Sed luctus metus id mi gravida, faucibus convallis neque pretium. Maecenas quis sapien ut leo fringilla tempor vitae sit amet leo. Donec imperdiet tempus placerat. Pellentesque pulvinar ultrices nunc sed ultrices. Morbi vel mi pretium, fermentum lacus et, viverra tellus. Phasellus sodales libero nec dui convallis, sit amet fermentum sapien auctor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eu elementum nibh, quis varius libero.</p> <p>Morbi sed fermentum ipsum. Morbi a orci vulputate tortor ornare blandit a quis orci. Donec aliquam sodales gravida. In ut ullamcorper nisi, ac pretium velit. Vestibulum vitae lectus volutpat, consequat lorem sit amet, pulvinar tellus. In tincidunt vel leo eget pulvinar. Curabitur a eros non lacus malesuada aliquam. Praesent et tempus odio. Integer a quam nunc. In hac habitasse platea dictumst. Aliquam porta nibh nulla, et mattis turpis placerat eget. Pellentesque dui diam, pellentesque vel gravida id, accumsan eu magna. Sed a semper arcu, ut dignissim leo.</p> <p>Sed vitae lobortis diam, id molestie magna. Aliquam consequat ipsum quis est dictum ultrices. Aenean nibh velit, fringilla in diam id, blandit hendrerit lacus. Donec vehicula rutrum tellus eget fermentum. Pellentesque ac erat et arcu ornare tincidunt. Aliquam erat volutpat. Vivamus lobortis urna quis gravida semper. In condimentum, est a faucibus luctus, mi dolor cursus mi, id vehicula arcu risus a nibh. Pellentesque blandit sapien lacus, vel vehicula nunc feugiat sit amet.</p> </div> </div> </div> </body>
其中有幾點要注意:
1,affix是結合bootstrap的scroll屬性實現的,body必須要有scroll屬性,要不出現不了最完美的效果(你可以自己調試看一下)。
2,要實現affix官網有兩種方式第一種是直接給ul標簽添加一個屬性:data-spy="affix",第二種就是我給你展示的方式通過js去做(我建議大家通過js去做)。
3,每一個li里面的a標簽src要綁定你需要跳轉到的標題的id。
3,編寫js部分
<script> $('#myNav').affix({ offset: { top: $('#myNav').offset().top - 71, bottom: ($('footer').outerHeight(true) ) + 40 } })// 這個設置的就是你的導航條距離頂端多少時開始移動,距離頁面底端多少時停止。 </script>
這樣就大功告成了,你的預期頁面就是這樣:
開始時:
移動時:
這樣就大功告成了,但是這個有一個很致命的缺點就是affix不能與博客園的博客結合。因為affix是依賴bootstap的css和js做的,而博客園有一部分html代碼與bootstrap的css沖突了,這樣就會導致你的博客格式發生錯亂,會引起沖突。那怎么辦呢?接下來就介紹類似於百度百科的導航條,他是某位大神自己寫的,我有幸找到,然后和博客園的結合了。
三,side--toolbar類似於百度百科的附加導航
這個也是基於css,js做的,而且可以和博客園的博客相結合,我覺得很好~
1,你需要引入相應的css,js文件。

#sideToolbar { position: fixed; padding: 10px; background: #fff; } #sideToolbar-btn { position: absolute; display: block; width: 45px; height: 45px; cursor: pointer; background: url("https://files.cnblogs.com/files/jin-xin/sideToolbar.ico") no-repeat scroll 0 0 transparent; bottom: 58px; left: 10px; } #sideToolbar-btn.disable { background: url("https://files.cnblogs.com/files/jin-xin/sideToolbar.ico") no-repeat scroll -86px 0 transparent; } #sideToolbar-btn.disable:hover { background: url("https://files.cnblogs.com/files/jin-xin/sideToolbar.ico") no-repeat scroll -129px 0 transparent; } #sideToolbar-up { position: absolute; left: 10px; bottom: 10px; display: block; width: 45px; height: 45px; border-radius: 2px; background: url("https://files.cnblogs.com/files/jin-xin/sideToolbar.ico") no-repeat scroll 0px -50px transparent; } #sideToolbar-up:hover { background: url("https://files.cnblogs.com/files/jin-xin/sideToolbar.ico") no-repeat scroll -63px -51px transparent; }

(function() { 'use strict'; function SideToolbar(wrapper, options) { var defaults = { width: 260, height: 300, right: 10, bottom: 10, speed: 300, showHeight: 600 }; this.settings = $.extend(defaults, options); this.$wrapper = $(wrapper); this.isVisible = false; this.$wrapper.css({display: 'none'}); this.initView(); this.bindEvents(); } SideToolbar.prototype = { initView: function() { var btn = '<a id="sideToolbar-btn" href="javascript:void(0);"></a>' var up = '<a id="sideToolbar-up" href="javascript:void(0)"></a>'; this.$wrapper.append(btn).append(up); this.fixPosition(); }, fixPosition: function() { this.$wrapper.css({ width: this.settings.width, height: this.settings.height, right: this.settings.right, bottom: this.settings.bottom }); }, bindEvents: function() { var context = this; $(document).scroll(function() { if ($(document).scrollTop() > context.settings.showHeight) { if (context.isVisible == false) { context.isVisible = true; context.show(); } } else { if (context.isVisible == true) { context.isVisible = false; context.hide(); } } }); // 必須在綁定document的scroll事件處理函數之后才能手動觸發該事件 $(document).trigger('scroll'); $('#sideToolbar-btn').click(function() { if ($(this).hasClass('disable')) { $(this).removeClass('disable'); context.$wrapper.find(':first-child').css({visibility: 'visible'}); } else { $(this).addClass('disable'); context.$wrapper.find(':first-child').css({visibility: 'hidden'}); } }); $('#sideToolbar-up').click(function() { // $(document).animate({scrollTop: ..}) 會出錯 // $(document).scrollTop() 可以 $('body, html').animate({ scrollTop: 0 }, context.settings.speed, 'linear'); }); }, show: function() { // fadeIn、fadeOut 操作的是 display 屬性,不能跟 visibility 同時使用= this.$wrapper.fadeIn(this.settings.speed); }, hide: function() { this.$wrapper.fadeOut(this.settings.speed); } }; window.SideToolbar = SideToolbar; $.fn.sideToolbar = function(options) { var sideToolbar = new SideToolbar(this, options); return $(this); }; })(jQuery);
2,示例的html代碼。

<style> #content { width: 600px; height: 2000px; background: #eee; } #sideToolbar { background: yellow; } .live li{ font-weight: 400; } </style> </head> <body> <div id="content"> <h2 id="title-0-0-0">第一部分</h2> <p>在對問題建立模型的過程中,我們會遇到非常多不同層面的問題,所以我們需要很多領域的知識去解決這些問題。</p> <ul> <li>我們需要管理被操作的數據,因為數據與數據之前是相互有關聯的。將數據結構化,通常是編程的第一步。關於結構化數據的相關理論以及實踐,需要有一個專門的學科分支或者說課題去研究——<strong>數據結構</strong>。</li> <li>我們需要解決一個具體的問題,這個具體的問題如何一步步去解決,過程是怎么樣子的——<strong>算法</strong>。</li> <li>我們需要將解決方案進行自動化,並以代碼的形式進行交付——<strong>編程語言</strong>。</li> <li>如果將一個抽象的模型進行編碼實現,如何實現“這個功能”,如何實現“那個功能”——<strong>編程技巧</strong>。</li> <li>問題的規模大了,眾多代碼糅合在一起,連程序員自己都看不懂了!怎么來拆分、模塊化這些代碼——<strong>設計</strong>。</li> <li>代碼量已經到了一個人無法完成的地步了,需要團隊分工合作才能完成了——<strong>工程化</strong>。</li> <li>你寫的代碼我看不懂,沒法調用或者很難調用,我寫的代碼你也看不懂,或者很難看懂。還怎么愉快的玩耍——<strong>編碼風格/編碼規范</strong>。</li> <li>問題的規模繼續擴大,到了系統工程的規模了,之前學的套路已經不管用了!怎么來構建這個系統才能實現正確、安全、高性能、高可用——<strong>架構</strong>。</li> </ul> <p>然而這些也只是一個系統工程中的冰山一角!這是一個龐大的體系。也正是因為軟件開發需要考慮到的問題太多且團隊成員水品參差不齊,所以團隊開發中並不是每個程序員做的事情都是一樣的。每個人都有自己的角色、初級工程師、中級工程師、高級工程師、架構師、CTO。。。</p> <p>所以編程不僅僅只是堆砌代碼!</p> <p>說到這里,我想起來了一件事情——為啥業界普遍鄙視培訓出來半道出家的新人?人與人的區別是很大的!我見過培訓出來也很牛的。其實,說到底,被鄙視的並不是所有人。而是那些培訓了幾個月之后發現隨便找個工作也能拿“高薪”然后還自認為編程很簡單的新人。因為這種經歷給了他們一種錯覺——編程如此簡單,我培訓幾個月也會嘛!有點像剛學會開車的新司機,很囂張的對老司機說“開車很簡單嘛!你看我也會啊!”。語言和開發工具只是招式,這是外功。而編程思想、經驗是內功。這些內功並不是靠短短幾個月的培訓能夠掌握的,這一點有點像中國制造業和日本制造業的區別。動不動趕英超美可不好。。。</p> <p>編程並不簡單!這是一件很嚴肅的事情。不過今天,我沒有辦法介紹完所有的方面!或者說,到今天為止,我也並沒能掌握所有領域的知識。所以今天我只是分享一些關於編碼本身的一些經驗。</p> <p>另外,本文主要分享如何寫代碼,並不是如何用Java寫代碼。所以文章中各種語言都有可能出現。</p> <h2 id="title-0-1-0">第二部分</h2> <p>在對問題建立模型的過程中,我們會遇到非常多不同層面的問題,所以我們需要很多領域的知識去解決這些問題。</p> <ul> <li>我們需要管理被操作的數據,因為數據與數據之前是相互有關聯的。將數據結構化,通常是編程的第一步。關於結構化數據的相關理論以及實踐,需要有一個專門的學科分支或者說課題去研究——<strong>數據結構</strong>。</li> <li>我們需要解決一個具體的問題,這個具體的問題如何一步步去解決,過程是怎么樣子的——<strong>算法</strong>。</li> <li>我們需要將解決方案進行自動化,並以代碼的形式進行交付——<strong>編程語言</strong>。</li> <li>如果將一個抽象的模型進行編碼實現,如何實現“這個功能”,如何實現“那個功能”——<strong>編程技巧</strong>。</li> <li>問題的規模大了,眾多代碼糅合在一起,連程序員自己都看不懂了!怎么來拆分、模塊化這些代碼——<strong>設計</strong>。</li> <li>代碼量已經到了一個人無法完成的地步了,需要團隊分工合作才能完成了——<strong>工程化</strong>。</li> <li>你寫的代碼我看不懂,沒法調用或者很難調用,我寫的代碼你也看不懂,或者很難看懂。還怎么愉快的玩耍——<strong>編碼風格/編碼規范</strong>。</li> <li>問題的規模繼續擴大,到了系統工程的規模了,之前學的套路已經不管用了!怎么來構建這個系統才能實現正確、安全、高性能、高可用——<strong>架構</strong>。</li> </ul> <p>然而這些也只是一個系統工程中的冰山一角!這是一個龐大的體系。也正是因為軟件開發需要考慮到的問題太多且團隊成員水品參差不齊,所以團隊開發中並不是每個程序員做的事情都是一樣的。每個人都有自己的角色、初級工程師、中級工程師、高級工程師、架構師、CTO。。。</p> <p>所以編程不僅僅只是堆砌代碼!</p> <p>說到這里,我想起來了一件事情——為啥業界普遍鄙視培訓出來半道出家的新人?人與人的區別是很大的!我見過培訓出來也很牛的。其實,說到底,被鄙視的並不是所有人。而是那些培訓了幾個月之后發現隨便找個工作也能拿“高薪”然后還自認為編程很簡單的新人。因為這種經歷給了他們一種錯覺——編程如此簡單,我培訓幾個月也會嘛!有點像剛學會開車的新司機,很囂張的對老司機說“開車很簡單嘛!你看我也會啊!”。語言和開發工具只是招式,這是外功。而編程思想、經驗是內功。這些內功並不是靠短短幾個月的培訓能夠掌握的,這一點有點像中國制造業和日本制造業的區別。動不動趕英超美可不好。。。</p> <p>編程並不簡單!這是一件很嚴肅的事情。不過今天,我沒有辦法介紹完所有的方面!或者說,到今天為止,我也並沒能掌握所有領域的知識。所以今天我只是分享一些關於編碼本身的一些經驗。</p> <p>另外,本文主要分享如何寫代碼,並不是如何用Java寫代碼。所以文章中各種語言都有可能出現。</p> <h2 id="title-0-2-0">第三部分</h2> <p>在對問題建立模型的過程中,我們會遇到非常多不同層面的問題,所以我們需要很多領域的知識去解決這些問題。</p> <ul> <li>我們需要管理被操作的數據,因為數據與數據之前是相互有關聯的。將數據結構化,通常是編程的第一步。關於結構化數據的相關理論以及實踐,需要有一個專門的學科分支或者說課題去研究——<strong>數據結構</strong>。</li> <li>我們需要解決一個具體的問題,這個具體的問題如何一步步去解決,過程是怎么樣子的——<strong>算法</strong>。</li> <li>我們需要將解決方案進行自動化,並以代碼的形式進行交付——<strong>編程語言</strong>。</li> <li>如果將一個抽象的模型進行編碼實現,如何實現“這個功能”,如何實現“那個功能”——<strong>編程技巧</strong>。</li> <li>問題的規模大了,眾多代碼糅合在一起,連程序員自己都看不懂了!怎么來拆分、模塊化這些代碼——<strong>設計</strong>。</li> <li>代碼量已經到了一個人無法完成的地步了,需要團隊分工合作才能完成了——<strong>工程化</strong>。</li> <li>你寫的代碼我看不懂,沒法調用或者很難調用,我寫的代碼你也看不懂,或者很難看懂。還怎么愉快的玩耍——<strong>編碼風格/編碼規范</strong>。</li> <li>問題的規模繼續擴大,到了系統工程的規模了,之前學的套路已經不管用了!怎么來構建這個系統才能實現正確、安全、高性能、高可用——<strong>架構</strong>。</li> </ul> <p>然而這些也只是一個系統工程中的冰山一角!這是一個龐大的體系。也正是因為軟件開發需要考慮到的問題太多且團隊成員水品參差不齊,所以團隊開發中並不是每個程序員做的事情都是一樣的。每個人都有自己的角色、初級工程師、中級工程師、高級工程師、架構師、CTO。。。</p> <p>所以編程不僅僅只是堆砌代碼!</p> <p>說到這里,我想起來了一件事情——為啥業界普遍鄙視培訓出來半道出家的新人?人與人的區別是很大的!我見過培訓出來也很牛的。其實,說到底,被鄙視的並不是所有人。而是那些培訓了幾個月之后發現隨便找個工作也能拿“高薪”然后還自認為編程很簡單的新人。因為這種經歷給了他們一種錯覺——編程如此簡單,我培訓幾個月也會嘛!有點像剛學會開車的新司機,很囂張的對老司機說“開車很簡單嘛!你看我也會啊!”。語言和開發工具只是招式,這是外功。而編程思想、經驗是內功。這些內功並不是靠短短幾個月的培訓能夠掌握的,這一點有點像中國制造業和日本制造業的區別。動不動趕英超美可不好。。。</p> <p>編程並不簡單!這是一件很嚴肅的事情。不過今天,我沒有辦法介紹完所有的方面!或者說,到今天為止,我也並沒能掌握所有領域的知識。所以今天我只是分享一些關於編碼本身的一些經驗。</p> <p>另外,本文主要分享如何寫代碼,並不是如何用Java寫代碼。所以文章中各種語言都有可能出現。</p> <h2 id="title-0-3-0">第四部分</h2> <p>在對問題建立模型的過程中,我們會遇到非常多不同層面的問題,所以我們需要很多領域的知識去解決這些問題。</p> <ul> <li>我們需要管理被操作的數據,因為數據與數據之前是相互有關聯的。將數據結構化,通常是編程的第一步。關於結構化數據的相關理論以及實踐,需要有一個專門的學科分支或者說課題去研究——<strong>數據結構</strong>。</li> <li>我們需要解決一個具體的問題,這個具體的問題如何一步步去解決,過程是怎么樣子的——<strong>算法</strong>。</li> <li>我們需要將解決方案進行自動化,並以代碼的形式進行交付——<strong>編程語言</strong>。</li> <li>如果將一個抽象的模型進行編碼實現,如何實現“這個功能”,如何實現“那個功能”——<strong>編程技巧</strong>。</li> <li>問題的規模大了,眾多代碼糅合在一起,連程序員自己都看不懂了!怎么來拆分、模塊化這些代碼——<strong>設計</strong>。</li> <li>代碼量已經到了一個人無法完成的地步了,需要團隊分工合作才能完成了——<strong>工程化</strong>。</li> <li>你寫的代碼我看不懂,沒法調用或者很難調用,我寫的代碼你也看不懂,或者很難看懂。還怎么愉快的玩耍——<strong>編碼風格/編碼規范</strong>。</li> <li>問題的規模繼續擴大,到了系統工程的規模了,之前學的套路已經不管用了!怎么來構建這個系統才能實現正確、安全、高性能、高可用——<strong>架構</strong>。</li> </ul> <p>然而這些也只是一個系統工程中的冰山一角!這是一個龐大的體系。也正是因為軟件開發需要考慮到的問題太多且團隊成員水品參差不齊,所以團隊開發中並不是每個程序員做的事情都是一樣的。每個人都有自己的角色、初級工程師、中級工程師、高級工程師、架構師、CTO。。。</p> <p>所以編程不僅僅只是堆砌代碼!</p> <p>說到這里,我想起來了一件事情——為啥業界普遍鄙視培訓出來半道出家的新人?人與人的區別是很大的!我見過培訓出來也很牛的。其實,說到底,被鄙視的並不是所有人。而是那些培訓了幾個月之后發現隨便找個工作也能拿“高薪”然后還自認為編程很簡單的新人。因為這種經歷給了他們一種錯覺——編程如此簡單,我培訓幾個月也會嘛!有點像剛學會開車的新司機,很囂張的對老司機說“開車很簡單嘛!你看我也會啊!”。語言和開發工具只是招式,這是外功。而編程思想、經驗是內功。這些內功並不是靠短短幾個月的培訓能夠掌握的,這一點有點像中國制造業和日本制造業的區別。動不動趕英超美可不好。。。</p> <p>編程並不簡單!這是一件很嚴肅的事情。不過今天,我沒有辦法介紹完所有的方面!或者說,到今天為止,我也並沒能掌握所有領域的知識。所以今天我只是分享一些關於編碼本身的一些經驗。</p> <p>另外,本文主要分享如何寫代碼,並不是如何用Java寫代碼。所以文章中各種語言都有可能出現。</p> <h2 id="title-0-4-0">第五部分</h2> <p>在對問題建立模型的過程中,我們會遇到非常多不同層面的問題,所以我們需要很多領域的知識去解決這些問題。</p> <ul> <li>我們需要管理被操作的數據,因為數據與數據之前是相互有關聯的。將數據結構化,通常是編程的第一步。關於結構化數據的相關理論以及實踐,需要有一個專門的學科分支或者說課題去研究——<strong>數據結構</strong>。</li> <li>我們需要解決一個具體的問題,這個具體的問題如何一步步去解決,過程是怎么樣子的——<strong>算法</strong>。</li> <li>我們需要將解決方案進行自動化,並以代碼的形式進行交付——<strong>編程語言</strong>。</li> <li>如果將一個抽象的模型進行編碼實現,如何實現“這個功能”,如何實現“那個功能”——<strong>編程技巧</strong>。</li> <li>問題的規模大了,眾多代碼糅合在一起,連程序員自己都看不懂了!怎么來拆分、模塊化這些代碼——<strong>設計</strong>。</li> <li>代碼量已經到了一個人無法完成的地步了,需要團隊分工合作才能完成了——<strong>工程化</strong>。</li> <li>你寫的代碼我看不懂,沒法調用或者很難調用,我寫的代碼你也看不懂,或者很難看懂。還怎么愉快的玩耍——<strong>編碼風格/編碼規范</strong>。</li> <li>問題的規模繼續擴大,到了系統工程的規模了,之前學的套路已經不管用了!怎么來構建這個系統才能實現正確、安全、高性能、高可用——<strong>架構</strong>。</li> </ul> <p>然而這些也只是一個系統工程中的冰山一角!這是一個龐大的體系。也正是因為軟件開發需要考慮到的問題太多且團隊成員水品參差不齊,所以團隊開發中並不是每個程序員做的事情都是一樣的。每個人都有自己的角色、初級工程師、中級工程師、高級工程師、架構師、CTO。。。</p> <p>所以編程不僅僅只是堆砌代碼!</p> <p>說到這里,我想起來了一件事情——為啥業界普遍鄙視培訓出來半道出家的新人?人與人的區別是很大的!我見過培訓出來也很牛的。其實,說到底,被鄙視的並不是所有人。而是那些培訓了幾個月之后發現隨便找個工作也能拿“高薪”然后還自認為編程很簡單的新人。因為這種經歷給了他們一種錯覺——編程如此簡單,我培訓幾個月也會嘛!有點像剛學會開車的新司機,很囂張的對老司機說“開車很簡單嘛!你看我也會啊!”。語言和開發工具只是招式,這是外功。而編程思想、經驗是內功。這些內功並不是靠短短幾個月的培訓能夠掌握的,這一點有點像中國制造業和日本制造業的區別。動不動趕英超美可不好。。。</p> <p>編程並不簡單!這是一件很嚴肅的事情。不過今天,我沒有辦法介紹完所有的方面!或者說,到今天為止,我也並沒能掌握所有領域的知識。所以今天我只是分享一些關於編碼本身的一些經驗。</p> <p>另外,本文主要分享如何寫代碼,並不是如何用Java寫代碼。所以文章中各種語言都有可能出現。</p> </div> <div id="sideToolbar"> <ul> <li><a href="#title-0-0-0">第一部分</a></li> <li><a href="#title-0-1-0">第二部分</a></li> <li><a href="#title-0-2-0">第三部分</a></li> <li><a href="#title-0-3-0">第四部分</a></li> <li><a href="#title-0-4-0">第五部分</a></li> </ul> </div> </body>
3,關鍵的js代碼。
<script> $('#sideToolbar').sideToolbar(); </script>
這就好了,大功告成,下面是示例圖:
4,如何結合博客園的使用呢?
就是在你編輯博客的時候,在最上面導航欄有一個HTML源碼編輯,你手動設置一下ul li的src 路徑,與相應跳轉標簽id對應上就可以啦!
這個是可以結合博客園的博客去寫的,大家看我右側的附加導航就是用的side--toolbar,當然我自己定義了一些css,大家覺得有用就 頂 一下呦~。