精华内容
下载资源
问答
  • 目录如下,请问该怎么部署呢?对PHP不是很熟悉,公司又没有这方面的,求大神指导! 遇到第一个问题就是数据库不知道怎么导入,也没有脚本! [img=...
  • 我直接复制到tomcat安装目录下的webapps中,能打开index.jsp,但是有部分链接打不开,报404错误,是xml文件需要更改么,求大神解答
  • 前百度工程师,曾负责百度前端集成解决方案的核心设计与开发工作。...在我的印象中,facebook是这个领域的鼻祖,有兴趣、有梯子的同学可以去看看facebook的页面源代码,体会一下什么叫工程化。接下来,我...

    前百度工程师,曾负责百度 前端集成解决方案 的核心设计与开发工作。我现在称这个领域为【前端工程】。没错,这是我最爱唠叨的问题域。

    这是一个非常有趣的 非主流前端领域,这个领域要探索的是如何用工程手段解决前端开发和部署优化的综合问题,入行到现在一直在学习和实践中。

    在我的印象中,facebook是这个领域的鼻祖,有兴趣、有梯子的同学可以去看看facebook的页面源代码,体会一下什么叫工程化。

    接下来,我想从原理展开讲述,多图,较长,希望能有耐心看完。


    ---------------------------- 我是一条分割线 ----------------------------



    让我们返璞归真,从原始的前端开发讲起。上图是一个“可爱”的index.html页面和它的样式文件a.css,用文本编辑器写代码,无需编译,本地预览,确认OK,丢到服务器,等待用户访问。前端就是这么简单,好好玩啊,门槛好低啊,分分钟学会有木有!



    然后我们访问页面,看到效果,再查看一下网络请求,200!不错,太™完美了!那么,研发完成。。。。了么?

    等等,这还没完呢!对于大公司来说,那些变态的访问量和性能指标,将会让前端一点也不“好玩”。

    看看那个a.css的请求吧,如果每次用户访问页面都要加载,是不是很影响性能,很浪费带宽啊,我们希望最好这样:


    利用304,让浏览器使用本地缓存。但,这样也就够了吗?不成!304叫协商缓存,这玩意还是要和服务器通信一次,我们的优化级别是变态级,所以必须彻底灭掉这个请求,变成这样:


    强制浏览器使用本地缓存(cache-control/expires),不要和服务器通信。好了,请求方面的优化已经达到变态级别,那问题来了:你都不让浏览器发资源请求了,这缓存咋更新?

    很好,相信有人想到了办法:通过更新页面中引用的资源路径,让浏览器主动放弃缓存,加载新资源。好像这样:


    下次上线,把链接地址改成新的版本,就更新资源了不是。OK,问题解决了么?!当然没有!大公司的变态又来了,思考这种情况:


    页面引用了3个css,而某次上线只改了其中的a.css,如果所有链接都更新版本,就会导致b.css,c.css的缓存也失效,那岂不是又有浪费了?!

    重新开启变态模式,我们不难发现,要解决这种问题,必须让url的修改与文件内容关联,也就是说,只有文件内容变化,才会导致相应url的变更,从而实现文件级别的精确缓存控制。

    什么东西与文件内容相关呢?我们会很自然的联想到利用 数据摘要要算法 对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据了。好了,我们把url改成带摘要信息的:


    这回再有文件修改,就只更新那个文件对应的url了,想到这里貌似很完美了。你觉得这就够了么?大公司告诉你:图样图森破!

    唉~~~~,让我喘口气

    现代互联网企业,为了进一步提升网站性能,会把静态资源和动态网页分集群部署,静态资源会被部署到CDN节点上,网页中引用的资源也会变成对应的部署路径:


    好了,当我要更新静态资源的时候,同时也会更新html中的引用吧,就好像这样:


    这次发布,同时改了页面结构和样式,也更新了静态资源对应的url地址,现在要发布代码上线,亲爱的前端研发同学,你来告诉我,咱们是先上线页面,还是先上线静态资源?

    1. 先部署页面,再部署资源:在二者部署的时间间隔内,如果有用户访问页面,就会在新的页面结构中加载旧的资源,并且把这个旧版本的资源当做新版本缓存起来,其结果就是:用户访问到了一个样式错乱的页面,除非手动刷新,否则在资源缓存过期之前,页面会一直执行错误。
    2. 先部署资源,再部署页面:在部署时间间隔之内,有旧版本资源本地缓存的用户访问网站,由于请求的页面是旧版本的,资源引用没有改变,浏览器将直接使用本地缓存,这种情况下页面展现正常;但没有本地缓存或者缓存过期的用户访问网站,就会出现旧版本页面加载新版本资源的情况,导致页面执行错误,但当页面完成部署,这部分用户再次访问页面又会恢复正常了。

    好的,上面一坨分析想说的就是:先部署谁都不成!都会导致部署过程中发生页面错乱的问题。所以,访问量不大的项目,可以让研发同学苦逼一把,等到半夜偷偷上线,先上静态资源,再部署页面,看起来问题少一些。

    但是,大公司超变态,没有这样的“绝对低峰期”,只有“相对低峰期”。So,为了稳定的服务,还得继续追求极致啊!

    这个奇葩问题,起源于资源的 覆盖式发布,用 待发布资源 覆盖 已发布资源,就有这种问题。解决它也好办,就是实现 非覆盖式发布


    看上图,用文件的摘要信息来对资源文件进行重命名,把摘要信息放到资源文件发布路径中,这样,内容有修改的资源就变成了一个新的文件发布到线上,不会覆盖已有的资源文件。上线过程中,先全量部署静态资源,再灰度部署页面,整个问题就比较完美的解决了。

    所以,大公司的静态资源优化方案,基本上要实现这么几个东西:

    1. 配置超长时间的本地缓存 —— 节省带宽,提高性能
    2. 采用内容摘要作为缓存更新依据 —— 精确的缓存控制
    3. 静态资源CDN部署 —— 优化网络请求
    4. 更资源发布路径实现非覆盖式发布 —— 平滑升级


    全套做下来,就是相对比较完整的静态资源缓存控制方案了,而且,还要注意的是,静态资源的缓存控制要求在前端所有静态资源加载的位置都要做这样的处理。是的,所有!什么js、css自不必说,还要包括js、css文件中引用的资源路径,由于涉及到摘要信息,引用资源的摘要信息也会引起引用文件本身的内容改变,从而形成级联的摘要变化,大概示意图就是:


    好了,目前我们快速的学习了一下前端工程中关于静态资源缓存要面临的优化和部署问题,新的问题又来了:这™让工程师怎么写码啊!!!

    要解释优化与工程的结合处理思路,又会扯出一堆有关模块化开发、资源加载、请求合并、前端框架等等的工程问题,以上只是开了个头,解决方案才是精髓,但要说的太多太多,有空再慢慢展开吧。或者大家可以去我的blog看其中的一些拆解:fouber/blog · GitHub

    总之,前端性能优化绝逼是一个工程问题!


    以上不是我YY的,可以观察 百度 或者 facebook 的页面以及静态资源源代码,查看它们的资源引用路径处理,以及网络请中静态资源的缓存控制部分。再次赞叹facebook的前端工程建设水平,跪舔了。

    建议前端工程师多多关注前端工程领域,也许有人会觉得自己的产品很小,不用这么变态,但很有可能说不定某天你就需要做出这样的改变了。而且,如果我们能把事情做得更极致,为什么不去做呢?

    另外,也不要觉得这些是运维或者后端工程师要解决的问题。如果由其他角色来解决,大家总是把自己不关心的问题丢给别人,那么前端工程师的开发过程将受到极大的限制,这种情况甚至在某些大公司都不少见!

    妈妈,我再也不玩前端了。。。。5555



    ========================[ 10.29更新 ]========================
    这里更新一下:

    在评论中, @陈钢@fleuria @林翔 提到了rails,刚刚去看了一下,确实是完成了以上所说的优化细节,对整个静态资源的管理上的思考于本答案描述的一致。很遗憾我直到今天(2014-10-29)才了解到rails中的assets pipeline。这里向以上3位同学道歉,原谅我的无知。

    不过整篇回答没有讲解到具体的解决方案实现思路,只是介绍了前端在工程化方向的思考,答案本身是可用的,了解rails的人也可以把此答案当做是对rails中assets pipeline设计原理的分析。

    rails通过把静态资源变成erb模板文件,然后加入<%= asset_path 'image.png' %>,上线前预编译完成处理,不得不承认,fis的实现思路跟这个几乎完全一样,但我们当初确实不知道有rails的这套方案存在。

    相关资料:英文版:The Asset Pipeline,中文版:Asset Pipeline
    ========================[ 10.31更新 ]========================
    用 F.I.S 包装了一个小工具,完整实现整个回答所说的最佳部署方案,并提供了源码对照,可以感受一下项目源码和部署代码的对照。
    源码项目:fouber/static-resource-digest-project · GitHub
    部署项目:fouber/static-resource-digest-project-release · GitHub
    部署项目可以理解为线上发布后的结果,可以在部署项目里查看所有资源引用的md5化处理。

    这个示例也可以用于和assets pipeline做比较。fis没有assets的目录规范约束,而且可以以独立工具的方式组合各种前端开发语言(coffee、less、sass/scss、stylus、markdown、jade、ejs、handlebars等等你能想到的),并与其他后端开发语言结合。

    assets pipeline的设计思想值得独立成工具用于前端工程,fis就当做这样的一个选择吧。

     

                                                                                                                                                                                                                                                             转自:http://www.zhihu.com/question/20790576

    转载于:https://www.cnblogs.com/yuqlblog/p/4761038.html

    展开全文
  • 如何阅读源代码

    2019-07-15 11:29:36
    从我自身从业经验而来,无论如何变化,都会抽象归结到这主要的两类中,一类是自低向上分析,能够根据软件源代码架构推演出系统架构、部署架构、应用架构、产品架构、业务架构等向架构级靠拢的推演能力。另一类是自顶...

    工程师阅读源代码的本质不在于学会这个软件的制作过程,而是让我们在阅读的过程中掌握无师自通的能力建设上。
    我是怎么想的?
    在这里插入图片描述
    从我自身从业经验而来,无论如何变化,都会抽象归结到这主要的两类中,一类是自低向上分析,能够根据软件源代码架构推演出系统架构、部署架构、应用架构、产品架构、业务架构等向架构级靠拢的推演能力。另一类是自顶向下分析,能够根据软件相关的架构图推演出代码架构,设计模式,代码框架等向代码级靠拢的推演能力。而在这些推演过程中,你会不断的深化那些计算机的基础原理性的知识,比如说汇编、计算机原理、数据结构、操作系统。同时会不断补充业务领域的知识,沉淀行业经验。
    标准分析体系vs分支方法的实践?
    每个工程师心中其实都有自己一套关于阅读源代码的方法论,只是或多或少或全或缺,不够成标准化的分析体系,自然也无法利用标准化分析方法论在合适的场景中裁剪它去解决某一个源码阅读问题。如果一开始我们有一个体系化的标准方法,但是我们很难去自顶向下推演出体系化的方法论是怎么过来的,各个应用场景是怎样的,又将是一本厚厚的书籍。

    我有哪些思考?
    我们耗费大量的时间无法从体系化的方法自顶向下深入实践与理解,但我们可以做的是通过螺旋式不断的吸收他人的经验与自己的经历实现,不断自低向上去验证体系化的方法论,不断在自己思维里形成一个树木分支,直到有一天豁然开朗,分支关联合并成为一颗完整的大树。
    引入一个分支实践
    分享一个自己的方法论,或许能给你带来一些参考或思考。

    如何阅读源代码
    很多人问过我,如何读代码。因为我在外企里工作的时间较长,所以,我经常接手-些国外团队写的代码。我发现,虽然老外写的代码比国人好一点儿(有 Code Revievw),但依然有文档缺失、代码注释不清、代码风格混乱等些问题, 这些都是阅读代码的障碍。这里,我把我的一些阅读源代码的经验分享给你,希望对你有用。
    首先,在阅读代码之前,我建议你需要有下面的这些前提再去阅读代码,这样你读起代码来会很顺畅
    1.基础知识。相关的语言和基础技术的知识。
    2.软件功能。你先要知道这个软件完成的是什么样的功能,有哪些特性,哪些配置项。你先要读一遍用户手册,然后让软件跑起来,自己先用一下感受一下。
    3.相关文档。读-一下相关的内部文档, Readme 也好,Release Notes也好,Design 也好,
    Wiki也好,这些文档可以让你明白整个软件的方方面面。如果你的软件没有文档,那么,你只能指望这个软件的原作者还在,而且他还乐于交流。
    4.代码的组织结构。也就是代码目录中每个目录是什么样的功能,每个文档是干什么的。如果你
    要读的程序是在某种标准的框架下组织的,比如: Java的Spring框架,那么恭喜你,这些代码不难读了。
    接下来,你要了解这个软件的代码是由哪些部分构成的,我在这里给你一个列表, 供你参考。
    1.接口抽象定义。任何代码都会有很多接口或抽象定义,其描述了代码需要处理的数据结构或者业务实体,以及它们之间的关系,理清楚这些关系是非常重要的。
    2.模块粘合层。我们的代码有很多都是用来粘合代码的,比如中间件(middleware) 、Promises模式、回调(Callback) 、 代理委托、依赖注入等。这些代码模块间的粘合技术是非常重要的,因为它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。
    3.业务流程。这是代码运行的过程。一开始, 我们不要进入细节,但需要在高层搞清楚整个业务的流程是什么样的,在这个流程中,数据是怎么被传递和处理的。一般来说, 我们需要画程序流程图或者时序处理图。
    4.具体实现。了解上述的三个方面的内容,相信你对整个代码的框架和逻辑已经有了总体认识。
    这个时候,你就可以深入细节,开始阅读具体实现的代码了。对于代码的具体实现,-般来说,你需要知道下面一些事实,这样有助于你在阅读代码时找到重点。
    代码逻辑。代码有两种逻辑,一种是业务逻辑,这种逻辑是真正的业务处理逻辑;另一种是控制逻辑,这种逻辑只是用控制程序流转的,不是业务逻辑。比如: flag 之类的控制变量,多线程处理的代码,异步控制的代码,远程通讯的代码,对象序列化反序列化的代码等。这两种逻辑你要分开,很多代码之所以混乱就是把这两种逻辑混在一起了(详情参看《编程范式游记》)。
    出错处理。根据2: 8原则,20%的代码是正常的逻辑, 80%的代码是在处理各种错误,所以,你在读代码的时候,完全可以把处理错误的代码全部删除掉,这样就会留下比较干净和简单的正常逻辑的代码。排除干扰因素,可以更高效地读代码。
    数据处理。只要你认真观察,就会发现,我们好多代码就是在那里倒腾数据。比如DAO、DTO,比如JSON、XML, 这些代码冗长无聊,不是主要逻辑,可以不理。
    重要的算法。我们的代码里会有很多重要的算法,我说的并不一-定 是什么排序或是搜索算法,可能会是一些其它的核心算法, 比如-些索引表的算法,全局唯一ID 的算法,信息推荐的算法、统计算法、通读算法(如 Gossip)等。这些比较核心的算法可能会非常难读,但它们往往是最有技术含量的部分。底层交互。有一些代码是和底层系统的交互,一般来说是 和操作系统或是JVM的交互。
    因此,读这些代码通常需要一定的底层技术知识, 不然,很难读懂。
    5.运行时调试。很多时候,代码只有运行起来了,才能知道具体发生了什么事,所以,我们让代码运行进来,然后用日志也好,debug 设置断点跟踪也好。实际看一下代码的运行过程, 是了解代码的一种很好的方式。
    !](https://img-blog.csdnimg.cn/2019071511255128.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1pZRFgxODk4NDAwMzgwNg==,size_16,color_FFFFFF,t_70)
    总结一下,阅读代码的方法如下。
    如何阅读源代码
    很多人问过我,如何读代码。因为我在外企里工作的时间较长,所以,我经常接手一些国外团队写的代码。我发现,虽然老外写的代码比国人好一点儿(有 Code Revievw),但依然有文档缺失、代码注释不清、代码风格混乱等些问题, 这些都是阅读代码的障碍。这里,我把我的一些阅读源代码的经验分享给你,希望对你有用。
    首先,在阅读代码之前,我建议你需要有下面的这些前提再去阅读代码,这样你读起代码来会很顺畅
    1.基础知识。相关的语言和基础技术的知识。
    2.软件功能。你先要知道这个软件完成的是什么样的功能,有哪些特性,哪些配置项。你先要读一遍用户手册,然后让软件跑起来,自己先用一下感受一下。
    3.相关文档。读一下相关的内部文档, Readme 也好,Release Notes也好,Design 也好,Wiki也好,这些文档可以让你明白整个软件的方方面面。如果你的软件没有文档,那么,你只能指望这个软件的原作者还在,而且他还乐于交流。
    4.代码的组织结构。也就是代码目录中每个目录是什么样的功能,每个文档是干什么的。如果你要读的程序是在某种标准的框架下组织的,比如: Java的Spring框架,那么恭喜你,这些代码不难读了。
    接下来,你要了解这个软件的代码是由哪些部分构成的,我在这里给你一个列表, 供你参考。
    1.接口抽象定义。任何代码都会有很多接口或抽象定义,其描述了代码需要处理的数据结构或者业务实体,以及它们之间的关系,理清楚这些关系是非常重要的。
    2.模块粘合层。我们的代码有很多都是用来粘合代码的,比如中间件(middleware) 、Promises模式、回调(Callback) 、 代理委托、依赖注入等。这些代码模块间的粘合技术是非常重要的,因为它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。
    3.业务流程。这是代码运行的过程。一开始,我们不要进入细节,但需要在高层搞清楚整个业务的流程是什么样的,在这个流程中,数据是怎么被传递和处理的。一般来说, 我们需要画程序流程图或者时序处理图。
    4.具体实现。了解上述的三个方面的内容,相信你对整个代码的框架和逻辑已经有了总体认识。
    这个时候,你就可以深入细节,开始阅读具体实现的代码了。对于代码的具体实现,-般来说,你需要知道下面一些事实,这样有助于你在阅读代码时找到重点。
    **代码逻辑。**代码有两种逻辑,一种是业务逻辑,这种逻辑是真正的业务处理逻辑;另一种是控制逻辑,这种逻辑只是用控制程序流转的,不是业务逻辑。比如: flag 之类的控制变量,多线程处理的代码,异步控制的代码,远程通讯的代码,对象序列化反序列化的代码等。这两种逻辑你要分开,很多代码之所以混乱就是把这两种逻辑混在-起了(详情参看《编程范式游记》)。
    **出错处理。**根据2: 8原则,20%的代码是正常的逻辑, 80%的代码是在处理各种错误,所以,你在读代码的时候,完全可以把处理错误的代码全部删除掉,这样就会留下比较干净和简单的正常逻辑的代码。排除干扰因素,可以更高效地读代码。
    数据处理。只要你认真观察,就会发现,我们好多代码就是在那里倒腾数据。比如DAO、DTO,比如JSON、XML, 这些代码冗长无聊,不是主要逻辑,可以不理。
    重要的算法。一般来说,我们的代码里会有很多重要的算法,我说的并不一定 是什么排序或是搜索算法,可能会是一些其它的核心算法, 比如-些索引表的算法,全局唯一ID 的算法,信息推荐的算法、统计算法、通读算法(如 Gossip)等。这些比较核心的算法可能会非常难读,但它们往往是最有技术含量的部分。
    底层交互。有一些代码是和底层系统的交互,一般来说是 和操作系统或是JVM的交互。
    因此,读这些代码通常需要一定的底层技术知识, 不然,很难读懂。
    5.运行时调试。很多时候,代码只有运行起来了,才能知道具体发生了什么事,所以,我们让代码运行进来,然后用日志也好,debug 设置断点跟踪也好。实际看一下代码的运行过程, 是了解代码的一种很好的方式。
    总结一下,阅读代码的方法如下。
    ●一般采用自顶向下,从总休到细节的“剥洋葱皮”的读法。
    ●画图是必要的,程序流程图,调用时序图,模块组织图…
    ●代码逻辑归一下类,排除杂音,主要逻辑才会更清楚。
    ●debug 跟踪一下代码是 了解代码在执行中发生了什么的最好方式。
    在这里插入图片描述

    展开全文
  • DOCKER 环境部署手册 DOCKER 环境部署手册 Docker Docker-compse Harbor Rancher 安装 DockerDocker-compseHarborRancher 安装 Docker Docker 一简介 一简介 Docker 是 ...Container 容器引擎源代码 Docker 是 Dock
  • 你用VC++开发了输入法,但是不懂怎么显示出来,让系统调用。切换不出来。怎么部署你的输入法。告诉你把,要注册。这个就是注册某个输入法的源代码,你修改一下,改成你输入法文件的名字和表码,搞定
  • 一款类似网易红彩类的app源代码分享,里面有专家入驻功能,集合了微信公众号赞赏功能,专家免费发布推荐功能,微博粉丝造大神等功能,整套安卓苹果管理后台源代码可供下载,如有不熟悉怎么部署的也可以加我,非常...
  • 作为一个典型的分布式项目,Kubernetes 的部署一直以来都是挡在初学者前面的一只“拦路虎”。尤其是在 Kubernetes 项目发布初期,它的部署完全要依靠一堆由社区维护的脚本。 其实,Kubernetes 作为一个 Golang 项目...

    前言

    作为一个典型的分布式项目,Kubernetes 的部署一直以来都是挡在初学者前面的一只“拦路虎”。尤其是在 Kubernetes 项目发布初期,它的部署完全要依靠一堆由社区维护的脚本。

    其实,Kubernetes 作为一个 Golang 项目,已经免去了很多类似于 Python 项目要安装语言级别依赖的麻烦。但是,除了将各个组件编译成二进制文件外,用户还要负责为这些二进制文件编写对应的配置文件、配置自启动脚本,以及为 kube-apiserver 配置授权文件等等诸多运维工作。

    这几年,在跟朋友探讨 k8s 落地时,也有一些问题被反反复复地提及,比如:

    • 为什么容器里只能跑“一个进程”?
    • 原先一直用的某个 JVM 参数,在容器里就不好使了?
    • 为什么 kubernetes 不能固定 IP 地址?容器网络连不通,该如何 debug?
    • k8s 中 statefulSet 和 operator 到底什么区别?pv 和 pvc 又该怎么用?

    在这里分享我偶然间得到的一份文档,该文档将K8S分为理论和实践两个部分进行讲解,双管齐下,事半功倍,让我们来看看文档内容

    ActiveMQ

    我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新一次。

    它的单机吞吐量是万级,一些小的项目已经够用了,但对于高并发的互联网项目完全不够看。

    在高可用上,使用的主从架构的实现。

    在消息可靠性上,有较低的概率会丢失数据。

    综合以上,其实这个产品基本可以弃用掉了,我们完全可以使用RabbitMQ来代替它。

    RabbitMQ

    rabbitMQ出现后,国内大部分公司都从activeMQ切换到了rabbitMQ,基本代替了activeMQ的位置。它的社区还是很活跃的。

    它的单机吞吐量也是万级,对于需要支持特别高的并发的情况,它是无法担当重任的。

    在高可用上,它使用的是镜像集群模式,可以保证高可用。

    在消息可靠性上,**它是可以保证数据不丢失的,**这也是它的一大优点。

    同时它也支持一些消息中间件的高级功能,如:消息重试、死信队列等(后续文章会讲到)。

    但是,它的开发语言是erlang,国内很少有人精通erlang,所以导致无法阅读源码。

    对于大多数中小型公司,不需要面对技术上挑战的情况,使用它还是比较合适的。而对于一些BAT大型互联网公司,显然它就不合适了。

    RocketMQ

    接下来我们来讨论一下我比较喜欢的MQ-RocketMQ,它是阿里开源的消息中间件,久经沙场,非常靠谱。

    它支持高吞吐量,能达到10万级,能承受互联网项目高并发的挑战。

    在高可用上,它使用的是分布式架构,可以搭建大规模集群,性能很高。

    在消息可靠性上,通过配置,可以保证数据的绝对不丢失

    同时它支持大量的高级功能,如:延迟消息、事务消息、消息回溯、死信队列等等(后续文章会单独讲解)。

    它非常适合应用于java系统架构中,因为它使用java语言开发的,我们可以去阅读源码了解更深的底层原理。

    目前来看,它没有什么特别的缺点,可以支持高并发下的技术挑战,可以基于它实现分布式事务,大型互联网公司和中小型公司都可以选择使用它来作为消息中间件使用,如果我来做技术选型,我首选的中间件就是它。

    Kafka

    kafka的吞吐量被公认为中间件中的翘楚,单机可以支持十几万的并发,相当强悍。

    在高可用上同样支持分布式集群部署。

    在消息可靠性上,如果保证异步的性能,可能会出现消息丢失的情况,因为它保存消息时是先存到磁盘缓冲区的,如果机器出现故障,缓冲区的数据是可能丢失的(后续文章会讲到)。

    它的功能非常的单一,就是消息的接收与发送,因此不适合应用于许多场景。

    它在行业内主要应用于大数据领域,使用它进行用户行为日志的采集和计算,来实现比如“猜你喜欢”的功能。

    所以,如果没有大数据的需求,一般不会选择它。

    最后,附一张自己面试前准备的脑图:

    image

    面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

    • Java核心知识整理

    image

    • Spring全家桶(实战系列)

    image.png

    Step3:刷题

    既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

    以下是我私藏的面试题库:

    image

    很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

    资料领取方式:Java全套学习手册

    作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

    资料领取方式:Java全套学习手册

    以上学习资料均免费分享,最后祝愿各位身体健康,顺利拿到心仪的offer!

    展开全文
  • 本人所在的研发团队没有使用任何svn这类的源代码管理工具,仅仅是最原始的多人共同编辑某ftp目录下的源代码,一个项目组仅仅有一份正在使用的代码拷贝,这份代码同时部署在服务器运行环境中,以便于即时编辑即时看到...
  • 怎么配置eclipse热部署本文章将会演示怎么配置eclipse调试器在不重启服务器的情况下支持热部署,热插拔或者热码替换。 环境:Eclipse 4.4(老版本也一样支持)Eclipse Tomcat 插件1. 热部署例子通过这个简单的热...

    怎么配置eclipse热部署

    本文章将会演示怎么配置eclipse调试器在不重启服务器的情况下支持热部署,热插拔或者热码替换。 
    环境:

    • Eclipse 4.4(老版本也一样支持)
    • Eclipse Tomcat 插件

    1. 热部署例子

    通过这个简单的热部署例子,可以在不用重启tomcat的情况下是代码修改生效。假设一个简单的Spring MVC Web项目已经通过eclipse部署到tomcat里。

    1.1 源代码

    @Controller
    public class TaskController {
    
        @RequestMapping(value = "/task", method = RequestMethod.GET)
        public ModelAndView index() {
    
            logger.debug("index()");
    
            ModelAndView model = new ModelAndView();
            model.setViewName("index");
            return model;
    
        }
    
     ......
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    访问 : http://localhost:8080/project/task

    //output 
    DEBUG c.m.o.web.controller.TaskController - index()

    1.2 修改代码,添加一些日志

    @Controllerpublic class TaskController {
    
        @RequestMapping(value = "/task", method = RequestMethod.GET)
        public ModelAndView index() {
    
            logger.debug("index() - NEW - NO RESTART");
    
            ModelAndView model = new ModelAndView();
            model.setViewName("index");
            return model;
    
        }
     ......
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    再次访问:http://localhost:8080/project/task

    //output 
    DEBUG c.m.o.web.controller.TaskController - index() - NEW - NO RESTART

    2. 在eclipse里面配置热部署

    双击tomcat,打开tomcat的配置界面,按如下几个步骤配置eclipse热部署: 
    这里写图片描述

    2.1 单击“Overview”选项卡

    2.1.1 展开“Server Options”,勾选“Serve modules without publishing”选项

    这里写图片描述

    2.1.2 展开”publishing“,勾选”Automatically publish when resources change“选项。这个配置是用来热部署资源,如:JSP,XML和properties文件等。

    双击tomcat 
    勾选自动发布当资源改变时

    2.2 单击”Modules“选项卡,确保”Auto Reload“是被禁用的

    设置

    2.4 以DEBUG模式启动tomcat,热部署在DEBUG模式下才可用

    展开全文
  • 怎么玩 git clone https://github.com/codingXiaxw/seckill.git 打开IDEA->文件->新建->打开 选择seckill的pom.xml,打开它 更新有关您的mysql用户名和密码的jdbc.properties文件 部署tomcat,然后启动 在浏览器中...
  • 们在SpringMVC开发项目中,有的用注解和XML配置Bean,这两种都各有自己的优势,数据配置比较经常用XML配置,控制层依赖的service比较经常用注解等(在部署时比较不会改变的),我们经常比较常用的注解有@Component...
  • rocketmq是怎么做负载均衡的呢 例如:TopicA有5个队列,消费者GroupA部署了两台机器 则一台机器消费queue0、queue1、queue2 另外一台机器消费queue3、queue4 通过队列来保障了消息的负载均衡 代码如下: ...
  • 自己尝试了很久,也没有摸索出微小区是怎么部署的。 <br/>     自己已经搭建了微擎框架环境,并运行起来,知道微小区是在微擎框架基础上。但不知道怎么把微小区的源码放入微擎框架中运行...
  • 图文介绍tomcat安装(windows环境)Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,
  • Jboss:是一个 遵循JavaEE规范的、开放源代码的、纯Java的EJB服务器,支持所有的JavaEE规范; Glassfish:由Oracle公司开发的一款web服务器; Resin:对servlet和jsp提供良好的支持,但是需要收费; WebLogic:...
  • 01文章已经说到怎么部署源代码;这一章节来运行一个SPRING的小例子 1、先创建一个项目,结构如图 2、Main.java的代码:package com.test01; import org.springframework.context.ApplicationContext; import ...
  • 从网上下载的源代码,一个来电卫士的app, 在AD中编译运行通过,然后源文件有个Remote api文件,php类型, 应该怎么部署,才能实现和app的连接。 ![图片说明]...
  • 之前我们在开发项目的时候,一旦修改了源代码,都需要重启服务器后...热部署就是在修改源代码的情况下,不用重启服务器也能看到修改后的效果。我相信这才是热部署真正的意思。热部署只是为了提高开发效率而已 我们需...
  • docker部署zipkin

    千次阅读 2019-09-23 11:15:03
      Zipkin 是一个开放源代码分布式的跟踪系统,每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图。   zikin到了2.*版本之后是不建议自己去创建zipkin的服务的,官方提供了服务包...
  • Dubbo后台管理和监控中心部署

    万次阅读 2016-08-20 11:27:02
    通过dubbo监控中心和后台管理可以很好的监控dubbo服务,监控服务端服务和客户端调用情况,调用次数,调用日志...下面我们看看dubbo的管理后台和监控中心怎么部署。dubbo管理后台的部署需要下载dubbo源代码进行重新编译
  • 十分钟部署智能合约

    2018-10-02 00:27:00
    1.git clone源代码 git clonehttps://github.com/EOSIO/eos --recursive 2.下载编译之后,里面有三个应用程序,这三个应用程序也都是命令行的: 1、Cleos; 2、Nodeos; 3、Keosd。 这三个应用程序之间有什么关系呢...
  • 源代码地址 http://www.mybei.cn 搭建步骤 下载以上源代码到本地 http://www.mybei.cn 成品展示 截图 步骤 下载以上源代码到本地 http://www.mybei.cn 修改为你自己的微信小程序,打开 /dist/pages/ele/index....
  • 应用程序部署总结

    千次阅读 多人点赞 2012-06-14 14:08:22
    程序部署, 如何生成安装包, 如何打包生成可以安装的应用程序 ...编译源代码并完成测试以后,开发过程其实并没有结束。在这个极端,需要把应用程序提供给用户。无论是ASP.NET应用程序,客户端应用程序还是Compact
  • 怎么配置eclipse热部署本文章将会演示怎么配置eclipse调试器在不重启服务器的情况下支持热部署,热插拔或者热码替换。 环境:Eclipse 4.4(老版本也一样支持)Eclipse Tomcat 插件1. 热部署例子通过这个简单的热...
  • eclipse通过tomcat热部署web项目 标签: eclipsehot-deploytomcat 2015-11-28 20:29 246人阅读 评论(1) 收藏 举报 ...怎么配置eclipse热部署 ...热部署例子 ...1 源代码2 修改代码添加一
  • tomcat部署war包

    2013-06-30 12:32:40
    接下来我拉把这个面纱揭开看一下,tomcat源代码如下:[b]1.[/b]URL war = new URL("jar:" + (new File(docBase)).toURI().toURL() + "!/"); // Expand the WAR into the ...
  • 概述代码审核,是对应用程序源代码进行系统性检查的工作。它的目的是为了找到并且修复应用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必要的风险代码审核不是简单的检查代码,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 179
精华内容 71
关键字:

怎么部署源代码