1、自我介绍
2、项目介绍(秒杀系统)
3、集合用过哪些(ArrayList、LinkedList、HashMap、ConcurrentHashMap、TreeMap、TreeSet这些)
3、ArrayList和LinkedList区别
4、两个list求差集(没理解意思)
需要借助一个Set
5、HashMp讲讲(说了1.7和1.8区别,自己还说了1.7会造成链表死循环)
链表长度大于8变为红黑树
6、死循环怎么造成的(balabala)
7、如何检测链表死循环(这里又理解错了,说了上线排查,给自己埋了一个坑,后面理解了,就是链表如何确认存在循环,这里说了双指针)
8、好,既然你说到上线排查,那你说说你用过哪些jvm指令(这里忘了。。。)
9、看你项目里用了Speing和Mybatis,那你说说看Spring吧(说了IOC和AOP)
10、bean的生命周期(把自己讲糊涂了,生命周期里面有好多好长的方法名和类名,记混了。。。)
11、Mybatis 原理以及如何与Mapper体育映射的(这可没了解过,直接说不会)
12、Mybatis缓存听说过没(这里说了下一级缓存和二级缓存)
13、问项目里的秒杀系统怎么设计的(这里主要说了下通过redis预减库存、消息队列异步下单)
14、缓存如何与数据库保持一致(先更新在删除)
15、如果缓存清空了,大量请求落到db上,怎么办(这里说了限流器,由于我也实现了一个简单的限流器,后面就接着问上了)
15、讲讲你的限流器怎么是实现的(漏桶算法,利用了atomic原子类balabala)
两面技术面
一面:问题偏基础主要是Java基础知识
1.抽象类和接口的区别
2.集合框架相关知识(比较重要)
3.多线程的实现方式
四种方式
4.数据库引擎相关
5.索引类型
6.乐观锁和悲观锁
二面:问题面比较广,技术到HR的问题都有
1.多线程(手写简单多线程)
2.数据库优化
3.集合框架你
4.锁
5.手画springMVC流程图
6.mybatise中#和$的区别
7.异常处理中return的执行顺序
8.代码块的初始化执行顺序
9.快排的实现原理
10.spring的特性
IOP 和 AOC
11.项目相关问题(从技术到任务和人员分配,遇到的技术难题,如何解决的)
12.Redis缓存,消息队列(偏概念)
还有很多HR的问题,个人爱好、优缺点、性格怎样等等,全程一个多小时,面试官人非常不错,面试体验很好,
在咖啡馆面得,中途hr小姐姐看我等的比较久还买了杯咖啡给我
一面:(60min)
简历上的项目介绍问了一下。
Q:介绍一下你知道的多线程相关的知识。
A:介绍了线程池的参数(最大线程数,核心线程数,阻塞队列,创建线程的工厂,饱和策略)
Q:这个线程池有什么用 A:(我以为问的threadpoolexecutor有什么用)3种类型线程池都是这个类创建。
Q:饱和策略有哪些 A:4种饱和策略介绍了一下
饱和策略是当最大线程数满,以及阻塞队列满时,拒绝任务的策略。
Q:核心线程数5最大线程数10,线程提交的策略 A:小于5先创建线程执行,再阻塞队列,再创建线程执行,再饱和策略
Q:介绍一下netty,应用就不用讲了,底层知道什么说什么 A:讲了一下server的bootsrtap流程,又讲了reactor模型,又讲了netty的4种零拷贝(主要讲了directbuffer如何减少拷贝次数和user space、kernel space间的切换,然后讲了用文件描述符实现更高效的文件传输零拷贝),然后讲了netty如何避免NIO空轮询的bug。
Q:选一个你熟悉的java集合介绍一下 A:介绍了hashmap(基本结构,什么时候扩容,扩容流程,求hash的时候会对高位和地位做hash)然后又说了concurrenthashmap(扩容,怎么加锁,如何统计size)
Q:介绍一下多线程锁 A:说了一下sychronized和可重入锁。一个基于JVM实现,要获取对象的monitor,markworld里面记录了偏向锁轻量级锁和重量级锁状态,一个基于AQS实现,主要靠修改volatile修饰的state参数实现,修改是CAS。然后说了几个区别(可重入锁lockinterruptibly()方法可中断地获取锁,可重入锁可以公平获取锁)
Q:什么是公平什么是非公平 A:非公平加入AQS的同步队列前先尝试获取锁,公平是直接加到队尾
Q:ThreadLocal知道吗 A:知道,基于AQS实现的读写锁就是用ThreadLocal记录线程获取锁的次数。但是threadlocal保存对象的entry里面的key是一个指向threadlocal的弱引用,可能会造成内存泄漏,用完了要remove一下
Q:BIO NIO AIO 区别 A:BIO是阻塞IO NIO是selector轮询,AIO是回调函数。然后说了netty尝试使用AIO但是没有效率明显提升,就没有使用AIO(哪里看到的不记得了,不保证正确?)
Q:BIO还有使用的价值吗 A:有吧,具体场景不记得了(有一些采用阻塞方式的库需要使用BIO)
Q:数据库隔离级别,默认隔离级别,怎么防止幻读 A:4种隔离级别,默认可重复读,锁定记录上的索引和之间的间隙(next-key lock)
Q:介绍一下索引 A:innodb使用B+树索引,mongodb使用b树索引,然后讲了一下b+树(数据结构,减少了磁盘io,主索引是聚簇索引,推荐采用自增ID做索引)
Q:两个数据库场景题 第一题:联合索引ABCD,什么查询用到索引; A:最左匹配原则 第二题超出我的认知范围不记得了?,是一个limit的优化问题
Q:redis了解吗(了解)介绍一下基本数据结构,有优先级数据场景用那种 A:答了5种基本结构,用有序列表保存
Q:持久化方式 A:一个快照的方式,是基于cow实现的,一个增量备份(我都不记得叫什么了。。面试官超级nice,提醒了我叫什么)
Q:跳表了解吗 A:知道结构,但具体实现不深入
二面;(20min都不到)
还是介绍项目
Q;(估计是看了一面面试官写的总结)看你知道的还挺多的,jvm了解吗 A:内存结构和gc肯定了解,然后说了7种gc,没让详细介绍。
Q:MQ知道么 A:知道是什么,具体框架不太了解
Q:spring呢 A:ioc aop知道,但是底层没看过。
然后面试官就说学习能力挺强(整个秋招我收到最好评价了!!!),可以针对一个框架比如spring底层了解下。
1.简单选择排序
2.索引
3.索引优化,索引失效
4.ArrayList linkedlist
5.快速失败,安全失败
6.迭代器,枚举器
7.怎么获得hashmap的键值对
8.gc算法
9.引用类型
10.堆和栈
11.final和finally(aop)
12.项目逻辑
1.怎么优化like导致的索引失效(翻转函数,覆盖索引)
2.聚集索引,非聚集索引
3.接口(mybatis接口的动态代理)
4.值传递
5.jdk,jre,jvm的理解
6.mybatis的插件原理
HR面:
1.给她介绍项目
2.岗前培训
3.期望工作地点
4.学校成绩
许愿借贷宝,大华,金蝶的offer
java中public、private等的作用
修饰方法、属性的访问权限。
介绍几个常用的Map容器
HashMap
:<Key
,Value
>键值对映射,支持null
值,线程不完全ConcurrentantMap
:jdk1.8以后支持并发的Map容器HashTable
:不支持null
的Map容器,线程完全TreeMap
:有序的Map容器在有很多张表连接的非常复杂的查询时如何优化
数据库进行复杂查询时,如何优化查询的响应时间
介绍下JDBC、Hibenate、MyBatis
JDBC
:是java用于连接数据库的驱动,Hibenate
、MyBatis
都是基于JDBC
进行工作的。Hibenate
、MyBatis
都属于Java的ORM
框架,用于将关系型数据库映射到对象中,封装了数据库相关的操作。
二者的区别主要在于MyBatis
是可以封装自己写的SQL
代码,而Hibenate
则只能使用其自带的一些操作,在业务操作复杂时,MyBatis
具有更好的灵活性,能根据需求进行SQL
的编写以及优化。
MyBatis连接不同数据库如何配置
除了SSM、SSH外,是否关注了解其他的开源框架
画下项目的大致架构
项目答辩PPT是如何分节组织的
职业规划
项目团队中扮演的角色
Java虚拟机常用的参数
jdbc常用的配置
mongodb和mysql异同
Linux常用的发行版本
Linux如何查看内存、CPU等的使用情况
一面
一面中,除了项目外,大部分问的偏基础,在数据库方面问的问题较多,且涉及到了在较复杂的业务需求时的数据库优化问题。平时项目规模较小,在数据库优化的那几个题答的不是很好。最后对于开源项目的关注在此前的面试、看过的面经中基本没有遇到,比较出乎意料。
面试的关注点主要是还是集中在个人的技术以及对技术的关注和了解上,整体属于比较普通的技术面。
二面
二面时,面试官是大数据部门的经理,对项目的架构规划问的比较多,一开始就让对两个曾经项目中的架构方面做介绍,以及比赛项目答辩的PPT章节划分,介绍的同时会问为什么要这样设计。在问技术相关的问题时,在发现是我比较熟悉的领域后就直接跳过了,在我不怎么熟的领域时则让我尽可能回答我知道的,感觉在试探我的知识面。最后是职业的规划,问的也很细,在说完自己的想法后,面试官结合我之前在架构方面的回答,提了很多今后职业发展的建议和项目流程的理解(被上了一课,收获颇丰),然后HR面。
二面考察的很广,面试官不仅想知道我会啥,还我那些不会的基本上问了个遍,应该是要对个人的能力、知识面有一个准确的评估。除了开发直接相关的知识外,在项目管理和架构上也问了很多,给了很多建议。属于专业岗位先关的非常综合、非常有意义面试。
想想这个夏天到现在,腾讯爸爸前前后后捞了我四次?,现在依旧没上岸,10.17更新的复试待安排 不知还有没有机会面试。
记得第一次被捞,是在7月底。那个时候,腾讯的提前批都没开始,面试官应该是看到我春招的实习简历捞的我 给我打电话 说腾讯游戏的后台开发岗。 对c++ 和数据结构熟悉吗?? 楼主本科c++,读研大多是Java,我就告诉他数据结构还行,c++以前用的多,但是现在***常大多用Java。简单了解了情况后,电话里约好了当晚7点 视频面试,但是想到面试官询问c++,我知道腾讯的技术栈c++居多,游戏相关的部门c++更是要求高一些,所以心里却是也没抱太大希望。
当晚6点40上线,面试官不一会也上线了。虽然没到面试时间,我看到牛客左边出了两道题,自然的将编程语言换成Java编辑,面试官在聊天栏里问了c++不会吗?? 我说,我现在主要用Java编程写代码,c++以前会。然后 就没有然后了?。面试官没有在说话,到了面试时间,也没发起视频通话。其实我预感到这次面试 不会成功,但是我没想到面试官就这样走了。 邮件通知的电话分机号,打过其居然是空号(我真是服了,当时真的挺生气的。你可以和我说面试结束,不面了。这我都能接受,但是也不能这样一走了之吧。)
有了这次经历,老实说,确实让我对腾讯的一些部门真的望而却步。 不面我没关系,但是不是可以和我说下。我又不是接受不了挂掉的事实。?
这次的腾讯面试 是面试官突然捞我,事先没有打电话预约,预感和大数据应该很相关(因为校招 我都还没投,他看到的还是我在春招实习的简历),预定的面试时间还有15分钟时,因为忘记在公众号里进行确认,面试官还特意和我打了个电话进行确认。
面试开始:
自我介绍。
讲一讲RDD Spark提交作业了解哪些常用的参数 driver executor(这一块面试官问的特别细 超过我的预期)
提交一个作业时你如何指定多少个executor 每个executor占多少内存等等,划分的依据是什么??
面试官问了一个问题Spark作业处理1TB的数据,你改分发多少个executor 每个executor占多少G(这部分知识如果腾讯云面试能走下去 一定要弄清楚,机会太难得,后面我提问面试官的时候这个问题答案的时候 他说可以在提交作业的时候指定partition的个数 还有什么groupByKey 我有些记不太清楚了 内存不足的时候 可以使用虚拟内存 可以用kryo序列化机制来降低内存消耗。)
问了问Yarn如何进行资源管理的(简要讲一下ResourceManager NodeManager ApplicationMaster Container等等 )
问了下你关于Zookeeper Kafka的了解
举例说明一下Spark Hive的应用场景。
对SparkStreaming熟吗?? 简单讲讲SparkStreaming(批流处理 DStream StreamingContext tramsformation和output操作 有状态转换和无状态转换等等)
有了解其他实时计算的框架(提了一下storm flink,但是因为自己对这两个不太熟悉 所以也没敢说太多)
给你1个PB的log数据,设计一个大数据服务架构进行有效的数据分析(在5分钟之内出结果)(我从数据存储 HDFS Hive Spark 实时计算 HA等方面讲了一下)
你如何进行数据采集(我说了Flume) 面试官问有了解ES(我说听过ElasticSearch,但没怎么了解)
面试结束之后,问了下面试官是什么BG(他说他们是腾讯云后台部 哇,果然 问的都很专业 不来那些虚的)
然后我就问了下何时有反馈 那个1T数据分配executor的问题。
当时他说过两天就会有结果,问我什么时候回长沙? 可能有现场面。当时我还抱有一丝希望,以为还有一次面试机会的。这次面试经历,算是我之前面试腾讯以来,技术栈和我最贴近的了,可惜两天后进度灰掉了。
一面是电话面试 提前两天左右得到面试的信息,也就是腾讯云灰掉的当天(在这里再次表达对腾讯云一面就凉凉的惋惜,虽然知道自己菜)
面试官电话打过来,这一次 全程听的都不是很清楚。面试官上来的几句话是确认面试人的姓名 然后说开始面试。
参考简历,简单自我介绍一两分钟之后,面试官说那我开始问问题了罗。(他这句话,莫名触碰到我的笑点)
熟悉Java,c++应该也还可以吧。讲一讲常用的排序算法,例如冒泡,快速排序这些(从时间复杂度来划分成三类 O(n^2) O(nlogn) O(n) 来逐一讲讲 重点讲一下快排和归并排序)
讲讲数据库(重点讲了讲MySQL 从事务的四大特性ACID 并发不一致带来的问题 以及解决并发不一致有事务隔离级别 封锁操作 索引(B+树 哈希 主索引 辅助索引 存储引擎InnoDB MyISAM 等等))
面试官问了一个问题是主键和索引的区别
网络I/O熟悉吗,讲讲epoll的两种工作模式LT和ET的区别
讲讲对zookeeper的理解
这个面试官很直爽,电话面试不到半个小时就结束了,然后就是你有什么想要问我的吗?
问了下什么部门,然后事务型开发大概做些什么?他很爽快,但是电话里的内容听得不太清楚,大概是和数据库比较相关。
面试完就和我说你一面过了,后面还有很多轮面试。我特意还问了他后续哪些需要好好准备的。 他就说了网络编程,然后听到了说zookeeper他觉得我还没讲太清楚
复试待安排等了差不多快两个星期,没有等待复试。灰掉了,好吧。
自我介绍
面试官上来问了下你在读研期间的研究方向(专硕 方向跟着导师做)
讲讲你熟悉的大数据框架(Spark Hadoop等)
你们的大数据平台是用的CDH,讲讲hadoop的使用(hadoop分为三个部分,HDFS MapReduce Yarn然后简单扩展)
讲讲Spark 你对哪几个部分比较熟悉(Spark Core,SparkSQL),有看过Spark的源码吗?(讲一讲Spark 中shuffle的过程)
讲一讲SparkSQL和传统的数据库做数据分析处理的区别(传统的方式,单机数据库受到cpu 内存的限制;即便部署MySQL集群 读写分离,master服务器在写数据时也会有性能瓶颈;而spark分布式采用的是多台机器 采用的是Master/Slave结构,处理一个复杂的作业时采用的分而治之的思想)
讲一讲hadoop中存储数据如何进行冗余加载,并且保证数据不会丢失了(面试官显然不是做大数据的,其实这里就是问HDFS的多副本机制 以及某个datanode挂掉了怎么办? 在文件读取时如果某个datanode因为负载过多或者内存溢出挂掉了 可以通过回到namenode查找该文件的元数据metadata信息(主要是fsimage和editlog)查找到该文件所在其他的datanode信息) ;
那现在这里有一台全新的服务器加入集群 如何进行文件写入(其实这里就是进行集群的扩容操作,当集群中有的节点挂掉了不能正常使用 需要进行扩容时,首先对集群中已有的文件副本数量进行检测,小于集群中设置的副本数量时首先进行文件写入操作将文件写入新扩容的节点中)
你们在集群中进行shuffle时如何检测网络传输的流量开销??(不会,没研究过)
你们在大数据开发时有考虑过网络传输流量的开销吗?如何检测??(不会)
Java比较熟悉是吗?是从本科开始一直使用Java吗?(本科主要用c++,读研做一些项目开始使用Java,后续都是Java居多)
讲一讲hashmap的结构(数组+链表(红黑树));
讲一讲java中gc机制(gc主要针对于jvm中的堆区域,从判定哪些对象存活(GC Root可达性回收算法) 到gc算法(复制算法 标记-清楚算法 标记-整理算法)到成熟的垃圾回收器(G1 CMS等等)),讲一讲java中类加载过程,包含双亲委派机制(包括加载 验证 准备 解析和初始化几个过程),讲一讲java中的类加载器(Bootstrap ClassLoader,Extension ClassLoader,Application ClassLoader和User ClassLoader),有自己写过加载器吗?(没有)
讲一讲多线程和多进程的区别?
Linux用的多吗?(还行) 在平时,如何查看linux的一些cpu 磁盘信息的(一般情况下使用top 查看cpu的负载信息 和实时的进程消耗资源,查看磁盘信息使用fdisk -l,iostat -x 10查看磁盘IO的性能 查看cpu信息 cat /proc/cpuinfo |grep name **; )
讲一讲为什么机械硬盘随机读取的性能比连续读写的性能差很多(简单来说就是 随机读写的时候磁头要多次寻道,消耗很长时间。除此之外,硬盘读取连续数据的时候会预读,也就是前面的数据还在路上,后面的数据就开始读了。但随机读取会浪费预读。另一个原因是文件系统的overhead。读写一个文件之前,得一层层目录找到这个文件,以及做一堆属性、权限之类的检查。写新文件时还要加上寻找磁盘可用空间的耗时。对于小文件,这些时间消耗的占比就非常大了。)
MySQL用的比较多是吧,有用过Redis吗?(用过) 讲一讲MySQL Hive Redis之间的区别个联系(首先讲传统数据库MySQL和Redis之间的区别联系,然后讲一讲hive区别于MySQL)