周六晚上八点半突然接到了腾讯PCG的面试电话,还处于一脸懵逼的状态,简历投的是WXG,然后莫名其妙被PCG捞起来了,然后记得提前批应该已经在三月份过去了,四月份应该是正式批了吧,但又没有参加笔试,然后就莫名其妙参加电话面试了,面试时间大概一个小时。话不多说,面经奉上。
一、自我介绍
二、聊项目,说一下印象比较深刻的一些地方
三、因为项目是跟数据库相关的,之后就问了很多Mysql的问题
1、mysql底层存储数据结构
答了B+树和原理。
2、mysql索引的种类
B+树索引、哈希索引、R-Tree索引、全文索引。
3、mysql的事务管理,如何设计一个事务系统
这个不太清楚,从事务四个特性ACID来答得。
四、有一个项目里面用到了redis,然后又问了redis的问题
1、redis和mysql的区别
2、redis为什么快
五、写代码,给一个只包含ascii字符的字符串,计算每个字符出现的次数
这个很简单,用了HashMap
六、接着代码问了HashMap底层原理
jdk1.8前:数组+链表
jdk1.8后:数组+链表/红黑树
七、ConcurrentHashMap底层原理
jdk1.8前:分段锁
jdk1.8后:sychronized+CAS,对每个链表头节点或者红黑树根节点进行同步
八、接着ConcurrentHashMap问了CAS原理
比较交换,用的是硬件底层的CPU指令CAS,相当于无锁,减少了线程上下文带来的开销。
九、Java其他的一些并发数据结构
原子类、读写锁、信号量等。
十、问了阻塞队列及其具体的实现有哪些
ArrayBlockingQueue、LinkedBlockingQueue等。
十一、AQS原理,如何保证并发
十二、web安全方面的问题,常见的web攻击手段有哪些
答了xss和js脚本注入。
十三、对加密算法的了解
了解不多,就没细问了。
十四、提问环节