2025.3.10 学习
八股
blocked和waiting有啥区别
触发条件:线程进入BLOCKED状态通常是因为试图获取一个对象的锁(monitor lock),但该锁已经被另一个线程持有。这通常发生在尝试进入synchronized块或方法时,如果锁已被占用,则线程将被阻塞直到锁可用。线程进入WAITING状态是因为它正在等待另一个线程执行某些操作,例如调用Object.wait()方法、Thread.join()方法或LockSupport.park()方法。在这种状态下,线程将不会消耗CPU资源,并且不会参与锁的竞争。
唤醒机制:当一个线程被阻塞等待锁时,一旦锁被释放,线程将有机会重新尝试获取锁。如果锁此时未被其他线程获取,那么线程可以从BLOCKED状态变为RUNNABLE状态。线程在WAITING状态中需要被显式唤醒。例如,如果线程调用了Object.wait(),那么它必须等待另一个线程调用同一对象上的Object.notify()或Object.notifyAll()方法才能被唤醒。
线程的三种创建方法:
1.继承Thread类并重写run方法
2.实现Runnable接口并实现run方法,然后用
Thread t1= new Thread(new MyRunnable);
的方法创建
3.实现Callable接口与FutureTask
class MyCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {// 线程执行的代码,这里返回一个整型结果return 1;}
}public static void main(String[] args) {MyCallable task = new MyCallable();FutureTask<Integer> futureTask = new FutureTask<>(task);Thread t = new Thread(futureTask);t.start();try {Integer result = futureTask.get(); // 获取线程执行结果System.out.println("Result: " + result);
} catch (InterruptedException | ExecutionException e) {e.printStackTrace();
}
}
wait和sleep的区别
wait使线程进入waiting状态,需要等待其他的线程调用notify或者notifyall唤醒。
sleep使线程让出cpu的使用权,进入 timed_waiting状态
java中线程的状态
new
Runnable
Waiting
Timed_Waiting
Blocked:尝试进入Syncronized代码块但没有获取到监管者锁
TERMINATED:运行结束
2025.3.11 学习
函数式接口
只有一个函数的接口就是函数式接口
匿名内部类
看以下两个例子:
方法一
观察这两种创建新线程的方法,可以看到方法一是用传统的方式,先创建一个继承了Thread类的新的类,然后再new一个该类的对象。而方法二用了匿名内部类的方式,本质上也创建了一个继承Thread的新类,但是这个类没有名字,直接被用于new对象了。
方法三:
public class ThreadStudy{void function1{Thread t1=(()->{...});}
}
用的是Lambda表达式,是因为Thread本身有一个构造函数是
而Runnable是一个接口
可以看到这个接口只有一个函数(所以是函数式接口)
不过现在有一个问题,那就是使用lambda表达式时,编译时怎么判断Thread调用的是哪个构造函数呢?Thread
类有一个单参数的构造函数 public Thread(Runnable target)
,它接受一个 Runnable
类型的参数。Lambda 表达式 () -> { ... }
的函数签名与 Runnable
接口的 run()
方法完全匹配(意思是函数参数都是空,都没有返回值),因此编译器会自动将 Lambda 表达式推断为实现 Runnable
接口,并匹配到 Thread
的单参数构造函数。
微信支付一面 3.12 已挂
1.自我介绍
2.项目讲一讲
3.实习讲一讲
4.模型微调咋做的
5.jsonL文件可能有多大?
6.大文件怎么解决呢?
这里我说是放到oss里
7.你觉得主要难点是什么
(毫无并发的功能,我只能说逻辑上比较复杂了啊,有没有高手知道这种问题怎么聊的好一点)
8.说一说你理解的mysql,redis,rocketMQ之间的区别
9.你部署过项目对吧,说一说怎么部署的
腾讯云+宝塔linux,nginx反向代理解决跨域,数据库也上云
10.redis分布式锁咋实现的
11.手撕
判断完全二叉树
反转链表
总共60min,第一题怎么构造输入啊?这种是要我自己构造个前序遍历和中序遍历的输入,然后把树读进来,读完再判断,是这意思吗,现场没做出来。第二天挂,发了感谢信
牵手app一面 3.19
1.自我介绍
2.说一说自己做过的项目有什么难点
3.说一说三次握手和四次挥手的过程
4.解除连接过程能不能三次挥手?
可以的,被动解除方没有数据包要传输,并且开启了延迟确认机制
5.vue双向绑定原理?
6.缓存三兄弟
7.怎么解决,redis持久化机制
8.mysql什么时候建索引
9.可以随便建吗
10.分析器什么时候选择走索引
11.什么时候索引失效
12.mysql事务隔离级别
13.解决了什么问题
14.说一说实习和项目中哪些用到ai相关的?
实习做了点模型微调,项目里调过api做了个ai智能问答网站
15.反问
40分钟,没有手撕,第二天过了