大佬教程收集整理的这篇文章主要介绍了【爆肝一周】面试10多家中大厂后的万字总结——❤️JavaWeb篇❤️(建议收藏),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
⭐欢迎订阅《大厂面试突击》专栏c;面试10多家大厂总结出的高频面试知识c;免费阶段大家赶快订阅
⭐更多精品专栏简介点这里
⭐更多大厂全路线学习视频+笔记c;PC端看左侧「关于作者」c;手机端「私信」博主。
⭐老规矩c;私信前请先关注c;不然无法回复大家c;感谢支持!
幸福c;不是长生不老c;不是大鱼大肉c;不是权倾朝野。幸福是每一个微小的生活愿望达成。当你想吃的时候有得吃c;想被爱的时候有人来爱你。
告诉大家一个消息c;我在7月份又离职了c;离职后我开始疯狂的面试c;一共面了百度、字节、滴滴、美团、陌陌、58同城、汽车之家、元气森林、猿辅导c;掌阅科技c;美术宝、moka等10多家中大厂c;最多的时候一天4面。
面完之后我发现大厂对于算法的重视程度非常之高c;算法题没做出来c;基本就不会再往下问了c;你“八股文”再溜也没有展现的机会。
所以我开始刷leetcodec;每天一道c;放在了《leetcode》专栏里c;趁着还没有收费c;大家可以抓紧订阅一波。
但算法非一日之功可成c;我们的“八股文”也不能落下。
一条根据多家公司的面试检验c;将高频面试题分门别类的总结出来c;包括java基础篇、javaweb篇、集合篇、jvm篇、多线程篇、框架篇、设计模式篇、数据结构篇、网络篇、操作系统篇、mysql篇、redis篇、kafka篇、ES篇、dubbo篇。Spring cloud篇、企业项目篇c;由浅入深c;到时有可能还会增加。
所有文章都会放在《大厂面试突击》专栏里c;以后会收费c;所以请大家现在抓紧订阅。
本文是❤️javaWeb篇❤️
java Web是用Java技术来解决相关web互联网领域的技术栈。Web就是网页c;分为静态和动态。涉及 的知识点主要包括jspc;servletc;tomcatc;httpc;R_924_11845@VC等知识c;由于jsp更偏向前端。本文不做讲解。
现在网络的面试题资源可以说数不胜数c;但也良莠不齐。
那么c;博主总结的有哪些特别之处呢?
相比于逐个知识点的去讲解c;一条更偏向于用面试题的方式呈现c;原因如下:
Helloworld
开始讲c;根本来不及好吗关于选题c;java的知识点又多又杂c;技术更新又很快。所以明白以下几点很重要:
一条凭借面试了10多家大厂的经验总结最高频的知识点c;让你不做无用功c;事半功倍!
出自moka、美术宝
相信这个问题都难不倒大家c;但很多人答不全。
如果能回答出应用场景就完美了。
GET
:最常用的方式c;用来向服务器请求数据c;没有请求体c;请求参数放在URL后面。POST
:用于向表单提交数据c;传送的数据放在请求体中。PUT
:用来向服务器上传文件c;一般对应修改操作c;POST
用于向服务器发送数据c;PUT用于向服务器储存数据。没有验证机制c;任何人都可以操作c;存在安全问题。具有幂等性。deletE
:用于删除服务器上的文件c;具有幂等性。同样存在安全问题。HEAD
:用HEAD进行请求服务器时c;服务器只返回响应头c;不返回响应体。与GET
一样没有请求体c;常用于检查请求的URL是否有效。PATCH
:对资源进行部分修改。与PUT区别在于c;PUT是修改所有资源c;替代它c;而PATCH只是修改部分资源。TRACE
:用来查看一个请求c;经过网关c;代理到达服务器c;最后请求的变换。因安全问题被禁用。OPTIONS
:当客户端不清楚对资源操作的方法c;可以使用这个c;具有幂等性。高频必考题
是否具有幂等性也是一个http请求的重要关注点。
幂等性:指的是同样的请求不管执行多少次c;效果都是一样c;服务器状态也是一样的。具有幂等性的请求方法没有副作用。(统计用途除外)
假设这样一个场景:有时我们在填写某些
form表单
时c;保存按钮不小心快速点了两次c;表中竟然产生了两条重复的数据c;只是id不一样。
插入数据前先根据某一字段查询一下数据库c;如果已经存在就修改c;不存在再插入。
悲观锁的并发性较低c;更适合使用在防止数据重复的场景c;注意幂等性不光是防止重复还需要结果相同。
乐观锁可以很高的提升性能c;也就是常说的版本号。
通过数据库的唯一索引来保证结果的一致性和数据的不重复。
两次请求c;第一请求拿到tokenc;第二次带着token去完成业务请求。
出自美术宝
此题考查的是你有没有实际解决bug的经验和能力。不知道对应网络状态码的含义c;解决问题的能力就会受到怀疑。
应该重点关注同一系列之间的区别c;比如504和505什么区别?
网络状态码共三位数字组成c;根据第一个数字可分为以下几个系列:
代表请求已被接受c;需要继续处理。
包括:100、101、102
表示成功处理了请求的状态代码。
200
:请求成功c;表明服务器成功了处理请求。
202
:服务器已接受请求c;但尚未处理。
204
:服务器成功处理了请求c;但没有返回任何内容。
206
:服务器成功处理了部分 GET 请求。
300
:针对请求c;服务器可执行多种操作。
301
:永久重定向
302
:临时性重定向
303
:303与302状态码有着相同的功能c;但303状态码明确表示客户端应当采用GET方法获取资源。
301
比较常用的场景是使用域名跳转。比如c;我们访问 http://www.baidu.com
会跳转到https://www.baidu.com
c;发送请求之后c;就会返回301状态码c;然后返回一个LOCATIOnc;提示新的地址c;浏览器就会拿着这个新的地址去访问。
302
用来做临时跳转比如未登陆的用户访问用户中心重定向到登录页面。
400
:该状态码表示请求报文中存在语法错误。但浏览器会像200 OK一样对待该状态码。
401
:表示发送的请求需要有通过http认证的认证信息。比如token
失效就会出现这个问题。
403
:被拒绝c;表明对请求资源的访问被服务器拒绝了。
404
:找不到c;表明服务器上无法找到请求的资源c;也可能是拒绝请求但不想说明理由。
500
:服务器本身发生错误c;可能是Web应用存在的bug或某些临时的故障。
502
:该状态码表明服务器暂时处于超负载或正在进行停机维护c;现在无法处理请求。
⚠️有时候返回的状态码响应是错误的c;比如Web应用程序内部发生错误c;状态码依然返回200
A找B借钱c;B没有钱c;B去问Cc;C有钱c;C把钱借给A的过程。
客户浏览器发送http请求,web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户。
整个转发一个请求c;一个响应c;地址栏不会发生变化c;不能跨域访问。
A找B借钱c;B没有钱c;B让A去找Cc;A又和C借钱c;C有钱c;C把钱借给A的过程。
客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的LOCATIOn给客户浏览器,客户浏览器发现是302响应c;则自动再发送一个新的http请求c;请求url是新的LOCATIOn地址,服务器根据此请求寻找资源并发送给客户。
出自moka
考查实际开发中解决问题的能力。
跨域是针对浏览器的c;由于浏览器的同源策略不能执行其他网站的脚本。那什么是同源?
同源是指域名、协议、端口均相同。只要有一个不同c;就是跨域。
headers
的Access-Control-Allow-Origin
允许所有人访问。一种「异步请求」+「局部刷新」技术。等于异步JavaScript 和 XMLc;用于创建快速动态网页。
异步请求:不需要等待当前请求返回就可以发送下一个请求。
局部刷新:无需重新加载整个网页的情况下c;能够更新部分网页。
servlet是一个比较抽奖的概念c;也是web部分的核心组件c;大家回答这个问题一定要加入自己的理解c;不要背定义。
servlet
其实就是一个java程序c;他主要是用来解决动态页面的问题。
之前都是浏览器像服务器请求资源c;服务器(tomcat)返回页面c;但用户多了之后c;每个用户希望带到不用的资源。这时就该servlet
上场表演了。
servlet
存在于tomcat
之中c;用来网络请求与响应c;但他的重心更在于业务处理c;我们访问京东和淘宝的返回的商品是不一样的c;就需要程序员去编写c;目前MVC三层架构c;我们都是在service
层处理业务c;但这其实是从servlet
中抽取出来的。
看一下servlet
处理请求的过程:
Servlet生命周期分为三个阶段:
servlet是一种运行服务器端的java应用程序c;工作在客户端请求与服务器响应的中间层。
filter是一个可以复用的代码片段c;可以用来转换http请求、响应和头信息。Filter不像Servletc;它不能产生一个请求或者响应c;它只是修改对某一资源的请求c;或者修改从某一的响应。
从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作c;并根据其要求作出相应的响应。
servlet,filter都是针对url之类的c;而listener是针对对象的操作的。
这块的东西比较乱c;给大家画个图
JSP是Servlet技术的扩展c;本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中c;并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图c;Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
当容器启动时c;会读取在webapps目录下所有的web应用中的web.xml文件c;然后对xml文件进行解析c;并读取servlet注册信息。
然后c;将每个应用中注册的servlet类都进行加载c;并通过反射的方式实例化。(有时候也是在第一次请求时实例化)
在servlet注册时加上1如果为正数c;则在一开始就实例化c;如果不写或为负数c;则第一次请求实例化。
GET请求:GET请求参数是在地址后面的。我们需要修改tomcat
的配置文件。需要在server.xml文件修改Connector
标签c;添加URIEncoding="utf-8"
属性。
POST请求:post请求提交了中文的请求体c;服务器解析出现问题。在获取参数值之前c;设置请求的解码格式c;使其和页面保持一致。
request.setCharacterEncoding("utf-8");
向浏览器发送响应的时候c;要告诉浏览器c;我使用的字符集是哪个c;浏览器就会按照这种方式来解码。
方法一:
response.setHeader("Content-Type", "text/html;charset=utf-8");
方法二:
response.setContentType("text/html;charset=utf-8");
首先我们要明白http是一种无状态协议c;怎么理解呢?很简单
夏洛:大爷c;楼上322住的是马冬梅家吧?
大爷:马冬什么?
夏洛:马冬梅。
大爷:什么冬梅啊?
夏洛:马冬梅啊。
大爷:马什么梅?
夏洛:行c;大爷你先凉快着吧。
这段对话都熟悉吧c;http就是那个大爷c;那如果我们就直接把“大爷”放给用户c;用户不用干别的了c;就不停的登录就行了。
既然“大爷不靠谱”c;我们找“大娘”去吧。
为了解决用户频繁登录的问题c;在服务端和客户端共同维护一个状态——会话c;就是所谓session
c;我们根据会话id判断是否是同一用户c;这样用户就开心了。
但是服务器可不开心了c;因为用户越来越多c;都要把session
存在服务器c;这对服务器来说是一个巨大的开销c;这是服务器就找来了自己的兄弟帮他分担(集群部署c;负载均衡)。
但是问题依然存在c;如果兄弟挂了怎么办c;兄弟们之间的数据怎么同步c;用户1把session
存放在机器A上c;下次访问时负载均衡到了机器Bc;完了c;找不到c;用户又要骂娘。
这时有人思考c;为什么一定要服务端保存呢c;让客户端自己保存不就好了c;所以就诞生了cookie
c;下一次请求时客户段把cookie
发送给服务器c;说我已经登录了。
但是空口无凭c;服务器怎么知道哪个cookie
是我发过去的呢?如何验证成了新的问题。
有人想到了一个办法c;用加密令牌c;也就是token
c;服务器发给客户端一个令牌c;令牌保存加密后id和密钥c;下一次请求时通过headers
传给服务端c;由于密钥别人不知道c;只有服务端知道c;就实现了验证c;且别人无法伪造。
@H_969_63@mVC与三层架构如果感觉博主讲的还不错c;一键三连支持一下吧。
三层架构与MVC的目标一致:都是为了解耦和、提高代码复用。MVC是一种设计模式c;而三层架构是一种软件架构。
@H_848_65@mVC@H_166_13@model 模型
模型负责各个功能的实现(如登录、增加、删除功能)c;用JavaBean
实现。
View 视图
用户看到的页面和与用户的交互。包含各种表单。 实现视图用到的技术有html/css/jsp/js等前端技术。
常用的web 容器和开发工具
Controller 控制器
控制器负责将视图与模型一一对应起来。相当于一个模型分发器。接收请求c;并将该请求跳转(转发c;重定向)到模型进行处理。模型处理完毕后c;再通过控制器c;返回给视图中的请求处。
表现层(UI)(web层)、业务逻辑层(BLL)(service层)、数据访问层(DAL)(dao层) c;再加上实体类库(Model)
实体类库(Model)c;在Java中c;往往将其称为Entity实体类。数据库中用于存放数据c;而我们通常选择会用一个专门的类来抽象出数据表的结构c;类的属性就一对一的对应这表的属性。一般来说c;R_924_11845@odel实体类库层需要被DAL层c;BIL层和UI层引用。
数据访问层(DAL)c;主要是存放对数据类的访问c;即对数据库的添加、删除、修改、更新等基本操作c;DAL就是根据业务需求c;构造sql语句c;构造参数c;调用帮助类c;获取结果c;DAL层被BIL层调用
业务逻辑层(BLL)c;BLL层好比是桥梁c;将uI表示层与DAL数据访问层之间联系起来。所要负责的c;就是处理涉及业务逻辑相关的问题c;比如在调用访问数据库之前c;先处理数据、判断数据。
JSON是一种轻量级的数据交换格式。它基于标准字符串实现c;可分为三类数据:
多个有序的数据: 数组c;用[]包含起来, 其元素可以是三类数据中的任意一种, 元素之间用,号隔开。
多个无序的数据: 对象用{}包含起来, 其元素必须由key-value组成, key是一个字符串, value可以是任意类型数据, key与value之间用:号隔开, 两个key-value之间用,号隔开。
json之前都是基于
xml
的传输c;所以基于xml
对比。
单点登录的英文名叫做:Single Sign On(简称SSO)。
起初我们的所有功能都在一个系统c;比如登录c;交易c;物理。后来有了分布式微服务c;按照功能拆分成了多个子服务c;那如何实现一处登录c;处处可用呢?
也就是如何用一把锁c;打开你家的所有门?需要解决以下问题:
session共享
单点登录的原理是后端生成一个sessionID
c;然后设置到cookie
c;后面的所有请求浏览器都会带上cookie
c;然后服务端从cookie里获取sessionIDc;再查询到用户信息。
所以c;保持登录的关键是通过cookie
保存和传输的sessionID
c;其本质是能获取用户信息的数据。除了cookie
c;还通常使用http
请求头来传输。但是这个请求头浏览器不会像cookie一样自动携带c;需要手工处理。
以上就是关于「Javaweb」部分总结出的面试题c;如果哪里有问题c;欢迎大家交流评论!
⭐今天是坚持刷题更文的第34/100天
⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力
⭐更多面试题欢迎关注专栏《大厂面试突击》
为了回馈各位粉丝c;礼尚往来c;给大家准备了一条多年积累下来的优质资源c;包括 学习视频、面试资料、珍藏电子书等
需要的小伙伴PC端看左侧「关于作者」c;手机端「私信」博主。
以上是大佬教程为你收集整理的【爆肝一周】面试10多家中大厂后的万字总结——❤️JavaWeb篇❤️(建议收藏)全部内容,希望文章能够帮你解决【爆肝一周】面试10多家中大厂后的万字总结——❤️JavaWeb篇❤️(建议收藏)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。