1,假如有两个线程,一个线程A,一个线程B都会访问一个加锁方法,可能存在并发情况,但是线程B访问频繁,线程A访问次数很少,问如何优化。(然后面试官说有了解过重度锁和轻度锁吗)

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

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

但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态

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

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

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

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

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 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
优点:因为是异步的,所以不会阻塞用户操作;
局部刷新,这样就可使网页从服务器请求少量的信息,而不是整个页;

Java严选的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 严选 Android 路由框架优化(下篇)

    3 router 框架优化 3.1 apt 生成代码量过大问题优化 思考框架本身,其实可以发现仅有 router 映射表是需要根据注解编译生成的,其他的全部代码都是固定代码,完全可以 sdk 中直接编 ...

  3. 严选 Android 路由框架优化(上篇)

    0 背景 早前严选 Android 工程,使用原生 Intent 方式做页面跳转,为规范参数传递,做了编码规范,使用静态方法的方式唤起 Activity public static void star ...

  4. 2020年JAVA大厂笔经面经

    个人简介 ​ Java后台开发方向. 非计算机专业硕士,专业涉及到一些开发. 实验室项目主要是Java Web系统,挖掘小亮点. 无实习经验. 闲话唠嗑 ​ 回顾这几个月,宛若梦一场. 一开始心态不好 ...

  5. 感觉学java学到自己的瓶颈期了,各种框架乱七八糟,感觉好乱。该怎么办!?

    通常我们都会有这样的一个疑问! 解决办法 这时候,你需要的是分清条理,重整知识架构 GitHub开源社区有一个这样的项目,我觉得非常好,很适合Java有基础但是想进阶提升的人. 项目简介 本期介绍的开 ...

  6. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  7. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  8. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  9. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

随机推荐

  1. Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比(转)

    前言在分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. 概念MQ简 ...

  2. 【51nod 2004】终结之时

    题目大意 "将世界终结前最后的画面,深深刻印进死水般的心海." 祈愿没有得到回应,雷声冲破云霄,正在祈愿的洛天依受到了极大的打击. 洛天依叹了口气,说:"看来这个世界正如 ...

  3. 【leetcode】1283. Find the Smallest Divisor Given a Threshold

    题目如下: Given an array of integers nums and an integer threshold, we will choose a positive integer di ...

  4. Babel 转译 class 过程窥探--------引用

    // Shape 类function Shape(id, x, y) {    this.id = id;    this.setLocation(x, y);}// 设置坐标的原型方法Shape.p ...

  5. 数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++

    数据结构图之三(最短路径--迪杰斯特拉算法)   [1]最短路径 最短路径?别乱想哈,其实就是字面意思,一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两 ...

  6. Spring Boot教程(三十六)使用MongoDB数据库(2)

    快速开始使用Spring-data-mongodb 若MongoDB的安装配置采用默认端口,那么在自动配置的情况下,我们不需要做任何参数配置,就能马上连接上本地的MongoDB.下面直接使用sprin ...

  7. MySQL的安装教程

    一.MYSQL的安装 首先登入官网下载mysql的安装包,官网地址:https://dev.mysql.com/downloads/mysql/ 一般下载这个就好,现在的最新版本是5.8,但是据说已经 ...

  8. linux 分区管理

    1. 查看系统中硬盘的设备 [root@centos6 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb 可以看出,系统有 ...

  9. (十三)C语言之break、continue

  10. 软工团队Git现场编程实战

    组员职责分工 成员 分工 鲍子涵 分配职责,整合代码 吴宜航 UI设计与实现 钟博 UI设计与实现(Main Coder) 黄海东 数据整理 王镇隆 前端api接口分析和使用(Main Coder) ...