互联网是有记忆的,很多有趣的想法都会稍纵即逝,希望我们将其留在互联网上!(以下是面试官和小菜(本人)对话::)
1,面试官
1,简单介绍下自己,包括熟悉的技术栈,会哪些中间件,讲下最近项目架构情况,或者说遇到问题以及是怎么解决的? (画外音: 这都是常规问题了)
2,有点面试官会根据你的描述用到的技术提问,比如你聊到你的项目中遇到并发 访问,会用到netty ,
面试官就会欠欠的打断你, 那我问下,netty 是什么 ,他的实现原理是什么?
3, 面试官问? 用过springcloud alibaba 那 用到了他的哪些组件呢?
小菜: 用到了,注册中心nacos , 分布式事务seat , 分布式定时任务scheduleX , 限流器sentinel , ?小菜一慌 说就这些?
面试官追问? 没有到网关么?
小菜: 卧槽这咋能忘了,服务网关gategrory 用到了,(面试官想这是啥水平啊,这都不先说)
4,面试官问了: 那你用到了nacos 说说他是什么模式的,? 他又说了cp 还是 ap ?
小菜(如果(cp ap 是啥子)cap 哦哦 ! c 一致性,a p 分区可用性) 该怎么回答呢?
蒙一个ap
面试官:嗯,那naocs也是支持cp 的 就是需要配置,
5, 笔试面试官:手写一个单例:
// 饿汉模式
public class singleton {// 私有构造方法pirvate singleton ();// 私有实例化pivate static final Singleton singleton = new Singleton();// 公有开放一个实例化public static Singleton get(){return single;}
}// 懒汉
public class Singleton {// 私有构造方法pirvate singleton ();// 私有实例化pivate static Singleton singleton = null;// 公有开放一个实例化public synchronized static Singleton get(){if (single=null ){return new Singleton();}}
}
面试官追问:或者当你只写出一个饿汉模式 , 他就问了 ,这样有啥问题?
小菜:总的来说,饿汉模式和懒汉模式各有其适用场景和优缺点。饿汉模式确保了单例对象的早期可用性并且线程安全,适合对性能要求不高但对可靠性有较高要求的场景。而懒汉模式则更适合对性能有较高要求的场景,因为它延迟了对象的初始化,减少了资源的占用,但需要额外的同步措施来保证线程安全。
面试官: 手写一个多线程的生产者消费者?
小菜: (这又是难为我,造飞机开始了,接下来他肯定会问多线程问题)
public class HelloWorld {public static void main(String []args) {System.out.println("Hello World");
Data data = new Data();new Thread( ()-> {data.increment();}, "A").start();new Thread( ()-> {data.decrement();}, "B").start();}class Data {private int num = 0;// JUC 生产者 +1public synchronized void increment() {if(num != 0) {this.wait();}num++;System.out.print("a==" + num);this.notifyAll();}// 消费者 -1public synchronized void decrement() {if(num == 0) {this.wait();}num--;System.out.print("b==" + num);this.notifyAll();}}}
面试官: 手写冒泡吧, 还记得不?
小菜: 心里疯狂xxxxbbbbb, 这项目中会用到,fuck ,不信你会用到,,,于是含泪写下
public static void main(String[] args) {//冒泡排序,简单的演示一下,冒泡循环主要进行每一趟遍历查找最大的值,放在最右边右边int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};for (int i = 0; i < arr.length - 1; i++) {//arr.length - 1是因为每一趟,两两对比都不需要与自身对比,所以减去自身for (int j = 0; j < arr.length - 1 - i; j++) {//arr.length - 1 - i,是因为每一趟都会比上一趟减少比较一次if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}//进行打印结果for (int i : arr) {System.out.println(i);}}