1.1 课程介绍

1.1 课程介绍

欢迎来到牛客网Java高级工程师系列课程,我是课程的主讲老师李红鹤,我们推出这套课的目的是想让你真正的掌握 Java web开发相关的技术,我们会从理论、实践、面试这三个环节来帮助你,让你成长为一名合格的 Java高级工程师。

当然了,想要达成这个目标并不会很容易,因为现在的互联网公司的用人标准都蛮高的,为了让你能够达到互联网公司的标准,成功的拿到满意的offer,我们的课程会非常的侧重于实践,第一章的标题叫做:"初识Spring Boot,开发社区首页",也就是说第一章我们就要完成牛客社区首页的功能,那就要开始我们的实践了。

然后,后面还有7章,我们会在它的基础上不断的加深实践,最终你会开发出一个完整的牛客社区的项目。好了,在开始我们的实践之前,我想我有必要更详细地给大家介绍一下我们的课程,包括我们需要学哪些东西,我们需要做出哪些东西,以及我们需要在什么样的开发环境下来完成这样的内容。

大家可以看一下,我们这个课程主要有三个目标:

  1. 学会主流的Web开发技术和框架
  2. 积累一个真实的Web项目的开发经验。
  3. 掌握热点的面试题的答题策略,好顺利的通过面试。

那么关于第一个目标,你需要知道主流的Web开发技术框架都有哪些,他们互相之间是什么关系,我们需要按照什么样的路径来学习,并且你要知道学会以后,能利用这个技术做什么样的功能,这些内容我会在下一页PPT进行详细的介绍。

关于第二个目标,我想强调的是一个真实的项目是非常重要的,因为你在实现真实的业务时,才能够透彻地理解一项技术它能够解决什么样的问题,而且在开发的过程中,你才能够遇到足够多的坑,在你趟过这些坑以后,你才会积累到足够多的解决实际问题的经验,企业最在意什么?最在意的就是你能不能解决实际的问题,对不对?所以这个课程我为大家讲解演示的就是牛客网的核心功能。

那么第三个目标是在前两个目标都达成的前提下才能去实现的。所以我把他安排到了最后一章,你需要注意的是面试题不能死记硬背,所谓的面试策略,它一定是建立在你对框架的透彻理解,以及深度应用的前提之下,这样的话面试官无论怎么去问你,你都可以灵活应变,甚至可以举一反三,这样的话你拿到offer就是一个顺理成章的事了。

下面我们一起来看一下课程中要开发的项目,你看这就是项目的静态页面,那么这个项目叫牛客社区,实际上就是牛客网的讨论区的功能,我把它从牛客网中抽离出来给大家进行讲解,那么牛客网实际上是有很多功能的,那是我们技术团队经过多年的努力,才开发到现在这种规模的。

所以你是不可能一个人在短时间内把整个网站都做出来。

那么我之所以选择讨论区来讲解,是因为讨论区的它的业务是一套比较典型比较通用的业务。你看大家所熟知的微博、知乎、豆瓣,其实他们的很多功能和我们的讨论区是一样的,那么解决问题的思路技术方案也是类似的,所以你如果说在简历上写上这样的项目经历,比较容易让面试官产生兴趣。面试的时候,你们可以聊到投机一点。

那么这套静态页面是为了录制这个课单独做的,是在讨论区的基础上做了一定的精简,因为这个课是Java工程师的课,而Java开发它是侧重于服务端的,重点不是在前端。牛客网有专业的前端工程师,前端页面可以做得很丰富,也很复杂,但是如果我们直接使用原版页面来做,那就需要你具备丰富的前端知识,和我们的课程定位就矛盾了。那么简化以后的页面就简单多了,只要你熟悉HTML常用标签,了解一点 CSS和JS,那么就可以上手开发了。

下面我们详细地看一下这套页面,首先我们看到的是社区首页,它实际上就是一个帖子列表,可以按照最新或者是最热门的程度来排序。然后,如果你点这个按钮,那就可以发布一个帖子,为了防止你发布不健康的帖子,那么网站的服务端需要做敏感词过滤,把非法的词隐藏掉。采用什么样的算法做敏感词过滤,这个是我们课程中要重点探讨的话题。

另外如果你没有登录,你只能看帖子,是不能发布帖子的,而且你也不能查看消息,也不能看到个人主页账号设置,退出登录这样的功能。

因为当前我们是静态页面,这些就都显示出来了,实际开发的时候我们是要进行权限控制,动态的让这些功能显示或隐藏的。然后,当你点击某一个帖子的时候,你就能够进入帖子的详情页面,在这里你们可以看到帖子详细的信息,当然还有回帖的内容。如果你是登录的状态,就可以给帖子点赞,或者是在下面给帖子进行评论,当然你也可以对别人的回复加以评论。

还要注意咱们这个页面的右上方有三个按钮,这三个按钮不是普通用户可以用的,实际上它只有管理员和版主才能看到才能点击,这里也需要做权限控制。

这里是注册功能,当你点击注册按钮以后,服务端就会给你发一封邮件,里面会包含一个激活链接,你需要点击链接,将账号激活以后才能使用。这个就是登录功能,这里的验证码是服务端随机生成的,每次刷新页面都会变。当你点登录的时候,服务端需要对验证码、账号和密码作出判断,全都正确才能登录成功。登录成功以后,服务端需要记住用户的登录状态,这样你下次再来访问网站就不用重复登录了。登录以后,可以查看个人主页,看看你关注了多少人,有多少人关注了你,以及你获得过多少个赞,这两个地方是可以点进去的,比如说你点这可以看到你关注的人,一点这儿可以看到有多少人关注了你。在这里你还可以看到你曾经发过的帖子,在这儿你可以看到你曾经做过的回复,另外别人也可以点击你的头像,进到你的主页,他可以点这个按钮来关注你。

这里面要注意的是这个点赞和关注,它是非常高频的一个操作,我们需要重点考虑性能的问题。采用什么样的方案才能提高系统的性能,在网站流量的高峰时段,不让服务器挂掉,这是我们课程中的重点要探讨的,也是面试官的非常关心的话题。个人主页的下面还有一个账号设置功能,在这里面你可以上传头像,可以修改密码做这样的操作。

那么我们可以把头像传到自己的应用服务器,也可以传到第三方的云服务器,那么这两种方案我在课程中都会给大家做演示。

最后,账号设置下面还有一个退出的登录的功能,那么可以注销你的登录状态。这里会显示你的未读消息数量,点进去以后你可以看到你和朋友之间的私信,以及系统给你发的一些通知,你可以点这个按钮给某个人发私信,也可以点这里,看私信的详情,或者是点按钮给某个人的回信,这是关于私信的操作。

再看一下这个系统通知,当别人评论了你的帖子,或者是给你点个赞,或者是他关注了你的时候,这个时候系统就会自动的发消息通知你一下,你可以点进来看一下通知的详细的内容。

那么很明显网站每天都会产生大量的消息,所以为了降低应用服务器的压力,发布消息需要使用专业的消息队列服务器。

那么为了深刻的理解消息队列,你需要加强多线程方面的知识,需要理解生产者与消费者模式。在这里你可以进行全站的搜索,那么搜索的结果会把你输入的关键词做高亮显示,实际上就是标记为红色。全站搜索它并不是说从数据库中查一下就完了,是需要通过专业的搜索引擎来实现的,那么这也是出于性能的考虑,我们的数据库和搜索引擎之间是如何同步数据的,是如何支持中文分词的,如何做高亮显示的,这些都是我们重点探讨的话题。

除了上面的功能之外,还有一个隐含的功能,它只有管理员能够使用,访问路径也不对外暴露,我需要手地的敲一下。在这里管理员可以统计某一段时间之内,网站的UV或者是某一段时间之内网站的活跃用户数,那么网站的用户是非常多的,用户访问网站的次数就更多了,所以统计与用户行为有关数据的时候,那么怎么样做才能够节约存储空间,才能够拥有更高的统计效率,这是我们将来要探讨的话题。

好了,以上就是我们课程中大致要讲解和演示的功能。那么从界面上看它并不复杂,但是你要想把这些功能做到安全高效易用的程度,我们是要在服务端花很多心思去处理的。所以,服务端开发它可不是简单的将业务实现就可以了,如何提高系统性能,如何让系统更安全,它永远是我们追求的目标,这个也是企业关注的焦点。

那么在这些方面,我在课程里都会给大家做详细的讲解,让你学会专业的服务端开发技术。那么功能介绍完了,我们再回到PPT,接下来我再给大家介绍一下咱们这个项目的技术架构,让大家清楚地了解自己要学会哪些技能。那么大家应该都知道 Java语言是Son公司推出的,而Java Web的开发标准其实也是由Son制定的,就是Java EE。而Java EE的核心是EJB,我想可能很多人都没听过这个词儿,那是因为EJB设计的太复杂,太难用了,它已经被淘汰了。

目前市场上基于Java语言,做Web开发的主流框架就是Spring,基本上大家都用Spring,可以说 Spring它已经是事实上的行业标准了。但是Spring它不是一个框架,而是一套框架的组合,在开发过程中我们所遇到的常见的需求,Spring都能够给你提供很好的解决方案。当然有些功能是Spring自身支持的,有些功能是Spring整合了第三方的框架支持的,总之无论项目中有什么需求,通过Spring都能够找到解决方案,所以这就是大家钟爱Spring的原因了。目前最流行的做法不是直接使用Spring,而是使用 Spring Boot。

那么在Spring Boot的帮助之下,Spring会变得更简单。Spring Boot就是为了进一步简化Spring而生的,在它的支持下,我们可以采用Spring来管理项目中的对象,并且对其他的技术进行整合,所以 Spring才是整个项目的基石,是我们要学习的重点内容。

对于服务端程序来说,首要解决的就是如何处理浏览器的请求,在这方面Spring MVC是最流行的技术。

其次,服务端程序要解决的是如何访问数据库,在这方面MyBatis是最流行的技术。当然我们不会单独的使用MyBatis,而是采用的Spring来整合它,让它变得更简单。

那么这三个框架, Spring、Spring MVC以及MyBatis,他们加起来其实就是我们通常所说的SSM框架了。

这套组合是目前Java Web开发当中使用最多的技术方案,在我们的项目中,所有的基本的功能都是由SSM来实现的,比如注册、登录、发帖、评论、私信等等。SSM是我们整个项目的基础,是我们时时刻刻都得使用的技术。所以,前三章我们主要就是学SSM,并且利用SSM将项目中的常规功能都给它开发完,而这个Redis它是No SQL数据库,默认是将数据存在内存里,在适当的时候再把内存中的数据存到硬盘上。由于它是操作内存的数据库,所以它的性能非常的好,在我们的项目中对于那些性能要求很高的功能,我们可以把这些功能相关的数据存到Redis里,来提高服务器的处理能力。

Kafka它是目前性能最好,也是最流行的消息队列的服务器。我们的项目中所有的消息都是由Kafka来发布, Elastic Search它是目前性能最好,最流行的搜索引擎,我们项目中的搜索功能就是它来实现的。Redis、Kafka、Elastic Search,他们都能够在某一个层面上提高应用的性能,所以它是我们重点要掌握的内容,也是面试官的非常关心的话题,我们在使用的时候也会通过Spring来整合他们,让这些技术变得更方便。我们课程当中的第四章、第五章、第六章,就是分别学这三种框架。

Spring Security可以管理系统的权限,让每个功能被正确的人访问,可以提高系统的安全性。

Spring Actuator在我们系统上线以后,对系统进行全面的一个监控,让运维的人员随时掌握系统的运行状况。因为很多中小公司它是让程序员兼顾运维工作的,所以说关于这方面大家最好也做一个了解。

上面我所列举的是我们的项目中的最核心的技术框架,除此以外还有很多零碎的技术,比如说怎么发邮件,怎么生成验证码,怎么过滤敏感词,怎么定时启动一个任务,怎么生成长图,怎么把代码传到云服务器上等等。这些内容其实也很重要,我也会在课程里面给大家做讲解,做详细的演示。

最后我再为大家介绍一下我们要使用的开发环境,后面的课程里我会逐个的给大家演示这些工具怎么安装怎么使用。

  • 首先我们需要构建项目,那么构建项目包括对项目的创建、编译、测试、打包、生成文档等等好多个环节,我们选择Maven来做这样的事情,因为它是目前最流行的项目构建工具。
  • 其次咱们这个项目代码量挺大的,所以我们最好选一个好用的集成开发工具,它可以大大提高我们的编码的速度。目前在Java领域, Idea是最流行的集成开发工具,当然它分为社区版和收费版,我们选择免费的社区版就可以了。
  • 关系型数据库我们选择MySQL;No SQL数据库,我们选择Redis。
  • 还有Web项目需要部署在应用服务器上才能运行起来。在这方面我们选择开源的Apache Tomcat。
  • 最后你代码开发完了,我们需要上传到版本控制服务器,一个是为了便于团队成员之间的互相合作,这方面我们选择最流行的Git。

好,上面所列举的是我们项目中最基本的开发工具,大部分的企业都会用到这些工具。除此以外还有很多工具也会用到,比如说MySQL的客户端 Navicat,模拟浏览器发布请求的 PostMan,进行性能测试的JMeter等等。那么关于这些工具,我也会在课程里给大家演示他们怎么用。好了,牛客网高级工程师这门课程我就为大家介绍到这里,那下节课我会教大家搭建自己的开发环境,我们的实践就从下次课开始了,咱们下次课再见。

相关推荐
组合缺一2 分钟前
Solon v3.0.5 发布!(Spring 可以退休了吗?)
java·后端·spring·solon
程序猿零零漆4 分钟前
SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法
java·spring cloud·mybatis-plus
猿来入此小猿6 分钟前
基于SpringBoot在线音乐系统平台功能实现十二
java·spring boot·后端·毕业设计·音乐系统·音乐平台·毕业源码
愤怒的代码20 分钟前
Spring Boot对访问密钥加解密——HMAC-SHA256
java·spring boot·后端
带多刺的玫瑰20 分钟前
Leecode刷题C语言之切蛋糕的最小总开销①
java·数据结构·算法
栗豆包36 分钟前
w118共享汽车管理系统
java·spring boot·后端·spring·tomcat·maven
夜半被帅醒42 分钟前
MySQL 数据库优化详解【Java数据库调优】
java·数据库·mysql
万亿少女的梦1681 小时前
基于Spring Boot的网络购物商城的设计与实现
java·spring boot·后端
醒了就刷牙1 小时前
黑马Java面试教程_P9_MySQL
java·mysql·面试
m0_748233641 小时前
SQL数组常用函数记录(Map篇)
java·数据库·sql