Java严选

1,假若有两个线程,一个线程A,一个线程B都会访问一个加锁方法,可能存在并发状况,可是线程B访问频繁,线程A访问次数不多,问如何优化。(而后面试官说有了解太重度锁和轻度锁吗)html

a,竞争资源不激烈,选择Synchronized:nginx

在资源竞争不是很激烈的状况下,Synchronized的性能要优于ReetrantLock,web

可是在资源竞争很激烈的状况下,Synchronized的性能会降低几十倍,可是ReetrantLock的性能能维持常态面试

b,优化,假设线程A和B不会并发访问,若是发生了并发,再膨胀为重量级锁:ajax

轻量级锁的核心思想就是“被加锁的代码不会发生并发,若是发生并发,那就膨胀成重量级锁算法

 

2.了解面向服务框架SOA,微服务吗?
面向服务的架构(SOA)是一个组件模型,它将应用程序的 不一样功能单元(称为服务)经过这些 服务之间定义良好的接口和契约联系起来。
接口是采用中立的方式 进行定义的,它应该独立于实现服务的硬件平台、操做系统和编程语言。这使得构建在各类各样的系统中的服务能够以一种统一和通用的方式进行交互。
微服务: 完全的组件化和服务化,Docker容器,进程隔离; 微服务的目的是有效的拆分应用,实现敏捷开发和部署 。
 
3.分布式系统如何负载均衡?如何肯定访问的资源在哪一个服务器上?
一.轮询。二.随机。三.最小响应时间。四. 最小并发数。五.一致性哈希。

http://tech.youzan.com/load-balancing-algorithm/sql

 

4.设计一个分布式负载均衡缓冲系统,如何快速定位到是那个服务器数据库

(使用key分段、一致性hash:http://blog.csdn.net/sparkliang/article/details/5279393 )编程

 

5.如何保证缓冲区和数据库之间的强一致性(使用加锁)
事务,锁,
“先淘汰缓存,再修改数据库”
“先操做缓存,在写数据库成功以前,若是有读请求发生,可能致使旧数据入缓存,引起数据不一致”
写流程:
(1)先淘汰cache
(2)再写db
读流程:
(1)先读cache,若是数据命中hit则返回
(2)若是数据未命中miss则读db
(3)将db中读取出来的数据入缓存
其实不须要让全局的请求串行化,而只须要“让同一个数据的访问能串行化”就行
在一个服务内,如何作到“让同一个数据的访问串行化”,只须要“让同一个数据的访问经过同一条DB链接执行”就行。
如何作到“让同一个数据的访问经过同一条DB链接执行”,只须要“在DB链接池层面稍微修改,按数据取链接便可”
获取DB链接的CPool.GetDBConnection()【返回任何一个可用DB链接】改成
CPool.GetDBConnection(longid) 【返回id取模相关联的DB链接】
可否作到同一个数据的访问落在同一个服务上?
能够,一样是用id去区分。
因为数据库层面的读写并发,引起的数据库与缓存数据不一致的问题(本质是后发生的读请求先返回了),可能经过两个小的改动解决:
(1)修改服务Service链接池,id取模选取服务链接,可以保证同一个数据的读写都落在同一个后端服务上
(2)修改数据库DB链接池,id取模选取DB链接,可以保证同一个数据的读写在数据库层面是串行的

 

6.HashMap高并发状况下会出现什么问题后端

高并发场景下HashMap在扩容时可能会造成闭环,致使死循环。

http://www.iteye.com/topic/962172

 

 7,ConcurrentHashMap如何扩容,内部结构?

 如何扩容?

扩容的时候首先会建立一个两倍于原容量的数组,而后将原数组里的元素进行再hash后插入到新的数组里。

为了高效ConcurrentHashMap不会对整个容器进行扩容,而只对某个segment进行扩容

 http://www.infoq.com/cn/articles/ConcurrentHashMap

 

8.对于SQL慢查询的优化?
(主要是从查询语句和数据库表设计两个方面来考虑,查询语句方面能够增长索引,增长查询筛选的限制条件;数据库表设计的时候能够拆分表,设计得更细粒度。可是后来才发现面试官想要的就是查询大量数据的慢查询问题的优化。。。)
先使用explain等找到耗时的地方,而后针对性的优化。SQL语句的优化。应该是须要针对业务数据进行一些特殊的优化。好比数据分类等。若是没法改变数据库设计,那就只能优化SQL语句,改变数据库参数设置了。

 数据库SQL优化大总结之 百万级数据库优化方案: 

http://database.51cto.com/art/201407/445934.htm

 

9,用过哪些容器?(tomcat)对比过Tomcat与其余服务器的区别吗?好比nginx?

nginx经常使用作静态内容服务和代理服务器,Tomcat可以 动态的生成资源并返回到客户端。
Nginx 应该叫作「HTTP Server」;而 Tomcat 则是一个「Application Server」,或者更准确的来讲,是一个「Servlet/JSP」应用的容器;
虽然Tomcat也能够认为是HTTP服务器,但一般它仍然会和Nginx配合在一块儿使用:
  • 动静态资源分离——运用Nginx的反向代理功能分发请求:全部动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。
  • 负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时能够启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能能够把请求经过算法分发到各个不一样的实例进行处理。

 

10,HashMap的内部实现

在分析jdk1.8后的HashMap源码时,HashMap的数据结构(数组+链表+红黑树),桶中的结构多是链表,也多是红黑树,红黑树的引入是为了提升效率。

HashMap数据结构:

http://www.cnblogs.com/huaizuo/p/5371099.html

  

11,ConcurrentHashMap内部是如何实现的?每一个segment是个什么数据结构?

ConcurrentHashMap内部是由多个segment组成,每一个segment是一个HashEntry数组,每一个HashEntry是链表。
实现同步的方法是segment继承了ReentrantLock类;
Hashtable实现线程安全的方法是使用synchronized。
 

12.tomcat均衡方式 ,netty

Netty是什么?

本质:JBoss作的一个Jar包

目的:快速开发高性能、高可靠性的网络服务器和客户端程序

优势:提供异步的、事件驱动的网络应用程序框架和工具

通俗的说:一个好使的处理Socket的东东

http://lippeng.iteye.com/blog/1907279

http://blog.csdn.net/kobejayandy/article/details/11493717

 

13,有一些爬虫IP不断的访问美团网站,如今美团设定一个IP5分钟以内访问美团网站超过100次,就断定为爬虫IP,怎么设计这个程序?若是100改为10000,怎么设计?

读取log中的IP记录,并统计每一个IP的访问次数,以5分钟为分隔,超过100的IP就是爬虫IP,没有超过的在5分钟的时候清零,继续统计。

 

14.负载均衡如何实现Seesion共享
(1)咱们能够把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。
(2) 会话保持:Session保持是咱们见到最多的名词之一,经过会话保持,负载均衡进行 请求分发的时候保证每一个客户端固定的访问到 后端的同一台应用服务器。会话保持方案在全部的负载均衡都有对应的实现。并且这是在负载均衡这一层就能够解决Session问题。
(3)会话复制:将每一个应用服务器中的Session信息复制到其它服务器节点上。(不可取)
(4) 会话共享:对于Session来讲,确定是频繁使用的,虽然你能够把它存放在数据库中,可是真正生产环境中我更推荐存放在性能更快的 分布式KV数据中,例如:Memcached和Redis
 

15.对后台的优化有了解吗?好比负载均衡。

Nginx+Tomcat负载均衡: http://blog.csdn.net/wang379275614/article/details/47778201

异步处理(消息缓冲服务器): http://blog.csdn.net/shaobingj126/article/details/50585035

缓存(Redis,Memcache),NoSQL,数据库优化,存储索引优化。

 

16.DNS均衡

智能DNS能够经过多种负载均衡策略来将客户端须要访问的域名解析到不一样的数据中心不一样的线路上,好比经过IP地理信息数据库解析到最近的线路,或者权衡不一样线路的繁忙度解析到空闲的线路等等。
将客户端的访问引导到不一样的机器上去,使得不一样的客户端访问不一样的服务器,从而达到负载均衡的目的。
1.全局的运营商+区域层面的负载均衡,主要是就近调度原则;
2.机房或集群内部的负载均衡,主要实现流量均摊、合理利用资源等;

负载均衡之DNS域名解析 : http://blog.csdn.net/cywosp/article/details/38017027

 

17.nginx事件处理模型

异步、事件循环;
nginx事件驱动:通讯机制采用epoll模型,支持更大的并发链接。
经过异步非阻塞的事件处理机制,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级。
传统web服务器的瓶颈缘由:进程切换占用过多资源+进程睡眠浪费资源
nginx解决之道:单个进程+多阶段异步处理
http://blog.csdn.net/u013009575/article/details/17471615
 
18.介绍三级缓存原理
内存 > 硬盘 > 网络

 

19.int i=0; Integer i1=0; Integer i2=new Integer(0); Integer i3=new Integer(0);

        System.out.println(i==i1);//true 指向堆中的基本类型时,直接取到其值。
        System.out.println(i==i1);//true指向堆中的基本类型时,直接取到其值。
        System.out.println(i1==i2);//false指向堆中的 对象 类型时,直接取到其地址。
        System.out.println(i3==i2);//false指向堆中的 对象 类型时,直接取到其地址。
        System.out.println(i3.equals(i2));//true指向堆中的 对象 类型时,equals取到其值。

20.输出用户表里重名的用户,说sql语句
 select myname, count(*) from tab group by myname having count(*) > 1
21.说一下ajax 
是指一种建立交互式 网页应用的网页开发技术。经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。
优势:由于是异步的,因此不会阻塞用户操做;
局部刷新,这样就可以使网页从服务器请求少许的信息,而不是整个页;
相关文章
相关标签/搜索