后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3682 人已学习
课程目录
已更新 16 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (6讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

答疑丨Java Web程序的运行时环境到底是怎样的?

李智慧 2019-12-04
今天是第一模块的最后一讲。在这一讲中,我们主要讲了软件的基础原理,今天,我将会针对这一模块中大家提出的普遍问题进行总结和答疑,让我们整理一下,再接着学习下一个模块的内容。

问题一

@小美
既然一个 JVM 是一个进程,JVM 上跑 Tomcat,Tomcat 上可以部署多个应用。这样的话,每个跑在 Tomcat 上的应用是一个线程吗?该怎么理解“如果一个应用 crash 了,其他应用也会 crash”?
理解程序运行时的执行环境,直观感受程序是如何运行的,对我们开发和维护软件很有意义。我们以小美同学提的这个场景为例,看下 Java Web 程序的运行时环境是什么样的,来重新梳理下进程、线程、应用、Web 容器、Java 虚拟机和操作系统之间的关系。
我们用 Java 开发 Web 应用,开发完成,编译打包以后得到的是一个 war 包,这个 war 包放入 Tomcat 的应用程序路径下,启动 Tomcat 就可以通过 HTTP 请求访问这个 Web 应用了。
在这个场景下,进程是哪个?线程有哪些?Web 程序的 war 包是如何启动的?HTTP 请求如何被处理?Tomcat 在这里扮演的是什么角色?JVM 又扮演什么角色?
首先,我们是通过执行 Tomcat 的 Shell 脚本启动 Tomcat 的,而在 Shell 脚本里,其实启动的是 Java 虚拟机,大概是这样一个 Shell 命令:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(11)

  • Citizen Z
    成就一个人的,是事业所带来的社会效益。
    衡量一个人成就的是他所带来贡献,而非多么华丽惊艳的技术实现。
    能力是实现成就的条件,不是终极目标。
    技术只是重要工具,应该精进,不必狂热。

    做技术的其实挺容易迷失在无尽地追逐技术牛逼的道路上,诚然能带来快乐,却很容易造成思维封闭。想在事业上更上一层楼,要把眼光放在更大的局面上,小到帮助同事朋友,大到给公司战略提供建议、给开源社区贡献力量,虽然各方面能力暂时不一定能匹配得上,但是大的目标能让人豁然开朗,提高学习动力和做事动机。

    个人经验,程序员应该敢于务虚、吹理论、玩圈子。不该将自己约束到一个码农的标签里,追求字面意义上的“talke cheap show code”,更不该用“我学技术就是为了挣钱”这种消极思想来对待职业发展,应该回归到“一个会计算机技术的职场人”的角色中。
    归根结底,职业发展目标应该建立在事业的成功和价值的创造上,如此,能力、影响力、金钱会很自然地在过程中积累。

    价值第一,效率第二,名利第三,目标向善,正向循环。
    2019-12-04
    12
  • 赤城
    程序员很容易有一种错觉,觉得这个世界是由技术推动的,其实不是,这个世界一直以来都是由资本推动的,技术只是资本的一种体现而已,工作中目的不应该是实现技术的最高难度,而应该是业务的最大价值呈现
    2019-12-09
    6
  • Geek_2b3614
    真是有感而发呀。
    2019-12-04
    3
  • 未知
    “BAT 似乎成为当年的 IBM,历史好像进入了某种循环”
    老师说的这句话感触很深。平时看公司比较核心的业务系统或者基础系统代码(新做的除外),代码一般都是很久以前的。这种现象应该都比较普遍,程序嘛,只要能满足目前的量并且没BUG,大家都没改重构的动力。但是如果从公司业务上来说,这种现象就比较危险:业务可以关系公司生死。大家都说乔布斯厉害,为什么厉害。感觉就是破、立。乔布斯二次回归时候,苹果已经从初创时候的高点落下来了,还差点卖身了。电脑不好卖加上金融危机,怎么办呢?但是他搞出了iPod。革了CD机的命,有搞出了Imac、iPhone。并且每个产品都标新立异。现在我们看,一个做电脑的公司做音乐播放器、做手机似乎正常。但是我们看看联想做手机、格力做手机、华为做手机。这些在发展初期都很困难,而且有的死了有的成功了。所以大公司转型或者插足新行业(那怕是同行业另一个领域),都比较谨慎,成不成完全未知,就像阿里云的初期一样。
    一个产品能够做好,做大,流芳百世实属不易
    2019-12-16
    1
  • 灰灰
    打卡
    2019-12-17
  • 孙志强
    单线程OOM,会触发一次Full GC,如果能够回收掉,应该不会导致整个JVM 挂掉,使用的收集器是G1
    2019-12-17
  • 李子木
    老师讲的真的很好,从第一节一直看下来我觉得对我这种想在IT领域深入学习的初学者解答了很多疑问,期待后面的更新!
    2019-12-14
  • Paul Shan
    tomcat进程的职责是监听80端口,分派线程处理请求,war包定义如何处理请求。

    RAID5 假设有8块盘,校验那一部分写入是正常信息写入的7倍,所以要把校验信息分散到8块盘中,以使得每块盘寿命大致相等。每块盘有1/8的存储信息是其他7块盘(每块非校验信息是7/8)的校验,具体是把数据分块,每块盘轮流作为校验盘。
    2019-12-05
  • 奔奔奔跑
    哈哈,频繁写入的这个没考虑到,不过老师答疑hash表的问题我还是很有反思的,但是现在大部分公司要求高并发,用过这个redis,用过那个kafka,rocketmq,用过这个Api网关,用过那个etcd,为啥都这样呢
    2019-12-05
  • 俊伟
    目前技术给我的感觉是,很多都是在基于http协议上面进行开发。最近一直在想还有那些领域可以使用编程提高生产力。
    2019-12-04
  • Demter
    希望多出点专栏
    2019-12-04
收起评论
11
返回
顶部