zoukankan      html  css  js  c++  java
  • 互联网面试题


    区长孙连城
    2018-05-23 20:1121614浏览234评论
    1.一面主要问基础,包括几方面:

    1) collection接口下面有哪些集合,hashmap的实现原理,要把1.7和1.8的区别(红黑树)讲出来,map有哪些实现类以及使用场景,hashmap, hashtable, linkedhashmap,weakHashMap, treemap, concurrentmap,你要是讲的好这里可以说十几分钟,linkedhashmap和treemap排序的区别,concurrenthashmap如何实现线程安全,这里也要把1.7和1.8实现差异说出来(分段加锁和cas技术),说到这里以后就会问你cas实现原理( CPU Lock前缀指令),它是如何保证其他cpu core的cache失效的,然后会问你volatile的实现原理,要结合java内存模型来讲,可见性是如何实现的(内存屏障),synchronized锁和reentrantlock的区别以及内部怎么实现的:常用的gc算法及优缺点,如何判断对象的存活性

    2) mysql有哪些索引,底层数据结构是什么,画一下b+树的结构以及数据的插入过程,聚集索引的特点,如何做索引优化,给你一个sql语句select a,b,c from t where a<某个值 and b>某个值 and c = 1,如何建索引(可以是c,a,b或者c,b, a的联合索引,但要分析什么场景下分别用哪个);结合Innodb的实现说下数据库的隔离级别,分别是怎么解决脏读、不可重复读和幻读取的;对mysql最新版本的同步机制有没有了解,比如一个主节点和多个备份节点,mysql怎么保证可用性和性能;

    3) redis有哪些数据结构,分别用在哪些场景,对redis的pipeline有没有了解,解决什么问题,redis采用了什么方式来节省内存

    4) Spring IOC的理解以及IOC容器的初始化过程,Spring里的Bean是保存在哪里的,BeanFactory和FactoryBean的区别,Spring AOP怎么实现的(需要讲出来JDK动态代理和CGLib动态代理优缺点),头条还问了如果一个类的某个方法没有在接口里定义,这两种动态代理方式是怎么实现的;

    5) 线程池有哪些实现类,ThreadPoolExecutor有哪些参数,讲下它的工作原理,在使用过程中有哪些经验(比如工作队列大小的设置,ThreadFactory和ExjectExcutionHandler)

    6) 线程有哪些状态以及怎么转换的

    2. 二面主要结合项目来问

    1). GC的常用算法以及优缺点,项目中用的什么垃圾回收算法,怎么做GC调优,对G1收集器有没有了解(要说出G1的出现主要解决了什么问题,为什么CMS算法会有内存碎片)

    在介绍GC算法的时候可能会提到GC Roots,面试官会问你哪些对象可以作为GC Roots,栈里面的局部变量表里有基本数据类型和引用类型,怎么找到引用类型;有个对象引用比如Hello,hello.sayHello()调用的时候怎么找到类里的sayHello()这个方法

    2). 项目里有用到限流,具体怎么做的

    3). 看你对Netty有了解,能不能讲下它的工作原理,netty里ChannelInBoundHandler和ChannelOutBoundHandler的区别,netty在读写数据的时候是先调用head还是tail handler,既然你知道NIO,有没有听说

    JDK epoll的BUG,Netty是怎么解决的,如何解决TCP粘包和拆包的问题,为什么会出现粘包和拆包

    4). 讲下你项目里做的数据库索引优化,如何去分析一条语句的执行性能,explain语句你会关注哪些字段

    5). 分别在什么场景使用synchronized和Lock,ReentrantLock内部怎么实现的,多线程通信有哪些方式(要把JUC包下的常用实现类说出来,比如CountDownLantch,信号量,栅栏)

    6). 如何实现分布式锁,一开始说了redis的实现,redis可能在锁超时后还没执行完任务,这个时候要怎么做,有没有更好的方式,后面说了用zookeeper的实现

    7). 项目里有用到ElasticSearch,能介绍ES的工作原理吗,什么是正向索引和反向索引,如何对ES进行优化

    8). 为什么会出现大量CLOSE_WAIT连接,能不能画一下TCP挥手的流程图介绍下,后面是怎么解决句柄泄露的问题

    9). 写代码实现一个EnumSet(阿里),用数组或者链表实现一个阻塞队列(美团)

    10). 哪些场景下会出现内存泄露(可以讲下HashMap,ThreadLocal,WeakHashMap,finalize),会问你ThreadLocal的原理以及为什么会有内存泄露

    11). 如何获取Redis里所有的keys(可以先说下keys *命令,然后再介绍可能导致系统阻塞无法对外响应,再介绍更好的scan命令)

    12). Java类加载机制,为什么要双亲委派

    13). Spring Bean的作用域有哪些,单例是线程安全的吗,怎么保证线程安全

    14). java里的Exception信息是怎么保存的,有没有用到java8的一些特性,Lambda表达式是语法糖吗,怎么实现的,和匿名内部类有什么区别;

    3. 三面,一般是技术总监或者某个部门的主管面

    1). 简历里有提到有定位系统响应慢的经验,具体怎么做的

    2). 如果有个节点一直在做FullGC,你要怎么快速定位并恢复环境

    3). 如果要做一个秒杀系统,你会怎么设计,把能想到的点都说出来

    4). 假设数据库里有100W条数据,要把他们全部加载到Redis里,你会怎么设计这个系统(这里可能是个坑,缓存一般保存的热点数据,要讲下分布式缓存、缓存击穿、雪崩、并发更新等问题)

    5). ElasticSearch的分片机制,ES搜索过程是如何工作的,如果有很多网卡信息怎么做分片,如果一个Document有2个网卡呢

    6). 用过哪些消息中间件,能不能说下Kafka的工作原理,如果保证分布式系统的数据的一致性,给Kafka发消息如何保证消息的幂等性

    7). 如何对数据库做分库分表

    4. 四面,基本上也是结合项目来问一些知识点,面试官一般会比较强势,会经常打断你说话,给你压力,这个时候千万不要慌,问的问题和上面差不多

    你在项目中遇到的最难的一个问题是什么,自己对未来3-5年的一个规划

    5. 五面,HR面,随便聊聊

  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/lixuwu/p/9463977.html
Copyright © 2011-2022 走看看