鸭鸭摸鱼之际刷到一条新闻:微软正在为 Teams 办公软件开发定位检测新功能。
不是哥们,还能不能好好摸鱼玩耍了!
这个Teams新功能,主打一个“精准定位”。
只要你笔记本一连公司Wi-Fi,它就能通过 SSID 识别你的位置,get 到你的实时坐标。并自动将你的状态更新为“在办公室”。再也不需要自己手动打开 App 才能切换地点。这也意味着,如果你离开办公室,Wi-Fi 断开,他也会自动切换状态。
虽然从管理角度看,这绝对是效率神器。 特别是混合办公模式下,再也不用挨个问“你到公司了吗?”,协作安排一目了然。
但大好摸鱼时光就这样一去不复返了!

有同学可能说,我又不居家办公,本来就和我也没什么关系。
但这个这项技术不局限于依靠 Wi-Fi 定位,还可以结合办公室桌上的扩展设备,更精准地协同定位,
这可不一定局限在办公室和居家了。
目前微软表示,这项功能在 12 月上线后,不会默认启用,必须由人事或 IT 管理员等高权限管理员手动启用,且员工必须手动同意才能启用 Wi-Fi 打卡,启用后员工也保有取消权,可随时决定是否向同事分享自己所在的位置。
不过实际使用中如何,那还得看正式上线。
技术本身是中立的,但如何使用,决定了它是“效率神器”还是“监控工具”。
今天和大家分享一篇 Java 字节后端社招一面,整场面试大约 50 min 。

更多大厂面经、程序员面试题库,欢迎访问:面试鸭
进程和线程的区别是什么?
进程:是资源分配的基本单位,每个进程都有自己独立的内存空间(代码段、数据段、堆栈等),可以看作是一个正在运行的程序实例。进程之间是相互独立的。
线程:是 CPU 调度的基本单位,属于进程,一个进程中可以包含多个线程。线程共享进程的内存空间和资源(如文件句柄、数据段),但每个线程有自己独立的栈和寄存器。
其它区别:
- 资源消耗不同:进程时需要为其分配独立的内存空间和系统资源,创建和切换进程的开销较大。线程间共享进程的资源,创建线程所需的开销较小,线程切换的开销也远小于进程切换。
- 通信方式:因为各自独立的内存空间,进程间通信(IPC)较为复杂,需要使用管道、消息队列、共享内存、套接字等方式。同一进程内的线程共享内存空间,因此线程直接读写内存即可,但注意需要使用同步机制避免数据错误。
线程同步的方式有哪些?
Java 中常见的同步方式
synchronized
Java 提供的加锁关键字,用于在方法或代码块上加锁,以确保同一时刻只有一个线程能够执行被同步的方法或代码块。
在 synchronized 可以使用 wait()、notify() 和 notifyAll() 实现条件等待通知。
- wait():当前线程进入等待状态,直到被其他线程唤醒。必须在同步块或同步方法中调用。
- notify():唤醒一个等待的线程。如果有多个线程在等待,同一时刻只能唤醒一个。
- notifyAll():唤醒所有等待的线程。
例如在 synchronized 块或方法中,可以使用 wait() 方法使线程等待某个条件满足,可使用 notify() 或 notifyAll() 方法唤醒等待的线程。
ReentrantLock
是 JUC (java.util.concurrent)提供的可重入锁,相比 synchronized 它更加灵活,
ReentrantLock 使用 Condition 对象来提供了更灵活的等待/通知机制。每个 ReentrantLock 可以创建一个或多个 Condition 对象,通过 newCondition() 方法创建。
- await():使当前线程等待,直到收到信号或被中断。
- signal():唤醒一个等待线程。
- signalAll():唤醒所有等待线程。
相比于 synchronized,ReentrantLock 还提供了公平锁和非公平锁机制。
两个线程共享变量时如何避免冲突?
- 可以通过同步锁,比如 synchronized、ReentrantLock。
- 通过原子类,如 AtomicReference 等。
- 通过一些线程安全的集合,比如 ConcurrentHashMap。
文章篇幅有限,更多面经解析,访问面试鸭获取。

被折叠的 条评论
为什么被折叠?



