美团面试,360面试 ,滴滴面试,阿里面试,百度面试,京东面试,搜狗面试:

1、基础知识:
    一、CurrentHashMap的数据结构,Java1.8 与 java 1.7的区别,增长了那些特性
  这个实际上是考了一下编程思路,hashMap(链表+数组)==》1.8以后变成了 链表+数组+红黑树,   php

  参考:ConcurrentHashMap原理分析(1.7与1.8) html

        遍历Map的方法有四种:java

       参考:Java中如何遍历Map对象的4种方法    mysql

    HashMap,HashTable的数据结构,不一样点, HashTable线程安全,HashMap线程不安全;linux

       参考:HashMap的实现原理--链表散列web

      参考:Hashtable数据存储结构-遍历规则,Hash类型的复杂度为啥都是O(1)-源码分析 面试

      参考:HashMap, HashTable,HashSet,TreeMap 的时间复杂度   redis

      参考:HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 算法

      参考:ConcurrentHashMap原理分析(1.7与1.8)-put和 get 两次Hash到达指定的HashEntryspring

 

   二、TreeMap 如何实现快速排序的?

    TreeMap实际上是二叉排序树的红黑树实现,:对于 TreeMap 而言,因为它底层采用一棵“红黑树”来保存集合中的 Entry,这意味这 TreeMap 添加元素、取出元素的性能都比 HashMap 低:当 TreeMap 添加元素时,须要经过循环找到新增 Entry 的插入位置,所以比较耗性能;当从 TreeMap 中取出元素时,须要经过循环才能找到合适的 Entry,也比较耗性能。 

但 TreeMap、TreeSet 比 HashMap、HashSet 的优点在于:TreeMap 中的全部 Entry 老是按 key 根据指定排序规则保持有序状态,TreeSet 中全部元素老是根据指定排序规则保持有序状态。

         参考 红黑树与AVL树

  二、设计模式有哪些,关键是;举例在项目中如何使用,它的优缺点,我居然语塞了。 

  参考:Java设计模式 - 单例模式

  参考:Java设计模式之代理模式(Proxy)

  参考:设计模式-代理模式(Proxy)

  参考:设计模式-抽象工厂模式

  参考:设计模式-工厂模式-场景以及优缺点-目的就是应对变化 (国江面试回答的) 

  参考:23种设计模式介绍(三)---- 行为型模式

  参考:23种设计模式介绍(二)---- 结构型模式

  参考:23种设计模式介绍(一)---- 建立型模式 

    三、介绍JVM内存模型,垃圾回收机制,新生代垃圾回收用Copying算法,老年代用标记清理(Mark-Compact)

  参考:jvm内存模型-回收算法-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东面试题)

  美团面试官问:JVM的公有区和私有区有啥区别,为啥叫私有区,把我给问住了,

  后来查了一下:私有区指的是,这个区域的随着线程的开始而开始,结束而结束,生命周期与线程的生命周期同样,

         公有区:即便线程结束了,也能够访问,不会回收;

   那么寄存器为何设计为线程私有?

   咱们知道所谓的多线程在一个指定的时间段里只会执行某一个线程的方法,CPU不停切换任务,那么为了可以准备的记录各个线程正在执行的当前的字节码指令的地址,那么就设计为线程私有每一个线程都分配一个寄    存器,这样各个线程独自记录不会干扰。这是java虚拟机惟一一个没有声明OutOfMemoryError的内存区。;

  参考:java虚拟机学习之线程共享内存区和线程私有区

      四、 G1会stop-the-world吗,

  答:会,无论选择哪一种算法,都会stop-the-world ,GC调优一般就是为了改善stop-the-world的时间

  参考:CMS收集器和G1收集器优缺点

      五、美团的面试问的太细了,标记-清理法是如何整理的,copying 是如何 划分两部分的。为何年轻代的划分是8:1:1,具体是如何进行清理内存的。

   六、什么是代理,反射,以及如何使用?

  参考:深刻理解Java反射+动态代理

  七、一个Tomcat 接收请求 到DB 而后返回到用户;

  Serverlet是单例的吗?

  答:Servlet容器默认是采用单实例多线程

  Servlet生命周期,大体分为4部:Servlet类加载-->实例化-->服务-->销毁        

一、Web Client向Servlet容器(Tomcat)发出Http请求。

2、Servlet容器接收Client端的请求。

3、Servlet容器建立一个HttpRequest对象,将Client的请求信息封装到这个对象中。

4、Servlet建立一个HttpResponse对象。

5、Servlet调用HttpServlet对象的service方法,把HttpRequest对象和HttpResponse对象做为参数传递给HttpServlet对象中。

6、HttpServlet调用HttpRequest对象的方法,获取Http请求,并进行相应处理。

7、处理完成HttpServlet调用HttpResponse对象的方法,返回响应数据。

八、Servlet容器把HttpServlet的响应结果传回客户端。

 

        参考:servlet单实例多线程模式

  参考:Servlet 生命周期、工做原理-是单实例多线程

        八、ThreadLocal 变量 的用处,以及 若是想跟踪一个请求,从接收,处理到返回结果。threadlocal能够在线程的任何位置传递参数,获取这个参数,

             参考:Threadlocal 传递参数(百度二面)

       九、String x="ABC";String y=new String(“ABC”); (a)==,(b) equals是否相等,若是使用HashSet添加是否能把两个都加上;

      答:   x ,y的内存地址不一样;所以 (a) x==y的判断为false;可是String重写了equals(),判断值是否相等,所以(b) a.equals(b)的判断为true; HashSet 只能加上一个;

            参考: Java中String直接赋字符串和new String的区别 如String str=new String("a")和String str = "a"有什么区别?

  

       十、Java 有哪8中基本的数据类型:

  (a)四种整数类型(byte、short、int、long):   

    byte:8 位,用于表示最小数据单位,如文件中数据,-128~127   

    short:16 位,不多用,-32768 ~ 32767   

    int:32 位、最经常使用,-2^31-1~2^31  (21 亿)   

    long:64 位、次经常使用    注意事项:    int i=5; // 5 叫直接量(或字面量),即 直接写出的常数。   

    整数字面量默认都为 int 类型,因此在定义的 long 型数据后面加 L或 l。    小于 32 位数的变量,都按 int 结果计算。    强转符比数学运算符优先级高。见常量与变量中的例子。 

  (b)两种浮点数类型(float、double):   

    float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数。   

    double:64 位,最经常使用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾    

  (c)一种字符类型(char):    char:16 位,是整数类型,用单引号括起来的 1 个字符(能够是一个中文字符),使用 Unicode 码表明字符,0~2^16-1(65535) 。 

  (d)一种布尔类型(boolean):true 真  和 false 假。

 

2、SPRING知识:

  一、Spring 中的BeanFactory和FactoryBean的区别;,Spring的好处。

    参考:BeanFactory 和FactoryBean的区别

  二、spring MVC 原理,AOP,IOC, 请求如何使用DispatchSolove转发请求。
  三、Spring Cloud的五大神兽,zookeeper的服务发现,数据移植性。

          zookeeper 如何管理集群服务的;如何实现高可用性的

    参考:SpringCloud分布式开发五大神兽

    参考:Spring Cloud 架构 五大神兽的功能

          参考:zookeeper 负载均衡 核心机制 包含ZAB协议(滴滴,阿里面试)

          参考:zookeeper如何实现负载均衡的?(具体链接哪个zookeeper服务器的选择?)阿里面试

       参考:Zookeeper 三、Zookeeper工做原理(详细)

  四、百度的面试官问我,IOC,AOP的原理,若是让你本身设计IOC功能如何设计

    其实IOC,AOP都是基于反射的机制的,

    AOP更高级一点,用了动态代理

     参考:Spring IOC AOP的原理(百度二面) 若是让你本身设计IOC,AOP如何处理

    Spring 的Bean的生命周期(阿里的人问过)

      参考:Spring学习10- bean的生命周期(阿里面试题目两次面试均提到)

 

3、struct2掌握

  参考:Struts2 入门

  参考:三大框架(struct、spring、hibernate)的优缺点

4、服务器搭建部署:

  一、什么是Docker,Docker经常使用的命令,Docker的优势,

    参考下面的文章,注意多看看后面的总结,阿里抓着经常使用命令和优势不放,好好看

    参考:Docker 入门 到部署Web 程序- (阿里面试经常使用的docker命令和优势)

    参考:Docker 入门 到部署Web 程序

  二、Dubble,SOAP,重点就是Dubbo,Dubbo不了解,这是硬伤,必定要好好看看,不少企业都用Dubbo必定要好好看看

    参考:Dubbo:来自于阿里巴巴的分布式服务框架

  三、SOA 架构面向服务,那么他如何提供服务,Web Servcie 包含了三种主流的Web实现方式,他们彼此的区别和联系,: 

         (a) REST:表征状态转变 (基于HTTP协议),主要在分布式框架中使用
      (b) SOAP:简单对象访问协议(基于任何传输协议,TCP,HTTP,SMTP,MSMQ)
      (c) XML-RPC:远程过程调用协议 (已经慢慢被SOAP取代)RPC(跨越了传输层和应用层,基于HTTP和TCP)

          面试人员问:REST协议与RPC协议的区别和联系(sougou ,等等:

    参考:SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)

  四、互联网分布式事务,微服务,好比如今有个系统很大,不少不一样的部门进行开发,语言也不少,就使用微服务。用户管理之类的;

  五、RPC(是否使用过,这个京东,美团,360 的面试屡次说起)

    参考:RPC-原理及RPC实例分析

    参考:RPC架构-美团,京东面试题目

    参考:Java实现简单的RPC框架(美团面试)

  六、对高并发的限流措施相似于CDN转发,反向代理之类的

            限流措施考虑漏桶算法,令牌桶算法,参考:互联网应对高峰流量控制- 漏桶算法和令牌桶算法(滴滴面试)

           分布式锁,参考:分布式锁简单入门以及三种实现方式介绍(滴滴)

  七、LVS如何实现负载均衡的,

     (a)NAT(Virtual Server via Network Address Translation NAT(VS/NAT) 大名鼎鼎的IP负载均衡,工做在传输层

       (b)TUN (Virtual Server via IP Tunneling(VS/TUN)

       (c) DR Virtual Server via Direct Routing(VS/DR)  直接修改报文的MAC地址,工做在数据链路层

       下面的文章感受不太清楚,可是大致介绍了方向:

       参考:LVS:三种负载均衡方式比较+另三种负载均衡方式

             这个文章更清楚:六大Web负载均衡原理与实现

  八、Zookeeper 如何实现负载均衡的,与kakfa的数据一致性有何区别

    好比两个IP同时去注册中心注册服务,考虑数据移植性的问题。

       参考:zookeeper 负载均衡 核心机制 包含ZAB协议

          参考:zookeeper如何实现负载均衡的?(具体链接哪个zookeeper服务器的选择?)阿里面试

       参考:六大Web负载均衡原理与实现

        与kafka的区别和联系:

      参考:kafka 数据一致性-leader,follower机制与zookeeper的区别;

  九、Tomcat,Jboss,Apache,Weblogic的区别,Tomcat,Jboss,Weblogic均可以部署包,有区别吗?

    参考:Tomcat Jboss Apache WebLogic区别与比较(阿里面试)

   十、Web容器,Servlet容器、SpringMVC容器的区别:

          咱们平时所说的J2EE包含了 标准版:Web容器 (JSF java标准版)和 EJB容器(Java企业版)

         Web容器 里面包含了JSP和 Servlet容器,Servlet用来处理请求;

         好比Tomcat 是Web容器,只能作JSP和Servlet的Container,不支持EJB

                Jboss  它不可是Servlet容器,并且是EJB容器(同时支持EJB的优化版tomcat)

             WebLogic Server是专门为企业电子商务应用系统开发的它不可是Servlet容器,并且是EJB容器

         具体Web容器与Servlet容器的区别联系:Tomcat Jboss Apache WebLogic区别与比较(阿里面试)

         SpringMVC原理:参考:Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

  十一、本身定义了一个HashMap,按照tomcat的类加载顺序,若是别人写了个hashmap.jar包,你引用了,会不会有问题呢; 

    答,必定不会,webappclassloader类加载器是相互隔离的,tomcat虽然不遵循类加载机制可是上层的仍是遵循类加载机制

    参考:图解Tomcat类加载机制(阿里面试题)

       十二、Tomcat 的组成,包含几部分,如何处理并发数的;

           默认的链接是200个 

 

5、数据结构知识:

        一、 ArrayList 和LinkedList 的区别,另外请说明 ArrayList 的数组的默认大小,以及当超出默认大笑以后,内存如何处理;               

  1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2.对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。
  3.对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据。

    还有个 ArrayList 如何默认  List<String> abc=new ArrayList<String>(); 

    这个默认是10,如今有个问题,若是咱们往下面添加的数据大于10,数组如何存储:

    这样,数组会重新拷贝一个新的数组,这个数组的长度以下:

    那么容量变化的规则是什么呢?请看下面的公式:
    ((旧容量 * 3) / 2) + 1  
  注:这点与C#语言是不一样的,C#当中的算法很简单,是翻倍。

  而后把以前的元素拷贝进来,而后,原来的回收掉,变成如今的数组,若是后续继续大于如今的新size;则还会按照这个模式进行递增;


  一、目前数据库有10亿数据,如何设计
    使用单组多读也就是说,一个主数据库负责读写, 其余的从数据库负责读,不负责写,否则延迟过高了。
    而后使用BinLog将主数据库的数据进行实时同步到从数据库;

  二、红黑树,查找树,二叉遍历树概念 ,红黑树的树高是多少?

    答:红黑树高是2log(n+1)

    (1)  红黑树的树高度是2log(n+1)

    (2) 左旋,将“x的右孩子”设为“x的父亲节点”;即,将 x变成了一个左节点(x成了为z的左孩子)!

    (3)右旋:将“x的左孩子”设为“x的父亲节点”;即,将 x变成了一个右节点(x成了为y的右孩子)!

    (4)红黑树的特性:

     R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每一个节点上都有存储位表示节点的颜色,能够是红(Red)或黑(Black)。
  (1)每一个节点或者是黑色,或者是红色。
  (2)根节点是黑色。
  (3)每一个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
  (4)若是一个节点是红色的,则它的子节点必须是黑色的。
  (5)从一个节点到该节点的子孙节点的全部路径上包含相同数目的黑节点。   

     参考:红黑树(一)之 原理和算法详细介绍

    参考:红黑树与AVL树

    参考:二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离

    参考:平衡二叉树,AVL树之图解篇

     六、单链表反转,两种方式,迭代和递归

       参考:链表翻转的图文讲解(递归与迭代两种实现)

 

6、多线程知识:

       一、什么是线程池,为何要用,如何实现的,多线程runnable thread 的区别和联系 

  关于runnable和 thread: 参考:Java 多线程 -Thread 和Runnable 的区别和联系

  多线程专题:参考:Java-线程池专题 (美团面试题)

  数据库的链接池专题:MySql数据库链接池专题

  一、线程的五个状态,

    参考:Java线程的5种状态及切换(透彻讲解)-京东面试

  二、如何解决多线程的安全问题,无非两个方法:synchronized 和 lock,它的如何实现的,

    lock使用了AQS(AbstractQueueSynchronzied)队列实现,

    reentracelock可重入指的是什么?  

    答:可重入的意思是某一个线程是否可屡次得到一个锁,好比synchronized就是可重入的,ReentrantLock也是可重入的,如何实现的,

    参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理(百度)

       三、如何用lock 实现一个synchronized方法体;(lock很简单,拿到锁以后,作什么。之类的;)

    参考:使用synchronized实现一个Lock-美团面试题目

    四、线程池的workQueue的拒绝策略是什么?   

       当线程池的任务缓存队列已满而且线程池中的线程数目达到maximumPoolSize,若是还有任务到来就会采起任务拒绝策略,一般有如下四种策略: 

ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,可是不抛出异常。 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,而后从新尝试执行任务(重复此过程) ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

     参考:深刻理解Java之线程池(爱奇艺面试) 

 五、多线程的线程池中,若是是无界队列那么MaxPoolSize就没有意义了;

    六、   线程池如何中止线程的?以及interrupt()函数的理解

  ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown()和shutdownNow(),其中:

               (a) shutdown():调用了Interrupt(); 不会当即终止线程池,而是要等全部任务缓存队列中的任务都执行完后才终止,但不再会接受新的任务

               (b) shutdownNow():调用了不安全的stop()函数,强行中止了线程池,相似于断电关电脑,当即终止线程池,并尝试打断正在执行的任务,而且清空任务缓存队列,返回还没有执行的任务  

     参考:深刻理解Java之线程池(爱奇艺面试)

     参考:Java结束线程的三种方法(爱奇艺面试)

  

  七、sleep 和wait()区别:

    参考:sleep、yield、wait、join的区别(阿里面试)

     八、 乐观锁,悲观锁,的使用场景?

    先说乐观锁和悲观锁的机制:
    1. 乐观锁是一种思想,具体实现是,表中有一个版本字段,第一次读的时候,获取到这个字段。处理完业务逻辑开始更新的时候,须要再次查看该字段的值是否和第一次的同样。若是同样更新,反之拒绝。之因此叫乐观,由于这个模式没有从数据库加锁。
    2. 悲观锁是读取的时候为后面的更新加锁,以后再来的读操做都会等待。这种是数据库锁

乐观锁优势程序实现,不会存在死锁等问题。它解决不了脏读的问题,他的适用场景也相对乐观。阻止不了除了程序以外的数据库操做。

悲观锁是数据库实现,他阻止一切数据库操做。

  应用场景:

    悲观锁:Synchroinzed 和ReentrantLock 都是悲观锁,传统的关系型数据库里边就用到了不少这种锁机制,好比行锁,表锁等,读锁,写锁等,都是在作操做以前先上锁。 

    乐观锁:数据库的多版本并发控制,MVCC,就是典型的乐观锁。

    参考:Mysql 的InnoDB事务方面的 多版本并发控制如何实现 MVCC

    MVCC注意:

  只有read-committed和 repeatable-read 两种事务隔离级别才能使用mVcc

  read-uncommited因为是读到未提交的,因此不存在版本的问题

  而serializable 则会对全部读取的行加锁。  

  再来讲更新数据丢失,全部的读锁都是为了保持数据一致性。乐观锁若是有人在你以前更新了,你的更新应当是被拒绝的,可让用户重新操做。悲观锁则会等待前一个更新完成。这也是区别。具体业务具体分析 

  参考:Mysql 的InnoDB事务方面的 多版本并发控制如何实现 MVCC

      九、分布式锁,好比如何高效率的处理秒杀的业务

   参考:分布式锁简单入门以及三种实现方式介绍(滴滴)

7、数据库知识:

  一、redis与memeched的区别:

    redis 和 memeched 均可以作集群,可是redis 能够master-slave备份。(阿里面试)

    参考:Redis和Memcache的区别总结-京东阿里面试

   二、Redis中的Set的时间复杂度是多少,数据结构是什么样的,Redis的优势和缺点,支持哪五种类型。

    时间复杂度是O(1) 由于Set是value为null的HashMap而已,参考:

  参考:redis 数据类型详解 以及 redis适用场景场合 

  三、索引掌握,关键是啥叫聚簇索引,汇集索引,非汇集索引都是啥啊

    参考:主键就是汇集索引吗?

    参考:索引-数据库 索引建立默认是非汇集索引

    参考:数据库-索引 (汇集索引和非汇集索引)

    参考:数据库索引- 复合索引(多列索引)

    参考: 索引都有哪些类型

    参考:何时用索引

    参考:sql-索引的做用(超详细)

    参考:SQL有三个类型的索引,惟一索引 不能有重复,但汇集索引,非汇集索引能够有重复

  四、SQL 后面有个加号,(+)含义是什么

    参考:oracle的SQL语句中的(+)是干什么用的?

  五、SQL优化一个很大的SQL很慢,如何处理;用profile分析;

    参考:MySQL专题3 SQL 优化 

  六、DB链接池,经常使用的是两个:DBCP,C3P0

     DBCP的经常使用参数包含了

    MaxActive:最大链接数

    MaxIdle 最大空闲数

    MinIdle 最小空闲数

    InitSize初始化链接数

    MaxWait 接池中链接用完时,新的请求等待时间,毫秒 MaxWait是最大等待秒钟数

      参考:MySql数据库链接池专题  

     七、Mysql中InnoDB与MyIsam的区别,以及InnoDB支持的三种锁,行锁,间隙锁,next-key锁;

           最大的区别是:InnoDB支持事务,MyIsam不支持事务。 

           Mysql的MVCC不能解决幻读的问题,可是Mysql有间隙锁功能,Mysql的间隙锁工做在Repeatable Read隔离级别下面,能够防止幻读, 

      参考:Mysql 间隙锁原理,以及Repeatable Read隔离级别下能够防止幻读原理(百度)

    参考:MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)

          八、mysql多版本控制

        原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability)

       参考:MySql中启用InnoDB数据引擎简介 以及 InnoDB与 MYISAM的区别和联系

              参考MySql的多存储引擎架构

           参考:数据库事务的四大特性以及4种事务的隔离级别-以及对应的5种JDBC事务隔离级别

           参考:Mysql 的InnoDB事务方面的 多版本并发控制如何实现 MVCC

          数据库链接池专题:MySql数据库链接池专题

8、编程技巧知识:

  JVM调优:jstate查看内存使用,jmap的dump导出日志等

  参考:Jvm dump介绍与使用(内存与线程)

  参考:如何在Windows下查看JAVA端口占用状况(阿里面试)

   参考:jvm调优-从eclipse开始

  参考:Java JVM- jstat查看jvm的GC状况[转]

9、Maven

  一、如何解决Maven的版本冲突问题

  参考:Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)

      二、关于MAVEN的问题:Release 版本与SNAPSHOT之间的区别

   参考:maven snapshot和release版本的区别

    参考:Maven学习——一、安装与修改Maven的本地仓库路径

 

10、ELK日志收集系统:

  参考:经过ELK快速搭建一个你可能须要的集中化日志平台

11、对Hadoop的理解

   hadoop中的HBase,Hive,

12、Hibernate的理解

      一、Hibernate的延迟加载是如何实现的:使用了动态代理

          参考:Hibernate学习--hibernate延迟加载原理-动态代理(阿里电面) 

十3、协议 SOCKET,IO,HTTP ,TCP部分:

     一、 七层架构模型 +和四层架构模型(网络接口层-->网络层-->传输层 -->应用层)

            TCP三次握手,四次挥手,具体的SYN,ACK指代的含义 

           参考:TCP协议详解7层和4层解析(美团面试,阿里面试) 尤为是三次握手,四次挥手 具体发送的报文和状态都要掌握

    二、BIO,NIO(Non-blocked IO),AIO的区别

    参考:IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别(百度)

   三、select,poll,epoll的区别: 

       select,poll,epoll都是IO多路复用的机制   

        (1)select==>时间复杂度O(n)

       它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至所有),咱们只能无差异轮询全部流,找出能读出数据,或者写入数据的流,对他们进     行  操做。因此select具备O(n)的无差异轮询复杂度,同时处理的流越多,无差异轮询时间就越长。

       (2)poll==>时间复杂度O(n)

       poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,而后查询每一个fd对应的设备状态, 可是它没有最大链接数的限制,缘由是它是基于链表来存储的,可是一样      有一个缺点:

        (3)epoll==>时间复杂度O(1)

        epoll能够理解为event poll,不一样于忙轮询和无差异轮询,epoll会把哪一个流发生了怎样的I/O事件通知咱们。因此咱们说epoll其实是事件驱动(每一个事件关联上fd)的,此时        咱们对这些流的操做都是有意义的。(复杂度下降到了O(1))

    参考:select、poll、epoll之间的区别(搜狗面试)

   四、IO 与NIO(New IO)的区别

        参考:Java NIO:IO与NIO的区别 -阿里面试题

     五、Http的数据结构,包含了两类;response,request;分别是

          (a) Request:请求行,请求头,空行,请求体

       (b) Response 状态行,相应头,空行,相应体

          参考:HTTP协议 结构,get post 区别(阿里面试)

     六、 cookie 和session的区别, session是无状态的吗?那如何知道是谁访问的,怎么过来的,AppSession;

          参考:Session, Cookie区别

十4、即时问题:

  微信如何作到,用手机的微信扫码就能够登陆电脑客户端的:

  分析:

    如今有三方,服务器,微信手机端,微信电脑端,

  在电脑端点击使用微信扫码登陆,会弹出二维码,这时候,电脑端会跟服务器端创建长链接。等待服务器指令。

  微信手机端扫码后,若是手机端登录了会将登录的惟一标识传给服务器,服务器收到惟一标识后,发送报文给微信电脑端,能够登录了。(必定是微信电脑端先去链接服务器,不能反过来)

 

十5、框架部署知识:

  一、如今我有mysql 3台 Master +2 slave; 我想这样 请求 Master 承担20% 两个 Slave 各自承担40%如何处理:

  使用:DBProxy(),能够作到这样,不用改源码,直接分配请求;

  参考:LVS+Keepalived实现DBProxy的高可用

  咱们知道 主从mysql数据库,经过BinLog进行同步,究竟是如何同步的

  答:有个IO线程,一个负责拉取log,另外一个负责SQL写日志,

  二、Spring Cloud 如何处理服务熔断的,A->B->C 出了问题,如何处理使用Hystrix,目前C服务 是C1,C2,C3三个服务器提供的负载均衡,C1坏了,请求直接发送到C2,C3如何实现负载均衡的?

   经过长链接,心跳的方式,健康检查,每隔一段时间就发信息若是收不到请求,认为服务器宕机了。

  三、Spring Cloud 和 Dubble的区别; 

    参考:Dubbo和Spring Cloud微服务架构比较

  四、Dubble支持异步吗? 是长连接吗

    答: Dubbo 缺省协议采用单一长链接和 NIO 异步通信,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的状况。

    参考:Dubbo和Spring Cloud微服务架构比较

  五、目前有个服务器我但愿 请求每分钟3万次,若是超了自动拒绝,如何处理

    使用漏桶算法算法,令牌桶算法,

    参考:互联网应对高峰流量控制- 漏桶算法和令牌桶算法(滴滴面试)

  六、我如今想服务器每分钟接收一个用户的请求小于60个,如何处理:

    使用Redis 缓存服务器,能够设置key=用户ID value不停地加一到了60就中止,而后把 redis的缓存时间设置为1分钟,过了一分钟就 失效;

  七、如今A->B->C 三个服务相互依赖,有个用户请求访问了A->B->C,如何跟踪,使用隐式传参的方法,传递了上下文。 taskmasterid 

使用ThreadLocal参数隐式传参

 

十6、Java 缓存知识Ehcache,redis

  参考:Hibernate性能优化之EHCache缓存

  参考:ehcache详细解读

  参考:5个强大的Java分布式缓存框架推荐

  参考:ehcache、redis应用场景比较

十7、 Java调度任务:

  可使用Quartz 包含了两部分:JobDetails 和Trigger,它能够持久化到硬盘,

  Quartz源码:

  SchedulerFactory schedFact=new StdSchedulerFactory();
        Scheduler sched=schedFact.getScheduler();
        sched.start();
        //建立一个JobDetail,指明 name,groupname,以及具体的Job类名,该Job负责定义具体的执行任务;
        JobDetail jobDetail=new JobDetail("myJob","myJobGroup",QuartzTest.class);
        jobDetail.getJobDataMap().put("type","FULL"); 
//         定义调度触发规则,好比每1秒运行一次,共运行8次
           SimpleTrigger simpleTrigger=new SimpleTrigger("simpleTrigger","triggerGroup");
//         立刻启动
           simpleTrigger.setStartTime(new Date());
//         间隔时间
           simpleTrigger.setRepeatInterval(1000);
//         运行次数
           simpleTrigger.setRepeatCount(8);           
        //用scheduler将JobDetail与Trigger关联在一块儿,开始调度任务;
        sched.scheduleJob(jobDetail,simpleTrigger);

  参考:深刻解读Quartz的原理

  参考:Quartz集成springMVC 的方案二(持久化任务、集群和分布式)

  阿里的面试官问,若是如今不少调度任务,如何优化,可使用调度池,Java1.5以后,引入了ScheduledExecutor,参考:ScheduledExecutor,

  源码:

 ScheduledExecutorService service = Executors.newScheduledThreadPool(10);

  参考:Java 几种调度任务的Timer、ScheduledExecutor、 开源工具包 Quartz、开源工具包 JCronTab

   十8、消息队列知识MQ:

       一、Kafka的消息队列的特征,kafka实现的原理: 

       参考:Kafka 简介

       参考:kafka 数据一致性-leader,follower机制与zookeeper的区别;

  十9、Linux知识

     1、Linux 如何查询上下五行 

    若是在只是想匹配模式的上下几行,grep能够实现。      
$grep -5 'parttern' inputfile //打印匹配行的先后5行 
 
$grep -C 5 'parttern' inputfile //打印匹配行的先后5行

$grep -A 5 'parttern' inputfile //打印匹配行的后5行 

$grep -B 5 'parttern' inputfile //打印匹配行的前5行

 查看mysql慢日志中ip地址为192.168.0.10发送过来的SQL语句的后面三行

tail -50 /usr/local/mysql/data/sql-slow.log |grep -3 '192.168.0.10'  

匹配PHP错误日志中某一个字段  

tail -100 /data/logs/php/php_error_5.3.log  | grep  "Memcache::get()";

查看某一个文件第5行和第10行

 sed -n '5,10p' filename 这样你就能够只查看文件的第5行到第10行。

 

 

 动手题目: 

       (1) 让两个有序队列 合并成一个有序队列;

 

  

 其余 

一、修改简历,把hadoop去掉;Android去掉;  

二、搜索引擎的架构,如何作到搜素的,原理是什么?

Mysql索引结构及常见索引的区别

Mybatis的理解;

相关文章
相关标签/搜索