简历上可书写:熟悉大型网站架构流程、负载均衡、集群、常用Web安全反攻手段。
Java高级工程师面试宝典
作者:余胜军
QQ644064779
微信:yushengjun644
网站:蚂蚁课堂 www.itmayiedu.com 其他网站转载必须标注来源蚂蚁课堂,否则侵权,扯上法律责任。
标注:Java高级工程师面试宝典只适合求职者面Java高级或资深工程师级别!
说说大型网站架构特点?
1.高并发、大流量(这个不用说,要不也不叫大型网站了)
2.高可用(用户多,所以基本是要求7*24不间断服务了)
3.海量数据(用户行为中产生的数据必然会很多)
4.用户分布广泛,网络情况复杂(这个全国各地的网络情况确实比较复杂)
5.安全环境恶劣(由于面向的是公众的网络,所以各种安全问题应该都会有)
6.需要快速变更,发布频繁(这个。。。互联网公司的节奏一直比较快)
7渐进式发展(在做的过程中可能需要多次试错和迭代)
说一下大型网站架构演变过程
1.初始阶段,这个阶段可能应用服务器、文件服务器、数据库所有的资源都在同一台服务器上
2.应用服务器和数据库服务器拆分
3.使用缓存改善网站的性能(貌似互联网架构中,缓存是离不开的话题了)
4.使用应用服务器的集群来改啥网站的并发处理能力(不过一般是同构的集群,伪集群了)
数据库读写分离(由专门的机器提供写服务,专门的机器提供读服务,如果读写比例很大,可以多态读服务器)
5.使用反向代理和CDN加速网站响应(这两个原理都是缓存,CDN部署在网络提供商的机房,使用户在请求网站服务时,可以在距离自己最近的机房获得数据,反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器缓存用户的请求资源,可以直接返回给用户)
使用分布式文件系统和分布式数据库系统
使用NOSQL和搜索引擎
业务拆分(这个更多的是业务层面的规划了)
分布式服务(我简单划分可以使消息系统和同步的RPC调用,消息的话是异步的解决方案,
大型网站架构模式?
分层,分层是应用系统中最常见的一种架构模式,在计算机世界中无处不在,可以更好的把庞大的软件系统切分成不同的部分,便于分工合作和维护。分层中的挑战就是合理规划层次的边界和接口,严格遵守分层的约束,禁止跨层次的调用以及逆向调用。
分割,分割在纵向层面对软件进行切分。比如网购系统,在应用层,分割为交易、物流、优惠、库存等系统。
分布式,分割和分层便于切分后的模块能够便于分布式部署。分布式应用和服务、分布式文件系统、分布式数据和存储、分布式计算、分布式配置、分布式锁。
集群,多台服务器部署相同的应用构成一个集群,保证负载均衡的同时来提升系统的可用性,互相灾备。
缓存,CDN、反向代理、本地缓存、分布式缓存、数据库缓存、浏览器缓存
异步,异步架构中最典型的就是生产者和消费者模式,要解耦,就用异步,异步离不开队列,有效的利用异步,能够消除并发访问的高峰。
冗余,在集群中机器数量达到一定数量的时候,部分机器宕机会是常态,因此需要数据冗余备份,数据库定期备份称之为冷备份,主从分离实时同步称之为热备份。
自动化,发布过程自动化、代码管理自动化、自动化测试、自动化安全扫描、自动化低级bug扫描、自动化监控、自动化报警、自动化失效转移、自动化降级。
安全,互联网开放的特性注定了在安全方面提升了很大的挑战。
好的设计绝对不是模仿,不是生搬硬套一个特定的模式,而是对问题深刻理解之上的创造和创新。
说说网站优化方案?
Web前端性能优化
-
减少Http请求(http为无状态,每次请求需要重新建立通信链路)
-
使用浏览器缓存(通过设置HTTP头中的Cache-Control和Expires属性)
-
启用压缩,服务器端对文件进行压缩,在浏览器端对文件进行解压缩
-
CSS放在页面最上面,js文件放在最下面(浏览器会在下载完所有的CSS之后才开始对整个页面渲染,加载JS后立即执行)
-
减少Cookie传输
-
使用CDN加速和反向代理加速
应用服务器性能优化
-
分布式缓存(优先使用缓存优化性能)
-
异步(消息队列具有很好的消峰作用,使用异步处理,将短时间的高并发产生的事务消息存储在消息队列中)
-
使用集群
-
代码优化
-
多线程(线程安全问题:使用无状态的对象、使用局部对象、并发访问资源添加锁)
-
资源复用(单例模式和对象池<对象创建比较耗时的情况下使用对象池能够提升性能>)
-
合理使用数据结构
-
JVM中GC的优化
-
-
存储系统的性能优化
合理使用缓存
-
频繁修改的数据不适合使用缓存
-
没有热点的访问,数据缓存没有意义
-
数据的不一致和脏读
-
缓存的可用性
-
缓存如何预热
-
缓存穿透
你说说怎么保证网站安全性
-
XSS攻击
-
CSRF攻击
-
SQL注入攻击
-
代码可能存在安全隐患扫描
-
线上日志监控和安全枚举回放日志
-
安全漏洞扫描
信息加密技术
-
单向散列加密(指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列的过程是单向的)
-
例如常见的MD5
-
输入的任何微小变化可能导致结果完全不同
-
-
对称加密(加密和解密使用的密钥是同一个)
-
特点是算法简单,加密解密效率高,系统开销小
-
缺点是使用同一个密钥,有安全隐患
-
例如DES算法和RC算法
-
-
非对称加密(加密和解密不是用一个密钥,例如RSA算法)
-
信息安全传输
-
-
发送者A通过公开途径获得信息接受者B的公钥,对信息进行加密,然后通过非安全的通道把密文发送给B
-
B得到密文之后,用自己的私钥解密,获得明文信息
-
-
数字签名 (和信息安全传输相反)
-
-
签名者用自己的私钥对信息进行加密,然后发送给对方
-
接收方用签名者的公钥对信息进行解密,获得明文信息,
-
由于私钥只有签名者拥有,信息具有不可抵赖性,具有签名的性质
-
-
常用的算法有RSA,HTTPS中传输的浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥
-
分布式事务如何处理?
什么是分布式?及优缺点
分布式架构:多个子系统相互协作才能完成业务流程。系统之间需要进行通信。
分布式架构:
把系统按照模块拆分成多个子系统。
优点:
1、把模块拆分,使用接口通信,降低模块之间的耦合度。
2、把项目拆分成若干个子项目,不同的团队负责不同的子项目。
3、增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
4、可以灵活的进行分布式部署。
缺点:
1、系统之间交互需要使用远程通信,接口开发增加工作量。
2、各个模块有一些通用的业务逻辑无法共用。
什么是集群?
集群:同一个工程部署到多台服务器上。
集群如何同步会话状态
什么是负载均衡?
如果一个服务由多条服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。
可以是使用nginx实现放在均衡
upstream tomcat2 {
server 192.168.25.148:8081;
server 192.168.25.148:8082;
}
可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1
upstream tomcat2 { server 192.168.25.148:8081; server 192.168.25.148:8082 weight=2; } |
负载均衡的实现原理?
轮训(RR)
加权轮训(在轮训的基础上,按照配置的权重将请求分发)
随机
最少连接(记录每个应用服务器正在处理的连接数,根据服务器当前的资源使用情况)
源地址散列(根据请求的IP地址进行Hash计算,这样同一个IP会在同一个服务器)
以后慢慢版本完善