回馈牛客发一波找工作阿里,美团,字节跳动,网易等的面经吧
自我介绍
1. Hashmap了解吗,说一下,红黑树说一下
2. 你刚才说到AOP说一下AOP,原理是啥,刚说到的增强字节码,什么是增强字节码,如何实现?
3. IOC是什么?我从概念到原理balabala说了一遍
4. java反射机制
5. redis了解吗?redis集群有什么用?如果增加一个节点怎么做会发生什么?
6. TCP/UDP说一下
7. java并发了解么
8. JVM加载一个类,我讲了一遍双亲委派分为检查和加载,检查自底向上加载自顶向下
9. 进程线程区别
10. java类文件结构说一下。这个就是深入理解java虚拟机第6章的内容,没想到问这个看的都忘了只记得有魔数,访问标志之类的了。
网易一面
自我介绍,项目
1. AOP实现原理是什么
2. IOC实现原理是什么,spring中有哪些设计模式,spring中除了单例模式还有哪些呀?用到什么地方
3. Java中哪些数据结构是线程安全的?我一开始打了hashtable和Concurrenthashmap,然后问还有别的吗?我说Vector、ConcurrentLinkedQueue、Stack 底层vector实现,线程安全、CopyOnWriteArrayList.然后问CopyOnWriteArrayList.是怎么实现。新的替换旧的。
4. Java多线程,我说了synchronize然后还有lock,unlock。然后问java中的AU怎么实现,我以为是让说原子性其实不是。然后问java如何保证变量可见性,我说volatile,然后问我除了这个呢还有别的吗讲一下,我沉默了一会儿,面试官说synchronize呢,我说可以。
5. Threadlocal讲一下,原理是什么,有什么用。
6. Redis了解吗。说一下穿透吧。如何避免黑客故意查询空值redis中不存在的,我说可以把不管数据库中是否有数据,都在缓存中保存对应的key,值为空就行。又问那如果数据库中我以前没有现在有有了呢,要不要写到缓存。
7. Redis常用数据结构说一下。Redis如何统计PV 和UV,用什么数据结构,我给他讲了:
哈希作为Redis的一种基础数据结构,Redis底层维护的是一个开散列,会把不同的key值映射到哈希表 上,如果是遇到关键字冲突,那么就会拉出一个列表出来.
当一个用户访问时,如果用户登陆过,那么我们就使用用户的id,如果用户没有登陆过,那么也可以在前端页面随机生成一个key用来标识用户,当用户访问的时候,我们可以使用HSET命令,key可以选择URI与对应的日期进行拼凑,field则可以使用用户的id或者随机标识,value则可以简单设置为1。
当要访问一个网站某一天的访问量时,就可以直接使用HLEN来获取结果;然后问我你这样的话value是浪费呀能不能不用HSET。好这个问题过。
8. 说一下四次挥手,为什么最后是2msl,怎么算出来的。当时复习的不好连这个都不会
面试官:这个你要不会的话就说不过去了
9. 后面想起来再补
字节跳动一面
自我介绍
1. 问项目
2. Linux 中的页面置换算法说一下
3. 数据库索引有哪些,有多少说多少?什么是主键索引?主键索引和唯一索引区别?什么叫覆盖索引?
4. 说一下B 索引与B索引区别,聚集索引与非聚集索引区别
5. 按(a,b,c)建立索引然后查询where b=’b’,c=’c’;用到索引了吗where b=’b’ or c=’c’ 呢?
6. Equal与hashcode说一下用在那地方区别?
7. 还有啥记不清了
8. 算法题:一个字符串比如“abc123hTe*#fe”只逆序字母逆序后”ef*#eTh123cba”。
总体一面比较简单重基础,等十分钟通知过了然后接着二面
字节跳动二面
自我介绍
1. 写个算法题吧就是一个链表的加法器,比如1->2>3>5>9和4->3->5相加后返回链表1->2->7->9->4
2. http与https区别
3. ThreadLocal说一下
4. 说一下Java中锁的机制
5. 滑动窗口是什么,滑动窗口大小怎么确定
6. Java中线程池说一下,然后又让说阻塞队列有哪些区别(四个我就答出来两个然后问区别)然后说一下拒绝策略。
7. Volatile是怎么实现指令重排序的
8. Redis相关的,说一下集群,说一下项目总怎么用的redis,你是怎么设置过期时间的,过期你是怎么处理的。
9. 说你下jvm内存结构,为什么分新生代老年代?新生代中eden与幸存区比例多少?
二面也基本答出来了,还是挂了,哎可能是算法题写的太慢了思路是对的,而且还有bug,牛客网那个编译器真的很难用
后面还问的啥想不起来了
美团一面
1.没让自我介绍,直接问hashmap,为什么线程不安全,多线程为什么1.7插入链表死循环,1.8不会。答:1.8之前:链表插入操作采用头插法(考虑热点数据),但是在扩容(讲解)的时候,多线程下会出现死循环的问题。头插法导致之前链表倒置,所以第一个线程完成链表倒置,第二个线程一开始保留链表正向的顺序,后来得到的是链表倒置之后的顺序,就会导致死循环。
1.8之后:对链表的操作是尾插法 ,为什么采用尾插法?好处:1)因为在链表的尾部才能数有几个链表,是否满足转成红黑树的条件。2)最主要的是扩容的时候不会出现扩容的时候不会出现多线程死循环的问题,保持链表的顺序。参考:https://blog.csdn.net/qq_38157516/article/details/81024027
2.线程安全与线程非安全,线程安全的特征(这个答的不好)。如何让hashmap线程安全。
3.你刚说了Synchronized,他的实现原理是什么。答:底层由JVM实现,JVM基于进入和退出监视器对象来实现方法同步和代码块同步,其中源代码在编译之后,monitorenter插入到同步代码块的开始位置,monitorexi插入到同步代码块结束和异常处。线程需要获得监视器对象才能执行同步代码块,并且当一个监视器对象被持有之后,它就会处于锁定状态,除非该线程释放了这个对象 ,其他的线程才能获得。
4.聊聊spring,spring有哪些好处,为什么用spring
5.volatile说一下,用在哪些地方怎么实现的,你刚说不支持原子性,什么是原子性(ps突然一这么问不知道咋说原子性概念了说了操作不可分割),为什么不能保证原子性,
6.JVM中CMS和G1区别,我说到了G1消除碎片,问怎么消除为什么(这个答的不太好)
7.新生代分为eden和两个幸存区为什么?为什么是8:1?什么会放入老年代,为什么大对象放老年代,为什么超过一定年龄放入老年代?为什么?为什么?为什么?
8.jdk8和jdk7区别
9.手写单例模式,我写了懒汉模式,和双重校验锁(ps.就知道会问这个还好有所准备,其实我当时能用7中方法单例模式,就让写了两种)
10.说一下操作系统的内存管理 答:不会
11.说一下7层协议5层协议,4层协议,然后tcp/udp区别,他们属于哪一层,为什么udp不可靠,怎么让他可靠答:实现确认机制、重传机制、窗口确认机制。哪些是基于tcp的协议,哪些是基于udp的协议。
12. 算法题:给一个字符串比如baaac123$$#FSSSS,统计个字符出现的频率并按出现频率最高的顺序打印。
13. 我们再来一道算法题,给你一个表达式求解比如:1 3*(4 5)结果是多少,我说了一下思路代码没写。
美团二面(1小时20分)
1. 自我介绍
2. 问项目问了20分钟吧
3. 诶呀你熟悉计算机网络http(坑,不该把这放简历明显位置,我熟悉的JVM、并发多线程没发明显位置,后悔后悔!)那咱们聊聊吧,那你说一下输入一个网址解析过程吧,当我说到DSN解析查ip时,面试官问我怎么使一个网址只能在内网访问(这个我答出来了),当我说到三次握手时,问我那如果使用的是https协议会多出哪几步详细说一下整个过程(这个之前看过忘了),最后说到渲染时问我前端是怎么渲染解析整个页面的详细说一下。这个答的也不好。
4. 给你个索引看能不能命中(a,b)建立索引,select * from table where b=””。mysql隔离级别说一下,mvcc是什么怎么解决未提交读的。
5. 问我负载均衡问题,我当时说到了一致性hash算法在负载均衡中的运用。然后面试官说一致性hash不是为了解决负载均衡吧。
6. 还问的啥忘了
7. 写个算法吧一个链表A->B->C->D->E->F->G->H从后往前没K个翻转一次最后不够K不反转,比如当K=3是链表会变成
A<-B<-E<-D<-C<-H<-G<-F。面试官:提示一下可以用递归做。我说不用递归也可以做呀,面试官:不用递归你怎么做,他的意思是不用递归我做不出来,我真是服了。然后我很快写出来了。感觉面试官一脸质疑
美团三面
#面经##阿里巴巴##美团##字节跳动##网易##校招##Java工程师#