大家好,我是二哥呀。
我上网浏览了一些关于海康威视的帖子,尤其是这次的全员会,透漏了 2 个不那么体面的讯息:
-
年假规则调整,优先休法定年假,法定的休完了才能休司龄假;
-
薪资普调的时代过去了,以后绩效特别高的才可能小幅度加薪。
认真读了大家的评论,能感受到不小的负面情绪。有说体面厂没落了,有说快倒闭了,有说去海康威视就是“饥不择食”。。。
每个人都有发表自己意见的权利,所以我不会选择杠,而是通过数据给大家盘点一下海康威视的薪资和岗位,让大家通过最直观的信息去感受一下,再下结论。
先说 25 届的秋招薪资,我是通过 offershow 统计的,涉及到测试、开发、算法、技术支持。
-
硕士 211 非科班,测试岗,开了 15k,还有 2-4 个月的年终奖,base 杭州
-
硕士 985,开发岗,开了 24k,12% 的公积金,月工资包含 20% 的绩效奖,base 杭州
-
硕士 985,AI 算法,开了 25k,不能 A,base 杭州
-
硕士海归,技术支持岗,开了 15k,实习工资不打折,base 杭州
-
硕士 211,应用软件开发,开了 16k,西安比杭州低了 2k,base 西安
能看得出来,海康威视的薪资和小米南京地区的差不多,20k 是个坎,大部分能开在 15k、16k,和互联网大厂虽然没法比,但比其他行业仍然是“体面”不少。
尤其适合双非本、双非硕的小伙伴,没能拿到大厂 offer 的小伙伴;千万不要因噎废食,自己宁愿没 offer 也不愿意去,那可真就贻笑大方了。
我不是为海康威视讲好话,而是真真切切希望大家都能上岸。25 届校招依然在进行当中,软件开发、技术支持岗的需求是非常靠前的,像软件开发岗,Web、C/CPP/C#、Android/IOS、Java 方向都有可以。
接下来,我们就以《Java 面试指南》中收录的海康威视面经同学 4 为例,来看看体面厂的面试难度。
背八股就认准三分恶的面渣逆袭
题目不多,难度也不大,基本上围绕着我给大家强调的 Java 后端四大件中的 Java 并发编程篇展开。
海康威视面经同学 4
Redis部署
我是直接在本地部署的单机版,只需要下载 Redis 的安装包,解压后运行
redis-server
命令即可。
也可以通过 Docker 拉取 Redis 镜像,然后运行容器。
docker run -d --name redis -p 6379:6379 redis
java中锁种类
按照锁的使用方式来分类的话,Java 中的锁可以分为两大类:悲观锁和乐观锁。悲观锁的代表就是 synchronized 关键字,乐观锁的代表就是 CAS。
使用乐观锁时有线程过来修改数据,此时应该怎么做
此时可以重新读取数据并再次尝试更新,直到成功为止或达到最大重试次数。
读取数据 -> 尝试更新 -> 成功(返回成功)
|
-> 失败 -> 重试 -> 达到最大次数 -> 返回失败
类似这样:
class CasRetryExample {
private static AtomicInteger counter = new AtomicInteger(0);
private static final int MAX_RETRIES = 5;
public static void main(String[] args) {
boolean success = false;
int retries = 0;
while (retries int currentValue = counter.get();
boolean updated = counter.compareAndSet(currentValue, currentValue + 1);
if (updated) {
System.out.println("更新成功,当前值: " + counter.get());
success = true;
break;
} else {
retries++;
System.out.println("更新失败,进行第 " + retries + " 次重试");
}
}
if (!success) {
System.out.println("达到最大重试次数,操作失败");
}
}
}
什么场景下用乐观锁,什么场景下用悲观锁?
乐观锁,是个乐观派,总是假设对共享资源的访问没有冲突,线程可以不停地执行,无需加锁也无需等待,通常使用 CAS 的技术来保证线程执行的安全性。
多用于“读多写少“的环境,避免频繁加锁影响性能。
自旋锁是什么,自旋锁会一直等待吗
自旋锁是指当线程尝试获取锁时,如果锁已经被占用,线程不会立即阻塞,而是
通过自旋
,也就是循环等待的方式不断尝试获取锁,通常依赖于 CAS 来实现。
线程1 线程2
| |
| 获取锁成功 | 尝试获取锁
|------------>|(锁已被占用,自旋等待)
| 释放锁 |
| | |
默认情况下,自旋锁会一直等待,直到获取到锁为止。但是,在实际开发中,通常会设置自旋次数或者超时时间。如果超过阈值,线程可以选择放弃锁或者进入阻塞状态。
自旋锁的劣势是什么?
如果锁被占用时间过长,会导致线程空转,浪费 CPU 资源。
对协程的了解,为什么协程比线程还有更低的资源消耗
协程被视为比线程更轻量级的并发单元,可以在单线程中实现并发执行,由我们开发者显式调度。
我们可以使用 CompletableFuture 来模拟协程式的异步执行任务。比如说我们创建两个 CompletableFuture 对象来异步执行两个简单的数值返回任务。这两个任务都会休眠 1 秒钟来模拟耗时计算。
然后我们使用 thenCombine 方法来合并这两个任务的结果。最后,我们通过 get 方法等待最终结果的完成,并打印出来。
class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 异步执行任务1
CompletableFuture future1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();