CS-Notes/notes/面经/亚辉的面试经验-腾讯.md.txt

261 lines
8.4 KiB
Plaintext
Raw Normal View History

2018-02-22 14:47:22 +08:00
# 一面
## 讲下class文件结构
## import是在class文件哪里存储的
## 类是从哪里加载的
bootstrap、ext、user
## 栈指令集和寄存器指令集的区别
http://www.voidcn.com/blog/pq258280920/article/p-4274066.html
## GC算法。
感觉这个必问的。说了下分代收集。
## Http的action都有哪些
我回答了GET、POST、PUT、DELETE、HEAD。我说应该还有但一时想不起来了。他就没继续问了。
TRACE、OPTIONS
## http1.0和2.0的区别在哪里
我说最大的区别就是安全方面。 然后他说还有呢?
## TCP和UDP的区别
## 线程和进程的区别
## QQ应该用哪一种
我说QQ主要保证消息不丢失。可以采用TCP和UDP混合的。在网络环境差的时候用TCP保证消息不丢失。网络环境好的时候可以采用UDP加快速度。
我感觉对于TCP和UDP的理解不是很到位知乎有个问题
https://www.zhihu.com/question/20292749
## TCP是怎么保证消息可靠性的
## Git和SVN的区别。
讲了Git的分布式版本库和SVN的集中式版本库。
## MySQL假如查询非常慢怎么解决?
1. 建索引
2. 分表。
面试官感觉不太够,问还有吗?
http://tech.meituan.com/mysql-index.html
《高性能MySQL》 查询性能优化
## 排序算法都有哪些。每个的时间复杂度都是多少?
## 单链表排序
时间复杂度O(nlgn) 空间复杂度O(1)
可以使用归并排序来做。
http://noalgo.info/388.html
## 给两分钟讲下一个你做的最好项目。
我讲了税务主题爬虫项目。介绍了爬虫的技术。以及我负责URL去重正文提取以及后期的重构。
然后面试官根据这几部分分别展开问。
## url去重。
BloomFilter + 根据文件名去重。
讲了下为什么这么做。然后面试官问为什么存文件。我说是因为后期恰好也要建搜索引擎,刚好存文件的时候判断文件是否存在。
面试官好像对搜索引擎很感兴趣,于是似乎想问我搜索引擎的知识,我说这块不是我负责的,但是知道一些。面试官说,不是你负责的就算了吧。
## 正文提取的步骤
简单说了下所用的哈工大的基于行块密度的正文提取算法,中间也加了常见的杂质过滤,以保证最终结果的纯净。
面试官问了怎么组织这些杂质信息呢?这些信息都放在哪里了呢?
我说放在了数据库里面然后启动之后加载到redis里面。
## redis用过吗讲下你所知道的redis
讲了下IO多路复用
## 说下IO多路复用。 epoll和select的区别。epoll的水平触发和边缘触发。
## 说下BloomFilter的原理。
这个幸好我寒假有研究。具体可以看我的博客。这块回答的蛮好的。
http://www.cyhone.com/2017/02/07/Introduce-to-BloomFilter/
## Hashmap 底层实现
讲一遍Hashmap的原理。
## Hashmap 可以存null吗
value可以为null。key只能有一个为null。
## ConcurrenyHashMap的底层
我说没看过源码,但知道他是由分段锁来实现的。也没继续问下去。
## 除了synchronized还有其他的同步方式
重入锁、读写锁。还有一些java提供的同步类。
## 读写锁。加读锁的时候能不能写?
## Web后端是怎么分层的。为什么这么分。
讲了下MVC和后端的service、dao和action。
我说主要是业务的解耦以及可以分工合作。
## 讲一下你所知道的docker。
我说了下docker和虚拟机的区别主要区别是docker是基于宿主机的内核而虚拟机是有自己的操作系统内核。
主要相似性就是都提供了运行环境的隔离。
http://dockone.io/article/723
然后面试官就根据这个点,深入问了一个问题。
## 宿主机能不能看到docker的进程
我说不能看到。其实是可以看到的!
http://dockone.io/question/529
## NOSQL和SQL的区别以及每个的应用场景
# 二面
## StringBuffer和StringBuilder的区别
StringBuilder 线程不安全
## Java中final的用处
1. 用于类 不可继承
2. 用于方法 不可重写
3. 用于属性 值不可修改,对象不可修改地址
## 什么情况下不用final会编译失败
这个没回答上来。下来查了一下
1. 匿名内部类来自外部闭包环境的自由变量必须是final的
2. 在外部类成员方法内部的内部类。
3. 在一个代码块block里的内部类。
https://www.zhihu.com/question/21395848
## 说下HashMap的底层实现
这个目前所有面试中都问了。 所以HashMap的源码一定要好好看。
## Java8解决冲突的方式
我说还是拉链法似乎不是很满意然后我说当超过冲突某个值时Java8会把链表改为Treemap。
## ThreadLocal了解多少
讲了下ThreadLocal的源码实现thread的localmap对象之类的。
## 快排的最大时间复杂度、最小时间复杂度、平均时间复杂度。
## 快排是不是稳定的。
快排是不稳定的。
这个真是自己找死,我又说了堆排序是稳定的。实际上是不稳定啊脑子啊脑子。。
http://baike.baidu.com/item/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E7%A8%B3%E5%AE%9A%E6%80%A7
## 1000万个数据的Top K
说了最大堆。然后让我计算1000万个int有多大然后说内存足够。
然后我讲了下如何用快排实现topk的过程。
当内存足够的情况下用快排时间求topk复杂度可以为O(n)
## TCP的四次挥手
## UDP一次最大发送多少个字节
## Http状态码
主要问了302、404、500
http://seo.ibw.cn/display.asp?id=82
## redis和memcached的区别
给了个选择题。实际上就是问redis和memcached的差异最大的差异就是memcached不支持复杂类型如list等。
## 最快的进程间通信方式是怎么样的
## linux命令
df -h 查看磁盘空间
du -h 查看文件夹大小
lsof 查看端口占用
top | grep 查看cpu占用
ps -aux | grep
linux如何查看一个进程的执行路径
http://lovesoo.org/view-processes-running-linux-full-path-method.html
ll /proc/{pid}
通过进程名查找进程PID可以通过 pidof
## 逻辑题。
五辆汽车加油问题。
1/5+1/4+1/3+1/2+1
## 问了一个多分布式消费者请求生产者的问题
当时一时间没想出来。就往raft协议和一致性hash上面说
## raft协议、一致性hash
扯了一波主节点分发领导者选举一致性hash啥的。我都不知道我在说啥了估计面试官也晕晕的。。
raft协议说完后面试官问如果没有主控节点所有节点都是平级的应该怎么如何设计。
我说应该加分布式锁。
## 如何实现一个分布式锁。
我说使用redis可以实现分布式锁但是具体的怎么实践还不是很清楚。
具体的分布式锁的细节,都在此博客中有
http://ifeve.com/redis-lock/
最后面试官介绍说他们是腾讯手机QQ团队
前面两面电面面试完之后HR通知我去深圳面试当天有三面和四面。
# 三面
手写代码。
1. 两个字符串前n位忽略大小写的比较。
2. bitmap实现。
手写完代码之后面试官直接带我去四面,四面是总监面。
# 四面
1. 英语六级
我的六级是飘过,面试官对此略不满意。
2. linux熟悉吗.
我说了下/proc.面试官让我讲下底层实现。。
然后面试官问linux下的inode熟悉吗。
我依稀记得是apue里面讲过但一点也想不起来了。就说了不知道。
3. TCP为什么四次挥手。
4. TIME_WAIT阶段是干嘛的。
5. “六度空间理论”该如何表示
我说了下用一个巨大的图,然后将其转化为各个节点之间的最短路径问题。
6. 链表倒数第k个怎么快速找。
双指针方法
7. Mac os的发展史
8. nio
9. 二叉树遍历,非递归的方式
四面我个人总体感觉还不错但是面试完后在腾讯大厦等了一下午也没HR面因为要回武汉就没继续等下去后来通知结果跪了。
想想四面走来最终最后跪了,也是蛮遗憾。但是也发现了个人在很多方面的不足。
后来发现竟然是因为提前走了被认定为自动放弃。。。。好气。。
后来参加了腾讯在武汉的校招。到了现场后发现自己被调到了运营开发岗。
# 一面(运营开发)
## 从浏览器到服务器请求结果,整个流程
面试完之后面试官通知我过了一面。看面试官心情好,就申请了转岗。
晚上6点多的时候被TEG的捞了起来。
# 一面
# 二面
# HR面