面经

一. java集合类相关

A整体介绍
    1.Java容器有哪些? 哪些是同步容器,哪些是并发容器?
                        
                         |Collection
                    |  ├List
                    |  │-├LinkedList
                    |  │-├ArrayList
                    |  │-└Vector
                    |  │ └Stack
                    |  ├Set
                    |  │├HashSet
                    |  │├TreeSet
                    |  │└LinkedSet
                    |
                    |    Map
                          ├Hashtable
                          ├HashMap
                          └WeakHashMap

                    同步容器
                    Vector
                    Stack
                    HashTable
                    Collections.synchronized方法生成

                    并发容器
                    ConcurrentHashMap:线程安全的HashMap的实现
                    CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
                    CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
                    ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
                    LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue


    2. 介绍一下集合框架
    3. 开发中Java用得比较多的数据结构有哪些?
    
B.List
    ArrayList和LinkedList的插入和访问时间复杂度?
    
C.Map
    weakHashMap
    HashMap在什么情况下会扩容 或者有哪些操作会导致扩容
    HashMap push方法的执行过程
    HashMap检测到hash冲突后 将元素插入在链表的末尾还是开头
    1.8采用了红黑树 红黑树特性 为什么用红黑树而不是AVL B树等
    hashMap 和HashTable底层实现什么区别? hashTable和concurrentHashTable呢?
    HashMap和treeMap什么区别 底层数据结构是什么?
    HashMap如果一直put元素会怎么样? hashCode全都相同如何 equals方法
    HashMap HashTable ConcurrentHashMap 区别 内部实现
    HashMap与concurrentHashMap比较
    Java中有哪些线程安全的Map
    ConcurrentHashMap是怎么做到线程安全的
    HashTable你了解过吗
    谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?
    这些数据结构中是线程安全的吗?假如你回答HashMap是线程安全的,接着问有没有线程安全的map,接下来问conurren包。
    HashMap的key可以重复吗?

C.Set
    HashSet是不是线程安全的 为什么不是线程安全的


二. JVM相关

A. java基础
    Java反射原理,注解原理
    知道字节码吗? 字节码都有哪些?  Integer x=5,int y=5 比较x=y都经过哪些步骤
    讲讲类加载机制 有哪些类加载器 这些类加载器都加载哪些文件
    手写一下类加载Demo
    知道osgi吗 他是如何实现的
    classforName("java.lagng.String")和String.class.getClassLoader().LoadClass("java.lang.String")有什么区别
    对象头信息里面有哪些东西
    对JVM熟不熟悉?简单说说类加载过程,里面执行的哪些操作?问了GC和内存管理,平时在tomect里面有没有进行过相关的配置。
    jvm、jre以及jdk三者之间的关系?
    
B. JVM内存模型和GC
    1. JVM老年代和新生代的比例? 
        2:1  8:1:1
    
    2.JVM内存模型
    3.写一小段程序使栈溢出? 堆溢出
    4.JVM内部如何划分?常量池在哪里
    5.对象在JVM中怎么存储的 
    6.JVM内存模型
    7.介绍一下JVM内存模型 用过什么垃圾回收器
    8.新生代分为几个区 使用什么算法进行垃圾回收 为什么使用这个算法
    9.JVM老年代和新生代的比例
    10.YGC和FGC发生的具体场景
    11.请问你做过哪些JVM优化  使用什么方法达到什么效果
    12.GC用什么收集器 收集的过程如何 哪些部分可以作为GC ROOT
    13.GC Root如何确定,哪些对象可以作为GC Root如何确定
    14.GC 如何分代的?没代用什么算法回收?
    15.CMS过程中是怎么样的? 内部使用什么算法做垃圾回收?
    16.分代垃圾回收过程?
    17.内存溢出和内存泄漏分别指什么?
    18.YGC和FGC发生的具体场景
    
    
C. 排查工具
    1.Jstack jmap jutil 分别的意义 如何线上排查JVM的相关问题
    2.线上频繁发现full gc如何处理? cpu使用率过高怎么办
    3.如何定位问题? 如何解决 解决思路和处理方法
    4.jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?

三. 多线程相关

A. 锁
    1.synchronized和Lock什么区别synchronized什么情况是对象锁?什么情况是全局锁
    2.java中有哪几种锁?
    3.至少用四种写法写一个单例模式? (最优解: enum)
    4.synchronized内部原理?
    5.ReentrantLock内部实现
    6.synchronized,lock
    7.lock和synchronized的区别
    8.公平锁和非公平锁
    9.Java读写锁
    10.读写锁设计主要解决什么问题?
    11.synchronized和lock的区别?
    
B. 乐观锁
    1.讲一讲atomicInteger 为什么要用CAS而不是synchronized?
    2.volitile工作原理
    3.cas是什么?怎么实现的?
    4.Volatile关键字 ,指令重排序有什么意义? synchronized怎么用?
    5.并发包里的原子类有哪些? 怎么实现? CAS在CPU级别用什么指令实现的
    6.原子类内部如何实现的
    7.volatile的原子性问题? 为什么 i++这种不支持原子性 从计算机原理的设计来讲一下不能保证原子性的原因
    8.Happens Before原理
    9.CAS操作
    10.如何保证共享变量修改时的原子性?
    11.concurrentMap的机制;TreeMap;Volatil关键字
    
C. 线程池
    1.线程池的工作原理 有几个重要参数 具体几个参数分析线程池会怎么做 阻塞队列的作用是什么
    2.线程池的构造类的方法的五个参数的具体意义
    3.单机上一个线程池正在处理服务如果突然断电怎么办(正在处理和阻塞队列里的请求怎么处理)?
    4.使用无界阻塞队列会出现什么问题
    5.线程池用过吗? 都有什么参数?底层如何实现的?
    6.ArrayBlockQueue和LinkedBlockingQueue 内部如何实现的
    7.线程池的构造类的方法的5个参数的具体意义?
    8.使用无界阻塞队列会出现什么问题?
    
D. 线程局部变量等
    1.ThreadLocal是什么?底层如何实现?写一个例子?
    2.线程间如何通信
    3.如何保障线程安全问题
    4.Comparable和Comparator区别
    5.介绍一下java多线程

E. IO
    1.熟悉IO么 BIO NIO AIO区别 阻塞与非阻塞区别
    2.java NIO
    3.熟悉IO么?与NIO的区别,阻塞与非阻塞的区别


四. spring相关
A. spring
    1.详细描述springmvc处理请求全流程
    2.Spring一个bean装配的过程
    3.ApplicationContext初始化过程?初始化过程中发现循环依赖Spring是如何处理的
    4.执行某操作,前50次成功,第51次失败 a全部回滚 b 前50次提交第51次抛异常, ab场景分别如何设置spring(传播特性)
    5.springmvc和mybatis的工作原理,有没有看过底层源码?
    6.SpringBean的生命周期
B. cloud
    1.微服务划分的粒度
    2.微服务的高可用怎么保证的
    3.常用的负载均衡该怎么用 
    4.网关能够为后端服务带来哪些好处

五.工作流程相关
A. 介绍
    1.最近做的比较熟悉的项目是哪个,画一下项目技术架构图
    2.项目开发流程
    3.自我介绍,工作经历 技术栈
    4.项目中你学到了什么技术
    5.最近做的比较熟悉的项目是哪个?画一下项目技术架构图。
    6.自我介绍;技术特点
    7.兴趣是什么;优势是什么
    8.项目中遇到的问题,自己咋解决的等等。
    9.说下你平时看的一些技术博客,书籍;
    10.工作中你觉得最不爽的事情是什么;
    11.说下你的优缺点;
    12.有没有想过去创业公司;
    13.说说你自己的性格;
    14.在项目中主要负责了哪些工作。
    15.系统的量级、pv、uv 等;
    16.项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚);
    17.以后可能要学习很多新技术,你怎么看;
    
B. 系统设计
    1.系统设计题: 一个推送场景,50条内容,定时推送,先推5%用户一段时间推10条,推给所有用户设计相关表.系统模块,需要可以落地,有伪代码
    2.数据库垂直和水平拆分
    3.分布式接口的幂等性设计「不能重复扣款」
    4.接口如何处理重复请求?
    5.接口如何处理重复请求?具体处理方案是什么?
    6.单机上一个线程池正在处理服务如果忽然断电该怎么办?(正在处理和阻塞队列里的请求怎么处理?)
    7.设计一个对外服务的接口实现类,在1,2,3这三个主机(对应不同IP)上实现负载均衡和顺序轮询机制(考虑并发)
    8.开发一个大型网站你会考虑哪些问题?
    9.给你一个系统(面试官好像是无人车部门的),后台的逻辑已经实现了,但是前端加载很慢,怎么检测;
    10.应对高并发的解决办法(分布式);
    11.头条TopN(https://blog.youkuaiyun.com/bntx2jsqfehy7/article/details/80276225#comments)

C. 项目管理
    1.如何推动了解整个项目情况


六. 中间件相关

1.Dubbo超时重试:Dubbo超时时间设置
2.dubbo如何提供服务?有机器宕掉这么检测出来 如何找到服务
3.Dubbo超时重试;Dubbo超时时间设置
4.Dubbo的底层原理,Zookeeper是什么

1.Redis数据结构有哪些? 如何实现 sorted Set? 这种数据结构在极端情况下怎么变成平衡树?

        redis内部使用一个redisObject对象,来表示所有的key和value.redisObject主要信息包括 数据类型<type>,编码方式<encoding>,数据指针<ptr>
        ,虚拟内存<vm>等
        数据结构:
            0. Key  
            1. String 简单动态字符串   int len存储长度,int free空闲长度,char[] buf 存储的内容
                用法: set和get,mget和mset,incr和incrby,decr和decrby,setnx和msetnx,setrange和getrange, getset setex append strlen
            2. Hash  HashMap结构  key   field value 
                用法: hget hset hgetall hsetnx  hmset hmget hincrby hexits hlen hdel hkeys hvals
                紧凑存储: 成员较少时,为了节省内存采用一维数组紧凑存储. redisObject的encoding是zipmap 成员变多时转成HashMap结构,encoding为ht
            3. List 双向链表 每个元素都是String   既可以作为栈,也可以作为队列
                用法: lpush lrange  lpop rpush rpop linsert lset lrem ltrim rpoplpush llen lindex
            4. Set  Set不能有重复元素内部用HashMap实现只用到了Key ,value列为空   取交集、并集、差集等操作
                用法: sadd smembers spop sdiff suion sinter srem sdiffstore sinterstore suionstore somve scard sismember srandmember
            5. SortSet 排序好的Set HashMap和SkipList保证数据的存储和有序
                用法: zadd zrange zrem zincrby zrank zrevrank zrevrange zrangebyscore zcount zcard
                
2.tair和redis有什么区别

3.redis是单例的吗

4.项目: cache,各部分职责,有哪些优化点
5.缓存的雪崩以及穿透的理解?

1.Zookeeper有哪些用
2.zookeeper有哪些作用
3.zk如何管理服务和配置的
4.RocketMQ设计介绍?

1.如何保障请求执行顺序
2.分布式事物与分布式锁(扣款不要出现负数)
3.分布式session设置
4.如何保障请求执行顺序
5.分布式事物与分布式锁(扣款不要出现负数)
6.分布式session设置
7.分布式session一致性
8.分布式缓存的一致性,服务器如何扩容(哈希环)


1.nginx 的负载均衡;

七. DB相关

1.慢查询怎么优化
2.数据库垂直和水平拆分
3.mysql的整体架构师怎么样的
4.开发中用了哪些数据库?回答mysql;储存引擎有哪些?然后问了我悲观锁和乐观锁问题使用场景、分布式集群实现的原理。
5.MyBatis如何分页;如何设置缓存;MySQL分页。
6.数据库 sql 的了解程度。

7.MySql索引是什么数据结构? B tree有什么特点 优点是什么
8.MyBatis如何分页 如何设置缓存 MySql分页
9.innoDB索引数据结构
10.BTree B+Tree区别 为什么使用B+Tree
11.写程序判断一棵树是不是完全对称的二叉树
12.写程序判断两颗二叉树是不是相同
13.innoDB索引
14.innoDB主键索引和非主键索引区别


八. 通信相关

1.https和http区别 有没有用过其他安全传输手段
2.说一下http协议、get和post的基本区别,接着问tcp/ip协议,三次握手,窗口滑动机制
3.http 和 https 区别,https 在请求时额外的过程,https 是如何保证数据安全的;
4.POST 和 GET 区别;
5.http 的 get 和 post 方法。

6.IP 地址子网划分;

7.DNS 解析过程;


九. linux相关

1.Linux怎么查看系统负载情况
2.系统管理命令(如查看内存使用、网络情况)

3.linux 用过的命令;
4.管道的使用;grep 的使用;shell 脚本;find 命令;awk 使用
5.Linux 下的一些指令,$(进程 id),$?(上一条命令退出时状态),怎么查看进程,按照内存大小,CPU 占用排序等等。(大写 M 和大写 P)

6.硬链接和软连接区别;
7.kill 用法,某个进程杀不掉的原因(进入内核态,忽略 kill 信号);
8.介绍下你所了解的 epoll。
9.进程间的通信,共享内存方式的优缺点。


十. 算法相关
1.如何设计大量数据的查重和去重  (ConcurrentHashMap,布隆过滤器,BitMap,hash分组  https://blog.youkuaiyun.com/quinnnorris/article/details/81635839)
2.给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 0、1 概率一样。
3.10 亿个 url,每个 url 大小小于 56B,要求去重,内存 4G。

4.把一个 bst 转化成一个双向链表。
5.手写一个全排列。
6.B树和 B+树。
7.介绍一下 hash,怎么解决冲突。
8.写个 strcpy 函数;
9.快速排序;广度优先搜索(队列实现)

转载于:https://my.oschina.net/u/3674060/blog/3036840

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值