Java严选
1,假如有两个线程,一个线程A,一个线程B都会访问一个加锁方法,可能存在并发情况,但是线程B访问频繁,线程A访问次数很少,问如何优化。(然后面试官说有了解过重度锁和轻度锁吗)
a,竞争资源不激烈,选择Synchronized:
在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,
但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
b,优化,假设线程A和B不会并发访问,如果发生了并发,再膨胀为重量级锁:
轻量级锁的核心思想就是“被加锁的代码不会发生并发,如果发生并发,那就膨胀成重量级锁。
http://tech.youzan.com/load-balancing-algorithm/
4.设计一个分布式负载均衡缓冲系统,如何快速定位到是那个服务器
(使用key分段、一致性hash:http://blog.csdn.net/sparkliang/article/details/5279393 )
6.HashMap高并发情况下会出现什么问题
高并发场景下HashMap在扩容时可能会形成闭环,导致死循环。
http://www.iteye.com/topic/962172
7,ConcurrentHashMap如何扩容,内部结构?
如何扩容?
扩容的时候首先会创建一个两倍于原容量的数组,然后将原数组里的元素进行再hash后插入到新的数组里。
为了高效ConcurrentHashMap不会对整个容器进行扩容,而只对某个segment进行扩容
http://www.infoq.com/cn/articles/ConcurrentHashMap
数据库SQL优化大总结之 百万级数据库优化方案:
http://database.51cto.com/art/201407/445934.htm
9,用过哪些容器?(tomcat)对比过Tomcat与其他服务器的区别吗?比如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是个什么数据结构?
12.tomcat均衡方式 ,netty
Netty是什么?
本质:JBoss做的一个Jar包
目的:快速开发高性能、高可靠性的网络服务器和客户端程序
优点:提供异步的、事件驱动的网络应用程序框架和工具
通俗的说:一个好使的处理Socket的东东
http://lippeng.iteye.com/blog/1907279
http://blog.csdn.net/kobejayandy/article/details/11493717
读取log中的IP记录,并统计每个IP的访问次数,以5分钟为分隔,超过100的IP就是爬虫IP,没有超过的在5分钟的时候清零,继续统计。
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域名解析 : http://blog.csdn.net/cywosp/article/details/38017027
17.nginx事件处理模型
http://blog.csdn.net/u013009575/article/details/17471615
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取到其值。
最新文章
- TextView中的部分文字响应点击事件
- 使用VNET-to-VNET连接Microsoft Azure国际版和中国版
- Eculid算法 以及Extend_Eculid算法 证明及实现
- 轻快的VIM(三):删除
- Mongo DB Study: first face with mongo DB
- 0517 Scrum 项目4.0
- The Longest Increasing Subsequence (LIS)
- Zookeeper的功能以及工作原理
- Java中的排序算法(2)
- javascript 四舍五入
- rsyslog 日志格式和输出
- Java的LinkedList详解,看源码之后的总结
- c# 公元转农历
- 安装了nodejs后在命令行运行npm报错
- restFul接口设计规范
- oracle unix时间戳与date转换
- 画一条0.5px的边
- Replication--复制与CDC和镜像
- Java发送短信
- C#线程同步技术(一) lock 语句
热门文章
- HDU-3374-String Problem(最小表示法, KMP)
- gulp的作用,安装,使用
- Confluence 6 移动一个文件到其他页面
- 十进制数转N进制c++实现
- ZAP-Queries【luogu3455】
- D. Eternal Victory(dfs + 思维)
- 四、SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换
- Linux之tomcat安装与配置
- MySQL_(Java)分页查询MySQL中的数据
- TypeScript----接口和泛型