春招实习面经(华为云,阿里菜鸟,酷家乐,网易雷火,字节跳动)
技术面
1.介绍一下自己
2.介绍一下项目
3.Spring的bean的生命周期
4.数据结构的排序,然后问海量数据排序,讲了分治,然后问能不能用大数据组件或者大数据平台做海量数据排序,答了MapReduce的key自动排序
5.计网的ARP协议
6.java类变量的加载过程,父类静态变量和子类静态变量哪个先加载,int和long哪个先加载
7.链表有环
8.java元注解
综合面
1.问了哪里人,工作城市的意向
2.聊了聊进去的项目(因为是项目实习生)
3.实习时间
阿里菜鸟
一面
1.介绍一下自己
2.问项目,问了我Hadoop和Spark,然后问我Hadoop的MapReduce过程,然后问两个平台怎么选择,然后主要问我session那块,我的session共享是怎么做的,为什么这么做(面试官觉得我这么做没必要,跪),然后问session使用的过程,和cookie的关系
3.问平衡二叉树,给了一些数据,让我讲出每一个插入后,树的状态。
4.问我a=2,b=1,c=a+b底层具体是一个什么样的过程,答了java内存的分布,具体在哪个位置,比如常量池在方法区,然后栈存对常量的应用之类的。
问底层呢我答内存拷贝,问有多少次内存拷贝,然后又问在多核cpu和多线程下,然后也是这种情况,cpu和底层又具体是什么样的过程,互相之间怎么影响,怎么不影响。
5.问我HashMap是不是线程安全的,为什么不安全,会出现哪些问题,我讲了扩容出现环死循环,然后问我死循环cpu的状态是怎么样的,我答是100%,然后问我死循环其他线程能不能使用cpu,然后又问比如一个四核cpu占有率又是多少,cpu100%对整个服务器有什么影响。
二面
1.介绍一下自己
2.问Redis为什么快,我答内存数据库、单线程、IO多路复用的epoll。
3.SpringBoot 有什么好处,答一个好处就问是怎么实现这个好处的(这谁记这个,服)
4.Spring的bean的加载过程,越具体越好,答了bean的生命周期,bean获取那一块的确不太熟没敢答。
5.java1.8有什么了解
6.平时看什么书
酷家乐
一面
1.自我介绍一下
2.进程和线程的区别
3.问Redis,问了持久化,RDB和AOF,然后问了AOF的具体过程,问了AOF文件重写是怎么做的,问了Redis为什么单线程,Redis底层的数据结构,SDS
4.mysql事务的隔离级别
5.synchronized的锁的机制,自旋锁,可重入锁,偏向锁,轻量级锁、重量级锁,锁的膨胀过程
6.一个long类型的数,让他整个位倒转,能不能只迭代8次完成
7.一个数组一个数只有一个其他数两个,找到单独的那个数(LeetCode原题)
8.一个数组有一个数超过一半,找到这个数(LeetCode原题)
9.tcp三次握手四次挥手,为什么要三次和四次
10.讲一讲java的内存模型
代码面
一道员工系统的实际题,设计数据结构,完成几个函数,入职,离职、调岗、指定上级、按级别遍历
用类树的结构,做层次遍历就好了
网易雷火
一面
1.自我介绍
2.jvm的内存布局和gc过程
3.jvm怎么调优,什么看gc的日志之类的
3.mysql的事务、隔离级别
4.mybatis防止sql注入怎么实现
5.多线程方面,ThreadLocal,线程池
6.分布式,分布式锁的实现
7.HashMap,ConcurrentHashMap,说了ConcurrentHashMap的1.7和1.8的不同和具体实现
字节跳动
一面
1.介绍一下自己,讲到了项目
2.项目涉及缓存,所以问了蛮久基于业务方面缓存怎么做,比如缓存时间怎么设置,缓存哪部分数据,要取到很久之前的数据该怎么做之类的。(用Redis做的缓存)
3.说一下Redis的使用场景
4.说一下基于Redis实现的分布式锁,问的比较细,比如线程阻塞导致,导致锁过期,其他线程获取了锁然后前一个线程又释放了第二个线程的锁这种,还问了一个线程等待Redis的分布式锁,整体等待时间的是怎么样的(这个答得不太好,主要没理解他这么问的意图)
5.说一下mysql的事务隔离级别,然后讲了四个隔离级别,以及对应产生的问题(脏读不可重复读幻读),以及InnoDB对应的2 3级别的实现,MVVC的实现,两个隔离级别产生Review的时间点和次数的区别,还有Next-Key Lock ,行锁加间隙锁。
6.问我对多线程和JUC熟悉吗,我说了AQS、ReentrantLock、线程池、CountDownLatch、CyclicBarrier,然后问了我AQS是什么,介绍了AQS的一部分内容,和具体实现。
7.问我对jvm的垃圾回收了解吗,说了从新生代到老年代的整体的过程,用什么垃圾回收算法,举了几个垃圾回收器的例子,说来空间分配担保和可能产生full gc的原因,反正尽可能细的去说自己知道的,越细越好。
8.手撕算法,LeetCode原题 23. Merge k Sorted Lists,有一点点不一样就是要求后面没满k个的也转置。
9.讲一讲一致性哈希
二面
1.介绍一下自己
2.问了一个页面重定向的问题,问我一个页面自动跳转另一个页面怎么实现,我说了前端和后端都可以做跳转,然后问我各自的具体是怎么做的,这部分我没答好,没了解过这部分,然后问了301和302的区别,我只知道都是重定向,也没答好,(一个是临时的一个是永久的,我连这个都没答出来)
3.问了mysql的引擎,索引,有哪些索引,然后问了主键索引和非主键索引的区别,讲了聚集索引,然后问了索引访问的过程,问了用聚集索引和不用的磁盘io访问次数的不同。
4.问了java线程池的具体参数,问了最长空闲等待时间的具体情况,释放线程的过程,什么时候什么情况释放,释放时队列的情况是怎么样的。然后给了一个具体的场景分配服务器和设置线程池参数。单次任务的cpu时间是100ms,要达到一秒钟1000次任务量,服务器是4核8g,问要多少服务器,每个服务器具体的线程池参数配置是多少。
5.问了一个大数据判重的题,只有一台机器,数据是int范围,给了3个思路,一个是hash切分大文件为小文件,对小文件用hashset去做判重,还有用BitSet,单机大概500mb内存可以解决,最后一个是用布隆过滤器解决,内存利用更小。 然后问我布隆过滤器的误差怎么解决,我说可以加大hash数量或者hash的范围,还有可以用多个独立的不同的布隆过滤器来解决。
6.手撕算法,链表快排,用快排的思想实现对链表的数据结构的数据做快排。
7.进程通信
hr面
1.介绍一下自己
2.问了一下我本科和研究生的经历
3.问平时日常一天是一个什么样的流程
4.问我导师和实验室的情况
5.问了我一个具体项目中分工,以及我主要做了哪些
6.问我现在有哪些offer或者offer的意向,给了口头offer
#阿里巴巴##网易##华为##酷家乐##面经##实习##Java工程师#