首頁>Club>
最近不管學資料庫還是學java都會聽到底層怎麼怎麼樣,但這底層到底說的是什麼?
250
回覆列表
  • 1 # 碼能君

    不是程式設計師,說一下拙見,一套程式,就像是一個房子一棟大樓,它能實現很多功能,就像房子不同的房間有不同的用處一樣,房子要蓋起來,在結構上就需要有基礎,柱樑板牆等構件,材料上需要有鋼筋混凝土等建築材料,而程式設計師所說的底層就是一般人看不到的那部分,比如一個房間,使用者只看到它是一個廁所,有馬桶有水管,而設計師看到的,它上有頂下有板,四周有牆,牆上有門窗,地上有防水等等才能組建成一個合格的衛生間。或者說整棟樓的底層設計,就是基礎要牢固,柱子要粗等等背後的東西。底層邏輯錯誤就像衛生間沒做防水,大樓沒做地基一樣,表面上可能看不出來,使用的時候就會各種bug了

  • 2 # TonyDeng

    底層是相對的,以當前的技術為參照點而言。

    比如資料庫,現在普遍使用查詢式語言SQL,這是包裝過的高層語法,隱藏了底層技術細節,對具體不同的資料庫系統,雖然寫出來的SQL語句是一樣的,但它到底是怎麼實現的,其實各不相同,各有各的最佳化技術,甚至資料儲存方式也會不同,這就是相對於SQL的底層。高階的程式設計師或技術員、架構師,都應瞭解具體系統的這種底層,那是指導你如何設計資料庫結構和最佳化、使用的,不同系統效率有差異、各有優勢劣勢,也在底層不同上。其實,就算是正則表示式,也是有不同的語法解釋和適配法則,具體語言使用哪一種是不一定相同的,不同的法則(演算法)效率和結果甚至不一樣,這也是底層。

    底層並不一定是到彙編或機器硬體級別,對C而言是,但對Java之類就不是,不過,瞭解一下也是好的,但不需過分。

  • 3 # 北斗神談

    一般程式設計師所說的底層,其實沒有那麼底,所謂的底層就是在開發這款程式的時候,用到的底層框架,一般都是前輩們研究好的常效能優越開發高效的一套程式碼或第三方程式碼庫,開發人員只需要透過一些簡單的程式碼,呼叫這些底層寫好的程式碼方法就可以實現比較複雜的功能,並且能使程式碼的可讀性,延展性,穩定性都得到一個很好的貫穿,所以作為一個開發人員可定在未來的工作中要熟練使用一些常用底層框架,第三方框架來武裝自己,針對不同的需求和具體專案來選擇合適的底層程式碼框架來實現,底層程式碼的優良決定了頂層應用的好壞,所以還是挺重要的。

  • 4 # Kami575

    底層是相對的,可以底層到一個virtual machine的compiler,也可以底層到物理硬體的instruction code,還可以底層到register bits,甚至可以底層到transistor的trigger voltage...

    底層結構決定上層建築,底層顧名思義就是你執行程式的基礎。首先電腦得通電!!!

  • 5 # 小小程式設計師玲兒

    百戰程式設計師IT問題專業解答

    底層是相對的,以當前的技術為參照點而言。

    比如資料庫,現在普遍使用查詢式語言SQL,這是包裝過的高層語法,隱藏了底層技術細節,對具體不同的資料庫系統,雖然寫出來的SQL語句是一樣的,但它到底是怎麼實現的,其實各不相同,各有各的最佳化技術,甚至資料儲存方式也會不同,這就是相對於SQL的底層。高階的程式設計師或技術員、架構師,都應瞭解具體系統的這種底層,那是指導你如何設計資料庫結構和最佳化、使用的,不同系統效率有差異、各有優勢劣勢,也在底層不同上。其實,就算是正則表示式,也是有不同的語法解釋和適配法則,具體語言使用哪一種是不一定相同的,不同的法則(演算法)效率和結果甚至不一樣,這也是底層。

    底層並不一定是到彙編或機器硬體級別,對C而言是,但對Java之類就不是,不過,瞭解一下也是好的,但不需過分。

  • 6 # 飛天老師

    我們現在開發軟體的時候,有多種庫或者說是元件可引用,這樣就會提高軟體開發的效率,當然也會降低開發的難度。

    所謂的“底層開發”,一般指的是“原生開發”,也就是不用或者少用別人大量封裝的程式碼庫來進行的軟體開發!

    比如對於WINDOWS應用程式的開發來說,用Visual C++或者C#之類的進行開發,它們就已經對系統的具體實現,進行了大量的封裝,對於開發者來說,是透明的,不知道它的具體執行過程是怎麼樣的。

    但如果使用WINDOWS系統提供的原始API進行這樣的開發,那你就要掌握系統的具體執行過程,要知道它的原理,這樣才能進行軟體的開發。而這是提升一個人系統開發能力的最佳途徑!

    所以,作為專業的軟體開發人員,應該從所謂的“底層”去了解系統是如何執行的,這樣,我們在進行軟體開發的時候,就可以利用起來,對程式碼進行改進、最佳化,提高軟體的執行效率與健壯性。而不是僅僅是能實現某一項具體功能,而不用去管軟體的執行效率等問題。

    當我們熟練的掌握了這些“底層”的原理以後,我們在軟體開發過程中,就會更加的得心應手,只有這樣,開發出來的軟體,才更健壯,更具可維護性!

  • 7 # 前排看劇

    相信大家都聽說過搬磚這個詞,中國大部分程式設計師就是在做這種事。可能從這個專案搬一些程式碼到另一個專案,或者從百度部落格搬一些分享內容到專案,又或者是在github複製貼上一些需要的程式碼段。

    至於底層,我這裡就舉例說明一下。比如說學java,程式設計師計算一個1+1的運算,也是按規則寫入1+1得到結果,至於怎麼java語言怎麼拿到這個輸入的值並計算得出結果。這就是底層該做的事。

    例子二,java有很多為了提高開發效率而編寫的框架,比如spring。我們運用框架就不需要在自己去寫連線資料庫的操作,只需要把資料庫賬號密碼連結配到對應的檔案即可,而不需要考慮框架底層怎麼去連線資料庫。

    結合上面兩個例子,都提到了底層的字眼。我們很容易總結,別人封裝好的程式程式碼,並且我們可以透過介面呼叫,就可以稱之為底層。

  • 8 # huzibbs

    程式設計師常說的底層技術,基本上是指的某個程式語言或者某框架的原生語言的實現方法,按道理來說越接近原生的方式,執行效率越高,當然也得看技術實現的方式到不到位。

  • 9 # 夕陽雨晴

    程式設計師所說的底層是一個很魔幻的概念,那些年,不瞭解的,但是會用到的一些未知的技術項,都習慣以“底層”來命名。隨著在 Java 程式設計師的路上越走越遠,踩過坑的越來越多,才對“底層”有一點兒較為模糊的概念,簡單的說一說,姑且說之,姑妄聽之,娛樂為主。

    剛參加工作時,使用 Spring MVC + Dubbo 的技術棧,經常對一個應用進行包劃分,以dao、service、web等模組來命名,那時對我們來說,dao層、service層相對於web就是底層,web只要獲取 service 層或 dao 層拿到資料,他不會在意你使用 mybatis 或者 hibernate 來進行資料查詢,哪怕你直接使用 jdbcTemplate 也得行,前提是需要處理好 sql 注入的問題,使用 jdbcTemplate 的字串拼接的 sql ,很容易導致 sql注入,需要注意。

    而無意中接觸到 Tomcat 的底層原理解析,從原始碼角度解析 Tomcat,講解TCP、Http、Socket、Tomcat之間的關係,Engine---->Host---->Context---->Wrap---->Servlet之間的組織結構,可謂乾貨滿滿,但是真心沒有消化多少。記得最清楚的是關於TCP和UDP協議的底層描述。Socket是Java中對通訊協議的封裝,其遮蔽的底層的TCP協議和UDP協議等,透過跟蹤 Socket 的原始碼,最終定位到 TCP協議和UDP協議的都是透過 java.net.DualStackPlainDatagramSocketImpl 中的本地方法(native)和作業系統互動的,而作業系統實現了相關的本地方法,並且不同的作業系統對相關的本地方法實現邏輯不同,但都可以完成通訊的功能。涉及到的本地方法如下:

    class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl

    {

    。。。。。。

    /* Native methods */

    private static native void initIDs();

    private static native int socketCreate(boolean v6Only);

    private static native void socketBind(int fd, InetAddress localAddress,

    int localport, boolean exclBind) throws SocketException;

    private static native void socketConnect(int fd, InetAddress address, int port)

    throws SocketException;

    private static native void socketDisconnect(int fd);

    private static native void socketClose(int fd);

    private static native int socketLocalPort(int fd) throws SocketException;

    private static native Object socketLocalAddress(int fd) throws SocketException;

    private static native int socketReceiveOrPeekData(int fd, DatagramPacket packet,

    int timeout, boolean connected, boolean peek) throws IOException;

    private static native void socketSend(int fd, byte[] data, int offset, int length,

    InetAddress address, int port, boolean connected) throws IOException;

    private static native void socketSetIntOption(int fd, int cmd,

    int optionValue) throws SocketException;

    private static native int socketGetIntOption(int fd, int cmd) throws SocketException;

    native int dataAvailable();

    }

    如上所述,相對於普通Web應用而言,Tomcat 是底層,而相對於Tomcat 而言,其底層的通訊能力是底層,即Socket是底層,而相對的那些本地方法(native)也是底層。如果再往底層跟,由於Linux是開源的,其TCP協議的三次握手等原始碼可以看到,其實現的tcp_connect(struct sock *sk)、tcp_send_synack(struct sock *sk)、tcp_send_ack(struct sock *sk,u32 rcv_nxt)d的三次握手過程就更是底層。

    底層是一個相對的概念,隨著你經歷的越多,會發現底層的範圍越廣,而對於Java技術棧的同學,JVM、中介軟體實現原理、各種框架如Netty、Spring等原始碼底層都是我們努力的方向。這些內容一般情況下很少接觸到,但是一旦遇到,就是我們脫穎而出的機會。

  • 10 # 龍道靈丨

    分層思想是程式設計領域中很重要的思想。

    以osi7層模型來說,最高是應用層。

    應用層協議,普通人只需要會用,不需要關注底層細節,不用知道到底怎麼樣訊息被傳到另一個人手機裡的。

    再往下是表示層和會話層,表示層可以理解資料格式,會話層負責建立和連線會話(不懂)

    這三層通常放一起,統稱應用層,也是有道理的,分的沒有那麼細緻,也是大部分程式設計師工作的環節,這一層使用的是其他人封裝好的底層API,通常可以不用太關注底層細節,但說要理解底層更好,其實指的就是懂得底層的工作原理,就是下面的傳輸層。

    再往下就是經典的協議,傳輸層,TCP和udp出場,資料怎麼拆解,打包,傳輸,用流還是用包,怎麼標記順序,這些都是這一層要解決的問題,大部分的程式不需要去最佳化協議,不需要在這一層裡工作,但是因為經常呼叫傳輸層的原因,如果完全不懂,就沒辦法解決和處理這一層出現的問題。

    那,再往下是什麼呢?網路層,ip協議。路由都沒有,怎麼運輸。

    網路層再往下是什麼呢?資料鏈路,通常和物理層在一起叫做網路介面。

    再牛逼的協議也得靠物理層扛著,到底是光纖還是無線網路,對使用微信的人來說,幾乎關係不大,對於在開發支付寶和微信的人來講,也幾乎關係不大,因為封裝太多層了,一個軟體工程師,發一個http請求的時候,大部分時間並不怎麼關心使用者的網路是什麼樣的。

    這是赤裸裸的技術實力,馬化騰是通訊出身好像,在這一點是阿里就差了不少,來往當年從來沒有這麼底層深入過,所以在網路不好的時候,懂底層的公司開發出來的應用,發訊息幾乎正常。

    那再往下,還有底層麼?當然有,比如光纖傳輸資料的原理是什麼?光是什麼?由什麼構成的?原子的內部,原子核之外是真空嗎,場又是個什麼東西?

    這是底層。

    為什麼說程式設計師知道底層更好?有底氣,大多數情況下,我們都不需要知道底層運作機制,活在一個別人提供的API裡,但實際上,底層世界並不穩固,IP協議和TCP協議並不完善,人類還不是上帝,就算是上帝也有很多物種不完善和BUG,比如平頭哥。

    再反問一句,是越底層越牛逼麼?越往上越沒技術含量麼?

    也不是。

    產品經理可以完全不懂交換機路由器,不影響他設計出來好用的應用層軟體。和產品經理相比,UI可能更不需要了解技術,但並不能認為使用ps的技術含量比懂報文流的技術差。

    大家分層是為了做好封裝和遮蔽,程式設計師知道底層,並不代表能做好架構,好多人大學靠死記硬背,知道了一些基本概念,並不代表他們在設計資料庫表的時候就比別人有優勢。

    這也是為什麼很多程式設計師科班出身,但未必比那些非科班的人崗位高薪資高專案和的緣故,也不是你面試的時候聽他扯了一堆滑動視窗,他就真的能搞定程式碼規範和釋出流程。

    但更不能說,你一個非科班的程式設計師會調幾個httpClient就天下無敵了。

    多學點底層,瞭解這個世界運作的機制,會讓你更通透。

    但站在更高的角度,完全遮蔽掉底層的資訊,能讓你的方向更明確。

    底層思維太重就會顯的於世事不融,站的太高又會顯的不接地氣。

    這就是程式設計師說的底層,清晰而清醒的活著。

    來自知乎

  • 11 # 美一天進步一點點

    作為一名老程式猿來說下:底層你簡單理解為為業務層實現而編寫的基礎程式碼或理解為程式猿編碼時依賴的程式程式碼,後者理解可能更感性。前端一般說底層可能有兩種理解,一是前端框架程式碼,另一是後端介面實現。業務程式猿說的底層也可能是框架程式碼或已經封裝的db程式碼。以上都是場景的程式猿場景。對於那種硬體,晶片,os,嵌入式,演算法,框架等的底層各有不同。簡而言之,理解為自編碼依賴的程式碼就是底層。

  • 12 # 繁星落石

    所謂的底層就是實現你所使用功能的程式碼,比如python底層是C,C底層是彙編等等。

    這個底層只是一個相對概念,看你的語境。

  • 13 # 惜水無情

    底層是一個相對的概念,程式一般都是一層一層的封裝,基礎庫,然後二次封裝,三次封裝,等等,越接近開始的那層,就越底層

  • 中秋節和大豐收的關聯?
  • 47.假如你是王莽,像霍光一樣去輔佐皇帝推新新政會怎樣?