三七互娱面试准备

三七互娱面试准备

基础知识,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线程池的。。

问虚拟机,刚在看,然后没问。

面试官说了无数遍我很淡定。。

然后回去等消息

目测凉!

结语

  1. 面试官还是蛮关心职业规划的,关心留存率,答的不是很明确。

  2. 主要还是并发、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类的方法,作用。

其他就是一个基本问题,很基础。

最后就是问游戏相关的了,考逻辑思维。


 

一面:

  1. 集合

    1. list,map,set的区别,有哪些实现类

    2. 线程安全的list和map有哪些

    3. treeset和hashset的区别

    4. 使用treeset和hashset的场景

    5. linkedhashmap的使用场景,问我linkedhashmap的使用场景,我说可以用于LRU算法,竟然被面试官反驳了。。。根据数据结构进行解释,还是被反驳。。。

  2. 、设计模式

    1. 画一画代理模式的uml图

    2. 工厂模式和建造者模式的区别

    3. 简单工厂模式、抽象工厂模式、工厂方法模式的区别。

  3. Spring

    1. 介绍一下spring ioc和aop,实现原理

  4. JVM

    1. jvm怎样判断一个对象是否可回收,怎样的对象才能作为GC root

  5. java并发

    1. java中有哪几种锁,同步锁和显式锁的区别,使用场景(自旋锁那些)

    2. ExecutorService的实现类有哪些,只介绍了ThreadExecutorPool

  6. java基础

    1. 泛型的T,E,?和空的区别

    2. 怎样自定义注解

  7. 计算机基础

    1. tcp/ip、http和https的区别

    2. 什么是死锁,用代码写一个死锁

    3. 带宽和传输速度的关系

    4. 一般局域网的带宽有多少

    5. 硬盘和内存读写速度是多少

可能计算机基础学得不好,硬件和内存的读写速度真答不上来,面试官还问我是什么专业的,尴尬

 

接着等了半个钟,才二面,技术总监面

二面:

  1. 自我介绍

  2. 说说项目中的难点

  3. 两题算法题:

    1. 关于括号的算法题,用栈

    2. 最长字符串匹配,用tire树

  4. spring ioc与aop的实现

  5. 原对象中两个方法,方法a与方法b。使用spring aop对该对象进行增强处理,增强处理都为都是输出一条日志。在代理对象的a方法中调用b方法,会输出几条日志。(答案是一条日志,因为代理对象a方法调用的是原对象的b方法,而不是代理对象的b方法)

  6. 有了解过你应聘的这个岗位的工作吗?与你的匹配吗

  7. 了解过游戏公司的工作机制吗

  8. 你认为公司加班的主要原因是什么

  9. 如何避免加班

Hr面:

  1. 期待薪资

  2. 自己的缺点

  3. 不能忍受舍友的哪些做法

  4. 什么时候能入职

  5. 还会回原来实习的那家公司吗

相对来说,互联网公司的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的这些知识,面试答得不好,面试过程就知道自己挂了。最后,祝大家顺利找到合适的工作。