面试的,或许用的着

哎呦,哪位大哥能帮我把红色的题目回答了吧?

问:谈谈WEB应用中大规模用户高并发需求的网站架构一般原则?
答:把用户的访问尽可能的往前推。能缓存在用户本地的就不要让他去访问CDN;能缓存在CDN服务器的,就不要让CDN去访问静态 服务器;能访问静态服务器的,就不要去访问动态服务器;能访问缓存的,就不要去访问数据库页面。

问:如果新增数据也放在cache中,如何保证出现异常时数据不丢失??
答:在通过定时的同步操作来更新到磁盘。可以在同步结束时发 送一个应答,当收到应答时才证明同步成功了。


问:请用你知道的知识描述一下GC的工作原理?如何GC是如何分代的?Concurrent包的数据结构基于都有哪些?
答:GC是JVM的垃圾回收器。JVM是通过判定对象是否可达来确定对象是否需要被回收。如果对象无法从GC root往下到达,那么它 就是可以被回收。常量,静态对象,方法参数等都会作为GC root。GC会根据在不同的代中采用的算法通常不同。主要有“标记-清除”和“标记-整理”两种方式。“标记-清除”会先给对象做标记,等一下次GC时进行回收。而“标记-整理”通常是将不回收的对象拷贝到另一个内存区,然后释放原来的内存区。GC里面分为新生代和老年代。新生代又分eden,from surviover和to surviover三个区。eden存放最新被创建的对象,minor GC是对于新生代的GC,回收过程是把有效的对象从eden区copy到 surviover区。默认的eden和surviover的比率8:1.如果serviover的内存不够,那么就需要老生代的空间来协助。full GC是发生在老年代,由于老年代的对象特性,通常采用“标记-清除”算法。一旦发现full GC,所有的线程就都停下来。Concurrent包包含了支持线程并发的数据结构,如Java7中有concurrentHashMap, ArrayBlockingQueue,Executor等。

问:java的内存模型是怎么样的?
答:Java内存分为主内存和线程的工作内存。所有线程的变量的变化都是在工作内存进行的,除非变量被是volatile声明的。如果想让其他线程看到变量的变化,就需要将工作内存的值更新到主内存中。

问:volatile关键字的关键字是做什么作用的?
答:告诉CPU不要将该值放在线程工作内存中,而是直接更新到主存。使该变量的值变化对于其他线程是可见的,而无需进行工作内存与主内存的同步。但volatile声明的变量只保证了并发的可见性,而不具备互斥性。

问:进入同步块和离开同步块时,变量是如何同步的?
答:当线程进入同步块时,会从主内存获得最新值,同时JVM对于同步块内的对象进行加锁。如果其他线程想请求更新,只能等待锁释放。在退出同步块时,将对象的更新同步到主内存中,然后释放锁。

问:hibernate中,l1,l2的cache,给一个经验值?
答:HB中的L1是session缓存,缓存查询过的对象。L2是session factory缓存,是跨session的。由于L2跨了不同的session,这样即使本次session结束,下次再查还能再使用cache。正是这样的特性也带来了cache失效和更新时候的性能问题。

问:如何做性能调优,举个例子?
答:性能调优的前提是找到性能的瓶颈在哪里。根据业务的不同性能瓶颈也不尽相同,通常来说是以空间换时间,以时间换空间,并行,或是简化代码。如侧重于计算的业务log分析,要考虑并行的能力和缓存。如果是侧重磁盘IO的业务,如文件下载,视频播放等,则要考虑分流,压缩与缓存。如果是网络的瓶颈,可以考虑调用端缓存,将计算往数据端推,压缩传输数据。如果是数据库瓶颈,可考虑内存映射,读写分离以及分库分表。

问:JVM的优化经验,常用的优化策略?
答:根据业务调整JVM的参数以及GC器,如增加新生代空间或是选择GC器。修改锁设置。减少GC升级。防止堆震荡。

问:对高并发的理解,如何解决用户高并发问题?
答:高并发指的是在同一时刻,有大量的请求发送给服务器处理。对于高并发的处理原则有以下几点:1,客户端处理,能在客户 端做的事情就不要发送到服务器端,比如字段验证。2,使用CDN,分散请求到不同地域或类型的服务器上,3,动态内容静态化, 对于频繁查询的相同内容生成静态页面,利用代理服务器如lighttp, Squid等,4,使用缓存,从缓存中查询结果,尽量不要直接 查询数据库。

问:对负载均衡的理解,介绍一下常用的负载均衡模型?
答:负载均衡是将大量请求分配到不同的服务器上处理,以达到每个计算节点都发挥近似的处理性能。常用的负载均衡模型有
Network Address Translate, Direct Routing和IP Tunneling。NAT是通过调度器修改报文目标地址来实现的,DR则是通过修改报 文的MAC地址来实现的,TUN则是通过IP隧道技术将请求的报文转发给真实服务器,响应则是真实服务器直接发送给客户机。

问:谈谈什么是soa,它的特点与使用场景?
答:SOA指的是面向服务的架构模式。它的特点是将不同的业务分离出来,做成单独的服务,以实现服务级别的重用,为不同的上 层系统提供相同的业务处理。优点是业务解耦,提高单一服务的处理能力,使业务结构调整根据灵活性。缺点是即便很小的业务功 能也需要跨多个服务去实行,当访问规模比较小的时候,在效率上比较低。另外需要提供服务发现的机制,调用者需要知道哪里有服务提供。目前主要SOA通信协议有XML, UDDI, WSDL,SOAP和HTTP


问:淘宝的高PV是如何处理的?数据量大到过一个机器容量如何处理?
答:浏览器缓存+CDN+静态页面+缓存+分布式系统。当数据量超过单台机器的处理能力后,就需要用集群来处理,文件处理通常选择是分布式文件系统。如果是数据库,可先分库,采用主从结构,还可以分表,先根据业务进行垂直拆分,再根据id散列或是时间戳进行水平分拆。。

问:应用服务器之间如何单点登录,SSO?
答:单点登录意味着要讲应用程序的认证过程转移到当个独立的服务器或集群上来。通常的做法是创建单点登录服务器,如使用CAS等系统来统一处理认证过程。当客户端向应用系统发起登录请求时,应用系统提供一个重定向响应,客户端被重定向到CAS服务器上进行登录。登录成功,CAS服务器产生一个ticket给客户端,客户端将这个ticket发送给应用系统,应用系统将ticket发送给CAS服务器进行认证如果成功,CAS服务器发送用户名和PGT给应用系统。

posted @ 2015-05-21 18:31  moonz-wu  阅读(1317)  评论(2编辑  收藏  举报