java岗,已拿 offer 做个记录:线上笔试 + 4 面
三道笔试题,难度适中。
/**
* 打印质数
* @param n
*/
public static void printPrimeNumber(int n) {
if (n >= 2) {
System.out.println(2);
}
for (int i=3; i<=n; i+=2) {
// 质数除了 2 其余都是奇数,故从 3 开始,步长为2
boolean isPrime = true;
for (int j=3; j<i; j++) {
if(i%j==0){
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
}
/**
* 将数组的 0~k-1 位,与 k~n-1 换位置
* 这里使用 三次反转 可得到答案
*/
public static void transArray(int[] a, int k, int n) {
reverse(a, 0, k-1);
reverse(a, k, n-1);
reverse(a, 0, n-1);
}
public static void reverse(int[] a, int i, int j) {
int temp;
while (i < j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
/**
* 有个一维空间,x,y是点,操作序列(1,x,y)表示在x,y之间画线,
* (2,x,y)表示在x,y之间擦除线,经过多个这样的操作后,有多少条线
*/
class Line{
// 用成员数组来表示数轴
int[] arr;
// 操作
public void doLine(int type, int x, int y) {
if (y > arr.length) {
// 数组不够长则扩容
arr = Arrays.copyOf(arr, y);
}
switch (type) {
case 1: paint(x, y);break;
case 2: erase(x, y);break;
default: break;
}
}
// 画线
public void paint(int x, int y) {
while (x < y) {
arr[x] = 1;
x++;
}
}
// 擦线
public void erase(int x, int y) {
while (x < y) {
arr[x] = 0;
x++;
}
}
// 计算线段数
public int count() {
int sum = 0;
int flag = 0;
for (int i : arr) {
if (flag != i) {
if (i == 1) {
sum++;
}
flag = i;
}
}
return sum;
}
public static void main(String[] args) {
Line line = new Line();
line.doLine(1,1,8);
}
}
面试是使用牛客的面试系统,面试完后当天或者隔天会给回复(通常是晚上6点~9点),然后电话邀约下一场面试;
下一场面试会在隔周,等的时间有点长,但是都会有回复(有回复好评)
CTO直接开问,和他聊天有点像和我实验室导师聊天的感觉,和蔼可亲,一半技术一半学习态度吧,问得不是很深
后面就是聊一些实验室里面的项目、成长、实验室负责人的日常工作。
三面完之后当天,晚上 7 点多 HR 打电话过来说开始最后一面,微信视频面,hr 说电脑好像有什么问题,然后添加微信进行面试。
hr 面完后隔周有 oc,然后发 offer