腾讯后台初面面经(Java)
写在前面
3.18 晚面试, 生死未卜, 欢迎交流
java基础
- 基础容器简单介绍
- hashmap的实现, hash冲突如何解决, 答:基于桶, 拉链法, 追问:还有什么解决冲突的方法, 答:将冲突元素顺序后移
- concurrentHashMap 的线程安全是如何实现的 答: 使用分段锁 追问: hashtable, concurrentHashMap 使用时如何选择? 答: hashtable 并发性低, 应尽量选择后者
- 分布式系统里面需要获得concurrenthashmap的size可以获得准确的吗?答:不可以,只能获得近似值。追问:这个近似的size是如何获得的。答:(不知)追问:分布式系统如何保证数据的一致性同步?答: 数据同步.追问:还有什么。
- sychronized关键字知道吗? sychronized的方法加在实例方法和加在static方法上有什么区别? 答:(不知)
- 一个线程获取了sychronized修饰的实例方法,一个线程想要获得sychronized修饰的静态方法,可以获得吗
- sychronized和lock的区别? 答: lock需要显式释放锁, 但对锁的管理更加细粒度。
- 可重入锁为什么是可重入的 答:同一线程可以获得自己已经持有的锁, 避免死锁
- 如何避免死锁 答:避免分步获取资源, 检测不同线程所持有的资源, 重启
- 如何获取一个类的private域, 提示:反射
netty
- 你项目里面的lengthbased...是干什么用的? 答:解决粘包拆包。追问:怎么解决。答:协议在某个字节设置消息体长度。追问:还有什么方法。答:基于定长,基于分隔符
- netty为什么高性能? 基于NIO, 同时实现了一些高效的组件
- 为什么NIO性能高?答:如果阻塞式单线程浪费大量时间, 如果多线程,消耗变大。追问:多线程消耗大在哪里 回答:线程的创建,销毁和切换。 追问:那我使用了线程池呢
- 回答:(这个点不是很清楚)用了线程池线程还是会阻塞,利用率不高
- 让你用netty实现一个http server思路是什么? 答:(答不上来)追问:http报文的格式是什么?答:举了个例子
数据库
- mysql有几种存储引擎 答:只知道innodb 追问:innodb有什么特点? 答:自动事务提交?
- 事务是什么? 答:略。 追问:一个应用系统里面如何保证事务结果 答:(不太清楚)
spring
- spring里面是如何解决循环依赖的
爬虫
- 爬虫如何防止被禁 答:降低爬取频率,更换ip
- 加入作为一个网站如何反爬 答:使用验证码,一些功能需要登录 追问:这样会降低用户体验,还有什么方法 答:ajax动态生成内容。 (感觉不太满意)
gc
- jvm的垃圾回收算法是什么样的? 答:各种类型的引用,标记回收。 追问:你这个是hotspot, jvm的标准实现是什么
- jvm的内存是如何分配的。 答:常量栈,堆。 追问:堆上的内存是如何分配的
工具问题(迅速唧唧)
- 你都拿shell做什么。 答一些管道,重定向的简单任务 追问:如何查看多个java线程的cpu占用率 答:(不知)
- 有没有用过java的一些命令行工具 gc什么的 答:(没有)
算法&&&系统设计
- 给你一个超大的url集合,要对url进行去重,而内存空间有限,你会如何设计。 答:缓存。面试官否:你怎么确定换出呢?答:取hash. 问:你如何解决碰撞呢?
分布式系统
- 有了解分布式系统吗? 答:举了一些框架的例子。问:知道cap原则吗? 答:(不知) 问:知道dubbo吗, 用过吗。答:知它的负载均衡,服务发现和管理什么的
- 有了解腾讯的XXX分布式框架吗?(名字记不得了)
- 有了解过hadoop吗,它的一些背景,原理和使用