三七互娱面试准备
基础知识,Spring(额外:socket)
多线程,线程安全
TCP/IP,nio
Linux,Tomcat、Nginx优化
MySQL
以下面试题均来自网络:
三七互娱网站工程师(java平台工程师)面经
1.自我介绍
2.实习经历做什么
3.简历上的所有项目都问了一遍
4.JVM堆和栈
5.HashMap,HashSet,TreeMap区别
6.SQL优化
7.线程池
8.有什么想问面试官的。(技术栈偏向大数据方面)
37互娱java游戏开发面试,感觉有点凉
1. i++的并发相关
2. 设计一个线程池
3. 八大基础类型的空间大小
4. 什么时候用基本类型什么时候用包装类
前言
入门,签到,给了一张笔试题,三道开放式的简答题;
坐了一会,hr领进会议室,期间问hr,应该是2技术面+hr面
一面 20min
面试官很和蔼,聊的非常好,答的也不错;
主要问并发,锁,syncronized 与 lock 的区别,cas等
集合框架有哪些
HashTable与CocurrentHashMap的有什么区别
聊了一下项目和毕设
后面聊到最近看什么书
学习时间
未来规划
最后交流了前面三个开放题的理解、内部技术栈
问了上班时间,1、2、4早九晚九,3、5早九晚六点半,游戏发版会加班。
二面 10min
面试官态度和一面的差很多,
让写一个单例模式,问懒汉模式和饿汉模式,说让我写一个自己认为最好的
我写了一个内部类静态占位懒加载单例
他看了一眼好像不是很满意(我觉得他应该没有看懂)
让设计一个任务系统
菜鸡我完全不知道如何下手,问从哪方面入手,完全没有一点提示和引导
最后只草草答了主要的任务完成接口设计(有没有大佬交流一下项目设计从哪些方面回答啊??类图还是系统架构图还是交互图,之前阅文也问了并发系统的设计,不知道如何下手。。扯到数据库表设计,后来想想应该回答数据结构设计的)
面试官说可能是我以前没怎么接触过设计,然后就出去了
三面 10min (估计前两面评价差距太大,加面)
面试官级别看起来会比前两个高一点,
问了几个和一面差不多的职业规划问题,答的完全没有一面好
聊了项目。。。然后面试官一直说轻描淡写,说我很淡定(大哥,潜台词是啥)
大概说了各项技术的了解程度。
问了堆排序的复杂度,石乐志回答O(n)。。怎么可能存在O(n)的排序算法。。。。。。。。
问了线程池有几种类型,懵,没答上来,他想要的好像是ThreadFactory里面的提供的几个new方法,我说我的都是自己直接new线程池的。。
问虚拟机,刚在看,然后没问。
面试官说了无数遍我很淡定。。
然后回去等消息
目测凉!
结语
-
面试官还是蛮关心职业规划的,关心留存率,答的不是很明确。
-
主要还是并发、Jvm、项目
Java中的类访问权限?
用过哪些集合?我答的全是非线程安全的
用过哪些线程安全的集合?尴尬的我只说了几个有把握的非线程安全集合
实现线程安全的方法有哪些?不得不说出Vector和ConcurrentHashmap
Vector和ConcurrentHashMap实现线程安全的机制有何不一样?嗯,还算有点印象
synchronized和volatile关键字区别?说了它们的相同点和不同点
怎么知道自己是锁的什么对象?这里答错了一个,锁语句块时可以指定所要锁的对象
自己实现过线程池吗?没有,但是有看过,说了一波线程池初始化参数
最近在看什么书?
兴趣爱好?
打游戏吗?
你还有什么问题吗?问的工作内容,得知主要是处理游戏业务,还好
问的问题比较基础,而且只有Java基础,自我认知告诉我,一定不会只有这一面,总体觉得自己答得还算得体,希望能收到二面通知。
三七互娱
一面
1.Bean的生命周期
2.Atom类实现原理
3.多线程实现
4.Thread和Runnable区别
5.volatile特性
6.happens-bofore原则
7.消息队列,kafka
8.如何确保形成安全
9.HashMap初始大小,红黑树何时退化为链表
10.Actor,Akka和RingBuffer
11.冒泡排序
12.JVM内存模型
13.垃圾回收机制
HR面
1.有没有面其他公司
2.薪资待遇期待
3.上一份工作为何离职
问了一些Java的基础知识,例如网络编程、多线程,数据库的锁机制,HashMap和HashTable的区别,以及它们的底层实现
首先是两次笔试把,前两次有些题目印象还是很深刻的。
1.Java对一下哪个数据进行优化了?
A byte B int C short D long
2.完美二叉树的特点
3.violate关键字的特点
4.哪些语句具有原子性
笔试时间有点长 忘记了 感觉第二次难度有点高
然后仔细谈谈面试吧 第一次面试官应该是个资深的JAVA程序员,问的问题跟追问有许多都回答不上来 - -,还是在准备了很久的情况下,可能是我真的太菜了。第二个面试官应该是个游戏开发者。专业知识问的比较基础,比较注重逻辑思维能力。
第一轮比较难的问题:
java虚拟机内存模型介绍,讲一讲新建一个静态变量在内存中具体步骤,讲一讲类加载机制的具体步骤。虚拟机的回收机制有哪些?用过自定义的类加载器吗?
线程安全这块不也不太清楚面试官的目的,感觉我没弄懂面试官的问题?主要就问了怎么避免死锁,然后我回答了关键字跟银行家算法啥的,一直都达不到要求。
接着就是数据结构,前面的都是一些基本问题。然后就是了hashmap的底层数据结构,看过源代码吗?ConcurrentHashMap怎么实现高并发的。
总的感觉是面试官水平非常高,无论你回答的哪个方面,都能问出一些更深入的问题。
第二轮面试注重基本问题
你最近做的项目是什么,用了什么东西。
你最常碰见的错误是什么?在哪种情况下。
java中object类的方法,作用。
其他就是一个基本问题,很基础。
最后就是问游戏相关的了,考逻辑思维。
一面:
-
集合
-
list,map,set的区别,有哪些实现类
-
线程安全的list和map有哪些
-
treeset和hashset的区别
-
使用treeset和hashset的场景
-
linkedhashmap的使用场景,问我linkedhashmap的使用场景,我说可以用于LRU算法,竟然被面试官反驳了。。。根据数据结构进行解释,还是被反驳。。。
-
-
、设计模式
-
画一画代理模式的uml图
-
工厂模式和建造者模式的区别
-
简单工厂模式、抽象工厂模式、工厂方法模式的区别。
-
-
Spring
-
介绍一下spring ioc和aop,实现原理
-
-
JVM
-
jvm怎样判断一个对象是否可回收,怎样的对象才能作为GC root
-
-
java并发
-
java中有哪几种锁,同步锁和显式锁的区别,使用场景(自旋锁那些)
-
ExecutorService的实现类有哪些,只介绍了ThreadExecutorPool
-
-
java基础
-
泛型的T,E,?和空的区别
-
怎样自定义注解
-
-
计算机基础
-
tcp/ip、http和https的区别
-
什么是死锁,用代码写一个死锁
-
带宽和传输速度的关系
-
一般局域网的带宽有多少
-
硬盘和内存读写速度是多少
-
可能计算机基础学得不好,硬件和内存的读写速度真答不上来,面试官还问我是什么专业的,尴尬
接着等了半个钟,才二面,技术总监面
二面:
-
自我介绍
-
说说项目中的难点
-
两题算法题:
-
关于括号的算法题,用栈
-
最长字符串匹配,用tire树
-
-
spring ioc与aop的实现
-
原对象中两个方法,方法a与方法b。使用spring aop对该对象进行增强处理,增强处理都为都是输出一条日志。在代理对象的a方法中调用b方法,会输出几条日志。(答案是一条日志,因为代理对象a方法调用的是原对象的b方法,而不是代理对象的b方法)
-
有了解过你应聘的这个岗位的工作吗?与你的匹配吗
-
了解过游戏公司的工作机制吗
-
你认为公司加班的主要原因是什么
-
如何避免加班
Hr面:
-
期待薪资
-
自己的缺点
-
不能忍受舍友的哪些做法
-
什么时候能入职
-
还会回原来实习的那家公司吗
相对来说,互联网公司的hr面还是比较干脆的,没有那么多套路。
不会像某些公司一样,会问一些“阿里和我的公司选哪个”,“什么情况会让你拒绝我们公司的offer“这种问题。
一、首先,做了一套笔试题(题目靠回忆写的,会有一些出入)
1.补充代码,找出list集合在1-100的数字中缺少了哪些数字;
2.下列程序的输出结果是多少?
public class Test {
static {
int x = 5; //第一次被载入JVM时运行,由于是局部变量,x = 5不影响后面的值
}
static int x,y; //初始化 x=0,y=0;
public static void main (String[] args){
x--; // x = -1;
myMethd();
System.out.println( x + y++ +x ); // 1 + 0 + 1 = 2
}
public static void myMethod() {
y = x++ + ++x; // y = 0,x = 1;
}
}
答案:2
3. hibernate中get()和load()的区别。
4.简单描述JVM中一次full gc过程。
5.补充代码,Test类在多线程环境下运行,为new Test()开启一个新线程,而且每个线程的id不一样。
6.java实现RLU算法
7.线程池的设置,线程数量要考虑什么因素,写一下思路。
8.下面递归算法的复杂度,并写出优化方案。
public static fn(int n){
if(n <= 0){
return 0;
}
else if(n > = 1){
return 1;
}
return f(n - 1) + f(n - 2);
}
优化方案1:用数组保存算过的数,每次循环之前,判断该n在不在数组里面。
优化方案2:使用迭代
9.
10.关于并发问题,查看代码有无错误
二、笔试后,技术面
1.ArrayList和LinkList的区别,分别在什么情况下使用。
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
ArrayList会限制容量大小,当超出大小时会进行扩容,添加到末尾;LinkedList可以添加到任何位置。
对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
2.单例模式、工厂模式。
3.Spring框架的作用。
4.synchronized怎么使用
5.hashmap,怎么解决哈希冲突
6. set 和 list的区别
7.并发和多线程问题。
比如多个管理员在同时删除同一条数据,怎么解决同步问题。给最先管理员删除数据的管理员加一个锁,在加锁期间其他管理员不能删除该条数据。
公司环境不错,面试官很好说话,整个面试过程很轻松,不过本博主比较菜,这次面试准备不充分,很久没复习过java的这些知识,面试答得不好,面试过程就知道自己挂了。最后,祝大家顺利找到合适的工作。