8.22晚开始的面试,其实我确实没有怎么准备QAQ,比较菜
上来先是做了2个代码题,然后由于我之前很少用牛客网的代码编辑器做过题,刷leetcode习惯了,代码倒是特别快的写完了,但是一直特别蠢的在搞编译错误问题,后来刚搞好,我的网断了!是的,你没听错,网整个断掉了!
然后,面试官给我打来了电话,开始了漫长的电话面试
我忽然发现,我快忘完了,因为面试完我就放飞了
hashmap 设计原理,树化的阈值为什么为8
设计模式,随口说了一句单例模式,聊了好久好久单例的doubleCheck,中间涉及到加锁和类加载过程
数据库分库分表,分库分表的概念,中间会出情景题,比如给你一个QQ号表,怎么拆分,比如如何提高单库的写入
我的项目都是用Java技术栈搞的嘛,感觉就直接跳过了😂,开始问我在实习期间做的工作
感觉和转正答辩有点像,会问你为什么做这件事,然后你如果提过的结论数据也会问的比较具体
我的工作涉及到了RPC,rabbitmq啥的,然后就一直在聊这两个
TCP 三次握手,TCP的报文内容,流量控制,拥赛控制
Linux查看内存CPU命令
虚拟内存的实现原理,分页分段
虽然问题少,但是真的聊的时间不短的
最后还问了转语言意愿和工作地点问题
我的天,真的记不清了问什么了。。。。,总之面试风格就是抓住一个点一直问一直问,不停的考验你的逻辑,中间会设计具体的情景
2个代码题也不难
单链表和双链表的翻转
写的比较乱,但是主要除去创建和打印部分,还是挺简单的,切成C++的编译器看了看,创建和打印直接都给写好的函数,好吧,我要苦逼的自己一个个写,就显得多了些
import java.util.Scanner;
public class Main {
static void print(Node head) {
while (head != null) {
System.out.print(head.val + " ");
head = head.next;
}
System.out.println();
}
static void print1(DNode head) {
while (head != null) {
System.out.print(head.val + " ");
head = head.next;
}
System.out.println();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Node head = new Node(-1);
Node p = head;
int val;
//创建单链表
for (int i = 0; i < n; i++) {
val = in.nextInt();
Node newNode = new Node(val);
p.next = newNode;
p = p.next;
}
//反转单链表
Node pre = null;
Node q = head.next;
Node next;
while (q != null) {
next = q.next;
q.next = pre;
pre = q;
q = next;
}
head.next = pre;
int m = in.nextInt();
DNode Dhead = new DNode(-1);
DNode pp = Dhead;
//创建双链表
for (int i = 0; i < m; i++) {
val = in.nextInt();
DNode newNode = new DNode(val);
pp.next = newNode;
newNode.pre = pp;
pp = pp.next;
}
//反转双链表
DNode ppre = null;
DNode pq = Dhead.next;
DNode pnext;
while (pq != null) {
pnext = pq.next;
pq.next = ppre;
pq.pre = pnext;
ppre = pq;
pq = pnext;
}
Dhead.next = ppre;
print(head.next);
print1(Dhead.next);
}
}
class Node {
int val;
Node next;
Node(int v) {
this.val = v;
}
}
class DNode {
int val;
DNode next;
DNode pre;
DNode(int v) {
this.val = v;
}
}
统计一个有符号整数二进制1的个数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int val = in.nextInt();
int cnt = 0;
while(val!=0){
++cnt;
val = val & (val-1);//直接统计1的部分,会将0直接跳过
}
System.out.println(cnt);
}
}
蹲个二面吧