程序员常说的底层是指什么?

百战程序员IT问题专业解答

底层是相对的,以当前的技术为参照点而言。

比如数据库,现在普遍使用查询式语言SQL,这是包装过的高层语法,隐藏了底层技术细节,对具体不同的数据库系统,虽然写出来的SQL语句是一样的,但它到底是怎么实现的,其实各不相同,各有各的优化技术,甚至数据储存方式也会不同,这就是相对于SQL的底层。高级的程序员或技术员、架构师,都应了解具体系统的这种底层,那是指导你如何设计数据库结构和优化、使用的,不同系统效率有差异、各有优势劣势,也在底层不同上。其实,就算是正则表达式,也是有不同的语法解释和适配法则,具体语言使用哪一种是不一定相同的,不同的法则(算法)效率和结果甚至不一样,这也是底层。

底层并不一定是到汇编或机器硬件级别,对C而言是,但对Java之类就不是,不过,了解一下也是好的,但不需过分。


一般程序员所说的底层,其实没有那么底,所谓的底层就是在开发这款程序的时候,用到的底层框架,一般都是前辈们研究好的常性能优越开发高效的一套代码或第三方代码库,开发人员只需要通过一些简单的代码,调用这些底层写好的代码方法就可以实现比较复杂的功能,并且能使代码的可读性,延展性,稳定性都得到一个很好的贯穿,所以作为一个开发人员可定在未来的工作中要熟练使用一些常用底层框架,第三方框架来武装自己,针对不同的需求和具体项目来选择合适的底层代码框架来实现,底层代码的优良决定了顶层应用的好坏,所以还是挺重要的。


原生语言,没有使用别人造好的轮子


相信大家都听说过搬砖这个词,中国大部分程序员就是在做这种事。可能从这个项目搬一些代码到另一个项目,或者从百度博客搬一些分享内容到项目,又或者是在github复制粘贴一些需要的代码段。

至于底层,我这里就举例说明一下。比如说学java,程序员计算一个1+1的运算,也是按规则写入1+1得到结果,至于怎么java语言怎么拿到这个输入的值并计算得出结果。这就是底层该做的事。

例子二,java有很多为了提高开发效率而编写的框架,比如spring。我们运用框架就不需要在自己去写连接数据库的操作,只需要把数据库账号密码链接配到对应的文件即可,而不需要考虑框架底层怎么去连接数据库。

结合上面两个例子,都提到了底层的字眼。我们很容易总结,别人封装好的程序代码,并且我们可以通过接口调用,就可以称之为底层。


底层是相对的,可以底层到一个virtualmachine的compiler,也可以底层到物理硬件的instructioncode,还可以底层到registerbits,甚至可以底层到transistor的triggervoltage...

底层结构决定上层建筑,底层顾名思义就是你运行程序的基础。首先电脑得通电!!!


程序员常说的底层技术,基本上是指的某个编程语言或者某框架的原生语言的实现方法,按道理来说越接近原生的方式,运行效率越高,当然也得看技术实现的方式到不到位。


不是程序员,说一下拙见,一套程序,就像是一个房子一栋大楼,它能实现很多功能,就像房子不同的房间有不同的用处一样,房子要盖起来,在结构上就需要有基础,柱梁板墙等构件,材料上需要有钢筋混凝土等建筑材料,而程序员所说的底层就是一般人看不到的那部分,比如一个房间,使用者只看到它是一个厕所,有马桶有水管,而设计师看到的,它上有顶下有板,四周有墙,墙上有门窗,地上有防水等等才能组建成一个合格的卫生间。或者说整栋楼的底层设计,就是基础要牢固,柱子要粗等等背后的东西。底层逻辑错误就像卫生间没做防水,大楼没做地基一样,表面上可能看不出来,使用的时候就会各种bug了


程序员所说的底层是一个很魔幻的概念,那些年,不了解的,但是会用到的一些未知的技术项,都习惯以“底层”来命名。随着在Java程序员的路上越走越远,踩过坑的越来越多,才对“底层”有一点儿较为模糊的概念,简单的说一说,姑且说之,姑妄听之,娱乐为主。

刚参加工作时,使用SpringMVC+Dubbo的技术栈,经常对一个应用进行包划分,以dao、service、web等模块来命名,那时对我们来说,dao层、service层相对于web就是底层,web只要获取service层或dao层拿到数据,他不会在意你使用mybatis或者hibernate来进行数据查询,哪怕你直接使用jdbcTplate也得行,前提是需要处理好sql注入的问题,使用jdbcTplate的字符串拼接的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)和操作系统交互的,而操作系统实现了相关的本地方法,并且不同的操作系统对相关的本地方法实现逻辑不同,但都可以完成通信的功能。涉及到的本地方法如下:

classDualStackPlainDatagramSocketImplextendsAbstractPlainDatagramSocketImpl

如上所述,相对于普通Web应用而言,Tomcat是底层,而相对于Tomcat而言,其底层的通信能力是底层,即Socket是底层,而相对的那些本地方法(native)也是底层。如果再往底层跟,由于Linux是开源的,其TCP协议的三次握手等源码可以看到,其实现的tcp_connect(structsock*sk)、tcp_send_synack(structsock*sk)、tcp_send_ack(structsock*sk,u32rcv_nxt)d的三次握手过程就更是底层。

底层是一个相对的概念,随着你经历的越多,会发现底层的范围越广,而对于Java技术栈的同学,JVM、中间件实现原理、各种框架如Netty、Spring等源码底层都是我们努力的方向。这些内容一般情况下很少接触到,但是一旦遇到,就是我们脱颖而出的机会。

作者:夕阳雨晴,欢迎关注我的号:偶尔美文,主流Java,为你讲述不一样的码农生活。


我们现在开发软件的时候,有多种库或者说是组件可引用,这样就会提高软件开发的效率,当然也会降低开发的难度。

所谓的“底层开发”,一般指的是“原生开发”,也就是不用或者少用别人大量封装的代码库来进行的软件开发!

比如对于WINDOWS应用程序的开发来说,用VisualC++或者C#之类的进行开发,它们就已经对系统的具体实现,进行了大量的封装,对于开发者来说,是透明的,不知道它的具体执行过程是怎么样的。

但如果使用WINDOWS系统提供的原始API进行这样的开发,那你就要掌握系统的具体执行过程,要知道它的原理,这样才能进行软件的开发。而这是提升一个人系统开发能力的最佳途径!

所以,作为专业的软件开发人员,应该从所谓的“底层”去了解系统是如何运行的,这样,我们在进行软件开发的时候,就可以利用起来,对代码进行改进、优化,提高软件的运行效率与健壮性。而不是仅仅是能实现某一项具体功能,而不用去管软件的执行效率等问题。

当我们熟练的掌握了这些“底层”的原理以后,我们在软件开发过程中,就会更加的得心应手,只有这样,开发出来的软件,才更健壮,更具可维护性!

如果你觉得我的回答对你有帮助,请点个赞,谢谢!


原始地址:/changshi/564.html