JAVA后台面经.pdf

5星(超过95%的资源)
所需积分/C币:4 2019-08-31 20:29:33 4.04MB PDF
191
收藏 收藏
举报

牛客上收集的JAVA面经,自己汇总并给出了答案,一共有213页,秋招提前批全靠这个面经,提前批收货12个offer。
缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的 缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面 讲述。 架构方面的缓存,对 Apache比较熟悉的人都能知道 Apache提供了自己的 缓存模块,也可以使用外加的 Squid模块进行缓存,这两种方式均可以有效的提 高 Apache的访问响应能力。 网站程序开发方面的缓存, Linux上提供的 Memory cache是常用的缓存接 口,可以在web开发中使用,比如用Java开发的时候就可以调用 Memory Cache 对一些数据进行缓存和通讯共享,一些大型社区使用了这样的架构。另外,在使 用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear 的 Cache模块,Java就更多了,net不是很熟悉,相信也肯定有。 镜像 镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以 解决不同网络接入商和地域带来的用户访问速度差异,比如 ChinaNet和 EduNet 之间的差异就促使了很多网站在教育网內搭建镜像站点,数据进行定时更新或 者实时更新。在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解 决架构和产品可选。也有亷价的通过软件实现的思路,比如 Linux上的 rsync等 工具 负载均衡 负载均衡将是大型网站解决高负荷访问和大量并发请求采用的高端解决办 法 负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,我个 人接触过一些解决方法,其中有两个架构可以给大家做参考。 (1)、硬件四层交换 第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业 务流,将整个区间段的业务流分配到合适的应用服务器进行处理。 第四层交换功能就像是虚IP,指向物理服务器。它传输的业务服从的协议 多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基 础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端 口地址来决定,在第四层交换中的应用区问则由源端和终端P地址、TCP和 UDP端口共同决定。 在硬件四层交换产品领域,有一些知名的产品可以选择,比如 Alteon、F5 等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理 能力。“ Yahoo中国”当初接近2000台服务器,只使用了三、四台 Alteon就搞 定了。 软件四层交换 大家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交 换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。但是满足 定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看 你配置的熟悉能力。 软件四层交换我们可以使用 Linux上常用的IVS来解决;LVS就是 Linux Virtual server,他提供了基于心跳线 heartbeat的实时灾难应对解决方案,提高系 统的强壮性,同时可供了灵活的虚拟ⅤIP配置和管理功能,可以同时满足多种 应用需求,这对于分布式的系统来说必不可少。 个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上 搭建 squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构 低成本、高性能还有很强的扩张性,随时往架构里面增减节点都非常容易。 对于大型网站来说,前面提到的每个方法可能都会被同时使用到,这里介绍 得比较浅显,具体实现过程中很多细节还需要大家慢慢熟悉和体会。有时一个很 4 小的 squid参数或者 apache参数设置,对于系统性能的影响就会很大。 CDN加速技术 CDN的全称是内容分发网络。其目的是通过在现有的 Internet中增加一层 新的网络架构,将网站的內容发布到最接近用户的网络“边缘”,使用户可以就近 取得所需的内容,提高用户访问网站的响应速度。 CDN有别于镜像,因为它比铙像更智能,或者可以做这样一个比喻:CDN= 更智能的镜像+缓存+流量导流。因而,CDN可以明显提高 Internet网络中信息 流动的效率。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均 等问题,提高用户访问网站的响应速度。 CDN的类型特点 镜像站点( Mirror site),是最常见的,它让内容直接发布,适用于静态和准 动态的数据同步。但是购买和维护新服务器的费用较高,还必须在各个地区设置 镜像服务器,配备专业技术人员进行管理与维护。对于大型网站来说,更新所用 的带宽成本也大大提高了 高速缓存,成本较低,适用于静态内容。 Internet的统计表明,超过80%的 用户经常访问的是20%的网站的内容,在这个规律下,缓存服务器可以处理大 部分客户的静态请求,而原始的服务器只需处理约20%左右的非缓存请求和动 态请求,于是大大加快了客户请求的响应时间,并降低了原始服务器的负载。 CDN服务一般会在全国范围内的关键节点上放置缓存服务器。 专线,让用户直接访问数据源,可以实现数据的动态同步。 2常见的数据库引擎 Inno dB事务型数据库首选引擎,支持事务安全表,支持行锁定和外键。 MyISAM基于ISAM储存引擎,并对其进行扩展,它是在WEB、数据仓储 和其他应用环境下最常使用的存储引擎之一。 MEMORY存储引擎: MEMORY存储引擎将表中的数据存储到内存中,为 查询和引用其他表数据提供快速访问。 存储引擎的对比 特性 noDB MyISAM MEMORY 事务安全 支持 无 存储限制 64TB 有 空间使用 低 内存使用 高高低 低 插入数据的速度 无有低高高无 对外键的支持 支持 无 1.3 InnoDB的特点及优点 为 MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容 存储引擎 Innode锁定在行级并且也在 SELECT语句中提供一个类似 Oracle的非锁 定读。 读写阻塞与事务隔离级别相关 具有非常高效的缓存特性,能缓存索引,也能缓存数据 整个表和主键以 Cluster方式存储组成一颗平衡树 所有 Secondary Index都会保存主键信息 支持分区,表空间类似于 Oracle数据库 支持外键约束不支持全文索引,5.5之前支持,后面不再支持. 和 MyISAM相比,noDB对于硬件资源要求比较高 6 1.4JAVA高并发,如何解决,什么方式解决 对丁我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑 相关的并发访问问题了。而并发问题是绝大部分的程序员义疼的问题, 请求 index Rewriter action的 servlet 请求inde 如果静态页面 显示静态页面 存在 请求 index. do 生成静态页面 显示静态灭面 同步和异步的区别和联系 同步就是一件事,一件事情一件事的做 异步就是,做一件事情,不引响做其他事情。 、如何处理并发和同步 处理并发和同同步问题主要是通过锁机制,一种是代码层次上的,如中的 同步锁,典型的就是同步关键字 ,另外一种是数据库层次上的, 比较典型的就是悲观锁和乐观锁。 1.5 HashMap的实现原理-老旧 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,査找等基础操作执 行性能 数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复 杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数 组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查 找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删 除操作,涉及到数组元素的移动,其平均复杂度也为O(n) 线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需 处理结点间的引用即可,时间复杂度为O(1),而查找操作需要遍历链表逐一进 行比对,复杂度为O(m) 叉树:对一棵相对平衡的有序二叉树,对其进行插入,查找,删除等操作 平均复杂度均为O(logn) 哈希表:相比上述几种数据结构,在哈希表中进行添加,删除,査找等操作, 性能十分之高,不考虑哈希冲突的情氿下,仅需一次定位即可完成,时间复杂度 为O(1),接下来我们就来看看哈希表是如何实现达到惊艳的常数阶O(1)的 我们知道,数据结构的物理存储结构只有两种:顺序存储结构和链式存储结 构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中,也这两种物 理组织形式),而在上面我们提刭过,在数组中根据下标查找某个元素,一次定 位就可以达到,哈希表利用了这和特性,哈希表的主干就是数组。 哈希冲突 前面我们提到过,哈希函数的设计至关重要,好的哈希函数会尽可能地保证 计算简单和散列地址分布均匀,但是,我们需要清整的是,数组是一块连续的固 定长度的内存空间,再好的哈希函数也不能保证得到的存储地址绝对不发生冲 突。那么哈希冲突如何解决呢?哈希冲突的解决方案有多种:开放定址法(发生 冲突,继续寻找下一块未被占用的存储地址),再散列函数法,链地址法,而 HashMap即是采用了链地址法,也就是数组+链表的方式。 HashMap的主干是一个 Entry数组。 Entry是 HashMap的基本组成单元,每 个Enry包含一个key- value键值对。 / HEymAn的主干数组,可以看到就是个Enxy数组,初始值为空数组1.主干组的长度定是2的次幂,至一为什么这么做,后面会有详细分析 LIaIs-e1lL EILLyXI,v[] Lale =(ELLLy E, V>[]) =MET- IABLE Entry是 Hash Ma中的个静态内。代如卜 static clase Entry.K, vS -mplsmmeate Map EntryE, v>t Exxy<g,W>mxt:/存偿向下一个 Entry的引用,竿链卖结构 irt.ha=h;/刘key的 rancor=值行n=h运算后得到的值,存偕在Fntr2,避兔重复计算 Creates new entry E1L-y(inL Hr R k, Vv, EiL-R, 75 11) 简单来说, HashMap由数组+链表组成的,数组是 HashMap的主体,链表 则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前 entry的next指向nul),那么对于查找,添加等操作很快,仅需一次寻址即可 如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历 链表,存在即覆盖,否则新增;对于査找操作来讲,仍需遍历链表,然后通过key 对象的 equals方法逐一比对查找。所以,性能考虑, HashMap中的链表出现越 少,性能才会越好。 如果key为null,存储位置为 tablc[0]或 table[0的冲突链上 当发生哈希冲突并且size大于阈值的时候,需要进行数组扩容,扩容时, 需要新建一个长度为之前数组2倍的新的数组,然后将当前的Enry数组中的元 素全部传输过去,扩容后的新数组长度为之前的2倍,所以扩容相对来说是个 耗资源的操作。 1.6 HashMap和 Hashtable的区别 Hash Map和 Hashtable都实现了Map接口,但决定用哪一个之前先要弄清 楚它们之间的分别。主要的区别有:线程安全性,同步( synchronization),以及速 度 HashMap几乎可以等价于 Hashtable,除了 HashMap是非 synchronized的, 并可以接受nul( HashMap可以接受为nul.键值(key)和值( value),而 Hashtable 则不行)。 HashMap是非 synchronized,而 Hashtable是 synchronized,这意味着 Hashtable是线程安全的,多个线程可以共享一个 Hashtable;而如果没有正确的 同步的话,多个线程是不能共亨 HashMap的。Java5提供了 ConcurrentHashMap 它是 HashTable的替代,比 HashTable的扩展性更好。 另一个区别是 HashMap的迭代器( Iterator)是fail-fast迭代器,而 Hashtable 的 enumerator迭代器不是fai-fast的。所以当有其它线程改变了 HashMap的结 构(增加或者移除元素),将会抛出 ConcurrentModification Exception,但迭代器 本身的 remove(方法移除元素则不会抛出 ConcurrentModificationException异常 但这并不是一个一定发生的行为,要看JVM。这条同样也是 Enumeration和 Iterator的区别。 由于 Hashtable是线程安全的也是 synchronized,所以在单线程环境下它比 HashMap要慢。如果你不需要同步,只需要单一线程,那么使用 HashMap性能 要好过 Hashtable HashMap不能保证随着时间的推移Map中的元素次序是不变的 HashMap可以通过下面的语句进行同步 Map m= Collections. s ynchronizeMap(hashMap) 1. 7 Concurrent HashMap JAVA7中的 ConcurrentHashMap: 整个 ConcurrentHash Map由一个个 Segment组成, Segment代表”部分 或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我 很多地方用了“糟”来代表一个 segment 10

...展开详情
试读 127P JAVA后台面经.pdf
立即下载
限时抽奖 低至0.43元/次
身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
dc2016 不错,特别全,特别有用。不止是java,还有操作系统、网络等。
2020-03-06
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
JAVA后台面经.pdf 4积分/C币 立即下载
1/127
JAVA后台面经.pdf第1页
JAVA后台面经.pdf第2页
JAVA后台面经.pdf第3页
JAVA后台面经.pdf第4页
JAVA后台面经.pdf第5页
JAVA后台面经.pdf第6页
JAVA后台面经.pdf第7页
JAVA后台面经.pdf第8页
JAVA后台面经.pdf第9页
JAVA后台面经.pdf第10页
JAVA后台面经.pdf第11页
JAVA后台面经.pdf第12页
JAVA后台面经.pdf第13页
JAVA后台面经.pdf第14页
JAVA后台面经.pdf第15页
JAVA后台面经.pdf第16页
JAVA后台面经.pdf第17页
JAVA后台面经.pdf第18页
JAVA后台面经.pdf第19页
JAVA后台面经.pdf第20页

试读结束, 可继续阅读

4积分/C币 立即下载