面试专题之web编程进阶与原理

题目

  1. BS与CS的联系与区别
  2. 什么是Web Service(Web服务)?
  3. forward与redirect区别(转发与重定向),说一下你知道的状态码,redirect的状态码是多少?
  4. 常见的加解密算法方式了解吗?对称加密和非对称加密的算法有哪些?3DES为什么叫3DES? 项目中数据如何加密传输?
  5. jwt是怎么实现的
  6. 如何在基于Java的Web项目中实现文件上传和下载?
  7. 缓存的优点?
  8. 说说MVC的各个部分都有那些技术来实现?如何实现?
  9. 什么是DAO模式?
  10. 请问Java Web开发的Model 1和Model 2分别指的是什么?
  11. 如何保存会话状态,有哪些方式、区别如何
  12. 禁用cookie怎么办
  13. 分布式session如何管理,你有哪些方案
  14. 布隆过滤器及其实现
  15. 在用户成功登录之后怎么保证数据安全传输?如何保证请求合法?
  16. 你了解的web安全问题都有什么,什么是xss攻击? CSRF攻击 ? JSONP问题? 追问crfs攻击,怎样伪造受信用的的客户端,具体怎么伪造的。
  17. 项目怎么进行分页的呢?
  18. tomcat 启动的时候干了些啥?
  19. tomcat的类加载机制。
  20. tomcat为什么会出现假死,既然死锁是某几个线程之间出现循环等待,为什么整个tomcat会假死。
  21. 登录逻辑?如何保证登录安全?用户携带的这个token和谁进行比较?怎么获取token?
  22. 什么是中间人攻击
  23. 安全相关,token的设计应该考虑哪些因素?
  24. tomcat有哪些配置?有没有修改过tomcat的参数?如果有修改过什么?tomcat底层怎么实现的?Tomcat是类加载实现结构,它有哪些实现类加载器
  25. dos攻击怎么回事,怎么解决
  26. 服务端是怎么验证用户的?生成的token有可能重复吗?
  27. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
  28. 登录怎样校验密码,海量用户同时登录怎么优化
  29. 大型网站在架构上应当考虑哪些问题?
  30. 单拎出来的跨域问题,了解下浏览器同源(协议,域名,端口)政策,对后端的限制(AJAX等,前端问题暂不考虑),解决方法(JSONP,WebSocket,CORS),CORS(Cross-Origin Resource Sharing)相关内容,头字段 Origin,Access-Control-Allow-Origin 等;

答案

1. BS与CS的联系与区别
通俗回答:
CS架构(client server)
特点:
(1)必须下载特定的客户端程序。
(2)服务器端升级,客户端升级。
典型应用:QQ软件 ,飞秋,红蜘蛛。
BS架构(brower server)
特点:
(1) 不需要安装特定的客户端(只需要安装浏览器即可)
(2)服务器端升级,浏览器不需要升级
典型应用: 腾讯官方(www.qq.com) 163新闻网站, 淘宝官网等(俗称:网站)
javaweb的程序就是b/s软件结构

详细式回答 BS与CS的联系与区别

2. 什么是Web Service(Web服务)?
如果一个软件的主要部分采用了"网络服务",即它把存储或计算环节"外包"给其他网站了,那么我们就说这个软件属于Web Service架构。

3. forward与redirect区别(转发与重定向),说一下你知道的状态码,redirect的状态码是多少?
(1)使用方式

request.getRequestDispatcher("new.jsp").forward(request, response);   //转发到new.jsp
response.sendRedirect("new.jsp");   //重定向到new.jsp

(2)数据共享方面
forward:转发页面和转发到的页面可以共享request里面的数据
redirect:不能共享数据
(3)地址栏显示方面
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
(4)本质上的区别
转发是服务器行为(还是在同一个服务器里),重定向是客户端行为(能涉及到多个服务器),具体过程如下:
重定向过程:客户浏览器发送http请求—>web服务器接受后发送302状态码响应及对应新的location给客户浏览器—>客户浏览器发现 是302响应,则自动再发送一个新的http请求,请求url是新的location地址—>服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的 路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

4. 常见的加解密算法方式了解吗?对称加密和非对称加密的算法有哪些?3DES为什么叫3DES? 项目中数据如何加密传输?
常见的对称加密算法有DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
常见的公钥加密算法有:RSA、ElGamal、背包算法、Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法)。

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

项目中数据加密的一个实现方案:
在这里插入图片描述

5. jwt是怎么实现的
可以参考我写的博客,这里是用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌等操作 jwt研究

6. 如何在基于Java的Web项目中实现文件上传和下载?
这种都没啥说的,纯粹是你做过没有。
7. 缓存的优缺点?
原理:先查询缓存中有没有要的数据,如果有,就直接返回缓存中的数据。
如果缓存中没有要的数据,才去查询数据库,将得到数据先存放到缓存中,然后再返回。

优点:(1)减少了对数据库的读操作,数据库的压力降低
(2)加快了响应速度

缺点: (1) 因为内存断电就清空数据,存放到内存中的数据可能丢失
(2) 缓存中的数据可能与数据库中数据不一致
(3)内存的成本高 ,容量小

8. 说说MVC的各个部分都有那些技术来实现?如何实现?
MVC 是 Model-View-Controller 的简写。 Model 代表的是应用的业务逻辑( 通过JavaBean, EJB 组件实现), View 是应用的表示面( 由 JSP 页面产生), Controller 是提供应用的处理过程控制( 一般是一个 Servlet), 通过这种设计模型把应用逻辑, 处理过程和显示逻辑分成不同的组件实现。 这些组件可以进行交互和重用。

9. 什么是DAO模式?
DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。

10. 请问Java Web开发的Model 1和Model 2分别指的是什么?
Model 1是以页面为中心的Java Web开发,使用JSP+JavaBean技术将页面显示逻辑和业务逻辑处理分开,JSP实现页面显示,JavaBean对象用来保存数据和实现业务逻辑。
Model 2是基于MVC(模型-视图-控制器,Model-View-Controller)架构模式的开发模型,实现了模型和视图的彻底分离,利于团队开发和代码复用,如下图所示。
在这里插入图片描述

11. 如何保存会话状态,有哪些方式、区别如何
一般就是cookie与session 这两个上一篇中已经介绍过了

12. 禁用cookie怎么办
两种方案:
方案一:重新开启浏览器的cookie
方案二:重写url
根据session的原理,服务器创建session对象的时候都会返回一个jsessionid 存入cookie,然后每次请求拿着jsessionid,而在cookie禁用之后可以在url后添加 ;jsessionid=xxx,就相当于是模仿cookie,而在实际运用当中具体方案如下:
用户请求服务端 服务端返回一个url:Response.encodeURL+请求对象requst对象.getsession.getid(),即返回一个带有jsessionid的完整url,这样就能解决这个问题了。

不过在实际当中用户应该很少去禁用浏览器的cookie功能,回答出本题就能个展现出对 基于cookie的session会话机制有一个较深的了解。

13. 分布式session如何管理,你有哪些方案
(1)使用cookie来存储
(2)session复制
(3)session绑定
(4)使用redis,也就是Spring-Session(本人仅使用过这一种方案,具体用法可以参考我的博客:Session共享解决方案 )
四种方式具体参考:4种分布式session解决方案

14. 布隆过滤器及其实现
布隆过滤器及其实现

15. 在用户成功登录之后怎么保证数据安全传输?如何保证请求合法?
请参考第四题,另外这部分内容涉及的点很多,很难在这里讲完,而且具体还是参考实际项目经验比较好。

16. 你了解的web安全问题都有什么,什么是xss攻击? CSRF攻击 ? JSONP问题? 追问crfs攻击,怎样伪造受信用的的客户端,具体怎么伪造的。
DDOS 分布式拒绝服务攻击可以使很多的计算机在同一时间遭受到攻击,使攻击的目标无法正常使用,分布式拒绝服务攻击已经出现了很多次,导致很多的大型网站都出现了无法进行操作的情况,这样不仅仅会影响用户的正常使用,同时造成的经济损失也是非常巨大的。

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序

CSRF:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法

JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是应用JSON的一种新方法,常用于服务器与客户端跨源通信,在后来的Web服务中非常流行

17. 项目怎么进行分页的呢?
sql语句limit、数组分页还有拦截器分页。

18. Tomcat启动?
Tomcat 启动的时候干了些啥

19. tomcat的类加载机制。
图解Tomcat类加载机制(阿里面试题)

这个题我是遭不住,tomcat要了解这么深的吗?

20. tomcat为什么会出现假死,既然死锁是某几个线程之间出现循环等待,为什么整个tomcat会假死。
这题没找到答案

21. 登录逻辑?如何保证登录安全?用户携带的这个token和谁进行比较?怎么获取token?
参考第四题

22. 什么是中间人攻击
当数据传输发生在一个设备(PC/手机)和网络服务器之间时,攻击者使用其技能和工具将自己置于两个端点之间并截获数据;尽管交谈的两方认为他们是在与对方交谈,但是实际上他们是在与干坏事的人交流,这便是中间人攻击。
什么是中间人攻击

23. 安全相关,token的设计应该考虑哪些因素?
设置的参数要尽量复杂(我只能答出这个了,网上没有直接的答案)

24. tomcat有哪些配置?有没有修改过tomcat的参数?如果有修改过什么?tomcat底层怎么实现的?Tomcat是类加载实现结构,它有哪些实现类加载器
这个如果让我答 我会如实回答我没有修改过参数,但我会给面试官将几个配置,我知道他们能干嘛
(1)在apache-tomcat-8.0.3\conf\server.xml 修改默认端口

<Connector port="8080" protocol="HTTP/1.1"  
               connectionTimeout="20000"  
               redirectPort="8443" />

(2)Tomcat设置https
底层实现,这个我还无能为力
(3)修改Session有效时间(在 \conf\web.xml中)

<session-config>  
        <session-timeout >30</session-timeout>  
</session-config>  

(4)maxThreads 连接数限制
maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。
即,在一个服务器上启动多个tomcat然后做负载均衡处理。

<Connector port="8080" address="localhost"
	maxThreads="2048" maxHttpHeaderSize="8192"
	emptySessionPath="true" protocol="HTTP/1.1"
	enableLookups="false" redirectPort="8181" acceptCount="100"
	connectionTimeout="20000" disableUploadTimeout="true" />

参考 https://www.cnblogs.com/jpfss/p/9367355.html
25. dos攻击怎么回事,怎么解决
DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络宽带攻击和连通性攻击。 [1]
DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果

可以通过退让策略和防火墙进行防范

26. 服务端是怎么验证用户的?生成的token有可能重复吗?
参考第四第五题 ,采用适当的算法token是不可能重复的。

27. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

public String translate (String str) {
	 String tempStr = “”;
	 try {
		 tempStr = new String(str.getBytes(“ISO-8859-1), “GBK”);  //输出ISO-8859-1的字符串
		 tempStr = tempStr.trim();
	 }
	 catch (Exception e) {
		 System.err.println(e.getMessage());
	 }
	 return tempStr;
 }

28. 登录怎样校验密码,海量用户同时登录怎么优化
这个根据就本人做过的项目是通过springSecurity框架进行验证的。
大量用户登录解决方案,我只能找到这个了。

29. 大型网站在架构上应当考虑哪些问题?
分层:分层是处理任何复杂系统最常见的手段之一,将系统横向切分成若干个层面,每个层面只承担单一的职责,然后通过下层为上层提供的基础设施和服务以及上层对下层的调用来形成一个完整的复杂的系统。计算机网络的开放系统互联参考模型(OSI/RM)和Internet的TCP/IP模型都是分层结构,大型网站的软件系统也可以使用分层的理念将其分为持久层(提供数据存储和访问服务)、业务层(处理业务逻辑,系统中最核心的部分)和表示层(系统交互、视图展示)。需要指出的是:(1)分层是逻辑上的划分,在物理上可以位于同一设备上也可以在不同的设备上部署不同的功能模块,这样可以使用更多的计算资源来应对用户的并发访问;(2)层与层之间应当有清晰的边界,这样分层才有意义,才更利于软件的开发和维护。

分割:分割是对软件的纵向切分。我们可以将大型网站的不同功能和服务分割开,形成高内聚低耦合的功能模块(单元)。在设计初期可以做一个粗粒度的分割,将网站分割为若干个功能模块,后期还可以进一步对每个模块进行细粒度的分割,这样一方面有助于软件的开发和维护,另一方面有助于分布式的部署,提供网站的并发处理能力和功能的扩展。

分布式:除了上面提到的内容,网站的静态资源(JavaScript、CSS、图片等)也可以采用独立分布式部署并采用独立的域名,这样可以减轻应用服务器的负载压力,也使得浏览器对资源的加载更快。数据的存取也应该是分布式的,传统的商业级关系型数据库产品基本上都支持分布式部署,而新生的NoSQL产品几乎都是分布式的。当然,网站后台的业务处理也要使用分布式技术,例如查询索引的构建、数据分析等,这些业务计算规模庞大,可以使用Hadoop以及MapReduce分布式计算框架来处理。

集群:集群使得有更多的服务器提供相同的服务,可以更好的提供对并发的支持。

缓存:所谓缓存就是用空间换取时间的技术,将数据尽可能放在距离计算最近的位置。使用缓存是网站优化的第一定律。我们通常说的CDN、反向代理、热点数据都是对缓存技术的使用。

异步:异步是实现软件实体之间解耦合的又一重要手段。异步架构是典型的生产者消费者模式,二者之间没有直接的调用关系,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,这对网站的扩展非常有利。使用异步处理还可以提高系统可用性,加快网站的响应速度(用Ajax加载数据就是一种异步技术),同时还可以起到削峰作用(应对瞬时高并发)。&quot;能推迟处理的都要推迟处理”是网站优化的第二定律,而异步是践行网站优化第二定律的重要手段。

冗余:各种服务器都要提供相应的冗余服务器以便在某台或某些服务器宕机时还能保证网站可以正常工作,同时也提供了灾难恢复的可能性。冗余是网站高可用性的重要保证。

30. 单拎出来的跨域问题,了解下浏览器同源(协议,域名,端口)政策,对后端的限制(AJAX等,前端问题暂不考虑),解决方法(JSONP,WebSocket,CORS),CORS(Cross-Origin Resource Sharing)相关内容,头字段 Origin,Access-Control-Allow-Origin 等;
这个可以参考我前不久总结的 :五种方式彻底解决跨域问题

总结:这三十道题我本人感觉明显难度提高了不少,对于我这种没经验的有点难搞,有些题我整答案并不好,类如安全方面,在此仅供参考,还有些问题不是三言两语就能答完的,需要更多的内容支撑或者说是要结合项目来讲,总而言之这次让我再次认识到还有大量知识是需要积累的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值