松鼠AI二面笔试真题+面经(4.25)
松鼠AI面经
1.自我介绍+实习+项目(特别深挖实习,实习磕巴了半天主要是真不记得业务了,最后才问了项目,讲了其中一个项目的整个业务流程,数据库设计,业务模块设计,其中的难点和解决方案。。。。这部分问了得20分钟)
2.jvm内存结构?实例对象放在那个位置?堆的内存结构是怎么样的?垃圾回收有那些算法?展开说一个?说一个垃圾回收器的回收有哪些步骤?那些阶段会产生STW。
3.线程池模型?有那些参数?你项目中如何创建的线程池?你的线程池怎么设置的核心线程数和最大线程数?这两个参数有什么意义?有调整过核心线程数和最大线程数嘛?
剩下一些也都是常见的八股,具体记不清了,八股总体时间就10分钟出头。
反问阶段
对实习生的培养机制?面试结果多久出?面试表现和不足?
答:基础不错,但是实习不够深刻,项目还行,base上海,来了肯定是要做事的,我们这边业务比较忙,要996。
笔试真题如下
以下是我面试写的答案 不一定对,耗时25分钟(笔试期间开着摄像头的,还接了个别的公司的电话)
Java笔试
1. 【选择题】char类型占( B)个字节
A、1
B、2
C、3
D、4
2. 【选择题】下列说法正确的有(C)
A . class 中的 constructor 不可省略
B . constructor 必须与 class 同名,但方法不能与 class 同名
C . constructor 在一个对象被 new 时执行
D .一个 class 只能定义一个 constructor
3. 【选择题】 以下( B )不是合法的标识符
A、 STRING
B、 x3x;
C、 void
D、 de$f
4. 【选择题】以下程序的运行结果是:( B )
Java
public class Increment{
public static void main(String args[]) {
int a;
a = 6;
System.out.print(a);
System.out.print(a++);
System.out.print(a);
}
}
A. 666
B. 667
C. 677
D. 676
5. 【选择题】下列输出结果是( D )
Java
int a = 0;
while(a < 5){
switch(a){
case 0:
case 3:a = a + 2;
case 1:
case 2:a = a + 3;
default:a = a + 5;
}
}
System.out.print (a);
A、 0
B、 5
C、 10
D、 其他
6. 【选择题】执行下面代码结果( B )
a. for(int i=0;;){
System.out.println(”这是 "+i);
break;
}
A、 语法错误,缺少表达式2和表达式3
B、 死循环
C、 程序什么都不输出
D、 输出:这是0
7. 【选择题】分析如下Java程序的代码所示,则编译运行后的输出结果是( C)
Java
public class Test {
int count=9;
public void count1(){
count=10;
System.out.print("count1="+count + ";");
}
public void count2(){
System.out.print("count2="+count);
}
public static void main(String[ ] args) {
Test t=new Test();
t.count1();
t.count2();
} }
A、count1=9;count2=9
B、count1=10;count2=9
C、count1=10;count2=10
D、count1=9;count2=10
8. 【选择题】下列代码输出为(B )
Java
public class ReferencesTest
{
static class Student {
private String name;
}
public static void main(String[] args) {
Student studentA = new Student();
studentA.name = "aaa";
Student studentB = new Student();
studentB.name = "bbb";
setName(studentA.name, "ccc");
setName(studentB, "ccc");
System.out.println(studentA.name + ", " + studentB.name);
}
private static void setName(String name, String newName) {
name = newName;
}
private static void setName(Student student, String newName) {
student.name = newName;
}
}
A、aaa, bbB
B、aaa, ccc
C、ccc, ccc
D、ccc, bbB
9. 【选择题】以下( D )代码,能够对数组正确初始化 ( 或者是默认初始化 ) 。
A、 int[] a;
B、 a = {1, 2, 3, 4, 5};
C、 int[] a = new int[5]{1, 2, 3, 4, 5};
D、 int[] a = new int[5];
10. 【选择题】根据下面的代码,String s = null;会抛出NullPointerException异常的(AC)。[两项]
A) if( (s!=null) & (s.length()>0) )
B) if( (s!=null) & & (s.length()>0) )
C) if( (s==null) | (s.length()==0) )
D) if( (s==null) || (s.length()==0) )
删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
//快慢指针
Public ListNode removeListNode(ListNode head, int n){
ListNode badNode = new ListNode(-1);
badNode.next = head;
ListNode fast = badNode;
ListNode slow = badNode;
Int times = 1;
While(fast != null && times <= n){ //快指针先移动n次
fast = fast.next;
times++;
}
//之后一起移动
While(fast != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return badNode.next;
}